@herdctl/core 0.0.1 → 0.1.0

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 (284) hide show
  1. package/dist/config/__tests__/agent.test.js +61 -13
  2. package/dist/config/__tests__/agent.test.js.map +1 -1
  3. package/dist/config/__tests__/merge.test.js +10 -3
  4. package/dist/config/__tests__/merge.test.js.map +1 -1
  5. package/dist/config/__tests__/schema.test.js +350 -1
  6. package/dist/config/__tests__/schema.test.js.map +1 -1
  7. package/dist/config/index.d.ts +1 -1
  8. package/dist/config/index.d.ts.map +1 -1
  9. package/dist/config/index.js +3 -1
  10. package/dist/config/index.js.map +1 -1
  11. package/dist/config/schema.d.ts +841 -27
  12. package/dist/config/schema.d.ts.map +1 -1
  13. package/dist/config/schema.js +129 -10
  14. package/dist/config/schema.js.map +1 -1
  15. package/dist/fleet-manager/__tests__/coverage.test.js +14 -331
  16. package/dist/fleet-manager/__tests__/coverage.test.js.map +1 -1
  17. package/dist/fleet-manager/__tests__/errors.test.js +1 -49
  18. package/dist/fleet-manager/__tests__/errors.test.js.map +1 -1
  19. package/dist/fleet-manager/__tests__/integration.test.js +114 -0
  20. package/dist/fleet-manager/__tests__/integration.test.js.map +1 -1
  21. package/dist/fleet-manager/__tests__/job-control.test.js +13 -14
  22. package/dist/fleet-manager/__tests__/job-control.test.js.map +1 -1
  23. package/dist/fleet-manager/__tests__/reload.test.js +12 -2
  24. package/dist/fleet-manager/__tests__/reload.test.js.map +1 -1
  25. package/dist/fleet-manager/__tests__/status-queries.test.js +6 -0
  26. package/dist/fleet-manager/__tests__/status-queries.test.js.map +1 -1
  27. package/dist/fleet-manager/__tests__/trigger.test.js +10 -2
  28. package/dist/fleet-manager/__tests__/trigger.test.js.map +1 -1
  29. package/dist/fleet-manager/config-reload.d.ts +164 -0
  30. package/dist/fleet-manager/config-reload.d.ts.map +1 -0
  31. package/dist/fleet-manager/config-reload.js +445 -0
  32. package/dist/fleet-manager/config-reload.js.map +1 -0
  33. package/dist/fleet-manager/context.d.ts +76 -0
  34. package/dist/fleet-manager/context.d.ts.map +1 -0
  35. package/dist/fleet-manager/context.js +11 -0
  36. package/dist/fleet-manager/context.js.map +1 -0
  37. package/dist/fleet-manager/errors.d.ts +0 -25
  38. package/dist/fleet-manager/errors.d.ts.map +1 -1
  39. package/dist/fleet-manager/errors.js +0 -38
  40. package/dist/fleet-manager/errors.js.map +1 -1
  41. package/dist/fleet-manager/event-emitters.d.ts +123 -0
  42. package/dist/fleet-manager/event-emitters.d.ts.map +1 -0
  43. package/dist/fleet-manager/event-emitters.js +136 -0
  44. package/dist/fleet-manager/event-emitters.js.map +1 -0
  45. package/dist/fleet-manager/event-types.d.ts +0 -15
  46. package/dist/fleet-manager/event-types.d.ts.map +1 -1
  47. package/dist/fleet-manager/fleet-manager.d.ts +40 -653
  48. package/dist/fleet-manager/fleet-manager.d.ts.map +1 -1
  49. package/dist/fleet-manager/fleet-manager.js +95 -1720
  50. package/dist/fleet-manager/fleet-manager.js.map +1 -1
  51. package/dist/fleet-manager/index.d.ts +13 -2
  52. package/dist/fleet-manager/index.d.ts.map +1 -1
  53. package/dist/fleet-manager/index.js +19 -6
  54. package/dist/fleet-manager/index.js.map +1 -1
  55. package/dist/fleet-manager/job-control.d.ts +67 -0
  56. package/dist/fleet-manager/job-control.d.ts.map +1 -0
  57. package/dist/fleet-manager/job-control.js +333 -0
  58. package/dist/fleet-manager/job-control.js.map +1 -0
  59. package/dist/fleet-manager/log-streaming.d.ts +171 -0
  60. package/dist/fleet-manager/log-streaming.d.ts.map +1 -0
  61. package/dist/fleet-manager/log-streaming.js +503 -0
  62. package/dist/fleet-manager/log-streaming.js.map +1 -0
  63. package/dist/fleet-manager/schedule-executor.d.ts +63 -0
  64. package/dist/fleet-manager/schedule-executor.d.ts.map +1 -0
  65. package/dist/fleet-manager/schedule-executor.js +209 -0
  66. package/dist/fleet-manager/schedule-executor.js.map +1 -0
  67. package/dist/fleet-manager/schedule-management.d.ts +71 -0
  68. package/dist/fleet-manager/schedule-management.d.ts.map +1 -0
  69. package/dist/fleet-manager/schedule-management.js +171 -0
  70. package/dist/fleet-manager/schedule-management.js.map +1 -0
  71. package/dist/fleet-manager/status-queries.d.ts +105 -0
  72. package/dist/fleet-manager/status-queries.d.ts.map +1 -0
  73. package/dist/fleet-manager/status-queries.js +247 -0
  74. package/dist/fleet-manager/status-queries.js.map +1 -0
  75. package/dist/fleet-manager/types.d.ts +0 -39
  76. package/dist/fleet-manager/types.d.ts.map +1 -1
  77. package/dist/runner/__tests__/job-executor.test.js +206 -1
  78. package/dist/runner/__tests__/job-executor.test.js.map +1 -1
  79. package/dist/runner/job-executor.d.ts +9 -0
  80. package/dist/runner/job-executor.d.ts.map +1 -1
  81. package/dist/runner/job-executor.js +78 -4
  82. package/dist/runner/job-executor.js.map +1 -1
  83. package/dist/runner/message-processor.d.ts.map +1 -1
  84. package/dist/runner/message-processor.js +53 -0
  85. package/dist/runner/message-processor.js.map +1 -1
  86. package/dist/runner/types.d.ts +3 -1
  87. package/dist/runner/types.d.ts.map +1 -1
  88. package/dist/scheduler/__tests__/cron.test.d.ts +2 -0
  89. package/dist/scheduler/__tests__/cron.test.d.ts.map +1 -0
  90. package/dist/scheduler/__tests__/cron.test.js +867 -0
  91. package/dist/scheduler/__tests__/cron.test.js.map +1 -0
  92. package/dist/scheduler/__tests__/scheduler.test.js +164 -5
  93. package/dist/scheduler/__tests__/scheduler.test.js.map +1 -1
  94. package/dist/scheduler/cron.d.ts +126 -0
  95. package/dist/scheduler/cron.d.ts.map +1 -0
  96. package/dist/scheduler/cron.js +390 -0
  97. package/dist/scheduler/cron.js.map +1 -0
  98. package/dist/scheduler/errors.d.ts +81 -1
  99. package/dist/scheduler/errors.d.ts.map +1 -1
  100. package/dist/scheduler/errors.js +81 -6
  101. package/dist/scheduler/errors.js.map +1 -1
  102. package/dist/scheduler/index.d.ts +1 -0
  103. package/dist/scheduler/index.d.ts.map +1 -1
  104. package/dist/scheduler/index.js +2 -0
  105. package/dist/scheduler/index.js.map +1 -1
  106. package/dist/scheduler/schedule-runner.d.ts +2 -2
  107. package/dist/scheduler/schedule-runner.d.ts.map +1 -1
  108. package/dist/scheduler/schedule-runner.js +20 -8
  109. package/dist/scheduler/schedule-runner.js.map +1 -1
  110. package/dist/scheduler/scheduler.d.ts +4 -4
  111. package/dist/scheduler/scheduler.d.ts.map +1 -1
  112. package/dist/scheduler/scheduler.js +95 -20
  113. package/dist/scheduler/scheduler.js.map +1 -1
  114. package/dist/scheduler/types.d.ts +1 -1
  115. package/dist/scheduler/types.d.ts.map +1 -1
  116. package/dist/state/schemas/job-metadata.d.ts +2 -2
  117. package/package.json +33 -8
  118. package/.turbo/turbo-build.log +0 -4
  119. package/.turbo/turbo-test.log +0 -219
  120. package/.turbo/turbo-typecheck.log +0 -4
  121. package/coverage/base.css +0 -224
  122. package/coverage/block-navigation.js +0 -87
  123. package/coverage/coverage-final.json +0 -51
  124. package/coverage/favicon.png +0 -0
  125. package/coverage/index.html +0 -251
  126. package/coverage/prettify.css +0 -1
  127. package/coverage/prettify.js +0 -2
  128. package/coverage/sort-arrow-sprite.png +0 -0
  129. package/coverage/sorter.js +0 -210
  130. package/coverage/src/config/index.html +0 -191
  131. package/coverage/src/config/index.ts.html +0 -442
  132. package/coverage/src/config/interpolate.ts.html +0 -652
  133. package/coverage/src/config/loader.ts.html +0 -1501
  134. package/coverage/src/config/merge.ts.html +0 -823
  135. package/coverage/src/config/parser.ts.html +0 -1213
  136. package/coverage/src/config/schema.ts.html +0 -1123
  137. package/coverage/src/fleet-manager/errors.ts.html +0 -2326
  138. package/coverage/src/fleet-manager/event-types.ts.html +0 -1219
  139. package/coverage/src/fleet-manager/fleet-manager.ts.html +0 -7030
  140. package/coverage/src/fleet-manager/index.html +0 -206
  141. package/coverage/src/fleet-manager/index.ts.html +0 -469
  142. package/coverage/src/fleet-manager/job-manager.ts.html +0 -2074
  143. package/coverage/src/fleet-manager/job-queue.ts.html +0 -2479
  144. package/coverage/src/fleet-manager/types.ts.html +0 -2602
  145. package/coverage/src/index.html +0 -116
  146. package/coverage/src/index.ts.html +0 -181
  147. package/coverage/src/runner/errors.ts.html +0 -1006
  148. package/coverage/src/runner/index.html +0 -191
  149. package/coverage/src/runner/index.ts.html +0 -256
  150. package/coverage/src/runner/job-executor.ts.html +0 -1429
  151. package/coverage/src/runner/message-processor.ts.html +0 -1150
  152. package/coverage/src/runner/sdk-adapter.ts.html +0 -658
  153. package/coverage/src/runner/types.ts.html +0 -559
  154. package/coverage/src/scheduler/errors.ts.html +0 -388
  155. package/coverage/src/scheduler/index.html +0 -206
  156. package/coverage/src/scheduler/index.ts.html +0 -244
  157. package/coverage/src/scheduler/interval.ts.html +0 -652
  158. package/coverage/src/scheduler/schedule-runner.ts.html +0 -1411
  159. package/coverage/src/scheduler/schedule-state.ts.html +0 -718
  160. package/coverage/src/scheduler/scheduler.ts.html +0 -1795
  161. package/coverage/src/scheduler/types.ts.html +0 -733
  162. package/coverage/src/state/directory.ts.html +0 -736
  163. package/coverage/src/state/errors.ts.html +0 -376
  164. package/coverage/src/state/fleet-state.ts.html +0 -937
  165. package/coverage/src/state/index.html +0 -221
  166. package/coverage/src/state/index.ts.html +0 -322
  167. package/coverage/src/state/job-metadata.ts.html +0 -1420
  168. package/coverage/src/state/job-output.ts.html +0 -1033
  169. package/coverage/src/state/schemas/fleet-state.ts.html +0 -445
  170. package/coverage/src/state/schemas/index.html +0 -176
  171. package/coverage/src/state/schemas/index.ts.html +0 -286
  172. package/coverage/src/state/schemas/job-metadata.ts.html +0 -628
  173. package/coverage/src/state/schemas/job-output.ts.html +0 -616
  174. package/coverage/src/state/schemas/session-info.ts.html +0 -361
  175. package/coverage/src/state/session.ts.html +0 -844
  176. package/coverage/src/state/types.ts.html +0 -262
  177. package/coverage/src/state/utils/atomic.ts.html +0 -748
  178. package/coverage/src/state/utils/index.html +0 -146
  179. package/coverage/src/state/utils/index.ts.html +0 -103
  180. package/coverage/src/state/utils/reads.ts.html +0 -1621
  181. package/coverage/src/work-sources/adapters/github.ts.html +0 -3583
  182. package/coverage/src/work-sources/adapters/index.html +0 -131
  183. package/coverage/src/work-sources/adapters/index.ts.html +0 -277
  184. package/coverage/src/work-sources/errors.ts.html +0 -298
  185. package/coverage/src/work-sources/index.html +0 -176
  186. package/coverage/src/work-sources/index.ts.html +0 -529
  187. package/coverage/src/work-sources/manager.ts.html +0 -1324
  188. package/coverage/src/work-sources/registry.ts.html +0 -619
  189. package/coverage/src/work-sources/types.ts.html +0 -568
  190. package/dist/fleet-manager/__tests__/event-helpers.test.d.ts +0 -7
  191. package/dist/fleet-manager/__tests__/event-helpers.test.d.ts.map +0 -1
  192. package/dist/fleet-manager/__tests__/event-helpers.test.js +0 -368
  193. package/dist/fleet-manager/__tests__/event-helpers.test.js.map +0 -1
  194. package/src/config/__tests__/agent.test.ts +0 -864
  195. package/src/config/__tests__/interpolate.test.ts +0 -644
  196. package/src/config/__tests__/loader.test.ts +0 -784
  197. package/src/config/__tests__/merge.test.ts +0 -751
  198. package/src/config/__tests__/parser.test.ts +0 -533
  199. package/src/config/__tests__/schema.test.ts +0 -873
  200. package/src/config/index.ts +0 -119
  201. package/src/config/interpolate.ts +0 -189
  202. package/src/config/loader.ts +0 -472
  203. package/src/config/merge.ts +0 -246
  204. package/src/config/parser.ts +0 -376
  205. package/src/config/schema.ts +0 -346
  206. package/src/fleet-manager/__tests__/coverage.test.ts +0 -2869
  207. package/src/fleet-manager/__tests__/errors.test.ts +0 -660
  208. package/src/fleet-manager/__tests__/event-helpers.test.ts +0 -448
  209. package/src/fleet-manager/__tests__/integration.test.ts +0 -1209
  210. package/src/fleet-manager/__tests__/job-control.test.ts +0 -283
  211. package/src/fleet-manager/__tests__/job-manager.test.ts +0 -869
  212. package/src/fleet-manager/__tests__/job-queue.test.ts +0 -401
  213. package/src/fleet-manager/__tests__/reload.test.ts +0 -751
  214. package/src/fleet-manager/__tests__/status-queries.test.ts +0 -595
  215. package/src/fleet-manager/__tests__/trigger.test.ts +0 -601
  216. package/src/fleet-manager/errors.ts +0 -747
  217. package/src/fleet-manager/event-types.ts +0 -378
  218. package/src/fleet-manager/fleet-manager.ts +0 -2315
  219. package/src/fleet-manager/index.ts +0 -128
  220. package/src/fleet-manager/job-manager.ts +0 -663
  221. package/src/fleet-manager/job-queue.ts +0 -798
  222. package/src/fleet-manager/types.ts +0 -839
  223. package/src/index.ts +0 -32
  224. package/src/runner/__tests__/errors.test.ts +0 -382
  225. package/src/runner/__tests__/job-executor.test.ts +0 -1708
  226. package/src/runner/__tests__/message-processor.test.ts +0 -960
  227. package/src/runner/__tests__/sdk-adapter.test.ts +0 -626
  228. package/src/runner/errors.ts +0 -307
  229. package/src/runner/index.ts +0 -57
  230. package/src/runner/job-executor.ts +0 -448
  231. package/src/runner/message-processor.ts +0 -355
  232. package/src/runner/sdk-adapter.ts +0 -191
  233. package/src/runner/types.ts +0 -158
  234. package/src/scheduler/__tests__/errors.test.ts +0 -159
  235. package/src/scheduler/__tests__/interval.test.ts +0 -515
  236. package/src/scheduler/__tests__/schedule-runner.test.ts +0 -798
  237. package/src/scheduler/__tests__/schedule-state.test.ts +0 -671
  238. package/src/scheduler/__tests__/scheduler.test.ts +0 -1280
  239. package/src/scheduler/errors.ts +0 -101
  240. package/src/scheduler/index.ts +0 -53
  241. package/src/scheduler/interval.ts +0 -189
  242. package/src/scheduler/schedule-runner.ts +0 -442
  243. package/src/scheduler/schedule-state.ts +0 -211
  244. package/src/scheduler/scheduler.ts +0 -570
  245. package/src/scheduler/types.ts +0 -216
  246. package/src/state/__tests__/directory.test.ts +0 -595
  247. package/src/state/__tests__/fleet-state.test.ts +0 -868
  248. package/src/state/__tests__/job-metadata-schema.test.ts +0 -414
  249. package/src/state/__tests__/job-metadata.test.ts +0 -831
  250. package/src/state/__tests__/job-output.test.ts +0 -856
  251. package/src/state/__tests__/session-schema.test.ts +0 -378
  252. package/src/state/__tests__/session.test.ts +0 -604
  253. package/src/state/directory.ts +0 -217
  254. package/src/state/errors.ts +0 -97
  255. package/src/state/fleet-state.ts +0 -284
  256. package/src/state/index.ts +0 -79
  257. package/src/state/job-metadata.ts +0 -445
  258. package/src/state/job-output.ts +0 -316
  259. package/src/state/schemas/__tests__/job-output.test.ts +0 -338
  260. package/src/state/schemas/fleet-state.ts +0 -120
  261. package/src/state/schemas/index.ts +0 -67
  262. package/src/state/schemas/job-metadata.ts +0 -181
  263. package/src/state/schemas/job-output.ts +0 -177
  264. package/src/state/schemas/session-info.ts +0 -92
  265. package/src/state/session.ts +0 -253
  266. package/src/state/types.ts +0 -59
  267. package/src/state/utils/__tests__/atomic.test.ts +0 -723
  268. package/src/state/utils/__tests__/reads.test.ts +0 -1071
  269. package/src/state/utils/atomic.ts +0 -221
  270. package/src/state/utils/index.ts +0 -6
  271. package/src/state/utils/reads.ts +0 -512
  272. package/src/work-sources/__tests__/github.test.ts +0 -1800
  273. package/src/work-sources/__tests__/manager.test.ts +0 -529
  274. package/src/work-sources/__tests__/registry.test.ts +0 -477
  275. package/src/work-sources/__tests__/types.test.ts +0 -479
  276. package/src/work-sources/adapters/github.ts +0 -1166
  277. package/src/work-sources/adapters/index.ts +0 -64
  278. package/src/work-sources/errors.ts +0 -71
  279. package/src/work-sources/index.ts +0 -148
  280. package/src/work-sources/manager.ts +0 -413
  281. package/src/work-sources/registry.ts +0 -178
  282. package/src/work-sources/types.ts +0 -161
  283. package/tsconfig.json +0 -9
  284. package/vitest.config.ts +0 -19
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Status Queries Module
3
+ *
4
+ * Centralizes all status query logic for FleetManager.
5
+ * Provides methods to query fleet status, agent information, and related helpers.
6
+ *
7
+ * @module status-queries
8
+ */
9
+ import type { ResolvedAgent } from "../config/index.js";
10
+ import type { AgentState, FleetState } from "../state/schemas/fleet-state.js";
11
+ import type { Scheduler } from "../scheduler/index.js";
12
+ import type { FleetStatus, AgentInfo, ScheduleInfo, FleetCounts } from "./types.js";
13
+ import type { FleetManagerContext } from "./context.js";
14
+ /**
15
+ * Snapshot of fleet state from disk
16
+ *
17
+ * This is an alias for FleetState with required agents field
18
+ * (since we always ensure it's populated even if empty).
19
+ */
20
+ export type FleetStateSnapshot = FleetState;
21
+ /**
22
+ * StatusQueries provides all status query operations for the FleetManager.
23
+ *
24
+ * This class encapsulates the logic for querying fleet status, agent information,
25
+ * and related data using the FleetManagerContext pattern.
26
+ */
27
+ export declare class StatusQueries {
28
+ private ctx;
29
+ constructor(ctx: FleetManagerContext);
30
+ /**
31
+ * Read fleet state from disk for status queries
32
+ *
33
+ * This provides a consistent snapshot of the fleet state.
34
+ *
35
+ * @returns Fleet state snapshot with agents and fleet-level state
36
+ */
37
+ readFleetStateSnapshot(): Promise<FleetStateSnapshot>;
38
+ /**
39
+ * Get overall fleet status
40
+ *
41
+ * Returns a comprehensive snapshot of the fleet state including:
42
+ * - Current state and uptime
43
+ * - Agent counts (total, idle, running, error)
44
+ * - Job counts
45
+ * - Scheduler information
46
+ *
47
+ * This method works whether the fleet is running or stopped.
48
+ *
49
+ * @returns A consistent FleetStatus snapshot
50
+ */
51
+ getFleetStatus(): Promise<FleetStatus>;
52
+ /**
53
+ * Get information about all configured agents
54
+ *
55
+ * Returns detailed information for each agent including:
56
+ * - Current status and job information
57
+ * - Schedule details with runtime state
58
+ * - Configuration details
59
+ *
60
+ * This method works whether the fleet is running or stopped.
61
+ *
62
+ * @returns Array of AgentInfo objects with current state
63
+ */
64
+ getAgentInfo(): Promise<AgentInfo[]>;
65
+ /**
66
+ * Get information about a specific agent by name
67
+ *
68
+ * Returns detailed information for the specified agent including:
69
+ * - Current status and job information
70
+ * - Schedule details with runtime state
71
+ * - Configuration details
72
+ *
73
+ * This method works whether the fleet is running or stopped.
74
+ *
75
+ * @param name - The agent name to look up
76
+ * @returns AgentInfo for the specified agent
77
+ * @throws {AgentNotFoundError} If no agent with that name exists
78
+ */
79
+ getAgentInfoByName(name: string): Promise<AgentInfo>;
80
+ }
81
+ /**
82
+ * Build AgentInfo from configuration and state
83
+ *
84
+ * @param agent - Resolved agent configuration
85
+ * @param agentState - Runtime agent state (optional)
86
+ * @param scheduler - Scheduler instance for running job counts (optional)
87
+ * @returns Complete AgentInfo object
88
+ */
89
+ export declare function buildAgentInfo(agent: ResolvedAgent, agentState?: AgentState, scheduler?: Scheduler | null): AgentInfo;
90
+ /**
91
+ * Build schedule info list from agent configuration and state
92
+ *
93
+ * @param agent - Resolved agent configuration
94
+ * @param agentState - Runtime agent state (optional)
95
+ * @returns Array of ScheduleInfo objects
96
+ */
97
+ export declare function buildScheduleInfoList(agent: ResolvedAgent, agentState?: AgentState): ScheduleInfo[];
98
+ /**
99
+ * Compute fleet counts from agent info list
100
+ *
101
+ * @param agentInfoList - List of AgentInfo objects
102
+ * @returns FleetCounts with summary statistics
103
+ */
104
+ export declare function computeFleetCounts(agentInfoList: AgentInfo[]): FleetCounts;
105
+ //# sourceMappingURL=status-queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-queries.d.ts","sourceRoot":"","sources":["../../src/fleet-manager/status-queries.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAOxD;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAM5C;;;;;GAKG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,mBAAmB;IAE5C;;;;;;OAMG;IACG,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAc3D;;;;;;;;;;;;OAYG;IACG,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAuC5C;;;;;;;;;;;OAWG;IACG,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAa1C;;;;;;;;;;;;;OAaG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAe3D;AAMD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,UAAU,CAAC,EAAE,UAAU,EACvB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,GAC3B,SAAS,CA6BX;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,UAAU,CAAC,EAAE,UAAU,GACtB,YAAY,EAAE,CAoBhB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,SAAS,EAAE,GAAG,WAAW,CAwC1E"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Status Queries Module
3
+ *
4
+ * Centralizes all status query logic for FleetManager.
5
+ * Provides methods to query fleet status, agent information, and related helpers.
6
+ *
7
+ * @module status-queries
8
+ */
9
+ import { readFleetState } from "../state/fleet-state.js";
10
+ import { AgentNotFoundError } from "./errors.js";
11
+ // =============================================================================
12
+ // StatusQueries Class
13
+ // =============================================================================
14
+ /**
15
+ * StatusQueries provides all status query operations for the FleetManager.
16
+ *
17
+ * This class encapsulates the logic for querying fleet status, agent information,
18
+ * and related data using the FleetManagerContext pattern.
19
+ */
20
+ export class StatusQueries {
21
+ ctx;
22
+ constructor(ctx) {
23
+ this.ctx = ctx;
24
+ }
25
+ /**
26
+ * Read fleet state from disk for status queries
27
+ *
28
+ * This provides a consistent snapshot of the fleet state.
29
+ *
30
+ * @returns Fleet state snapshot with agents and fleet-level state
31
+ */
32
+ async readFleetStateSnapshot() {
33
+ const stateDirInfo = this.ctx.getStateDirInfo();
34
+ const logger = this.ctx.getLogger();
35
+ if (!stateDirInfo) {
36
+ // Not initialized yet, return empty state
37
+ return { fleet: {}, agents: {} };
38
+ }
39
+ return await readFleetState(stateDirInfo.stateFile, {
40
+ logger: { warn: logger.warn },
41
+ });
42
+ }
43
+ /**
44
+ * Get overall fleet status
45
+ *
46
+ * Returns a comprehensive snapshot of the fleet state including:
47
+ * - Current state and uptime
48
+ * - Agent counts (total, idle, running, error)
49
+ * - Job counts
50
+ * - Scheduler information
51
+ *
52
+ * This method works whether the fleet is running or stopped.
53
+ *
54
+ * @returns A consistent FleetStatus snapshot
55
+ */
56
+ async getFleetStatus() {
57
+ // Get agent info to compute counts
58
+ const agentInfoList = await this.getAgentInfo();
59
+ // Compute counts from agent info
60
+ const counts = computeFleetCounts(agentInfoList);
61
+ // Compute uptime
62
+ const startedAt = this.ctx.getStartedAt();
63
+ const stoppedAt = this.ctx.getStoppedAt();
64
+ let uptimeSeconds = null;
65
+ if (startedAt) {
66
+ const startTime = new Date(startedAt).getTime();
67
+ const endTime = stoppedAt ? new Date(stoppedAt).getTime() : Date.now();
68
+ uptimeSeconds = Math.floor((endTime - startTime) / 1000);
69
+ }
70
+ // Get scheduler state
71
+ const scheduler = this.ctx.getScheduler();
72
+ const schedulerState = scheduler?.getState();
73
+ return {
74
+ state: this.ctx.getStatus(),
75
+ uptimeSeconds,
76
+ initializedAt: this.ctx.getInitializedAt(),
77
+ startedAt,
78
+ stoppedAt,
79
+ counts,
80
+ scheduler: {
81
+ status: schedulerState?.status ?? "stopped",
82
+ checkCount: schedulerState?.checkCount ?? 0,
83
+ triggerCount: schedulerState?.triggerCount ?? 0,
84
+ lastCheckAt: schedulerState?.lastCheckAt ?? null,
85
+ checkIntervalMs: this.ctx.getCheckInterval(),
86
+ },
87
+ lastError: this.ctx.getLastError(),
88
+ };
89
+ }
90
+ /**
91
+ * Get information about all configured agents
92
+ *
93
+ * Returns detailed information for each agent including:
94
+ * - Current status and job information
95
+ * - Schedule details with runtime state
96
+ * - Configuration details
97
+ *
98
+ * This method works whether the fleet is running or stopped.
99
+ *
100
+ * @returns Array of AgentInfo objects with current state
101
+ */
102
+ async getAgentInfo() {
103
+ const config = this.ctx.getConfig();
104
+ const agents = config?.agents ?? [];
105
+ // Read fleet state for runtime information
106
+ const fleetState = await this.readFleetStateSnapshot();
107
+ return agents.map((agent) => {
108
+ const agentState = fleetState.agents[agent.name];
109
+ return buildAgentInfo(agent, agentState, this.ctx.getScheduler());
110
+ });
111
+ }
112
+ /**
113
+ * Get information about a specific agent by name
114
+ *
115
+ * Returns detailed information for the specified agent including:
116
+ * - Current status and job information
117
+ * - Schedule details with runtime state
118
+ * - Configuration details
119
+ *
120
+ * This method works whether the fleet is running or stopped.
121
+ *
122
+ * @param name - The agent name to look up
123
+ * @returns AgentInfo for the specified agent
124
+ * @throws {AgentNotFoundError} If no agent with that name exists
125
+ */
126
+ async getAgentInfoByName(name) {
127
+ const config = this.ctx.getConfig();
128
+ const agents = config?.agents ?? [];
129
+ const agent = agents.find((a) => a.name === name);
130
+ if (!agent) {
131
+ throw new AgentNotFoundError(name);
132
+ }
133
+ // Read fleet state for runtime information
134
+ const fleetState = await this.readFleetStateSnapshot();
135
+ const agentState = fleetState.agents[name];
136
+ return buildAgentInfo(agent, agentState, this.ctx.getScheduler());
137
+ }
138
+ }
139
+ // =============================================================================
140
+ // Helper Functions
141
+ // =============================================================================
142
+ /**
143
+ * Build AgentInfo from configuration and state
144
+ *
145
+ * @param agent - Resolved agent configuration
146
+ * @param agentState - Runtime agent state (optional)
147
+ * @param scheduler - Scheduler instance for running job counts (optional)
148
+ * @returns Complete AgentInfo object
149
+ */
150
+ export function buildAgentInfo(agent, agentState, scheduler) {
151
+ // Build schedule info
152
+ const schedules = buildScheduleInfoList(agent, agentState);
153
+ // Get running count from scheduler or state
154
+ const runningCount = scheduler?.getRunningJobCount(agent.name) ?? 0;
155
+ // Determine workspace path
156
+ let workspace;
157
+ if (typeof agent.workspace === "string") {
158
+ workspace = agent.workspace;
159
+ }
160
+ else if (agent.workspace?.root) {
161
+ workspace = agent.workspace.root;
162
+ }
163
+ return {
164
+ name: agent.name,
165
+ description: agent.description,
166
+ status: agentState?.status ?? "idle",
167
+ currentJobId: agentState?.current_job ?? null,
168
+ lastJobId: agentState?.last_job ?? null,
169
+ maxConcurrent: agent.instances?.max_concurrent ?? 1,
170
+ runningCount,
171
+ errorMessage: agentState?.error_message ?? null,
172
+ scheduleCount: schedules.length,
173
+ schedules,
174
+ model: agent.model,
175
+ workspace,
176
+ };
177
+ }
178
+ /**
179
+ * Build schedule info list from agent configuration and state
180
+ *
181
+ * @param agent - Resolved agent configuration
182
+ * @param agentState - Runtime agent state (optional)
183
+ * @returns Array of ScheduleInfo objects
184
+ */
185
+ export function buildScheduleInfoList(agent, agentState) {
186
+ if (!agent.schedules) {
187
+ return [];
188
+ }
189
+ return Object.entries(agent.schedules).map(([name, schedule]) => {
190
+ const scheduleState = agentState?.schedules?.[name];
191
+ return {
192
+ name,
193
+ agentName: agent.name,
194
+ type: schedule.type,
195
+ interval: schedule.interval,
196
+ expression: schedule.expression,
197
+ status: scheduleState?.status ?? "idle",
198
+ lastRunAt: scheduleState?.last_run_at ?? null,
199
+ nextRunAt: scheduleState?.next_run_at ?? null,
200
+ lastError: scheduleState?.last_error ?? null,
201
+ };
202
+ });
203
+ }
204
+ /**
205
+ * Compute fleet counts from agent info list
206
+ *
207
+ * @param agentInfoList - List of AgentInfo objects
208
+ * @returns FleetCounts with summary statistics
209
+ */
210
+ export function computeFleetCounts(agentInfoList) {
211
+ let idleAgents = 0;
212
+ let runningAgents = 0;
213
+ let errorAgents = 0;
214
+ let totalSchedules = 0;
215
+ let runningSchedules = 0;
216
+ let runningJobs = 0;
217
+ for (const agent of agentInfoList) {
218
+ switch (agent.status) {
219
+ case "idle":
220
+ idleAgents++;
221
+ break;
222
+ case "running":
223
+ runningAgents++;
224
+ break;
225
+ case "error":
226
+ errorAgents++;
227
+ break;
228
+ }
229
+ totalSchedules += agent.scheduleCount;
230
+ runningJobs += agent.runningCount;
231
+ for (const schedule of agent.schedules) {
232
+ if (schedule.status === "running") {
233
+ runningSchedules++;
234
+ }
235
+ }
236
+ }
237
+ return {
238
+ totalAgents: agentInfoList.length,
239
+ idleAgents,
240
+ runningAgents,
241
+ errorAgents,
242
+ totalSchedules,
243
+ runningSchedules,
244
+ runningJobs,
245
+ };
246
+ }
247
+ //# sourceMappingURL=status-queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-queries.js","sourceRoot":"","sources":["../../src/fleet-manager/status-queries.ts"],"names":[],"mappings":"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"}
@@ -93,45 +93,6 @@ export interface FleetManagerState {
93
93
  */
94
94
  lastError: string | null;
95
95
  }
