@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,379 @@
1
+ /**
2
+ * Session lifecycle management for strategy teams.
3
+ *
4
+ * Extracted from strategy-executor.ts. Contains functions for session
5
+ * start/end, cleanup, error handling, team completion detection,
6
+ * termination, and deactivation checks.
7
+ */
8
+ import { updateSession } from './supabase.js';
9
+ import { getReadyStrategies } from './supabase.js';
10
+ import { withRetry, sendMessage } from '@telora/daemon-core';
11
+ import { recordActivity, clearNarration } from './heartbeat.js';
12
+ import { buildWakeMessage } from './strategy-prompt-builder.js';
13
+ import { getStrategyDeliveries, getStrategyIssues } from './queries/strategies.js';
14
+ import { getActiveTeams, } from './strategy-team-state.js';
15
+ import { mergeStrategyBranch, escalateMergeConflict } from './strategy-merge.js';
16
+ import { handleTeamCompletion, TERMINAL_DELIVERY_STATUSES, TEAM_WORK_STATUSES, } from './strategy-completion.js';
17
+ import { getGovernor } from './team-spawner.js';
18
+ /**
19
+ * Handle a 'complete' event from the CompletionDetector.
20
+ *
21
+ * Queries current delivery and issue state to decide whether to:
22
+ * - Terminate the team (all deliveries terminal or no open issues remain), or
23
+ * - Send a mid-strategy handoff message with remaining work.
24
+ *
25
+ * Extracted from the inline event callback in spawnStrategyTeam to eliminate
26
+ * deep nesting inside an async Promise chain inside an event listener.
27
+ */
28
+ async function handleCompletionEvent(ctx) {
29
+ const { strategyId, strategyName, teamState, completionDetector, proc } = ctx;
30
+ const [currentDeliveries, currentIssues] = await Promise.all([
31
+ getStrategyDeliveries(strategyId),
32
+ getStrategyIssues(strategyId),
33
+ ]);
34
+ // If all deliveries are terminal, shut down
35
+ const allTerminal = currentDeliveries.every(d => TERMINAL_DELIVERY_STATUSES.has(d.executionStatus ?? ''));
36
+ if (allTerminal) {
37
+ console.log(`[strategy-executor] All deliveries terminal for "${strategyName}" -- terminating team`);
38
+ terminateTeam(strategyId);
39
+ return;
40
+ }
41
+ // Check if there are actionable deliveries (queued/coding) with open issues
42
+ const actionableStatuses = new Set(['queued', 'coding']);
43
+ const actionableDeliveryIds = new Set(currentDeliveries
44
+ .filter(d => actionableStatuses.has(d.executionStatus ?? ''))
45
+ .map(d => d.id));
46
+ if (actionableDeliveryIds.size === 0) {
47
+ console.log(`[strategy-executor] No actionable deliveries for "${strategyName}" -- terminating team`);
48
+ terminateTeam(strategyId);
49
+ return;
50
+ }
51
+ const OPEN_ISSUE_STATUSES = new Set(['To Do', 'In Progress', 'Blocked', 'In Review']);
52
+ const hasOpenIssues = currentIssues.some(i => actionableDeliveryIds.has(i.deliveryId) && OPEN_ISSUE_STATUSES.has(i.status));
53
+ if (!hasOpenIssues) {
54
+ console.log(`[strategy-executor] Actionable deliveries have no open issues for "${strategyName}" -- ` +
55
+ `terminating team. Auto-advance will handle verify transition.`);
56
+ terminateTeam(strategyId);
57
+ return;
58
+ }
59
+ // Mid-strategy handoff: actionable work with open issues remains.
60
+ // Send work immediately and reset the completion detector for the next cycle.
61
+ console.log(`[strategy-executor] Mid-strategy handoff for "${strategyName}" -- sending new work`);
62
+ const message = buildWakeMessage(currentDeliveries, currentIssues, teamState.knownDeliveryIds);
63
+ // Update tracking state
64
+ for (const d of currentDeliveries) {
65
+ teamState.knownDeliveryIds.add(d.id);
66
+ teamState.deliveryStageIds.set(d.id, d.currentWorkflowStageId);
67
+ }
68
+ completionDetector.reset();
69
+ sendMessage(proc.stdin, message);
70
+ }
71
+ /**
72
+ * Attach session lifecycle handlers to a team lead process.
73
+ *
74
+ * Wires up the 'complete', 'close', and 'error' event handlers that manage
75
+ * the full lifecycle of the team lead process: completion detection,
76
+ * resume-failure retry, cleanup, and error reporting.
77
+ */
78
+ export function attachSessionLifecycle(ctx) {
79
+ const { proc, params, teamState, sessionId, strategyId, strategyName, completionDetector, activityTracker, logStreams, resumeId, spawnedAt, config, } = ctx;
80
+ const { stdoutLogStream, stderrStream, jsonlStream } = logStreams;
81
+ const governor = getGovernor();
82
+ // Handle completion -- check for more work or terminate.
83
+ // No idle phase: if actionable work remains, send it immediately (mid-strategy
84
+ // handoff). If all work is done, terminate. A fresh team is spawned if new
85
+ // deliveries arrive later (~$0.50-1.00 exploration cost, but clean context).
86
+ completionDetector.on('complete', (info) => {
87
+ console.log(`[strategy-executor] Team lead for "${strategyName}" completed work cycle: ` +
88
+ `${info.turnCount} turns, $${info.totalCostUsd.toFixed(4)}`);
89
+ handleCompletionEvent({ strategyId, strategyName, teamState, completionDetector, proc }).catch(err => {
90
+ console.warn(`[strategy-executor] Failed to check delivery state for "${strategyName}":`, err.message);
91
+ // Fallback: terminate to avoid idle money burn.
92
+ terminateTeam(strategyId);
93
+ });
94
+ });
95
+ // Handle process exit
96
+ proc.on('close', async (code, signal) => {
97
+ console.log(`[strategy-executor] Team lead for "${strategyName}" exited (code: ${code}, signal: ${signal})`);
98
+ // Detect --resume failure: if the process exits quickly with a non-zero
99
+ // code and --resume was used, retry without resume. This handles cases
100
+ // where the session file was cleaned up, corrupted, or incompatible.
101
+ const RESUME_FAILURE_THRESHOLD_MS = 15_000;
102
+ const elapsedMs = Date.now() - spawnedAt;
103
+ if (resumeId && code !== 0 && code !== null && elapsedMs < RESUME_FAILURE_THRESHOLD_MS) {
104
+ console.warn(`[strategy-executor] Resume failed for "${strategyName}" (exited in ${elapsedMs}ms), retrying without resume`);
105
+ // Release governor slot and clean up minimal state
106
+ governor?.releaseSlot('strategy');
107
+ completionDetector.destroy();
108
+ stdoutLogStream.end();
109
+ stderrStream.end();
110
+ jsonlStream.end();
111
+ // Clean up session and team state
112
+ try {
113
+ await updateSession(sessionId, {
114
+ status: 'failed',
115
+ exit_reason: `Resume failed (code ${code}), retrying without resume`,
116
+ ended_at: new Date().toISOString(),
117
+ });
118
+ }
119
+ catch (updateErr) {
120
+ console.warn('[strategy-executor] Failed to update session after resume failure:', updateErr.message);
121
+ }
122
+ teamState.phase = 'terminated';
123
+ const activeTeams = getActiveTeams();
124
+ activeTeams.delete(strategyId);
125
+ // Re-spawn without --resume (dynamic import to avoid circular dependency)
126
+ const { spawnStrategyTeam } = await import('./team-spawner.js');
127
+ await spawnStrategyTeam({ ...params, lastClaudeSessionId: null });
128
+ return;
129
+ }
130
+ // Release governor slot (if governor is configured)
131
+ governor?.releaseSlot('strategy');
132
+ // Null out stdin so post-exit merge logic falls through to the
133
+ // fallback resolution agent instead of sending messages to a dead process.
134
+ teamState.leadStdin = null;
135
+ // Final activity flush before cleanup
136
+ try {
137
+ await activityTracker.finalFlush();
138
+ }
139
+ catch (err) {
140
+ console.warn('[strategy-executor] activityTracker.finalFlush failed:', err.message);
141
+ }
142
+ // Clean up streams
143
+ completionDetector.destroy();
144
+ stdoutLogStream.end();
145
+ stderrStream.end();
146
+ jsonlStream.end();
147
+ recordActivity();
148
+ await handleTeamCompletion({
149
+ config,
150
+ teamState,
151
+ sessionId,
152
+ code,
153
+ signal,
154
+ });
155
+ });
156
+ proc.on('error', async (err) => {
157
+ console.error(`[strategy-executor] Team lead for "${strategyName}" error:`, err.message);
158
+ // Release governor slot (if governor is configured)
159
+ governor?.releaseSlot('strategy');
160
+ try {
161
+ await withRetry(() => updateSession(sessionId, {
162
+ status: 'failed',
163
+ exit_reason: `Process error: ${err.message}`,
164
+ ended_at: new Date().toISOString(),
165
+ }), { maxAttempts: 3, baseDelayMs: 1000, label: 'session-update-error' });
166
+ }
167
+ catch (updateErr) {
168
+ console.warn(`[strategy-executor] Failed to update session after retries:`, updateErr.message);
169
+ }
170
+ completionDetector.destroy();
171
+ stdoutLogStream.end();
172
+ stderrStream.end();
173
+ jsonlStream.end();
174
+ // Worktree is strategy-owned -- do not remove on team error
175
+ teamState.phase = 'terminated';
176
+ const activeTeams = getActiveTeams();
177
+ activeTeams.delete(strategyId);
178
+ });
179
+ }
180
+ // ── Team lifecycle management ────────────────────────────────────────
181
+ /**
182
+ * Terminate a strategy team.
183
+ *
184
+ * Sends a deactivation message via stdin (if open) before SIGTERM
185
+ * to allow the team lead to process the shutdown gracefully.
186
+ */
187
+ export function terminateTeam(strategyId) {
188
+ const activeTeams = getActiveTeams();
189
+ const team = activeTeams.get(strategyId);
190
+ if (!team || !team.leadPid)
191
+ return false;
192
+ // Warn if terminating while conflict resolution is in progress
193
+ if (team.resolvingMergeConflict) {
194
+ console.warn(`[strategy-executor] Terminating team "${team.strategyName}" while merge conflict resolution is in progress`);
195
+ }
196
+ console.log(`[strategy-executor] Terminating team for strategy "${team.strategyName}" (phase: ${team.phase})`);
197
+ team.phase = 'shutting_down';
198
+ clearNarration(strategyId);
199
+ try {
200
+ // Send a deactivation message first to let the team lead process it
201
+ if (team.leadStdin) {
202
+ sendMessage(team.leadStdin, 'Pipeline deactivated. Exit now.');
203
+ // Close stdin after a short delay to let the message be processed
204
+ setTimeout(() => {
205
+ try {
206
+ team.leadStdin?.end();
207
+ }
208
+ catch (e) {
209
+ console.debug('[strategy-executor] stdin.end() failed (may already be closed):', e.message);
210
+ }
211
+ }, 5000);
212
+ }
213
+ // SIGTERM to the lead process -- it should clean up workers
214
+ process.kill(team.leadPid, 'SIGTERM');
215
+ // Escalate to SIGKILL after timeout
216
+ setTimeout(() => {
217
+ if (activeTeams.has(strategyId) && team.leadPid) {
218
+ try {
219
+ process.kill(team.leadPid, 'SIGKILL');
220
+ }
221
+ catch (e) {
222
+ console.debug('[strategy-executor] SIGKILL failed (process may have exited):', e.message);
223
+ }
224
+ }
225
+ }, 30000);
226
+ return true;
227
+ }
228
+ catch (e) {
229
+ console.debug(`[strategy-executor] terminateTeam: process may have already exited:`, e.message);
230
+ return false;
231
+ }
232
+ }
233
+ /**
234
+ * Wait for a team's process to exit (leave activeTeams).
235
+ *
236
+ * Polls activeTeams until the strategy is no longer present,
237
+ * which happens when handleTeamCompletion runs on the 'close' event.
238
+ * If the timeout expires, sends SIGKILL and waits briefly.
239
+ *
240
+ * @param strategyId - Strategy to wait for
241
+ * @param timeoutMs - Max wait time in ms (default 30s)
242
+ * @returns true if team exited within timeout, false if forced
243
+ */
244
+ export async function waitForTeamExit(strategyId, timeoutMs = 30000) {
245
+ const activeTeams = getActiveTeams();
246
+ const team = activeTeams.get(strategyId);
247
+ if (!team)
248
+ return true; // Already gone
249
+ const deadline = Date.now() + timeoutMs;
250
+ const pollMs = 500;
251
+ while (Date.now() < deadline) {
252
+ if (!activeTeams.has(strategyId))
253
+ return true;
254
+ await new Promise(resolve => setTimeout(resolve, pollMs));
255
+ }
256
+ // Timeout expired -- escalate to SIGKILL
257
+ if (team.leadPid) {
258
+ console.warn(`[strategy-executor] Team "${team.strategyName}" did not exit within ${timeoutMs}ms, sending SIGKILL`);
259
+ try {
260
+ process.kill(team.leadPid, 'SIGKILL');
261
+ }
262
+ catch { /* process may already be gone */ }
263
+ // Brief wait for SIGKILL to take effect
264
+ await new Promise(resolve => setTimeout(resolve, 2000));
265
+ }
266
+ return !activeTeams.has(strategyId);
267
+ }
268
+ /**
269
+ * Terminate all active teams.
270
+ */
271
+ export function terminateAllTeams() {
272
+ const activeTeams = getActiveTeams();
273
+ for (const strategyId of activeTeams.keys()) {
274
+ terminateTeam(strategyId);
275
+ }
276
+ }
277
+ /**
278
+ * Detect strategies that have been deactivated (agent role removed)
279
+ * and shut down their active teams.
280
+ */
281
+ export async function detectDeactivatedStrategies(config) {
282
+ const activeTeams = getActiveTeams();
283
+ if (activeTeams.size === 0)
284
+ return;
285
+ try {
286
+ const readyStrategies = await getReadyStrategies(config.organizationId, config.productId);
287
+ const activeStrategyIds = new Set(readyStrategies.map(s => s.strategy_id));
288
+ for (const [strategyId, team] of activeTeams) {
289
+ if (!activeStrategyIds.has(strategyId) && team.phase !== 'shutting_down' && team.phase !== 'terminated') {
290
+ console.log(`[strategy-executor] Strategy "${team.strategyName}" deactivated -- shutting down team`);
291
+ terminateTeam(strategyId);
292
+ }
293
+ }
294
+ }
295
+ catch (err) {
296
+ console.warn(`[strategy-executor] Failed to check for deactivated strategies:`, err.message);
297
+ }
298
+ }
299
+ /**
300
+ * Check active teams for newly completed deliveries and merge
301
+ * the strategy branch to integration incrementally.
302
+ *
303
+ * Called from the poll loop. For each active team, queries delivery
304
+ * statuses and triggers a merge when any delivery reaches verify/done
305
+ * that hasn't already been merged mid-flight.
306
+ *
307
+ * After processing merges, checks if ALL active deliveries are terminal
308
+ * and merged. If so, terminates the team proactively since no more work
309
+ * remains. The strategy stays active in the DB -- if new deliveries
310
+ * arrive later, the next poll cycle spawns a fresh team.
311
+ */
312
+ export async function checkAndMergeCompletedDeliveries(config) {
313
+ const activeTeams = getActiveTeams();
314
+ if (activeTeams.size === 0)
315
+ return;
316
+ for (const [strategyId, team] of activeTeams) {
317
+ // Only check teams that are actively executing
318
+ if (team.phase !== 'executing')
319
+ continue;
320
+ // Skip merge attempts while team lead is resolving a merge conflict
321
+ if (team.resolvingMergeConflict) {
322
+ console.log(`[strategy-executor] Skipping merge check for "${team.strategyName}" -- conflict resolution in progress`);
323
+ continue;
324
+ }
325
+ try {
326
+ const deliveries = await getStrategyDeliveries(strategyId);
327
+ // Find deliveries in verify/done that we haven't merged for yet
328
+ const newlyCompleted = deliveries.filter(d => (d.executionStatus === 'verify' || d.executionStatus === 'done')
329
+ && !team.mergedDeliveryIds.has(d.id));
330
+ if (newlyCompleted.length > 0) {
331
+ const completedNames = newlyCompleted.map(d => d.name).join(', ');
332
+ console.log(`[strategy-executor] ${newlyCompleted.length} delivery(ies) completed mid-flight for "${team.strategyName}": ${completedNames} -- merging to integration`);
333
+ // One merge covers all completed deliveries (same branch)
334
+ const mergeResult = await mergeStrategyBranch(config, team, team.leadSessionId ?? '', team.branchName);
335
+ if (mergeResult.mergeSucceeded) {
336
+ // Track merged deliveries (git state already reported by mergeStrategyBranch)
337
+ for (const d of newlyCompleted) {
338
+ team.mergedDeliveryIds.add(d.id);
339
+ }
340
+ }
341
+ else {
342
+ console.warn(`[strategy-executor] Mid-flight merge failed for "${team.strategyName}": ${mergeResult.exitReason}`);
343
+ // Escalate merge conflict for each unmerged delivery
344
+ for (const d of newlyCompleted) {
345
+ escalateMergeConflict({
346
+ organizationId: team.organizationId,
347
+ sessionId: team.leadSessionId ?? '',
348
+ deliveryId: d.id,
349
+ deliveryName: d.name,
350
+ branchName: team.branchName,
351
+ integrationBranch: config.integrationBranch,
352
+ mergeError: mergeResult.exitReason,
353
+ }).catch(err => console.warn(`[strategy-executor] escalateMergeConflict failed for ${d.id}:`, err.message));
354
+ }
355
+ // Don't mark as merged -- will retry next poll. Team continues working.
356
+ }
357
+ }
358
+ // ── All-done detection ──────────────────────────────────────
359
+ // If any delivery is queued or running, the team still has work.
360
+ // In review mode, in_review deliveries are also active work.
361
+ // Otherwise the team is idle, waiting for the daemon to push new work.
362
+ const effectiveWorkStatuses = team.reviewMode
363
+ ? new Set([...TEAM_WORK_STATUSES, 'in_review'])
364
+ : TEAM_WORK_STATUSES;
365
+ const teamWork = deliveries.filter(d => effectiveWorkStatuses.has(d.executionStatus ?? ''));
366
+ if (teamWork.length > 0) {
367
+ console.log(`[strategy-executor] ${teamWork.length} delivery(ies) still queued/running for "${team.strategyName}" -- team continues`);
368
+ continue;
369
+ }
370
+ // No queued/running deliveries -- team is idle, completion detector
371
+ // handles the actual idle transition. Log for observability.
372
+ console.log(`[strategy-executor] All deliveries complete for "${team.strategyName}" -- team is idle`);
373
+ }
374
+ catch (err) {
375
+ console.warn(`[strategy-executor] Failed to check completed deliveries for "${team.strategyName}":`, err.message);
376
+ }
377
+ }
378
+ }
379
+ //# sourceMappingURL=session-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-lifecycle.js","sourceRoot":"","sources":["../src/session-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Shared daemon shutdown state.
3
+ *
4
+ * Provides a flag that other modules can check to avoid
5
+ * destructive operations (like worktree removal) during
6
+ * graceful shutdown. Worktrees must persist across restarts.
7
+ */
8
+ /**
9
+ * Check if the daemon is shutting down.
10
+ */
11
+ export declare function isDaemonShuttingDown(): boolean;
12
+ /**
13
+ * Mark the daemon as shutting down.
14
+ * Called from the shutdown handler in index.ts.
15
+ */
16
+ export declare function setDaemonShuttingDown(): void;
17
+ //# sourceMappingURL=shutdown-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown-state.d.ts","sourceRoot":"","sources":["../src/shutdown-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Shared daemon shutdown state.
3
+ *
4
+ * Provides a flag that other modules can check to avoid
5
+ * destructive operations (like worktree removal) during
6
+ * graceful shutdown. Worktrees must persist across restarts.
7
+ */
8
+ let shuttingDown = false;
9
+ /**
10
+ * Check if the daemon is shutting down.
11
+ */
12
+ export function isDaemonShuttingDown() {
13
+ return shuttingDown;
14
+ }
15
+ /**
16
+ * Mark the daemon as shutting down.
17
+ * Called from the shutdown handler in index.ts.
18
+ */
19
+ export function setDaemonShuttingDown() {
20
+ shuttingDown = true;
21
+ }
22
+ //# sourceMappingURL=shutdown-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown-state.js","sourceRoot":"","sources":["../src/shutdown-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Spawn cooldown: prevents crash loops by tracking recently-torn-down strategies.
3
+ *
4
+ * When a strategy is torn down, it enters a cooldown period before it can be
5
+ * respawned. Consecutive teardowns increase the cooldown exponentially
6
+ * (1min, 2min, 4min, 8min, capped at 10min).
7
+ */
8
+ /** Record a strategy teardown for spawn cooldown tracking. */
9
+ export declare function recordStrategyTeardown(strategyId: string): void;
10
+ /** Check if a strategy is in spawn cooldown. */
11
+ export declare function isInSpawnCooldown(strategyId: string): boolean;
12
+ /** Clear cooldown for a strategy (e.g. after successful long-running session). */
13
+ export declare function clearSpawnCooldown(strategyId: string): void;
14
+ //# sourceMappingURL=spawn-cooldown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-cooldown.d.ts","sourceRoot":"","sources":["../src/spawn-cooldown.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,8DAA8D;AAC9D,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAM/D;AAED,gDAAgD;AAChD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAQ7D;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAE3D"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Spawn cooldown: prevents crash loops by tracking recently-torn-down strategies.
3
+ *
4
+ * When a strategy is torn down, it enters a cooldown period before it can be
5
+ * respawned. Consecutive teardowns increase the cooldown exponentially
6
+ * (1min, 2min, 4min, 8min, capped at 10min).
7
+ */
8
+ const teardownTimestamps = new Map();
9
+ const SPAWN_COOLDOWN_BASE_MS = 60_000; // 1 minute base cooldown
10
+ const SPAWN_COOLDOWN_MAX_MS = 10 * 60_000; // 10 minute max cooldown
11
+ /** Record a strategy teardown for spawn cooldown tracking. */
12
+ export function recordStrategyTeardown(strategyId) {
13
+ const existing = teardownTimestamps.get(strategyId);
14
+ const count = existing ? existing.count + 1 : 1;
15
+ teardownTimestamps.set(strategyId, { time: Date.now(), count });
16
+ const cooldownMs = Math.min(SPAWN_COOLDOWN_BASE_MS * Math.pow(2, count - 1), SPAWN_COOLDOWN_MAX_MS);
17
+ console.log(`[spawn-cooldown] Strategy ${strategyId} torn down (count=${count}, cooldown=${Math.round(cooldownMs / 1000)}s)`);
18
+ }
19
+ /** Check if a strategy is in spawn cooldown. */
20
+ export function isInSpawnCooldown(strategyId) {
21
+ const entry = teardownTimestamps.get(strategyId);
22
+ if (!entry)
23
+ return false;
24
+ const cooldownMs = Math.min(SPAWN_COOLDOWN_BASE_MS * Math.pow(2, entry.count - 1), SPAWN_COOLDOWN_MAX_MS);
25
+ if (Date.now() - entry.time > cooldownMs) {
26
+ return false;
27
+ }
28
+ return true;
29
+ }
30
+ /** Clear cooldown for a strategy (e.g. after successful long-running session). */
31
+ export function clearSpawnCooldown(strategyId) {
32
+ teardownTimestamps.delete(strategyId);
33
+ }
34
+ //# sourceMappingURL=spawn-cooldown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-cooldown.js","sourceRoot":"","sources":["../src/spawn-cooldown.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA2C,CAAC;AAC9E,MAAM,sBAAsB,GAAG,MAAM,CAAC,CAAC,yBAAyB;AAChE,MAAM,qBAAqB,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,yBAAyB;AAEpE,8DAA8D;AAC9D,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;IACpG,OAAO,CAAC,GAAG,CAAC,6BAA6B,UAAU,qBAAqB,KAAK,cAAc,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AAChI,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAC1G,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,UAAU,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Shared spawn environment builder for daemon agent processes.
3
+ *
4
+ * Consolidates the environment setup that was previously duplicated between
5
+ * spawner.ts (buildSpawnEnvironment) and strategy-executor.ts (buildTeamSpawnEnvironment).
6
+ *
7
+ * CRITICAL: Strips Claude Code session vars (CLAUDECODE, CLAUDE_CODE_*, CLAUDECODE_*)
8
+ * via the shared stripClaudeCodeEnvVars utility from daemon-core. If the daemon was
9
+ * started from within a Claude Code session, these vars cause child claude processes
10
+ * to detect a parent session and hang indefinitely. CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS
11
+ * is preserved because it is set intentionally.
12
+ */
13
+ import type { DaemonConfig } from './types.js';
14
+ /**
15
+ * IDs for OTEL resource attribute correlation. All fields are optional.
16
+ * When deliveryId is provided, it is included in OTEL_RESOURCE_ATTRIBUTES.
17
+ */
18
+ export interface SpawnIds {
19
+ orgId?: string;
20
+ strategyId?: string;
21
+ sessionId?: string;
22
+ deliveryId?: string;
23
+ }
24
+ /**
25
+ * Build a clean environment for a spawned agent or team lead process.
26
+ *
27
+ * - Copies process.env
28
+ * - Sets TELORA_DAEMON_AGENT=1 and TELORA_MCP_PROFILE=execution
29
+ * - Enables CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1
30
+ * - Strips CLAUDECODE, CLAUDE_CODE_*, and CLAUDECODE_* (except CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS)
31
+ * - Injects OTel telemetry env vars when config.telemetry.enabled is true
32
+ * - Includes telora.delivery_id in OTEL_RESOURCE_ATTRIBUTES only when deliveryId is provided
33
+ */
34
+ export declare function buildSpawnEnvironment(config: DaemonConfig, ids: SpawnIds): Record<string, string | undefined>;
35
+ //# sourceMappingURL=spawn-environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-environment.d.ts","sourceRoot":"","sources":["../src/spawn-environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,QAAQ,GACZ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CA4BpC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Shared spawn environment builder for daemon agent processes.
3
+ *
4
+ * Consolidates the environment setup that was previously duplicated between
5
+ * spawner.ts (buildSpawnEnvironment) and strategy-executor.ts (buildTeamSpawnEnvironment).
6
+ *
7
+ * CRITICAL: Strips Claude Code session vars (CLAUDECODE, CLAUDE_CODE_*, CLAUDECODE_*)
8
+ * via the shared stripClaudeCodeEnvVars utility from daemon-core. If the daemon was
9
+ * started from within a Claude Code session, these vars cause child claude processes
10
+ * to detect a parent session and hang indefinitely. CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS
11
+ * is preserved because it is set intentionally.
12
+ */
13
+ import { stripClaudeCodeEnvVars, buildOtelEnv } from '@telora/daemon-core';
14
+ /**
15
+ * Build a clean environment for a spawned agent or team lead process.
16
+ *
17
+ * - Copies process.env
18
+ * - Sets TELORA_DAEMON_AGENT=1 and TELORA_MCP_PROFILE=execution
19
+ * - Enables CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1
20
+ * - Strips CLAUDECODE, CLAUDE_CODE_*, and CLAUDECODE_* (except CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS)
21
+ * - Injects OTel telemetry env vars when config.telemetry.enabled is true
22
+ * - Includes telora.delivery_id in OTEL_RESOURCE_ATTRIBUTES only when deliveryId is provided
23
+ */
24
+ export function buildSpawnEnvironment(config, ids) {
25
+ // Start with a clean copy that has daemon-specific vars set,
26
+ // then strip inherited Claude Code session markers (preserving AGENT_TEAMS).
27
+ const spawnEnv = stripClaudeCodeEnvVars({
28
+ ...process.env,
29
+ TELORA_DAEMON_AGENT: '1',
30
+ TELORA_MCP_PROFILE: 'execution',
31
+ // Agent Teams always enabled -- strategy-level execution model
32
+ CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: '1',
33
+ }, { preserve: ['CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS'] });
34
+ // Inject OTel telemetry env vars when telemetry is enabled
35
+ const otelEnv = buildOtelEnv({
36
+ enabled: config.telemetry.enabled,
37
+ port: config.telemetry.port,
38
+ resourceAttributes: {
39
+ 'telora.org_id': ids.orgId,
40
+ 'telora.strategy_id': ids.strategyId,
41
+ 'telora.delivery_id': ids.deliveryId,
42
+ 'telora.session_id': ids.sessionId,
43
+ },
44
+ });
45
+ Object.assign(spawnEnv, otelEnv);
46
+ return spawnEnv;
47
+ }
48
+ //# sourceMappingURL=spawn-environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-environment.js","sourceRoot":"","sources":["../src/spawn-environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAa3E;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAoB,EACpB,GAAa;IAEb,6DAA6D;IAC7D,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,sBAAsB,CACrC;QACE,GAAG,OAAO,CAAC,GAAG;QACd,mBAAmB,EAAE,GAAG;QACxB,kBAAkB,EAAE,WAAW;QAC/B,+DAA+D;QAC/D,oCAAoC,EAAE,GAAG;KAC1C,EACD,EAAE,QAAQ,EAAE,CAAC,sCAAsC,CAAC,EAAE,CACvD,CAAC;IAEF,2DAA2D;IAC3D,MAAM,OAAO,GAAG,YAAY,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO;QACjC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI;QAC3B,kBAAkB,EAAE;YAClB,eAAe,EAAE,GAAG,CAAC,KAAK;YAC1B,oBAAoB,EAAE,GAAG,CAAC,UAAU;YACpC,oBAAoB,EAAE,GAAG,CAAC,UAAU;YACpC,mBAAmB,EAAE,GAAG,CAAC,SAAS;SACnC;KACF,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEjC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,23 @@
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 type { DaemonConfig, RunningAgent } from './types.js';
8
+ /**
9
+ * Check if a process is alive. Returns false if the process doesn't exist
10
+ * or is a zombie on Linux.
11
+ */
12
+ export declare function isProcessAlive(pid: number): boolean;
13
+ /**
14
+ * Check all running agents for PID liveness.
15
+ *
16
+ * If an agent's process has disappeared (OOM kill, external kill -9, etc.)
17
+ * without firing a 'close' event, clean up the agent entry and update the
18
+ * session in the database.
19
+ *
20
+ * Guards against double-cleanup by checking runningAgents.has() before acting.
21
+ */
22
+ export declare function checkAgentLiveness(config: DaemonConfig, runningAgents: Map<string, RunningAgent>): Promise<void>;
23
+ //# sourceMappingURL=spawner-liveness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawner-liveness.d.ts","sourceRoot":"","sources":["../src/spawner-liveness.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK7D;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAwBnD;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CA2Df"}