@herdctl/core 0.0.1

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 (520) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/.turbo/turbo-test.log +219 -0
  3. package/.turbo/turbo-typecheck.log +4 -0
  4. package/coverage/base.css +224 -0
  5. package/coverage/block-navigation.js +87 -0
  6. package/coverage/coverage-final.json +51 -0
  7. package/coverage/favicon.png +0 -0
  8. package/coverage/index.html +251 -0
  9. package/coverage/prettify.css +1 -0
  10. package/coverage/prettify.js +2 -0
  11. package/coverage/sort-arrow-sprite.png +0 -0
  12. package/coverage/sorter.js +210 -0
  13. package/coverage/src/config/index.html +191 -0
  14. package/coverage/src/config/index.ts.html +442 -0
  15. package/coverage/src/config/interpolate.ts.html +652 -0
  16. package/coverage/src/config/loader.ts.html +1501 -0
  17. package/coverage/src/config/merge.ts.html +823 -0
  18. package/coverage/src/config/parser.ts.html +1213 -0
  19. package/coverage/src/config/schema.ts.html +1123 -0
  20. package/coverage/src/fleet-manager/errors.ts.html +2326 -0
  21. package/coverage/src/fleet-manager/event-types.ts.html +1219 -0
  22. package/coverage/src/fleet-manager/fleet-manager.ts.html +7030 -0
  23. package/coverage/src/fleet-manager/index.html +206 -0
  24. package/coverage/src/fleet-manager/index.ts.html +469 -0
  25. package/coverage/src/fleet-manager/job-manager.ts.html +2074 -0
  26. package/coverage/src/fleet-manager/job-queue.ts.html +2479 -0
  27. package/coverage/src/fleet-manager/types.ts.html +2602 -0
  28. package/coverage/src/index.html +116 -0
  29. package/coverage/src/index.ts.html +181 -0
  30. package/coverage/src/runner/errors.ts.html +1006 -0
  31. package/coverage/src/runner/index.html +191 -0
  32. package/coverage/src/runner/index.ts.html +256 -0
  33. package/coverage/src/runner/job-executor.ts.html +1429 -0
  34. package/coverage/src/runner/message-processor.ts.html +1150 -0
  35. package/coverage/src/runner/sdk-adapter.ts.html +658 -0
  36. package/coverage/src/runner/types.ts.html +559 -0
  37. package/coverage/src/scheduler/errors.ts.html +388 -0
  38. package/coverage/src/scheduler/index.html +206 -0
  39. package/coverage/src/scheduler/index.ts.html +244 -0
  40. package/coverage/src/scheduler/interval.ts.html +652 -0
  41. package/coverage/src/scheduler/schedule-runner.ts.html +1411 -0
  42. package/coverage/src/scheduler/schedule-state.ts.html +718 -0
  43. package/coverage/src/scheduler/scheduler.ts.html +1795 -0
  44. package/coverage/src/scheduler/types.ts.html +733 -0
  45. package/coverage/src/state/directory.ts.html +736 -0
  46. package/coverage/src/state/errors.ts.html +376 -0
  47. package/coverage/src/state/fleet-state.ts.html +937 -0
  48. package/coverage/src/state/index.html +221 -0
  49. package/coverage/src/state/index.ts.html +322 -0
  50. package/coverage/src/state/job-metadata.ts.html +1420 -0
  51. package/coverage/src/state/job-output.ts.html +1033 -0
  52. package/coverage/src/state/schemas/fleet-state.ts.html +445 -0
  53. package/coverage/src/state/schemas/index.html +176 -0
  54. package/coverage/src/state/schemas/index.ts.html +286 -0
  55. package/coverage/src/state/schemas/job-metadata.ts.html +628 -0
  56. package/coverage/src/state/schemas/job-output.ts.html +616 -0
  57. package/coverage/src/state/schemas/session-info.ts.html +361 -0
  58. package/coverage/src/state/session.ts.html +844 -0
  59. package/coverage/src/state/types.ts.html +262 -0
  60. package/coverage/src/state/utils/atomic.ts.html +748 -0
  61. package/coverage/src/state/utils/index.html +146 -0
  62. package/coverage/src/state/utils/index.ts.html +103 -0
  63. package/coverage/src/state/utils/reads.ts.html +1621 -0
  64. package/coverage/src/work-sources/adapters/github.ts.html +3583 -0
  65. package/coverage/src/work-sources/adapters/index.html +131 -0
  66. package/coverage/src/work-sources/adapters/index.ts.html +277 -0
  67. package/coverage/src/work-sources/errors.ts.html +298 -0
  68. package/coverage/src/work-sources/index.html +176 -0
  69. package/coverage/src/work-sources/index.ts.html +529 -0
  70. package/coverage/src/work-sources/manager.ts.html +1324 -0
  71. package/coverage/src/work-sources/registry.ts.html +619 -0
  72. package/coverage/src/work-sources/types.ts.html +568 -0
  73. package/dist/config/__tests__/agent.test.d.ts +2 -0
  74. package/dist/config/__tests__/agent.test.d.ts.map +1 -0
  75. package/dist/config/__tests__/agent.test.js +752 -0
  76. package/dist/config/__tests__/agent.test.js.map +1 -0
  77. package/dist/config/__tests__/interpolate.test.d.ts +2 -0
  78. package/dist/config/__tests__/interpolate.test.d.ts.map +1 -0
  79. package/dist/config/__tests__/interpolate.test.js +509 -0
  80. package/dist/config/__tests__/interpolate.test.js.map +1 -0
  81. package/dist/config/__tests__/loader.test.d.ts +2 -0
  82. package/dist/config/__tests__/loader.test.d.ts.map +1 -0
  83. package/dist/config/__tests__/loader.test.js +631 -0
  84. package/dist/config/__tests__/loader.test.js.map +1 -0
  85. package/dist/config/__tests__/merge.test.d.ts +2 -0
  86. package/dist/config/__tests__/merge.test.d.ts.map +1 -0
  87. package/dist/config/__tests__/merge.test.js +672 -0
  88. package/dist/config/__tests__/merge.test.js.map +1 -0
  89. package/dist/config/__tests__/parser.test.d.ts +2 -0
  90. package/dist/config/__tests__/parser.test.d.ts.map +1 -0
  91. package/dist/config/__tests__/parser.test.js +476 -0
  92. package/dist/config/__tests__/parser.test.js.map +1 -0
  93. package/dist/config/__tests__/schema.test.d.ts +2 -0
  94. package/dist/config/__tests__/schema.test.d.ts.map +1 -0
  95. package/dist/config/__tests__/schema.test.js +776 -0
  96. package/dist/config/__tests__/schema.test.js.map +1 -0
  97. package/dist/config/index.d.ts +11 -0
  98. package/dist/config/index.d.ts.map +1 -0
  99. package/dist/config/index.js +26 -0
  100. package/dist/config/index.js.map +1 -0
  101. package/dist/config/interpolate.d.ts +76 -0
  102. package/dist/config/interpolate.d.ts.map +1 -0
  103. package/dist/config/interpolate.js +143 -0
  104. package/dist/config/interpolate.js.map +1 -0
  105. package/dist/config/loader.d.ts +147 -0
  106. package/dist/config/loader.d.ts.map +1 -0
  107. package/dist/config/loader.js +336 -0
  108. package/dist/config/loader.js.map +1 -0
  109. package/dist/config/merge.d.ts +84 -0
  110. package/dist/config/merge.d.ts.map +1 -0
  111. package/dist/config/merge.js +138 -0
  112. package/dist/config/merge.js.map +1 -0
  113. package/dist/config/parser.d.ts +143 -0
  114. package/dist/config/parser.d.ts.map +1 -0
  115. package/dist/config/parser.js +316 -0
  116. package/dist/config/parser.js.map +1 -0
  117. package/dist/config/schema.d.ts +1906 -0
  118. package/dist/config/schema.d.ts.map +1 -0
  119. package/dist/config/schema.js +268 -0
  120. package/dist/config/schema.js.map +1 -0
  121. package/dist/fleet-manager/__tests__/coverage.test.d.ts +13 -0
  122. package/dist/fleet-manager/__tests__/coverage.test.d.ts.map +1 -0
  123. package/dist/fleet-manager/__tests__/coverage.test.js +2282 -0
  124. package/dist/fleet-manager/__tests__/coverage.test.js.map +1 -0
  125. package/dist/fleet-manager/__tests__/errors.test.d.ts +7 -0
  126. package/dist/fleet-manager/__tests__/errors.test.d.ts.map +1 -0
  127. package/dist/fleet-manager/__tests__/errors.test.js +557 -0
  128. package/dist/fleet-manager/__tests__/errors.test.js.map +1 -0
  129. package/dist/fleet-manager/__tests__/event-helpers.test.d.ts +7 -0
  130. package/dist/fleet-manager/__tests__/event-helpers.test.d.ts.map +1 -0
  131. package/dist/fleet-manager/__tests__/event-helpers.test.js +368 -0
  132. package/dist/fleet-manager/__tests__/event-helpers.test.js.map +1 -0
  133. package/dist/fleet-manager/__tests__/integration.test.d.ts +11 -0
  134. package/dist/fleet-manager/__tests__/integration.test.d.ts.map +1 -0
  135. package/dist/fleet-manager/__tests__/integration.test.js +949 -0
  136. package/dist/fleet-manager/__tests__/integration.test.js.map +1 -0
  137. package/dist/fleet-manager/__tests__/job-control.test.d.ts +7 -0
  138. package/dist/fleet-manager/__tests__/job-control.test.d.ts.map +1 -0
  139. package/dist/fleet-manager/__tests__/job-control.test.js +215 -0
  140. package/dist/fleet-manager/__tests__/job-control.test.js.map +1 -0
  141. package/dist/fleet-manager/__tests__/job-manager.test.d.ts +7 -0
  142. package/dist/fleet-manager/__tests__/job-manager.test.d.ts.map +1 -0
  143. package/dist/fleet-manager/__tests__/job-manager.test.js +659 -0
  144. package/dist/fleet-manager/__tests__/job-manager.test.js.map +1 -0
  145. package/dist/fleet-manager/__tests__/job-queue.test.d.ts +5 -0
  146. package/dist/fleet-manager/__tests__/job-queue.test.d.ts.map +1 -0
  147. package/dist/fleet-manager/__tests__/job-queue.test.js +315 -0
  148. package/dist/fleet-manager/__tests__/job-queue.test.js.map +1 -0
  149. package/dist/fleet-manager/__tests__/reload.test.d.ts +7 -0
  150. package/dist/fleet-manager/__tests__/reload.test.d.ts.map +1 -0
  151. package/dist/fleet-manager/__tests__/reload.test.js +609 -0
  152. package/dist/fleet-manager/__tests__/reload.test.js.map +1 -0
  153. package/dist/fleet-manager/__tests__/status-queries.test.d.ts +7 -0
  154. package/dist/fleet-manager/__tests__/status-queries.test.d.ts.map +1 -0
  155. package/dist/fleet-manager/__tests__/status-queries.test.js +488 -0
  156. package/dist/fleet-manager/__tests__/status-queries.test.js.map +1 -0
  157. package/dist/fleet-manager/__tests__/trigger.test.d.ts +7 -0
  158. package/dist/fleet-manager/__tests__/trigger.test.d.ts.map +1 -0
  159. package/dist/fleet-manager/__tests__/trigger.test.js +471 -0
  160. package/dist/fleet-manager/__tests__/trigger.test.js.map +1 -0
  161. package/dist/fleet-manager/errors.d.ts +407 -0
  162. package/dist/fleet-manager/errors.d.ts.map +1 -0
  163. package/dist/fleet-manager/errors.js +569 -0
  164. package/dist/fleet-manager/errors.js.map +1 -0
  165. package/dist/fleet-manager/event-types.d.ts +302 -0
  166. package/dist/fleet-manager/event-types.d.ts.map +1 -0
  167. package/dist/fleet-manager/event-types.js +9 -0
  168. package/dist/fleet-manager/event-types.js.map +1 -0
  169. package/dist/fleet-manager/fleet-manager.d.ts +699 -0
  170. package/dist/fleet-manager/fleet-manager.d.ts.map +1 -0
  171. package/dist/fleet-manager/fleet-manager.js +1906 -0
  172. package/dist/fleet-manager/fleet-manager.js.map +1 -0
  173. package/dist/fleet-manager/index.d.ts +17 -0
  174. package/dist/fleet-manager/index.d.ts.map +1 -0
  175. package/dist/fleet-manager/index.js +29 -0
  176. package/dist/fleet-manager/index.js.map +1 -0
  177. package/dist/fleet-manager/job-manager.d.ts +271 -0
  178. package/dist/fleet-manager/job-manager.d.ts.map +1 -0
  179. package/dist/fleet-manager/job-manager.js +443 -0
  180. package/dist/fleet-manager/job-manager.js.map +1 -0
  181. package/dist/fleet-manager/job-queue.d.ts +422 -0
  182. package/dist/fleet-manager/job-queue.d.ts.map +1 -0
  183. package/dist/fleet-manager/job-queue.js +448 -0
  184. package/dist/fleet-manager/job-queue.js.map +1 -0
  185. package/dist/fleet-manager/types.d.ts +680 -0
  186. package/dist/fleet-manager/types.d.ts.map +1 -0
  187. package/dist/fleet-manager/types.js +8 -0
  188. package/dist/fleet-manager/types.js.map +1 -0
  189. package/dist/index.d.ts +20 -0
  190. package/dist/index.d.ts.map +1 -0
  191. package/dist/index.js +26 -0
  192. package/dist/index.js.map +1 -0
  193. package/dist/runner/__tests__/errors.test.d.ts +2 -0
  194. package/dist/runner/__tests__/errors.test.d.ts.map +1 -0
  195. package/dist/runner/__tests__/errors.test.js +264 -0
  196. package/dist/runner/__tests__/errors.test.js.map +1 -0
  197. package/dist/runner/__tests__/job-executor.test.d.ts +2 -0
  198. package/dist/runner/__tests__/job-executor.test.d.ts.map +1 -0
  199. package/dist/runner/__tests__/job-executor.test.js +1345 -0
  200. package/dist/runner/__tests__/job-executor.test.js.map +1 -0
  201. package/dist/runner/__tests__/message-processor.test.d.ts +2 -0
  202. package/dist/runner/__tests__/message-processor.test.d.ts.map +1 -0
  203. package/dist/runner/__tests__/message-processor.test.js +768 -0
  204. package/dist/runner/__tests__/message-processor.test.js.map +1 -0
  205. package/dist/runner/__tests__/sdk-adapter.test.d.ts +2 -0
  206. package/dist/runner/__tests__/sdk-adapter.test.d.ts.map +1 -0
  207. package/dist/runner/__tests__/sdk-adapter.test.js +554 -0
  208. package/dist/runner/__tests__/sdk-adapter.test.js.map +1 -0
  209. package/dist/runner/errors.d.ts +121 -0
  210. package/dist/runner/errors.d.ts.map +1 -0
  211. package/dist/runner/errors.js +212 -0
  212. package/dist/runner/errors.js.map +1 -0
  213. package/dist/runner/index.d.ts +12 -0
  214. package/dist/runner/index.d.ts.map +1 -0
  215. package/dist/runner/index.js +15 -0
  216. package/dist/runner/index.js.map +1 -0
  217. package/dist/runner/job-executor.d.ts +98 -0
  218. package/dist/runner/job-executor.d.ts.map +1 -0
  219. package/dist/runner/job-executor.js +333 -0
  220. package/dist/runner/job-executor.js.map +1 -0
  221. package/dist/runner/message-processor.d.ts +45 -0
  222. package/dist/runner/message-processor.d.ts.map +1 -0
  223. package/dist/runner/message-processor.js +294 -0
  224. package/dist/runner/message-processor.js.map +1 -0
  225. package/dist/runner/sdk-adapter.d.ts +60 -0
  226. package/dist/runner/sdk-adapter.d.ts.map +1 -0
  227. package/dist/runner/sdk-adapter.js +138 -0
  228. package/dist/runner/sdk-adapter.js.map +1 -0
  229. package/dist/runner/types.d.ts +135 -0
  230. package/dist/runner/types.d.ts.map +1 -0
  231. package/dist/runner/types.js +7 -0
  232. package/dist/runner/types.js.map +1 -0
  233. package/dist/scheduler/__tests__/errors.test.d.ts +2 -0
  234. package/dist/scheduler/__tests__/errors.test.d.ts.map +1 -0
  235. package/dist/scheduler/__tests__/errors.test.js +101 -0
  236. package/dist/scheduler/__tests__/errors.test.js.map +1 -0
  237. package/dist/scheduler/__tests__/interval.test.d.ts +2 -0
  238. package/dist/scheduler/__tests__/interval.test.d.ts.map +1 -0
  239. package/dist/scheduler/__tests__/interval.test.js +419 -0
  240. package/dist/scheduler/__tests__/interval.test.js.map +1 -0
  241. package/dist/scheduler/__tests__/schedule-runner.test.d.ts +2 -0
  242. package/dist/scheduler/__tests__/schedule-runner.test.d.ts.map +1 -0
  243. package/dist/scheduler/__tests__/schedule-runner.test.js +634 -0
  244. package/dist/scheduler/__tests__/schedule-runner.test.js.map +1 -0
  245. package/dist/scheduler/__tests__/schedule-state.test.d.ts +2 -0
  246. package/dist/scheduler/__tests__/schedule-state.test.d.ts.map +1 -0
  247. package/dist/scheduler/__tests__/schedule-state.test.js +572 -0
  248. package/dist/scheduler/__tests__/schedule-state.test.js.map +1 -0
  249. package/dist/scheduler/__tests__/scheduler.test.d.ts +2 -0
  250. package/dist/scheduler/__tests__/scheduler.test.d.ts.map +1 -0
  251. package/dist/scheduler/__tests__/scheduler.test.js +987 -0
  252. package/dist/scheduler/__tests__/scheduler.test.js.map +1 -0
  253. package/dist/scheduler/errors.d.ts +61 -0
  254. package/dist/scheduler/errors.d.ts.map +1 -0
  255. package/dist/scheduler/errors.js +81 -0
  256. package/dist/scheduler/errors.js.map +1 -0
  257. package/dist/scheduler/index.d.ts +13 -0
  258. package/dist/scheduler/index.d.ts.map +1 -0
  259. package/dist/scheduler/index.js +17 -0
  260. package/dist/scheduler/index.js.map +1 -0
  261. package/dist/scheduler/interval.d.ts +64 -0
  262. package/dist/scheduler/interval.d.ts.map +1 -0
  263. package/dist/scheduler/interval.js +139 -0
  264. package/dist/scheduler/interval.js.map +1 -0
  265. package/dist/scheduler/schedule-runner.d.ts +149 -0
  266. package/dist/scheduler/schedule-runner.d.ts.map +1 -0
  267. package/dist/scheduler/schedule-runner.js +277 -0
  268. package/dist/scheduler/schedule-runner.js.map +1 -0
  269. package/dist/scheduler/schedule-state.d.ts +105 -0
  270. package/dist/scheduler/schedule-state.d.ts.map +1 -0
  271. package/dist/scheduler/schedule-state.js +151 -0
  272. package/dist/scheduler/schedule-state.js.map +1 -0
  273. package/dist/scheduler/scheduler.d.ts +138 -0
  274. package/dist/scheduler/scheduler.d.ts.map +1 -0
  275. package/dist/scheduler/scheduler.js +423 -0
  276. package/dist/scheduler/scheduler.js.map +1 -0
  277. package/dist/scheduler/types.d.ts +160 -0
  278. package/dist/scheduler/types.d.ts.map +1 -0
  279. package/dist/scheduler/types.js +8 -0
  280. package/dist/scheduler/types.js.map +1 -0
  281. package/dist/state/__tests__/directory.test.d.ts +2 -0
  282. package/dist/state/__tests__/directory.test.d.ts.map +1 -0
  283. package/dist/state/__tests__/directory.test.js +414 -0
  284. package/dist/state/__tests__/directory.test.js.map +1 -0
  285. package/dist/state/__tests__/fleet-state.test.d.ts +2 -0
  286. package/dist/state/__tests__/fleet-state.test.d.ts.map +1 -0
  287. package/dist/state/__tests__/fleet-state.test.js +696 -0
  288. package/dist/state/__tests__/fleet-state.test.js.map +1 -0
  289. package/dist/state/__tests__/job-metadata-schema.test.d.ts +2 -0
  290. package/dist/state/__tests__/job-metadata-schema.test.d.ts.map +1 -0
  291. package/dist/state/__tests__/job-metadata-schema.test.js +329 -0
  292. package/dist/state/__tests__/job-metadata-schema.test.js.map +1 -0
  293. package/dist/state/__tests__/job-metadata.test.d.ts +2 -0
  294. package/dist/state/__tests__/job-metadata.test.d.ts.map +1 -0
  295. package/dist/state/__tests__/job-metadata.test.js +667 -0
  296. package/dist/state/__tests__/job-metadata.test.js.map +1 -0
  297. package/dist/state/__tests__/job-output.test.d.ts +2 -0
  298. package/dist/state/__tests__/job-output.test.d.ts.map +1 -0
  299. package/dist/state/__tests__/job-output.test.js +672 -0
  300. package/dist/state/__tests__/job-output.test.js.map +1 -0
  301. package/dist/state/__tests__/session-schema.test.d.ts +2 -0
  302. package/dist/state/__tests__/session-schema.test.d.ts.map +1 -0
  303. package/dist/state/__tests__/session-schema.test.js +323 -0
  304. package/dist/state/__tests__/session-schema.test.js.map +1 -0
  305. package/dist/state/__tests__/session.test.d.ts +2 -0
  306. package/dist/state/__tests__/session.test.d.ts.map +1 -0
  307. package/dist/state/__tests__/session.test.js +468 -0
  308. package/dist/state/__tests__/session.test.js.map +1 -0
  309. package/dist/state/directory.d.ts +42 -0
  310. package/dist/state/directory.d.ts.map +1 -0
  311. package/dist/state/directory.js +170 -0
  312. package/dist/state/directory.js.map +1 -0
  313. package/dist/state/errors.d.ts +44 -0
  314. package/dist/state/errors.d.ts.map +1 -0
  315. package/dist/state/errors.js +82 -0
  316. package/dist/state/errors.js.map +1 -0
  317. package/dist/state/fleet-state.d.ts +126 -0
  318. package/dist/state/fleet-state.d.ts.map +1 -0
  319. package/dist/state/fleet-state.js +196 -0
  320. package/dist/state/fleet-state.js.map +1 -0
  321. package/dist/state/index.d.ts +21 -0
  322. package/dist/state/index.d.ts.map +1 -0
  323. package/dist/state/index.js +30 -0
  324. package/dist/state/index.js.map +1 -0
  325. package/dist/state/job-metadata.d.ts +151 -0
  326. package/dist/state/job-metadata.d.ts.map +1 -0
  327. package/dist/state/job-metadata.js +287 -0
  328. package/dist/state/job-metadata.js.map +1 -0
  329. package/dist/state/job-output.d.ts +116 -0
  330. package/dist/state/job-output.d.ts.map +1 -0
  331. package/dist/state/job-output.js +218 -0
  332. package/dist/state/job-output.js.map +1 -0
  333. package/dist/state/schemas/__tests__/job-output.test.d.ts +2 -0
  334. package/dist/state/schemas/__tests__/job-output.test.d.ts.map +1 -0
  335. package/dist/state/schemas/__tests__/job-output.test.js +279 -0
  336. package/dist/state/schemas/__tests__/job-output.test.js.map +1 -0
  337. package/dist/state/schemas/fleet-state.d.ts +249 -0
  338. package/dist/state/schemas/fleet-state.d.ts.map +1 -0
  339. package/dist/state/schemas/fleet-state.js +97 -0
  340. package/dist/state/schemas/fleet-state.js.map +1 -0
  341. package/dist/state/schemas/index.d.ts +10 -0
  342. package/dist/state/schemas/index.d.ts.map +1 -0
  343. package/dist/state/schemas/index.js +10 -0
  344. package/dist/state/schemas/index.js.map +1 -0
  345. package/dist/state/schemas/job-metadata.d.ts +118 -0
  346. package/dist/state/schemas/job-metadata.d.ts.map +1 -0
  347. package/dist/state/schemas/job-metadata.js +123 -0
  348. package/dist/state/schemas/job-metadata.js.map +1 -0
  349. package/dist/state/schemas/job-output.d.ts +291 -0
  350. package/dist/state/schemas/job-output.d.ts.map +1 -0
  351. package/dist/state/schemas/job-output.js +132 -0
  352. package/dist/state/schemas/job-output.js.map +1 -0
  353. package/dist/state/schemas/session-info.d.ts +65 -0
  354. package/dist/state/schemas/session-info.d.ts.map +1 -0
  355. package/dist/state/schemas/session-info.js +58 -0
  356. package/dist/state/schemas/session-info.js.map +1 -0
  357. package/dist/state/session.d.ts +92 -0
  358. package/dist/state/session.d.ts.map +1 -0
  359. package/dist/state/session.js +173 -0
  360. package/dist/state/session.js.map +1 -0
  361. package/dist/state/types.d.ts +54 -0
  362. package/dist/state/types.d.ts.map +1 -0
  363. package/dist/state/types.js +18 -0
  364. package/dist/state/types.js.map +1 -0
  365. package/dist/state/utils/__tests__/atomic.test.d.ts +2 -0
  366. package/dist/state/utils/__tests__/atomic.test.d.ts.map +1 -0
  367. package/dist/state/utils/__tests__/atomic.test.js +537 -0
  368. package/dist/state/utils/__tests__/atomic.test.js.map +1 -0
  369. package/dist/state/utils/__tests__/reads.test.d.ts +2 -0
  370. package/dist/state/utils/__tests__/reads.test.d.ts.map +1 -0
  371. package/dist/state/utils/__tests__/reads.test.js +792 -0
  372. package/dist/state/utils/__tests__/reads.test.js.map +1 -0
  373. package/dist/state/utils/atomic.d.ts +89 -0
  374. package/dist/state/utils/atomic.d.ts.map +1 -0
  375. package/dist/state/utils/atomic.js +157 -0
  376. package/dist/state/utils/atomic.js.map +1 -0
  377. package/dist/state/utils/index.d.ts +6 -0
  378. package/dist/state/utils/index.d.ts.map +1 -0
  379. package/dist/state/utils/index.js +6 -0
  380. package/dist/state/utils/index.js.map +1 -0
  381. package/dist/state/utils/reads.d.ts +196 -0
  382. package/dist/state/utils/reads.d.ts.map +1 -0
  383. package/dist/state/utils/reads.js +346 -0
  384. package/dist/state/utils/reads.js.map +1 -0
  385. package/dist/work-sources/__tests__/github.test.d.ts +2 -0
  386. package/dist/work-sources/__tests__/github.test.d.ts.map +1 -0
  387. package/dist/work-sources/__tests__/github.test.js +1334 -0
  388. package/dist/work-sources/__tests__/github.test.js.map +1 -0
  389. package/dist/work-sources/__tests__/manager.test.d.ts +2 -0
  390. package/dist/work-sources/__tests__/manager.test.d.ts.map +1 -0
  391. package/dist/work-sources/__tests__/manager.test.js +424 -0
  392. package/dist/work-sources/__tests__/manager.test.js.map +1 -0
  393. package/dist/work-sources/__tests__/registry.test.d.ts +2 -0
  394. package/dist/work-sources/__tests__/registry.test.d.ts.map +1 -0
  395. package/dist/work-sources/__tests__/registry.test.js +381 -0
  396. package/dist/work-sources/__tests__/registry.test.js.map +1 -0
  397. package/dist/work-sources/__tests__/types.test.d.ts +2 -0
  398. package/dist/work-sources/__tests__/types.test.d.ts.map +1 -0
  399. package/dist/work-sources/__tests__/types.test.js +406 -0
  400. package/dist/work-sources/__tests__/types.test.js.map +1 -0
  401. package/dist/work-sources/adapters/github.d.ts +290 -0
  402. package/dist/work-sources/adapters/github.d.ts.map +1 -0
  403. package/dist/work-sources/adapters/github.js +803 -0
  404. package/dist/work-sources/adapters/github.js.map +1 -0
  405. package/dist/work-sources/adapters/index.d.ts +10 -0
  406. package/dist/work-sources/adapters/index.d.ts.map +1 -0
  407. package/dist/work-sources/adapters/index.js +31 -0
  408. package/dist/work-sources/adapters/index.js.map +1 -0
  409. package/dist/work-sources/errors.d.ts +40 -0
  410. package/dist/work-sources/errors.d.ts.map +1 -0
  411. package/dist/work-sources/errors.js +54 -0
  412. package/dist/work-sources/errors.js.map +1 -0
  413. package/dist/work-sources/index.d.ts +105 -0
  414. package/dist/work-sources/index.d.ts.map +1 -0
  415. package/dist/work-sources/index.js +24 -0
  416. package/dist/work-sources/index.js.map +1 -0
  417. package/dist/work-sources/manager.d.ts +370 -0
  418. package/dist/work-sources/manager.d.ts.map +1 -0
  419. package/dist/work-sources/manager.js +61 -0
  420. package/dist/work-sources/manager.js.map +1 -0
  421. package/dist/work-sources/registry.d.ts +128 -0
  422. package/dist/work-sources/registry.d.ts.map +1 -0
  423. package/dist/work-sources/registry.js +132 -0
  424. package/dist/work-sources/registry.js.map +1 -0
  425. package/dist/work-sources/types.d.ts +127 -0
  426. package/dist/work-sources/types.d.ts.map +1 -0
  427. package/dist/work-sources/types.js +8 -0
  428. package/dist/work-sources/types.js.map +1 -0
  429. package/package.json +23 -0
  430. package/src/config/__tests__/agent.test.ts +864 -0
  431. package/src/config/__tests__/interpolate.test.ts +644 -0
  432. package/src/config/__tests__/loader.test.ts +784 -0
  433. package/src/config/__tests__/merge.test.ts +751 -0
  434. package/src/config/__tests__/parser.test.ts +533 -0
  435. package/src/config/__tests__/schema.test.ts +873 -0
  436. package/src/config/index.ts +119 -0
  437. package/src/config/interpolate.ts +189 -0
  438. package/src/config/loader.ts +472 -0
  439. package/src/config/merge.ts +246 -0
  440. package/src/config/parser.ts +376 -0
  441. package/src/config/schema.ts +346 -0
  442. package/src/fleet-manager/__tests__/coverage.test.ts +2869 -0
  443. package/src/fleet-manager/__tests__/errors.test.ts +660 -0
  444. package/src/fleet-manager/__tests__/event-helpers.test.ts +448 -0
  445. package/src/fleet-manager/__tests__/integration.test.ts +1209 -0
  446. package/src/fleet-manager/__tests__/job-control.test.ts +283 -0
  447. package/src/fleet-manager/__tests__/job-manager.test.ts +869 -0
  448. package/src/fleet-manager/__tests__/job-queue.test.ts +401 -0
  449. package/src/fleet-manager/__tests__/reload.test.ts +751 -0
  450. package/src/fleet-manager/__tests__/status-queries.test.ts +595 -0
  451. package/src/fleet-manager/__tests__/trigger.test.ts +601 -0
  452. package/src/fleet-manager/errors.ts +747 -0
  453. package/src/fleet-manager/event-types.ts +378 -0
  454. package/src/fleet-manager/fleet-manager.ts +2315 -0
  455. package/src/fleet-manager/index.ts +128 -0
  456. package/src/fleet-manager/job-manager.ts +663 -0
  457. package/src/fleet-manager/job-queue.ts +798 -0
  458. package/src/fleet-manager/types.ts +839 -0
  459. package/src/index.ts +32 -0
  460. package/src/runner/__tests__/errors.test.ts +382 -0
  461. package/src/runner/__tests__/job-executor.test.ts +1708 -0
  462. package/src/runner/__tests__/message-processor.test.ts +960 -0
  463. package/src/runner/__tests__/sdk-adapter.test.ts +626 -0
  464. package/src/runner/errors.ts +307 -0
  465. package/src/runner/index.ts +57 -0
  466. package/src/runner/job-executor.ts +448 -0
  467. package/src/runner/message-processor.ts +355 -0
  468. package/src/runner/sdk-adapter.ts +191 -0
  469. package/src/runner/types.ts +158 -0
  470. package/src/scheduler/__tests__/errors.test.ts +159 -0
  471. package/src/scheduler/__tests__/interval.test.ts +515 -0
  472. package/src/scheduler/__tests__/schedule-runner.test.ts +798 -0
  473. package/src/scheduler/__tests__/schedule-state.test.ts +671 -0
  474. package/src/scheduler/__tests__/scheduler.test.ts +1280 -0
  475. package/src/scheduler/errors.ts +101 -0
  476. package/src/scheduler/index.ts +53 -0
  477. package/src/scheduler/interval.ts +189 -0
  478. package/src/scheduler/schedule-runner.ts +442 -0
  479. package/src/scheduler/schedule-state.ts +211 -0
  480. package/src/scheduler/scheduler.ts +570 -0
  481. package/src/scheduler/types.ts +216 -0
  482. package/src/state/__tests__/directory.test.ts +595 -0
  483. package/src/state/__tests__/fleet-state.test.ts +868 -0
  484. package/src/state/__tests__/job-metadata-schema.test.ts +414 -0
  485. package/src/state/__tests__/job-metadata.test.ts +831 -0
  486. package/src/state/__tests__/job-output.test.ts +856 -0
  487. package/src/state/__tests__/session-schema.test.ts +378 -0
  488. package/src/state/__tests__/session.test.ts +604 -0
  489. package/src/state/directory.ts +217 -0
  490. package/src/state/errors.ts +97 -0
  491. package/src/state/fleet-state.ts +284 -0
  492. package/src/state/index.ts +79 -0
  493. package/src/state/job-metadata.ts +445 -0
  494. package/src/state/job-output.ts +316 -0
  495. package/src/state/schemas/__tests__/job-output.test.ts +338 -0
  496. package/src/state/schemas/fleet-state.ts +120 -0
  497. package/src/state/schemas/index.ts +67 -0
  498. package/src/state/schemas/job-metadata.ts +181 -0
  499. package/src/state/schemas/job-output.ts +177 -0
  500. package/src/state/schemas/session-info.ts +92 -0
  501. package/src/state/session.ts +253 -0
  502. package/src/state/types.ts +59 -0
  503. package/src/state/utils/__tests__/atomic.test.ts +723 -0
  504. package/src/state/utils/__tests__/reads.test.ts +1071 -0
  505. package/src/state/utils/atomic.ts +221 -0
  506. package/src/state/utils/index.ts +6 -0
  507. package/src/state/utils/reads.ts +512 -0
  508. package/src/work-sources/__tests__/github.test.ts +1800 -0
  509. package/src/work-sources/__tests__/manager.test.ts +529 -0
  510. package/src/work-sources/__tests__/registry.test.ts +477 -0
  511. package/src/work-sources/__tests__/types.test.ts +479 -0
  512. package/src/work-sources/adapters/github.ts +1166 -0
  513. package/src/work-sources/adapters/index.ts +64 -0
  514. package/src/work-sources/errors.ts +71 -0
  515. package/src/work-sources/index.ts +148 -0
  516. package/src/work-sources/manager.ts +413 -0
  517. package/src/work-sources/registry.ts +178 -0
  518. package/src/work-sources/types.ts +161 -0
  519. package/tsconfig.json +9 -0
  520. package/vitest.config.ts +19 -0
