@telora/daemon 0.12.33

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 (473) hide show
  1. package/.env.example +64 -0
  2. package/README.md +229 -0
  3. package/build-info.json +4 -0
  4. package/dist/activity-tracker.d.ts +13 -0
  5. package/dist/activity-tracker.d.ts.map +1 -0
  6. package/dist/activity-tracker.js +19 -0
  7. package/dist/activity-tracker.js.map +1 -0
  8. package/dist/agent-state.d.ts +45 -0
  9. package/dist/agent-state.d.ts.map +1 -0
  10. package/dist/agent-state.js +61 -0
  11. package/dist/agent-state.js.map +1 -0
  12. package/dist/audit-hooks.d.ts +12 -0
  13. package/dist/audit-hooks.d.ts.map +1 -0
  14. package/dist/audit-hooks.js +45 -0
  15. package/dist/audit-hooks.js.map +1 -0
  16. package/dist/auto-update.d.ts +42 -0
  17. package/dist/auto-update.d.ts.map +1 -0
  18. package/dist/auto-update.js +96 -0
  19. package/dist/auto-update.js.map +1 -0
  20. package/dist/branch-status.d.ts +40 -0
  21. package/dist/branch-status.d.ts.map +1 -0
  22. package/dist/branch-status.js +107 -0
  23. package/dist/branch-status.js.map +1 -0
  24. package/dist/completion-detector.d.ts +87 -0
  25. package/dist/completion-detector.d.ts.map +1 -0
  26. package/dist/completion-detector.js +160 -0
  27. package/dist/completion-detector.js.map +1 -0
  28. package/dist/completion-handler.d.ts +48 -0
  29. package/dist/completion-handler.d.ts.map +1 -0
  30. package/dist/completion-handler.js +200 -0
  31. package/dist/completion-handler.js.map +1 -0
  32. package/dist/condition-evaluators.d.ts +31 -0
  33. package/dist/condition-evaluators.d.ts.map +1 -0
  34. package/dist/condition-evaluators.js +416 -0
  35. package/dist/condition-evaluators.js.map +1 -0
  36. package/dist/config.d.ts +55 -0
  37. package/dist/config.d.ts.map +1 -0
  38. package/dist/config.js +311 -0
  39. package/dist/config.js.map +1 -0
  40. package/dist/control-state.d.ts +41 -0
  41. package/dist/control-state.d.ts.map +1 -0
  42. package/dist/control-state.js +204 -0
  43. package/dist/control-state.js.map +1 -0
  44. package/dist/crash-recovery-cleanup.d.ts +21 -0
  45. package/dist/crash-recovery-cleanup.d.ts.map +1 -0
  46. package/dist/crash-recovery-cleanup.js +198 -0
  47. package/dist/crash-recovery-cleanup.js.map +1 -0
  48. package/dist/crash-recovery-scan.d.ts +19 -0
  49. package/dist/crash-recovery-scan.d.ts.map +1 -0
  50. package/dist/crash-recovery-scan.js +145 -0
  51. package/dist/crash-recovery-scan.js.map +1 -0
  52. package/dist/crash-recovery-types.d.ts +54 -0
  53. package/dist/crash-recovery-types.d.ts.map +1 -0
  54. package/dist/crash-recovery-types.js +13 -0
  55. package/dist/crash-recovery-types.js.map +1 -0
  56. package/dist/crash-recovery.d.ts +88 -0
  57. package/dist/crash-recovery.d.ts.map +1 -0
  58. package/dist/crash-recovery.js +448 -0
  59. package/dist/crash-recovery.js.map +1 -0
  60. package/dist/daemon-logs.d.ts +19 -0
  61. package/dist/daemon-logs.d.ts.map +1 -0
  62. package/dist/daemon-logs.js +81 -0
  63. package/dist/daemon-logs.js.map +1 -0
  64. package/dist/daemon-process.d.ts +154 -0
  65. package/dist/daemon-process.d.ts.map +1 -0
  66. package/dist/daemon-process.js +427 -0
  67. package/dist/daemon-process.js.map +1 -0
  68. package/dist/dag-validator.d.ts +52 -0
  69. package/dist/dag-validator.d.ts.map +1 -0
  70. package/dist/dag-validator.js +199 -0
  71. package/dist/dag-validator.js.map +1 -0
  72. package/dist/delivery-guards.d.ts +41 -0
  73. package/dist/delivery-guards.d.ts.map +1 -0
  74. package/dist/delivery-guards.js +195 -0
  75. package/dist/delivery-guards.js.map +1 -0
  76. package/dist/delivery-lifecycle.d.ts +110 -0
  77. package/dist/delivery-lifecycle.d.ts.map +1 -0
  78. package/dist/delivery-lifecycle.js +353 -0
  79. package/dist/delivery-lifecycle.js.map +1 -0
  80. package/dist/delivery-merge.d.ts +17 -0
  81. package/dist/delivery-merge.d.ts.map +1 -0
  82. package/dist/delivery-merge.js +89 -0
  83. package/dist/delivery-merge.js.map +1 -0
  84. package/dist/dependency-resolver.d.ts +77 -0
  85. package/dist/dependency-resolver.d.ts.map +1 -0
  86. package/dist/dependency-resolver.js +337 -0
  87. package/dist/dependency-resolver.js.map +1 -0
  88. package/dist/evaluation-context.d.ts +49 -0
  89. package/dist/evaluation-context.d.ts.map +1 -0
  90. package/dist/evaluation-context.js +98 -0
  91. package/dist/evaluation-context.js.map +1 -0
  92. package/dist/git-activity.d.ts +24 -0
  93. package/dist/git-activity.d.ts.map +1 -0
  94. package/dist/git-activity.js +97 -0
  95. package/dist/git-activity.js.map +1 -0
  96. package/dist/git-branch.d.ts +33 -0
  97. package/dist/git-branch.d.ts.map +1 -0
  98. package/dist/git-branch.js +88 -0
  99. package/dist/git-branch.js.map +1 -0
  100. package/dist/git-integration.d.ts +27 -0
  101. package/dist/git-integration.d.ts.map +1 -0
  102. package/dist/git-integration.js +82 -0
  103. package/dist/git-integration.js.map +1 -0
  104. package/dist/git-merge-helpers.d.ts +48 -0
  105. package/dist/git-merge-helpers.d.ts.map +1 -0
  106. package/dist/git-merge-helpers.js +105 -0
  107. package/dist/git-merge-helpers.js.map +1 -0
  108. package/dist/git-merge-lock.d.ts +67 -0
  109. package/dist/git-merge-lock.d.ts.map +1 -0
  110. package/dist/git-merge-lock.js +157 -0
  111. package/dist/git-merge-lock.js.map +1 -0
  112. package/dist/git-merge-strategies.d.ts +39 -0
  113. package/dist/git-merge-strategies.d.ts.map +1 -0
  114. package/dist/git-merge-strategies.js +127 -0
  115. package/dist/git-merge-strategies.js.map +1 -0
  116. package/dist/git-merge.d.ts +80 -0
  117. package/dist/git-merge.d.ts.map +1 -0
  118. package/dist/git-merge.js +373 -0
  119. package/dist/git-merge.js.map +1 -0
  120. package/dist/git-state-detector.d.ts +24 -0
  121. package/dist/git-state-detector.d.ts.map +1 -0
  122. package/dist/git-state-detector.js +122 -0
  123. package/dist/git-state-detector.js.map +1 -0
  124. package/dist/git-types.d.ts +40 -0
  125. package/dist/git-types.d.ts.map +1 -0
  126. package/dist/git-types.js +23 -0
  127. package/dist/git-types.js.map +1 -0
  128. package/dist/git-utils.d.ts +28 -0
  129. package/dist/git-utils.d.ts.map +1 -0
  130. package/dist/git-utils.js +57 -0
  131. package/dist/git-utils.js.map +1 -0
  132. package/dist/git.d.ts +24 -0
  133. package/dist/git.d.ts.map +1 -0
  134. package/dist/git.js +64 -0
  135. package/dist/git.js.map +1 -0
  136. package/dist/guard-engine.d.ts +19 -0
  137. package/dist/guard-engine.d.ts.map +1 -0
  138. package/dist/guard-engine.js +21 -0
  139. package/dist/guard-engine.js.map +1 -0
  140. package/dist/guard-evaluator.d.ts +47 -0
  141. package/dist/guard-evaluator.d.ts.map +1 -0
  142. package/dist/guard-evaluator.js +193 -0
  143. package/dist/guard-evaluator.js.map +1 -0
  144. package/dist/heartbeat.d.ts +73 -0
  145. package/dist/heartbeat.d.ts.map +1 -0
  146. package/dist/heartbeat.js +306 -0
  147. package/dist/heartbeat.js.map +1 -0
  148. package/dist/index.d.ts +32 -0
  149. package/dist/index.d.ts.map +1 -0
  150. package/dist/index.js +493 -0
  151. package/dist/index.js.map +1 -0
  152. package/dist/listener-auto-advance.d.ts +29 -0
  153. package/dist/listener-auto-advance.d.ts.map +1 -0
  154. package/dist/listener-auto-advance.js +172 -0
  155. package/dist/listener-auto-advance.js.map +1 -0
  156. package/dist/listener-review.d.ts +37 -0
  157. package/dist/listener-review.d.ts.map +1 -0
  158. package/dist/listener-review.js +217 -0
  159. package/dist/listener-review.js.map +1 -0
  160. package/dist/listener.d.ts +57 -0
  161. package/dist/listener.d.ts.map +1 -0
  162. package/dist/listener.js +361 -0
  163. package/dist/listener.js.map +1 -0
  164. package/dist/log-manager.d.ts +18 -0
  165. package/dist/log-manager.d.ts.map +1 -0
  166. package/dist/log-manager.js +18 -0
  167. package/dist/log-manager.js.map +1 -0
  168. package/dist/otlp-log-parser.d.ts +21 -0
  169. package/dist/otlp-log-parser.d.ts.map +1 -0
  170. package/dist/otlp-log-parser.js +143 -0
  171. package/dist/otlp-log-parser.js.map +1 -0
  172. package/dist/otlp-metric-parser.d.ts +20 -0
  173. package/dist/otlp-metric-parser.d.ts.map +1 -0
  174. package/dist/otlp-metric-parser.js +113 -0
  175. package/dist/otlp-metric-parser.js.map +1 -0
  176. package/dist/otlp-port-manager.d.ts +26 -0
  177. package/dist/otlp-port-manager.d.ts.map +1 -0
  178. package/dist/otlp-port-manager.js +130 -0
  179. package/dist/otlp-port-manager.js.map +1 -0
  180. package/dist/otlp-receiver.d.ts +51 -0
  181. package/dist/otlp-receiver.d.ts.map +1 -0
  182. package/dist/otlp-receiver.js +663 -0
  183. package/dist/otlp-receiver.js.map +1 -0
  184. package/dist/otlp-types.d.ts +92 -0
  185. package/dist/otlp-types.d.ts.map +1 -0
  186. package/dist/otlp-types.js +133 -0
  187. package/dist/otlp-types.js.map +1 -0
  188. package/dist/output-monitor.d.ts +33 -0
  189. package/dist/output-monitor.d.ts.map +1 -0
  190. package/dist/output-monitor.js +67 -0
  191. package/dist/output-monitor.js.map +1 -0
  192. package/dist/planning-prompt-builder.d.ts +67 -0
  193. package/dist/planning-prompt-builder.d.ts.map +1 -0
  194. package/dist/planning-prompt-builder.js +515 -0
  195. package/dist/planning-prompt-builder.js.map +1 -0
  196. package/dist/prompt-builder.d.ts +14 -0
  197. package/dist/prompt-builder.d.ts.map +1 -0
  198. package/dist/prompt-builder.js +174 -0
  199. package/dist/prompt-builder.js.map +1 -0
  200. package/dist/qa-crash-recovery.d.ts +77 -0
  201. package/dist/qa-crash-recovery.d.ts.map +1 -0
  202. package/dist/qa-crash-recovery.js +243 -0
  203. package/dist/qa-crash-recovery.js.map +1 -0
  204. package/dist/qa-dev-server.d.ts +73 -0
  205. package/dist/qa-dev-server.d.ts.map +1 -0
  206. package/dist/qa-dev-server.js +279 -0
  207. package/dist/qa-dev-server.js.map +1 -0
  208. package/dist/qa-orchestrator.d.ts +79 -0
  209. package/dist/qa-orchestrator.d.ts.map +1 -0
  210. package/dist/qa-orchestrator.js +349 -0
  211. package/dist/qa-orchestrator.js.map +1 -0
  212. package/dist/qa-port-allocator.d.ts +34 -0
  213. package/dist/qa-port-allocator.d.ts.map +1 -0
  214. package/dist/qa-port-allocator.js +75 -0
  215. package/dist/qa-port-allocator.js.map +1 -0
  216. package/dist/qa-provisioner.d.ts +33 -0
  217. package/dist/qa-provisioner.d.ts.map +1 -0
  218. package/dist/qa-provisioner.js +141 -0
  219. package/dist/qa-provisioner.js.map +1 -0
  220. package/dist/qa-state.d.ts +93 -0
  221. package/dist/qa-state.d.ts.map +1 -0
  222. package/dist/qa-state.js +74 -0
  223. package/dist/qa-state.js.map +1 -0
  224. package/dist/queries/control-state.d.ts +25 -0
  225. package/dist/queries/control-state.d.ts.map +1 -0
  226. package/dist/queries/control-state.js +34 -0
  227. package/dist/queries/control-state.js.map +1 -0
  228. package/dist/queries/daemon-connection.d.ts +25 -0
  229. package/dist/queries/daemon-connection.d.ts.map +1 -0
  230. package/dist/queries/daemon-connection.js +28 -0
  231. package/dist/queries/daemon-connection.js.map +1 -0
  232. package/dist/queries/deliveries.d.ts +100 -0
  233. package/dist/queries/deliveries.d.ts.map +1 -0
  234. package/dist/queries/deliveries.js +184 -0
  235. package/dist/queries/deliveries.js.map +1 -0
  236. package/dist/queries/git-activity.d.ts +20 -0
  237. package/dist/queries/git-activity.d.ts.map +1 -0
  238. package/dist/queries/git-activity.js +22 -0
  239. package/dist/queries/git-activity.js.map +1 -0
  240. package/dist/queries/guards.d.ts +47 -0
  241. package/dist/queries/guards.d.ts.map +1 -0
  242. package/dist/queries/guards.js +138 -0
  243. package/dist/queries/guards.js.map +1 -0
  244. package/dist/queries/index.d.ts +19 -0
  245. package/dist/queries/index.d.ts.map +1 -0
  246. package/dist/queries/index.js +17 -0
  247. package/dist/queries/index.js.map +1 -0
  248. package/dist/queries/issues.d.ts +41 -0
  249. package/dist/queries/issues.d.ts.map +1 -0
  250. package/dist/queries/issues.js +67 -0
  251. package/dist/queries/issues.js.map +1 -0
  252. package/dist/queries/qa.d.ts +79 -0
  253. package/dist/queries/qa.d.ts.map +1 -0
  254. package/dist/queries/qa.js +85 -0
  255. package/dist/queries/qa.js.map +1 -0
  256. package/dist/queries/roles.d.ts +13 -0
  257. package/dist/queries/roles.d.ts.map +1 -0
  258. package/dist/queries/roles.js +39 -0
  259. package/dist/queries/roles.js.map +1 -0
  260. package/dist/queries/schemas.d.ts +777 -0
  261. package/dist/queries/schemas.d.ts.map +1 -0
  262. package/dist/queries/schemas.js +391 -0
  263. package/dist/queries/schemas.js.map +1 -0
  264. package/dist/queries/sessions.d.ts +64 -0
  265. package/dist/queries/sessions.d.ts.map +1 -0
  266. package/dist/queries/sessions.js +100 -0
  267. package/dist/queries/sessions.js.map +1 -0
  268. package/dist/queries/shared.d.ts +61 -0
  269. package/dist/queries/shared.d.ts.map +1 -0
  270. package/dist/queries/shared.js +187 -0
  271. package/dist/queries/shared.js.map +1 -0
  272. package/dist/queries/strategies.d.ts +69 -0
  273. package/dist/queries/strategies.d.ts.map +1 -0
  274. package/dist/queries/strategies.js +80 -0
  275. package/dist/queries/strategies.js.map +1 -0
  276. package/dist/queries/workflows.d.ts +17 -0
  277. package/dist/queries/workflows.d.ts.map +1 -0
  278. package/dist/queries/workflows.js +49 -0
  279. package/dist/queries/workflows.js.map +1 -0
  280. package/dist/queries/worktrees.d.ts +38 -0
  281. package/dist/queries/worktrees.d.ts.map +1 -0
  282. package/dist/queries/worktrees.js +37 -0
  283. package/dist/queries/worktrees.js.map +1 -0
  284. package/dist/self-update.d.ts +94 -0
  285. package/dist/self-update.d.ts.map +1 -0
  286. package/dist/self-update.js +438 -0
  287. package/dist/self-update.js.map +1 -0
  288. package/dist/session-lifecycle.d.ts +77 -0
  289. package/dist/session-lifecycle.d.ts.map +1 -0
  290. package/dist/session-lifecycle.js +379 -0
  291. package/dist/session-lifecycle.js.map +1 -0
  292. package/dist/shutdown-state.d.ts +17 -0
  293. package/dist/shutdown-state.d.ts.map +1 -0
  294. package/dist/shutdown-state.js +22 -0
  295. package/dist/shutdown-state.js.map +1 -0
  296. package/dist/spawn-cooldown.d.ts +14 -0
  297. package/dist/spawn-cooldown.d.ts.map +1 -0
  298. package/dist/spawn-cooldown.js +34 -0
  299. package/dist/spawn-cooldown.js.map +1 -0
  300. package/dist/spawn-environment.d.ts +35 -0
  301. package/dist/spawn-environment.d.ts.map +1 -0
  302. package/dist/spawn-environment.js +48 -0
  303. package/dist/spawn-environment.js.map +1 -0
  304. package/dist/spawner-liveness.d.ts +23 -0
  305. package/dist/spawner-liveness.d.ts.map +1 -0
  306. package/dist/spawner-liveness.js +99 -0
  307. package/dist/spawner-liveness.js.map +1 -0
  308. package/dist/spawner-resolution.d.ts +27 -0
  309. package/dist/spawner-resolution.d.ts.map +1 -0
  310. package/dist/spawner-resolution.js +99 -0
  311. package/dist/spawner-resolution.js.map +1 -0
  312. package/dist/spawner-timeout.d.ts +32 -0
  313. package/dist/spawner-timeout.d.ts.map +1 -0
  314. package/dist/spawner-timeout.js +124 -0
  315. package/dist/spawner-timeout.js.map +1 -0
  316. package/dist/spawner.d.ts +77 -0
  317. package/dist/spawner.d.ts.map +1 -0
  318. package/dist/spawner.js +734 -0
  319. package/dist/spawner.js.map +1 -0
  320. package/dist/strategy-completion.d.ts +110 -0
  321. package/dist/strategy-completion.d.ts.map +1 -0
  322. package/dist/strategy-completion.js +434 -0
  323. package/dist/strategy-completion.js.map +1 -0
  324. package/dist/strategy-engine.d.ts +47 -0
  325. package/dist/strategy-engine.d.ts.map +1 -0
  326. package/dist/strategy-engine.js +419 -0
  327. package/dist/strategy-engine.js.map +1 -0
  328. package/dist/strategy-executor.d.ts +93 -0
  329. package/dist/strategy-executor.d.ts.map +1 -0
  330. package/dist/strategy-executor.js +775 -0
  331. package/dist/strategy-executor.js.map +1 -0
  332. package/dist/strategy-lifecycle.d.ts +61 -0
  333. package/dist/strategy-lifecycle.d.ts.map +1 -0
  334. package/dist/strategy-lifecycle.js +516 -0
  335. package/dist/strategy-lifecycle.js.map +1 -0
  336. package/dist/strategy-merge.d.ts +72 -0
  337. package/dist/strategy-merge.d.ts.map +1 -0
  338. package/dist/strategy-merge.js +371 -0
  339. package/dist/strategy-merge.js.map +1 -0
  340. package/dist/strategy-prompt-builder.d.ts +62 -0
  341. package/dist/strategy-prompt-builder.d.ts.map +1 -0
  342. package/dist/strategy-prompt-builder.js +538 -0
  343. package/dist/strategy-prompt-builder.js.map +1 -0
  344. package/dist/strategy-provisioning.d.ts +16 -0
  345. package/dist/strategy-provisioning.d.ts.map +1 -0
  346. package/dist/strategy-provisioning.js +119 -0
  347. package/dist/strategy-provisioning.js.map +1 -0
  348. package/dist/strategy-team-state.d.ts +24 -0
  349. package/dist/strategy-team-state.d.ts.map +1 -0
  350. package/dist/strategy-team-state.js +43 -0
  351. package/dist/strategy-team-state.js.map +1 -0
  352. package/dist/strategy-teardown.d.ts +24 -0
  353. package/dist/strategy-teardown.d.ts.map +1 -0
  354. package/dist/strategy-teardown.js +158 -0
  355. package/dist/strategy-teardown.js.map +1 -0
  356. package/dist/strategy-worktree-state.d.ts +47 -0
  357. package/dist/strategy-worktree-state.d.ts.map +1 -0
  358. package/dist/strategy-worktree-state.js +104 -0
  359. package/dist/strategy-worktree-state.js.map +1 -0
  360. package/dist/supabase.d.ts +36 -0
  361. package/dist/supabase.d.ts.map +1 -0
  362. package/dist/supabase.js +50 -0
  363. package/dist/supabase.js.map +1 -0
  364. package/dist/task-converter.d.ts +61 -0
  365. package/dist/task-converter.d.ts.map +1 -0
  366. package/dist/task-converter.js +286 -0
  367. package/dist/task-converter.js.map +1 -0
  368. package/dist/task-dag-builder.d.ts +14 -0
  369. package/dist/task-dag-builder.d.ts.map +1 -0
  370. package/dist/task-dag-builder.js +17 -0
  371. package/dist/task-dag-builder.js.map +1 -0
  372. package/dist/team-prompt-base.d.ts +114 -0
  373. package/dist/team-prompt-base.d.ts.map +1 -0
  374. package/dist/team-prompt-base.js +531 -0
  375. package/dist/team-prompt-base.js.map +1 -0
  376. package/dist/team-prompt-variants.d.ts +27 -0
  377. package/dist/team-prompt-variants.d.ts.map +1 -0
  378. package/dist/team-prompt-variants.js +134 -0
  379. package/dist/team-prompt-variants.js.map +1 -0
  380. package/dist/team-spawner.d.ts +50 -0
  381. package/dist/team-spawner.d.ts.map +1 -0
  382. package/dist/team-spawner.js +410 -0
  383. package/dist/team-spawner.js.map +1 -0
  384. package/dist/telemetry-writer.d.ts +66 -0
  385. package/dist/telemetry-writer.d.ts.map +1 -0
  386. package/dist/telemetry-writer.js +96 -0
  387. package/dist/telemetry-writer.js.map +1 -0
  388. package/dist/trigger-executor.d.ts +56 -0
  389. package/dist/trigger-executor.d.ts.map +1 -0
  390. package/dist/trigger-executor.js +313 -0
  391. package/dist/trigger-executor.js.map +1 -0
  392. package/dist/types/config.d.ts +60 -0
  393. package/dist/types/config.d.ts.map +1 -0
  394. package/dist/types/config.js +5 -0
  395. package/dist/types/config.js.map +1 -0
  396. package/dist/types/dag.d.ts +53 -0
  397. package/dist/types/dag.d.ts.map +1 -0
  398. package/dist/types/dag.js +5 -0
  399. package/dist/types/dag.js.map +1 -0
  400. package/dist/types/delivery.d.ts +71 -0
  401. package/dist/types/delivery.d.ts.map +1 -0
  402. package/dist/types/delivery.js +5 -0
  403. package/dist/types/delivery.js.map +1 -0
  404. package/dist/types/index.d.ts +15 -0
  405. package/dist/types/index.d.ts.map +1 -0
  406. package/dist/types/index.js +15 -0
  407. package/dist/types/index.js.map +1 -0
  408. package/dist/types/issue.d.ts +22 -0
  409. package/dist/types/issue.d.ts.map +1 -0
  410. package/dist/types/issue.js +5 -0
  411. package/dist/types/issue.js.map +1 -0
  412. package/dist/types/merge.d.ts +28 -0
  413. package/dist/types/merge.d.ts.map +1 -0
  414. package/dist/types/merge.js +5 -0
  415. package/dist/types/merge.js.map +1 -0
  416. package/dist/types/session.d.ts +98 -0
  417. package/dist/types/session.d.ts.map +1 -0
  418. package/dist/types/session.js +5 -0
  419. package/dist/types/session.js.map +1 -0
  420. package/dist/types/strategy.d.ts +175 -0
  421. package/dist/types/strategy.d.ts.map +1 -0
  422. package/dist/types/strategy.js +5 -0
  423. package/dist/types/strategy.js.map +1 -0
  424. package/dist/types/workflow.d.ts +34 -0
  425. package/dist/types/workflow.d.ts.map +1 -0
  426. package/dist/types/workflow.js +9 -0
  427. package/dist/types/workflow.js.map +1 -0
  428. package/dist/types.d.ts +9 -0
  429. package/dist/types.d.ts.map +1 -0
  430. package/dist/types.js +9 -0
  431. package/dist/types.js.map +1 -0
  432. package/dist/unified-init.d.ts +16 -0
  433. package/dist/unified-init.d.ts.map +1 -0
  434. package/dist/unified-init.js +183 -0
  435. package/dist/unified-init.js.map +1 -0
  436. package/dist/unified-shell-config.d.ts +34 -0
  437. package/dist/unified-shell-config.d.ts.map +1 -0
  438. package/dist/unified-shell-config.js +238 -0
  439. package/dist/unified-shell-config.js.map +1 -0
  440. package/dist/unified-shell-status.d.ts +15 -0
  441. package/dist/unified-shell-status.d.ts.map +1 -0
  442. package/dist/unified-shell-status.js +100 -0
  443. package/dist/unified-shell-status.js.map +1 -0
  444. package/dist/unified-shell.d.ts +50 -0
  445. package/dist/unified-shell.d.ts.map +1 -0
  446. package/dist/unified-shell.js +682 -0
  447. package/dist/unified-shell.js.map +1 -0
  448. package/dist/version-check.d.ts +19 -0
  449. package/dist/version-check.d.ts.map +1 -0
  450. package/dist/version-check.js +67 -0
  451. package/dist/version-check.js.map +1 -0
  452. package/dist/workflow-engine.d.ts +95 -0
  453. package/dist/workflow-engine.d.ts.map +1 -0
  454. package/dist/workflow-engine.js +165 -0
  455. package/dist/workflow-engine.js.map +1 -0
  456. package/dist/worktree-merge.d.ts +23 -0
  457. package/dist/worktree-merge.d.ts.map +1 -0
  458. package/dist/worktree-merge.js +57 -0
  459. package/dist/worktree-merge.js.map +1 -0
  460. package/dist/worktree-safety.d.ts +48 -0
  461. package/dist/worktree-safety.d.ts.map +1 -0
  462. package/dist/worktree-safety.js +113 -0
  463. package/dist/worktree-safety.js.map +1 -0
  464. package/dist/worktree-strategy.d.ts +69 -0
  465. package/dist/worktree-strategy.d.ts.map +1 -0
  466. package/dist/worktree-strategy.js +214 -0
  467. package/dist/worktree-strategy.js.map +1 -0
  468. package/dist/worktree.d.ts +159 -0
  469. package/dist/worktree.d.ts.map +1 -0
  470. package/dist/worktree.js +512 -0
  471. package/dist/worktree.js.map +1 -0
  472. package/package.json +76 -0
  473. package/scripts/telora-daemon-wrapper.sh +31 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../src/auto-update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC,MAAM,mBAAmB,GAAG,SAAS,CAAC,CAAC,SAAS;AAehD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,GAAG,WAAW,SAAS,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,4BAA4B,MAAM,KAAK,CAAC,CAAC;QAErD,QAAQ,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACvF,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,IAAI,CACV,qCAAqC,GAAG,CAAC,OAAO,EAAE,CACnD,CAAC;gBACF,IAAI,MAAM;oBAAE,OAAO,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACnE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACf,OAAO;YACT,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,EAAE;gBAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,wCAAwC,MAAM,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACzD,MAAM,EACJ,cAAc,EACd,WAAW,GAAG,gBAAgB,EAC9B,UAAU,GAAG,mBAAmB,EAChC,MAAM,EACN,aAAa,GACd,GAAG,IAAI,CAAC;IAET,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,UAAU,IAAI;QACjB,IAAI,OAAO;YAAE,OAAO;QAEpB,IAAI,CAAC;YACH,qEAAqE;YACrE,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;gBAClE,IAAI,MAAM,EAAE,eAAe,EAAE,CAAC;oBAC5B,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;oBACtC,OAAO,CAAC,GAAG,CACT,oCAAoC,MAAM,CAAC,aAAa,eAAe,cAAc,GAAG,CACzF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,CAAC,cAAc;gBAAE,OAAO;YAE5B,wBAAwB;YACxB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;gBAC9E,OAAO;YACT,CAAC;YAED,qBAAqB;YACrB,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;YAChD,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,2CAA2C;gBAC3C,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;gBACpE,OAAO;YACT,CAAC;YAED,8BAA8B;YAC9B,aAAa,EAAE,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,mCAAmC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACtF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;IACzD,2BAA2B;IAC3B,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,OAAO,CAAC,GAAG,CACT,sCAAsC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAC5E,CAAC;IAEF,OAAO,GAAG,EAAE;QACV,OAAO,GAAG,IAAI,CAAC;QACf,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Branch status computation for the three-tier git model.
