@herdctl/core 4.1.0 → 4.2.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 (76) hide show
  1. package/dist/config/loader.d.ts.map +1 -1
  2. package/dist/config/loader.js +3 -1
  3. package/dist/config/loader.js.map +1 -1
  4. package/dist/fleet-manager/__tests__/coverage.test.js +8 -0
  5. package/dist/fleet-manager/__tests__/coverage.test.js.map +1 -1
  6. package/dist/fleet-manager/__tests__/discord-manager.test.js +2 -2
  7. package/dist/fleet-manager/__tests__/discord-manager.test.js.map +1 -1
  8. package/dist/fleet-manager/__tests__/slack-manager.test.d.ts +2 -2
  9. package/dist/fleet-manager/__tests__/slack-manager.test.js +125 -164
  10. package/dist/fleet-manager/__tests__/slack-manager.test.js.map +1 -1
  11. package/dist/fleet-manager/discord-manager.js +7 -7
  12. package/dist/fleet-manager/discord-manager.js.map +1 -1
  13. package/dist/fleet-manager/event-types.d.ts +10 -4
  14. package/dist/fleet-manager/event-types.d.ts.map +1 -1
  15. package/dist/fleet-manager/fleet-manager.d.ts.map +1 -1
  16. package/dist/fleet-manager/fleet-manager.js +5 -9
  17. package/dist/fleet-manager/fleet-manager.js.map +1 -1
  18. package/dist/fleet-manager/job-control.js +1 -1
  19. package/dist/fleet-manager/job-control.js.map +1 -1
  20. package/dist/fleet-manager/job-queue.d.ts.map +1 -1
  21. package/dist/fleet-manager/job-queue.js +2 -6
  22. package/dist/fleet-manager/job-queue.js.map +1 -1
  23. package/dist/fleet-manager/slack-manager.d.ts +72 -29
  24. package/dist/fleet-manager/slack-manager.d.ts.map +1 -1
  25. package/dist/fleet-manager/slack-manager.js +153 -147
  26. package/dist/fleet-manager/slack-manager.js.map +1 -1
  27. package/dist/fleet-manager/status-queries.js +1 -1
  28. package/dist/fleet-manager/status-queries.js.map +1 -1
  29. package/dist/index.d.ts +1 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +2 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/runner/job-executor.d.ts +1 -0
  34. package/dist/runner/job-executor.d.ts.map +1 -1
  35. package/dist/runner/job-executor.js +4 -7
  36. package/dist/runner/job-executor.js.map +1 -1
  37. package/dist/runner/runtime/cli-runtime.d.ts.map +1 -1
  38. package/dist/runner/runtime/cli-runtime.js +29 -27
  39. package/dist/runner/runtime/cli-runtime.js.map +1 -1
  40. package/dist/runner/runtime/cli-session-watcher.d.ts.map +1 -1
  41. package/dist/runner/runtime/cli-session-watcher.js +20 -18
  42. package/dist/runner/runtime/cli-session-watcher.js.map +1 -1
  43. package/dist/runner/runtime/container-manager.d.ts.map +1 -1
  44. package/dist/runner/runtime/container-manager.js +7 -5
  45. package/dist/runner/runtime/container-manager.js.map +1 -1
  46. package/dist/runner/runtime/container-runner.d.ts.map +1 -1
  47. package/dist/runner/runtime/container-runner.js +12 -10
  48. package/dist/runner/runtime/container-runner.js.map +1 -1
  49. package/dist/scheduler/__tests__/scheduler.test.js +2 -2
  50. package/dist/scheduler/__tests__/scheduler.test.js.map +1 -1
  51. package/dist/scheduler/schedule-runner.d.ts.map +1 -1
  52. package/dist/scheduler/schedule-runner.js +2 -6
  53. package/dist/scheduler/schedule-runner.js.map +1 -1
  54. package/dist/scheduler/schedule-state.d.ts.map +1 -1
  55. package/dist/scheduler/schedule-state.js +2 -3
  56. package/dist/scheduler/schedule-state.js.map +1 -1
  57. package/dist/scheduler/scheduler.d.ts.map +1 -1
  58. package/dist/scheduler/scheduler.js +3 -7
  59. package/dist/scheduler/scheduler.js.map +1 -1
  60. package/dist/state/fleet-state.d.ts.map +1 -1
  61. package/dist/state/fleet-state.js +2 -3
  62. package/dist/state/fleet-state.js.map +1 -1
  63. package/dist/state/schemas/job-output.d.ts +2 -2
  64. package/dist/utils/__tests__/logger.test.d.ts +2 -0
  65. package/dist/utils/__tests__/logger.test.d.ts.map +1 -0
  66. package/dist/utils/__tests__/logger.test.js +360 -0
  67. package/dist/utils/__tests__/logger.test.js.map +1 -0
  68. package/dist/utils/index.d.ts +5 -0
  69. package/dist/utils/index.d.ts.map +1 -0
  70. package/dist/utils/index.js +5 -0
  71. package/dist/utils/index.js.map +1 -0
  72. package/dist/utils/logger.d.ts +72 -0
  73. package/dist/utils/logger.d.ts.map +1 -0
  74. package/dist/utils/logger.js +117 -0
  75. package/dist/utils/logger.js.map +1 -0
  76. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-state.js","sourceRoot":"","sources":["../../src/state/fleet-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet-state.js","sourceRoot":"","sources":["../../src/state/fleet-state.ts"],"names":[],"mappings":"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"}