@@ -0,0 +1,277 @@
1
+ /**
2
+ * Schedule Runner for executing triggered schedules
3
+ *
4
+ * Handles the actual execution of scheduled work by:
5
+ * 1. Fetching work items from work sources (if configured)
6
+ * 2. Building prompts from schedule config and work items
7
+ * 3. Invoking the JobExecutor to run the agent
8
+ * 4. Updating schedule state and reporting outcomes
9
+ */
10
+ import { JobExecutor } from "../runner/index.js";
11
+ import { updateScheduleState, } from "./schedule-state.js";
12
+ import { calculateNextTrigger } from "./interval.js";
13
+ // =============================================================================
14
+ // Default Logger
15
+ // =============================================================================
16
+ const defaultLogger = {
17
+ debug: (message) => console.debug(`[schedule-runner] ${message}`),
18
+ info: (message) => console.info(`[schedule-runner] ${message}`),
19
+ warn: (message) => console.warn(`[schedule-runner] ${message}`),
20
+ error: (message) => console.error(`[schedule-runner] ${message}`),
21
+ };
22
+ // =============================================================================
23
+ // Build Schedule Prompt
24
+ // =============================================================================
25
+ /**
26
+ * Build the prompt for a scheduled run
27
+ *
28
+ * Constructs the prompt by combining:
29
+ * 1. The schedule's configured prompt (if any)
30
+ * 2. Work item details (if a work item was fetched)
31
+ *
32
+ * @param schedule - The schedule configuration
33
+ * @param workItem - Optional work item fetched from work source
34
+ * @returns The constructed prompt string
35
+ *
36
+ * @example Without work item
37
+ * ```typescript
38
+ * const prompt = buildSchedulePrompt(
39
+ * { type: 'interval', interval: '1h', prompt: 'Check for updates' }
40
+ * );
41
+ * // => "Check for updates"
42
+ * ```
43
+ *
44
+ * @example With work item
45
+ * ```typescript
46
+ * const prompt = buildSchedulePrompt(
47
+ * { type: 'interval', interval: '1h', prompt: 'Process this issue:' },
48
+ * { title: 'Fix bug', description: 'There is a bug in auth.ts', ... }
49
+ * );
50
+ * // => "Process this issue:\n\n## Work Item: Fix bug\n\nThere is a bug in auth.ts\n\n..."
51
+ * ```
52
+ */
53
+ export function buildSchedulePrompt(schedule, workItem) {
54
+ const parts = [];
55
+ // Add schedule prompt if configured
56
+ if (schedule.prompt) {
57
+ parts.push(schedule.prompt);
58
+ }
59
+ // Add work item details if provided
60
+ if (workItem) {
61
+ const workItemSection = formatWorkItem(workItem);
62
+ parts.push(workItemSection);
63
+ }
64
+ // If no prompt and no work item, provide a default
65
+ if (parts.length === 0) {
66
+ return "Execute scheduled task.";
67
+ }
68
+ return parts.join("\n\n");
69
+ }
70
+ /**
71
+ * Format a work item for inclusion in a prompt
72
+ */
73
+ function formatWorkItem(workItem) {
74
+ const lines = [];
75
+ lines.push(`## Work Item: ${workItem.title}`);
76
+ lines.push("");
77
+ if (workItem.description) {
78
+ lines.push(workItem.description);
79
+ lines.push("");
80
+ }
81
+ // Add metadata
82
+ const metadata = [];
83
+ metadata.push(`- **Source:** ${workItem.source}`);
84
+ metadata.push(`- **ID:** ${workItem.externalId}`);
85
+ metadata.push(`- **Priority:** ${workItem.priority}`);
86
+ if (workItem.labels.length > 0) {
87
+ metadata.push(`- **Labels:** ${workItem.labels.join(", ")}`);
88
+ }
89
+ if (workItem.url) {
90
+ metadata.push(`- **URL:** ${workItem.url}`);
91
+ }
92
+ lines.push(metadata.join("\n"));
93
+ return lines.join("\n");
94
+ }
95
+ // =============================================================================
96
+ // Run Schedule
97
+ // =============================================================================
98
+ /**
99
+ * Execute a triggered schedule
100
+ *
101
+ * This function handles the complete lifecycle of a scheduled execution:
102
+ * 1. Updates schedule state to 'running'
103
+ * 2. Fetches work item from work source (if configured)
104
+ * 3. Builds the prompt from schedule config and work item
105
+ * 4. Invokes the JobExecutor to run the agent
106
+ * 5. Reports outcome to work source (if applicable)
107
+ * 6. Updates schedule state with last_run_at and next_run_at
108
+ *
109
+ * @param options - Options for running the schedule
110
+ * @returns Result of the schedule execution
111
+ *
112
+ * @example Basic usage
113
+ * ```typescript
114
+ * const result = await runSchedule({
115
+ * agent: resolvedAgent,
116
+ * scheduleName: 'hourly',
117
+ * schedule: { type: 'interval', interval: '1h', prompt: 'Check status' },
118
+ * scheduleState: { status: 'idle', last_run_at: null },
119
+ * stateDir: '.herdctl',
120
+ * sdkQuery: query,
121
+ * });
122
+ *
123
+ * console.log(`Job ${result.jobId} completed: ${result.success}`);
124
+ * ```
125
+ *
126
+ * @example With work source
127
+ * ```typescript
128
+ * const result = await runSchedule({
129
+ * agent: resolvedAgent,
130
+ * scheduleName: 'issue-processor',
131
+ * schedule: {
132
+ * type: 'interval',
133
+ * interval: '5m',
134
+ * prompt: 'Process this GitHub issue:',
135
+ * work_source: { type: 'github', owner: 'org', repo: 'repo' }
136
+ * },
137
+ * scheduleState: { status: 'idle', last_run_at: null },
138
+ * stateDir: '.herdctl',
139
+ * sdkQuery: query,
140
+ * workSourceManager: manager,
141
+ * });
142
+ *
143
+ * if (result.workItem) {
144
+ * console.log(`Processed work item: ${result.workItem.title}`);
145
+ * }
146
+ * ```
147
+ */
148
+ export async function runSchedule(options) {
149
+ const { agent, scheduleName, schedule, stateDir, sdkQuery, workSourceManager, logger = defaultLogger, executorOptions, } = options;
150
+ const stateLogger = { warn: logger.warn };
151
+ logger.info(`Running schedule ${agent.name}/${scheduleName}`);
152
+ // Step 1: Update schedule state to 'running'
153
+ await updateScheduleState(stateDir, agent.name, scheduleName, {
154
+ status: "running",
155
+ last_run_at: new Date().toISOString(),
156
+ }, { logger: stateLogger });
157
+ let workItem;
158
+ let processedWorkItem = false;
159
+ try {
160
+ // Step 2: Fetch work item if schedule has work_source configured
161
+ if (schedule.work_source && workSourceManager) {
162
+ logger.debug(`Fetching work item for ${agent.name}/${scheduleName} from ${schedule.work_source.type}`);
163
+ const workResult = await workSourceManager.getNextWorkItem(agent, {
164
+ autoClaim: true,
165
+ });
166
+ if (workResult.item && workResult.claimed) {
167
+ workItem = workResult.item;
168
+ processedWorkItem = true;
169
+ logger.info(`Claimed work item ${workItem.id}: ${workItem.title}`);
170
+ }
171
+ else if (workResult.item && !workResult.claimed) {
172
+ // Work item found but claim failed (race condition)
173
+ logger.warn(`Work item ${workResult.item.id} found but claim failed: ${workResult.claimResult?.reason}`);
174
+ }
175
+ else {
176
+ // No work available
177
+ logger.debug(`No work items available for ${agent.name}/${scheduleName}`);
178
+ }
179
+ }
180
+ // Step 3: Build the prompt
181
+ const prompt = buildSchedulePrompt(schedule, workItem);
182
+ // Step 4: Build trigger metadata
183
+ const triggerMetadata = {
184
+ triggerType: "interval",
185
+ schedule: scheduleName,
186
+ };
187
+ if (workItem) {
188
+ triggerMetadata.workItemId = workItem.id;
189
+ triggerMetadata.workItemTitle = workItem.title;
190
+ }
191
+ // Step 5: Execute the agent via JobExecutor
192
+ const executor = new JobExecutor(sdkQuery, executorOptions);
193
+ const runnerResult = await executor.execute({
194
+ agent,
195
+ prompt,
196
+ stateDir,
197
+ triggerType: "schedule",
198
+ schedule: scheduleName,
199
+ });
200
+ // Step 6: Report outcome to work source if we processed a work item
201
+ if (workItem && workSourceManager) {
202
+ const workResult = buildWorkResult(runnerResult);
203
+ try {
204
+ await workSourceManager.reportOutcome(workItem.id, workResult, {
205
+ agent,
206
+ });
207
+ logger.info(`Reported outcome for work item ${workItem.id}: ${workResult.outcome}`);
208
+ }
209
+ catch (reportError) {
210
+ logger.error(`Failed to report outcome for work item ${workItem.id}: ${reportError.message}`);
211
+ // Don't fail the overall run if reporting fails
212
+ }
213
+ }
214
+ // Step 7: Calculate next trigger time
215
+ const nextTrigger = schedule.interval
216
+ ? calculateNextTrigger(new Date(), schedule.interval)
217
+ : null;
218
+ // Step 8: Update schedule state with success
219
+ await updateScheduleState(stateDir, agent.name, scheduleName, {
220
+ status: "idle",
221
+ next_run_at: nextTrigger?.toISOString() ?? null,
222
+ last_error: runnerResult.success ? null : runnerResult.error?.message,
223
+ }, { logger: stateLogger });
224
+ logger.info(`Completed schedule ${agent.name}/${scheduleName}: ${runnerResult.success ? "success" : "failed"}`);
225
+ return {
226
+ ...runnerResult,
227
+ workItem,
228
+ processedWorkItem,
229
+ };
230
+ }
231
+ catch (error) {
232
+ const errorMessage = error instanceof Error ? error.message : String(error);
233
+ logger.error(`Error running schedule ${agent.name}/${scheduleName}: ${errorMessage}`);
234
+ // Release work item if we claimed one and execution failed unexpectedly
235
+ if (workItem && workSourceManager) {
236
+ try {
237
+ await workSourceManager.releaseWorkItem(workItem.id, {
238
+ agent,
239
+ reason: `Unexpected error: ${errorMessage}`,
240
+ addComment: true,
241
+ });
242
+ logger.info(`Released work item ${workItem.id} due to error`);
243
+ }
244
+ catch (releaseError) {
245
+ logger.error(`Failed to release work item ${workItem.id}: ${releaseError.message}`);
246
+ }
247
+ }
248
+ // Calculate next trigger time even on error
249
+ const nextTrigger = schedule.interval
250
+ ? calculateNextTrigger(new Date(), schedule.interval)
251
+ : null;
252
+ // Update schedule state with error
253
+ await updateScheduleState(stateDir, agent.name, scheduleName, {
254
+ status: "idle",
255
+ next_run_at: nextTrigger?.toISOString() ?? null,
256
+ last_error: errorMessage,
257
+ }, { logger: stateLogger });
258
+ // Re-throw to let caller handle
259
+ throw error;
260
+ }
261
+ }
262
+ // =============================================================================
263
+ // Helper Functions
264
+ // =============================================================================
265
+ /**
266
+ * Build a WorkResult from a RunnerResult for reporting to work sources
267
+ */
268
+ function buildWorkResult(runnerResult) {
269
+ const outcome = runnerResult.success ? "success" : "failure";
270
+ return {
271
+ outcome,
272
+ summary: runnerResult.summary ?? (runnerResult.success ? "Task completed successfully" : "Task failed"),
273
+ error: runnerResult.error?.message,
274
+ artifacts: runnerResult.jobId ? [`job:${runnerResult.jobId}`] : undefined,
275
+ };
276
+ }
277
+ //# sourceMappingURL=schedule-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-runner.js","sourceRoot":"","sources":["../../src/scheduler/schedule-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Schedule state management
3
+ *
4
+ * Provides functions for reading and updating schedule state within fleet state.
5
+ * Schedule state is stored per-agent in the `schedules` map within AgentState.
6
+ */
7
+ import { type ScheduleState } from "../state/schemas/fleet-state.js";
8
+ /**
9
+ * Logger interface for warning messages
10
+ */
11
+ export interface ScheduleStateLogger {
12
+ warn: (message: string) => void;
13
+ }
14
+ /**
15
+ * Options for schedule state operations
16
+ */
17
+ export interface ScheduleStateOptions {
18
+ /**
19
+ * Logger for warning messages
20
+ * Default: console.warn
21
+ */
22
+ logger?: ScheduleStateLogger;
23
+ }
24
+ /**
25
+ * Partial updates for schedule state
26
+ */
27
+ export type ScheduleStateUpdates = Partial<ScheduleState>;
28
+ /**
29
+ * Get the schedule state for a specific agent and schedule
30
+ *
31
+ * Returns default state if the agent or schedule doesn't exist.
32
+ *
33
+ * @param stateDir - Path to the state directory (e.g., .herdctl)
34
+ * @param agentName - Name of the agent
35
+ * @param scheduleName - Name of the schedule
36
+ * @param options - Options including logger
37
+ * @returns The schedule state, or default state if not found
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const state = await getScheduleState('.herdctl', 'my-agent', 'hourly');
42
+ * console.log(state.last_run_at);
43
+ * console.log(state.next_run_at);
44
+ * console.log(state.status);
45
+ * ```
46
+ */
47
+ export declare function getScheduleState(stateDir: string, agentName: string, scheduleName: string, options?: ScheduleStateOptions): Promise<ScheduleState>;
48
+ /**
49
+ * Update the schedule state for a specific agent and schedule
50
+ *
51
+ * This function:
52
+ * 1. Reads current fleet state
53
+ * 2. Applies partial updates to the specified schedule
54
+ * 3. Writes the updated state back atomically
55
+ *
56
+ * If the agent or schedule doesn't exist, it will be created.
57
+ *
58
+ * @param stateDir - Path to the state directory (e.g., .herdctl)
59
+ * @param agentName - Name of the agent
60
+ * @param scheduleName - Name of the schedule
61
+ * @param updates - Partial ScheduleState updates to apply
62
+ * @param options - Options including logger
63
+ * @returns The updated ScheduleState
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * // Mark schedule as running
68
+ * await updateScheduleState('.herdctl', 'my-agent', 'hourly', {
69
+ * status: 'running',
70
+ * last_run_at: new Date().toISOString(),
71
+ * });
72
+ *
73
+ * // Record error
74
+ * await updateScheduleState('.herdctl', 'my-agent', 'hourly', {
75
+ * status: 'idle',
76
+ * last_error: 'Container exited with code 1',
77
+ * });
78
+ *
79
+ * // Clear error
80
+ * await updateScheduleState('.herdctl', 'my-agent', 'hourly', {
81
+ * last_error: null,
82
+ * });
83
+ * ```
84
+ */
85
+ export declare function updateScheduleState(stateDir: string, agentName: string, scheduleName: string, updates: ScheduleStateUpdates, options?: ScheduleStateOptions): Promise<ScheduleState>;
86
+ /**
87
+ * Get all schedule states for a specific agent
88
+ *
89
+ * Returns an empty object if the agent doesn't exist or has no schedules.
90
+ *
91
+ * @param stateDir - Path to the state directory (e.g., .herdctl)
92
+ * @param agentName - Name of the agent
93
+ * @param options - Options including logger
94
+ * @returns Map of schedule names to their state
95
+ *
96
+ * @example
97
+ * ```typescript
98
+ * const schedules = await getAgentScheduleStates('.herdctl', 'my-agent');
99
+ * for (const [name, state] of Object.entries(schedules)) {
100
+ * console.log(`${name}: ${state.status}, last run: ${state.last_run_at}`);
101
+ * }
102
+ * ```
103
+ */
104
+ export declare function getAgentScheduleStates(stateDir: string, agentName: string, options?: ScheduleStateOptions): Promise<Record<string, ScheduleState>>;
105
+ //# sourceMappingURL=schedule-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-state.d.ts","sourceRoot":"","sources":["../../src/scheduler/schedule-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,iCAAiC,CAAC;AAIzC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AASD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAS1D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAexB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAuCxB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAUxC"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Schedule state management
3
+ *
4
+ * Provides functions for reading and updating schedule state within fleet state.
5
+ * Schedule state is stored per-agent in the `schedules` map within AgentState.
6
+ */
7
+ import { join } from "node:path";
8
+ import { createDefaultScheduleState, } from "../state/schemas/fleet-state.js";
9
+ import { readFleetState, writeFleetState } from "../state/fleet-state.js";
10
+ import { STATE_FILE_NAME } from "../state/types.js";
11
+ /**
12
+ * Default console logger
13
+ */
14
+ const defaultLogger = {
15
+ warn: (message) => console.warn(`[herdctl] ${message}`),
16
+ };
17
+ /**
18
+ * Get the state file path from a state directory
19
+ */
20
+ function getStateFilePath(stateDir) {
21
+ return join(stateDir, STATE_FILE_NAME);
22
+ }
23
+ /**
24
+ * Get the schedule state for a specific agent and schedule
25
+ *
26
+ * Returns default state if the agent or schedule doesn't exist.
27
+ *
28
+ * @param stateDir - Path to the state directory (e.g., .herdctl)
29
+ * @param agentName - Name of the agent
30
+ * @param scheduleName - Name of the schedule
31
+ * @param options - Options including logger
32
+ * @returns The schedule state, or default state if not found
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * const state = await getScheduleState('.herdctl', 'my-agent', 'hourly');
37
+ * console.log(state.last_run_at);
38
+ * console.log(state.next_run_at);
39
+ * console.log(state.status);
40
+ * ```
41
+ */
42
+ export async function getScheduleState(stateDir, agentName, scheduleName, options = {}) {
43
+ const stateFilePath = getStateFilePath(stateDir);
44
+ const fleetState = await readFleetState(stateFilePath, options);
45
+ const agentState = fleetState.agents[agentName];
46
+ if (!agentState || !agentState.schedules) {
47
+ return createDefaultScheduleState();
48
+ }
49
+ const scheduleState = agentState.schedules[scheduleName];
50
+ if (!scheduleState) {
51
+ return createDefaultScheduleState();
52
+ }
53
+ return scheduleState;
54
+ }
55
+ /**
56
+ * Update the schedule state for a specific agent and schedule
57
+ *
58
+ * This function:
59
+ * 1. Reads current fleet state
60
+ * 2. Applies partial updates to the specified schedule
61
+ * 3. Writes the updated state back atomically
62
+ *
63
+ * If the agent or schedule doesn't exist, it will be created.
64
+ *
65
+ * @param stateDir - Path to the state directory (e.g., .herdctl)
66
+ * @param agentName - Name of the agent
67
+ * @param scheduleName - Name of the schedule
68
+ * @param updates - Partial ScheduleState updates to apply
69
+ * @param options - Options including logger
70
+ * @returns The updated ScheduleState
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * // Mark schedule as running
75
+ * await updateScheduleState('.herdctl', 'my-agent', 'hourly', {
76
+ * status: 'running',
77
+ * last_run_at: new Date().toISOString(),
78
+ * });
79
+ *
80
+ * // Record error
81
+ * await updateScheduleState('.herdctl', 'my-agent', 'hourly', {
82
+ * status: 'idle',
83
+ * last_error: 'Container exited with code 1',
84
+ * });
85
+ *
86
+ * // Clear error
87
+ * await updateScheduleState('.herdctl', 'my-agent', 'hourly', {
88
+ * last_error: null,
89
+ * });
90
+ * ```
91
+ */
92
+ export async function updateScheduleState(stateDir, agentName, scheduleName, updates, options = {}) {
93
+ const stateFilePath = getStateFilePath(stateDir);
94
+ const fleetState = await readFleetState(stateFilePath, options);
95
+ // Get or create agent state
96
+ const currentAgentState = fleetState.agents[agentName] ?? { status: "idle" };
97
+ // Get current schedules map or create empty one
98
+ const currentSchedules = currentAgentState.schedules ?? {};
99
+ // Get current schedule state or create default
100
+ const currentScheduleState = currentSchedules[scheduleName] ?? createDefaultScheduleState();
101
+ // Merge updates
102
+ const updatedScheduleState = {
103
+ ...currentScheduleState,
104
+ ...updates,
105
+ };
106
+ // Update the fleet state
107
+ const updatedFleetState = {
108
+ ...fleetState,
109
+ agents: {
110
+ ...fleetState.agents,
111
+ [agentName]: {
112
+ ...currentAgentState,
113
+ schedules: {
114
+ ...currentSchedules,
115
+ [scheduleName]: updatedScheduleState,
116
+ },
117
+ },
118
+ },
119
+ };
120
+ // Write back
121
+ await writeFleetState(stateFilePath, updatedFleetState);
122
+ return updatedScheduleState;
123
+ }
124
+ /**
125
+ * Get all schedule states for a specific agent
126
+ *
127
+ * Returns an empty object if the agent doesn't exist or has no schedules.
128
+ *
129
+ * @param stateDir - Path to the state directory (e.g., .herdctl)
130
+ * @param agentName - Name of the agent
131
+ * @param options - Options including logger
132
+ * @returns Map of schedule names to their state
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * const schedules = await getAgentScheduleStates('.herdctl', 'my-agent');
137
+ * for (const [name, state] of Object.entries(schedules)) {
138
+ * console.log(`${name}: ${state.status}, last run: ${state.last_run_at}`);
139
+ * }
140
+ * ```
141
+ */
142
+ export async function getAgentScheduleStates(stateDir, agentName, options = {}) {
143
+ const stateFilePath = getStateFilePath(stateDir);
144
+ const fleetState = await readFleetState(stateFilePath, options);
145
+ const agentState = fleetState.agents[agentName];
146
+ if (!agentState || !agentState.schedules) {
147
+ return {};
148
+ }
149
+ return agentState.schedules;
150
+ }
151
+ //# sourceMappingURL=schedule-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-state.js","sourceRoot":"","sources":["../../src/scheduler/schedule-state.ts"],"names":[],"mappings":"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"}