@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,172 @@
1
+ /**
2
+ * Delivery auto-advancement logic.
3
+ *
4
+ * Auto-advances deliveries to verify when all issues are Done,
5
+ * and transitions verify deliveries back to iterating when new
6
+ * open issues are found (e.g., from review agents).
7
+ */
8
+ import { getActiveStrategies, getStrategyDeliveries, getDeliveryIssues, updateDeliveryStatus, fetchEffectiveWorkflow, updateIssueStatus } from './supabase.js';
9
+ import { getActiveTeams } from './strategy-executor.js';
10
+ import { hasStrategyWorktree } from './strategy-worktree-state.js';
11
+ /**
12
+ * Auto-advance deliveries to verify when all issues are Done.
13
+ *
14
+ * For each active team's strategy, checks deliveries in coding/queued status.
15
+ * If ALL issues for such a delivery are Done (0 open), advances it to verify
16
+ * via the workflow transition. This prevents keep-alive churn where the agent
17
+ * is woken with "actionable" deliveries that have no remaining work.
18
+ *
19
+ * Also checks teamless strategies (after daemon restart) where deliveries
20
+ * may be stuck in coding with all issues Done.
21
+ */
22
+ export async function checkDeliveryAutoAdvance(config) {
23
+ const OPEN_STATUSES = new Set(['To Do', 'In Progress', 'Blocked', 'In Review']);
24
+ const ADVANCE_STATUSES = new Set(['coding', 'queued']);
25
+ // Only auto-advance for teamless strategies (e.g., after daemon restart where
26
+ // deliveries are stuck in coding with all issues Done and no team will ever
27
+ // run advanceDeliveryStatuses). Active teams handle their own advancement
28
+ // via strategy-completion.ts -- auto-advancing while a team is executing
29
+ // causes coding->verify->iterating churn.
30
+ const activeTeams = getActiveTeams();
31
+ const strategyIds = new Set();
32
+ try {
33
+ const activeStrategies = await getActiveStrategies(config.organizationId, config.productId);
34
+ for (const strategy of activeStrategies) {
35
+ // Skip strategies with active teams -- they manage their own advancement
36
+ if (activeTeams.has(strategy.strategy_id))
37
+ continue;
38
+ if (hasStrategyWorktree(strategy.strategy_id)) {
39
+ strategyIds.add(strategy.strategy_id);
40
+ }
41
+ }
42
+ }
43
+ catch (err) {
44
+ console.warn('[listener] Auto-advance: failed to fetch active strategies:', err.message);
45
+ }
46
+ for (const strategyId of strategyIds) {
47
+ try {
48
+ const deliveries = await getStrategyDeliveries(strategyId);
49
+ for (const delivery of deliveries) {
50
+ if (!ADVANCE_STATUSES.has(delivery.executionStatus ?? ''))
51
+ continue;
52
+ try {
53
+ const issues = await getDeliveryIssues(delivery.id);
54
+ // Context Groups are reference material, not actionable work
55
+ const workIssues = issues.filter(i => i.issueType !== 'Context Group');
56
+ const contextGroups = issues.filter(i => i.issueType === 'Context Group');
57
+ // Skip deliveries with no work issues (nothing to check)
58
+ if (workIssues.length === 0)
59
+ continue;
60
+ const openWork = workIssues.filter(i => OPEN_STATUSES.has(i.status));
61
+ if (openWork.length > 0)
62
+ continue;
63
+ // Auto-close Context Groups when all work issues are done
64
+ for (const cg of contextGroups) {
65
+ if (cg.status !== 'Done') {
66
+ try {
67
+ await updateIssueStatus(cg.id, 'Done');
68
+ console.log(`[listener] Auto-closed Context Group "${cg.title}" (all work issues done)`);
69
+ }
70
+ catch (err) {
71
+ console.warn(`[listener] Failed to auto-close Context Group "${cg.title}":`, err.message);
72
+ }
73
+ }
74
+ }
75
+ // All work issues are Done -- advance to verify.
76
+ // If delivery is still queued, step through coding first
77
+ // (workflow doesn't allow queued -> verify directly).
78
+ const workflow = await fetchEffectiveWorkflow(delivery.id);
79
+ if (delivery.executionStatus === 'queued') {
80
+ const codingStage = workflow.stages.find(s => s.name === 'coding');
81
+ if (codingStage) {
82
+ await updateDeliveryStatus(delivery.id, 'coding', codingStage.id);
83
+ }
84
+ else {
85
+ await updateDeliveryStatus(delivery.id, 'coding');
86
+ }
87
+ }
88
+ const verifyStage = workflow.stages.find(s => s.name === 'verify');
89
+ if (verifyStage) {
90
+ await updateDeliveryStatus(delivery.id, 'verify', verifyStage.id);
91
+ }
92
+ else {
93
+ await updateDeliveryStatus(delivery.id, 'verify');
94
+ }
95
+ console.log(`[listener] Auto-advanced delivery "${delivery.name}" from ${delivery.executionStatus} to verify: ` +
96
+ `all ${workIssues.length} work issue(s) Done`);
97
+ }
98
+ catch (err) {
99
+ console.warn(`[listener] Auto-advance: failed to check/advance delivery "${delivery.name}":`, err.message);
100
+ }
101
+ }
102
+ }
103
+ catch (err) {
104
+ console.warn(`[listener] Auto-advance: failed to fetch deliveries for strategy ${strategyId}:`, err.message);
105
+ }
106
+ }
107
+ }
108
+ /**
109
+ * Check verify deliveries for open issues and transition them back to iterating.
110
+ *
111
+ * When the review agent creates new issues on a verify delivery, this poll
112
+ * step detects the open issues and moves the delivery back to iterating
113
+ * so the normal wake/work flow picks it up.
114
+ */
115
+ export async function checkVerifyDeliveriesForOpenIssues(_config) {
116
+ const activeTeams = getActiveTeams();
117
+ if (activeTeams.size === 0)
118
+ return;
119
+ const OPEN_STATUSES = new Set(['To Do', 'In Progress', 'Blocked']);
120
+ for (const [strategyId, team] of activeTeams) {
121
+ if (team.phase !== 'executing')
122
+ continue;
123
+ try {
124
+ const deliveries = await getStrategyDeliveries(strategyId);
125
+ const verifyDeliveries = deliveries.filter(d => d.executionStatus === 'verify' || d.executionStatus === 'in_review');
126
+ for (const delivery of verifyDeliveries) {
127
+ try {
128
+ const issues = await getDeliveryIssues(delivery.id);
129
+ // Context Groups are reference material, not actionable work.
130
+ // Auto-close any that are still open when all tasks/bugs are done.
131
+ const workIssues = issues.filter(i => i.issueType !== 'Context Group');
132
+ const contextGroups = issues.filter(i => i.issueType === 'Context Group');
133
+ const openWork = workIssues.filter(i => OPEN_STATUSES.has(i.status));
134
+ // Auto-close Context Groups when all work issues are done
135
+ if (openWork.length === 0) {
136
+ for (const cg of contextGroups) {
137
+ if (cg.status !== 'Done') {
138
+ try {
139
+ await updateIssueStatus(cg.id, 'Done');
140
+ console.log(`[listener] Auto-closed Context Group "${cg.title}" (all work issues done)`);
141
+ }
142
+ catch (err) {
143
+ console.warn(`[listener] Failed to auto-close Context Group "${cg.title}":`, err.message);
144
+ }
145
+ }
146
+ }
147
+ continue;
148
+ }
149
+ // Find the iterating stage ID from the workflow
150
+ const workflow = await fetchEffectiveWorkflow(delivery.id);
151
+ const iteratingStage = workflow.stages.find(s => s.name === 'iterating');
152
+ if (iteratingStage) {
153
+ await updateDeliveryStatus(delivery.id, 'iterating', iteratingStage.id);
154
+ }
155
+ else {
156
+ // Fallback: update without stage ID
157
+ await updateDeliveryStatus(delivery.id, 'iterating');
158
+ }
159
+ console.log(`[listener] Delivery "${delivery.name}" moved from ${delivery.executionStatus} to iterating: ` +
160
+ `${openWork.length} open issue(s) found`);
161
+ }
162
+ catch (err) {
163
+ console.warn(`[listener] Failed to check issues for verify delivery "${delivery.name}":`, err.message);
164
+ }
165
+ }
166
+ }
167
+ catch (err) {
168
+ console.warn(`[listener] Failed to check verify deliveries for "${team.strategyName}":`, err.message);
169
+ }
170
+ }
171
+ }
172
+ //# sourceMappingURL=listener-auto-advance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listener-auto-advance.js","sourceRoot":"","sources":["../src/listener-auto-advance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Review request handling and auto-review for strategies.
3
+ *
4
+ * Handles manual review requests (review_requested_at) and
5
+ * automatic review triggering when all deliveries reach verify status.
6
+ */
7
+ import type { DaemonConfig, AgentRole } from './types.js';
8
+ /** Mark a delivery as having been auto-reviewed. */
9
+ export declare function markDeliveryReviewed(deliveryId: string): void;
10
+ /** Check if a delivery has already been auto-reviewed. */
11
+ export declare function hasDeliveryBeenReviewed(deliveryId: string): boolean;
12
+ /**
13
+ * Spawn a review team for a strategy that has no active team.
14
+ *
15
+ * Looks up the strategy via getActiveStrategies() to get the agent role
16
+ * and pipeline config, then spawns a team in review mode. The spawned
17
+ * team receives the review directive as its initial work.
18
+ */
19
+ export declare function spawnReviewTeamForStrategy(config: DaemonConfig, roles: Map<string, AgentRole>, strategyId: string, strategyName: string): Promise<void>;
20
+ /**
21
+ * Check for auto-review conditions across all strategies.
22
+ *
23
+ * Iterates strategies with persistent worktrees but no active team.
24
+ * When all non-terminal deliveries are in verify and review is enabled,
25
+ * spawns a fresh review team. Active teams are skipped -- they will
26
+ * terminate on completion, and the next poll cycle picks them up.
27
+ */
28
+ export declare function checkAutoReview(config: DaemonConfig, roles: Map<string, AgentRole>): Promise<void>;
29
+ /**
30
+ * Check for pending review requests and spawn fresh review teams.
31
+ *
32
+ * Polls for strategies with review_requested_at set. For each request,
33
+ * spawns a fresh review team (skipped if a team is already active) and
34
+ * clears the flag.
35
+ */
36
+ export declare function checkReviewRequests(config: DaemonConfig, roles: Map<string, AgentRole>): Promise<void>;
37
+ //# sourceMappingURL=listener-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listener-review.d.ts","sourceRoot":"","sources":["../src/listener-review.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAS1D,oDAAoD;AACpD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAE7D;AAED,0DAA0D;AAC1D,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED;;;;;;GAMG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAC7B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CA+Df;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAuFf;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAuBf"}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Review request handling and auto-review for strategies.
3
+ *
4
+ * Handles manual review requests (review_requested_at) and
5
+ * automatic review triggering when all deliveries reach verify status.
6
+ */
7
+ import { getActiveStrategies, getReviewRequests, getStrategyDeliveries, updateDeliveryStatus, fetchEffectiveWorkflow } from './supabase.js';
8
+ import { spawnStrategyTeam, hasActiveTeam, getActiveTeamCount } from './strategy-executor.js';
9
+ import { hasStrategyWorktree } from './strategy-worktree-state.js';
10
+ import { configForProduct, findProduct } from './config.js';
11
+ /** Track which deliveries have already had an auto-review. */
12
+ const reviewedDeliveries = new Set();
13
+ /** Mark a delivery as having been auto-reviewed. */
14
+ export function markDeliveryReviewed(deliveryId) {
15
+ reviewedDeliveries.add(deliveryId);
16
+ }
17
+ /** Check if a delivery has already been auto-reviewed. */
18
+ export function hasDeliveryBeenReviewed(deliveryId) {
19
+ return reviewedDeliveries.has(deliveryId);
20
+ }
21
+ /**
22
+ * Spawn a review team for a strategy that has no active team.
23
+ *
24
+ * Looks up the strategy via getActiveStrategies() to get the agent role
25
+ * and pipeline config, then spawns a team in review mode. The spawned
26
+ * team receives the review directive as its initial work.
27
+ */
28
+ export async function spawnReviewTeamForStrategy(config, roles, strategyId, strategyName) {
29
+ // Check capacity
30
+ if (getActiveTeamCount() >= config.maxTotalSessions) {
31
+ console.log(`[listener] Cannot spawn review team for "${strategyName}" -- session limit reached`);
32
+ return;
33
+ }
34
+ // Look up strategy details (role, pipeline config) across all products
35
+ let strategy;
36
+ try {
37
+ for (const product of config.products) {
38
+ const activeStrategies = await getActiveStrategies(config.organizationId, product.id);
39
+ strategy = activeStrategies.find(s => s.strategy_id === strategyId);
40
+ if (strategy)
41
+ break;
42
+ }
43
+ }
44
+ catch (err) {
45
+ console.warn(`[listener] Failed to look up strategy for review spawn: ${err.message}`);
46
+ return;
47
+ }
48
+ if (!strategy) {
49
+ console.warn(`[listener] Strategy "${strategyName}" not found in active strategies -- cannot spawn review team`);
50
+ return;
51
+ }
52
+ // Review-only strategies may have no assigned agent role. Fall back to first available role.
53
+ const role = strategy.assigned_agent_role_id
54
+ ? roles.get(strategy.assigned_agent_role_id)
55
+ : roles.values().next().value;
56
+ if (!role) {
57
+ console.warn(`[listener] No agent role available for review spawn of "${strategyName}"`);
58
+ return;
59
+ }
60
+ // Use product-scoped config for the review team
61
+ const productEntry = strategy.product_id ? findProduct(config, strategy.product_id) : undefined;
62
+ const spawnConfig = productEntry ? configForProduct(config, productEntry) : config;
63
+ // Safety-net: verify that at least one delivery is in in_review before spawning.
64
+ // The frontend/API moves verify→in_review atomically when the user clicks Review.
65
+ // If no deliveries are in in_review, the transition failed or no deliveries were in verify.
66
+ try {
67
+ const deliveries = await getStrategyDeliveries(strategyId);
68
+ const inReviewCount = deliveries.filter(d => d.executionStatus === 'in_review').length;
69
+ if (inReviewCount === 0) {
70
+ console.warn(`[listener] Review requested for "${strategyName}" but no deliveries in in_review -- skipping spawn`);
71
+ return;
72
+ }
73
+ console.log(`[listener] Spawning review team for "${strategyName}" (${inReviewCount} deliveries in in_review)`);
74
+ }
75
+ catch (err) {
76
+ console.warn(`[listener] Failed to check deliveries for review spawn of "${strategyName}":`, err.message);
77
+ // Proceed anyway -- the team spawner will fetch deliveries and handle the empty case
78
+ }
79
+ await spawnStrategyTeam({
80
+ config: spawnConfig,
81
+ strategyId,
82
+ strategyName,
83
+ role,
84
+ pipelineConfig: strategy.pipeline_config,
85
+ readOnly: strategy.read_only,
86
+ reviewMode: true,
87
+ });
88
+ }
89
+ /**
90
+ * Check for auto-review conditions across all strategies.
91
+ *
92
+ * Iterates strategies with persistent worktrees but no active team.
93
+ * When all non-terminal deliveries are in verify and review is enabled,
94
+ * spawns a fresh review team. Active teams are skipped -- they will
95
+ * terminate on completion, and the next poll cycle picks them up.
96
+ */
97
+ export async function checkAutoReview(config, roles) {
98
+ const TERMINAL_STATUSES = new Set(['done', 'cancelled']);
99
+ // Aggregate active strategies across all products
100
+ const activeStrategies = [];
101
+ try {
102
+ for (const product of config.products) {
103
+ const strategies = await getActiveStrategies(config.organizationId, product.id);
104
+ activeStrategies.push(...strategies);
105
+ }
106
+ }
107
+ catch (err) {
108
+ console.warn(`[listener] Auto-review: failed to fetch active strategies: ${err.message}`);
109
+ return;
110
+ }
111
+ for (const strategy of activeStrategies) {
112
+ // Skip strategies with an active team -- they will terminate on completion,
113
+ // and the next poll cycle will spawn a review team if needed.
114
+ if (hasActiveTeam(strategy.strategy_id))
115
+ continue;
116
+ // Skip strategies without a persistent worktree (no work has been done yet)
117
+ if (!hasStrategyWorktree(strategy.strategy_id))
118
+ continue;
119
+ // Skip if review not enabled in pipeline config
120
+ const pipelineConfig = strategy.pipeline_config;
121
+ if (!pipelineConfig?.review?.enabled)
122
+ continue;
123
+ try {
124
+ const deliveries = await getStrategyDeliveries(strategy.strategy_id);
125
+ // Filter to non-terminal deliveries
126
+ const nonTerminal = deliveries.filter(d => !TERMINAL_STATUSES.has(d.executionStatus ?? ''));
127
+ if (nonTerminal.length === 0)
128
+ continue;
129
+ // Check if ALL non-terminal deliveries are in verify or in_review
130
+ const allReviewReady = nonTerminal.every(d => d.executionStatus === 'verify' || d.executionStatus === 'in_review');
131
+ if (!allReviewReady)
132
+ continue;
133
+ // Separate deliveries into first-time review vs already-reviewed
134
+ const verifyDeliveries = nonTerminal.filter(d => d.executionStatus === 'verify');
135
+ const needsReview = verifyDeliveries.filter(d => !hasDeliveryBeenReviewed(d.id));
136
+ const alreadyReviewed = verifyDeliveries.filter(d => hasDeliveryBeenReviewed(d.id));
137
+ // Advance already-reviewed deliveries straight to done
138
+ for (const delivery of alreadyReviewed) {
139
+ try {
140
+ const workflow = await fetchEffectiveWorkflow(delivery.id);
141
+ const doneStage = workflow.stages.find(s => s.name === 'done');
142
+ if (doneStage) {
143
+ await updateDeliveryStatus(delivery.id, 'done', doneStage.id);
144
+ }
145
+ else {
146
+ await updateDeliveryStatus(delivery.id, 'done');
147
+ }
148
+ console.log(`[auto-review] Advanced delivery "${delivery.name}" to done (already reviewed once)`);
149
+ }
150
+ catch (err) {
151
+ console.warn(`[auto-review] Failed to advance delivery "${delivery.name}" to done:`, err.message);
152
+ }
153
+ }
154
+ // If no deliveries need a first review, we're done with this strategy
155
+ if (needsReview.length === 0)
156
+ continue;
157
+ // Transition first-time verify deliveries to in_review before spawning
158
+ for (const delivery of needsReview) {
159
+ try {
160
+ const workflow = await fetchEffectiveWorkflow(delivery.id);
161
+ const inReviewStage = workflow.stages.find(s => s.name === 'in_review');
162
+ if (inReviewStage) {
163
+ await updateDeliveryStatus(delivery.id, 'in_review', inReviewStage.id);
164
+ }
165
+ else {
166
+ await updateDeliveryStatus(delivery.id, 'in_review');
167
+ }
168
+ markDeliveryReviewed(delivery.id);
169
+ console.log(`[auto-review] Moved delivery "${delivery.name}" from verify to in_review`);
170
+ }
171
+ catch (err) {
172
+ console.warn(`[auto-review] Failed to transition delivery "${delivery.name}" to in_review:`, err.message);
173
+ }
174
+ }
175
+ // Spawn a review team for this strategy
176
+ console.log(`[listener] Auto-review: spawning review team for "${strategy.strategy_name}" (${needsReview.length} deliveries for review)`);
177
+ await spawnReviewTeamForStrategy(config, roles, strategy.strategy_id, strategy.strategy_name);
178
+ }
179
+ catch (err) {
180
+ console.warn(`[listener] Auto-review check failed for "${strategy.strategy_name}":`, err.message);
181
+ }
182
+ }
183
+ }
184
+ /**
185
+ * Check for pending review requests and spawn fresh review teams.
186
+ *
187
+ * Polls for strategies with review_requested_at set. For each request,
188
+ * spawns a fresh review team (skipped if a team is already active) and
189
+ * clears the flag.
190
+ */
191
+ export async function checkReviewRequests(config, roles) {
192
+ try {
193
+ // Aggregate review requests across all products
194
+ const requests = [];
195
+ for (const product of config.products) {
196
+ const productRequests = await getReviewRequests(product.id);
197
+ requests.push(...productRequests);
198
+ }
199
+ if (requests.length === 0)
200
+ return;
201
+ for (const request of requests) {
202
+ try {
203
+ await spawnReviewTeamForStrategy(config, roles, request.strategyId, request.strategyName);
204
+ // Flag stays set while review is in progress (UI reads it).
205
+ // The activeTeams guard in spawnStrategyTeam prevents double-spawning.
206
+ // Flag is cleared in strategy-completion.ts when the review team exits.
207
+ }
208
+ catch (err) {
209
+ console.warn(`[listener] Failed to process review request for "${request.strategyName}":`, err.message);
210
+ }
211
+ }
212
+ }
213
+ catch (err) {
214
+ console.warn('[listener] Failed to check review requests:', err.message);
215
+ }
216
+ }
217
+ //# sourceMappingURL=listener-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listener-review.js","sourceRoot":"","sources":["../src/listener-review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Polling-based listener for strategy assignments.
3
+ *
4
+ * Since we're using HTTP API instead of direct Supabase access,
5
+ * we poll for ready strategies instead of using Realtime subscriptions.
6
+ * Agent assignment is at the strategy level — the daemon spawns a
7
+ * single Agent Team per strategy that manages all deliveries.
8
+ */
9
+ import type { DaemonConfig } from './types.js';
10
+ /**
11
+ * Initialize the listener with configuration.
12
+ */
13
+ export declare function initListener(daemonConfig: DaemonConfig): Promise<void>;
14
+ /**
15
+ * Start polling for ready strategies.
16
+ */
17
+ export declare function startDeliveryListener(): void;
18
+ /**
19
+ * Start session listener (no-op for polling mode).
20
+ * Kept for API compatibility with the original implementation.
21
+ */
22
+ export declare function startSessionListener(): void;
23
+ /**
24
+ * Process any strategies ready for agent work.
25
+ *
26
+ * For each ready strategy without an active team, spawns a single
27
+ * Agent Team that manages all deliveries within that strategy.
28
+ * Also detects strategies that have been deactivated and shuts down
29
+ * their teams.
30
+ */
31
+ export declare function processReadyStrategies(): Promise<void>;
32
+ /**
33
+ * Check that every session recorded as 'starting' or 'running' in the DB
34
+ * has a corresponding active team in memory.
35
+ *
36
+ * If a session has been in a live status for more than 2 minutes but no
37
+ * active team claims it (e.g. the process was OOM-killed or the close
38
+ * handler failed to update the DB), the session is marked as 'failed' so
39
+ * subsequent poll cycles can respawn the strategy.
40
+ */
41
+ export declare function checkSessionHealth(): Promise<void>;
42
+ /**
43
+ * Stop all listeners.
44
+ */
45
+ export declare function stopListeners(): Promise<void>;
46
+ /**
47
+ * Refresh roles from API.
48
+ */
49
+ export declare function refreshRoles(): Promise<void>;
50
+ /**
51
+ * Trigger an immediate check for ready strategies.
52
+ * Useful after a session completes to auto-advance to next delivery.
53
+ * No-ops during daemon shutdown to prevent spawn attempts after the
54
+ * resource governor has been shut down.
55
+ */
56
+ export declare function triggerCheck(): void;
57
+ //# sourceMappingURL=listener.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,YAAY,CAAC;AAoC1D;;GAEG;AACH,wBAAsB,YAAY,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAgC5C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAO3C;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsG5D;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkIxD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAMnD;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CASlD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAGnC"}