3
+ *
4
+ * Computes health/ahead/behind status for:
5
+ * 1. Integration branch vs main and remote
6
+ * 2. Each strategy worktree vs integration
7
+ *
8
+ * Results ride in the heartbeat metadata field (no new tables).
9
+ */
10
+ import type { DaemonConfig } from './types.js';
11
+ export type BranchHealth = 'clean' | 'dirty' | 'conflict';
12
+ export interface IntegrationBranchStatus {
13
+ branch: string;
14
+ health: BranchHealth;
15
+ aheadOfMain: number;
16
+ behindMain: number;
17
+ aheadOfRemote: number;
18
+ behindRemote: number;
19
+ }
20
+ export interface StrategyBranchStatus {
21
+ strategyId: string;
22
+ branch: string;
23
+ headSha: string;
24
+ health: BranchHealth;
25
+ aheadOfIntegration: number;
26
+ behindIntegration: number;
27
+ }
28
+ export interface BranchStatusPayload {
29
+ integration: IntegrationBranchStatus | null;
30
+ strategies: StrategyBranchStatus[];
31
+ }
32
+ /**
33
+ * Compute branch status for all three tiers.
34
+ *
35
+ * Safe to call from the heartbeat loop: uses short git timeouts
36
+ * and catches all errors so a single failure skips that entry
37
+ * rather than failing the entire heartbeat.
38
+ */
39
+ export declare function computeBranchStatus(config: DaemonConfig): BranchStatusPayload;
40
+ //# sourceMappingURL=branch-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-status.d.ts","sourceRoot":"","sources":["../src/branch-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAW/C,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AAE1D,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC5C,UAAU,EAAE,oBAAoB,EAAE,CAAC;CACpC;AAuBD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,mBAAmB,CAkG7E"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Branch status computation for the three-tier git model.
3
+ *
4
+ * Computes health/ahead/behind status for:
5
+ * 1. Integration branch vs main and remote
6
+ * 2. Each strategy worktree vs integration
7
+ *
8
+ * Results ride in the heartbeat metadata field (no new tables).
9
+ */
10
+ import { runGitSync } from './git-types.js';
11
+ import { getDefaultBranch } from './git-branch.js';
12
+ import { getAllStrategyWorktrees } from './strategy-worktree-state.js';
13
+ import { getActiveTeams } from './strategy-team-state.js';
14
+ /** Short timeout for git commands to avoid blocking the heartbeat. */
15
+ const BRANCH_STATUS_GIT_TIMEOUT_MS = 5_000;
16
+ // ── Helpers ──────────────────────────────────────────────────────────
17
+ const gitOpts = { timeoutMs: BRANCH_STATUS_GIT_TIMEOUT_MS };
18
+ /**
19
+ * Count commits in A that are not in B: `git rev-list --count B..A`.
20
+ * Returns 0 on any failure.
21
+ */
22
+ function revListCount(refA, refB, cwd) {
23
+ const result = runGitSync(['rev-list', '--count', `${refB}..${refA}`], cwd, gitOpts);
24
+ if (!result.success)
25
+ return 0;
26
+ const n = parseInt(result.output, 10);
27
+ return Number.isNaN(n) ? 0 : n;
28
+ }
29
+ // ── Main ─────────────────────────────────────────────────────────────
30
+ /**
31
+ * Compute branch status for all three tiers.
32
+ *
33
+ * Safe to call from the heartbeat loop: uses short git timeouts
34
+ * and catches all errors so a single failure skips that entry
35
+ * rather than failing the entire heartbeat.
36
+ */
37
+ export function computeBranchStatus(config) {
38
+ const { repoPath, integrationBranch } = config;
39
+ const defaultBranch = getDefaultBranch(repoPath);
40
+ // ── Integration branch status ────────────────────────────────────
41
+ let integration = null;
42
+ try {
43
+ // Verify the integration branch exists locally
44
+ const refCheck = runGitSync(['rev-parse', '--verify', integrationBranch], repoPath, gitOpts);
45
+ if (refCheck.success) {
46
+ const aheadOfMain = revListCount(integrationBranch, defaultBranch, repoPath);
47
+ const behindMain = revListCount(defaultBranch, integrationBranch, repoPath);
48
+ const aheadOfRemote = revListCount(integrationBranch, `origin/${integrationBranch}`, repoPath);
49
+ const behindRemote = revListCount(`origin/${integrationBranch}`, integrationBranch, repoPath);
50
+ let health = 'clean';
51
+ if (behindMain > 0) {
52
+ health = 'conflict';
53
+ }
54
+ else if (aheadOfMain > 0) {
55
+ health = 'dirty';
56
+ }
57
+ integration = {
58
+ branch: integrationBranch,
59
+ health,
60
+ aheadOfMain,
61
+ behindMain,
62
+ aheadOfRemote,
63
+ behindRemote,
64
+ };
65
+ }
66
+ }
67
+ catch {
68
+ // Non-fatal: integration status will be null
69
+ }
70
+ // ── Strategy worktree statuses ───────────────────────────────────
71
+ const strategies = [];
72
+ const worktrees = getAllStrategyWorktrees();
73
+ const teams = getActiveTeams();
74
+ for (const [strategyId, info] of worktrees) {
75
+ try {
76
+ const headResult = runGitSync(['rev-parse', 'HEAD'], info.worktreePath, gitOpts);
77
+ if (!headResult.success)
78
+ continue;
79
+ const headSha = headResult.output;
80
+ const aheadOfIntegration = revListCount(info.branchName, integrationBranch, repoPath);
81
+ const behindIntegration = revListCount(integrationBranch, info.branchName, repoPath);
82
+ // Check merge conflict flag from active team state
83
+ const team = teams.get(strategyId);
84
+ const isConflicting = team?.resolvingMergeConflict === true;
85
+ let health = 'clean';
86
+ if (isConflicting) {
87
+ health = 'conflict';
88
+ }
89
+ else if (aheadOfIntegration > 0) {
90
+ health = 'dirty';
91
+ }
92
+ strategies.push({
93
+ strategyId,
94
+ branch: info.branchName,
95
+ headSha,
96
+ health,
97
+ aheadOfIntegration,
98
+ behindIntegration,
99
+ });
100
+ }
101
+ catch {
102
+ // Non-fatal: skip this strategy
103
+ }
104
+ }
105
+ return { integration, strategies };
106
+ }
107
+ //# sourceMappingURL=branch-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-status.js","sourceRoot":"","sources":["../src/branch-status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Completion detector for interactive Claude Code sessions.
3
+ *
4
+ * Observes stream-json events from the parser and determines when the
5
+ * agent has finished all work. With stream-json I/O, the process
6
+ * doesn't exit on its own — we need to detect idle state and trigger
7
+ * graceful shutdown.
8
+ *
9
+ * Detection strategy:
10
+ * 1. Track teammate lifecycle (spawned, idle, completed)
11
+ * 2. When we receive a `result` event (turn complete), check if any
12
+ * teammates are still active
13
+ * 3. If the lead is idle and no teammates are active, signal completion
14
+ * 4. Use an inactivity timeout as a fallback safety net
15
+ */
16
+ import { EventEmitter } from 'node:events';
17
+ import type { StreamJsonParser, ResultSuccess, ResultError } from '@telora/daemon-core';
18
+ export interface CompletionDetectorEvents {
19
+ /** Fired when the agent team appears to have completed all work. */
20
+ complete: (info: CompletionInfo) => void;
21
+ /** Fired when the detector suspects the session may be stuck/idle. */
22
+ idle: (info: IdleInfo) => void;
23
+ }
24
+ export interface CompletionInfo {
25
+ /** The result event that triggered completion detection. */
26
+ result: ResultSuccess | ResultError;
27
+ /** Whether all teammates have completed. */
28
+ allTeammatesComplete: boolean;
29
+ /** Total number of result events seen (turns completed). */
30
+ turnCount: number;
31
+ /** Total cost accumulated across all turns. */
32
+ totalCostUsd: number;
33
+ }
34
+ export interface IdleInfo {
35
+ /** How long the session has been idle (ms). */
36
+ idleDurationMs: number;
37
+ /** Number of active teammates when idle was detected. */
38
+ activeTeammateCount: number;
39
+ }
40
+ /**
41
+ * Monitors stream-json events to detect when an interactive agent
42
+ * team session has completed its work.
43
+ */
44
+ export declare class CompletionDetector extends EventEmitter {
45
+ private activeTeammates;
46
+ private turnCount;
47
+ private totalCostUsd;
48
+ private lastResultEvent;
49
+ private idleTimer;
50
+ private isComplete;
51
+ /** Inactivity timeout after a result event (ms). Default: 30 seconds. */
52
+ private readonly idleTimeoutMs;
53
+ constructor(options?: {
54
+ idleTimeoutMs?: number;
55
+ });
56
+ /**
57
+ * Attach the detector to a stream-json parser.
58
+ */
59
+ attach(parser: StreamJsonParser): void;
60
+ private handleResult;
61
+ private handleTeammate;
62
+ private checkCompletion;
63
+ private signalComplete;
64
+ private startIdleTimer;
65
+ private resetIdleTimer;
66
+ private clearIdleTimer;
67
+ /** Get current state for status reporting. */
68
+ getState(): {
69
+ turnCount: number;
70
+ totalCostUsd: number;
71
+ activeTeammateCount: number;
72
+ activeTeammates: string[];
73
+ isComplete: boolean;
74
+ };
75
+ /**
76
+ * Reset the detector for a new work cycle.
77
+ *
78
+ * Clears per-cycle state (completion flag, active teammates, last result,
79
+ * idle timer) so the detector can fire 'complete' again on new work.
80
+ * Cumulative counters (turnCount, totalCostUsd) are preserved as
81
+ * session-lifetime metrics.
82
+ */
83
+ reset(): void;
84
+ /** Clean up timers. */
85
+ destroy(): void;
86
+ }
87
+ //# sourceMappingURL=completion-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion-detector.d.ts","sourceRoot":"","sources":["../src/completion-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,WAAW,EAGZ,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,wBAAwB;IACvC,oEAAoE;IACpE,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACzC,sEAAsE;IACtE,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,MAAM,EAAE,aAAa,GAAG,WAAW,CAAC;IACpC,4CAA4C;IAC5C,oBAAoB,EAAE,OAAO,CAAC;IAC9B,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,eAAe,CAA4C;IACnE,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,UAAU,CAAS;IAE3B,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE;IAKhD;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAetC,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,cAAc;IAOtB,8CAA8C;IAC9C,QAAQ,IAAI;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,UAAU,EAAE,OAAO,CAAC;KACrB;IAUD;;;;;;;OAOG;IACH,KAAK,IAAI,IAAI;IAOb,uBAAuB;IACvB,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Completion detector for interactive Claude Code sessions.
3
+ *
4
+ * Observes stream-json events from the parser and determines when the
5
+ * agent has finished all work. With stream-json I/O, the process
6
+ * doesn't exit on its own — we need to detect idle state and trigger
7
+ * graceful shutdown.
8
+ *
9
+ * Detection strategy:
10
+ * 1. Track teammate lifecycle (spawned, idle, completed)
11
+ * 2. When we receive a `result` event (turn complete), check if any
12
+ * teammates are still active
13
+ * 3. If the lead is idle and no teammates are active, signal completion
14
+ * 4. Use an inactivity timeout as a fallback safety net
15
+ */
16
+ import { EventEmitter } from 'node:events';
17
+ /**
18
+ * Monitors stream-json events to detect when an interactive agent
19
+ * team session has completed its work.
20
+ */
21
+ export class CompletionDetector extends EventEmitter {
22
+ activeTeammates = new Map(); // agent_id -> agent_name
23
+ turnCount = 0;
24
+ totalCostUsd = 0;
25
+ lastResultEvent = null;
26
+ idleTimer = null;
27
+ isComplete = false;
28
+ /** Inactivity timeout after a result event (ms). Default: 30 seconds. */
29
+ idleTimeoutMs;
30
+ constructor(options) {
31
+ super();
32
+ this.idleTimeoutMs = options?.idleTimeoutMs ?? 30000;
33
+ }
34
+ /**
35
+ * Attach the detector to a stream-json parser.
36
+ */
37
+ attach(parser) {
38
+ parser.on('result', (result) => {
39
+ this.handleResult(result);
40
+ });
41
+ parser.on('teammate', (event) => {
42
+ this.handleTeammate(event);
43
+ });
44
+ // Track any activity to reset idle detection
45
+ parser.on('event', (_event) => {
46
+ this.resetIdleTimer();
47
+ });
48
+ }
49
+ handleResult(result) {
50
+ this.turnCount++;
51
+ this.lastResultEvent = result;
52
+ if (result.total_cost_usd) {
53
+ this.totalCostUsd += result.total_cost_usd;
54
+ }
55
+ // A result event means the lead agent finished a turn.
56
+ // Check if all teammates are done too.
57
+ this.checkCompletion();
58
+ }
59
+ handleTeammate(event) {
60
+ switch (event.subtype) {
61
+ case 'teammate_spawned':
62
+ this.activeTeammates.set(event.agent_id, event.agent_name);
63
+ // New teammate spawned — cancel any pending completion
64
+ this.clearIdleTimer();
65
+ break;
66
+ case 'teammate_idle':
67
+ // Teammate is idle but not done yet — keep tracking
68
+ break;
69
+ case 'teammate_completed':
70
+ this.activeTeammates.delete(event.agent_id);
71
+ // Teammate finished — check if we can signal completion
72
+ if (this.lastResultEvent && this.activeTeammates.size === 0) {
73
+ this.checkCompletion();
74
+ }
75
+ break;
76
+ }
77
+ }
78
+ checkCompletion() {
79
+ if (this.isComplete)
80
+ return;
81
+ if (!this.lastResultEvent)
82
+ return;
83
+ // If no teammates were ever spawned, or all teammates have completed,
84
+ // the session is complete after the lead finishes its turn.
85
+ if (this.activeTeammates.size === 0) {
86
+ this.signalComplete();
87
+ }
88
+ else {
89
+ // Teammates still active — start idle timer as fallback.
90
+ // The lead is idle waiting for input, but teammates are still running.
91
+ // Wait for all teammates to finish.
92
+ this.startIdleTimer();
93
+ }
94
+ }
95
+ signalComplete() {
96
+ if (this.isComplete)
97
+ return;
98
+ this.isComplete = true;
99
+ this.clearIdleTimer();
100
+ this.emit('complete', {
101
+ result: this.lastResultEvent,
102
+ allTeammatesComplete: this.activeTeammates.size === 0,
103
+ turnCount: this.turnCount,
104
+ totalCostUsd: this.totalCostUsd,
105
+ });
106
+ }
107
+ startIdleTimer() {
108
+ this.clearIdleTimer();
109
+ this.idleTimer = setTimeout(() => {
110
+ if (this.isComplete)
111
+ return;
112
+ this.emit('idle', {
113
+ idleDurationMs: this.idleTimeoutMs,
114
+ activeTeammateCount: this.activeTeammates.size,
115
+ });
116
+ }, this.idleTimeoutMs);
117
+ }
118
+ resetIdleTimer() {
119
+ // Only reset if we have a timer running (we're in idle-detection mode)
120
+ if (this.idleTimer) {
121
+ this.startIdleTimer();
122
+ }
123
+ }
124
+ clearIdleTimer() {
125
+ if (this.idleTimer) {
126
+ clearTimeout(this.idleTimer);
127
+ this.idleTimer = null;
128
+ }
129
+ }
130
+ /** Get current state for status reporting. */
131
+ getState() {
132
+ return {
133
+ turnCount: this.turnCount,
134
+ totalCostUsd: this.totalCostUsd,
135
+ activeTeammateCount: this.activeTeammates.size,
136
+ activeTeammates: Array.from(this.activeTeammates.values()),
137
+ isComplete: this.isComplete,
138
+ };
139
+ }
140
+ /**
141
+ * Reset the detector for a new work cycle.
142
+ *
143
+ * Clears per-cycle state (completion flag, active teammates, last result,
144
+ * idle timer) so the detector can fire 'complete' again on new work.
145
+ * Cumulative counters (turnCount, totalCostUsd) are preserved as
146
+ * session-lifetime metrics.
147
+ */
148
+ reset() {
149
+ this.isComplete = false;
150
+ this.activeTeammates.clear();
151
+ this.lastResultEvent = null;
152
+ this.clearIdleTimer();
153
+ }
154
+ /** Clean up timers. */
155
+ destroy() {
156
+ this.clearIdleTimer();
157
+ this.removeAllListeners();
158
+ }
159
+ }
160
+ //# sourceMappingURL=completion-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion-detector.js","sourceRoot":"","sources":["../src/completion-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Completion handler - processes agent exit events.
3
+ *
4
+ * Handles the post-completion lifecycle for the legacy per-delivery model:
5
+ * - Querying open issues and session counts
6
+ * - Workflow-driven transition determination
7
+ * - Guard evaluation at stage transitions
8
+ * - Merge operations (integration branch, CI/CD)
9
+ * - Delivery status updates and session finalization
10
+ * - Worktree cleanup and re-poll triggering
11
+ *
12
+ * For the strategy team model, see delivery-lifecycle.ts which provides
13
+ * reusable functions (evaluateGuardsForDeliveryTransition, mergeDeliveryBranch,
14
+ * advanceDeliveryStage) that the team lead calls directly.
15
+ */
16
+ import type { WriteStream } from 'node:fs';
17
+ import type { DaemonConfig, DeliveryContext, RunningAgent, Workflow } from './types.js';
18
+ import type { CompletionDetector } from './completion-detector.js';
19
+ /**
20
+ * Parameters passed to the completion handler from the spawner's closure context.
21
+ */
22
+ export interface CompletionHandlerParams {
23
+ config: DaemonConfig;
24
+ context: DeliveryContext;
25
+ runningAgent: RunningAgent;
26
+ workflow: Workflow;
27
+ branchName: string;
28
+ currentStageId: string | undefined;
29
+ timedOut: boolean;
30
+ timeoutMs: number;
31
+ sessionId: string;
32
+ deliveryId: string;
33
+ completionDetector: CompletionDetector;
34
+ stdoutLogStream: WriteStream;
35
+ stderrStream: WriteStream;
36
+ jsonlStream: WriteStream;
37
+ /** Mutable reference to the running agents map for cleanup. */
38
+ runningAgents: Map<string, RunningAgent>;
39
+ }
40
+ /**
41
+ * Handle agent process exit.
42
+ *
43
+ * This is the main post-completion handler that runs when a Claude Code agent
44
+ * process exits. It determines the workflow transition, evaluates guards,
45
+ * performs merge operations, and updates delivery/session status.
46
+ */
47
+ export declare function handleAgentCompletion(code: number | null, signal: string | null, params: CompletionHandlerParams): Promise<void>;
48
+ //# sourceMappingURL=completion-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion-handler.d.ts","sourceRoot":"","sources":["../src/completion-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAqC,MAAM,YAAY,CAAC;AAQ3H,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAInE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,WAAW,CAAC;IAC7B,YAAY,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,+DAA+D;IAC/D,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAkMf"}