@@ -18,10 +18,10 @@ export declare const JobOutputBaseSchema: z.ZodObject<{
18
18
  /** ISO timestamp when message was recorded */
19
19
  timestamp: z.ZodString;
20
20
  }, "strip", z.ZodTypeAny, {
21
- type: "error" | "system" | "assistant" | "tool_use" | "tool_result";
21
+ type: "error" | "assistant" | "system" | "tool_use" | "tool_result";
22
22
  timestamp: string;
23
23
  }, {
24
- type: "error" | "system" | "assistant" | "tool_use" | "tool_result";
24
+ type: "error" | "assistant" | "system" | "tool_use" | "tool_result";
25
25
  timestamp: string;
26
26
  }>;
27
27
  /**
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/logger.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,360 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
+ import { LOG_LEVEL_ORDER, getLogLevel, shouldLog, createLogger, } from "../logger.js";
3
+ // =============================================================================
4
+ // getLogLevel
5
+ // =============================================================================
6
+ describe("getLogLevel", () => {
7
+ let originalEnv;
8
+ beforeEach(() => {
9
+ // Save original environment
10
+ originalEnv = { ...process.env };
11
+ // Clear relevant env vars
12
+ delete process.env.HERDCTL_LOG_LEVEL;
13
+ delete process.env.DEBUG;
14
+ });
15
+ afterEach(() => {
16
+ // Restore original environment
17
+ process.env = originalEnv;
18
+ });
19
+ it("returns 'info' by default when no env vars are set", () => {
20
+ expect(getLogLevel()).toBe("info");
21
+ });
22
+ it("returns value from HERDCTL_LOG_LEVEL when set to 'debug'", () => {
23
+ process.env.HERDCTL_LOG_LEVEL = "debug";
24
+ expect(getLogLevel()).toBe("debug");
25
+ });
26
+ it("returns value from HERDCTL_LOG_LEVEL when set to 'info'", () => {
27
+ process.env.HERDCTL_LOG_LEVEL = "info";
28
+ expect(getLogLevel()).toBe("info");
29
+ });
30
+ it("returns value from HERDCTL_LOG_LEVEL when set to 'warn'", () => {
31
+ process.env.HERDCTL_LOG_LEVEL = "warn";
32
+ expect(getLogLevel()).toBe("warn");
33
+ });
34
+ it("returns value from HERDCTL_LOG_LEVEL when set to 'error'", () => {
35
+ process.env.HERDCTL_LOG_LEVEL = "error";
36
+ expect(getLogLevel()).toBe("error");
37
+ });
38
+ it("handles uppercase HERDCTL_LOG_LEVEL (case-insensitive)", () => {
39
+ process.env.HERDCTL_LOG_LEVEL = "DEBUG";
40
+ expect(getLogLevel()).toBe("debug");
41
+ });
42
+ it("handles mixed case HERDCTL_LOG_LEVEL", () => {
43
+ process.env.HERDCTL_LOG_LEVEL = "WaRn";
44
+ expect(getLogLevel()).toBe("warn");
45
+ });
46
+ it("returns 'debug' when DEBUG=1", () => {
47
+ process.env.DEBUG = "1";
48
+ expect(getLogLevel()).toBe("debug");
49
+ });
50
+ it("returns 'debug' when DEBUG=true", () => {
51
+ process.env.DEBUG = "true";
52
+ expect(getLogLevel()).toBe("debug");
53
+ });
54
+ it("returns 'info' when DEBUG has other values", () => {
55
+ process.env.DEBUG = "false";
56
+ expect(getLogLevel()).toBe("info");
57
+ });
58
+ it("returns 'info' when DEBUG is empty string", () => {
59
+ process.env.DEBUG = "";
60
+ expect(getLogLevel()).toBe("info");
61
+ });
62
+ it("HERDCTL_LOG_LEVEL takes precedence over DEBUG", () => {
63
+ process.env.HERDCTL_LOG_LEVEL = "error";
64
+ process.env.DEBUG = "1";
65
+ expect(getLogLevel()).toBe("error");
66
+ });
67
+ it("HERDCTL_LOG_LEVEL=warn takes precedence over DEBUG=true", () => {
68
+ process.env.HERDCTL_LOG_LEVEL = "warn";
69
+ process.env.DEBUG = "true";
70
+ expect(getLogLevel()).toBe("warn");
71
+ });
72
+ it("falls back to DEBUG when HERDCTL_LOG_LEVEL is invalid", () => {
73
+ process.env.HERDCTL_LOG_LEVEL = "invalid";
74
+ process.env.DEBUG = "1";
75
+ expect(getLogLevel()).toBe("debug");
76
+ });
77
+ it("returns 'info' when HERDCTL_LOG_LEVEL is invalid and DEBUG is not set", () => {
78
+ process.env.HERDCTL_LOG_LEVEL = "invalid";
79
+ expect(getLogLevel()).toBe("info");
80
+ });
81
+ });
82
+ // =============================================================================
83
+ // LOG_LEVEL_ORDER
84
+ // =============================================================================
85
+ describe("LOG_LEVEL_ORDER", () => {
86
+ it("has debug as lowest (most verbose)", () => {
87
+ expect(LOG_LEVEL_ORDER.debug).toBe(0);
88
+ });
89
+ it("has info as second level", () => {
90
+ expect(LOG_LEVEL_ORDER.info).toBe(1);
91
+ });
92
+ it("has warn as third level", () => {
93
+ expect(LOG_LEVEL_ORDER.warn).toBe(2);
94
+ });
95
+ it("has error as highest (least verbose)", () => {
96
+ expect(LOG_LEVEL_ORDER.error).toBe(3);
97
+ });
98
+ it("maintains proper ordering (debug < info < warn < error)", () => {
99
+ expect(LOG_LEVEL_ORDER.debug).toBeLessThan(LOG_LEVEL_ORDER.info);
100
+ expect(LOG_LEVEL_ORDER.info).toBeLessThan(LOG_LEVEL_ORDER.warn);
101
+ expect(LOG_LEVEL_ORDER.warn).toBeLessThan(LOG_LEVEL_ORDER.error);
102
+ });
103
+ });
104
+ // =============================================================================
105
+ // shouldLog
106
+ // =============================================================================
107
+ describe("shouldLog", () => {
108
+ let originalEnv;
109
+ beforeEach(() => {
110
+ originalEnv = { ...process.env };
111
+ delete process.env.HERDCTL_LOG_LEVEL;
112
+ delete process.env.DEBUG;
113
+ });
114
+ afterEach(() => {
115
+ process.env = originalEnv;
116
+ });
117
+ describe("at default level (info)", () => {
118
+ it("returns false for debug", () => {
119
+ expect(shouldLog("debug")).toBe(false);
120
+ });
121
+ it("returns true for info", () => {
122
+ expect(shouldLog("info")).toBe(true);
123
+ });
124
+ it("returns true for warn", () => {
125
+ expect(shouldLog("warn")).toBe(true);
126
+ });
127
+ it("returns true for error", () => {
128
+ expect(shouldLog("error")).toBe(true);
129
+ });
130
+ });
131
+ describe("at debug level", () => {
132
+ beforeEach(() => {
133
+ process.env.HERDCTL_LOG_LEVEL = "debug";
134
+ });
135
+ it("returns true for debug", () => {
136
+ expect(shouldLog("debug")).toBe(true);
137
+ });
138
+ it("returns true for info", () => {
139
+ expect(shouldLog("info")).toBe(true);
140
+ });
141
+ it("returns true for warn", () => {
142
+ expect(shouldLog("warn")).toBe(true);
143
+ });
144
+ it("returns true for error", () => {
145
+ expect(shouldLog("error")).toBe(true);
146
+ });
147
+ });
148
+ describe("at warn level", () => {
149
+ beforeEach(() => {
150
+ process.env.HERDCTL_LOG_LEVEL = "warn";
151
+ });
152
+ it("returns false for debug", () => {
153
+ expect(shouldLog("debug")).toBe(false);
154
+ });
155
+ it("returns false for info", () => {
156
+ expect(shouldLog("info")).toBe(false);
157
+ });
158
+ it("returns true for warn", () => {
159
+ expect(shouldLog("warn")).toBe(true);
160
+ });
161
+ it("returns true for error", () => {
162
+ expect(shouldLog("error")).toBe(true);
163
+ });
164
+ });
165
+ describe("at error level", () => {
166
+ beforeEach(() => {
167
+ process.env.HERDCTL_LOG_LEVEL = "error";
168
+ });
169
+ it("returns false for debug", () => {
170
+ expect(shouldLog("debug")).toBe(false);
171
+ });
172
+ it("returns false for info", () => {
173
+ expect(shouldLog("info")).toBe(false);
174
+ });
175
+ it("returns false for warn", () => {
176
+ expect(shouldLog("warn")).toBe(false);
177
+ });
178
+ it("returns true for error", () => {
179
+ expect(shouldLog("error")).toBe(true);
180
+ });
181
+ });
182
+ });
183
+ // =============================================================================
184
+ // createLogger
185
+ // =============================================================================
186
+ describe("createLogger", () => {
187
+ let originalEnv;
188
+ let debugSpy;
189
+ let infoSpy;
190
+ let warnSpy;
191
+ let errorSpy;
192
+ beforeEach(() => {
193
+ originalEnv = { ...process.env };
194
+ delete process.env.HERDCTL_LOG_LEVEL;
195
+ delete process.env.DEBUG;
196
+ // Spy on console methods
197
+ debugSpy = vi.spyOn(console, "debug").mockImplementation(() => { });
198
+ infoSpy = vi.spyOn(console, "info").mockImplementation(() => { });
199
+ warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
200
+ errorSpy = vi.spyOn(console, "error").mockImplementation(() => { });
201
+ });
202
+ afterEach(() => {
203
+ process.env = originalEnv;
204
+ vi.restoreAllMocks();
205
+ });
206
+ describe("logger creation", () => {
207
+ it("creates a logger with all methods", () => {
208
+ const logger = createLogger("TestPrefix");
209
+ expect(logger).toHaveProperty("debug");
210
+ expect(logger).toHaveProperty("info");
211
+ expect(logger).toHaveProperty("warn");
212
+ expect(logger).toHaveProperty("error");
213
+ });
214
+ it("all methods are functions", () => {
215
+ const logger = createLogger("TestPrefix");
216
+ expect(typeof logger.debug).toBe("function");
217
+ expect(typeof logger.info).toBe("function");
218
+ expect(typeof logger.warn).toBe("function");
219
+ expect(typeof logger.error).toBe("function");
220
+ });
221
+ });
222
+ describe("message prefixing", () => {
223
+ beforeEach(() => {
224
+ process.env.HERDCTL_LOG_LEVEL = "debug";
225
+ });
226
+ it("prefixes debug messages with logger name", () => {
227
+ const logger = createLogger("MyComponent");
228
+ logger.debug("test message");
229
+ expect(debugSpy).toHaveBeenCalledWith("[MyComponent] test message");
230
+ });
231
+ it("prefixes info messages with logger name", () => {
232
+ const logger = createLogger("MyComponent");
233
+ logger.info("test message");
234
+ expect(infoSpy).toHaveBeenCalledWith("[MyComponent] test message");
235
+ });
236
+ it("prefixes warn messages with logger name", () => {
237
+ const logger = createLogger("MyComponent");
238
+ logger.warn("test message");
239
+ expect(warnSpy).toHaveBeenCalledWith("[MyComponent] test message");
240
+ });
241
+ it("prefixes error messages with logger name", () => {
242
+ const logger = createLogger("MyComponent");
243
+ logger.error("test message");
244
+ expect(errorSpy).toHaveBeenCalledWith("[MyComponent] test message");
245
+ });
246
+ it("uses exact prefix provided", () => {
247
+ const logger = createLogger("CLIRuntime");
248
+ logger.info("Starting process...");
249
+ expect(infoSpy).toHaveBeenCalledWith("[CLIRuntime] Starting process...");
250
+ });
251
+ it("handles prefix with special characters", () => {
252
+ const logger = createLogger("Module-A::Sub");
253
+ logger.info("message");
254
+ expect(infoSpy).toHaveBeenCalledWith("[Module-A::Sub] message");
255
+ });
256
+ it("handles empty prefix", () => {
257
+ const logger = createLogger("");
258
+ logger.info("message");
259
+ expect(infoSpy).toHaveBeenCalledWith("[] message");
260
+ });
261
+ });
262
+ describe("log level filtering at default level (info)", () => {
263
+ it("does not log debug messages", () => {
264
+ const logger = createLogger("Test");
265
+ logger.debug("debug message");
266
+ expect(debugSpy).not.toHaveBeenCalled();
267
+ });
268
+ it("logs info messages", () => {
269
+ const logger = createLogger("Test");
270
+ logger.info("info message");
271
+ expect(infoSpy).toHaveBeenCalledWith("[Test] info message");
272
+ });
273
+ it("logs warn messages", () => {
274
+ const logger = createLogger("Test");
275
+ logger.warn("warn message");
276
+ expect(warnSpy).toHaveBeenCalledWith("[Test] warn message");
277
+ });
278
+ it("logs error messages", () => {
279
+ const logger = createLogger("Test");
280
+ logger.error("error message");
281
+ expect(errorSpy).toHaveBeenCalledWith("[Test] error message");
282
+ });
283
+ });
284
+ describe("log level filtering at debug level", () => {
285
+ beforeEach(() => {
286
+ process.env.HERDCTL_LOG_LEVEL = "debug";
287
+ });
288
+ it("logs debug messages", () => {
289
+ const logger = createLogger("Test");
290
+ logger.debug("debug message");
291
+ expect(debugSpy).toHaveBeenCalledWith("[Test] debug message");
292
+ });
293
+ it("logs info messages", () => {
294
+ const logger = createLogger("Test");
295
+ logger.info("info message");
296
+ expect(infoSpy).toHaveBeenCalledWith("[Test] info message");
297
+ });
298
+ it("logs warn messages", () => {
299
+ const logger = createLogger("Test");
300
+ logger.warn("warn message");
301
+ expect(warnSpy).toHaveBeenCalledWith("[Test] warn message");
302
+ });
303
+ it("logs error messages", () => {
304
+ const logger = createLogger("Test");
305
+ logger.error("error message");
306
+ expect(errorSpy).toHaveBeenCalledWith("[Test] error message");
307
+ });
308
+ });
309
+ describe("log level filtering at error level", () => {
310
+ beforeEach(() => {
311
+ process.env.HERDCTL_LOG_LEVEL = "error";
312
+ });
313
+ it("does not log debug messages", () => {
314
+ const logger = createLogger("Test");
315
+ logger.debug("debug message");
316
+ expect(debugSpy).not.toHaveBeenCalled();
317
+ });
318
+ it("does not log info messages", () => {
319
+ const logger = createLogger("Test");
320
+ logger.info("info message");
321
+ expect(infoSpy).not.toHaveBeenCalled();
322
+ });
323
+ it("does not log warn messages", () => {
324
+ const logger = createLogger("Test");
325
+ logger.warn("warn message");
326
+ expect(warnSpy).not.toHaveBeenCalled();
327
+ });
328
+ it("logs error messages", () => {
329
+ const logger = createLogger("Test");
330
+ logger.error("error message");
331
+ expect(errorSpy).toHaveBeenCalledWith("[Test] error message");
332
+ });
333
+ });
334
+ describe("DEBUG environment variable", () => {
335
+ it("enables debug logging when DEBUG=1", () => {
336
+ process.env.DEBUG = "1";
337
+ const logger = createLogger("Test");
338
+ logger.debug("debug message");
339
+ expect(debugSpy).toHaveBeenCalledWith("[Test] debug message");
340
+ });
341
+ it("enables debug logging when DEBUG=true", () => {
342
+ process.env.DEBUG = "true";
343
+ const logger = createLogger("Test");
344
+ logger.debug("debug message");
345
+ expect(debugSpy).toHaveBeenCalledWith("[Test] debug message");
346
+ });
347
+ });
348
+ describe("multiple loggers", () => {
349
+ it("different loggers have independent prefixes", () => {
350
+ process.env.HERDCTL_LOG_LEVEL = "debug";
351
+ const loggerA = createLogger("ComponentA");
352
+ const loggerB = createLogger("ComponentB");
353
+ loggerA.info("message from A");
354
+ loggerB.info("message from B");
355
+ expect(infoSpy).toHaveBeenCalledWith("[ComponentA] message from A");
356
+ expect(infoSpy).toHaveBeenCalledWith("[ComponentB] message from B");
357
+ });
358
+ });
359
+ });
360
+ //# sourceMappingURL=logger.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/logger.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EACL,eAAe,EACf,WAAW,EACX,SAAS,EACT,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,WAA8B,CAAC;IAEnC,UAAU,CAAC,GAAG,EAAE;QACd,4BAA4B;QAC5B,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACjC,0BAA0B;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACrC,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,+BAA+B;QAC/B,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC;QACxC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,MAAM,CAAC;QACvC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,MAAM,CAAC;QACvC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC;QACxC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC;QACxC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,MAAM,CAAC;QACvC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;QACxB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;QAC3B,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC;QAC5B,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;QACxB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,MAAM,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;QAC3B,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,SAAS,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;QACxB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,SAAS,CAAC;QAC1C,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAI,WAA8B,CAAC;IAEnC,UAAU,CAAC,GAAG,EAAE;QACd,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACrC,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,MAAM,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,WAA8B,CAAC;IACnC,IAAI,QAAqC,CAAC;IAC1C,IAAI,OAAoC,CAAC;IACzC,IAAI,OAAoC,CAAC;IACzC,IAAI,QAAqC,CAAC;IAE1C,UAAU,CAAC,GAAG,EAAE;QACd,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACrC,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAEzB,yBAAyB;QACzB,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnE,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACjE,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACjE,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC;QAC1B,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;YAE1C,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;YAE1C,MAAM,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7C,MAAM,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAE7B,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,4BAA4B,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE5B,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,4BAA4B,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE5B,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,4BAA4B,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAE7B,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,4BAA4B,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAEnC,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,kCAAkC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEvB,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;YAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEvB,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;QAC3D,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAE9B,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE5B,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE5B,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;YAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAE9B,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAClD,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;YAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAE9B,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE5B,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE5B,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;YAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAE9B,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAClD,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAE9B,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE5B,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE5B,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;YAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAE9B,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;YACxB,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAE9B,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;YAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAE9B,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC;YAExC,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;YAE3C,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAE/B,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,6BAA6B,CAAC,CAAC;YACpE,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,6BAA6B,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Utility modules for @herdctl/core
3
+ */
4
+ export * from "./logger.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Utility modules for @herdctl/core
3
+ */
4
+ export * from "./logger.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Centralized logger utility for herdctl
3
+ *
4
+ * Provides environment-aware logging that respects HERDCTL_LOG_LEVEL
5
+ * and DEBUG environment variables.
6
+ *
7
+ * Supports a global log handler so consumers (e.g. the CLI) can install
8
+ * colorized or otherwise customized output formatting for all loggers.
9
+ */
10
+ import type { LogLevel } from "../fleet-manager/types.js";
11
+ export type { LogLevel };
12
+ /**
13
+ * Numeric order for log level comparison
14
+ * Lower numbers = more verbose
15
+ */
16
+ export declare const LOG_LEVEL_ORDER: Record<LogLevel, number>;
17
+ /**
18
+ * Global log handler function type
19
+ *
20
+ * When set, all loggers created by `createLogger` will delegate to this
21
+ * handler instead of calling `console.*` directly. The handler is
22
+ * responsible for its own level filtering (use `shouldLog` if needed).
23
+ */
24
+ export type LogHandler = (level: LogLevel, prefix: string, message: string, data?: Record<string, unknown>) => void;
25
+ /**
26
+ * Set a global log handler for all `createLogger` instances
27
+ *
28
+ * Pass `null` to revert to default `console.*` output.
29
+ */
30
+ export declare function setLogHandler(handler: LogHandler | null): void;
31
+ /**
32
+ * Get the current log level from environment
33
+ *
34
+ * Priority:
35
+ * 1. HERDCTL_LOG_LEVEL environment variable (debug/info/warn/error)
36
+ * 2. DEBUG=1 or DEBUG=true enables debug level
37
+ * 3. Default: 'info'
38
+ */
39
+ export declare function getLogLevel(): LogLevel;
40
+ /**
41
+ * Check if a log level should be displayed based on current settings
42
+ *
43
+ * @param level - The level to check
44
+ * @returns true if the level should be logged
45
+ */
46
+ export declare function shouldLog(level: LogLevel): boolean;
47
+ /**
48
+ * Create a logger with a specific prefix
49
+ *
50
+ * Returns a logger object that respects the HERDCTL_LOG_LEVEL
51
+ * environment variable. Each method accepts an optional data
52
+ * parameter that is JSON-serialized into the log output.
53
+ *
54
+ * @param prefix - The prefix to use for log messages (e.g., 'CLIRuntime')
55
+ * @returns A logger object with debug/info/warn/error methods
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const logger = createLogger('CLIRuntime');
60
+ * logger.debug('Starting process...'); // Only shown if HERDCTL_LOG_LEVEL=debug
61
+ * logger.info('Process started'); // Shown at info level and below
62
+ * logger.info('Connected', { host: 'localhost' }); // With structured data
63
+ * logger.error('Process failed'); // Always shown
64
+ * ```
65
+ */
66
+ export declare function createLogger(prefix: string): {
67
+ debug: (message: string, data?: Record<string, unknown>) => void;
68
+ info: (message: string, data?: Record<string, unknown>) => void;
69
+ warn: (message: string, data?: Record<string, unknown>) => void;
70
+ error: (message: string, data?: Record<string, unknown>) => void;
71
+ };
72
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,YAAY,EAAE,QAAQ,EAAE,CAAC;AAEzB;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAKpD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,IAAI,CAAC;AAKV;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAE9D;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAUtC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAGlD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM;qBAOtB,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAOvC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAOtC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;qBAOrC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EAQ1D"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Centralized logger utility for herdctl
3
+ *
4
+ * Provides environment-aware logging that respects HERDCTL_LOG_LEVEL
5
+ * and DEBUG environment variables.
6
+ *
7
+ * Supports a global log handler so consumers (e.g. the CLI) can install
8
+ * colorized or otherwise customized output formatting for all loggers.
9
+ */
10
+ /**
11
+ * Numeric order for log level comparison
12
+ * Lower numbers = more verbose
13
+ */
14
+ export const LOG_LEVEL_ORDER = {
15
+ debug: 0,
16
+ info: 1,
17
+ warn: 2,
18
+ error: 3,
19
+ };
20
+ /** Global log handler — null means use default console output */
21
+ let logHandler = null;
22
+ /**
23
+ * Set a global log handler for all `createLogger` instances
24
+ *
25
+ * Pass `null` to revert to default `console.*` output.
26
+ */
27
+ export function setLogHandler(handler) {
28
+ logHandler = handler;
29
+ }
30
+ /**
31
+ * Get the current log level from environment
32
+ *
33
+ * Priority:
34
+ * 1. HERDCTL_LOG_LEVEL environment variable (debug/info/warn/error)
35
+ * 2. DEBUG=1 or DEBUG=true enables debug level
36
+ * 3. Default: 'info'
37
+ */
38
+ export function getLogLevel() {
39
+ const envLevel = process.env.HERDCTL_LOG_LEVEL?.toLowerCase();
40
+ if (envLevel && envLevel in LOG_LEVEL_ORDER) {
41
+ return envLevel;
42
+ }
43
+ // Also support DEBUG=1 or DEBUG=true for debug level
44
+ if (process.env.DEBUG === "1" || process.env.DEBUG === "true") {
45
+ return "debug";
46
+ }
47
+ return "info"; // Default
48
+ }
49
+ /**
50
+ * Check if a log level should be displayed based on current settings
51
+ *
52
+ * @param level - The level to check
53
+ * @returns true if the level should be logged
54
+ */
55
+ export function shouldLog(level) {
56
+ const currentLevel = getLogLevel();
57
+ return LOG_LEVEL_ORDER[level] >= LOG_LEVEL_ORDER[currentLevel];
58
+ }
59
+ /**
60
+ * Create a logger with a specific prefix
61
+ *
62
+ * Returns a logger object that respects the HERDCTL_LOG_LEVEL
63
+ * environment variable. Each method accepts an optional data
64
+ * parameter that is JSON-serialized into the log output.
65
+ *
66
+ * @param prefix - The prefix to use for log messages (e.g., 'CLIRuntime')
67
+ * @returns A logger object with debug/info/warn/error methods
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * const logger = createLogger('CLIRuntime');
72
+ * logger.debug('Starting process...'); // Only shown if HERDCTL_LOG_LEVEL=debug
73
+ * logger.info('Process started'); // Shown at info level and below
74
+ * logger.info('Connected', { host: 'localhost' }); // With structured data
75
+ * logger.error('Process failed'); // Always shown
76
+ * ```
77
+ */
78
+ export function createLogger(prefix) {
79
+ const fmt = (message, data) => data
80
+ ? `[${prefix}] ${message} ${JSON.stringify(data)}`
81
+ : `[${prefix}] ${message}`;
82
+ return {
83
+ debug: (message, data) => {
84
+ if (logHandler) {
85
+ logHandler("debug", prefix, message, data);
86
+ }
87
+ else if (shouldLog("debug")) {
88
+ console.debug(fmt(message, data));
89
+ }
90
+ },
91
+ info: (message, data) => {
92
+ if (logHandler) {
93
+ logHandler("info", prefix, message, data);
94
+ }
95
+ else if (shouldLog("info")) {
96
+ console.info(fmt(message, data));
97
+ }
98
+ },
99
+ warn: (message, data) => {
100
+ if (logHandler) {
101
+ logHandler("warn", prefix, message, data);
102
+ }
103
+ else if (shouldLog("warn")) {
104
+ console.warn(fmt(message, data));
105
+ }
106
+ },
107
+ error: (message, data) => {
108
+ if (logHandler) {
109
+ logHandler("error", prefix, message, data);
110
+ }
111
+ else if (shouldLog("error")) {
112
+ console.error(fmt(message, data));
113
+ }
114
+ },
115
+ };
116
+ }
117
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@herdctl/core",
3
- "version": "4.1.0",
3
+ "version": "4.2.0",
4
4
  "description": "Core library for herdctl fleet management",
5
5
  "license": "MIT",
6
6
  "type": "module",