@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,119 @@
1
+ /**
2
+ * Persistent worktree provisioning for active strategies.
3
+ *
4
+ * Creates worktrees for active strategies that don't have one yet,
5
+ * adopts existing worktrees on disk, and rebases onto integration.
6
+ */
7
+ import { existsSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ import { installAuditPreCommitHook } from './audit-hooks.js';
10
+ import { getReadyStrategies } from './supabase.js';
11
+ import { createWorktree, syncIntegrationWithMain, runGitSync, ensureMcpServerInWorktree } from './git.js';
12
+ import { symlinkEnvFiles } from './qa-provisioner.js';
13
+ import { generateStrategyBranchName } from './strategy-executor.js';
14
+ import { setStrategyWorktree, hasStrategyWorktree, } from './strategy-worktree-state.js';
15
+ /**
16
+ * Ensure persistent worktrees exist for all active strategies.
17
+ *
18
+ * Called each poll cycle BEFORE processReadyStrategies(). Creates
19
+ * worktrees for active strategies that don't have one yet.
20
+ * Syncs integration with main once per cycle (not per strategy).
21
+ */
22
+ export async function ensureStrategyWorktrees(config, roles) {
23
+ let readyStrategies;
24
+ try {
25
+ readyStrategies = await getReadyStrategies(config.organizationId, config.productId);
26
+ }
27
+ catch (err) {
28
+ console.warn(`[strategy-lifecycle] Failed to query ready strategies for worktree provisioning: ${err.message}`);
29
+ return;
30
+ }
31
+ // Find strategies that need worktrees
32
+ const needsWorktree = readyStrategies.filter(s => !hasStrategyWorktree(s.strategy_id));
33
+ if (needsWorktree.length === 0)
34
+ return;
35
+ // Sync integration with main once before creating any worktrees
36
+ try {
37
+ const syncResult = await syncIntegrationWithMain(config);
38
+ if (syncResult.success) {
39
+ console.log(`[strategy-lifecycle] Synced integration with main before worktree provisioning`);
40
+ }
41
+ else {
42
+ console.warn(`[strategy-lifecycle] Could not sync integration with main: ${syncResult.error}`);
43
+ }
44
+ }
45
+ catch (err) {
46
+ console.warn(`[strategy-lifecycle] Sync failed (continuing): ${err instanceof Error ? err.message : String(err)}`);
47
+ }
48
+ for (const strategy of needsWorktree) {
49
+ const role = roles.get(strategy.assigned_agent_role_id);
50
+ if (!role) {
51
+ console.warn(`[strategy-lifecycle] Unknown agent role ${strategy.assigned_agent_role_id} for strategy "${strategy.strategy_name}", skipping worktree`);
52
+ continue;
53
+ }
54
+ const branchName = generateStrategyBranchName(role, strategy.strategy_name, strategy.strategy_id);
55
+ const worktreePath = join(config.worktreeDir, branchName.replace(/\//g, '-'));
56
+ // Check if a valid worktree already exists on disk (e.g., after daemon restart
57
+ // or reactivation). Adopt it instead of destroying and rebuilding.
58
+ if (existsSync(worktreePath)) {
59
+ const gitDirResult = runGitSync(['rev-parse', '--git-dir'], worktreePath);
60
+ const branchResult = runGitSync(['rev-parse', '--abbrev-ref', 'HEAD'], worktreePath);
61
+ if (gitDirResult.success && branchResult.success && branchResult.output === branchName) {
62
+ // Valid worktree on the expected branch -- adopt it
63
+ console.log(`[strategy-lifecycle] Adopting existing worktree for "${strategy.strategy_name}": ${worktreePath}`);
64
+ setStrategyWorktree(strategy.strategy_id, {
65
+ strategyId: strategy.strategy_id,
66
+ strategyName: strategy.strategy_name,
67
+ worktreePath,
68
+ branchName,
69
+ createdAt: new Date(),
70
+ hasQaDevServer: false,
71
+ });
72
+ // Rebase onto integration to bring it current
73
+ const rebaseResult = runGitSync(['rebase', config.integrationBranch], worktreePath);
74
+ if (!rebaseResult.success) {
75
+ runGitSync(['rebase', '--abort'], worktreePath);
76
+ console.warn(`[strategy-lifecycle] Could not rebase adopted worktree for "${strategy.strategy_name}" onto integration. Continuing with existing state.`);
77
+ }
78
+ else {
79
+ console.log(`[strategy-lifecycle] Rebased adopted worktree for "${strategy.strategy_name}" onto ${config.integrationBranch}`);
80
+ }
81
+ // Symlink env files and MCP server dist from main repo into worktree
82
+ symlinkEnvFiles(config.repoPath, worktreePath);
83
+ ensureMcpServerInWorktree(config.repoPath, worktreePath);
84
+ // Install audit pre-commit hook for read-only strategies
85
+ if (strategy.read_only) {
86
+ installAuditPreCommitHook(worktreePath);
87
+ console.log(`[strategy-lifecycle] Installed audit pre-commit hook for "${strategy.strategy_name}"`);
88
+ }
89
+ continue;
90
+ }
91
+ // Directory exists but is not a valid worktree for this branch -- fall through to createWorktree
92
+ console.log(`[strategy-lifecycle] Existing directory at ${worktreePath} is not a valid worktree for ${branchName}, recreating`);
93
+ }
94
+ try {
95
+ const createdPath = await createWorktree(config, branchName);
96
+ setStrategyWorktree(strategy.strategy_id, {
97
+ strategyId: strategy.strategy_id,
98
+ strategyName: strategy.strategy_name,
99
+ worktreePath: createdPath,
100
+ branchName,
101
+ createdAt: new Date(),
102
+ hasQaDevServer: false,
103
+ });
104
+ console.log(`[strategy-lifecycle] Created persistent worktree for "${strategy.strategy_name}": ${createdPath}`);
105
+ // Symlink env files from main repo into worktree
106
+ symlinkEnvFiles(config.repoPath, createdPath);
107
+ // Install audit pre-commit hook for read-only strategies
108
+ if (strategy.read_only) {
109
+ installAuditPreCommitHook(createdPath);
110
+ console.log(`[strategy-lifecycle] Installed audit pre-commit hook for "${strategy.strategy_name}"`);
111
+ }
112
+ }
113
+ catch (err) {
114
+ console.error(`[strategy-lifecycle] Failed to create worktree for "${strategy.strategy_name}": ${err instanceof Error ? err.message : String(err)}`);
115
+ // Continue with other strategies
116
+ }
117
+ }
118
+ }
119
+ //# sourceMappingURL=strategy-provisioning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-provisioning.js","sourceRoot":"","sources":["../src/strategy-provisioning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Strategy team state management.
3
+ *
4
+ * Tracks active strategy teams in memory and provides
5
+ * query/mutation helpers for the active teams map.
6
+ */
7
+ import type { StrategyTeamState, StrategyExecutionConfig, PipelineConfig } from './types.js';
8
+ /**
9
+ * Get all active strategy teams.
10
+ */
11
+ export declare function getActiveTeams(): Map<string, StrategyTeamState>;
12
+ /**
13
+ * Check if a strategy already has an active team.
14
+ */
15
+ export declare function hasActiveTeam(strategyId: string): boolean;
16
+ /**
17
+ * Get count of active teams.
18
+ */
19
+ export declare function getActiveTeamCount(): number;
20
+ /**
21
+ * Derive execution config from strategy pipeline config.
22
+ */
23
+ export declare function deriveExecutionConfig(_pipelineConfig: PipelineConfig | null): StrategyExecutionConfig;
24
+ //# sourceMappingURL=strategy-team-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-team-state.d.ts","sourceRoot":"","sources":["../src/strategy-team-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACvB,cAAc,EACf,MAAM,YAAY,CAAC;AAOpB;;GAEG;AACH,wBAAgB,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAE/D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAUD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,cAAc,GAAG,IAAI,GAAG,uBAAuB,CAKrG"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Strategy team state management.
3
+ *
4
+ * Tracks active strategy teams in memory and provides
5
+ * query/mutation helpers for the active teams map.
6
+ */
7
+ // ── Active teams tracking ────────────────────────────────────────────
8
+ /** Active strategy teams: strategyId -> StrategyTeamState */
9
+ const activeTeams = new Map();
10
+ /**
11
+ * Get all active strategy teams.
12
+ */
13
+ export function getActiveTeams() {
14
+ return activeTeams;
15
+ }
16
+ /**
17
+ * Check if a strategy already has an active team.
18
+ */
19
+ export function hasActiveTeam(strategyId) {
20
+ return activeTeams.has(strategyId);
21
+ }
22
+ /**
23
+ * Get count of active teams.
24
+ */
25
+ export function getActiveTeamCount() {
26
+ return activeTeams.size;
27
+ }
28
+ // ── Default execution config ─────────────────────────────────────────
29
+ const DEFAULT_EXECUTION_CONFIG = {
30
+ maxWorkers: 3,
31
+ idlePollIntervalMs: 30000,
32
+ activePollIntervalMs: 60000,
33
+ };
34
+ /**
35
+ * Derive execution config from strategy pipeline config.
36
+ */
37
+ export function deriveExecutionConfig(_pipelineConfig) {
38
+ // For now, use defaults. The teams.enabled flag in pipelineConfig
39
+ // is deprecated — teams are always the execution model.
40
+ // Future: pipelineConfig could specify maxWorkers or parallelism level.
41
+ return { ...DEFAULT_EXECUTION_CONFIG };
42
+ }
43
+ //# sourceMappingURL=strategy-team-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-team-state.js","sourceRoot":"","sources":["../src/strategy-team-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,wEAAwE;AAExE,6DAA6D;AAC7D,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;AAEzD;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,OAAO,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,WAAW,CAAC,IAAI,CAAC;AAC1B,CAAC;AAED,wEAAwE;AAExE,MAAM,wBAAwB,GAA4B;IACxD,UAAU,EAAE,CAAC;IACb,kBAAkB,EAAE,KAAK;IACzB,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,eAAsC;IAC1E,kEAAkE;IAClE,wDAAwD;IACxD,wEAAwE;IACxE,OAAO,EAAE,GAAG,wBAAwB,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Strategy teardown and deactivation detection.
3
+ *
4
+ * Coordinated teardown stops QA, terminates the team, commits WIP,
5
+ * and removes the worktree. Deactivation detection polls for strategies
6
+ * that have been unassigned and triggers their teardown.
7
+ */
8
+ import type { DaemonConfig } from './types.js';
9
+ /**
10
+ * Tear down a single strategy: stop QA, terminate team, remove worktree.
11
+ *
12
+ * Each step is independently try/caught so a failure in one
13
+ * does not prevent the others from running.
14
+ */
15
+ export declare function teardownStrategy(config: DaemonConfig, strategyId: string, strategyName: string): Promise<void>;
16
+ /**
17
+ * Detect deactivated strategies and tear them down.
18
+ *
19
+ * Replaces both detectDeactivatedStrategies() from strategy-executor.ts
20
+ * and checkQaForDeactivatedStrategies() from qa-orchestrator.ts.
21
+ * A single pass handles both team termination and QA cleanup.
22
+ */
23
+ export declare function checkForDeactivatedStrategies(config: DaemonConfig): Promise<void>;
24
+ //# sourceMappingURL=strategy-teardown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-teardown.d.ts","sourceRoot":"","sources":["../src/strategy-teardown.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAa/C;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAgGf;AAED;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAuCf"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Strategy teardown and deactivation detection.
3
+ *
4
+ * Coordinated teardown stops QA, terminates the team, commits WIP,
5
+ * and removes the worktree. Deactivation detection polls for strategies
6
+ * that have been unassigned and triggers their teardown.
7
+ */
8
+ import { getActiveStrategies, updateQaStatus } from './supabase.js';
9
+ import { safeRemoveStrategyWorktree, commitWipChanges } from './git.js';
10
+ import { terminateTeam, waitForTeamExit } from './strategy-executor.js';
11
+ import { getActiveTeams } from './strategy-team-state.js';
12
+ import { getStrategyWorktree, getAllStrategyWorktrees, } from './strategy-worktree-state.js';
13
+ import { escalateMergeConflict } from './strategy-merge.js';
14
+ import { getQaEnvironment, removeQaEnvironment } from './qa-state.js';
15
+ import { stopQaDevServer } from './qa-dev-server.js';
16
+ /**
17
+ * Tear down a single strategy: stop QA, terminate team, remove worktree.
18
+ *
19
+ * Each step is independently try/caught so a failure in one
20
+ * does not prevent the others from running.
21
+ */
22
+ export async function teardownStrategy(config, strategyId, strategyName) {
23
+ console.log(`[strategy-lifecycle] Tearing down strategy "${strategyName}"`);
24
+ // 1. Stop QA dev server if running
25
+ try {
26
+ const qaState = getQaEnvironment(strategyId);
27
+ if (qaState?.pid) {
28
+ console.log(`[strategy-lifecycle] Stopping QA dev server for "${strategyName}" (PID: ${qaState.pid})`);
29
+ await stopQaDevServer(qaState.pid);
30
+ }
31
+ }
32
+ catch (err) {
33
+ console.warn(`[strategy-lifecycle] Failed to stop QA dev server for "${strategyName}": ${err.message}`);
34
+ }
35
+ // 2. Clear QA in-memory state
36
+ try {
37
+ removeQaEnvironment(strategyId);
38
+ }
39
+ catch (err) {
40
+ console.warn(`[strategy-lifecycle] Failed to clear QA state for "${strategyName}": ${err.message}`);
41
+ }
42
+ // 3. Clear QA DB state
43
+ try {
44
+ await updateQaStatus(strategyId, {
45
+ qaStatus: null,
46
+ qaUrl: null,
47
+ qaPort: null,
48
+ qaWorktreePath: null,
49
+ qaReadyAt: null,
50
+ qaError: null,
51
+ });
52
+ }
53
+ catch (err) {
54
+ console.warn(`[strategy-lifecycle] Failed to clear QA DB state for "${strategyName}": ${err.message}`);
55
+ }
56
+ // 4. Terminate agent team and wait for process exit
57
+ try {
58
+ const activeTeams = getActiveTeams();
59
+ const team = activeTeams.get(strategyId);
60
+ if (team && team.phase !== 'shutting_down' && team.phase !== 'terminated') {
61
+ console.log(`[strategy-lifecycle] Terminating team for "${strategyName}"`);
62
+ terminateTeam(strategyId);
63
+ // Wait for process to actually exit (default 30s, then SIGKILL)
64
+ const exited = await waitForTeamExit(strategyId);
65
+ if (!exited) {
66
+ console.warn(`[strategy-lifecycle] Team for "${strategyName}" did not exit cleanly after SIGKILL`);
67
+ }
68
+ }
69
+ }
70
+ catch (err) {
71
+ console.warn(`[strategy-lifecycle] Failed to terminate team for "${strategyName}": ${err.message}`);
72
+ }
73
+ // 4b. Commit any uncommitted WIP changes left by the agent
74
+ try {
75
+ const worktreeInfo = getStrategyWorktree(strategyId);
76
+ if (worktreeInfo) {
77
+ commitWipChanges(worktreeInfo.worktreePath, strategyName);
78
+ }
79
+ }
80
+ catch (err) {
81
+ console.warn(`[strategy-lifecycle] WIP commit failed for "${strategyName}": ${err.message}`);
82
+ }
83
+ // 5. Remove strategy worktree via canonical path (merge-before-remove + conditional state cleanup).
84
+ try {
85
+ const worktreeInfo = getStrategyWorktree(strategyId);
86
+ if (worktreeInfo) {
87
+ console.log(`[strategy-lifecycle] Removing worktree for "${strategyName}": ${worktreeInfo.worktreePath}`);
88
+ const removeResult = await safeRemoveStrategyWorktree({
89
+ config,
90
+ worktreePath: worktreeInfo.worktreePath,
91
+ branchName: worktreeInfo.branchName,
92
+ deliveryName: strategyName,
93
+ deliveryId: strategyId,
94
+ strategyId,
95
+ });
96
+ // Escalate if merge failed (worktree preserved with unmerged work)
97
+ if (removeResult.merged && removeResult.mergeError) {
98
+ escalateMergeConflict({
99
+ organizationId: config.organizationId,
100
+ sessionId: '',
101
+ deliveryId: strategyId,
102
+ deliveryName: strategyName,
103
+ branchName: worktreeInfo.branchName,
104
+ integrationBranch: config.integrationBranch,
105
+ mergeError: removeResult.mergeError,
106
+ }).catch(err => console.warn(`[strategy-lifecycle] escalateMergeConflict failed for "${strategyName}": ${err.message}`));
107
+ }
108
+ }
109
+ }
110
+ catch (err) {
111
+ console.warn(`[strategy-lifecycle] Failed to remove worktree for "${strategyName}": ${err.message}`);
112
+ }
113
+ console.log(`[strategy-lifecycle] Teardown complete for "${strategyName}"`);
114
+ }
115
+ /**
116
+ * Detect deactivated strategies and tear them down.
117
+ *
118
+ * Replaces both detectDeactivatedStrategies() from strategy-executor.ts
119
+ * and checkQaForDeactivatedStrategies() from qa-orchestrator.ts.
120
+ * A single pass handles both team termination and QA cleanup.
121
+ */
122
+ export async function checkForDeactivatedStrategies(config) {
123
+ const allWorktrees = getAllStrategyWorktrees();
124
+ const activeTeams = getActiveTeams();
125
+ // Nothing to check if no worktrees and no teams
126
+ if (allWorktrees.size === 0 && activeTeams.size === 0)
127
+ return;
128
+ let activeStrategyIds;
129
+ try {
130
+ // Use getActiveStrategies (not getReadyStrategies) -- a strategy is "active" even
131
+ // when all deliveries are done. Worktrees must persist for QA and idle queues.
132
+ const activeStrategies = await getActiveStrategies(config.organizationId, config.productId);
133
+ activeStrategyIds = new Set(activeStrategies.map(s => s.strategy_id));
134
+ }
135
+ catch (err) {
136
+ console.warn(`[strategy-lifecycle] Cannot determine active strategies (skipping deactivation check): ${err.message}`);
137
+ return;
138
+ }
139
+ // Collect all strategy IDs that have either a worktree or an active team
140
+ const trackedStrategyIds = new Set([
141
+ ...allWorktrees.keys(),
142
+ ...activeTeams.keys(),
143
+ ]);
144
+ for (const strategyId of trackedStrategyIds) {
145
+ if (activeStrategyIds.has(strategyId))
146
+ continue;
147
+ const worktreeInfo = getStrategyWorktree(strategyId);
148
+ const team = activeTeams.get(strategyId);
149
+ const name = worktreeInfo?.strategyName ?? team?.strategyName ?? strategyId;
150
+ // Skip teams already shutting down
151
+ if (team && (team.phase === 'shutting_down' || team.phase === 'terminated') && !worktreeInfo) {
152
+ continue;
153
+ }
154
+ console.log(`[strategy-lifecycle] Strategy "${name}" deactivated -- coordinated teardown`);
155
+ await teardownStrategy(config, strategyId, name);
156
+ }
157
+ }
158
+ //# sourceMappingURL=strategy-teardown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-teardown.js","sourceRoot":"","sources":["../src/strategy-teardown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Strategy worktree state management — write-through cache.
3
+ *
4
+ * Tracks persistent strategy worktrees using a local Map as the
5
+ * synchronous read cache, backed by the strategy_worktrees DB table.
6
+ *
7
+ * Read path: all get/has/getAll calls are synchronous (Map lookup).
8
+ * Write path: update Map immediately, then fire async DB write.
9
+ * Startup: hydrateFromDb() loads all records from DB into the Map.
10
+ *
11
+ * The Map is authoritative during runtime. The DB is authoritative
12
+ * across restarts. Async DB writes are fire-and-forget with logging.
13
+ */
14
+ import type { StrategyWorktreeInfo } from './types.js';
15
+ /**
16
+ * Hydrate the in-memory cache from the database.
17
+ *
18
+ * Call once during daemon startup, BEFORE rebuildStrategyWorktreeState.
19
+ * Stores the productId for subsequent write-through operations.
20
+ */
21
+ export declare function hydrateFromDb(productId: string): Promise<void>;
22
+ /**
23
+ * Get a single strategy worktree by strategy ID.
24
+ */
25
+ export declare function getStrategyWorktree(strategyId: string): StrategyWorktreeInfo | undefined;
26
+ /**
27
+ * Add or update a strategy worktree entry.
28
+ *
29
+ * Updates the Map synchronously, then fires an async DB upsert.
30
+ */
31
+ export declare function setStrategyWorktree(strategyId: string, info: StrategyWorktreeInfo): void;
32
+ /**
33
+ * Remove a strategy worktree entry.
34
+ * Returns whether the entry existed.
35
+ *
36
+ * Deletes from Map synchronously, then fires an async DB remove.
37
+ */
38
+ export declare function removeStrategyWorktree(strategyId: string): boolean;
39
+ /**
40
+ * Get all strategy worktrees.
41
+ */
42
+ export declare function getAllStrategyWorktrees(): Map<string, StrategyWorktreeInfo>;
43
+ /**
44
+ * Check if a strategy has a persistent worktree.
45
+ */
46
+ export declare function hasStrategyWorktree(strategyId: string): boolean;
47
+ //# sourceMappingURL=strategy-worktree-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-worktree-state.d.ts","sourceRoot":"","sources":["../src/strategy-worktree-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAgBvD;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAExF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAgBxF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAclE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAE3E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE/D"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Strategy worktree state management — write-through cache.
3
+ *
4
+ * Tracks persistent strategy worktrees using a local Map as the
5
+ * synchronous read cache, backed by the strategy_worktrees DB table.
6
+ *
7
+ * Read path: all get/has/getAll calls are synchronous (Map lookup).
8
+ * Write path: update Map immediately, then fire async DB write.
9
+ * Startup: hydrateFromDb() loads all records from DB into the Map.
10
+ *
11
+ * The Map is authoritative during runtime. The DB is authoritative
12
+ * across restarts. Async DB writes are fire-and-forget with logging.
13
+ */
14
+ import { upsertWorktreeRecord, removeWorktreeRecord, listWorktreeRecords, } from './queries/worktrees.js';
15
+ // ── Module-level config ──────────────────────────────────────────────
16
+ let configuredProductId = null;
17
+ // ── Persistent worktree tracking ─────────────────────────────────────
18
+ /** Persistent strategy worktrees: strategyId -> StrategyWorktreeInfo */
19
+ const strategyWorktrees = new Map();
20
+ /**
21
+ * Hydrate the in-memory cache from the database.
22
+ *
23
+ * Call once during daemon startup, BEFORE rebuildStrategyWorktreeState.
24
+ * Stores the productId for subsequent write-through operations.
25
+ */
26
+ export async function hydrateFromDb(productId) {
27
+ configuredProductId = productId;
28
+ let records;
29
+ try {
30
+ records = await listWorktreeRecords(productId);
31
+ }
32
+ catch (err) {
33
+ console.warn(`[worktree-state] Failed to hydrate from DB, starting with empty cache:`, err.message);
34
+ return;
35
+ }
36
+ let hydrated = 0;
37
+ for (const record of records) {
38
+ strategyWorktrees.set(record.strategyId, {
39
+ strategyId: record.strategyId,
40
+ strategyName: '', // Not stored in DB — rebuilt by callers
41
+ worktreePath: record.worktreePath,
42
+ branchName: record.branchName,
43
+ createdAt: new Date(record.createdAt),
44
+ hasQaDevServer: false, // Runtime-only state
45
+ });
46
+ hydrated++;
47
+ }
48
+ if (hydrated > 0) {
49
+ console.log(`[worktree-state] Hydrated ${hydrated} worktree(s) from DB`);
50
+ }
51
+ }
52
+ /**
53
+ * Get a single strategy worktree by strategy ID.
54
+ */
55
+ export function getStrategyWorktree(strategyId) {
56
+ return strategyWorktrees.get(strategyId);
57
+ }
58
+ /**
59
+ * Add or update a strategy worktree entry.
60
+ *
61
+ * Updates the Map synchronously, then fires an async DB upsert.
62
+ */
63
+ export function setStrategyWorktree(strategyId, info) {
64
+ strategyWorktrees.set(strategyId, info);
65
+ // Write-through: async DB upsert (fire-and-forget)
66
+ upsertWorktreeRecord({
67
+ strategyId,
68
+ productId: configuredProductId,
69
+ worktreePath: info.worktreePath,
70
+ branchName: info.branchName,
71
+ status: 'active',
72
+ }).catch((err) => {
73
+ console.warn(`[worktree-state] DB upsert failed for strategy ${strategyId}:`, err.message);
74
+ });
75
+ }
76
+ /**
77
+ * Remove a strategy worktree entry.
78
+ * Returns whether the entry existed.
79
+ *
80
+ * Deletes from Map synchronously, then fires an async DB remove.
81
+ */
82
+ export function removeStrategyWorktree(strategyId) {
83
+ const existed = strategyWorktrees.delete(strategyId);
84
+ if (existed) {
85
+ // Write-through: async DB remove (fire-and-forget)
86
+ removeWorktreeRecord(strategyId).catch((err) => {
87
+ console.warn(`[worktree-state] DB remove failed for strategy ${strategyId}:`, err.message);
88
+ });
89
+ }
90
+ return existed;
91
+ }
92
+ /**
93
+ * Get all strategy worktrees.
94
+ */
95
+ export function getAllStrategyWorktrees() {
96
+ return strategyWorktrees;
97
+ }
98
+ /**
99
+ * Check if a strategy has a persistent worktree.
100
+ */
101
+ export function hasStrategyWorktree(strategyId) {
102
+ return strategyWorktrees.has(strategyId);
103
+ }
104
+ //# sourceMappingURL=strategy-worktree-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-worktree-state.js","sourceRoot":"","sources":["../src/strategy-worktree-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Telora API client for the daemon.
3
+ *
4
+ * This module re-exports all query functions from domain-specific modules
5
+ * under queries/. The API client infrastructure (callApi, circuit breaker,
6
+ * config) lives in queries/shared.ts.
7
+ *
8
+ * All existing imports from './supabase.js' continue to work unchanged.
9
+ */
10
+ export { initSupabase, validateTrackerAuth } from './queries/shared.js';
11
+ export { getAgentRoles, getAgentRole } from './queries/roles.js';
12
+ export { getActiveSessions, getActiveSessionCountByRole, getCompletedSessionAggregates, createSession, updateSession, } from './queries/sessions.js';
13
+ export type { CreateSessionParams, SessionAggregates } from './queries/sessions.js';
14
+ export { getReadyDeliveries, getDeliveryContext, updateDeliveryStatus, updateDeliveryMergeCommitSha, getDoneDeliveries, getReadyStrategies, getActiveStrategies, getMergeConflictDeliveries, reportGitState, } from './queries/deliveries.js';
15
+ export { fetchEffectiveWorkflow, fetchEffectiveWorkflowWithTransitions } from './queries/workflows.js';
16
+ export { getDeliveryIssues, getDeliverySessionCount, updateIssueStatus, createEscalation, createIssue, } from './queries/issues.js';
17
+ export type { CreateEscalationParams } from './queries/issues.js';
18
+ export { fetchTransitionGuards, createTransitionEvaluation, createTransitionBlock, getActiveTransitionBlock, getResolvedTransitionBlockForDelivery, } from './queries/guards.js';
19
+ export { sendHeartbeat, sendDisconnect } from './queries/daemon-connection.js';
20
+ export { getStrategyDeliveries, getStrategyIssues, getReviewRequests, clearReviewRequest, } from './queries/strategies.js';
21
+ export type { ReviewRequest } from './queries/strategies.js';
22
+ export { upsertWorktreeRecord, removeWorktreeRecord, listWorktreeRecords, } from './queries/worktrees.js';
23
+ export type { WorktreeRecord } from './queries/worktrees.js';
24
+ export { getQaRequests, updateQaStatus, getDeactivatedQaStrategies, getQaStrategies } from './queries/qa.js';
25
+ export { getProductQaRequests, updateProductQaStatus, getProductQaStatus } from './queries/qa.js';
26
+ export { getControlStateChanges, setControlStateRunning, } from './queries/control-state.js';
27
+ export type { ControlStateChange } from './queries/control-state.js';
28
+ /**
29
+ * @deprecated Use getReadyDeliveries instead
30
+ */
31
+ export declare function getAgentAssignedIssues(_organizationId: string): Promise<never[]>;
32
+ /**
33
+ * @deprecated Not needed with HTTP API
34
+ */
35
+ export declare function getSupabase(): never;
36
+ //# sourceMappingURL=supabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../src/supabase.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAGxE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGjE,OAAO,EACL,iBAAiB,EACjB,2BAA2B,EAC3B,6BAA6B,EAC7B,aAAa,EACb,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAGpF,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,4BAA4B,EAC5B,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,0BAA0B,EAC1B,cAAc,GACf,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,sBAAsB,EAAE,qCAAqC,EAAE,MAAM,wBAAwB,CAAC;AAGvG,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAGlE,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,wBAAwB,EACxB,qCAAqC,GACtC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAG7G,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGlG,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAIrE;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAGtF;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,KAAK,CAEnC"}