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
@@ -9,6 +9,7 @@ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
9
9
  import { join } from 'node:path';
10
10
  import { homedir } from 'node:os';
11
11
  import webpush from 'web-push';
12
+ import { Debouncer } from './utils/index.js';
12
13
  const DATA_DIR = join(homedir(), '.codeman');
13
14
  const KEYS_FILE = join(DATA_DIR, 'push-keys.json');
14
15
  const SUBS_FILE = join(DATA_DIR, 'push-subscriptions.json');
@@ -16,7 +17,7 @@ const SAVE_DEBOUNCE_MS = 500;
16
17
  export class PushSubscriptionStore {
17
18
  vapidKeys = null;
18
19
  subscriptions = new Map();
19
- saveTimer = null;
20
+ saveDeb = new Debouncer(SAVE_DEBOUNCE_MS);
20
21
  _disposed = false;
21
22
  constructor() {
22
23
  this.loadSubscriptions();
@@ -136,11 +137,7 @@ export class PushSubscriptionStore {
136
137
  scheduleSave() {
137
138
  if (this._disposed)
138
139
  return;
139
- if (this.saveTimer)
140
- clearTimeout(this.saveTimer);
141
- this.saveTimer = setTimeout(() => {
142
- this.flushSave();
143
- }, SAVE_DEBOUNCE_MS);
140
+ this.saveDeb.schedule(() => this.flushSave());
144
141
  }
145
142
  /** Immediately persist subscriptions to disk */
146
143
  flushSave() {
@@ -157,12 +154,7 @@ export class PushSubscriptionStore {
157
154
  if (this._disposed)
158
155
  return;
159
156
  this._disposed = true;
160
- if (this.saveTimer) {
161
- clearTimeout(this.saveTimer);
162
- this.saveTimer = null;
163
- }
164
- // Final flush
165
- this.flushSave();
157
+ this.saveDeb.flush(() => this.flushSave());
166
158
  }
167
159
  }
168
160
  //# sourceMappingURL=push-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"push-store.js","sourceRoot":"","sources":["../src/push-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,OAAO,MAAM,UAAU,CAAC;AAG/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACnD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC;AAC5D,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,MAAM,OAAO,qBAAqB;IACxB,SAAS,GAAqB,IAAI,CAAC;IACnC,aAAa,GAAwC,IAAI,GAAG,EAAE,CAAC;IAC/D,SAAS,GAA0B,IAAI,CAAC;IACxC,SAAS,GAAG,KAAK,CAAC;IAE1B;QACE,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,iCAAiC;IACjC,YAAY;QACV,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC;QAE1C,wBAAwB;QACxB,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;gBAC9C,OAAO,IAAI,CAAC,SAAS,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,4BAA4B;YAC9B,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,CAAC;QAEF,UAAU;QACV,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,uDAAuD;IACvD,YAAY;QACV,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC;IACvC,CAAC;IAED,wEAAwE;IACxE,eAAe,CAAC,GAA+C;QAC7D,qDAAqD;QACrD,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxD,IAAI,QAAQ,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACvC,kBAAkB;gBAClB,MAAM,OAAO,GAA2B;oBACtC,GAAG,QAAQ;oBACX,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;oBACtB,eAAe,EAAE,GAAG,CAAC,eAAe;iBACrC,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAC5C,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,MAAM,GAA2B;YACrC,GAAG,GAAG;YACN,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;SACvB,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,iDAAiD;IACjD,iBAAiB,CAAC,EAAU,EAAE,WAAoC;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,GAAG,CAAC,eAAe,GAAG,WAAW,CAAC;QAClC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,4BAA4B;IAC5B,kBAAkB,CAAC,EAAU;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,OAAO;YAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,8EAA8E;IAC9E,gBAAgB,CAAC,QAAgB;QAC/B,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3C,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,sCAAsC;IACtC,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED,mCAAmC;IAC3B,iBAAiB;QACvB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6B,CAAC;YACxD,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAED,gCAAgC;IACxB,YAAY;QAClB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,IAAI,CAAC,SAAS;YAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACvB,CAAC;IAED,gDAAgD;IACxC,SAAS;QACf,IAAI,CAAC;YACH,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7F,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,OAAO;QACL,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,cAAc;QACd,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;CACF"}
1
+ {"version":3,"file":"push-store.js","sourceRoot":"","sources":["../src/push-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * @fileoverview RalphFixPlanWatcher - Watches @fix_plan.md for changes
3
+ *
4
+ * Monitors the @fix_plan.md file in the session's working directory
5
+ * for changes, parsing todo items from the markdown format.
6
+ *
7
+ * Extracted from ralph-tracker.ts as part of domain splitting.
8
+ *
9
+ * @module ralph-fix-plan-watcher
10
+ */
11
+ import { EventEmitter } from 'node:events';
12
+ import type { RalphTodoPriority, RalphTodoItem } from './types.js';
13
+ /**
14
+ * Generate @fix_plan.md content from todo items.
15
+ * Groups todos by priority and status.
16
+ *
17
+ * @param todos - Array of todo items
18
+ * @returns Markdown content for @fix_plan.md
19
+ */
20
+ export declare function generateFixPlanMarkdown(todos: RalphTodoItem[]): string;
21
+ /**
22
+ * Parse @fix_plan.md content and return parsed todo items.
23
+ *
24
+ * @param content - Markdown content from @fix_plan.md
25
+ * @param parsePriority - Function to parse priority from content text
26
+ * @param generateTodoId - Function to generate stable todo ID from content
27
+ * @returns Array of parsed todo items
28
+ */
29
+ export declare function importFixPlanMarkdown(content: string, parsePriority: (content: string) => RalphTodoPriority, generateTodoId: (content: string) => string): RalphTodoItem[];
30
+ /**
31
+ * RalphFixPlanWatcher - Watches @fix_plan.md for changes.
32
+ *
33
+ * Events emitted:
34
+ * - `todosLoaded` - Emits parsed todo items when @fix_plan.md is loaded/changed
35
+ * - `enabled` - Emits when tracker should be auto-enabled (todos loaded from file)
36
+ */
37
+ export declare class RalphFixPlanWatcher extends EventEmitter {
38
+ /** Working directory for @fix_plan.md watching */
39
+ private _workingDir;
40
+ /** Path to the @fix_plan.md file being watched */
41
+ private _fixPlanPath;
42
+ /** File watcher for @fix_plan.md */
43
+ private _fixPlanWatcher;
44
+ /** Error handler for FSWatcher (stored for cleanup to prevent memory leak) */
45
+ private _fixPlanWatcherErrorHandler;
46
+ /** Debounce timer for file change events */
47
+ private _fixPlanReloadTimer;
48
+ /** Priority parser injected from parent (for importFixPlanMarkdown) */
49
+ private _parsePriority;
50
+ /** Todo ID generator injected from parent */
51
+ private _generateTodoId;
52
+ constructor(parsePriority: (content: string) => RalphTodoPriority, generateTodoId: (content: string) => string);
53
+ /**
54
+ * When @fix_plan.md is active, treat it as the source of truth for todo status.
55
+ * This prevents output-based detection from overriding file-based status.
56
+ */
57
+ get isFileAuthoritative(): boolean;
58
+ /**
59
+ * Set the working directory and start watching @fix_plan.md.
60
+ * Automatically loads existing @fix_plan.md if present.
61
+ * @param workingDir - The session's working directory
62
+ */
63
+ setWorkingDir(workingDir: string): void;
64
+ /**
65
+ * Load @fix_plan.md from disk if it exists.
66
+ * Called on initialization and when file changes are detected.
67
+ */
68
+ loadFixPlanFromDisk(): Promise<number>;
69
+ /**
70
+ * Start watching @fix_plan.md for changes.
71
+ * Reloads todos when the file is modified.
72
+ */
73
+ private startWatchingFixPlan;
74
+ /**
75
+ * Handle @fix_plan.md file change with debouncing.
76
+ */
77
+ private handleFixPlanChange;
78
+ /**
79
+ * Stop watching @fix_plan.md.
80
+ */
81
+ stopWatchingFixPlan(): void;
82
+ /**
83
+ * Stop watching and clean up all resources.
84
+ */
85
+ stop(): void;
86
+ /**
87
+ * Clean up all resources.
88
+ */
89
+ destroy(): void;
90
+ }
91
+ //# sourceMappingURL=ralph-fix-plan-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ralph-fix-plan-watcher.d.ts","sourceRoot":"","sources":["../src/ralph-fix-plan-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAmB,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIpF;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,CA0EtE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,iBAAiB,EACrD,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAC1C,aAAa,EAAE,CA2EjB;AAED;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,kDAAkD;IAClD,OAAO,CAAC,WAAW,CAAuB;IAE1C,kDAAkD;IAClD,OAAO,CAAC,YAAY,CAAuB;IAE3C,oCAAoC;IACpC,OAAO,CAAC,eAAe,CAA0B;IAEjD,8EAA8E;IAC9E,OAAO,CAAC,2BAA2B,CAAuC;IAE1E,4CAA4C;IAC5C,OAAO,CAAC,mBAAmB,CAA+B;IAE1D,uEAAuE;IACvE,OAAO,CAAC,cAAc,CAAyC;IAE/D,6CAA6C;IAC7C,OAAO,CAAC,eAAe,CAA8B;gBAEzC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,iBAAiB,EAAE,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM;IAM9G;;;OAGG;IACH,IAAI,mBAAmB,IAAI,OAAO,CAEjC;IAED;;;;OAIG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAWvC;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAwB5C;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAmC5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAgB3B;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,326 @@
1
+ /**
2
+ * @fileoverview RalphFixPlanWatcher - Watches @fix_plan.md for changes
3
+ *
4
+ * Monitors the @fix_plan.md file in the session's working directory
5
+ * for changes, parsing todo items from the markdown format.
6
+ *
7
+ * Extracted from ralph-tracker.ts as part of domain splitting.
8
+ *
9
+ * @module ralph-fix-plan-watcher
10
+ */
11
+ import { EventEmitter } from 'node:events';
12
+ import { readFile } from 'node:fs/promises';
13
+ import { existsSync, watch as fsWatch } from 'node:fs';
14
+ import { join } from 'node:path';
15
+ // ========== @fix_plan.md Generation & Import Utility Functions ==========
16
+ /**
17
+ * Generate @fix_plan.md content from todo items.
18
+ * Groups todos by priority and status.
19
+ *
20
+ * @param todos - Array of todo items
21
+ * @returns Markdown content for @fix_plan.md
22
+ */
23
+ export function generateFixPlanMarkdown(todos) {
24
+ const lines = ['# Fix Plan', ''];
25
+ // Group by priority
26
+ const p0 = [];
27
+ const p1 = [];
28
+ const p2 = [];
29
+ const noPriority = [];
30
+ const completed = [];
31
+ for (const todo of todos) {
32
+ if (todo.status === 'completed') {
33
+ completed.push(todo);
34
+ }
35
+ else if (todo.priority === 'P0') {
36
+ p0.push(todo);
37
+ }
38
+ else if (todo.priority === 'P1') {
39
+ p1.push(todo);
40
+ }
41
+ else if (todo.priority === 'P2') {
42
+ p2.push(todo);
43
+ }
44
+ else {
45
+ noPriority.push(todo);
46
+ }
47
+ }
48
+ // High Priority (P0)
49
+ if (p0.length > 0) {
50
+ lines.push('## High Priority (P0)');
51
+ for (const todo of p0) {
52
+ const checkbox = todo.status === 'in_progress' ? '[-]' : '[ ]';
53
+ lines.push(`- ${checkbox} ${todo.content}`);
54
+ }
55
+ lines.push('');
56
+ }
57
+ // Standard (P1)
58
+ if (p1.length > 0) {
59
+ lines.push('## Standard (P1)');
60
+ for (const todo of p1) {
61
+ const checkbox = todo.status === 'in_progress' ? '[-]' : '[ ]';
62
+ lines.push(`- ${checkbox} ${todo.content}`);
63
+ }
64
+ lines.push('');
65
+ }
66
+ // Nice to Have (P2)
67
+ if (p2.length > 0) {
68
+ lines.push('## Nice to Have (P2)');
69
+ for (const todo of p2) {
70
+ const checkbox = todo.status === 'in_progress' ? '[-]' : '[ ]';
71
+ lines.push(`- ${checkbox} ${todo.content}`);
72
+ }
73
+ lines.push('');
74
+ }
75
+ // Tasks (no priority)
76
+ if (noPriority.length > 0) {
77
+ lines.push('## Tasks');
78
+ for (const todo of noPriority) {
79
+ const checkbox = todo.status === 'in_progress' ? '[-]' : '[ ]';
80
+ lines.push(`- ${checkbox} ${todo.content}`);
81
+ }
82
+ lines.push('');
83
+ }
84
+ // Completed
85
+ if (completed.length > 0) {
86
+ lines.push('## Completed');
87
+ for (const todo of completed) {
88
+ lines.push(`- [x] ${todo.content}`);
89
+ }
90
+ lines.push('');
91
+ }
92
+ return lines.join('\n');
93
+ }
94
+ /**
95
+ * Parse @fix_plan.md content and return parsed todo items.
96
+ *
97
+ * @param content - Markdown content from @fix_plan.md
98
+ * @param parsePriority - Function to parse priority from content text
99
+ * @param generateTodoId - Function to generate stable todo ID from content
100
+ * @returns Array of parsed todo items
101
+ */
102
+ export function importFixPlanMarkdown(content, parsePriority, generateTodoId) {
103
+ const lines = content.split('\n');
104
+ const newTodos = [];
105
+ let currentPriority = null;
106
+ // Patterns for section headers
107
+ const p0HeaderPattern = /^##\s*(High Priority|Critical|P0)/i;
108
+ const p1HeaderPattern = /^##\s*(Standard|P1|Medium Priority)/i;
109
+ const p2HeaderPattern = /^##\s*(Nice to Have|P2|Low Priority)/i;
110
+ const completedHeaderPattern = /^##\s*Completed/i;
111
+ const tasksHeaderPattern = /^##\s*Tasks/i;
112
+ // Pattern for todo items
113
+ const todoPattern = /^-\s*\[([ x-])\]\s*(.+)$/;
114
+ let inCompletedSection = false;
115
+ for (const line of lines) {
116
+ const trimmed = line.trim();
117
+ // Check for section headers
118
+ if (p0HeaderPattern.test(trimmed)) {
119
+ currentPriority = 'P0';
120
+ inCompletedSection = false;
121
+ continue;
122
+ }
123
+ if (p1HeaderPattern.test(trimmed)) {
124
+ currentPriority = 'P1';
125
+ inCompletedSection = false;
126
+ continue;
127
+ }
128
+ if (p2HeaderPattern.test(trimmed)) {
129
+ currentPriority = 'P2';
130
+ inCompletedSection = false;
131
+ continue;
132
+ }
133
+ if (completedHeaderPattern.test(trimmed)) {
134
+ inCompletedSection = true;
135
+ continue;
136
+ }
137
+ if (tasksHeaderPattern.test(trimmed)) {
138
+ currentPriority = null;
139
+ inCompletedSection = false;
140
+ continue;
141
+ }
142
+ // Parse todo item
143
+ const match = trimmed.match(todoPattern);
144
+ if (match) {
145
+ const [, checkboxState, todoContent] = match;
146
+ let status;
147
+ if (inCompletedSection || checkboxState === 'x' || checkboxState === 'X') {
148
+ status = 'completed';
149
+ }
150
+ else if (checkboxState === '-') {
151
+ status = 'in_progress';
152
+ }
153
+ else {
154
+ status = 'pending';
155
+ }
156
+ // Parse priority from content if not in a priority section
157
+ const parsedPriority = inCompletedSection ? null : currentPriority || parsePriority(todoContent);
158
+ const id = generateTodoId(todoContent);
159
+ newTodos.push({
160
+ id,
161
+ content: todoContent.trim(),
162
+ status,
163
+ detectedAt: Date.now(),
164
+ priority: parsedPriority,
165
+ });
166
+ }
167
+ }
168
+ return newTodos;
169
+ }
170
+ /**
171
+ * RalphFixPlanWatcher - Watches @fix_plan.md for changes.
172
+ *
173
+ * Events emitted:
174
+ * - `todosLoaded` - Emits parsed todo items when @fix_plan.md is loaded/changed
175
+ * - `enabled` - Emits when tracker should be auto-enabled (todos loaded from file)
176
+ */
177
+ export class RalphFixPlanWatcher extends EventEmitter {
178
+ /** Working directory for @fix_plan.md watching */
179
+ _workingDir = null;
180
+ /** Path to the @fix_plan.md file being watched */
181
+ _fixPlanPath = null;
182
+ /** File watcher for @fix_plan.md */
183
+ _fixPlanWatcher = null;
184
+ /** Error handler for FSWatcher (stored for cleanup to prevent memory leak) */
185
+ _fixPlanWatcherErrorHandler = null;
186
+ /** Debounce timer for file change events */
187
+ _fixPlanReloadTimer = null;
188
+ /** Priority parser injected from parent (for importFixPlanMarkdown) */
189
+ _parsePriority;
190
+ /** Todo ID generator injected from parent */
191
+ _generateTodoId;
192
+ constructor(parsePriority, generateTodoId) {
193
+ super();
194
+ this._parsePriority = parsePriority;
195
+ this._generateTodoId = generateTodoId;
196
+ }
197
+ /**
198
+ * When @fix_plan.md is active, treat it as the source of truth for todo status.
199
+ * This prevents output-based detection from overriding file-based status.
200
+ */
201
+ get isFileAuthoritative() {
202
+ return this._fixPlanPath !== null;
203
+ }
204
+ /**
205
+ * Set the working directory and start watching @fix_plan.md.
206
+ * Automatically loads existing @fix_plan.md if present.
207
+ * @param workingDir - The session's working directory
208
+ */
209
+ setWorkingDir(workingDir) {
210
+ this._workingDir = workingDir;
211
+ this._fixPlanPath = join(workingDir, '@fix_plan.md');
212
+ // Try to load existing @fix_plan.md
213
+ this.loadFixPlanFromDisk();
214
+ // Start watching for changes
215
+ this.startWatchingFixPlan();
216
+ }
217
+ /**
218
+ * Load @fix_plan.md from disk if it exists.
219
+ * Called on initialization and when file changes are detected.
220
+ */
221
+ async loadFixPlanFromDisk() {
222
+ if (!this._fixPlanPath)
223
+ return 0;
224
+ try {
225
+ if (!existsSync(this._fixPlanPath)) {
226
+ return 0;
227
+ }
228
+ const content = await readFile(this._fixPlanPath, 'utf-8');
229
+ const todos = importFixPlanMarkdown(content, this._parsePriority, this._generateTodoId);
230
+ if (todos.length > 0) {
231
+ this.emit('todosLoaded', todos);
232
+ console.log(`[RalphFixPlanWatcher] Loaded ${todos.length} todos from @fix_plan.md`);
233
+ }
234
+ return todos.length;
235
+ }
236
+ catch (err) {
237
+ // File doesn't exist or can't be read - that's OK
238
+ console.log(`[RalphFixPlanWatcher] Could not load @fix_plan.md: ${err}`);
239
+ return 0;
240
+ }
241
+ }
242
+ /**
243
+ * Start watching @fix_plan.md for changes.
244
+ * Reloads todos when the file is modified.
245
+ */
246
+ startWatchingFixPlan() {
247
+ if (!this._fixPlanPath || !this._workingDir)
248
+ return;
249
+ // Stop existing watcher if any
250
+ this.stopWatchingFixPlan();
251
+ try {
252
+ // Only watch if the file exists
253
+ if (!existsSync(this._fixPlanPath)) {
254
+ // Watch the directory instead for file creation
255
+ this._fixPlanWatcher = fsWatch(this._workingDir, (_eventType, filename) => {
256
+ if (filename === '@fix_plan.md') {
257
+ this.handleFixPlanChange();
258
+ }
259
+ });
260
+ }
261
+ else {
262
+ // Watch the file directly
263
+ this._fixPlanWatcher = fsWatch(this._fixPlanPath, () => {
264
+ this.handleFixPlanChange();
265
+ });
266
+ }
267
+ // Add error handler to prevent unhandled errors and clean up on failure
268
+ // Store handler reference for proper cleanup in stopWatchingFixPlan()
269
+ if (this._fixPlanWatcher) {
270
+ this._fixPlanWatcherErrorHandler = (err) => {
271
+ console.log(`[RalphFixPlanWatcher] FSWatcher error for @fix_plan.md: ${err.message}`);
272
+ this.stopWatchingFixPlan();
273
+ };
274
+ this._fixPlanWatcher.on('error', this._fixPlanWatcherErrorHandler);
275
+ }
276
+ }
277
+ catch (err) {
278
+ console.log(`[RalphFixPlanWatcher] Could not watch @fix_plan.md: ${err}`);
279
+ }
280
+ }
281
+ /**
282
+ * Handle @fix_plan.md file change with debouncing.
283
+ */
284
+ handleFixPlanChange() {
285
+ // Debounce rapid changes (e.g., multiple writes)
286
+ if (this._fixPlanReloadTimer) {
287
+ clearTimeout(this._fixPlanReloadTimer);
288
+ }
289
+ this._fixPlanReloadTimer = setTimeout(() => {
290
+ this._fixPlanReloadTimer = null;
291
+ this.loadFixPlanFromDisk();
292
+ }, 500); // 500ms debounce
293
+ }
294
+ /**
295
+ * Stop watching @fix_plan.md.
296
+ */
297
+ stopWatchingFixPlan() {
298
+ if (this._fixPlanWatcher) {
299
+ // Remove error handler before closing to prevent memory leak
300
+ if (this._fixPlanWatcherErrorHandler) {
301
+ this._fixPlanWatcher.off('error', this._fixPlanWatcherErrorHandler);
302
+ this._fixPlanWatcherErrorHandler = null;
303
+ }
304
+ this._fixPlanWatcher.close();
305
+ this._fixPlanWatcher = null;
306
+ }
307
+ if (this._fixPlanReloadTimer) {
308
+ clearTimeout(this._fixPlanReloadTimer);
309
+ this._fixPlanReloadTimer = null;
310
+ }
311
+ }
312
+ /**
313
+ * Stop watching and clean up all resources.
314
+ */
315
+ stop() {
316
+ this.stopWatchingFixPlan();
317
+ }
318
+ /**
319
+ * Clean up all resources.
320
+ */
321
+ destroy() {
322
+ this.stop();
323
+ this.removeAllListeners();
324
+ }
325
+ }
326
+ //# sourceMappingURL=ralph-fix-plan-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ralph-fix-plan-watcher.js","sourceRoot":"","sources":["../src/ralph-fix-plan-watcher.ts"],"names":[],"mappings":"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"}