96
- /**
97
- * Events emitted by the FleetManager
98
- *
99
- * @deprecated Use FleetManagerEventMap from ./event-types.js for strongly-typed events.
100
- * This interface is kept for backwards compatibility but may be removed in a future version.
101
- */
102
- export interface FleetManagerEvents {
103
- /**
104
- * Emitted when initialization completes successfully
105
- */
106
- initialized: [];
107
- /**
108
- * Emitted when the fleet manager starts running
109
- */
110
- started: [];
111
- /**
112
- * Emitted when the fleet manager stops
113
- */
114
- stopped: [];
115
- /**
116
- * Emitted when an error occurs
117
- */
118
- error: [error: Error];
119
- /**
120
- * Emitted when a schedule triggers an agent run
121
- * @deprecated Use 'schedule:triggered' event instead
122
- */
123
- "schedule:trigger": [agentName: string, scheduleName: string];
124
- /**
125
- * Emitted when an agent run completes successfully
126
- * @deprecated Use 'job:completed' event instead
127
- */
128
- "schedule:complete": [agentName: string, scheduleName: string];
129
- /**
130
- * Emitted when an agent run fails
131
- * @deprecated Use 'job:failed' event instead
132
- */
133
- "schedule:error": [agentName: string, scheduleName: string, error: Error];
134
- }
135
96
  /**
136
97
  * Schedule information within an AgentInfo
137
98
  *
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/fleet-manager/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/fleet-manager/types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
- import { mkdir, rm, realpath } from "node:fs/promises";
2
+ import { mkdir, rm, realpath, readFile, stat } from "node:fs/promises";
3
3
  import { join } from "node:path";
4
4
  import { tmpdir } from "node:os";
5
5
  import { JobExecutor, executeJob } from "../job-executor.js";
@@ -1342,4 +1342,209 @@ describe("error handling (US-7)", () => {
1342
1342
  });
1343
1343
  });
1344
1344
  });
1345
+ // =============================================================================
1346
+ // Output to file tests (US-9)
1347
+ // =============================================================================
1348
+ describe("outputToFile (US-9)", () => {
1349
+ let tempDir;
1350
+ let stateDir;
1351
+ beforeEach(async () => {
1352
+ tempDir = await createTempDir();
1353
+ stateDir = join(tempDir, ".herdctl");
1354
+ await initStateDirectory({ path: stateDir });
1355
+ });
1356
+ afterEach(async () => {
1357
+ await rm(tempDir, { recursive: true, force: true });
1358
+ });
1359
+ it("creates job output directory when outputToFile is true", async () => {
1360
+ const messages = [
1361
+ { type: "system", content: "Init" },
1362
+ { type: "assistant", content: "Hello" },
1363
+ ];
1364
+ const executor = new JobExecutor(createMockSDKQuery(messages), {
1365
+ logger: createMockLogger(),
1366
+ });
1367
+ const result = await executor.execute({
1368
+ agent: createTestAgent(),
1369
+ prompt: "Test prompt",
1370
+ stateDir,
1371
+ outputToFile: true,
1372
+ });
1373
+ // Verify directory was created
1374
+ const jobOutputDir = join(stateDir, "jobs", result.jobId);
1375
+ const dirStat = await stat(jobOutputDir);
1376
+ expect(dirStat.isDirectory()).toBe(true);
1377
+ });
1378
+ it("writes output.log file when outputToFile is true", async () => {
1379
+ const messages = [
1380
+ { type: "system", content: "Init" },
1381
+ { type: "assistant", content: "Hello world" },
1382
+ ];
1383
+ const executor = new JobExecutor(createMockSDKQuery(messages), {
1384
+ logger: createMockLogger(),
1385
+ });
1386
+ const result = await executor.execute({
1387
+ agent: createTestAgent(),
1388
+ prompt: "Test prompt",
1389
+ stateDir,
1390
+ outputToFile: true,
1391
+ });
1392
+ // Verify output.log file exists
1393
+ const outputLogPath = join(stateDir, "jobs", result.jobId, "output.log");
1394
+ const logContent = await readFile(outputLogPath, "utf-8");
1395
+ expect(logContent).toContain("[SYSTEM] Init");
1396
+ expect(logContent).toContain("[ASSISTANT] Hello world");
1397
+ });
1398
+ it("does not create job output directory when outputToFile is false", async () => {
1399
+ const messages = [
1400
+ { type: "system", content: "Init" },
1401
+ { type: "assistant", content: "Hello" },
1402
+ ];
1403
+ const executor = new JobExecutor(createMockSDKQuery(messages), {
1404
+ logger: createMockLogger(),
1405
+ });
1406
+ const result = await executor.execute({
1407
+ agent: createTestAgent(),
1408
+ prompt: "Test prompt",
1409
+ stateDir,
1410
+ outputToFile: false,
1411
+ });
1412
+ // Verify directory was NOT created
1413
+ const jobOutputDir = join(stateDir, "jobs", result.jobId);
1414
+ try {
1415
+ await stat(jobOutputDir);
1416
+ expect.fail("Directory should not exist");
1417
+ }
1418
+ catch (error) {
1419
+ expect(error.code).toBe("ENOENT");
1420
+ }
1421
+ });
1422
+ it("does not create job output directory when outputToFile is not specified", async () => {
1423
+ const messages = [
1424
+ { type: "system", content: "Init" },
1425
+ { type: "assistant", content: "Hello" },
1426
+ ];
1427
+ const executor = new JobExecutor(createMockSDKQuery(messages), {
1428
+ logger: createMockLogger(),
1429
+ });
1430
+ const result = await executor.execute({
1431
+ agent: createTestAgent(),
1432
+ prompt: "Test prompt",
1433
+ stateDir,
1434
+ // outputToFile not specified (defaults to false)
1435
+ });
1436
+ // Verify directory was NOT created
1437
+ const jobOutputDir = join(stateDir, "jobs", result.jobId);
1438
+ try {
1439
+ await stat(jobOutputDir);
1440
+ expect.fail("Directory should not exist");
1441
+ }
1442
+ catch (error) {
1443
+ expect(error.code).toBe("ENOENT");
1444
+ }
1445
+ });
1446
+ it("writes all message types to output.log", async () => {
1447
+ const messages = [
1448
+ { type: "system", content: "System message" },
1449
+ { type: "assistant", content: "Assistant response" },
1450
+ { type: "tool_use", tool_name: "read_file", input: { path: "/etc/hosts" } },
1451
+ { type: "tool_result", result: "localhost", success: true },
1452
+ { type: "error", message: "An error occurred" },
1453
+ ];
1454
+ const executor = new JobExecutor(createMockSDKQuery(messages), {
1455
+ logger: createMockLogger(),
1456
+ });
1457
+ const result = await executor.execute({
1458
+ agent: createTestAgent(),
1459
+ prompt: "Test prompt",
1460
+ stateDir,
1461
+ outputToFile: true,
1462
+ });
1463
+ const outputLogPath = join(stateDir, "jobs", result.jobId, "output.log");
1464
+ const logContent = await readFile(outputLogPath, "utf-8");
1465
+ expect(logContent).toContain("[SYSTEM] System message");
1466
+ expect(logContent).toContain("[ASSISTANT] Assistant response");
1467
+ expect(logContent).toContain("[TOOL] read_file");
1468
+ expect(logContent).toContain("[TOOL_RESULT] (OK) localhost");
1469
+ expect(logContent).toContain("[ERROR] An error occurred");
1470
+ });
1471
+ it("includes timestamps in output.log lines", async () => {
1472
+ const messages = [
1473
+ { type: "assistant", content: "Hello" },
1474
+ ];
1475
+ const executor = new JobExecutor(createMockSDKQuery(messages), {
1476
+ logger: createMockLogger(),
1477
+ });
1478
+ const result = await executor.execute({
1479
+ agent: createTestAgent(),
1480
+ prompt: "Test prompt",
1481
+ stateDir,
1482
+ outputToFile: true,
1483
+ });
1484
+ const outputLogPath = join(stateDir, "jobs", result.jobId, "output.log");
1485
+ const logContent = await readFile(outputLogPath, "utf-8");
1486
+ // Check for ISO timestamp format: [YYYY-MM-DDTHH:MM:SS.sssZ]
1487
+ expect(logContent).toMatch(/\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z\]/);
1488
+ });
1489
+ it("still writes to JSONL even when outputToFile is true", async () => {
1490
+ const messages = [
1491
+ { type: "system", content: "Init" },
1492
+ { type: "assistant", content: "Response" },
1493
+ ];
1494
+ const executor = new JobExecutor(createMockSDKQuery(messages), {
1495
+ logger: createMockLogger(),
1496
+ });
1497
+ const result = await executor.execute({
1498
+ agent: createTestAgent(),
1499
+ prompt: "Test prompt",
1500
+ stateDir,
1501
+ outputToFile: true,
1502
+ });
1503
+ // Verify JSONL still exists
1504
+ const output = await readJobOutputAll(join(stateDir, "jobs"), result.jobId);
1505
+ expect(output).toHaveLength(2);
1506
+ expect(output[0].type).toBe("system");
1507
+ expect(output[1].type).toBe("assistant");
1508
+ });
1509
+ it("handles failed tool results in output.log", async () => {
1510
+ const messages = [
1511
+ { type: "tool_result", result: "File not found", success: false },
1512
+ ];
1513
+ const executor = new JobExecutor(createMockSDKQuery(messages), {
1514
+ logger: createMockLogger(),
1515
+ });
1516
+ const result = await executor.execute({
1517
+ agent: createTestAgent(),
1518
+ prompt: "Test prompt",
1519
+ stateDir,
1520
+ outputToFile: true,
1521
+ });
1522
+ const outputLogPath = join(stateDir, "jobs", result.jobId, "output.log");
1523
+ const logContent = await readFile(outputLogPath, "utf-8");
1524
+ expect(logContent).toContain("[TOOL_RESULT] (FAILED) File not found");
1525
+ });
1526
+ it("events still stream regardless of outputToFile setting", async () => {
1527
+ const receivedMessages = [];
1528
+ const onMessage = vi.fn((msg) => {
1529
+ receivedMessages.push(msg);
1530
+ });
1531
+ const messages = [
1532
+ { type: "system", content: "Init" },
1533
+ { type: "assistant", content: "Hello" },
1534
+ ];
1535
+ const executor = new JobExecutor(createMockSDKQuery(messages), {
1536
+ logger: createMockLogger(),
1537
+ });
1538
+ await executor.execute({
1539
+ agent: createTestAgent(),
1540
+ prompt: "Test prompt",
1541
+ stateDir,
1542
+ outputToFile: true,
1543
+ onMessage,
1544
+ });
1545
+ // Events should still be emitted
1546
+ expect(onMessage).toHaveBeenCalledTimes(2);
1547
+ expect(receivedMessages).toHaveLength(2);
1548
+ });
1549
+ });
1345
1550
  //# sourceMappingURL=job-executor.test.js.map