@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,361 @@
1
+ /**
2
+ * Polling-based listener for strategy assignments.
3
+ *
4
+ * Since we're using HTTP API instead of direct Supabase access,
5
+ * we poll for ready strategies instead of using Realtime subscriptions.
6
+ * Agent assignment is at the strategy level — the daemon spawns a
7
+ * single Agent Team per strategy that manages all deliveries.
8
+ */
9
+ import { getAgentRoles, getReadyStrategies } from './supabase.js';
10
+ import { checkDeliveryAutoAdvance, checkVerifyDeliveriesForOpenIssues } from './listener-auto-advance.js';
11
+ import { checkAutoReview, checkReviewRequests } from './listener-review.js';
12
+ import { spawnStrategyTeam, hasActiveTeam, getActiveTeamCount, getActiveTeams, checkAndMergeCompletedDeliveries } from './strategy-executor.js';
13
+ import { checkResolvedMergeConflicts } from './strategy-merge.js';
14
+ import { recordActivity } from './heartbeat.js';
15
+ import { safeInterval, withRetry } from '@telora/daemon-core';
16
+ import { checkQaRequests, checkProductQaRequests } from './qa-orchestrator.js';
17
+ import { getActiveSessions, updateSession } from './queries/sessions.js';
18
+ import { getRunningAgents } from './spawner.js';
19
+ import { ensureStrategyWorktrees, checkForDeactivatedStrategies } from './strategy-lifecycle.js';
20
+ import { detectGitStates } from './git-state-detector.js';
21
+ import { checkControlStateChanges } from './control-state.js';
22
+ import { isDaemonShuttingDown } from './shutdown-state.js';
23
+ import { configForProduct, findProduct } from './config.js';
24
+ // Track strategies that have been logged as idle (no actionable deliveries).
25
+ // Only log on state change: first skip after an active session or after startup.
26
+ const idleLoggedStrategies = new Set();
27
+ let config = null;
28
+ const roles = new Map();
29
+ let pollInterval = null;
30
+ let isProcessing = false;
31
+ // Polling interval in milliseconds (default: 30 seconds)
32
+ const POLL_INTERVAL_MS = 30000;
33
+ // Health check backoff: track consecutive failures to avoid hammering a broken API
34
+ let healthCheckConsecutiveFailures = 0;
35
+ const HEALTH_CHECK_MAX_SKIP_CYCLES = 10; // max backoff = 10 * 30s = 5 minutes
36
+ // Spawn cooldown imported from dedicated module (avoids circular deps)
37
+ import { isInSpawnCooldown } from './spawn-cooldown.js';
38
+ /**
39
+ * Initialize the listener with configuration.
40
+ */
41
+ export async function initListener(daemonConfig) {
42
+ config = daemonConfig;
43
+ // Load all roles
44
+ try {
45
+ const roleList = await getAgentRoles(config.organizationId);
46
+ roles.clear();
47
+ for (const role of roleList) {
48
+ roles.set(role.id, role);
49
+ }
50
+ console.log(`Loaded ${roles.size} agent roles`);
51
+ }
52
+ catch (error) {
53
+ const msg = error.message ?? '';
54
+ if (msg.includes('API response validation failed for agent_role_list')) {
55
+ throw new Error('Agent role schema mismatch -- your Telora backend edge functions need to be redeployed. '
56
+ + 'The daemon expects full role details (organizationId, description, allowedFilePatterns, '
57
+ + 'allowedTools, systemPromptTemplate, color, icon) but the backend returned partial data. '
58
+ + 'Redeploy your Supabase edge functions and restart the daemon.');
59
+ }
60
+ throw error;
61
+ }
62
+ }
63
+ /**
64
+ * Start polling for ready strategies.
65
+ */
66
+ export function startDeliveryListener() {
67
+ if (!config) {
68
+ throw new Error('Listener not initialized. Call initListener first.');
69
+ }
70
+ // Initial check
71
+ processReadyStrategies();
72
+ // Start polling with error boundary — check for work and main advancement
73
+ // Per-product functions are called with product-scoped configs so that
74
+ // config.productId and config.repoPath resolve to the correct product.
75
+ pollInterval = safeInterval(async () => {
76
+ for (const product of config.products) {
77
+ const pc = configForProduct(config, product);
78
+ await ensureStrategyWorktrees(pc, roles);
79
+ await checkForDeactivatedStrategies(pc);
80
+ await checkControlStateChanges(pc);
81
+ await checkDeliveryAutoAdvance(pc);
82
+ }
83
+ await processReadyStrategies();
84
+ await checkAndMergeCompletedDeliveries(config);
85
+ await checkResolvedMergeConflicts(config);
86
+ await checkReviewRequests(config, roles);
87
+ await checkAutoReview(config, roles);
88
+ await checkVerifyDeliveriesForOpenIssues(config);
89
+ await detectGitStates(config);
90
+ await checkQaRequests(config);
91
+ await checkProductQaRequests(config);
92
+ await checkSessionHealth();
93
+ }, POLL_INTERVAL_MS, 'strategy-poll');
94
+ console.log(`Started strategy polling (every ${POLL_INTERVAL_MS / 1000}s)`);
95
+ }
96
+ /**
97
+ * Start session listener (no-op for polling mode).
98
+ * Kept for API compatibility with the original implementation.
99
+ */
100
+ export function startSessionListener() {
101
+ if (!config) {
102
+ throw new Error('Listener not initialized. Call initListener first.');
103
+ }
104
+ // In polling mode, session changes are handled by checking ready strategies
105
+ console.log('Session monitoring via polling (included in strategy polling)');
106
+ }
107
+ /**
108
+ * Process any strategies ready for agent work.
109
+ *
110
+ * For each ready strategy without an active team, spawns a single
111
+ * Agent Team that manages all deliveries within that strategy.
112
+ * Also detects strategies that have been deactivated and shuts down
113
+ * their teams.
114
+ */
115
+ export async function processReadyStrategies() {
116
+ if (!config)
117
+ return;
118
+ // Prevent concurrent processing
119
+ if (isProcessing) {
120
+ return;
121
+ }
122
+ isProcessing = true;
123
+ try {
124
+ // Record activity: proves the poll ran even if no work was found
125
+ recordActivity();
126
+ // Snapshot active teams before processing (for idle detection)
127
+ const previouslyActiveIds = new Set(getActiveTeams().keys());
128
+ // Deactivation detection is now handled by checkForDeactivatedStrategies()
129
+ // in the poll loop (called before processReadyStrategies).
130
+ // Get ready strategies across all configured products
131
+ const readyStrategies = [];
132
+ for (const product of config.products) {
133
+ try {
134
+ const strategies = await getReadyStrategies(config.organizationId, product.id);
135
+ readyStrategies.push(...strategies);
136
+ }
137
+ catch (err) {
138
+ console.warn(`[listener] Failed to fetch ready strategies for product ${product.id}: ${err.message}`);
139
+ }
140
+ }
141
+ // Track which strategies are ready this cycle (for idle logging)
142
+ const readyStrategyIds = new Set(readyStrategies.map(s => s.strategy_id));
143
+ // Idle queue logging: detect strategies that were previously active
144
+ // but now have no ready deliveries. Only log on state change.
145
+ for (const strategyId of previouslyActiveIds) {
146
+ if (!readyStrategyIds.has(strategyId) && !hasActiveTeam(strategyId) && !idleLoggedStrategies.has(strategyId)) {
147
+ const nextPollSec = POLL_INTERVAL_MS / 1000;
148
+ console.log(`[listener] Strategy queue idle: "${strategyId}" -- no actionable deliveries, next poll in ${nextPollSec}s`);
149
+ idleLoggedStrategies.add(strategyId);
150
+ }
151
+ }
152
+ if (readyStrategies.length === 0) {
153
+ return;
154
+ }
155
+ const productLabel = config.products.length > 1
156
+ ? ` across ${config.products.length} product(s)`
157
+ : '';
158
+ console.log(`Found ${readyStrategies.length} ready strategies${productLabel}`);
159
+ for (const strategy of readyStrategies) {
160
+ const role = roles.get(strategy.assigned_agent_role_id);
161
+ if (!role) {
162
+ console.error(`Unknown agent role: ${strategy.assigned_agent_role_id}`);
163
+ continue;
164
+ }
165
+ // Check if we already have an active team for this strategy
166
+ if (hasActiveTeam(strategy.strategy_id)) {
167
+ // Strategy is active -- clear idle state so we re-log if it goes idle again
168
+ idleLoggedStrategies.delete(strategy.strategy_id);
169
+ continue;
170
+ }
171
+ // Check spawn cooldown: skip strategies that were recently torn down
172
+ if (isInSpawnCooldown(strategy.strategy_id)) {
173
+ continue;
174
+ }
175
+ // Check total capacity
176
+ if (getActiveTeamCount() >= config.maxTotalSessions) {
177
+ console.log(`Total session limit reached, stopping`);
178
+ break;
179
+ }
180
+ // Clear idle state before spawn attempt -- if spawn succeeds,
181
+ // the strategy is active. If it skips (no actionable deliveries),
182
+ // spawnStrategyTeam logs the skip and we mark it idle here.
183
+ const wasIdle = idleLoggedStrategies.has(strategy.strategy_id);
184
+ idleLoggedStrategies.delete(strategy.strategy_id);
185
+ // Use product-scoped config so the team uses the correct repoPath
186
+ const productEntry = strategy.product_id ? findProduct(config, strategy.product_id) : undefined;
187
+ const spawnConfig = productEntry ? configForProduct(config, productEntry) : config;
188
+ // Spawn a strategy team (one team per strategy)
189
+ await spawnStrategyTeam({ config: spawnConfig, strategyId: strategy.strategy_id, strategyName: strategy.strategy_name, role, pipelineConfig: strategy.pipeline_config, readOnly: strategy.read_only, lastClaudeSessionId: strategy.last_claude_session_id });
190
+ // If the spawn was skipped (no active team after spawn), mark as idle
191
+ if (!hasActiveTeam(strategy.strategy_id) && !wasIdle) {
192
+ const nextPollSec = POLL_INTERVAL_MS / 1000;
193
+ console.log(`[listener] Strategy queue idle: "${strategy.strategy_name}" -- no actionable deliveries after pre-spawn check, next poll in ${nextPollSec}s`);
194
+ idleLoggedStrategies.add(strategy.strategy_id);
195
+ }
196
+ }
197
+ }
198
+ catch (error) {
199
+ console.error('Error processing ready strategies:', error);
200
+ }
201
+ finally {
202
+ isProcessing = false;
203
+ }
204
+ }
205
+ /**
206
+ * Check that every session recorded as 'starting' or 'running' in the DB
207
+ * has a corresponding active team in memory.
208
+ *
209
+ * If a session has been in a live status for more than 2 minutes but no
210
+ * active team claims it (e.g. the process was OOM-killed or the close
211
+ * handler failed to update the DB), the session is marked as 'failed' so
212
+ * subsequent poll cycles can respawn the strategy.
213
+ */
214
+ export async function checkSessionHealth() {
215
+ const GRACE_PERIOD_MS = 2 * 60 * 1000; // 2 minutes
216
+ // Backoff: skip this cycle if we've had consecutive failures.
217
+ // After N failures, skip N poll cycles before retrying (capped at max).
218
+ if (healthCheckConsecutiveFailures > 0) {
219
+ // Use the failure count as the number of cycles to skip
220
+ const skipCycles = Math.min(healthCheckConsecutiveFailures, HEALTH_CHECK_MAX_SKIP_CYCLES);
221
+ healthCheckConsecutiveFailures++;
222
+ if (healthCheckConsecutiveFailures % skipCycles !== 0) {
223
+ return; // skip this cycle
224
+ }
225
+ console.log(`[health] Retrying after ${healthCheckConsecutiveFailures} consecutive failures (backoff: every ${skipCycles} cycles)`);
226
+ }
227
+ // Aggregate active sessions across all configured products
228
+ const activeSessions = [];
229
+ try {
230
+ for (const product of (config?.products ?? [])) {
231
+ const sessions = await getActiveSessions(product.id);
232
+ activeSessions.push(...sessions);
233
+ }
234
+ // Reset backoff on success
235
+ if (healthCheckConsecutiveFailures > 0) {
236
+ console.log(`[health] Session health check recovered after ${healthCheckConsecutiveFailures} failures`);
237
+ healthCheckConsecutiveFailures = 0;
238
+ }
239
+ }
240
+ catch (err) {
241
+ healthCheckConsecutiveFailures++;
242
+ console.warn(`[health] Failed to fetch active sessions (failure #${healthCheckConsecutiveFailures}): ${err.message}`);
243
+ return;
244
+ }
245
+ if (activeSessions.length === 0) {
246
+ return;
247
+ }
248
+ console.log(`[health] Checking ${activeSessions.length} active session(s) for orphaned processes`);
249
+ // Build a set of all leadSessionIds currently tracked in memory
250
+ const activeTeams = getActiveTeams();
251
+ const trackedSessionIds = new Set();
252
+ for (const team of activeTeams.values()) {
253
+ if (team.leadSessionId) {
254
+ trackedSessionIds.add(team.leadSessionId);
255
+ }
256
+ }
257
+ const now = Date.now();
258
+ const staleSessionIds = [];
259
+ for (const session of activeSessions) {
260
+ // Skip if this session is tracked by an active in-memory team
261
+ if (trackedSessionIds.has(session.id)) {
262
+ continue;
263
+ }
264
+ // Apply grace period: ignore sessions that started very recently
265
+ // (in case the team is still being set up and hasn't registered yet)
266
+ const startedAt = session.started_at ?? session.queued_at;
267
+ if (!startedAt) {
268
+ // Cannot determine session age — skip conservatively
269
+ continue;
270
+ }
271
+ const sessionAgeMs = now - new Date(startedAt).getTime();
272
+ if (sessionAgeMs < GRACE_PERIOD_MS) {
273
+ continue;
274
+ }
275
+ // PID liveness check: if the session's process is still alive,
276
+ // skip orphan detection. This prevents false positives when the
277
+ // in-memory tracking is stale but the process is genuinely running.
278
+ //
279
+ // Note: full re-registration into activeTeams is not attempted here because
280
+ // StrategyTeamState requires stdin handles, execution config, pipeline config,
281
+ // and other fields that cannot be reconstructed from a DB session row alone.
282
+ // The process will continue running; the next daemon restart will recover state.
283
+ const pid = session.pid;
284
+ if (pid != null) {
285
+ try {
286
+ process.kill(pid, 0); // signal 0 = test if process exists
287
+ const runningAgents = getRunningAgents();
288
+ const inRunningAgents = runningAgents.has(session.id);
289
+ console.warn(`[health] Session ${session.id} not tracked in-memory but PID ${pid} is alive — skipping orphan detection` +
290
+ ` (strategy=${session.strategy_id ?? 'none'}, inRunningAgents=${inRunningAgents})`);
291
+ continue;
292
+ }
293
+ catch {
294
+ // process.kill throws if PID does not exist — proceed to mark as orphaned
295
+ }
296
+ }
297
+ staleSessionIds.push(session.id);
298
+ console.warn(`[health] Orphaned session detected: ${session.id} ` +
299
+ `(status=${session.status}, age=${Math.round(sessionAgeMs / 1000)}s, ` +
300
+ `strategy=${session.strategy_id ?? 'none'}, delivery=${session.delivery_id ?? 'none'})`);
301
+ }
302
+ if (staleSessionIds.length === 0) {
303
+ return;
304
+ }
305
+ console.log(`[health] Marking ${staleSessionIds.length} orphaned session(s) as failed`);
306
+ const updateResults = await Promise.allSettled(staleSessionIds.map(sessionId => withRetry(() => updateSession(sessionId, {
307
+ status: 'failed',
308
+ exit_reason: 'Session health check: no active team found for running session',
309
+ ended_at: new Date().toISOString(),
310
+ }), { maxAttempts: 3, baseDelayMs: 1000, label: 'health-check-session-update' })));
311
+ for (let i = 0; i < updateResults.length; i++) {
312
+ const result = updateResults[i];
313
+ if (result.status === 'rejected') {
314
+ console.error(`[health] Failed to mark session ${staleSessionIds[i]} as failed: ${result.reason.message}`);
315
+ }
316
+ else {
317
+ console.log(`[health] Marked session ${staleSessionIds[i]} as failed`);
318
+ }
319
+ }
320
+ }
321
+ /**
322
+ * Stop all listeners.
323
+ */
324
+ export async function stopListeners() {
325
+ if (pollInterval) {
326
+ clearInterval(pollInterval);
327
+ pollInterval = null;
328
+ }
329
+ console.log('Stopped polling');
330
+ }
331
+ /**
332
+ * Refresh roles from API.
333
+ */
334
+ export async function refreshRoles() {
335
+ if (!config)
336
+ return;
337
+ const roleList = await getAgentRoles(config.organizationId);
338
+ roles.clear();
339
+ for (const role of roleList) {
340
+ roles.set(role.id, role);
341
+ }
342
+ console.log(`Refreshed ${roles.size} agent roles`);
343
+ }
344
+ /**
345
+ * Trigger an immediate check for ready strategies.
346
+ * Useful after a session completes to auto-advance to next delivery.
347
+ * No-ops during daemon shutdown to prevent spawn attempts after the
348
+ * resource governor has been shut down.
349
+ */
350
+ export function triggerCheck() {
351
+ if (isDaemonShuttingDown())
352
+ return;
353
+ processReadyStrategies();
354
+ }
355
+ // Note: Detection of completed guard agents and re-evaluation of paused deliveries
356
+ // is handled by the Human Routing UI. When a human makes a routing decision,
357
+ // the UI updates the transition_blocks.decision_path and sets the delivery back to 'queued',
358
+ // which the normal poll loop picks up. For spawn_agent triggers, the spawned agent's
359
+ // completion triggers a re-poll via triggerCheck(), and the delivery will be re-evaluated
360
+ // on the next spawn cycle since it remains in 'paused' status until the human routes it.
361
+ //# sourceMappingURL=listener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listener.js","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Daemon-specific log manager -- thin wrapper around @telora/daemon-core.
3
+ *
4
+ * Re-exports the shared types and provides a daemon-specific pruneOldLogs
5
+ * overload that accepts DaemonConfig (which satisfies LogRetentionConfig).
6
+ */
7
+ import { type LogManagerDeps, type PruneResult } from '@telora/daemon-core';
8
+ import type { DaemonConfig } from './types.js';
9
+ export type { LogFileInfo, LogManagerDeps, LogRetentionConfig, PruneResult } from '@telora/daemon-core';
10
+ export { extractSessionKey, scanLogDirectory } from '@telora/daemon-core';
11
+ /**
12
+ * Prune old log files using daemon configuration.
13
+ *
14
+ * DaemonConfig has logDir, logMaxAgeDays, logMaxTotalBytes, logMaxFiles
15
+ * which satisfies LogRetentionConfig from daemon-core.
16
+ */
17
+ export declare function pruneOldLogs(config: DaemonConfig, deps?: LogManagerDeps): Promise<PruneResult>;
18
+ //# sourceMappingURL=log-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-manager.d.ts","sourceRoot":"","sources":["../src/log-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACxG,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE1E;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,WAAW,CAAC,CAEtB"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Daemon-specific log manager -- thin wrapper around @telora/daemon-core.
3
+ *
4
+ * Re-exports the shared types and provides a daemon-specific pruneOldLogs
5
+ * overload that accepts DaemonConfig (which satisfies LogRetentionConfig).
6
+ */
7
+ import { pruneOldLogs as corePruneOldLogs, } from '@telora/daemon-core';
8
+ export { extractSessionKey, scanLogDirectory } from '@telora/daemon-core';
9
+ /**
10
+ * Prune old log files using daemon configuration.
11
+ *
12
+ * DaemonConfig has logDir, logMaxAgeDays, logMaxTotalBytes, logMaxFiles
13
+ * which satisfies LogRetentionConfig from daemon-core.
14
+ */
15
+ export async function pruneOldLogs(config, deps) {
16
+ return corePruneOldLogs(config, deps);
17
+ }
18
+ //# sourceMappingURL=log-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-manager.js","sourceRoot":"","sources":["../src/log-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,YAAY,IAAI,gBAAgB,GAGjC,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAoB,EACpB,IAAqB;IAErB,OAAO,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * OTLP logs payload parser.
3
+ *
4
+ * Parses OpenTelemetry logs JSON payloads from Claude Code and
5
+ * buffers event rows for batched Postgres inserts.
6
+ */
7
+ import type { OtlpLogsPayload } from './otlp-types.js';
8
+ /**
9
+ * Parse OTLP logs payload and buffer event rows.
10
+ *
11
+ * Claude Code emits events via the OTLP logs protocol with an `event.name`
12
+ * attribute identifying the event type. Names may be prefixed with `claude_code.`
13
+ * or bare -- we normalize to bare names before matching:
14
+ * - tool_result: tool_name, success, duration_ms, error
15
+ * - api_request: model, cost_usd, duration_ms, token counts
16
+ * - api_error: model, error, status_code, duration_ms
17
+ * - user_prompt: prompt_length
18
+ * - tool_decision: tool_name, decision, source
19
+ */
20
+ export declare function processLogs(payload: OtlpLogsPayload, fallbackOrgId: string): void;
21
+ //# sourceMappingURL=otlp-log-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otlp-log-parser.d.ts","sourceRoot":"","sources":["../src/otlp-log-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAgBvD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAkIjF"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * OTLP logs payload parser.
3
+ *
4
+ * Parses OpenTelemetry logs JSON payloads from Claude Code and
5
+ * buffers event rows for batched Postgres inserts.
6
+ */
7
+ import { extractResourceAttributes, buildFactoryMetadata, getLogAttribute, getLogAttributeBool, getLogAttributeInt, getLogAttributeDouble, nanoToIso, } from './otlp-types.js';
8
+ import { bufferMetric, bufferEvent, } from './telemetry-writer.js';
9
+ /**
10
+ * Parse OTLP logs payload and buffer event rows.
11
+ *
12
+ * Claude Code emits events via the OTLP logs protocol with an `event.name`
13
+ * attribute identifying the event type. Names may be prefixed with `claude_code.`
14
+ * or bare -- we normalize to bare names before matching:
15
+ * - tool_result: tool_name, success, duration_ms, error
16
+ * - api_request: model, cost_usd, duration_ms, token counts
17
+ * - api_error: model, error, status_code, duration_ms
18
+ * - user_prompt: prompt_length
19
+ * - tool_decision: tool_name, decision, source
20
+ */
21
+ export function processLogs(payload, fallbackOrgId) {
22
+ if (!payload.resourceLogs)
23
+ return;
24
+ for (const rl of payload.resourceLogs) {
25
+ const attrs = extractResourceAttributes(rl.resource);
26
+ const orgId = attrs.orgId ?? fallbackOrgId;
27
+ const factoryMeta = buildFactoryMetadata(attrs);
28
+ // Track tool call/error counts per resource for metric aggregation
29
+ let toolCallCount = 0;
30
+ let toolErrorCount = 0;
31
+ let earliestNano;
32
+ let latestNano;
33
+ for (const sl of rl.scopeLogs ?? []) {
34
+ for (const lr of sl.logRecords ?? []) {
35
+ // Claude Code uses `event.name` attribute for event identification.
36
+ // Fall back to body.stringValue (some OTel exporters put event name there).
37
+ const rawEventName = getLogAttribute(lr.attributes, 'event.name')
38
+ ?? lr.body?.stringValue
39
+ ?? lr.severityText
40
+ ?? 'unknown';
41
+ // Normalize: strip `claude_code.` prefix if present so the switch
42
+ // matches regardless of whether Claude Code emits prefixed or bare names.
43
+ const eventName = rawEventName.startsWith('claude_code.')
44
+ ? rawEventName.slice('claude_code.'.length)
45
+ : rawEventName;
46
+ // Track time range across all events
47
+ if (lr.timeUnixNano) {
48
+ if (!earliestNano || lr.timeUnixNano < earliestNano)
49
+ earliestNano = lr.timeUnixNano;
50
+ if (!latestNano || lr.timeUnixNano > latestNano)
51
+ latestNano = lr.timeUnixNano;
52
+ }
53
+ const row = {
54
+ organization_id: orgId,
55
+ strategy_id: attrs.strategyId,
56
+ delivery_id: attrs.deliveryId,
57
+ session_id: attrs.sessionId,
58
+ event_type: eventName,
59
+ tool_name: null,
60
+ success: null,
61
+ duration_ms: null,
62
+ error_message: null,
63
+ metadata: factoryMeta ? { ...factoryMeta } : null,
64
+ event_timestamp: nanoToIso(lr.timeUnixNano),
65
+ };
66
+ // Extract event-specific fields based on normalized event name
67
+ switch (eventName) {
68
+ case 'tool_result': {
69
+ row.tool_name = getLogAttribute(lr.attributes, 'tool_name');
70
+ row.success = getLogAttributeBool(lr.attributes, 'success');
71
+ row.duration_ms = getLogAttributeInt(lr.attributes, 'duration_ms');
72
+ row.error_message = getLogAttribute(lr.attributes, 'error');
73
+ // Aggregate tool counts for metric row
74
+ toolCallCount++;
75
+ if (row.success === false)
76
+ toolErrorCount++;
77
+ break;
78
+ }
79
+ case 'api_request':
80
+ row.duration_ms = getLogAttributeInt(lr.attributes, 'duration_ms');
81
+ row.metadata = {
82
+ ...row.metadata,
83
+ model: getLogAttribute(lr.attributes, 'model'),
84
+ cost_usd: getLogAttributeDouble(lr.attributes, 'cost_usd'),
85
+ input_tokens: getLogAttributeInt(lr.attributes, 'input_tokens'),
86
+ output_tokens: getLogAttributeInt(lr.attributes, 'output_tokens'),
87
+ cache_read_tokens: getLogAttributeInt(lr.attributes, 'cache_read_tokens'),
88
+ cache_creation_tokens: getLogAttributeInt(lr.attributes, 'cache_creation_tokens'),
89
+ };
90
+ break;
91
+ case 'api_error':
92
+ row.error_message = getLogAttribute(lr.attributes, 'error');
93
+ row.duration_ms = getLogAttributeInt(lr.attributes, 'duration_ms');
94
+ row.metadata = {
95
+ ...row.metadata,
96
+ model: getLogAttribute(lr.attributes, 'model'),
97
+ status_code: getLogAttributeInt(lr.attributes, 'status_code'),
98
+ attempt: getLogAttributeInt(lr.attributes, 'attempt'),
99
+ };
100
+ break;
101
+ case 'user_prompt':
102
+ row.metadata = {
103
+ ...row.metadata,
104
+ prompt_length: getLogAttributeInt(lr.attributes, 'prompt_length'),
105
+ };
106
+ break;
107
+ case 'tool_decision':
108
+ row.tool_name = getLogAttribute(lr.attributes, 'tool_name');
109
+ row.metadata = {
110
+ ...row.metadata,
111
+ decision: getLogAttribute(lr.attributes, 'decision'),
112
+ source: getLogAttribute(lr.attributes, 'source'),
113
+ };
114
+ break;
115
+ }
116
+ bufferEvent(row);
117
+ }
118
+ }
119
+ // Emit a metric row with aggregated tool counts from tool_result events
120
+ if (toolCallCount > 0) {
121
+ const now = new Date().toISOString();
122
+ bufferMetric({
123
+ organization_id: orgId,
124
+ strategy_id: attrs.strategyId,
125
+ delivery_id: attrs.deliveryId,
126
+ session_id: attrs.sessionId,
127
+ input_tokens: 0,
128
+ output_tokens: 0,
129
+ cache_read_tokens: 0,
130
+ cache_creation_tokens: 0,
131
+ cost_usd: 0,
132
+ active_time_ms: 0,
133
+ tool_call_count: toolCallCount,
134
+ tool_error_count: toolErrorCount,
135
+ model: null,
136
+ metadata: factoryMeta,
137
+ period_start: earliestNano ? nanoToIso(earliestNano) : now,
138
+ period_end: latestNano ? nanoToIso(latestNano) : now,
139
+ });
140
+ }
141
+ }
142
+ }
143
+ //# sourceMappingURL=otlp-log-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otlp-log-parser.js","sourceRoot":"","sources":["../src/otlp-log-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * OTLP metrics payload parser.
3
+ *
4
+ * Parses OpenTelemetry metrics JSON payloads from Claude Code and
5
+ * buffers metric rows for batched Postgres inserts.
6
+ */
7
+ import type { OtlpMetricsPayload } from './otlp-types.js';
8
+ /**
9
+ * Parse OTLP metrics payload and buffer metric rows.
10
+ *
11
+ * Claude Code emits these metrics (per official OTel schema):
12
+ * - claude_code.token.usage (Counter, attrs: type=input|output|cacheRead|cacheCreation, model)
13
+ * - claude_code.cost.usage (Counter, attr: model, unit: USD)
14
+ * - claude_code.active_time.total (Counter, unit: seconds)
15
+ * - claude_code.session.count, claude_code.lines_of_code.count, etc.
16
+ *
17
+ * We aggregate per-resource into a single TelemetryMetricRow.
18
+ */
19
+ export declare function processMetrics(payload: OtlpMetricsPayload, fallbackOrgId: string): void;
20
+ //# sourceMappingURL=otlp-metric-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otlp-metric-parser.d.ts","sourceRoot":"","sources":["../src/otlp-metric-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAa1D;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAmGvF"}