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,224 @@
1
+ /**
2
+ * @fileoverview Auto-compact and auto-clear automation for Session.
3
+ *
4
+ * Monitors token counts and triggers /compact or /clear commands when
5
+ * configurable thresholds are reached. Waits for Claude to be idle
6
+ * before sending commands, with retry logic and mutual exclusion
7
+ * (compact and clear never run simultaneously).
8
+ *
9
+ * @module session-auto-ops
10
+ */
11
+ import { EventEmitter } from 'node:events';
12
+ // ============================================================================
13
+ // Timing Constants
14
+ // ============================================================================
15
+ /** Delay for auto-compact/clear retry attempts (2 seconds) */
16
+ const AUTO_RETRY_DELAY_MS = 2000;
17
+ /** Delay for auto-compact/clear initial check (1 second) */
18
+ const AUTO_INITIAL_DELAY_MS = 1000;
19
+ /** Cooldown after compact completes before re-enabling (10 seconds) */
20
+ const COMPACT_COOLDOWN_MS = 10000;
21
+ /** Cooldown after clear completes before re-enabling (5 seconds) */
22
+ const CLEAR_COOLDOWN_MS = 5000;
23
+ /** Minimum valid threshold for auto-clear/compact (1000 tokens) */
24
+ const MIN_AUTO_THRESHOLD = 1000;
25
+ /** Maximum valid threshold for auto-clear/compact (500k tokens) */
26
+ const MAX_AUTO_THRESHOLD = 500_000;
27
+ /** Default auto-clear threshold when invalid value provided */
28
+ const DEFAULT_AUTO_CLEAR_THRESHOLD = 140_000;
29
+ /** Default auto-compact threshold when invalid value provided */
30
+ const DEFAULT_AUTO_COMPACT_THRESHOLD = 110_000;
31
+ /**
32
+ * Manages auto-compact and auto-clear automation for a Session.
33
+ *
34
+ * When enabled, monitors token counts after each update and triggers
35
+ * /compact or /clear commands when thresholds are exceeded. Ensures
36
+ * mutual exclusion between compact and clear operations.
37
+ */
38
+ export class SessionAutoOps extends EventEmitter {
39
+ // Auto-compact state
40
+ _autoCompactThreshold;
41
+ _autoCompactEnabled = false;
42
+ _autoCompactPrompt = '';
43
+ _isCompacting = false;
44
+ _autoCompactTimer = null;
45
+ // Auto-clear state
46
+ _autoClearThreshold;
47
+ _autoClearEnabled = false;
48
+ _isClearing = false;
49
+ _autoClearTimer = null;
50
+ callbacks;
51
+ constructor(callbacks, config) {
52
+ super();
53
+ this.callbacks = callbacks;
54
+ this._autoCompactThreshold = config?.compactThreshold ?? DEFAULT_AUTO_COMPACT_THRESHOLD;
55
+ this._autoClearThreshold = config?.clearThreshold ?? DEFAULT_AUTO_CLEAR_THRESHOLD;
56
+ }
57
+ // ============================================================================
58
+ // Auto-compact getters/setters
59
+ // ============================================================================
60
+ get autoCompactThreshold() {
61
+ return this._autoCompactThreshold;
62
+ }
63
+ get autoCompactEnabled() {
64
+ return this._autoCompactEnabled;
65
+ }
66
+ get autoCompactPrompt() {
67
+ return this._autoCompactPrompt;
68
+ }
69
+ get isCompacting() {
70
+ return this._isCompacting;
71
+ }
72
+ setAutoCompact(enabled, threshold, prompt) {
73
+ this._autoCompactEnabled = enabled;
74
+ if (threshold !== undefined) {
75
+ if (threshold < MIN_AUTO_THRESHOLD || threshold > MAX_AUTO_THRESHOLD) {
76
+ console.warn(`[SessionAutoOps ${this.callbacks.getSessionId()}] Invalid autoCompact threshold ${threshold}, must be between ${MIN_AUTO_THRESHOLD} and ${MAX_AUTO_THRESHOLD}. Using default ${DEFAULT_AUTO_COMPACT_THRESHOLD}.`);
77
+ this._autoCompactThreshold = DEFAULT_AUTO_COMPACT_THRESHOLD;
78
+ }
79
+ else {
80
+ this._autoCompactThreshold = threshold;
81
+ }
82
+ }
83
+ if (prompt !== undefined) {
84
+ this._autoCompactPrompt = prompt;
85
+ }
86
+ }
87
+ // ============================================================================
88
+ // Auto-clear getters/setters
89
+ // ============================================================================
90
+ get autoClearThreshold() {
91
+ return this._autoClearThreshold;
92
+ }
93
+ get autoClearEnabled() {
94
+ return this._autoClearEnabled;
95
+ }
96
+ get isClearing() {
97
+ return this._isClearing;
98
+ }
99
+ setAutoClear(enabled, threshold) {
100
+ this._autoClearEnabled = enabled;
101
+ if (threshold !== undefined) {
102
+ if (threshold < MIN_AUTO_THRESHOLD || threshold > MAX_AUTO_THRESHOLD) {
103
+ console.warn(`[SessionAutoOps ${this.callbacks.getSessionId()}] Invalid autoClear threshold ${threshold}, must be between ${MIN_AUTO_THRESHOLD} and ${MAX_AUTO_THRESHOLD}. Using default ${DEFAULT_AUTO_CLEAR_THRESHOLD}.`);
104
+ this._autoClearThreshold = DEFAULT_AUTO_CLEAR_THRESHOLD;
105
+ }
106
+ else {
107
+ this._autoClearThreshold = threshold;
108
+ }
109
+ }
110
+ }
111
+ // ============================================================================
112
+ // Threshold checks
113
+ // ============================================================================
114
+ /**
115
+ * Check if auto-compact should be triggered based on current token count.
116
+ * Called after token count updates.
117
+ */
118
+ checkAutoCompact() {
119
+ if (this.callbacks.isStopped())
120
+ return;
121
+ if (!this._autoCompactEnabled || this._isCompacting || this._isClearing)
122
+ return;
123
+ const totalTokens = this.callbacks.getTotalTokens();
124
+ if (totalTokens >= this._autoCompactThreshold) {
125
+ this._isCompacting = true;
126
+ console.log(`[SessionAutoOps] Auto-compact triggered: ${totalTokens} tokens >= ${this._autoCompactThreshold} threshold`);
127
+ const checkAndCompact = async () => {
128
+ if (this.callbacks.isStopped())
129
+ return;
130
+ if (!this._isCompacting)
131
+ return;
132
+ if (!this.callbacks.isWorking()) {
133
+ if (this.callbacks.isStopped())
134
+ return;
135
+ const compactCmd = this._autoCompactPrompt ? `/compact ${this._autoCompactPrompt}\r` : '/compact\r';
136
+ await this.callbacks.writeCommand(compactCmd);
137
+ this.emit('autoCompact', {
138
+ tokens: totalTokens,
139
+ threshold: this._autoCompactThreshold,
140
+ prompt: this._autoCompactPrompt || undefined,
141
+ });
142
+ if (!this.callbacks.isStopped()) {
143
+ this._autoCompactTimer = setTimeout(() => {
144
+ if (this.callbacks.isStopped())
145
+ return;
146
+ this._autoCompactTimer = null;
147
+ this._isCompacting = false;
148
+ }, COMPACT_COOLDOWN_MS);
149
+ }
150
+ }
151
+ else {
152
+ if (!this.callbacks.isStopped()) {
153
+ this._autoCompactTimer = setTimeout(checkAndCompact, AUTO_RETRY_DELAY_MS);
154
+ }
155
+ }
156
+ };
157
+ if (!this.callbacks.isStopped()) {
158
+ this._autoCompactTimer = setTimeout(checkAndCompact, AUTO_INITIAL_DELAY_MS);
159
+ }
160
+ }
161
+ }
162
+ /**
163
+ * Check if auto-clear should be triggered based on current token count.
164
+ * Called after token count updates.
165
+ */
166
+ checkAutoClear() {
167
+ if (this.callbacks.isStopped())
168
+ return;
169
+ if (!this._autoClearEnabled || this._isClearing || this._isCompacting)
170
+ return;
171
+ const totalTokens = this.callbacks.getTotalTokens();
172
+ if (totalTokens >= this._autoClearThreshold) {
173
+ this._isClearing = true;
174
+ console.log(`[SessionAutoOps] Auto-clear triggered: ${totalTokens} tokens >= ${this._autoClearThreshold} threshold`);
175
+ const checkAndClear = async () => {
176
+ if (this.callbacks.isStopped())
177
+ return;
178
+ if (!this._isClearing)
179
+ return;
180
+ if (!this.callbacks.isWorking()) {
181
+ if (this.callbacks.isStopped())
182
+ return;
183
+ await this.callbacks.writeCommand('/clear\r');
184
+ this.emit('autoClear', { tokens: totalTokens, threshold: this._autoClearThreshold });
185
+ if (!this.callbacks.isStopped()) {
186
+ this._autoClearTimer = setTimeout(() => {
187
+ if (this.callbacks.isStopped())
188
+ return;
189
+ this._autoClearTimer = null;
190
+ this._isClearing = false;
191
+ }, CLEAR_COOLDOWN_MS);
192
+ }
193
+ }
194
+ else {
195
+ if (!this.callbacks.isStopped()) {
196
+ this._autoClearTimer = setTimeout(checkAndClear, AUTO_RETRY_DELAY_MS);
197
+ }
198
+ }
199
+ };
200
+ if (!this.callbacks.isStopped()) {
201
+ this._autoClearTimer = setTimeout(checkAndClear, AUTO_INITIAL_DELAY_MS);
202
+ }
203
+ }
204
+ }
205
+ // ============================================================================
206
+ // Cleanup
207
+ // ============================================================================
208
+ /**
209
+ * Clear all timers and reset state. Called when the session stops.
210
+ */
211
+ destroy() {
212
+ if (this._autoCompactTimer) {
213
+ clearTimeout(this._autoCompactTimer);
214
+ this._autoCompactTimer = null;
215
+ }
216
+ this._isCompacting = false;
217
+ if (this._autoClearTimer) {
218
+ clearTimeout(this._autoClearTimer);
219
+ this._autoClearTimer = null;
220
+ }
221
+ this._isClearing = false;
222
+ }
223
+ }
224
+ //# sourceMappingURL=session-auto-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-auto-ops.js","sourceRoot":"","sources":["../src/session-auto-ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @fileoverview Pure functions for building CLI arguments and environment variables
3
+ * for Claude and OpenCode CLI spawning.
4
+ *
5
+ * Extracted from Session to keep argument construction logic testable and
6
+ * separate from PTY lifecycle management.
7
+ *
8
+ * @module session-cli-builder
9
+ */
10
+ import type { ClaudeMode } from './types.js';
11
+ /**
12
+ * Build Claude CLI permission flags based on the configured mode.
13
+ * Returns an array of args to pass to the CLI.
14
+ */
15
+ export declare function buildPermissionArgs(claudeMode: ClaudeMode, allowedTools?: string): string[];
16
+ /**
17
+ * Build args for an interactive Claude CLI session (direct PTY, non-mux fallback).
18
+ *
19
+ * @param sessionId - The Codeman session ID (passed as --session-id to Claude)
20
+ * @param claudeMode - Permission mode for the CLI
21
+ * @param model - Optional model override (e.g., 'opus', 'sonnet')
22
+ * @param allowedTools - Optional comma-separated allowed tools list
23
+ * @returns Array of CLI arguments
24
+ */
25
+ export declare function buildInteractiveArgs(sessionId: string, claudeMode: ClaudeMode, model?: string, allowedTools?: string): string[];
26
+ /**
27
+ * Build args for a one-shot Claude CLI prompt (runPrompt mode).
28
+ *
29
+ * @param prompt - The prompt text to send
30
+ * @param model - Optional model override
31
+ * @returns Array of CLI arguments
32
+ */
33
+ export declare function buildPromptArgs(prompt: string, model?: string): string[];
34
+ /**
35
+ * Build environment variables for Claude CLI processes (direct PTY, non-mux).
36
+ *
37
+ * Augments process.env with:
38
+ * - UTF-8 locale settings
39
+ * - Augmented PATH (includes Claude CLI directory)
40
+ * - xterm-256color terminal type
41
+ * - Codeman session identification vars
42
+ *
43
+ * @param sessionId - The Codeman session ID
44
+ * @returns Environment variables object for pty.spawn
45
+ */
46
+ export declare function buildClaudeEnv(sessionId: string): Record<string, string | undefined>;
47
+ /**
48
+ * Build environment variables for mux-attached PTY sessions (tmux attach).
49
+ * Lighter than buildClaudeEnv — no PATH augmentation or Codeman vars needed
50
+ * since the mux session already has those set.
51
+ *
52
+ * @returns Environment variables object for pty.spawn
53
+ */
54
+ export declare function buildMuxAttachEnv(): Record<string, string | undefined>;
55
+ /**
56
+ * Build environment variables for a direct shell session (non-mux fallback).
57
+ *
58
+ * @param sessionId - The Codeman session ID
59
+ * @returns Environment variables object for pty.spawn
60
+ */
61
+ export declare function buildShellEnv(sessionId: string): Record<string, string | undefined>;
62
+ //# sourceMappingURL=session-cli-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cli-builder.d.ts","sourceRoot":"","sources":["../src/session-cli-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAc3F;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,KAAK,CAAC,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,EAAE,CAIV;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAOxE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAcpF;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAStE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAUnF"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * @fileoverview Pure functions for building CLI arguments and environment variables
3
+ * for Claude and OpenCode CLI spawning.
4
+ *
5
+ * Extracted from Session to keep argument construction logic testable and
6
+ * separate from PTY lifecycle management.
7
+ *
8
+ * @module session-cli-builder
9
+ */
10
+ import { getAugmentedPath } from './utils/claude-cli-resolver.js';
11
+ /**
12
+ * Build Claude CLI permission flags based on the configured mode.
13
+ * Returns an array of args to pass to the CLI.
14
+ */
15
+ export function buildPermissionArgs(claudeMode, allowedTools) {
16
+ switch (claudeMode) {
17
+ case 'dangerously-skip-permissions':
18
+ return ['--dangerously-skip-permissions'];
19
+ case 'allowedTools':
20
+ if (allowedTools) {
21
+ return ['--allowedTools', allowedTools];
22
+ }
23
+ // Fall back to normal mode if no tools specified
24
+ return [];
25
+ case 'normal':
26
+ default:
27
+ return [];
28
+ }
29
+ }
30
+ /**
31
+ * Build args for an interactive Claude CLI session (direct PTY, non-mux fallback).
32
+ *
33
+ * @param sessionId - The Codeman session ID (passed as --session-id to Claude)
34
+ * @param claudeMode - Permission mode for the CLI
35
+ * @param model - Optional model override (e.g., 'opus', 'sonnet')
36
+ * @param allowedTools - Optional comma-separated allowed tools list
37
+ * @returns Array of CLI arguments
38
+ */
39
+ export function buildInteractiveArgs(sessionId, claudeMode, model, allowedTools) {
40
+ const args = [...buildPermissionArgs(claudeMode, allowedTools), '--session-id', sessionId];
41
+ if (model)
42
+ args.push('--model', model);
43
+ return args;
44
+ }
45
+ /**
46
+ * Build args for a one-shot Claude CLI prompt (runPrompt mode).
47
+ *
48
+ * @param prompt - The prompt text to send
49
+ * @param model - Optional model override
50
+ * @returns Array of CLI arguments
51
+ */
52
+ export function buildPromptArgs(prompt, model) {
53
+ const args = ['-p', '--verbose', '--dangerously-skip-permissions', '--output-format', 'stream-json'];
54
+ if (model) {
55
+ args.push('--model', model);
56
+ }
57
+ args.push(prompt);
58
+ return args;
59
+ }
60
+ /**
61
+ * Build environment variables for Claude CLI processes (direct PTY, non-mux).
62
+ *
63
+ * Augments process.env with:
64
+ * - UTF-8 locale settings
65
+ * - Augmented PATH (includes Claude CLI directory)
66
+ * - xterm-256color terminal type
67
+ * - Codeman session identification vars
68
+ *
69
+ * @param sessionId - The Codeman session ID
70
+ * @returns Environment variables object for pty.spawn
71
+ */
72
+ export function buildClaudeEnv(sessionId) {
73
+ return {
74
+ ...process.env,
75
+ LANG: 'en_US.UTF-8',
76
+ LC_ALL: 'en_US.UTF-8',
77
+ PATH: getAugmentedPath(),
78
+ TERM: 'xterm-256color',
79
+ COLORTERM: undefined,
80
+ CLAUDECODE: undefined,
81
+ // Inform Claude it's running within Codeman (helps prevent self-termination)
82
+ CODEMAN_MUX: '1',
83
+ CODEMAN_SESSION_ID: sessionId,
84
+ CODEMAN_API_URL: process.env.CODEMAN_API_URL || 'http://localhost:3000',
85
+ };
86
+ }
87
+ /**
88
+ * Build environment variables for mux-attached PTY sessions (tmux attach).
89
+ * Lighter than buildClaudeEnv — no PATH augmentation or Codeman vars needed
90
+ * since the mux session already has those set.
91
+ *
92
+ * @returns Environment variables object for pty.spawn
93
+ */
94
+ export function buildMuxAttachEnv() {
95
+ return {
96
+ ...process.env,
97
+ LANG: 'en_US.UTF-8',
98
+ LC_ALL: 'en_US.UTF-8',
99
+ TERM: 'xterm-256color',
100
+ COLORTERM: undefined,
101
+ CLAUDECODE: undefined,
102
+ };
103
+ }
104
+ /**
105
+ * Build environment variables for a direct shell session (non-mux fallback).
106
+ *
107
+ * @param sessionId - The Codeman session ID
108
+ * @returns Environment variables object for pty.spawn
109
+ */
110
+ export function buildShellEnv(sessionId) {
111
+ return {
112
+ ...process.env,
113
+ LANG: 'en_US.UTF-8',
114
+ LC_ALL: 'en_US.UTF-8',
115
+ TERM: 'xterm-256color',
116
+ CODEMAN_MUX: '1',
117
+ CODEMAN_SESSION_ID: sessionId,
118
+ CODEMAN_API_URL: process.env.CODEMAN_API_URL || 'http://localhost:3000',
119
+ };
120
+ }
121
+ //# sourceMappingURL=session-cli-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cli-builder.js","sourceRoot":"","sources":["../src/session-cli-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAsB,EAAE,YAAqB;IAC/E,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,8BAA8B;YACjC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAC5C,KAAK,cAAc;YACjB,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;YAC1C,CAAC;YACD,iDAAiD;YACjD,OAAO,EAAE,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,UAAsB,EACtB,KAAc,EACd,YAAqB;IAErB,MAAM,IAAI,GAAG,CAAC,GAAG,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;IAC3F,IAAI,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,KAAc;IAC5D,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,gCAAgC,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;IACrG,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO;QACL,GAAG,OAAO,CAAC,GAAG;QACd,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,gBAAgB,EAAE;QACxB,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,SAAS;QACrB,6EAA6E;QAC7E,WAAW,EAAE,GAAG;QAChB,kBAAkB,EAAE,SAAS;QAC7B,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,uBAAuB;KACxE,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,GAAG,OAAO,CAAC,GAAG;QACd,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,OAAO;QACL,GAAG,OAAO,CAAC,GAAG;QACd,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,GAAG;QAChB,kBAAkB,EAAE,SAAS;QAC7B,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,uBAAuB;KACxE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @fileoverview LRU cache for task descriptions parsed from terminal output.
3
+ *
4
+ * Stores descriptions extracted from Claude Code's Task tool invocations
5
+ * (e.g., "Explore(Check files)") keyed by timestamp. Used to correlate
6
+ * with SubagentWatcher discoveries for better window titles.
7
+ *
8
+ * @module session-task-cache
9
+ */
10
+ /**
11
+ * LRU cache for task descriptions parsed from terminal output.
12
+ *
13
+ * Descriptions are keyed by the timestamp when they were parsed.
14
+ * Old entries are automatically cleaned up based on maxAgeMs.
15
+ * Size is bounded by the underlying LRUMap.
16
+ */
17
+ export declare class SessionTaskCache {
18
+ private readonly cache;
19
+ private readonly maxAgeMs;
20
+ constructor(maxSize?: number, maxAgeMs?: number);
21
+ /**
22
+ * Add a task description at the given timestamp.
23
+ */
24
+ add(timestamp: number, description: string): void;
25
+ /**
26
+ * Remove task descriptions older than maxAgeMs.
27
+ * LRUMap maintains insertion order, so we can break early
28
+ * once we find a non-expired entry.
29
+ */
30
+ private cleanupOld;
31
+ /**
32
+ * Get all recent task descriptions sorted by timestamp (most recent first).
33
+ */
34
+ getAll(): Array<{
35
+ timestamp: number;
36
+ description: string;
37
+ }>;
38
+ /**
39
+ * Find a task description that was parsed close to a given timestamp.
40
+ * Used to correlate with SubagentWatcher discoveries.
41
+ *
42
+ * @param subagentStartTime - The timestamp when the subagent was discovered
43
+ * @param maxAgeMs - Maximum age difference to consider (default 10 seconds)
44
+ * @returns The matching description or undefined
45
+ */
46
+ findNear(subagentStartTime: number, maxAgeMs?: number): string | undefined;
47
+ /**
48
+ * Clear all cached descriptions.
49
+ */
50
+ clear(): void;
51
+ }
52
+ //# sourceMappingURL=session-task-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-task-cache.d.ts","sourceRoot":"","sources":["../src/session-task-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,OAAO,GAAE,MAAyB,EAAE,QAAQ,GAAE,MAA2B;IAKrF;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAIjD;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACH,MAAM,IAAI,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAS3D;;;;;;;OAOG;IACH,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAc,GAAG,MAAM,GAAG,SAAS;IAiBjF;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * @fileoverview LRU cache for task descriptions parsed from terminal output.
3
+ *
4
+ * Stores descriptions extracted from Claude Code's Task tool invocations
5
+ * (e.g., "Explore(Check files)") keyed by timestamp. Used to correlate
6
+ * with SubagentWatcher discoveries for better window titles.
7
+ *
8
+ * @module session-task-cache
9
+ */
10
+ import { LRUMap } from './utils/lru-map.js';
11
+ /** Default maximum number of task descriptions to keep */
12
+ const DEFAULT_MAX_SIZE = 100;
13
+ /** Default maximum age for task descriptions (30 seconds) */
14
+ const DEFAULT_MAX_AGE_MS = 30_000;
15
+ /**
16
+ * LRU cache for task descriptions parsed from terminal output.
17
+ *
18
+ * Descriptions are keyed by the timestamp when they were parsed.
19
+ * Old entries are automatically cleaned up based on maxAgeMs.
20
+ * Size is bounded by the underlying LRUMap.
21
+ */
22
+ export class SessionTaskCache {
23
+ cache;
24
+ maxAgeMs;
25
+ constructor(maxSize = DEFAULT_MAX_SIZE, maxAgeMs = DEFAULT_MAX_AGE_MS) {
26
+ this.cache = new LRUMap({ maxSize });
27
+ this.maxAgeMs = maxAgeMs;
28
+ }
29
+ /**
30
+ * Add a task description at the given timestamp.
31
+ */
32
+ add(timestamp, description) {
33
+ this.cache.set(timestamp, description);
34
+ }
35
+ /**
36
+ * Remove task descriptions older than maxAgeMs.
37
+ * LRUMap maintains insertion order, so we can break early
38
+ * once we find a non-expired entry.
39
+ */
40
+ cleanupOld() {
41
+ const cutoff = Date.now() - this.maxAgeMs;
42
+ for (const timestamp of this.cache.keysInOrder()) {
43
+ if (timestamp < cutoff) {
44
+ this.cache.delete(timestamp);
45
+ }
46
+ else {
47
+ break;
48
+ }
49
+ }
50
+ }
51
+ /**
52
+ * Get all recent task descriptions sorted by timestamp (most recent first).
53
+ */
54
+ getAll() {
55
+ this.cleanupOld();
56
+ const results = [];
57
+ for (const [timestamp, description] of this.cache) {
58
+ results.push({ timestamp, description });
59
+ }
60
+ return results.sort((a, b) => b.timestamp - a.timestamp);
61
+ }
62
+ /**
63
+ * Find a task description that was parsed close to a given timestamp.
64
+ * Used to correlate with SubagentWatcher discoveries.
65
+ *
66
+ * @param subagentStartTime - The timestamp when the subagent was discovered
67
+ * @param maxAgeMs - Maximum age difference to consider (default 10 seconds)
68
+ * @returns The matching description or undefined
69
+ */
70
+ findNear(subagentStartTime, maxAgeMs = 10000) {
71
+ this.cleanupOld();
72
+ let bestMatch;
73
+ let bestDiff = Infinity;
74
+ for (const [timestamp, description] of this.cache) {
75
+ const diff = Math.abs(subagentStartTime - timestamp);
76
+ if (diff < maxAgeMs && diff < bestDiff) {
77
+ bestMatch = { timestamp, description };
78
+ bestDiff = diff;
79
+ }
80
+ }
81
+ return bestMatch?.description;
82
+ }
83
+ /**
84
+ * Clear all cached descriptions.
85
+ */
86
+ clear() {
87
+ this.cache.clear();
88
+ }
89
+ }
90
+ //# sourceMappingURL=session-task-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-task-cache.js","sourceRoot":"","sources":["../src/session-task-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,0DAA0D;AAC1D,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,6DAA6D;AAC7D,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC;;;;;;GAMG;AACH,MAAM,OAAO,gBAAgB;IACV,KAAK,CAAyB;IAC9B,QAAQ,CAAS;IAElC,YAAY,UAAkB,gBAAgB,EAAE,WAAmB,kBAAkB;QACnF,IAAI,CAAC,KAAK,GAAG,IAAI,MAAM,CAAiB,EAAE,OAAO,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,SAAiB,EAAE,WAAmB;QACxC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACK,UAAU;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC1C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACjD,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,OAAO,GAAsD,EAAE,CAAC;QACtE,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,iBAAyB,EAAE,WAAmB,KAAK;QAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,SAAiE,CAAC;QACtE,IAAI,QAAQ,GAAG,QAAQ,CAAC;QAExB,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAC;YACrD,IAAI,IAAI,GAAG,QAAQ,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;gBACvC,SAAS,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;gBACvC,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,SAAS,EAAE,WAAW,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
package/dist/session.d.ts CHANGED
@@ -157,9 +157,7 @@ export declare class Session extends EventEmitter {
157
157
  readonly workingDir: string;
158
158
  readonly createdAt: number;
159
159
  readonly mode: SessionMode;
160
- /** Maximum number of task descriptions to keep (LRUMap handles size limit automatically) */
161
- private static readonly MAX_TASK_DESCRIPTIONS;
162
- private static readonly TASK_DESCRIPTION_MAX_AGE_MS;
160
+ private _taskCache;
163
161
  private _name;
164
162
  private ptyProcess;
165
163
  private _pid;
@@ -184,13 +182,7 @@ export declare class Session extends EventEmitter {
184
182
  private _taskTracker;
185
183
  private _totalInputTokens;
186
184
  private _totalOutputTokens;
187
- private _autoClearThreshold;
188
- private _autoClearEnabled;
189
- private _isClearing;
190
- private _autoCompactThreshold;
191
- private _autoCompactEnabled;
192
- private _autoCompactPrompt;
193
- private _isCompacting;
185
+ private _autoOps;
194
186
  private _imageWatcherEnabled;
195
187
  private _flickerFilterEnabled;
196
188
  private _cliVersion;
@@ -198,8 +190,6 @@ export declare class Session extends EventEmitter {
198
190
  private _cliAccountType;
199
191
  private _cliLatestVersion;
200
192
  private _cliInfoParsed;
201
- private _autoCompactTimer;
202
- private _autoClearTimer;
203
193
  private _promptCheckInterval;
204
194
  private _promptCheckTimeout;
205
195
  private _shellIdleTimer;
@@ -220,7 +210,6 @@ export declare class Session extends EventEmitter {
220
210
  private _ralphHandlers;
221
211
  private _bashToolParser;
222
212
  private _bashToolHandlers;
223
- private _recentTaskDescriptions;
224
213
  private _lastExpensiveProcessTime;
225
214
  private _pendingCleanData;
226
215
  private _expensiveProcessTimer;
@@ -288,11 +277,6 @@ export declare class Session extends EventEmitter {
288
277
  get claudeMode(): ClaudeMode;
289
278
  /** Allowed tools list (for 'allowedTools' mode) */
290
279
  get allowedTools(): string | undefined;
291
- /**
292
- * Build Claude CLI permission flags based on the configured mode.
293
- * Returns an array of args to pass to the CLI.
294
- */
295
- private _buildPermissionArgs;
296
280
  /**
297
281
  * Set CPU priority configuration.
298
282
  * Note: This only affects new sessions; existing running processes won't be changed.
@@ -312,14 +296,6 @@ export declare class Session extends EventEmitter {
312
296
  get autoClearEnabled(): boolean;
313
297
  get name(): string;
314
298
  set name(value: string);
315
- /** Minimum valid threshold for auto-clear/compact (1000 tokens) */
316
- private static readonly MIN_AUTO_THRESHOLD;
317
- /** Maximum valid threshold for auto-clear/compact (500k tokens) */
318
- private static readonly MAX_AUTO_THRESHOLD;
319
- /** Default auto-clear threshold when invalid value provided */
320
- private static readonly DEFAULT_AUTO_CLEAR_THRESHOLD;
321
- /** Default auto-compact threshold when invalid value provided */
322
- private static readonly DEFAULT_AUTO_COMPACT_THRESHOLD;
323
299
  setAutoClear(enabled: boolean, threshold?: number): void;
324
300
  get autoCompactThreshold(): number;
325
301
  get autoCompactEnabled(): boolean;
@@ -580,11 +556,6 @@ export declare class Session extends EventEmitter {
580
556
  * Used by both processOutput() and parseTaskDescriptionsFromTerminalData().
581
557
  */
582
558
  private parseTaskDescriptionsDirect;
583
- /**
584
- * Remove task descriptions older than TASK_DESCRIPTION_MAX_AGE_MS.
585
- * Size limit is handled automatically by LRUMap eviction on set().
586
- */
587
- private cleanupOldTaskDescriptions;
588
559
  /**
589
560
  * Get recent task descriptions parsed from terminal output.
590
561
  * Returns descriptions sorted by timestamp (most recent first).
@@ -604,8 +575,6 @@ export declare class Session extends EventEmitter {
604
575
  findTaskDescriptionNear(subagentStartTime: number, maxAgeMs?: number): string | undefined;
605
576
  private parseTokensFromStatusLine;
606
577
  private parseClaudeCodeInfo;
607
- private checkAutoCompact;
608
- private checkAutoClear;
609
578
  /**
610
579
  * Sends input directly to the PTY process.
611
580
  *