@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,193 @@
1
+ /**
2
+ * Core condition tree evaluation logic for the guard engine.
3
+ *
4
+ * Contains the main evaluateGuardConditionTree function that traverses
5
+ * AND/OR/NOT trees and dispatches to leaf condition evaluators, plus the
6
+ * high-level guard evaluation orchestrator (evaluateGuardsAtTransition).
7
+ *
8
+ * Extracted from guard-engine.ts to improve maintainability.
9
+ */
10
+ import { buildEvaluationContext } from './evaluation-context.js';
11
+ import { evaluateLeafCondition } from './condition-evaluators.js';
12
+ import { fetchTransitionGuards, createTransitionEvaluation, } from './queries/guards.js';
13
+ import { withRetry } from '@telora/daemon-core';
14
+ // ============================================
15
+ // Guard Evaluation Error
16
+ // ============================================
17
+ /**
18
+ * Error thrown when guard evaluation fails.
19
+ * Carries the fetched guards (if available) so callers can determine
20
+ * failure mode based on enforcement levels.
21
+ */
22
+ export class GuardEvaluationError extends Error {
23
+ cause;
24
+ fetchedGuards;
25
+ constructor(message, cause,
26
+ /** Guards that were successfully fetched before the error, if any. */
27
+ fetchedGuards) {
28
+ super(message);
29
+ this.cause = cause;
30
+ this.fetchedGuards = fetchedGuards;
31
+ this.name = 'GuardEvaluationError';
32
+ }
33
+ /** Whether any fetched guard has hard enforcement. */
34
+ get hasHardEnforcementGuards() {
35
+ return this.fetchedGuards?.some(g => g.enforcement === 'hard') ?? false;
36
+ }
37
+ /** Names of fetched guards (for error messages). */
38
+ get guardNames() {
39
+ return this.fetchedGuards?.map(g => g.name) ?? [];
40
+ }
41
+ }
42
+ // ============================================
43
+ // Condition Tree Evaluator
44
+ // ============================================
45
+ /**
46
+ * Evaluate a single condition tree node recursively.
47
+ *
48
+ * Accumulates leaf evaluation results into `details` and uses
49
+ * `nodeCounter` (passed by reference as a wrapper) to assign stable IDs.
50
+ * Extracted from evaluateGuardConditionTree to eliminate mutable closure state.
51
+ */
52
+ function evaluateConditionNode(node, ctx, details, nodeCounter) {
53
+ const children = node.children ?? [];
54
+ if (children.length > 0) {
55
+ // Group node -- evaluate children with this node's logical operator
56
+ const operator = node.logical_operator ?? 'AND';
57
+ const childResults = children.map(child => evaluateConditionNode(child, ctx, details, nodeCounter));
58
+ return operator === 'AND'
59
+ ? childResults.every(r => r)
60
+ : childResults.some(r => r);
61
+ }
62
+ // Leaf node -- evaluate the condition and record the result
63
+ const nodeId = `cond-${nodeCounter.value++}`;
64
+ const evalResult = evaluateLeafCondition(node, nodeId, ctx);
65
+ details.push(evalResult);
66
+ return evalResult.passed;
67
+ }
68
+ /**
69
+ * Evaluate a JSONB condition tree for a guard.
70
+ *
71
+ * The JSONB tree uses nested children arrays rather than
72
+ * parent_condition_id references. Root-level nodes are combined
73
+ * with AND by default.
74
+ */
75
+ export function evaluateGuardConditionTree(conditions, ctx) {
76
+ if (conditions.length === 0) {
77
+ return { passed: true, details: [] };
78
+ }
79
+ const details = [];
80
+ const nodeCounter = { value: 0 };
81
+ const rootResults = conditions.map(node => evaluateConditionNode(node, ctx, details, nodeCounter));
82
+ const passed = rootResults.every(r => r);
83
+ return { passed, details };
84
+ }
85
+ // ============================================
86
+ // Guard Evaluation Orchestrator
87
+ // ============================================
88
+ /**
89
+ * Evaluate all guards at a workflow transition.
90
+ *
91
+ * Returns a TransitionGuardResult indicating whether the transition
92
+ * should proceed and what triggers need to be executed.
93
+ */
94
+ export async function evaluateGuardsAtTransition(deliveryId, organizationId, transitionId, lastExitCode) {
95
+ let guards;
96
+ let triggers;
97
+ try {
98
+ const resolved = await withRetry(() => fetchTransitionGuards(transitionId), { label: 'guard-fetch' });
99
+ guards = resolved.guards;
100
+ triggers = resolved.triggers;
101
+ }
102
+ catch (err) {
103
+ throw new GuardEvaluationError(`Failed to fetch guards: ${err.message}`, err, null);
104
+ }
105
+ if (guards.length === 0) {
106
+ // No guards -- collect on_enter triggers and proceed
107
+ const enterTriggers = triggers.filter(t => t.trigger_event === 'on_enter');
108
+ return {
109
+ should_proceed: true,
110
+ evaluations: [],
111
+ triggers_to_execute: enterTriggers.map(t => ({ trigger: t, guard: null, eval_result: null })),
112
+ warnings: [],
113
+ blocks: [],
114
+ };
115
+ }
116
+ let ctx;
117
+ try {
118
+ ctx = await withRetry(() => buildEvaluationContext(deliveryId, lastExitCode), { label: 'guard-context' });
119
+ }
120
+ catch (err) {
121
+ throw new GuardEvaluationError(`Failed to build evaluation context: ${err.message}`, err, guards);
122
+ }
123
+ // Evaluate each guard's conditions
124
+ const evaluations = [];
125
+ const triggersToExecute = [];
126
+ const warnings = [];
127
+ const blocks = [];
128
+ for (const guard of guards) {
129
+ const { passed, details } = evaluateGuardConditionTree(guard.conditions, ctx);
130
+ const evalResult = {
131
+ guard_id: guard.id,
132
+ guard_name: guard.name,
133
+ enforcement: guard.enforcement,
134
+ passed,
135
+ condition_details: details,
136
+ };
137
+ evaluations.push(evalResult);
138
+ if (!passed) {
139
+ // Collect on_guard_fail triggers for this guard
140
+ const failTriggers = triggers.filter(t => t.trigger_event === 'on_guard_fail');
141
+ for (const trigger of failTriggers) {
142
+ triggersToExecute.push({ trigger, guard, eval_result: evalResult });
143
+ }
144
+ if (guard.enforcement === 'hard') {
145
+ blocks.push(evalResult);
146
+ }
147
+ else {
148
+ warnings.push(evalResult);
149
+ }
150
+ }
151
+ else {
152
+ // Collect on_guard_pass triggers
153
+ const passTriggers = triggers.filter(t => t.trigger_event === 'on_guard_pass');
154
+ for (const trigger of passTriggers) {
155
+ triggersToExecute.push({ trigger, guard, eval_result: evalResult });
156
+ }
157
+ }
158
+ // Record evaluation in audit trail
159
+ const evaluationRecord = {
160
+ organization_id: organizationId,
161
+ entity_type: 'delivery',
162
+ entity_id: deliveryId,
163
+ transition_id: transitionId,
164
+ guard_id: guard.id,
165
+ result: passed ? 'passed' : 'failed',
166
+ blocked: !passed && guard.enforcement === 'hard',
167
+ enforcement_level: guard.enforcement,
168
+ evaluation_details: { conditions: details },
169
+ };
170
+ try {
171
+ await createTransitionEvaluation(evaluationRecord);
172
+ }
173
+ catch (err) {
174
+ console.warn(`Failed to record guard evaluation for "${guard.name}":`, err.message);
175
+ }
176
+ }
177
+ // Collect on_enter triggers if proceeding
178
+ const shouldProceed = blocks.length === 0;
179
+ if (shouldProceed) {
180
+ const enterTriggers = triggers.filter(t => t.trigger_event === 'on_enter');
181
+ for (const trigger of enterTriggers) {
182
+ triggersToExecute.push({ trigger, guard: null, eval_result: null });
183
+ }
184
+ }
185
+ return {
186
+ should_proceed: shouldProceed,
187
+ evaluations,
188
+ triggers_to_execute: triggersToExecute,
189
+ warnings,
190
+ blocks,
191
+ };
192
+ }
193
+ //# sourceMappingURL=guard-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard-evaluator.js","sourceRoot":"","sources":["../src/guard-evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Heartbeat module — periodically reports daemon presence and work status to Telora.
3
+ *
4
+ * Sends an initial heartbeat on startup, then every HEARTBEAT_INTERVAL_MS.
5
+ * On shutdown, sends a disconnect signal (best-effort).
6
+ *
7
+ * Counters are bootstrapped from the DB on startup so the heartbeat
8
+ * reflects cumulative history rather than resetting to zero.
9
+ *
10
+ * Also provides activity tracking and event loop watchdog metrics
11
+ * for stuck daemon detection.
12
+ */
13
+ import type { DaemonConfig } from './types.js';
14
+ /**
15
+ * Update the narration for a strategy. Called by ActivityTracker callback.
16
+ */
17
+ export declare function setNarration(strategyId: string, text: string): void;
18
+ /**
19
+ * Clear narration for a strategy (called when team shuts down).
20
+ */
21
+ export declare function clearNarration(strategyId: string): void;
22
+ /**
23
+ * Record daemon activity. Call this whenever meaningful work occurs
24
+ * (spawning agents, completing sessions, polling, merges, etc.).
25
+ */
26
+ export declare function recordActivity(): void;
27
+ /**
28
+ * Get the last activity timestamp (for diagnostics/testing).
29
+ */
30
+ export declare function getLastActivityAt(): Date;
31
+ /**
32
+ * Get the current event loop lag (p99) in milliseconds and reset the histogram.
33
+ */
34
+ export declare function getEventLoopLagMs(): number;
35
+ /**
36
+ * Initialize the heartbeat module.
37
+ * Bootstraps counters from the DB (single query, graceful fallback).
38
+ * Initializes event loop monitoring.
39
+ */
40
+ export declare function initHeartbeat(daemonConfig: DaemonConfig): Promise<void>;
41
+ /**
42
+ * Get the current daemon and factory versions (loaded at init time).
43
+ */
44
+ export declare function getVersions(): {
45
+ daemon: string;
46
+ factory: string;
47
+ };
48
+ /**
49
+ * Store the latest available version from the npm registry.
50
+ * Called by the version check module after a successful registry query.
51
+ */
52
+ export declare function setLatestAvailableVersion(version: string): void;
53
+ /**
54
+ * Store the latest available factory version from the npm registry.
55
+ */
56
+ export declare function setLatestAvailableFactoryVersion(version: string): void;
57
+ /**
58
+ * Record a completed session (called by spawner when an agent finishes).
59
+ */
60
+ export declare function recordSessionCompleted(tokens: number, cost: number): void;
61
+ /**
62
+ * Record a completed issue (called when an issue transitions to Done).
63
+ */
64
+ export declare function recordIssueCompleted(): void;
65
+ /**
66
+ * Start sending periodic heartbeats. Sends one immediately.
67
+ */
68
+ export declare function startHeartbeat(): Promise<void>;
69
+ /**
70
+ * Stop heartbeats and send a disconnect signal (best-effort).
71
+ */
72
+ export declare function stopHeartbeat(): Promise<void>;
73
+ //# sourceMappingURL=heartbeat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4B/C;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEnE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAEvD;AAMD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAmBD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C;AAyFD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ7E;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAEjE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/D;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEtE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIzE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AA0ED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAcpD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAanD"}
@@ -0,0 +1,306 @@
1
+ /**
2
+ * Heartbeat module — periodically reports daemon presence and work status to Telora.
3
+ *
4
+ * Sends an initial heartbeat on startup, then every HEARTBEAT_INTERVAL_MS.
5
+ * On shutdown, sends a disconnect signal (best-effort).
6
+ *
7
+ * Counters are bootstrapped from the DB on startup so the heartbeat
8
+ * reflects cumulative history rather than resetting to zero.
9
+ *
10
+ * Also provides activity tracking and event loop watchdog metrics
11
+ * for stuck daemon detection.
12
+ */
13
+ import { readFileSync } from 'node:fs';
14
+ import { hostname as osHostname } from 'node:os';
15
+ import { join, dirname, basename } from 'node:path';
16
+ import { fileURLToPath } from 'node:url';
17
+ import { monitorEventLoopDelay } from 'node:perf_hooks';
18
+ import { sendHeartbeat, sendDisconnect, getCompletedSessionAggregates } from './supabase.js';
19
+ import { getRunningAgents } from './spawner.js';
20
+ import { safeInterval } from '@telora/daemon-core';
21
+ import { computeBranchStatus } from './branch-status.js';
22
+ const HEARTBEAT_INTERVAL_MS = 60_000; // 60 seconds
23
+ const INACTIVITY_THRESHOLD_MS = 600_000; // 10 minutes
24
+ const EVENT_LOOP_LAG_WARNING_MS = 30_000; // 30 seconds
25
+ let config = null;
26
+ let heartbeatInterval = null;
27
+ let completedSessionCount = 0;
28
+ let completedIssueCount = 0;
29
+ let totalTokensUsed = 0;
30
+ let totalCost = 0;
31
+ let daemonVersion = 'unknown';
32
+ let factoryVersion = 'unknown';
33
+ let daemonCommitSha = 'unknown';
34
+ let latestAvailableVersion = null;
35
+ let latestAvailableFactoryVersion = null;
36
+ const daemonStartedAt = new Date().toISOString();
37
+ // ── Narration store (in-memory only) ─────────────────────────────────
38
+ /** Strategy ID -> latest narration text from team lead. */
39
+ const narrations = new Map();
40
+ /**
41
+ * Update the narration for a strategy. Called by ActivityTracker callback.
42
+ */
43
+ export function setNarration(strategyId, text) {
44
+ narrations.set(strategyId, text);
45
+ }
46
+ /**
47
+ * Clear narration for a strategy (called when team shuts down).
48
+ */
49
+ export function clearNarration(strategyId) {
50
+ narrations.delete(strategyId);
51
+ }
52
+ // ── Activity tracking ────────────────────────────────────────────────
53
+ let lastActivityAt = new Date();
54
+ /**
55
+ * Record daemon activity. Call this whenever meaningful work occurs
56
+ * (spawning agents, completing sessions, polling, merges, etc.).
57
+ */
58
+ export function recordActivity() {
59
+ lastActivityAt = new Date();
60
+ }
61
+ /**
62
+ * Get the last activity timestamp (for diagnostics/testing).
63
+ */
64
+ export function getLastActivityAt() {
65
+ return lastActivityAt;
66
+ }
67
+ // ── Event loop watchdog ──────────────────────────────────────────────
68
+ let eventLoopHistogram = null;
69
+ /**
70
+ * Initialize the event loop delay monitor.
71
+ * Uses perf_hooks.monitorEventLoopDelay() for passive, low-overhead measurement.
72
+ */
73
+ function initEventLoopMonitor() {
74
+ try {
75
+ eventLoopHistogram = monitorEventLoopDelay({ resolution: 20 });
76
+ eventLoopHistogram.enable();
77
+ }
78
+ catch {
79
+ console.warn('Event loop delay monitoring not available on this runtime');
80
+ }
81
+ }
82
+ /**
83
+ * Get the current event loop lag (p99) in milliseconds and reset the histogram.
84
+ */
85
+ export function getEventLoopLagMs() {
86
+ if (!eventLoopHistogram)
87
+ return 0;
88
+ // Histogram values are in nanoseconds
89
+ const p99Ns = eventLoopHistogram.percentile(99);
90
+ eventLoopHistogram.reset();
91
+ return Math.round(p99Ns / 1_000_000); // Convert ns to ms
92
+ }
93
+ /**
94
+ * Check event loop lag and log a warning if it exceeds the threshold.
95
+ */
96
+ function checkEventLoopLag(lagMs) {
97
+ if (lagMs > EVENT_LOOP_LAG_WARNING_MS) {
98
+ console.error(`[watchdog] CRITICAL: Event loop lag ${lagMs}ms exceeds ${EVENT_LOOP_LAG_WARNING_MS}ms threshold. ` +
99
+ `The daemon may have been blocked. Stack: ${new Error().stack}`);
100
+ }
101
+ }
102
+ /**
103
+ * Load daemon version from package.json and commit SHA from build-info.json.
104
+ */
105
+ function loadVersionInfo() {
106
+ let version = 'unknown';
107
+ let factoryVer = 'unknown';
108
+ let sha = 'unknown';
109
+ const thisDir = dirname(fileURLToPath(import.meta.url));
110
+ try {
111
+ const pkgPath = join(thisDir, '..', 'package.json');
112
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
113
+ version = pkg.version || 'unknown';
114
+ }
115
+ catch (e) {
116
+ console.debug('[heartbeat] Failed to load daemon version from package.json:', e.message);
117
+ }
118
+ try {
119
+ const factoryPkgPath = join(thisDir, '..', 'node_modules', '@telora', 'factory', 'package.json');
120
+ const factoryPkg = JSON.parse(readFileSync(factoryPkgPath, 'utf-8'));
121
+ factoryVer = factoryPkg.version || 'unknown';
122
+ }
123
+ catch (e) {
124
+ console.debug('[heartbeat] Failed to load factory version:', e.message);
125
+ }
126
+ try {
127
+ const buildInfoPath = join(thisDir, '..', 'build-info.json');
128
+ const buildInfo = JSON.parse(readFileSync(buildInfoPath, 'utf-8'));
129
+ sha = buildInfo.commitSha || 'unknown';
130
+ }
131
+ catch {
132
+ // build-info.json not present in dev — only stamped at publish time
133
+ }
134
+ return { version, factoryVer, commitSha: sha };
135
+ }
136
+ /**
137
+ * Bootstrap counters from the database.
138
+ *
139
+ * Queries completed session aggregates for this product so the heartbeat
140
+ * starts with cumulative totals instead of zero. Falls back gracefully
141
+ * to zero on any error.
142
+ */
143
+ async function bootstrapCountersFromDb(daemonConfig) {
144
+ try {
145
+ // Aggregate across all configured products
146
+ let totalCompleted = 0;
147
+ let totalTokens = 0;
148
+ let totalCostAgg = 0;
149
+ for (const product of daemonConfig.products) {
150
+ const aggregates = await getCompletedSessionAggregates(product.id);
151
+ totalCompleted += aggregates.completedCount;
152
+ totalTokens += aggregates.totalTokens;
153
+ totalCostAgg += aggregates.totalCost;
154
+ }
155
+ completedSessionCount = totalCompleted;
156
+ totalTokensUsed = totalTokens;
157
+ totalCost = totalCostAgg;
158
+ console.log(`Bootstrapped heartbeat counters from DB (${daemonConfig.products.length} products): ` +
159
+ `${completedSessionCount} sessions, ` +
160
+ `${totalTokensUsed} tokens, ` +
161
+ `$${totalCost.toFixed(2)} cost`);
162
+ }
163
+ catch (err) {
164
+ console.warn(`Failed to bootstrap heartbeat counters from DB (starting at zero): ` +
165
+ `${err.message}`);
166
+ // Counters remain at 0 — same as previous behavior
167
+ }
168
+ }
169
+ /**
170
+ * Initialize the heartbeat module.
171
+ * Bootstraps counters from the DB (single query, graceful fallback).
172
+ * Initializes event loop monitoring.
173
+ */
174
+ export async function initHeartbeat(daemonConfig) {
175
+ config = daemonConfig;
176
+ const info = loadVersionInfo();
177
+ daemonVersion = info.version;
178
+ factoryVersion = info.factoryVer;
179
+ daemonCommitSha = info.commitSha;
180
+ await bootstrapCountersFromDb(daemonConfig);
181
+ initEventLoopMonitor();
182
+ }
183
+ /**
184
+ * Get the current daemon and factory versions (loaded at init time).
185
+ */
186
+ export function getVersions() {
187
+ return { daemon: daemonVersion, factory: factoryVersion };
188
+ }
189
+ /**
190
+ * Store the latest available version from the npm registry.
191
+ * Called by the version check module after a successful registry query.
192
+ */
193
+ export function setLatestAvailableVersion(version) {
194
+ latestAvailableVersion = version;
195
+ }
196
+ /**
197
+ * Store the latest available factory version from the npm registry.
198
+ */
199
+ export function setLatestAvailableFactoryVersion(version) {
200
+ latestAvailableFactoryVersion = version;
201
+ }
202
+ /**
203
+ * Record a completed session (called by spawner when an agent finishes).
204
+ */
205
+ export function recordSessionCompleted(tokens, cost) {
206
+ completedSessionCount++;
207
+ totalTokensUsed += tokens;
208
+ totalCost += cost;
209
+ }
210
+ /**
211
+ * Record a completed issue (called when an issue transitions to Done).
212
+ */
213
+ export function recordIssueCompleted() {
214
+ completedIssueCount++;
215
+ }
216
+ /**
217
+ * Gather current counters and send a heartbeat.
218
+ */
219
+ async function doHeartbeat() {
220
+ if (!config)
221
+ return;
222
+ const runningAgents = getRunningAgents();
223
+ // Event loop watchdog: measure and check lag
224
+ const eventLoopLagMs = getEventLoopLagMs();
225
+ checkEventLoopLag(eventLoopLagMs);
226
+ // Inactivity detection: warn if no activity for 10+ minutes
227
+ const inactivityMs = Date.now() - lastActivityAt.getTime();
228
+ if (inactivityMs > INACTIVITY_THRESHOLD_MS) {
229
+ console.warn(`[watchdog] Daemon inactive for ${Math.round(inactivityMs / 1000)}s. ` +
230
+ `Running agents: ${runningAgents.size}. ` +
231
+ `Last activity: ${lastActivityAt.toISOString()}`);
232
+ }
233
+ // Build metadata with version observability fields
234
+ const metadata = {};
235
+ if (daemonCommitSha !== 'unknown') {
236
+ metadata.commitSha = daemonCommitSha;
237
+ }
238
+ if (factoryVersion !== 'unknown') {
239
+ metadata.factoryVersion = factoryVersion;
240
+ }
241
+ if (latestAvailableVersion) {
242
+ metadata.latestAvailableVersion = latestAvailableVersion;
243
+ }
244
+ if (latestAvailableFactoryVersion) {
245
+ metadata.latestAvailableFactoryVersion = latestAvailableFactoryVersion;
246
+ }
247
+ try {
248
+ metadata.branchStatus = computeBranchStatus(config);
249
+ }
250
+ catch { /* non-fatal */ }
251
+ if (narrations.size > 0) {
252
+ metadata.narrations = Object.fromEntries(narrations);
253
+ }
254
+ try {
255
+ await sendHeartbeat(process.pid, osHostname(), basename(config.repoPath), daemonVersion, {
256
+ activeSessions: runningAgents.size,
257
+ completedSessions: completedSessionCount,
258
+ plannedIssues: 0, // Could be enriched later by querying ready deliveries
259
+ inProgressIssues: runningAgents.size,
260
+ completedIssues: completedIssueCount,
261
+ totalTokensUsed,
262
+ totalCost,
263
+ daemonStartedAt,
264
+ lastActivityAt: lastActivityAt.toISOString(),
265
+ eventLoopLagMs,
266
+ productId: config.productId,
267
+ productIds: config.products.map(p => p.id),
268
+ }, Object.keys(metadata).length > 0 ? metadata : undefined);
269
+ }
270
+ catch (error) {
271
+ console.error('Heartbeat failed:', error.message);
272
+ }
273
+ }
274
+ /**
275
+ * Start sending periodic heartbeats. Sends one immediately.
276
+ */
277
+ export async function startHeartbeat() {
278
+ if (!config) {
279
+ throw new Error('Heartbeat not initialized. Call initHeartbeat first.');
280
+ }
281
+ // Send initial heartbeat immediately
282
+ await doHeartbeat();
283
+ // Start periodic heartbeats with error boundary
284
+ heartbeatInterval = safeInterval(() => {
285
+ return doHeartbeat();
286
+ }, HEARTBEAT_INTERVAL_MS, 'heartbeat');
287
+ console.log(`Started heartbeat (every ${HEARTBEAT_INTERVAL_MS / 1000}s)`);
288
+ }
289
+ /**
290
+ * Stop heartbeats and send a disconnect signal (best-effort).
291
+ */
292
+ export async function stopHeartbeat() {
293
+ if (heartbeatInterval) {
294
+ clearInterval(heartbeatInterval);
295
+ heartbeatInterval = null;
296
+ }
297
+ // Best-effort disconnect — don't block shutdown
298
+ try {
299
+ await sendDisconnect(process.pid);
300
+ console.log('Sent disconnect signal');
301
+ }
302
+ catch (error) {
303
+ console.error('Failed to send disconnect (non-fatal):', error.message);
304
+ }
305
+ }
306
+ //# sourceMappingURL=heartbeat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Telora Unified Daemon CLI
4
+ *
5
+ * Lifecycle management for the Telora daemon process.
6
+ *
7
+ * Usage:
8
+ * telora-daemon start # Start daemon in background
9
+ * telora-daemon start --foreground # Start daemon in foreground
10
+ * telora-daemon stop # Graceful shutdown
11
+ * telora-daemon restart # Stop + start
12
+ * telora-daemon status # Report health and status
13
+ * telora-daemon logs # Show recent daemon logs
14
+ * telora-daemon logs --follow # Tail daemon log output
15
+ * telora-daemon init # Interactive setup wizard
16
+ * telora-daemon check-update # Check for newer version
17
+ * telora-daemon run # Run in foreground (low-level)
18
+ *
19
+ * Environment Variables:
20
+ * TELORA_URL - Telora API URL
21
+ * TELORA_TRACKER_ID - Tracker ID for authentication (required)
22
+ * TELORA_ORGANIZATION_ID - Organization to watch
23
+ * TELORA_REPO_PATH - Path to git repository (default: cwd)
24
+ * CLAUDE_CODE_PATH - Path to claude executable (default: 'claude')
25
+ * MCP_CONFIG_PATH - Path to MCP config file (optional)
26
+ * TELORA_LOG_DIR - Directory for agent logs
27
+ * MAX_TOTAL_SESSIONS - Max concurrent strategy agents (default: 5)
28
+ * SESSION_TIMEOUT_MS - Session timeout in ms (default: 3600000)
29
+ * TELORA_MAX_GLOBAL_SESSIONS - Global concurrency limit across all engines
30
+ */
31
+ export {};
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG"}