@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,699 @@
1
+ /**
2
+ * FleetManager class for library consumers
3
+ *
4
+ * Provides a simple, high-level API to initialize and run a fleet of agents
5
+ * with minimal configuration. Handles config loading, state directory setup,
6
+ * and scheduler orchestration internally.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { FleetManager } from '@herdctl/core';
11
+ *
12
+ * const manager = new FleetManager({
13
+ * configPath: './herdctl.yaml',
14
+ * stateDir: './.herdctl',
15
+ * });
16
+ *
17
+ * await manager.initialize();
18
+ * await manager.start();
19
+ *
20
+ * // Later...
21
+ * await manager.stop();
22
+ * ```
23
+ */
24
+ import { EventEmitter } from "node:events";
25
+ import { type ResolvedConfig, type ResolvedAgent } from "../config/index.js";
26
+ import type { FleetManagerOptions, FleetManagerState, ConfigReloadedPayload, AgentStartedPayload, AgentStoppedPayload, ScheduleSkippedPayload, JobCreatedPayload, JobOutputPayload, JobCompletedPayload, JobFailedPayload, JobCancelledPayload, JobForkedPayload, FleetStatus, AgentInfo, ScheduleInfo, TriggerOptions, TriggerResult, JobModifications, CancelJobResult, ForkJobResult, FleetManagerStopOptions, LogEntry, LogStreamOptions } from "./types.js";
27
+ /**
28
+ * FleetManager provides a simple API to manage a fleet of agents
29
+ *
30
+ * This class is the primary entry point for library consumers who want to
31
+ * run herdctl programmatically. It handles:
32
+ *
33
+ * - Configuration loading and validation
34
+ * - State directory initialization
35
+ * - Scheduler lifecycle management
36
+ * - Event emission for monitoring
37
+ *
38
+ * ## Lifecycle
39
+ *
40
+ * 1. **Construction**: Create with options (configPath, stateDir)
41
+ * 2. **Initialize**: Call `initialize()` to load config and prepare state
42
+ * 3. **Start**: Call `start()` to begin scheduler and process schedules
43
+ * 4. **Stop**: Call `stop()` to gracefully shut down
44
+ *
45
+ * ## Events
46
+ *
47
+ * The FleetManager emits events for monitoring:
48
+ * - `initialized` - After successful initialization
49
+ * - `started` - When the scheduler starts running
50
+ * - `stopped` - When the scheduler stops
51
+ * - `error` - When an error occurs
52
+ * - `schedule:trigger` - When a schedule triggers an agent
53
+ * - `schedule:complete` - When an agent run completes
54
+ * - `schedule:error` - When an agent run fails
55
+ *
56
+ * ## Typed Events (US-2)
57
+ *
58
+ * The FleetManager also supports strongly-typed events via TypeScript:
59
+ * - `config:reloaded` - When configuration is hot-reloaded
60
+ * - `agent:started` - When an agent is started
61
+ * - `agent:stopped` - When an agent is stopped
62
+ * - `schedule:triggered` - When a schedule triggers (with payload)
63
+ * - `schedule:skipped` - When a schedule is skipped
64
+ * - `job:created` - When a job is created
65
+ * - `job:output` - When a job produces output
66
+ * - `job:completed` - When a job completes successfully
67
+ * - `job:failed` - When a job fails
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * // Subscribe to typed events
72
+ * manager.on('job:created', (payload) => {
73
+ * console.log(`Job ${payload.job.id} created for ${payload.agentName}`);
74
+ * });
75
+ *
76
+ * manager.on('job:output', (payload) => {
77
+ * process.stdout.write(payload.output);
78
+ * });
79
+ *
80
+ * manager.on('job:completed', (payload) => {
81
+ * console.log(`Job completed in ${payload.durationSeconds}s`);
82
+ * });
83
+ * ```
84
+ */
85
+ export declare class FleetManager extends EventEmitter {
86
+ private readonly configPath?;
87
+ private readonly stateDir;
88
+ private readonly logger;
89
+ private readonly checkInterval;
90
+ private status;
91
+ private config;
92
+ private stateDirInfo;
93
+ private scheduler;
94
+ private initializedAt;
95
+ private startedAt;
96
+ private stoppedAt;
97
+ private lastError;
98
+ /**
99
+ * Create a new FleetManager instance
100
+ *
101
+ * @param options - Configuration options
102
+ *
103
+ * @example
104
+ * ```typescript
105
+ * // Minimal configuration
106
+ * const manager = new FleetManager({
107
+ * configPath: './herdctl.yaml',
108
+ * stateDir: './.herdctl',
109
+ * });
110
+ *
111
+ * // With custom logger
112
+ * const manager = new FleetManager({
113
+ * configPath: './herdctl.yaml',
114
+ * stateDir: './.herdctl',
115
+ * logger: myLogger,
116
+ * checkInterval: 5000, // 5 seconds
117
+ * });
118
+ * ```
119
+ */
120
+ constructor(options: FleetManagerOptions);
121
+ /**
122
+ * Get the current fleet manager state
123
+ *
124
+ * This provides a snapshot of the fleet manager's current status and
125
+ * configuration for monitoring purposes.
126
+ */
127
+ get state(): FleetManagerState;
128
+ /**
129
+ * Get the loaded configuration
130
+ *
131
+ * @returns The resolved configuration, or null if not initialized
132
+ */
133
+ getConfig(): ResolvedConfig | null;
134
+ /**
135
+ * Get the loaded agents
136
+ *
137
+ * @returns Array of resolved agents, or empty array if not initialized
138
+ */
139
+ getAgents(): ResolvedAgent[];
140
+ /**
141
+ * Get overall fleet status
142
+ *
143
+ * Returns a comprehensive snapshot of the fleet state including:
144
+ * - Current state and uptime
145
+ * - Agent counts (total, idle, running, error)
146
+ * - Job counts
147
+ * - Scheduler information
148
+ *
149
+ * This method works whether the fleet is running or stopped.
150
+ *
151
+ * @returns A consistent FleetStatus snapshot
152
+ *
153
+ * @example
154
+ * ```typescript
155
+ * const status = await manager.getFleetStatus();
156
+ * console.log(`Fleet: ${status.state}`);
157
+ * console.log(`Uptime: ${status.uptimeSeconds}s`);
158
+ * console.log(`Running jobs: ${status.counts.runningJobs}`);
159
+ * ```
160
+ */
161
+ getFleetStatus(): Promise<FleetStatus>;
162
+ /**
163
+ * Get information about all configured agents
164
+ *
165
+ * Returns detailed information for each agent including:
166
+ * - Current status and job information
167
+ * - Schedule details with runtime state
168
+ * - Configuration details
169
+ *
170
+ * This method works whether the fleet is running or stopped.
171
+ *
172
+ * @returns Array of AgentInfo objects with current state
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * const agents = await manager.getAgentInfo();
177
+ * for (const agent of agents) {
178
+ * console.log(`${agent.name}: ${agent.status}`);
179
+ * console.log(` Schedules: ${agent.scheduleCount}`);
180
+ * }
181
+ * ```
182
+ */
183
+ getAgentInfo(): Promise<AgentInfo[]>;
184
+ /**
185
+ * Get information about a specific agent by name
186
+ *
187
+ * Returns detailed information for the specified agent including:
188
+ * - Current status and job information
189
+ * - Schedule details with runtime state
190
+ * - Configuration details
191
+ *
192
+ * This method works whether the fleet is running or stopped.
193
+ *
194
+ * @param name - The agent name to look up
195
+ * @returns AgentInfo for the specified agent
196
+ * @throws {AgentNotFoundError} If no agent with that name exists
197
+ *
198
+ * @example
199
+ * ```typescript
200
+ * const agent = await manager.getAgentInfoByName('my-agent');
201
+ * console.log(`Agent: ${agent.name}`);
202
+ * console.log(`Status: ${agent.status}`);
203
+ * console.log(`Running: ${agent.runningCount}/${agent.maxConcurrent}`);
204
+ * ```
205
+ */
206
+ getAgentInfoByName(name: string): Promise<AgentInfo>;
207
+ /**
208
+ * Read fleet state from disk for status queries
209
+ *
210
+ * This provides a consistent snapshot of the fleet state.
211
+ */
212
+ private readFleetStateSnapshot;
213
+ /**
214
+ * Build AgentInfo from configuration and state
215
+ */
216
+ private buildAgentInfo;
217
+ /**
218
+ * Build schedule info list from agent configuration and state
219
+ */
220
+ private buildScheduleInfoList;
221
+ /**
222
+ * Compute fleet counts from agent info list
223
+ */
224
+ private computeFleetCounts;
225
+ /**
226
+ * Get all schedules across all agents
227
+ *
228
+ * Returns a list of all configured schedules with their current state,
229
+ * including next trigger times.
230
+ *
231
+ * @returns Array of ScheduleInfo objects with current state
232
+ *
233
+ * @example
234
+ * ```typescript
235
+ * const schedules = await manager.getSchedules();
236
+ * for (const schedule of schedules) {
237
+ * console.log(`${schedule.agentName}/${schedule.name}: ${schedule.status}`);
238
+ * console.log(` Next run: ${schedule.nextRunAt}`);
239
+ * }
240
+ * ```
241
+ */
242
+ getSchedules(): Promise<ScheduleInfo[]>;
243
+ /**
244
+ * Get a specific schedule by agent name and schedule name
245
+ *
246
+ * @param agentName - The name of the agent
247
+ * @param scheduleName - The name of the schedule
248
+ * @returns The schedule info with current state
249
+ * @throws {AgentNotFoundError} If the agent doesn't exist
250
+ * @throws {ScheduleNotFoundError} If the schedule doesn't exist
251
+ *
252
+ * @example
253
+ * ```typescript
254
+ * const schedule = await manager.getSchedule('my-agent', 'hourly');
255
+ * console.log(`Status: ${schedule.status}`);
256
+ * console.log(`Last run: ${schedule.lastRunAt}`);
257
+ * console.log(`Next run: ${schedule.nextRunAt}`);
258
+ * ```
259
+ */
260
+ getSchedule(agentName: string, scheduleName: string): Promise<ScheduleInfo>;
261
+ /**
262
+ * Enable a disabled schedule
263
+ *
264
+ * Enables a schedule that was previously disabled, allowing it to trigger
265
+ * again on its configured interval. The enabled state is persisted to the
266
+ * state directory and survives restarts.
267
+ *
268
+ * @param agentName - The name of the agent
269
+ * @param scheduleName - The name of the schedule
270
+ * @returns The updated schedule info
271
+ * @throws {AgentNotFoundError} If the agent doesn't exist
272
+ * @throws {ScheduleNotFoundError} If the schedule doesn't exist
273
+ *
274
+ * @example
275
+ * ```typescript
276
+ * // Enable a previously disabled schedule
277
+ * const schedule = await manager.enableSchedule('my-agent', 'hourly');
278
+ * console.log(`Schedule status: ${schedule.status}`); // 'idle'
279
+ * ```
280
+ */
281
+ enableSchedule(agentName: string, scheduleName: string): Promise<ScheduleInfo>;
282
+ /**
283
+ * Disable a schedule
284
+ *
285
+ * Disables a schedule, preventing it from triggering on its configured
286
+ * interval. The schedule remains in the configuration but won't run until
287
+ * re-enabled. The disabled state is persisted to the state directory and
288
+ * survives restarts.
289
+ *
290
+ * @param agentName - The name of the agent
291
+ * @param scheduleName - The name of the schedule
292
+ * @returns The updated schedule info
293
+ * @throws {AgentNotFoundError} If the agent doesn't exist
294
+ * @throws {ScheduleNotFoundError} If the schedule doesn't exist
295
+ *
296
+ * @example
297
+ * ```typescript
298
+ * // Disable a schedule temporarily
299
+ * const schedule = await manager.disableSchedule('my-agent', 'hourly');
300
+ * console.log(`Schedule status: ${schedule.status}`); // 'disabled'
301
+ *
302
+ * // Later, re-enable it
303
+ * await manager.enableSchedule('my-agent', 'hourly');
304
+ * ```
305
+ */
306
+ disableSchedule(agentName: string, scheduleName: string): Promise<ScheduleInfo>;
307
+ /**
308
+ * Initialize the fleet manager
309
+ *
310
+ * This method:
311
+ * 1. Loads and validates the configuration file
312
+ * 2. Initializes the state directory structure
313
+ * 3. Prepares the scheduler (but does not start it)
314
+ *
315
+ * After initialization, the fleet manager is ready to start.
316
+ *
317
+ * @throws {FleetManagerStateError} If already initialized or running
318
+ * @throws {FleetManagerConfigError} If configuration is invalid or not found
319
+ * @throws {FleetManagerStateDirError} If state directory cannot be created
320
+ *
321
+ * @example
322
+ * ```typescript
323
+ * const manager = new FleetManager({ ... });
324
+ * await manager.initialize();
325
+ * console.log(`Loaded ${manager.state.agentCount} agents`);
326
+ * ```
327
+ */
328
+ initialize(): Promise<void>;
329
+ /**
330
+ * Start the fleet manager
331
+ *
332
+ * This begins the scheduler, which will:
333
+ * 1. Check agent schedules at the configured interval
334
+ * 2. Trigger agents when their schedules are due
335
+ * 3. Track schedule state in the state directory
336
+ *
337
+ * @throws {FleetManagerStateError} If not initialized
338
+ *
339
+ * @example
340
+ * ```typescript
341
+ * await manager.initialize();
342
+ * await manager.start();
343
+ *
344
+ * // The manager is now running and processing schedules
345
+ * manager.on('schedule:trigger', (agent, schedule) => {
346
+ * console.log(`Triggered ${agent}/${schedule}`);
347
+ * });
348
+ * ```
349
+ */
350
+ start(): Promise<void>;
351
+ /**
352
+ * Stop the fleet manager gracefully
353
+ *
354
+ * This will:
355
+ * 1. Signal the scheduler to stop accepting new triggers
356
+ * 2. Wait for running jobs to complete (with timeout)
357
+ * 3. If timeout is reached and cancelOnTimeout is true, cancel remaining jobs
358
+ * 4. Persist all state before shutdown completes
359
+ * 5. Emit 'stopped' event when complete
360
+ *
361
+ * @param options - Stop options for controlling shutdown behavior
362
+ * @throws {FleetManagerShutdownError} If shutdown times out and cancelOnTimeout is false
363
+ *
364
+ * @example
365
+ * ```typescript
366
+ * // Normal shutdown - wait for jobs with default 30s timeout
367
+ * await manager.stop();
368
+ *
369
+ * // Shutdown with custom timeout
370
+ * await manager.stop({ timeout: 60000 });
371
+ *
372
+ * // Shutdown without waiting for jobs (not recommended)
373
+ * await manager.stop({ waitForJobs: false });
374
+ *
375
+ * // Cancel jobs if they don't complete in time
376
+ * await manager.stop({
377
+ * timeout: 30000,
378
+ * cancelOnTimeout: true,
379
+ * cancelTimeout: 10000,
380
+ * });
381
+ * ```
382
+ */
383
+ stop(options?: FleetManagerStopOptions): Promise<void>;
384
+ /**
385
+ * Reload configuration without restarting the fleet
386
+ *
387
+ * This method provides hot configuration reload capability:
388
+ * 1. Loads and validates the new configuration
389
+ * 2. If validation fails, keeps the old configuration (fails gracefully)
390
+ * 3. Running jobs continue with their original configuration
391
+ * 4. New jobs will use the new configuration
392
+ * 5. Updates the scheduler with new agent definitions and schedules
393
+ * 6. Emits a 'config:reloaded' event with a list of changes
394
+ *
395
+ * @returns The reload result with change details
396
+ * @throws {InvalidStateError} If the fleet manager is not initialized
397
+ * @throws {FleetManagerConfigError} If the new configuration is invalid (re-thrown after logging)
398
+ *
399
+ * @example
400
+ * ```typescript
401
+ * // Reload configuration
402
+ * const result = await manager.reload();
403
+ * console.log(`Reloaded with ${result.changes.length} changes`);
404
+ *
405
+ * // Subscribe to reload events
406
+ * manager.on('config:reloaded', (payload) => {
407
+ * console.log(`Config reloaded: ${payload.changes.length} changes`);
408
+ * for (const change of payload.changes) {
409
+ * console.log(` ${change.type} ${change.category}: ${change.name}`);
410
+ * }
411
+ * });
412
+ * ```
413
+ */
414
+ reload(): Promise<ConfigReloadedPayload>;
415
+ /**
416
+ * Compute the list of changes between old and new configuration
417
+ */
418
+ private computeConfigChanges;
419
+ /**
420
+ * Check if an agent configuration has been modified
421
+ * Returns a description of what changed, or null if not modified
422
+ */
423
+ private isAgentModified;
424
+ /**
425
+ * Check if a schedule configuration has been modified
426
+ */
427
+ private isScheduleModified;
428
+ /**
429
+ * Get a description of what changed in a schedule
430
+ */
431
+ private getScheduleModificationDetails;
432
+ /**
433
+ * Cancel all running jobs during shutdown
434
+ *
435
+ * @param cancelTimeout - Timeout for each job cancellation
436
+ */
437
+ private cancelRunningJobs;
438
+ /**
439
+ * Persist shutdown state to ensure all state is saved before completing
440
+ */
441
+ private persistShutdownState;
442
+ /**
443
+ * Manually trigger an agent outside its normal schedule
444
+ *
445
+ * This method allows you to trigger an agent on-demand for testing or
446
+ * handling urgent situations. You can optionally specify a schedule to use
447
+ * for configuration (prompt, work source, etc.) or pass runtime options
448
+ * to override defaults.
449
+ *
450
+ * @param agentName - Name of the agent to trigger
451
+ * @param scheduleName - Optional schedule name to use for configuration
452
+ * @param options - Optional runtime options to override defaults
453
+ * @returns The created job information
454
+ * @throws {InvalidStateError} If the fleet manager is not initialized
455
+ * @throws {AgentNotFoundError} If the agent doesn't exist
456
+ * @throws {ScheduleNotFoundError} If the specified schedule doesn't exist
457
+ * @throws {ConcurrencyLimitError} If the agent is at capacity and bypassConcurrencyLimit is false
458
+ *
459
+ * @example
460
+ * ```typescript
461
+ * // Trigger with agent defaults
462
+ * const job = await manager.trigger('my-agent');
463
+ *
464
+ * // Trigger a specific schedule
465
+ * const job = await manager.trigger('my-agent', 'hourly');
466
+ *
467
+ * // Trigger with custom prompt
468
+ * const job = await manager.trigger('my-agent', undefined, {
469
+ * prompt: 'Review the latest security updates',
470
+ * });
471
+ *
472
+ * // Force trigger even at capacity
473
+ * const job = await manager.trigger('my-agent', undefined, {
474
+ * bypassConcurrencyLimit: true,
475
+ * });
476
+ * ```
477
+ */
478
+ trigger(agentName: string, scheduleName?: string, options?: TriggerOptions): Promise<TriggerResult>;
479
+ /**
480
+ * Cancel a running job gracefully
481
+ *
482
+ * This method cancels a running job by first sending SIGTERM to allow
483
+ * graceful shutdown. If the job doesn't terminate within the timeout,
484
+ * it will be forcefully killed with SIGKILL.
485
+ *
486
+ * @param jobId - ID of the job to cancel
487
+ * @param options - Optional cancellation options
488
+ * @param options.timeout - Time in ms to wait for graceful shutdown (default: 10000)
489
+ * @returns Result of the cancellation operation
490
+ * @throws {InvalidStateError} If the fleet manager is not initialized
491
+ * @throws {JobNotFoundError} If the job doesn't exist
492
+ *
493
+ * @example
494
+ * ```typescript
495
+ * // Cancel with default timeout
496
+ * const result = await manager.cancelJob('job-2024-01-15-abc123');
497
+ * console.log(`Job cancelled: ${result.terminationType}`);
498
+ *
499
+ * // Cancel with custom timeout
500
+ * const result = await manager.cancelJob('job-2024-01-15-abc123', {
501
+ * timeout: 30000, // 30 seconds
502
+ * });
503
+ * ```
504
+ */
505
+ cancelJob(jobId: string, options?: {
506
+ timeout?: number;
507
+ }): Promise<CancelJobResult>;
508
+ /**
509
+ * Fork a job to create a new job based on an existing one
510
+ *
511
+ * This method creates a new job that is based on an existing job's
512
+ * configuration. The new job will have the same agent and can optionally
513
+ * have modifications applied (different prompt, schedule, etc.).
514
+ *
515
+ * If the original job has a session ID, the new job will fork from that
516
+ * session, preserving conversation context.
517
+ *
518
+ * @param jobId - ID of the job to fork
519
+ * @param modifications - Optional modifications to apply to the forked job
520
+ * @returns Result of the fork operation including the new job ID
521
+ * @throws {InvalidStateError} If the fleet manager is not initialized
522
+ * @throws {JobNotFoundError} If the original job doesn't exist
523
+ * @throws {JobForkError} If the job cannot be forked (e.g., no session)
524
+ *
525
+ * @example
526
+ * ```typescript
527
+ * // Fork with same configuration
528
+ * const result = await manager.forkJob('job-2024-01-15-abc123');
529
+ * console.log(`Forked to: ${result.jobId}`);
530
+ *
531
+ * // Fork with modified prompt
532
+ * const result = await manager.forkJob('job-2024-01-15-abc123', {
533
+ * prompt: 'Continue the previous task but focus on testing',
534
+ * });
535
+ *
536
+ * // Fork with different schedule
537
+ * const result = await manager.forkJob('job-2024-01-15-abc123', {
538
+ * schedule: 'nightly',
539
+ * });
540
+ * ```
541
+ */
542
+ forkJob(jobId: string, modifications?: JobModifications): Promise<ForkJobResult>;
543
+ /**
544
+ * Stream all fleet logs as an async iterable
545
+ *
546
+ * Provides a unified stream of logs from all sources in the fleet including
547
+ * agents, jobs, and the scheduler. Logs can be filtered by level and optionally
548
+ * by agent or job.
549
+ *
550
+ * For completed jobs, this will replay their history (if includeHistory is true)
551
+ * before streaming new logs from running jobs.
552
+ *
553
+ * @param options - Options for filtering and configuring the stream
554
+ * @returns An async iterable of LogEntry objects
555
+ *
556
+ * @example
557
+ * ```typescript
558
+ * // Stream all info+ logs
559
+ * for await (const log of manager.streamLogs()) {
560
+ * console.log(`[${log.level}] ${log.message}`);
561
+ * }
562
+ *
563
+ * // Stream only errors for a specific agent
564
+ * for await (const log of manager.streamLogs({
565
+ * level: 'error',
566
+ * agentName: 'my-agent',
567
+ * })) {
568
+ * console.error(log.message);
569
+ * }
570
+ * ```
571
+ */
572
+ streamLogs(options?: LogStreamOptions): AsyncIterable<LogEntry>;
573
+ /**
574
+ * Stream output from a specific job as an async iterable
575
+ *
576
+ * Provides a stream of log entries for a specific job. For completed jobs,
577
+ * this will replay the job's history and then complete. For running jobs,
578
+ * it will continue streaming until the job completes.
579
+ *
580
+ * @param jobId - The ID of the job to stream output from
581
+ * @returns An async iterable of LogEntry objects
582
+ * @throws {JobNotFoundError} If the job doesn't exist
583
+ *
584
+ * @example
585
+ * ```typescript
586
+ * // Stream job output
587
+ * for await (const log of manager.streamJobOutput('job-2024-01-15-abc123')) {
588
+ * console.log(`[${log.level}] ${log.message}`);
589
+ * }
590
+ * ```
591
+ */
592
+ streamJobOutput(jobId: string): AsyncIterable<LogEntry>;
593
+ /**
594
+ * Stream logs for a specific agent as an async iterable
595
+ *
596
+ * Provides a stream of log entries for all jobs belonging to a specific agent.
597
+ * For completed jobs, this will replay their history. For running jobs, it
598
+ * will continue streaming until the iterator is stopped.
599
+ *
600
+ * @param agentName - The name of the agent to stream logs for
601
+ * @returns An async iterable of LogEntry objects
602
+ * @throws {AgentNotFoundError} If the agent doesn't exist in the configuration
603
+ *
604
+ * @example
605
+ * ```typescript
606
+ * // Stream all logs for an agent
607
+ * for await (const log of manager.streamAgentLogs('my-agent')) {
608
+ * console.log(`[${log.jobId}] ${log.message}`);
609
+ * }
610
+ * ```
611
+ */
612
+ streamAgentLogs(agentName: string): AsyncIterable<LogEntry>;
613
+ /**
614
+ * Convert a job output message to a LogEntry
615
+ */
616
+ private jobOutputToLogEntry;
617
+ /**
618
+ * Determine if a log entry should be yielded based on filters
619
+ */
620
+ private shouldYieldLog;
621
+ /**
622
+ * Load configuration with proper error handling
623
+ */
624
+ private loadConfiguration;
625
+ /**
626
+ * Initialize state directory with proper error handling
627
+ */
628
+ private initializeStateDir;
629
+ /**
630
+ * Start the scheduler asynchronously (don't block on the loop)
631
+ */
632
+ private startSchedulerAsync;
633
+ /**
634
+ * Handle schedule trigger callback from scheduler
635
+ */
636
+ private handleScheduleTrigger;
637
+ /**
638
+ * Emit a config:reloaded event
639
+ *
640
+ * Called when configuration is hot-reloaded.
641
+ */
642
+ emitConfigReloaded(payload: ConfigReloadedPayload): void;
643
+ /**
644
+ * Emit an agent:started event
645
+ *
646
+ * Called when an agent is started/registered with the fleet.
647
+ */
648
+ emitAgentStarted(payload: AgentStartedPayload): void;
649
+ /**
650
+ * Emit an agent:stopped event
651
+ *
652
+ * Called when an agent is stopped/unregistered from the fleet.
653
+ */
654
+ emitAgentStopped(payload: AgentStoppedPayload): void;
655
+ /**
656
+ * Emit a schedule:skipped event
657
+ *
658
+ * Called when a schedule check is skipped (already running, disabled, etc.).
659
+ */
660
+ emitScheduleSkipped(payload: ScheduleSkippedPayload): void;
661
+ /**
662
+ * Emit a job:created event
663
+ *
664
+ * Called when a new job is created.
665
+ */
666
+ emitJobCreated(payload: JobCreatedPayload): void;
667
+ /**
668
+ * Emit a job:output event
669
+ *
670
+ * Called when a job produces output during execution.
671
+ * This enables real-time streaming of output to UIs.
672
+ */
673
+ emitJobOutput(payload: JobOutputPayload): void;
674
+ /**
675
+ * Emit a job:completed event
676
+ *
677
+ * Called when a job completes successfully.
678
+ */
679
+ emitJobCompleted(payload: JobCompletedPayload): void;
680
+ /**
681
+ * Emit a job:failed event
682
+ *
683
+ * Called when a job fails.
684
+ */
685
+ emitJobFailed(payload: JobFailedPayload): void;
686
+ /**
687
+ * Emit a job:cancelled event (US-6)
688
+ *
689
+ * Called when a job is cancelled.
690
+ */
691
+ emitJobCancelled(payload: JobCancelledPayload): void;
692
+ /**
693
+ * Emit a job:forked event (US-6)
694
+ *
695
+ * Called when a job is forked to create a new job.
696
+ */
697
+ emitJobForked(payload: JobForkedPayload): void;
698
+ }
699
+ //# sourceMappingURL=fleet-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet-manager.d.ts","sourceRoot":"","sources":["../../src/fleet-manager/fleet-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EAGnB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EAIjB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EAEnB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAEhB,mBAAmB,EACnB,gBAAgB,EAEhB,WAAW,EACX,SAAS,EACT,YAAY,EAGZ,cAAc,EACd,aAAa,EAEb,gBAAgB,EAChB,eAAe,EACf,aAAa,EAEb,uBAAuB,EAGvB,QAAQ,EACR,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAgDpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAE5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAGvC,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,SAAS,CAA0B;IAG3C,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,SAAS,CAAuB;IAExC;;;;;;;;;;;;;;;;;;;;;OAqBG;gBACS,OAAO,EAAE,mBAAmB;IAYxC;;;;;OAKG;IACH,IAAI,KAAK,IAAI,iBAAiB,CAS7B;IAED;;;;OAIG;IACH,SAAS,IAAI,cAAc,GAAG,IAAI;IAIlC;;;;OAIG;IACH,SAAS,IAAI,aAAa,EAAE;IAQ5B;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAsC5C;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAY1C;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAmB1D;;;;OAIG;YACW,sBAAsB;IAWpC;;OAEG;IACH,OAAO,CAAC,cAAc;IAkCtB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8C1B;;;;;;;;;;;;;;;;OAgBG;IACG,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAe7C;;;;;;;;;;;;;;;;OAgBG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAqCjF;;;;;;;;;;;;;;;;;;;OAmBG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAoCpF;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAwCrF;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmDjC;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6D5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,MAAM,IAAI,OAAO,CAAC,qBAAqB,CAAC;IA+D9C;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA8H5B;;;OAGG;IACH,OAAO,CAAC,eAAe;IA2CvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAsBtC;;;;OAIG;YACW,iBAAiB;IAsC/B;;OAEG;YACW,oBAAoB;IAgClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACG,OAAO,CACX,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,CAAC;IAsFzB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,SAAS,CACb,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7B,OAAO,CAAC,eAAe,CAAC;IA8G3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,OAAO,CACX,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,gBAAgB,GAC/B,OAAO,CAAC,aAAa,CAAC;IA8EzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACI,UAAU,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC;IAsGtE;;;;;;;;;;;;;;;;;;OAkBG;IACI,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAyI9D;;;;;;;;;;;;;;;;;;OAkBG;IACI,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAsBlE;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAmCtB;;OAEG;YACW,iBAAiB;IA4B/B;;OAEG;YACW,kBAAkB;IAYhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;OAEG;YACW,qBAAqB;IAwCnC;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAIxD;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAIpD;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAIpD;;;;OAIG;IACH,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAI1D;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIhD;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAI9C;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAIpD;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAI9C;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAIpD;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;CAG/C"}