@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,99 @@
1
+ /**
2
+ * Stale agent process detection and liveness checking.
3
+ *
4
+ * Detects agents whose processes have disappeared (OOM kill, external kill -9, etc.)
5
+ * without firing a 'close' event, and cleans up the agent entry and session.
6
+ */
7
+ import { readFileSync } from 'node:fs';
8
+ import { updateSession } from './supabase.js';
9
+ import { recordSessionCompleted } from './heartbeat.js';
10
+ import { removeWorktree } from './git.js';
11
+ /**
12
+ * Check if a process is alive. Returns false if the process doesn't exist
13
+ * or is a zombie on Linux.
14
+ */
15
+ export function isProcessAlive(pid) {
16
+ // Check if PID exists
17
+ try {
18
+ process.kill(pid, 0);
19
+ }
20
+ catch (e) {
21
+ console.debug(`[spawner] isProcessAlive(${pid}): process not found (ESRCH):`, e.message);
22
+ return false;
23
+ }
24
+ // On Linux, check for zombie state via /proc/{pid}/status
25
+ if (process.platform === 'linux') {
26
+ try {
27
+ const status = readFileSync(`/proc/${pid}/status`, 'utf-8');
28
+ const stateMatch = status.match(/^State:\s+(\S)/m);
29
+ if (stateMatch && stateMatch[1] === 'Z') {
30
+ return false; // Zombie -- won't produce an exit event
31
+ }
32
+ }
33
+ catch (e) {
34
+ console.debug(`[spawner] isProcessAlive(${pid}): /proc read failed, treating as dead:`, e.message);
35
+ return false;
36
+ }
37
+ }
38
+ return true;
39
+ }
40
+ /**
41
+ * Check all running agents for PID liveness.
42
+ *
43
+ * If an agent's process has disappeared (OOM kill, external kill -9, etc.)
44
+ * without firing a 'close' event, clean up the agent entry and update the
45
+ * session in the database.
46
+ *
47
+ * Guards against double-cleanup by checking runningAgents.has() before acting.
48
+ */
49
+ export async function checkAgentLiveness(config, runningAgents) {
50
+ if (runningAgents.size === 0)
51
+ return;
52
+ // Snapshot keys to avoid mutating the map while iterating
53
+ const entries = [...runningAgents.entries()];
54
+ for (const [sessionId, agent] of entries) {
55
+ // Guard: agent may have been cleaned up by a normal exit event since we started
56
+ if (!runningAgents.has(sessionId))
57
+ continue;
58
+ if (isProcessAlive(agent.pid))
59
+ continue;
60
+ // PID is gone -- stale agent detected
61
+ const runtime = Math.round((Date.now() - agent.startedAt.getTime()) / 1000);
62
+ console.error(`[liveness] Stale agent detected: "${agent.deliveryName}" ` +
63
+ `(session: ${sessionId}, PID: ${agent.pid}, runtime: ${runtime}s). ` +
64
+ `Process disappeared -- possible OOM or external kill.`);
65
+ // Clear timeout timers
66
+ if (agent.warningTimer)
67
+ clearTimeout(agent.warningTimer);
68
+ if (agent.timeoutTimer)
69
+ clearTimeout(agent.timeoutTimer);
70
+ // Remove from tracking map
71
+ runningAgents.delete(sessionId);
72
+ // Update session in database
73
+ try {
74
+ await updateSession(sessionId, {
75
+ status: 'failed',
76
+ exit_reason: 'Process disappeared -- possible OOM or external kill',
77
+ ended_at: new Date().toISOString(),
78
+ });
79
+ }
80
+ catch (err) {
81
+ console.error(`[liveness] Failed to update session ${sessionId}:`, err.message);
82
+ }
83
+ // Record session completion for heartbeat counters
84
+ recordSessionCompleted(0, 0);
85
+ // Clean up worktree (safety guards in removeWorktree protect uncommitted work)
86
+ try {
87
+ removeWorktree(config.repoPath, agent.worktreePath, {
88
+ branchName: agent.branchName,
89
+ integrationBranch: config.integrationBranch,
90
+ deliveryName: agent.deliveryName,
91
+ mergeSucceeded: false,
92
+ });
93
+ }
94
+ catch (worktreeErr) {
95
+ console.error(`[liveness] Failed to remove worktree for "${agent.deliveryName}":`, worktreeErr.message);
96
+ }
97
+ }
98
+ }
99
+ //# sourceMappingURL=spawner-liveness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawner-liveness.js","sourceRoot":"","sources":["../src/spawner-liveness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Merge conflict resolution agent spawner.
3
+ *
4
+ * Spawns a short-lived, single-purpose Claude Code agent for merge conflict
5
+ * resolution. Used when no active team exists for a strategy but merge
6
+ * conflicts need resolution.
7
+ */
8
+ import type { DaemonConfig } from './types.js';
9
+ /**
10
+ * Spawn a short-lived, single-purpose Claude Code agent for merge conflict resolution.
11
+ *
12
+ * Used when no active team exists for a strategy but merge conflicts need resolution.
13
+ * The agent receives a focused prompt with conflict details, resolves in the existing
14
+ * worktree, and exits. No session DB record, no streaming, no team mode.
15
+ */
16
+ export declare function spawnResolutionAgent(params: {
17
+ config: DaemonConfig;
18
+ worktreePath: string;
19
+ branchName: string;
20
+ integrationBranch: string;
21
+ conflictFiles: string[];
22
+ strategyDescription: string;
23
+ }): Promise<{
24
+ success: boolean;
25
+ error?: string;
26
+ }>;
27
+ //# sourceMappingURL=spawner-resolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawner-resolution.d.ts","sourceRoot":"","sources":["../src/spawner-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO/C;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkFhD"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Merge conflict resolution agent spawner.
3
+ *
4
+ * Spawns a short-lived, single-purpose Claude Code agent for merge conflict
5
+ * resolution. Used when no active team exists for a strategy but merge
6
+ * conflicts need resolution.
7
+ */
8
+ import { spawn } from 'node:child_process';
9
+ import { runGitSync } from './git-types.js';
10
+ import { stripClaudeCodeEnvVars } from '@telora/daemon-core';
11
+ /** Timeout for the resolution agent (10 minutes). */
12
+ const RESOLUTION_AGENT_TIMEOUT_MS = 10 * 60 * 1000;
13
+ /**
14
+ * Spawn a short-lived, single-purpose Claude Code agent for merge conflict resolution.
15
+ *
16
+ * Used when no active team exists for a strategy but merge conflicts need resolution.
17
+ * The agent receives a focused prompt with conflict details, resolves in the existing
18
+ * worktree, and exits. No session DB record, no streaming, no team mode.
19
+ */
20
+ export async function spawnResolutionAgent(params) {
21
+ const { config, worktreePath, branchName, integrationBranch, conflictFiles, strategyDescription } = params;
22
+ const prompt = [
23
+ `You are resolving merge conflicts in a git worktree.`,
24
+ ``,
25
+ `**Worktree:** ${worktreePath}`,
26
+ `**Branch:** ${branchName}`,
27
+ `**Merge source:** origin/${integrationBranch}`,
28
+ ``,
29
+ `**Conflicted files:**`,
30
+ ...conflictFiles.map(f => `- ${f}`),
31
+ ``,
32
+ `**Strategy context:** ${strategyDescription}`,
33
+ ``,
34
+ `**Instructions:**`,
35
+ `1. Open each conflicted file and resolve the conflict markers (<<<<<<< / ======= / >>>>>>>)`,
36
+ `2. Stage each resolved file with: git add <file>`,
37
+ `3. Commit the merge resolution: git commit --no-edit`,
38
+ `4. Run: npm run build && npm test`,
39
+ `5. If build or test fails, fix the issues, commit, and re-run until passing`,
40
+ ``,
41
+ `Do NOT run git merge --abort. Your goal is to produce a clean merge commit that passes build and tests.`,
42
+ `Follow the coding standards in CLAUDE.md.`,
43
+ ].join('\n');
44
+ const args = [
45
+ '--print',
46
+ '--dangerously-skip-permissions',
47
+ '--setting-sources', 'project,local',
48
+ prompt,
49
+ ];
50
+ // Build a clean environment (strip Claude Code session vars)
51
+ const spawnEnv = stripClaudeCodeEnvVars(process.env);
52
+ console.log(`[spawner] Spawning resolution agent for branch ${branchName} (${conflictFiles.length} conflicts)`);
53
+ return new Promise((resolve) => {
54
+ const proc = spawn(config.claudeCodePath, args, {
55
+ cwd: worktreePath,
56
+ env: spawnEnv,
57
+ stdio: ['pipe', 'pipe', 'pipe'],
58
+ });
59
+ // Close stdin immediately -- prompt is passed as CLI arg
60
+ proc.stdin?.end();
61
+ // Timeout with escalating shutdown
62
+ const timeout = setTimeout(() => {
63
+ console.warn(`[spawner] Resolution agent timed out after ${RESOLUTION_AGENT_TIMEOUT_MS / 1000}s, killing`);
64
+ try {
65
+ process.kill(proc.pid, 'SIGTERM');
66
+ }
67
+ catch { /* ignore */ }
68
+ setTimeout(() => {
69
+ try {
70
+ process.kill(proc.pid, 'SIGKILL');
71
+ }
72
+ catch { /* ignore */ }
73
+ }, 10000);
74
+ }, RESOLUTION_AGENT_TIMEOUT_MS);
75
+ proc.on('close', (code) => {
76
+ clearTimeout(timeout);
77
+ // Verify resolution by checking for remaining unmerged files
78
+ const unmergedResult = runGitSync(['diff', '--name-only', '--diff-filter=U'], worktreePath);
79
+ const unmergedFiles = unmergedResult.success
80
+ ? unmergedResult.output.split('\n').filter(Boolean)
81
+ : [];
82
+ if (unmergedFiles.length === 0) {
83
+ console.log(`[spawner] Resolution agent succeeded for branch ${branchName} (exit code: ${code})`);
84
+ resolve({ success: true });
85
+ }
86
+ else {
87
+ const msg = `Conflicts remain in: ${unmergedFiles.join(', ')}`;
88
+ console.warn(`[spawner] Resolution agent failed for branch ${branchName}: ${msg}`);
89
+ resolve({ success: false, error: msg });
90
+ }
91
+ });
92
+ proc.on('error', (err) => {
93
+ clearTimeout(timeout);
94
+ console.error(`[spawner] Resolution agent spawn error: ${err.message}`);
95
+ resolve({ success: false, error: `Spawn error: ${err.message}` });
96
+ });
97
+ });
98
+ }
99
+ //# sourceMappingURL=spawner-resolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawner-resolution.js","sourceRoot":"","sources":["../src/spawner-resolution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Timeout enforcement and graceful shutdown for agent sessions.
3
+ *
4
+ * Handles per-agent timeout warnings, escalating shutdown sequences
5
+ * (stdin close -> SIGTERM -> SIGKILL), and graceful completion shutdown.
6
+ */
7
+ import type { Writable } from 'node:stream';
8
+ import type { DaemonConfig, RunningAgent } from './types.js';
9
+ /**
10
+ * Safely send a signal to a process, ignoring errors if the process has already exited.
11
+ */
12
+ export declare function safeSendSignal(pid: number, signal: NodeJS.Signals): void;
13
+ /**
14
+ * Safely close a writable stdin stream, ignoring errors if already closed.
15
+ */
16
+ export declare function safeCloseStdin(stdin: Writable): void;
17
+ /**
18
+ * Set up per-agent timeout enforcement with warning at 80% and escalating shutdown.
19
+ *
20
+ * Returns a `timedOut` accessor function (closure over mutable state).
21
+ */
22
+ export declare function setupTimeoutEnforcement(config: DaemonConfig, runningAgent: RunningAgent, deliveryName: string, sessionId: string, runningAgents: Map<string, RunningAgent>): {
23
+ getTimedOut: () => boolean;
24
+ };
25
+ /**
26
+ * Initiate graceful shutdown for an agent session.
27
+ *
28
+ * Sends a wrap-up message via stdin, waits for the process to exit,
29
+ * and escalates to SIGTERM/SIGKILL if needed.
30
+ */
31
+ export declare function initiateGracefulShutdown(agent: RunningAgent, deliveryName: string, runningAgents: Map<string, RunningAgent>): void;
32
+ //# sourceMappingURL=spawner-timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawner-timeout.d.ts","sourceRoot":"","sources":["../src/spawner-timeout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG7D;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAMxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAMpD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACvC;IAAE,WAAW,EAAE,MAAM,OAAO,CAAA;CAAE,CAuChC;AA8BD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACvC,IAAI,CAuCN"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Timeout enforcement and graceful shutdown for agent sessions.
3
+ *
4
+ * Handles per-agent timeout warnings, escalating shutdown sequences
5
+ * (stdin close -> SIGTERM -> SIGKILL), and graceful completion shutdown.
6
+ */
7
+ import { sendMessage } from '@telora/daemon-core';
8
+ /**
9
+ * Safely send a signal to a process, ignoring errors if the process has already exited.
10
+ */
11
+ export function safeSendSignal(pid, signal) {
12
+ try {
13
+ process.kill(pid, signal);
14
+ }
15
+ catch (e) {
16
+ console.debug(`[spawner] safeSendSignal(${pid}, ${signal}) failed (process may have exited):`, e.message);
17
+ }
18
+ }
19
+ /**
20
+ * Safely close a writable stdin stream, ignoring errors if already closed.
21
+ */
22
+ export function safeCloseStdin(stdin) {
23
+ try {
24
+ stdin.end();
25
+ }
26
+ catch (e) {
27
+ console.debug('[spawner] safeCloseStdin failed (stdin may already be closed):', e.message);
28
+ }
29
+ }
30
+ /**
31
+ * Set up per-agent timeout enforcement with warning at 80% and escalating shutdown.
32
+ *
33
+ * Returns a `timedOut` accessor function (closure over mutable state).
34
+ */
35
+ export function setupTimeoutEnforcement(config, runningAgent, deliveryName, sessionId, runningAgents) {
36
+ let timedOut = false;
37
+ const timeoutMs = config.sessionTimeoutMs;
38
+ if (timeoutMs <= 0) {
39
+ return { getTimedOut: () => timedOut };
40
+ }
41
+ // Warning at 80% of timeout -- send warning via stdin
42
+ const warningMs = Math.floor(timeoutMs * 0.8);
43
+ runningAgent.warningTimer = setTimeout(() => {
44
+ const remaining = Math.ceil((timeoutMs - warningMs) / 60000);
45
+ console.warn(`[timeout] Agent for "${deliveryName}" at 80% of timeout limit. ` +
46
+ `Sending warning via stdin. ~${remaining} min remaining.`);
47
+ sendMessage(runningAgent.stdin, `WARNING: You have approximately ${remaining} minutes remaining before the session ` +
48
+ `is terminated. Please wrap up your current work, commit changes, and prepare to exit.`);
49
+ }, warningMs);
50
+ // Hard timeout -- escalating shutdown: message -> close stdin -> SIGTERM -> SIGKILL
51
+ runningAgent.timeoutTimer = setTimeout(() => {
52
+ timedOut = true;
53
+ console.error(`[timeout] Agent for "${deliveryName}" exceeded ${timeoutMs / 60000} min timeout. ` +
54
+ `Sending shutdown message...`);
55
+ runningAgent.streamState = 'shutting_down';
56
+ sendMessage(runningAgent.stdin, `TIMEOUT: Session time limit reached. Stop all work immediately, commit any changes, and exit now.`);
57
+ scheduleTimeoutEscalation(runningAgent, deliveryName, sessionId, runningAgents);
58
+ }, timeoutMs);
59
+ return { getTimedOut: () => timedOut };
60
+ }
61
+ /**
62
+ * Schedule escalating shutdown steps after the initial timeout message:
63
+ * stdin close -> SIGTERM -> SIGKILL
64
+ */
65
+ function scheduleTimeoutEscalation(agent, deliveryName, sessionId, runningAgents) {
66
+ // Close stdin after a short grace period to signal EOF
67
+ setTimeout(() => safeCloseStdin(agent.stdin), 10000);
68
+ // SIGTERM after stdin close grace period
69
+ setTimeout(() => {
70
+ if (!runningAgents.has(sessionId))
71
+ return;
72
+ console.error(`[timeout] Agent for "${deliveryName}" did not exit after stdin close. Sending SIGTERM...`);
73
+ safeSendSignal(agent.pid, 'SIGTERM');
74
+ }, 20000);
75
+ // SIGKILL as absolute last resort
76
+ setTimeout(() => {
77
+ if (!runningAgents.has(sessionId))
78
+ return;
79
+ console.error(`[timeout] Agent for "${deliveryName}" still running. Sending SIGKILL...`);
80
+ safeSendSignal(agent.pid, 'SIGKILL');
81
+ }, 30000);
82
+ }
83
+ /**
84
+ * Initiate graceful shutdown for an agent session.
85
+ *
86
+ * Sends a wrap-up message via stdin, waits for the process to exit,
87
+ * and escalates to SIGTERM/SIGKILL if needed.
88
+ */
89
+ export function initiateGracefulShutdown(agent, deliveryName, runningAgents) {
90
+ const GRACE_PERIOD_MS = 60000; // 60s for agent to wrap up
91
+ const ESCALATION_STEP_MS = 10000; // 10s between escalation steps
92
+ // Send wrap-up message
93
+ sendMessage(agent.stdin, 'All work is complete. Please commit any remaining changes, clean up, and exit.');
94
+ // Flat escalation chain using absolute offsets from now
95
+ // Step 1: Close stdin after grace period
96
+ const graceTimer = setTimeout(() => {
97
+ if (!runningAgents.has(agent.sessionId))
98
+ return;
99
+ console.warn(`[shutdown] Agent for "${deliveryName}" did not exit within grace period. Closing stdin...`);
100
+ safeCloseStdin(agent.stdin);
101
+ }, GRACE_PERIOD_MS);
102
+ // Step 2: SIGTERM after grace period + one escalation step
103
+ setTimeout(() => {
104
+ if (!runningAgents.has(agent.sessionId))
105
+ return;
106
+ console.warn(`[shutdown] Agent for "${deliveryName}" did not exit after stdin close. Sending SIGTERM...`);
107
+ safeSendSignal(agent.pid, 'SIGTERM');
108
+ }, GRACE_PERIOD_MS + ESCALATION_STEP_MS);
109
+ // Step 3: SIGKILL after grace period + two escalation steps
110
+ setTimeout(() => {
111
+ if (!runningAgents.has(agent.sessionId))
112
+ return;
113
+ console.error(`[shutdown] Agent for "${deliveryName}" still running. Sending SIGKILL...`);
114
+ safeSendSignal(agent.pid, 'SIGKILL');
115
+ }, GRACE_PERIOD_MS + ESCALATION_STEP_MS * 2);
116
+ // Clean up timer if process exits before grace period
117
+ const checkExit = setInterval(() => {
118
+ if (!runningAgents.has(agent.sessionId)) {
119
+ clearTimeout(graceTimer);
120
+ clearInterval(checkExit);
121
+ }
122
+ }, 1000);
123
+ }
124
+ //# sourceMappingURL=spawner-timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawner-timeout.js","sourceRoot":"","sources":["../src/spawner-timeout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Claude Code spawner - manages spawning and tracking agent processes.
3
+ *
4
+ * Spawns agents at delivery level with full context including:
5
+ * - Product info (name, vision, description)
6
+ * - Delivery details (name, description, acceptance criteria, tech context)
7
+ * - All context groups and tasks within the delivery
8
+ *
9
+ * Each agent runs in an isolated git worktree created from the integration branch.
10
+ * On successful completion, the agent's branch is merged into integration.
11
+ */
12
+ import type { DaemonConfig, AgentRole, RunningAgent } from './types.js';
13
+ import { type ResourceGovernor } from '@telora/daemon-core';
14
+ /** Inject the resource governor for global concurrency limiting. */
15
+ export declare function initGovernor(gov: ResourceGovernor): void;
16
+ /**
17
+ * Get map of running agents.
18
+ */
19
+ export declare function getRunningAgents(): Map<string, RunningAgent>;
20
+ /**
21
+ * Spawn a Claude Code agent to work on a delivery.
22
+ *
23
+ * The agent runs in an isolated git worktree created from the integration branch.
24
+ * On successful completion, the agent's changes are merged back to integration.
25
+ */
26
+ export declare function spawnAgentForDelivery(config: DaemonConfig, deliveryId: string, role: AgentRole, strategyId: string): Promise<void>;
27
+ /**
28
+ * Terminate a running agent.
29
+ * Sends a shutdown message via stdin, then escalates to SIGTERM/SIGKILL.
30
+ */
31
+ export declare function terminateAgent(sessionId: string): boolean;
32
+ /**
33
+ * Terminate all running agents.
34
+ */
35
+ export declare function terminateAllAgents(): void;
36
+ /**
37
+ * Check if an agent is running for a session.
38
+ */
39
+ export declare function isAgentRunning(sessionId: string): boolean;
40
+ /**
41
+ * Get count of running agents.
42
+ */
43
+ export declare function getRunningAgentCount(): number;
44
+ /**
45
+ * Spawn a short-lived, single-purpose Claude Code agent for merge conflict resolution.
46
+ *
47
+ * Used when no active team exists for a strategy but merge conflicts need resolution.
48
+ * The agent receives a focused prompt with conflict details, resolves in the existing
49
+ * worktree, and exits. No session DB record, no streaming, no team mode.
50
+ */
51
+ export declare function spawnResolutionAgent(params: {
52
+ config: DaemonConfig;
53
+ worktreePath: string;
54
+ branchName: string;
55
+ integrationBranch: string;
56
+ conflictFiles: string[];
57
+ strategyDescription: string;
58
+ }): Promise<{
59
+ success: boolean;
60
+ error?: string;
61
+ }>;
62
+ /**
63
+ * Check if a process is alive. Returns false if the process doesn't exist
64
+ * or is a zombie on Linux.
65
+ */
66
+ export declare function isProcessAlive(pid: number): boolean;
67
+ /**
68
+ * Check all running agents for PID liveness.
69
+ *
70
+ * If an agent's process has disappeared (OOM kill, external kill -9, etc.)
71
+ * without firing a 'close' event, clean up the agent entry and update the
72
+ * session in the database.
73
+ *
74
+ * Guards against double-cleanup by checking runningAgents.has() before acting.
75
+ */
76
+ export declare function checkAgentLiveness(config: DaemonConfig): Promise<void>;
77
+ //# sourceMappingURL=spawner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawner.d.ts","sourceRoot":"","sources":["../src/spawner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAmB,YAAY,EAAY,MAAM,YAAY,CAAC;AAQnG,OAAO,EAA+F,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAczJ,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAE5D;AAsJD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA8Mf;AAmND;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CA2BzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAOD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkFhD;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAwBnD;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqD5E"}