@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,337 @@
1
+ /**
2
+ * Dependency resolution for the task DAG.
3
+ *
4
+ * Extracted from task-dag-builder.ts. Contains functions that analyze
5
+ * and resolve task dependencies, including cross-delivery dependencies,
6
+ * CG-level dependencies, and file overlap detection.
7
+ *
8
+ * Pure functions only (no side effects, no API calls).
9
+ *
10
+ * Dependency rules:
11
+ * 1. Delivery ordering: issues in delivery N are blocked by issues in delivery N-1
12
+ * (respects priorityRank ordering)
13
+ * 2. Within a delivery: issues under the same Context Group can run in parallel
14
+ * unless they share relevant files
15
+ * 3. File overlap detection: if two issues from different deliveries share files,
16
+ * the lower-priority delivery's issue is blocked by the higher-priority one
17
+ * 4. Context Groups themselves can run in parallel unless they share relevant files
18
+ */
19
+ // ── File overlap detection ───────────────────────────────────────
20
+ /**
21
+ * Parse relevant files from a newline-delimited string into a set of normalized paths.
22
+ * Supports glob patterns -- for overlap detection, we treat the base path as the key.
23
+ */
24
+ export function parseRelevantFiles(relevantFiles) {
25
+ if (!relevantFiles)
26
+ return new Set();
27
+ const paths = new Set();
28
+ for (const line of relevantFiles.split('\n')) {
29
+ const trimmed = line.trim();
30
+ if (!trimmed)
31
+ continue;
32
+ // Normalize: remove leading ./ and trailing globs for overlap comparison
33
+ const normalized = trimmed
34
+ .replace(/^\.\//, '')
35
+ .replace(/\/\*\*?.*$/, '') // Remove glob suffixes like /** or /*.ts
36
+ .replace(/\*.*$/, ''); // Remove wildcard suffixes
37
+ if (normalized) {
38
+ paths.add(normalized);
39
+ }
40
+ // Also keep the original pattern for more precise matching
41
+ paths.add(trimmed.replace(/^\.\//, ''));
42
+ }
43
+ return paths;
44
+ }
45
+ /**
46
+ * Check if two sets of file paths have any overlap.
47
+ * An overlap means the two issues touch the same files and should not
48
+ * be worked on in parallel.
49
+ */
50
+ export function hasFileOverlap(filesA, filesB) {
51
+ if (filesA.size === 0 || filesB.size === 0)
52
+ return false;
53
+ for (const pathA of filesA) {
54
+ for (const pathB of filesB) {
55
+ // Exact match
56
+ if (pathA === pathB)
57
+ return true;
58
+ // One is a prefix of the other (directory overlap)
59
+ if (pathA.startsWith(pathB + '/') || pathB.startsWith(pathA + '/'))
60
+ return true;
61
+ }
62
+ }
63
+ return false;
64
+ }
65
+ // ── Cross-delivery dependencies ──────────────────────────────────
66
+ /**
67
+ * Add cross-delivery dependencies.
68
+ *
69
+ * For each delivery after the first, its issues are blocked by the
70
+ * issues in the immediately preceding delivery. This ensures deliveries
71
+ * execute in priority order while allowing parallelism within a delivery.
72
+ *
73
+ * We also check for file overlap across non-adjacent deliveries.
74
+ */
75
+ export function addCrossDeliveryDependencies(nodes, sortedDeliveries, issuesByDelivery, _issueDeliveryRank) {
76
+ for (let i = 1; i < sortedDeliveries.length; i++) {
77
+ const currentDelivery = sortedDeliveries[i];
78
+ const prevDelivery = sortedDeliveries[i - 1];
79
+ const currentIssues = issuesByDelivery.get(currentDelivery.id) ?? [];
80
+ const prevIssues = issuesByDelivery.get(prevDelivery.id) ?? [];
81
+ // Get actionable issue IDs from the previous delivery
82
+ const prevActionableIds = prevIssues
83
+ .filter(issue => issue.issueType !== 'Context Group' && issue.status !== 'Done')
84
+ .map(issue => issue.id);
85
+ if (prevActionableIds.length === 0)
86
+ continue;
87
+ // Block all current delivery's issues on all previous delivery's issues
88
+ for (const issue of currentIssues) {
89
+ if (issue.issueType === 'Context Group' || issue.status === 'Done')
90
+ continue;
91
+ const node = nodes.get(issue.id);
92
+ if (!node)
93
+ continue;
94
+ for (const prevId of prevActionableIds) {
95
+ if (nodes.has(prevId)) {
96
+ node.blockedBy.add(prevId);
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+ // ── CG-level dependencies ────────────────────────────────────────
103
+ /**
104
+ * Add CG-level dependency enforcement within each delivery.
105
+ *
106
+ * For each Context Group that has a non-null `dependsOn` array,
107
+ * all child issues (Tasks/Bugs) under this CG are blocked by
108
+ * ALL child issues under each dependency CG. This creates a
109
+ * CG-level DAG: dependent CGs' issues can't start until
110
+ * dependency CGs' issues are all complete.
111
+ */
112
+ export function addCGDependencies(nodes, sortedDeliveries, issuesByDelivery, _contextGroups) {
113
+ for (const delivery of sortedDeliveries) {
114
+ const deliveryIssues = issuesByDelivery.get(delivery.id) ?? [];
115
+ // Build a map: contextGroupId -> actionable child issue IDs (in the DAG)
116
+ const cgChildren = new Map();
117
+ for (const issue of deliveryIssues) {
118
+ if (issue.issueType === 'Context Group')
119
+ continue;
120
+ if (issue.status === 'Done')
121
+ continue;
122
+ if (!issue.parentIssueId)
123
+ continue;
124
+ if (!nodes.has(issue.id))
125
+ continue;
126
+ const existing = cgChildren.get(issue.parentIssueId) ?? [];
127
+ existing.push(issue.id);
128
+ cgChildren.set(issue.parentIssueId, existing);
129
+ }
130
+ // For each CG with dependsOn, block its children on all children of dependency CGs
131
+ for (const issue of deliveryIssues) {
132
+ if (issue.issueType !== 'Context Group')
133
+ continue;
134
+ if (!issue.dependsOn || issue.dependsOn.length === 0)
135
+ continue;
136
+ const myChildren = cgChildren.get(issue.id) ?? [];
137
+ if (myChildren.length === 0)
138
+ continue;
139
+ for (const depCgId of issue.dependsOn) {
140
+ const depChildren = cgChildren.get(depCgId) ?? [];
141
+ for (const childId of myChildren) {
142
+ const childNode = nodes.get(childId);
143
+ if (!childNode)
144
+ continue;
145
+ for (const depChildId of depChildren) {
146
+ if (nodes.has(depChildId)) {
147
+ childNode.blockedBy.add(depChildId);
148
+ }
149
+ }
150
+ }
151
+ }
152
+ }
153
+ }
154
+ }
155
+ /**
156
+ * Compute CG execution waves for a delivery using topological sort.
157
+ * Wave 0 = CGs with no dependencies (parallelizable)
158
+ * Wave N = CGs whose dependencies are all in waves < N
159
+ * Returns Map<cgId, waveNumber>
160
+ *
161
+ * @throws Error if a cycle is detected in the CG dependency graph
162
+ */
163
+ export function getCGExecutionWaves(issues, deliveryId) {
164
+ // Filter to CGs in the given delivery
165
+ const cgs = issues.filter(i => i.issueType === 'Context Group' && i.deliveryId === deliveryId);
166
+ const cgIds = new Set(cgs.map(cg => cg.id));
167
+ const waves = new Map();
168
+ // Build adjacency: cgId -> set of dependency CG IDs (within this delivery)
169
+ const deps = new Map();
170
+ // In-degree count for Kahn's algorithm
171
+ const inDegree = new Map();
172
+ for (const cg of cgs) {
173
+ inDegree.set(cg.id, 0);
174
+ deps.set(cg.id, new Set());
175
+ }
176
+ for (const cg of cgs) {
177
+ if (!cg.dependsOn)
178
+ continue;
179
+ for (const depId of cg.dependsOn) {
180
+ // Only consider dependencies within this delivery's CGs
181
+ if (cgIds.has(depId)) {
182
+ deps.get(cg.id).add(depId);
183
+ inDegree.set(cg.id, (inDegree.get(cg.id) ?? 0) + 1);
184
+ }
185
+ }
186
+ }
187
+ // Kahn's algorithm: process nodes with in-degree 0 in waves
188
+ let currentWave = [];
189
+ for (const [id, degree] of inDegree) {
190
+ if (degree === 0) {
191
+ currentWave.push(id);
192
+ }
193
+ }
194
+ let waveNumber = 0;
195
+ let processed = 0;
196
+ while (currentWave.length > 0) {
197
+ const nextWave = [];
198
+ for (const cgId of currentWave) {
199
+ waves.set(cgId, waveNumber);
200
+ processed++;
201
+ // Reduce in-degree of dependents
202
+ for (const cg of cgs) {
203
+ const cgDeps = deps.get(cg.id);
204
+ if (cgDeps && cgDeps.has(cgId)) {
205
+ const newDegree = (inDegree.get(cg.id) ?? 1) - 1;
206
+ inDegree.set(cg.id, newDegree);
207
+ if (newDegree === 0) {
208
+ nextWave.push(cg.id);
209
+ }
210
+ }
211
+ }
212
+ }
213
+ currentWave = nextWave;
214
+ waveNumber++;
215
+ }
216
+ if (processed !== cgs.length) {
217
+ throw new Error(`Cycle detected in CG dependency graph for delivery ${deliveryId}: ` +
218
+ `processed ${processed} of ${cgs.length} CGs`);
219
+ }
220
+ return waves;
221
+ }
222
+ // ── File overlap dependencies ────────────────────────────────────
223
+ /**
224
+ * Add file overlap dependencies within the same delivery.
225
+ *
226
+ * Within a delivery, issues that share relevant files should run sequentially.
227
+ * Issues under the same context group with no file overlap can run in parallel.
228
+ */
229
+ export function addFileOverlapDependencies(nodes, sortedDeliveries, issuesByDelivery, contextGroups) {
230
+ for (const delivery of sortedDeliveries) {
231
+ const deliveryIssues = issuesByDelivery.get(delivery.id) ?? [];
232
+ const actionableIssues = deliveryIssues.filter(i => i.issueType !== 'Context Group' && i.status !== 'Done');
233
+ // Build file sets for each issue
234
+ const issueFiles = new Map();
235
+ for (const issue of actionableIssues) {
236
+ const parentGroup = issue.parentIssueId ? contextGroups.get(issue.parentIssueId) : null;
237
+ const relevantFiles = parentGroup?.relevantFiles ?? issue.relevantFiles;
238
+ issueFiles.set(issue.id, parseRelevantFiles(relevantFiles));
239
+ }
240
+ // For each pair of issues in the same delivery, check for file overlap
241
+ for (let i = 0; i < actionableIssues.length; i++) {
242
+ for (let j = i + 1; j < actionableIssues.length; j++) {
243
+ const issueA = actionableIssues[i];
244
+ const issueB = actionableIssues[j];
245
+ const filesA = issueFiles.get(issueA.id);
246
+ const filesB = issueFiles.get(issueB.id);
247
+ if (!filesA || !filesB)
248
+ continue;
249
+ if (!hasFileOverlap(filesA, filesB))
250
+ continue;
251
+ // File overlap detected -- add a dependency (lower index goes first)
252
+ const nodeB = nodes.get(issueB.id);
253
+ if (nodeB && nodes.has(issueA.id)) {
254
+ nodeB.blockedBy.add(issueA.id);
255
+ }
256
+ }
257
+ }
258
+ }
259
+ }
260
+ // ── Single-delivery dependency helpers (for dynamic addition) ────
261
+ /**
262
+ * Add CG-level dependency enforcement for a single delivery's issues.
263
+ * Used by addIssuesToDAG for dynamically added deliveries.
264
+ */
265
+ export function addCGDependenciesForDelivery(nodes, delivery, issues, _contextGroups) {
266
+ // Build a map: contextGroupId -> actionable child issue IDs (in the DAG)
267
+ const cgChildren = new Map();
268
+ for (const issue of issues) {
269
+ if (issue.issueType === 'Context Group')
270
+ continue;
271
+ if (issue.status === 'Done')
272
+ continue;
273
+ if (!issue.parentIssueId)
274
+ continue;
275
+ if (!nodes.has(issue.id))
276
+ continue;
277
+ const existing = cgChildren.get(issue.parentIssueId) ?? [];
278
+ existing.push(issue.id);
279
+ cgChildren.set(issue.parentIssueId, existing);
280
+ }
281
+ // For each CG with dependsOn, block its children on all children of dependency CGs
282
+ for (const issue of issues) {
283
+ if (issue.issueType !== 'Context Group')
284
+ continue;
285
+ if (!issue.dependsOn || issue.dependsOn.length === 0)
286
+ continue;
287
+ const myChildren = cgChildren.get(issue.id) ?? [];
288
+ if (myChildren.length === 0)
289
+ continue;
290
+ for (const depCgId of issue.dependsOn) {
291
+ const depChildren = cgChildren.get(depCgId) ?? [];
292
+ for (const childId of myChildren) {
293
+ const childNode = nodes.get(childId);
294
+ if (!childNode)
295
+ continue;
296
+ for (const depChildId of depChildren) {
297
+ if (nodes.has(depChildId)) {
298
+ childNode.blockedBy.add(depChildId);
299
+ }
300
+ }
301
+ }
302
+ }
303
+ }
304
+ }
305
+ /**
306
+ * Add file-overlap dependencies within a single delivery's issues.
307
+ * Used by addIssuesToDAG for dynamically added deliveries.
308
+ */
309
+ export function addFileOverlapForDelivery(nodes, issues, contextGroups) {
310
+ const actionableIssues = issues.filter(i => i.issueType !== 'Context Group' && i.status !== 'Done' && nodes.has(i.id));
311
+ // Build file sets for each issue
312
+ const issueFiles = new Map();
313
+ for (const issue of actionableIssues) {
314
+ const parentGroup = issue.parentIssueId ? contextGroups.get(issue.parentIssueId) : null;
315
+ const relevantFiles = parentGroup?.relevantFiles ?? issue.relevantFiles;
316
+ issueFiles.set(issue.id, parseRelevantFiles(relevantFiles));
317
+ }
318
+ // For each pair of issues, check for file overlap
319
+ for (let i = 0; i < actionableIssues.length; i++) {
320
+ for (let j = i + 1; j < actionableIssues.length; j++) {
321
+ const issueA = actionableIssues[i];
322
+ const issueB = actionableIssues[j];
323
+ const filesA = issueFiles.get(issueA.id);
324
+ const filesB = issueFiles.get(issueB.id);
325
+ if (!filesA || !filesB)
326
+ continue;
327
+ if (!hasFileOverlap(filesA, filesB))
328
+ continue;
329
+ // File overlap detected -- add a dependency (lower index goes first)
330
+ const nodeB = nodes.get(issueB.id);
331
+ if (nodeB && nodes.has(issueA.id)) {
332
+ nodeB.blockedBy.add(issueA.id);
333
+ }
334
+ }
335
+ }
336
+ }
337
+ //# sourceMappingURL=dependency-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../src/dependency-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,oEAAoE;AAEpE;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAA4B;IAC7D,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAErC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,yEAAyE;QACzE,MAAM,UAAU,GAAG,OAAO;aACvB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;aACpB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAE,yCAAyC;aACpE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAO,2BAA2B;QAC1D,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC;QACD,2DAA2D;QAC3D,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAmB,EAAE,MAAmB;IACrE,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEzD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,cAAc;YACd,IAAI,KAAK,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC;YACjC,mDAAmD;YACnD,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QAClF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oEAAoE;AAEpE;;;;;;;;GAQG;AACH,MAAM,UAAU,4BAA4B,CAC1C,KAA4B,EAC5B,gBAAwC,EACxC,gBAAkD,EAClD,kBAAuC;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAE7C,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACrE,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAE/D,sDAAsD;QACtD,MAAM,iBAAiB,GAAG,UAAU;aACjC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,eAAe,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;aAC/E,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAE1B,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAE7C,wEAAwE;QACxE,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;gBAAE,SAAS;YAC7E,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;gBACvC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,oEAAoE;AAEpE;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAA4B,EAC5B,gBAAwC,EACxC,gBAAkD,EAClD,cAA8C;IAE9C,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACxC,MAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAE/D,yEAAyE;QACzE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC/C,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe;gBAAE,SAAS;YAClD,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;gBAAE,SAAS;YACtC,IAAI,CAAC,KAAK,CAAC,aAAa;gBAAE,SAAS;YACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,SAAS;YAEnC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAC3D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxB,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;QAED,mFAAmF;QACnF,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe;gBAAE,SAAS;YAClD,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAE/D,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YAClD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEtC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACtC,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAElD,KAAK,MAAM,OAAO,IAAI,UAAU,EAAE,CAAC;oBACjC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACrC,IAAI,CAAC,SAAS;wBAAE,SAAS;oBAEzB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;wBACrC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;4BAC1B,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;wBACtC,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAA2B,EAC3B,UAAkB;IAElB,sCAAsC;IACtC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CACvB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,eAAe,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,CACpE,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAExC,2EAA2E;IAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC5C,uCAAuC;IACvC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE3C,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,EAAE,CAAC,SAAS;YAAE,SAAS;QAC5B,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;YACjC,wDAAwD;YACxD,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,IAAI,WAAW,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACpC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC5B,SAAS,EAAE,CAAC;YAEZ,iCAAiC;YACjC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC/B,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/B,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBACjD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;oBAC/B,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;wBACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,WAAW,GAAG,QAAQ,CAAC;QACvB,UAAU,EAAE,CAAC;IACf,CAAC;IAED,IAAI,SAAS,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,sDAAsD,UAAU,IAAI;YACpE,aAAa,SAAS,OAAO,GAAG,CAAC,MAAM,MAAM,CAC9C,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oEAAoE;AAEpE;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAA4B,EAC5B,gBAAwC,EACxC,gBAAkD,EAClD,aAA6C;IAE7C,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACxC,MAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC/D,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAC5C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,eAAe,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAC5D,CAAC;QAEF,iCAAiC;QACjC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACxF,MAAM,aAAa,GAAG,WAAW,EAAE,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC;YACxE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,uEAAuE;QACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrD,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBAEnC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAEzC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;oBAAE,SAAS;gBACjC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;oBAAE,SAAS;gBAE9C,qEAAqE;gBACrE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnC,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;oBAClC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,oEAAoE;AAEpE;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,KAA4B,EAC5B,QAA8B,EAC9B,MAA2B,EAC3B,cAA8C;IAE9C,yEAAyE;IACzE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe;YAAE,SAAS;QAClD,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;YAAE,SAAS;QACtC,IAAI,CAAC,KAAK,CAAC,aAAa;YAAE,SAAS;QACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,SAAS;QAEnC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC3D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxB,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,mFAAmF;IACnF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe;YAAE,SAAS;QAClD,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAE/D,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEtC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAElD,KAAK,MAAM,OAAO,IAAI,UAAU,EAAE,CAAC;gBACjC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,CAAC,SAAS;oBAAE,SAAS;gBAEzB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;oBACrC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC1B,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBACtC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAA4B,EAC5B,MAA2B,EAC3B,aAA6C;IAE7C,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,eAAe,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAC/E,CAAC;IAEF,iCAAiC;IACjC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxF,MAAM,aAAa,GAAG,WAAW,EAAE,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC;QACxE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,kDAAkD;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAEnC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAEzC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;gBAAE,SAAS;YACjC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;gBAAE,SAAS;YAE9C,qEAAqE;YACrE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAClC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Context building for guard evaluation.
3
+ *
4
+ * Gathers the evaluation context (delivery state, issue counts, session data,
5
+ * factory instance state, etc.) needed by condition evaluators.
6
+ *
7
+ * The EvaluationContext interface is canonically defined in @telora/daemon-core
8
+ * and re-exported here for backward compatibility.
9
+ *
10
+ * Extracted from guard-engine.ts to improve maintainability.
11
+ */
12
+ import type { EvaluationContext } from '@telora/daemon-core';
13
+ export type { EvaluationContext } from '@telora/daemon-core';
14
+ /**
15
+ * Build factory evaluation context from in-memory instance state.
16
+ *
17
+ * This is a pure function that builds from already-available data,
18
+ * avoiding the cross-package DB query problem. The factory engine
19
+ * calls this with data it already has (instance state, work units,
20
+ * gate results from its own queries).
21
+ */
22
+ export declare function buildFactoryEvaluationContext(params: {
23
+ instanceId: string;
24
+ instanceState: {
25
+ tokensUsed: number;
26
+ completionGateIterations: number;
27
+ wallClockStartedAt: string | null;
28
+ };
29
+ blueprint: {
30
+ maxTokenBudget: number | null;
31
+ maxWallClockHours: number | null;
32
+ maxInstanceIterations: number | null;
33
+ };
34
+ workUnits: Array<{
35
+ status: string;
36
+ }>;
37
+ gateResults: Array<{
38
+ strategyId: string;
39
+ gateType: string;
40
+ iteration: number;
41
+ passed: boolean;
42
+ }>;
43
+ strategyId?: string;
44
+ }): EvaluationContext;
45
+ /**
46
+ * Build evaluation context by querying current delivery state.
47
+ */
48
+ export declare function buildEvaluationContext(deliveryId: string, lastExitCode: number): Promise<EvaluationContext>;
49
+ //# sourceMappingURL=evaluation-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluation-context.d.ts","sourceRoot":"","sources":["../src/evaluation-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAM7D;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,wBAAwB,EAAE,MAAM,CAAC;QACjC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;KACnC,CAAC;IACF,SAAS,EAAE;QACT,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,WAAW,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACjG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,iBAAiB,CAqDpB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,iBAAiB,CAAC,CA4B5B"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Context building for guard evaluation.
3
+ *
4
+ * Gathers the evaluation context (delivery state, issue counts, session data,
5
+ * factory instance state, etc.) needed by condition evaluators.
6
+ *
7
+ * The EvaluationContext interface is canonically defined in @telora/daemon-core
8
+ * and re-exported here for backward compatibility.
9
+ *
10
+ * Extracted from guard-engine.ts to improve maintainability.
11
+ */
12
+ import { getDeliveryIssues, getDeliverySessionCount, } from './supabase.js';
13
+ // ============================================
14
+ // Context Builders
15
+ // ============================================
16
+ /**
17
+ * Build factory evaluation context from in-memory instance state.
18
+ *
19
+ * This is a pure function that builds from already-available data,
20
+ * avoiding the cross-package DB query problem. The factory engine
21
+ * calls this with data it already has (instance state, work units,
22
+ * gate results from its own queries).
23
+ */
24
+ export function buildFactoryEvaluationContext(params) {
25
+ const { instanceState, blueprint, workUnits, gateResults, strategyId } = params;
26
+ // Count work units by status
27
+ const workUnitsByStatus = {};
28
+ for (const wu of workUnits) {
29
+ workUnitsByStatus[wu.status] = (workUnitsByStatus[wu.status] ?? 0) + 1;
30
+ }
31
+ // Calculate wall clock seconds
32
+ let wallClockSeconds = 0;
33
+ if (instanceState.wallClockStartedAt) {
34
+ wallClockSeconds = Math.floor((Date.now() - new Date(instanceState.wallClockStartedAt).getTime()) / 1000);
35
+ }
36
+ // Convert wall clock limit from hours to seconds
37
+ const wallClockLimitSeconds = blueprint.maxWallClockHours != null
38
+ ? blueprint.maxWallClockHours * 3600
39
+ : null;
40
+ // Filter gate results by strategy if scoped
41
+ const scopedGateResults = strategyId
42
+ ? gateResults.filter(r => r.strategyId === strategyId)
43
+ : gateResults;
44
+ // Build configValues for dynamic guard thresholds
45
+ const configValues = {};
46
+ if (blueprint.maxInstanceIterations != null) {
47
+ configValues.max_instance_iterations = blueprint.maxInstanceIterations;
48
+ }
49
+ return {
50
+ // Delivery fields (defaults for factory context)
51
+ deliveryId: '',
52
+ openIssueCount: 0,
53
+ totalIssueCount: 0,
54
+ issuesByStatus: {},
55
+ issuesByPriority: {},
56
+ lastExitCode: 0,
57
+ sessionCount: 0,
58
+ // Factory fields
59
+ gateResults: scopedGateResults,
60
+ tokensUsed: instanceState.tokensUsed,
61
+ tokenBudget: blueprint.maxTokenBudget,
62
+ workUnitsByStatus,
63
+ totalWorkUnitCount: workUnits.length,
64
+ cycleCount: instanceState.completionGateIterations,
65
+ wallClockSeconds,
66
+ wallClockLimitSeconds,
67
+ configValues,
68
+ };
69
+ }
70
+ /**
71
+ * Build evaluation context by querying current delivery state.
72
+ */
73
+ export async function buildEvaluationContext(deliveryId, lastExitCode) {
74
+ const [issues, sessionCount] = await Promise.all([
75
+ getDeliveryIssues(deliveryId),
76
+ getDeliverySessionCount(deliveryId),
77
+ ]);
78
+ const issuesByStatus = {};
79
+ const issuesByPriority = {};
80
+ for (const issue of issues) {
81
+ issuesByStatus[issue.status] = (issuesByStatus[issue.status] ?? 0) + 1;
82
+ if (issue.issueType !== 'Context Group') {
83
+ const priority = 'unknown';
84
+ issuesByPriority[priority] = (issuesByPriority[priority] ?? 0) + 1;
85
+ }
86
+ }
87
+ const openIssueCount = issues.filter(i => i.status !== 'Done').length;
88
+ return {
89
+ deliveryId,
90
+ openIssueCount,
91
+ totalIssueCount: issues.length,
92
+ issuesByStatus,
93
+ issuesByPriority,
94
+ lastExitCode,
95
+ sessionCount,
96
+ };
97
+ }
98
+ //# sourceMappingURL=evaluation-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluation-context.js","sourceRoot":"","sources":["../src/evaluation-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Git activity scanner -- parses git log output and buckets commits by hour.
3
+ *
4
+ * Used by the dashboard to render git activity charts for agent sessions.
5
+ */
6
+ export interface GitActivityBucket {
7
+ /** ISO 8601 timestamp, floored to the hour boundary. */
8
+ intervalStart: string;
9
+ linesAdded: number;
10
+ linesRemoved: number;
11
+ commitCount: number;
12
+ }
13
+ /**
14
+ * Scan a git repository for commit activity since a given timestamp and
15
+ * return the results bucketed by hour.
16
+ *
17
+ * If the git command fails for any reason, returns an empty array.
18
+ *
19
+ * @param repoPath Absolute path to the git repository.
20
+ * @param since ISO 8601 timestamp (or any git-compatible date string)
21
+ * to start scanning from.
22
+ */
23
+ export declare function scanGitActivity(repoPath: string, since: string): GitActivityBucket[];
24
+ //# sourceMappingURL=git-activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-activity.d.ts","sourceRoot":"","sources":["../src/git-activity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAoBD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,iBAAiB,EAAE,CAkFrB"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Git activity scanner -- parses git log output and buckets commits by hour.
3
+ *
4
+ * Used by the dashboard to render git activity charts for agent sessions.
5
+ */
6
+ import { runGitSync } from './git-types.js';
7
+ // ---------------------------------------------------------------------------
8
+ // Helpers
9
+ // ---------------------------------------------------------------------------
10
+ /**
11
+ * Floor an ISO 8601 date string to the start of its hour.
12
+ * Returns an ISO string with minutes, seconds, and milliseconds zeroed out.
13
+ */
14
+ function floorToHour(isoDate) {
15
+ const d = new Date(isoDate);
16
+ d.setMinutes(0, 0, 0);
17
+ return d.toISOString();
18
+ }
19
+ // ---------------------------------------------------------------------------
20
+ // Main scanner
21
+ // ---------------------------------------------------------------------------
22
+ /**
23
+ * Scan a git repository for commit activity since a given timestamp and
24
+ * return the results bucketed by hour.
25
+ *
26
+ * If the git command fails for any reason, returns an empty array.
27
+ *
28
+ * @param repoPath Absolute path to the git repository.
29
+ * @param since ISO 8601 timestamp (or any git-compatible date string)
30
+ * to start scanning from.
31
+ */
32
+ export function scanGitActivity(repoPath, since) {
33
+ const result = runGitSync(['log', '--numstat', '--format=COMMIT:%H %aI', `--since=${since}`], repoPath, { timeoutMs: 60_000 });
34
+ if (!result.success) {
35
+ return [];
36
+ }
37
+ const output = result.output;
38
+ if (!output) {
39
+ return [];
40
+ }
41
+ // Accumulate per-hour buckets
42
+ const buckets = new Map();
43
+ let currentHourKey = null;
44
+ for (const line of output.split('\n')) {
45
+ const trimmed = line.trim();
46
+ if (!trimmed) {
47
+ continue;
48
+ }
49
+ if (trimmed.startsWith('COMMIT:')) {
50
+ // Format: "COMMIT:<hash> <authorDateISO>"
51
+ // The hash is 40 hex chars, followed by a space, then the ISO date.
52
+ const parts = trimmed.slice('COMMIT:'.length).split(' ');
53
+ // parts[0] = hash, parts[1] = author date ISO 8601
54
+ const authorDate = parts[1];
55
+ if (authorDate) {
56
+ currentHourKey = floorToHour(authorDate);
57
+ let bucket = buckets.get(currentHourKey);
58
+ if (!bucket) {
59
+ bucket = {
60
+ intervalStart: currentHourKey,
61
+ linesAdded: 0,
62
+ linesRemoved: 0,
63
+ commitCount: 0,
64
+ };
65
+ buckets.set(currentHourKey, bucket);
66
+ }
67
+ bucket.commitCount += 1;
68
+ }
69
+ continue;
70
+ }
71
+ // Numstat line: "<added>\t<removed>\t<filename>"
72
+ // Binary files show as "-\t-\t<filename>" -- skip those.
73
+ if (currentHourKey) {
74
+ const tabParts = trimmed.split('\t');
75
+ if (tabParts.length >= 3) {
76
+ const addedStr = tabParts[0];
77
+ const removedStr = tabParts[1];
78
+ // Skip binary entries
79
+ if (addedStr === '-' && removedStr === '-') {
80
+ continue;
81
+ }
82
+ const added = parseInt(addedStr, 10);
83
+ const removed = parseInt(removedStr, 10);
84
+ if (!Number.isNaN(added) && !Number.isNaN(removed)) {
85
+ const bucket = buckets.get(currentHourKey);
86
+ if (bucket) {
87
+ bucket.linesAdded += added;
88
+ bucket.linesRemoved += removed;
89
+ }
90
+ }
91
+ }
92
+ }
93
+ }
94
+ // Sort by intervalStart ascending
95
+ return Array.from(buckets.values()).sort((a, b) => a.intervalStart.localeCompare(b.intervalStart));
96
+ }
97
+ //# sourceMappingURL=git-activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-activity.js","sourceRoot":"","sources":["../src/git-activity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAc5C,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,WAAW,CAAC,OAAe;IAClC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtB,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACzB,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,KAAa;IAEb,MAAM,MAAM,GAAG,UAAU,CACvB,CAAC,KAAK,EAAE,WAAW,EAAE,wBAAwB,EAAE,WAAW,KAAK,EAAE,CAAC,EAClE,QAAQ,EACR,EAAE,SAAS,EAAE,MAAM,EAAE,CACtB,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,8BAA8B;IAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IAErD,IAAI,cAAc,GAAkB,IAAI,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,0CAA0C;YAC1C,oEAAoE;YACpE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzD,mDAAmD;YACnD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,UAAU,EAAE,CAAC;gBACf,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;gBAEzC,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACzC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG;wBACP,aAAa,EAAE,cAAc;wBAC7B,UAAU,EAAE,CAAC;wBACb,YAAY,EAAE,CAAC;wBACf,WAAW,EAAE,CAAC;qBACf,CAAC;oBACF,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;gBACtC,CAAC;gBACD,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;YAC1B,CAAC;YACD,SAAS;QACX,CAAC;QAED,iDAAiD;QACjD,yDAAyD;QACzD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAE/B,sBAAsB;gBACtB,IAAI,QAAQ,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;oBAC3C,SAAS;gBACX,CAAC;gBAED,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAEzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;oBAC3C,IAAI,MAAM,EAAE,CAAC;wBACX,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC;wBAC3B,MAAM,CAAC,YAAY,IAAI,OAAO,CAAC;oBACjC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChD,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAC/C,CAAC;AACJ,CAAC"}