@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.
- package/dist/config/__tests__/agent.test.js +61 -13
- package/dist/config/__tests__/agent.test.js.map +1 -1
- package/dist/config/__tests__/merge.test.js +10 -3
- package/dist/config/__tests__/merge.test.js.map +1 -1
- package/dist/config/__tests__/schema.test.js +350 -1
- package/dist/config/__tests__/schema.test.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +3 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/schema.d.ts +841 -27
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +129 -10
- package/dist/config/schema.js.map +1 -1
- package/dist/fleet-manager/__tests__/coverage.test.js +14 -331
- package/dist/fleet-manager/__tests__/coverage.test.js.map +1 -1
- package/dist/fleet-manager/__tests__/errors.test.js +1 -49
- package/dist/fleet-manager/__tests__/errors.test.js.map +1 -1
- package/dist/fleet-manager/__tests__/integration.test.js +114 -0
- package/dist/fleet-manager/__tests__/integration.test.js.map +1 -1
- package/dist/fleet-manager/__tests__/job-control.test.js +13 -14
- package/dist/fleet-manager/__tests__/job-control.test.js.map +1 -1
- package/dist/fleet-manager/__tests__/reload.test.js +12 -2
- package/dist/fleet-manager/__tests__/reload.test.js.map +1 -1
- package/dist/fleet-manager/__tests__/status-queries.test.js +6 -0
- package/dist/fleet-manager/__tests__/status-queries.test.js.map +1 -1
- package/dist/fleet-manager/__tests__/trigger.test.js +10 -2
- package/dist/fleet-manager/__tests__/trigger.test.js.map +1 -1
- package/dist/fleet-manager/config-reload.d.ts +164 -0
- package/dist/fleet-manager/config-reload.d.ts.map +1 -0
- package/dist/fleet-manager/config-reload.js +445 -0
- package/dist/fleet-manager/config-reload.js.map +1 -0
- package/dist/fleet-manager/context.d.ts +76 -0
- package/dist/fleet-manager/context.d.ts.map +1 -0
- package/dist/fleet-manager/context.js +11 -0
- package/dist/fleet-manager/context.js.map +1 -0
- package/dist/fleet-manager/errors.d.ts +0 -25
- package/dist/fleet-manager/errors.d.ts.map +1 -1
- package/dist/fleet-manager/errors.js +0 -38
- package/dist/fleet-manager/errors.js.map +1 -1
- package/dist/fleet-manager/event-emitters.d.ts +123 -0
- package/dist/fleet-manager/event-emitters.d.ts.map +1 -0
- package/dist/fleet-manager/event-emitters.js +136 -0
- package/dist/fleet-manager/event-emitters.js.map +1 -0
- package/dist/fleet-manager/event-types.d.ts +0 -15
- package/dist/fleet-manager/event-types.d.ts.map +1 -1
- package/dist/fleet-manager/fleet-manager.d.ts +40 -653
- package/dist/fleet-manager/fleet-manager.d.ts.map +1 -1
- package/dist/fleet-manager/fleet-manager.js +95 -1720
- package/dist/fleet-manager/fleet-manager.js.map +1 -1
- package/dist/fleet-manager/index.d.ts +13 -2
- package/dist/fleet-manager/index.d.ts.map +1 -1
- package/dist/fleet-manager/index.js +19 -6
- package/dist/fleet-manager/index.js.map +1 -1
- package/dist/fleet-manager/job-control.d.ts +67 -0
- package/dist/fleet-manager/job-control.d.ts.map +1 -0
- package/dist/fleet-manager/job-control.js +333 -0
- package/dist/fleet-manager/job-control.js.map +1 -0
- package/dist/fleet-manager/log-streaming.d.ts +171 -0
- package/dist/fleet-manager/log-streaming.d.ts.map +1 -0
- package/dist/fleet-manager/log-streaming.js +503 -0
- package/dist/fleet-manager/log-streaming.js.map +1 -0
- package/dist/fleet-manager/schedule-executor.d.ts +63 -0
- package/dist/fleet-manager/schedule-executor.d.ts.map +1 -0
- package/dist/fleet-manager/schedule-executor.js +209 -0
- package/dist/fleet-manager/schedule-executor.js.map +1 -0
- package/dist/fleet-manager/schedule-management.d.ts +71 -0
- package/dist/fleet-manager/schedule-management.d.ts.map +1 -0
- package/dist/fleet-manager/schedule-management.js +171 -0
- package/dist/fleet-manager/schedule-management.js.map +1 -0
- package/dist/fleet-manager/status-queries.d.ts +105 -0
- package/dist/fleet-manager/status-queries.d.ts.map +1 -0
- package/dist/fleet-manager/status-queries.js +247 -0
- package/dist/fleet-manager/status-queries.js.map +1 -0
- package/dist/fleet-manager/types.d.ts +0 -39
- package/dist/fleet-manager/types.d.ts.map +1 -1
- package/dist/runner/__tests__/job-executor.test.js +206 -1
- package/dist/runner/__tests__/job-executor.test.js.map +1 -1
- package/dist/runner/job-executor.d.ts +9 -0
- package/dist/runner/job-executor.d.ts.map +1 -1
- package/dist/runner/job-executor.js +78 -4
- package/dist/runner/job-executor.js.map +1 -1
- package/dist/runner/message-processor.d.ts.map +1 -1
- package/dist/runner/message-processor.js +53 -0
- package/dist/runner/message-processor.js.map +1 -1
- package/dist/runner/types.d.ts +3 -1
- package/dist/runner/types.d.ts.map +1 -1
- package/dist/scheduler/__tests__/cron.test.d.ts +2 -0
- package/dist/scheduler/__tests__/cron.test.d.ts.map +1 -0
- package/dist/scheduler/__tests__/cron.test.js +867 -0
- package/dist/scheduler/__tests__/cron.test.js.map +1 -0
- package/dist/scheduler/__tests__/scheduler.test.js +164 -5
- package/dist/scheduler/__tests__/scheduler.test.js.map +1 -1
- package/dist/scheduler/cron.d.ts +126 -0
- package/dist/scheduler/cron.d.ts.map +1 -0
- package/dist/scheduler/cron.js +390 -0
- package/dist/scheduler/cron.js.map +1 -0
- package/dist/scheduler/errors.d.ts +81 -1
- package/dist/scheduler/errors.d.ts.map +1 -1
- package/dist/scheduler/errors.js +81 -6
- package/dist/scheduler/errors.js.map +1 -1
- package/dist/scheduler/index.d.ts +1 -0
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +2 -0
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/schedule-runner.d.ts +2 -2
- package/dist/scheduler/schedule-runner.d.ts.map +1 -1
- package/dist/scheduler/schedule-runner.js +20 -8
- package/dist/scheduler/schedule-runner.js.map +1 -1
- package/dist/scheduler/scheduler.d.ts +4 -4
- package/dist/scheduler/scheduler.d.ts.map +1 -1
- package/dist/scheduler/scheduler.js +95 -20
- package/dist/scheduler/scheduler.js.map +1 -1
- package/dist/scheduler/types.d.ts +1 -1
- package/dist/scheduler/types.d.ts.map +1 -1
- package/dist/state/schemas/job-metadata.d.ts +2 -2
- package/package.json +33 -8
- package/.turbo/turbo-build.log +0 -4
- package/.turbo/turbo-test.log +0 -219
- package/.turbo/turbo-typecheck.log +0 -4
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/coverage-final.json +0 -51
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -251
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -210
- package/coverage/src/config/index.html +0 -191
- package/coverage/src/config/index.ts.html +0 -442
- package/coverage/src/config/interpolate.ts.html +0 -652
- package/coverage/src/config/loader.ts.html +0 -1501
- package/coverage/src/config/merge.ts.html +0 -823
- package/coverage/src/config/parser.ts.html +0 -1213
- package/coverage/src/config/schema.ts.html +0 -1123
- package/coverage/src/fleet-manager/errors.ts.html +0 -2326
- package/coverage/src/fleet-manager/event-types.ts.html +0 -1219
- package/coverage/src/fleet-manager/fleet-manager.ts.html +0 -7030
- package/coverage/src/fleet-manager/index.html +0 -206
- package/coverage/src/fleet-manager/index.ts.html +0 -469
- package/coverage/src/fleet-manager/job-manager.ts.html +0 -2074
- package/coverage/src/fleet-manager/job-queue.ts.html +0 -2479
- package/coverage/src/fleet-manager/types.ts.html +0 -2602
- package/coverage/src/index.html +0 -116
- package/coverage/src/index.ts.html +0 -181
- package/coverage/src/runner/errors.ts.html +0 -1006
- package/coverage/src/runner/index.html +0 -191
- package/coverage/src/runner/index.ts.html +0 -256
- package/coverage/src/runner/job-executor.ts.html +0 -1429
- package/coverage/src/runner/message-processor.ts.html +0 -1150
- package/coverage/src/runner/sdk-adapter.ts.html +0 -658
- package/coverage/src/runner/types.ts.html +0 -559
- package/coverage/src/scheduler/errors.ts.html +0 -388
- package/coverage/src/scheduler/index.html +0 -206
- package/coverage/src/scheduler/index.ts.html +0 -244
- package/coverage/src/scheduler/interval.ts.html +0 -652
- package/coverage/src/scheduler/schedule-runner.ts.html +0 -1411
- package/coverage/src/scheduler/schedule-state.ts.html +0 -718
- package/coverage/src/scheduler/scheduler.ts.html +0 -1795
- package/coverage/src/scheduler/types.ts.html +0 -733
- package/coverage/src/state/directory.ts.html +0 -736
- package/coverage/src/state/errors.ts.html +0 -376
- package/coverage/src/state/fleet-state.ts.html +0 -937
- package/coverage/src/state/index.html +0 -221
- package/coverage/src/state/index.ts.html +0 -322
- package/coverage/src/state/job-metadata.ts.html +0 -1420
- package/coverage/src/state/job-output.ts.html +0 -1033
- package/coverage/src/state/schemas/fleet-state.ts.html +0 -445
- package/coverage/src/state/schemas/index.html +0 -176
- package/coverage/src/state/schemas/index.ts.html +0 -286
- package/coverage/src/state/schemas/job-metadata.ts.html +0 -628
- package/coverage/src/state/schemas/job-output.ts.html +0 -616
- package/coverage/src/state/schemas/session-info.ts.html +0 -361
- package/coverage/src/state/session.ts.html +0 -844
- package/coverage/src/state/types.ts.html +0 -262
- package/coverage/src/state/utils/atomic.ts.html +0 -748
- package/coverage/src/state/utils/index.html +0 -146
- package/coverage/src/state/utils/index.ts.html +0 -103
- package/coverage/src/state/utils/reads.ts.html +0 -1621
- package/coverage/src/work-sources/adapters/github.ts.html +0 -3583
- package/coverage/src/work-sources/adapters/index.html +0 -131
- package/coverage/src/work-sources/adapters/index.ts.html +0 -277
- package/coverage/src/work-sources/errors.ts.html +0 -298
- package/coverage/src/work-sources/index.html +0 -176
- package/coverage/src/work-sources/index.ts.html +0 -529
- package/coverage/src/work-sources/manager.ts.html +0 -1324
- package/coverage/src/work-sources/registry.ts.html +0 -619
- package/coverage/src/work-sources/types.ts.html +0 -568
- package/dist/fleet-manager/__tests__/event-helpers.test.d.ts +0 -7
- package/dist/fleet-manager/__tests__/event-helpers.test.d.ts.map +0 -1
- package/dist/fleet-manager/__tests__/event-helpers.test.js +0 -368
- package/dist/fleet-manager/__tests__/event-helpers.test.js.map +0 -1
- package/src/config/__tests__/agent.test.ts +0 -864
- package/src/config/__tests__/interpolate.test.ts +0 -644
- package/src/config/__tests__/loader.test.ts +0 -784
- package/src/config/__tests__/merge.test.ts +0 -751
- package/src/config/__tests__/parser.test.ts +0 -533
- package/src/config/__tests__/schema.test.ts +0 -873
- package/src/config/index.ts +0 -119
- package/src/config/interpolate.ts +0 -189
- package/src/config/loader.ts +0 -472
- package/src/config/merge.ts +0 -246
- package/src/config/parser.ts +0 -376
- package/src/config/schema.ts +0 -346
- package/src/fleet-manager/__tests__/coverage.test.ts +0 -2869
- package/src/fleet-manager/__tests__/errors.test.ts +0 -660
- package/src/fleet-manager/__tests__/event-helpers.test.ts +0 -448
- package/src/fleet-manager/__tests__/integration.test.ts +0 -1209
- package/src/fleet-manager/__tests__/job-control.test.ts +0 -283
- package/src/fleet-manager/__tests__/job-manager.test.ts +0 -869
- package/src/fleet-manager/__tests__/job-queue.test.ts +0 -401
- package/src/fleet-manager/__tests__/reload.test.ts +0 -751
- package/src/fleet-manager/__tests__/status-queries.test.ts +0 -595
- package/src/fleet-manager/__tests__/trigger.test.ts +0 -601
- package/src/fleet-manager/errors.ts +0 -747
- package/src/fleet-manager/event-types.ts +0 -378
- package/src/fleet-manager/fleet-manager.ts +0 -2315
- package/src/fleet-manager/index.ts +0 -128
- package/src/fleet-manager/job-manager.ts +0 -663
- package/src/fleet-manager/job-queue.ts +0 -798
- package/src/fleet-manager/types.ts +0 -839
- package/src/index.ts +0 -32
- package/src/runner/__tests__/errors.test.ts +0 -382
- package/src/runner/__tests__/job-executor.test.ts +0 -1708
- package/src/runner/__tests__/message-processor.test.ts +0 -960
- package/src/runner/__tests__/sdk-adapter.test.ts +0 -626
- package/src/runner/errors.ts +0 -307
- package/src/runner/index.ts +0 -57
- package/src/runner/job-executor.ts +0 -448
- package/src/runner/message-processor.ts +0 -355
- package/src/runner/sdk-adapter.ts +0 -191
- package/src/runner/types.ts +0 -158
- package/src/scheduler/__tests__/errors.test.ts +0 -159
- package/src/scheduler/__tests__/interval.test.ts +0 -515
- package/src/scheduler/__tests__/schedule-runner.test.ts +0 -798
- package/src/scheduler/__tests__/schedule-state.test.ts +0 -671
- package/src/scheduler/__tests__/scheduler.test.ts +0 -1280
- package/src/scheduler/errors.ts +0 -101
- package/src/scheduler/index.ts +0 -53
- package/src/scheduler/interval.ts +0 -189
- package/src/scheduler/schedule-runner.ts +0 -442
- package/src/scheduler/schedule-state.ts +0 -211
- package/src/scheduler/scheduler.ts +0 -570
- package/src/scheduler/types.ts +0 -216
- package/src/state/__tests__/directory.test.ts +0 -595
- package/src/state/__tests__/fleet-state.test.ts +0 -868
- package/src/state/__tests__/job-metadata-schema.test.ts +0 -414
- package/src/state/__tests__/job-metadata.test.ts +0 -831
- package/src/state/__tests__/job-output.test.ts +0 -856
- package/src/state/__tests__/session-schema.test.ts +0 -378
- package/src/state/__tests__/session.test.ts +0 -604
- package/src/state/directory.ts +0 -217
- package/src/state/errors.ts +0 -97
- package/src/state/fleet-state.ts +0 -284
- package/src/state/index.ts +0 -79
- package/src/state/job-metadata.ts +0 -445
- package/src/state/job-output.ts +0 -316
- package/src/state/schemas/__tests__/job-output.test.ts +0 -338
- package/src/state/schemas/fleet-state.ts +0 -120
- package/src/state/schemas/index.ts +0 -67
- package/src/state/schemas/job-metadata.ts +0 -181
- package/src/state/schemas/job-output.ts +0 -177
- package/src/state/schemas/session-info.ts +0 -92
- package/src/state/session.ts +0 -253
- package/src/state/types.ts +0 -59
- package/src/state/utils/__tests__/atomic.test.ts +0 -723
- package/src/state/utils/__tests__/reads.test.ts +0 -1071
- package/src/state/utils/atomic.ts +0 -221
- package/src/state/utils/index.ts +0 -6
- package/src/state/utils/reads.ts +0 -512
- package/src/work-sources/__tests__/github.test.ts +0 -1800
- package/src/work-sources/__tests__/manager.test.ts +0 -529
- package/src/work-sources/__tests__/registry.test.ts +0 -477
- package/src/work-sources/__tests__/types.test.ts +0 -479
- package/src/work-sources/adapters/github.ts +0 -1166
- package/src/work-sources/adapters/index.ts +0 -64
- package/src/work-sources/errors.ts +0 -71
- package/src/work-sources/index.ts +0 -148
- package/src/work-sources/manager.ts +0 -413
- package/src/work-sources/registry.ts +0 -178
- package/src/work-sources/types.ts +0 -161
- package/tsconfig.json +0 -9
- package/vitest.config.ts +0 -19
|
@@ -10,11 +10,15 @@
|
|
|
10
10
|
* - Configuration error paths
|
|
11
11
|
*/
|
|
12
12
|
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
13
|
+
// Mock the Claude SDK to prevent real API calls during tests
|
|
14
|
+
vi.mock("@anthropic-ai/claude-agent-sdk", () => ({
|
|
15
|
+
query: vi.fn(),
|
|
16
|
+
}));
|
|
13
17
|
import { mkdtemp, rm, mkdir, writeFile } from "fs/promises";
|
|
14
18
|
import { tmpdir } from "os";
|
|
15
19
|
import { join } from "path";
|
|
16
20
|
import { FleetManager } from "../fleet-manager.js";
|
|
17
|
-
import { ConcurrencyLimitError,
|
|
21
|
+
import { ConcurrencyLimitError, ConfigurationError, AgentNotFoundError, ScheduleNotFoundError, InvalidStateError, } from "../errors.js";
|
|
18
22
|
describe("FleetManager Coverage Tests", () => {
|
|
19
23
|
let tempDir;
|
|
20
24
|
let configDir;
|
|
@@ -139,15 +143,15 @@ describe("FleetManager Coverage Tests", () => {
|
|
|
139
143
|
// Configuration Error Handling
|
|
140
144
|
// ===========================================================================
|
|
141
145
|
describe("Configuration error handling", () => {
|
|
142
|
-
it("wraps ConfigNotFoundError in
|
|
146
|
+
it("wraps ConfigNotFoundError in ConfigurationError", async () => {
|
|
143
147
|
const manager = new FleetManager({
|
|
144
148
|
configPath: "/nonexistent/path/config.yaml",
|
|
145
149
|
stateDir,
|
|
146
150
|
logger: createSilentLogger(),
|
|
147
151
|
});
|
|
148
|
-
await expect(manager.initialize()).rejects.toThrow(
|
|
152
|
+
await expect(manager.initialize()).rejects.toThrow(ConfigurationError);
|
|
149
153
|
});
|
|
150
|
-
it("wraps ConfigError in
|
|
154
|
+
it("wraps ConfigError in ConfigurationError", async () => {
|
|
151
155
|
const configPath = join(configDir, "herdctl.yaml");
|
|
152
156
|
// Invalid YAML
|
|
153
157
|
await writeFile(configPath, "invalid: yaml: content: [:");
|
|
@@ -156,9 +160,9 @@ describe("FleetManager Coverage Tests", () => {
|
|
|
156
160
|
stateDir,
|
|
157
161
|
logger: createSilentLogger(),
|
|
158
162
|
});
|
|
159
|
-
await expect(manager.initialize()).rejects.toThrow(
|
|
163
|
+
await expect(manager.initialize()).rejects.toThrow(ConfigurationError);
|
|
160
164
|
});
|
|
161
|
-
it("wraps unknown errors in
|
|
165
|
+
it("wraps unknown errors in ConfigurationError", async () => {
|
|
162
166
|
// Create a config that will cause an unexpected error
|
|
163
167
|
const configPath = join(configDir, "herdctl.yaml");
|
|
164
168
|
await writeFile(configPath, "version: 1\nagents: 'not-an-array'");
|
|
@@ -167,7 +171,7 @@ describe("FleetManager Coverage Tests", () => {
|
|
|
167
171
|
stateDir,
|
|
168
172
|
logger: createSilentLogger(),
|
|
169
173
|
});
|
|
170
|
-
await expect(manager.initialize()).rejects.toThrow(
|
|
174
|
+
await expect(manager.initialize()).rejects.toThrow(ConfigurationError);
|
|
171
175
|
});
|
|
172
176
|
});
|
|
173
177
|
// ===========================================================================
|
|
@@ -317,7 +321,7 @@ describe("FleetManager Coverage Tests", () => {
|
|
|
317
321
|
// handleScheduleTrigger Error Handling
|
|
318
322
|
// ===========================================================================
|
|
319
323
|
describe("Schedule trigger error handling", () => {
|
|
320
|
-
it("emits schedule:
|
|
324
|
+
it("emits schedule:triggered event", async () => {
|
|
321
325
|
await createAgentConfig("trigger-event-agent", {
|
|
322
326
|
name: "trigger-event-agent",
|
|
323
327
|
schedules: {
|
|
@@ -338,21 +342,15 @@ describe("FleetManager Coverage Tests", () => {
|
|
|
338
342
|
checkInterval: 50,
|
|
339
343
|
logger: createSilentLogger(),
|
|
340
344
|
});
|
|
341
|
-
const triggerHandler = vi.fn();
|
|
342
345
|
const triggeredHandler = vi.fn();
|
|
343
|
-
const completeHandler = vi.fn();
|
|
344
|
-
manager.on("schedule:trigger", triggerHandler);
|
|
345
346
|
manager.on("schedule:triggered", triggeredHandler);
|
|
346
|
-
manager.on("schedule:complete", completeHandler);
|
|
347
347
|
await manager.initialize();
|
|
348
348
|
await manager.start();
|
|
349
349
|
// Wait for schedule to trigger
|
|
350
350
|
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
351
351
|
await manager.stop();
|
|
352
|
-
//
|
|
353
|
-
expect(triggerHandler).toHaveBeenCalled();
|
|
352
|
+
// The schedule:triggered event should be emitted
|
|
354
353
|
expect(triggeredHandler).toHaveBeenCalled();
|
|
355
|
-
expect(completeHandler).toHaveBeenCalled();
|
|
356
354
|
});
|
|
357
355
|
});
|
|
358
356
|
// ===========================================================================
|
|
@@ -1499,320 +1497,6 @@ describe("FleetManager Coverage Tests", () => {
|
|
|
1499
1497
|
});
|
|
1500
1498
|
});
|
|
1501
1499
|
// ===========================================================================
|
|
1502
|
-
// FleetManagerStateError tests
|
|
1503
|
-
// ===========================================================================
|
|
1504
|
-
describe("FleetManagerStateError", () => {
|
|
1505
|
-
it("has requiredState alias for backwards compatibility", async () => {
|
|
1506
|
-
const { FleetManagerStateError } = await import("../errors.js");
|
|
1507
|
-
const error = new FleetManagerStateError("test", "current", "required");
|
|
1508
|
-
expect(error.requiredState).toBe("required");
|
|
1509
|
-
});
|
|
1510
|
-
});
|
|
1511
|
-
// ===========================================================================
|
|
1512
|
-
// Event emission helper methods
|
|
1513
|
-
// ===========================================================================
|
|
1514
|
-
describe("Event emission helpers", () => {
|
|
1515
|
-
it("emitConfigReloaded emits config:reloaded event", async () => {
|
|
1516
|
-
await createAgentConfig("emit-config-agent", {
|
|
1517
|
-
name: "emit-config-agent",
|
|
1518
|
-
});
|
|
1519
|
-
const configPath = await createConfig({
|
|
1520
|
-
version: 1,
|
|
1521
|
-
agents: [{ path: "./agents/emit-config-agent.yaml" }],
|
|
1522
|
-
});
|
|
1523
|
-
const manager = new FleetManager({
|
|
1524
|
-
configPath,
|
|
1525
|
-
stateDir,
|
|
1526
|
-
logger: createSilentLogger(),
|
|
1527
|
-
});
|
|
1528
|
-
await manager.initialize();
|
|
1529
|
-
const handler = vi.fn();
|
|
1530
|
-
manager.on("config:reloaded", handler);
|
|
1531
|
-
manager.emitConfigReloaded({
|
|
1532
|
-
agentCount: 1,
|
|
1533
|
-
agentNames: ["emit-config-agent"],
|
|
1534
|
-
configPath,
|
|
1535
|
-
changes: [],
|
|
1536
|
-
timestamp: new Date().toISOString(),
|
|
1537
|
-
});
|
|
1538
|
-
expect(handler).toHaveBeenCalledTimes(1);
|
|
1539
|
-
});
|
|
1540
|
-
it("emitAgentStarted emits agent:started event", async () => {
|
|
1541
|
-
await createAgentConfig("emit-start-agent", {
|
|
1542
|
-
name: "emit-start-agent",
|
|
1543
|
-
});
|
|
1544
|
-
const configPath = await createConfig({
|
|
1545
|
-
version: 1,
|
|
1546
|
-
agents: [{ path: "./agents/emit-start-agent.yaml" }],
|
|
1547
|
-
});
|
|
1548
|
-
const manager = new FleetManager({
|
|
1549
|
-
configPath,
|
|
1550
|
-
stateDir,
|
|
1551
|
-
logger: createSilentLogger(),
|
|
1552
|
-
});
|
|
1553
|
-
await manager.initialize();
|
|
1554
|
-
const handler = vi.fn();
|
|
1555
|
-
manager.on("agent:started", handler);
|
|
1556
|
-
const agent = manager.getAgents().find(a => a.name === "emit-start-agent");
|
|
1557
|
-
manager.emitAgentStarted({
|
|
1558
|
-
agent,
|
|
1559
|
-
timestamp: new Date().toISOString(),
|
|
1560
|
-
});
|
|
1561
|
-
expect(handler).toHaveBeenCalledTimes(1);
|
|
1562
|
-
});
|
|
1563
|
-
it("emitAgentStopped emits agent:stopped event", async () => {
|
|
1564
|
-
await createAgentConfig("emit-stop-agent", {
|
|
1565
|
-
name: "emit-stop-agent",
|
|
1566
|
-
});
|
|
1567
|
-
const configPath = await createConfig({
|
|
1568
|
-
version: 1,
|
|
1569
|
-
agents: [{ path: "./agents/emit-stop-agent.yaml" }],
|
|
1570
|
-
});
|
|
1571
|
-
const manager = new FleetManager({
|
|
1572
|
-
configPath,
|
|
1573
|
-
stateDir,
|
|
1574
|
-
logger: createSilentLogger(),
|
|
1575
|
-
});
|
|
1576
|
-
await manager.initialize();
|
|
1577
|
-
const handler = vi.fn();
|
|
1578
|
-
manager.on("agent:stopped", handler);
|
|
1579
|
-
manager.emitAgentStopped({
|
|
1580
|
-
agentName: "emit-stop-agent",
|
|
1581
|
-
reason: "test",
|
|
1582
|
-
timestamp: new Date().toISOString(),
|
|
1583
|
-
});
|
|
1584
|
-
expect(handler).toHaveBeenCalledTimes(1);
|
|
1585
|
-
});
|
|
1586
|
-
it("emitScheduleSkipped emits schedule:skipped event", async () => {
|
|
1587
|
-
await createAgentConfig("emit-skip-agent", {
|
|
1588
|
-
name: "emit-skip-agent",
|
|
1589
|
-
schedules: {
|
|
1590
|
-
test: { type: "interval", interval: "1h" },
|
|
1591
|
-
},
|
|
1592
|
-
});
|
|
1593
|
-
const configPath = await createConfig({
|
|
1594
|
-
version: 1,
|
|
1595
|
-
agents: [{ path: "./agents/emit-skip-agent.yaml" }],
|
|
1596
|
-
});
|
|
1597
|
-
const manager = new FleetManager({
|
|
1598
|
-
configPath,
|
|
1599
|
-
stateDir,
|
|
1600
|
-
logger: createSilentLogger(),
|
|
1601
|
-
});
|
|
1602
|
-
await manager.initialize();
|
|
1603
|
-
const handler = vi.fn();
|
|
1604
|
-
manager.on("schedule:skipped", handler);
|
|
1605
|
-
manager.emitScheduleSkipped({
|
|
1606
|
-
agentName: "emit-skip-agent",
|
|
1607
|
-
scheduleName: "test",
|
|
1608
|
-
reason: "max_concurrent",
|
|
1609
|
-
timestamp: new Date().toISOString(),
|
|
1610
|
-
});
|
|
1611
|
-
expect(handler).toHaveBeenCalledTimes(1);
|
|
1612
|
-
});
|
|
1613
|
-
it("emitJobCreated emits job:created event", async () => {
|
|
1614
|
-
await createAgentConfig("emit-job-create-agent", {
|
|
1615
|
-
name: "emit-job-create-agent",
|
|
1616
|
-
});
|
|
1617
|
-
const configPath = await createConfig({
|
|
1618
|
-
version: 1,
|
|
1619
|
-
agents: [{ path: "./agents/emit-job-create-agent.yaml" }],
|
|
1620
|
-
});
|
|
1621
|
-
const manager = new FleetManager({
|
|
1622
|
-
configPath,
|
|
1623
|
-
stateDir,
|
|
1624
|
-
logger: createSilentLogger(),
|
|
1625
|
-
});
|
|
1626
|
-
await manager.initialize();
|
|
1627
|
-
const handler = vi.fn();
|
|
1628
|
-
manager.on("job:created", handler);
|
|
1629
|
-
manager.emitJobCreated({
|
|
1630
|
-
job: {
|
|
1631
|
-
id: "test-job-id",
|
|
1632
|
-
agent: "emit-job-create-agent",
|
|
1633
|
-
trigger_type: "manual",
|
|
1634
|
-
status: "pending",
|
|
1635
|
-
started_at: new Date().toISOString(),
|
|
1636
|
-
schedule: null,
|
|
1637
|
-
prompt: null,
|
|
1638
|
-
forked_from: null,
|
|
1639
|
-
},
|
|
1640
|
-
agentName: "emit-job-create-agent",
|
|
1641
|
-
timestamp: new Date().toISOString(),
|
|
1642
|
-
});
|
|
1643
|
-
expect(handler).toHaveBeenCalledTimes(1);
|
|
1644
|
-
});
|
|
1645
|
-
it("emitJobOutput emits job:output event", async () => {
|
|
1646
|
-
await createAgentConfig("emit-output-agent", {
|
|
1647
|
-
name: "emit-output-agent",
|
|
1648
|
-
});
|
|
1649
|
-
const configPath = await createConfig({
|
|
1650
|
-
version: 1,
|
|
1651
|
-
agents: [{ path: "./agents/emit-output-agent.yaml" }],
|
|
1652
|
-
});
|
|
1653
|
-
const manager = new FleetManager({
|
|
1654
|
-
configPath,
|
|
1655
|
-
stateDir,
|
|
1656
|
-
logger: createSilentLogger(),
|
|
1657
|
-
});
|
|
1658
|
-
await manager.initialize();
|
|
1659
|
-
const handler = vi.fn();
|
|
1660
|
-
manager.on("job:output", handler);
|
|
1661
|
-
manager.emitJobOutput({
|
|
1662
|
-
jobId: "test-job-id",
|
|
1663
|
-
agentName: "emit-output-agent",
|
|
1664
|
-
output: "test output",
|
|
1665
|
-
outputType: "stdout",
|
|
1666
|
-
timestamp: new Date().toISOString(),
|
|
1667
|
-
});
|
|
1668
|
-
expect(handler).toHaveBeenCalledTimes(1);
|
|
1669
|
-
});
|
|
1670
|
-
it("emitJobCompleted emits job:completed event", async () => {
|
|
1671
|
-
await createAgentConfig("emit-complete-agent", {
|
|
1672
|
-
name: "emit-complete-agent",
|
|
1673
|
-
});
|
|
1674
|
-
const configPath = await createConfig({
|
|
1675
|
-
version: 1,
|
|
1676
|
-
agents: [{ path: "./agents/emit-complete-agent.yaml" }],
|
|
1677
|
-
});
|
|
1678
|
-
const manager = new FleetManager({
|
|
1679
|
-
configPath,
|
|
1680
|
-
stateDir,
|
|
1681
|
-
logger: createSilentLogger(),
|
|
1682
|
-
});
|
|
1683
|
-
await manager.initialize();
|
|
1684
|
-
const handler = vi.fn();
|
|
1685
|
-
manager.on("job:completed", handler);
|
|
1686
|
-
manager.emitJobCompleted({
|
|
1687
|
-
job: {
|
|
1688
|
-
id: "test-job-id",
|
|
1689
|
-
agent: "emit-complete-agent",
|
|
1690
|
-
trigger_type: "manual",
|
|
1691
|
-
status: "completed",
|
|
1692
|
-
started_at: new Date().toISOString(),
|
|
1693
|
-
schedule: null,
|
|
1694
|
-
prompt: null,
|
|
1695
|
-
forked_from: null,
|
|
1696
|
-
},
|
|
1697
|
-
agentName: "emit-complete-agent",
|
|
1698
|
-
exitReason: "success",
|
|
1699
|
-
durationSeconds: 10,
|
|
1700
|
-
timestamp: new Date().toISOString(),
|
|
1701
|
-
});
|
|
1702
|
-
expect(handler).toHaveBeenCalledTimes(1);
|
|
1703
|
-
});
|
|
1704
|
-
it("emitJobFailed emits job:failed event", async () => {
|
|
1705
|
-
await createAgentConfig("emit-fail-agent", {
|
|
1706
|
-
name: "emit-fail-agent",
|
|
1707
|
-
});
|
|
1708
|
-
const configPath = await createConfig({
|
|
1709
|
-
version: 1,
|
|
1710
|
-
agents: [{ path: "./agents/emit-fail-agent.yaml" }],
|
|
1711
|
-
});
|
|
1712
|
-
const manager = new FleetManager({
|
|
1713
|
-
configPath,
|
|
1714
|
-
stateDir,
|
|
1715
|
-
logger: createSilentLogger(),
|
|
1716
|
-
});
|
|
1717
|
-
await manager.initialize();
|
|
1718
|
-
const handler = vi.fn();
|
|
1719
|
-
manager.on("job:failed", handler);
|
|
1720
|
-
manager.emitJobFailed({
|
|
1721
|
-
job: {
|
|
1722
|
-
id: "test-job-id",
|
|
1723
|
-
agent: "emit-fail-agent",
|
|
1724
|
-
trigger_type: "manual",
|
|
1725
|
-
status: "failed",
|
|
1726
|
-
started_at: new Date().toISOString(),
|
|
1727
|
-
schedule: null,
|
|
1728
|
-
prompt: null,
|
|
1729
|
-
forked_from: null,
|
|
1730
|
-
},
|
|
1731
|
-
agentName: "emit-fail-agent",
|
|
1732
|
-
error: new Error("Test error"),
|
|
1733
|
-
exitReason: "error",
|
|
1734
|
-
timestamp: new Date().toISOString(),
|
|
1735
|
-
});
|
|
1736
|
-
expect(handler).toHaveBeenCalledTimes(1);
|
|
1737
|
-
});
|
|
1738
|
-
it("emitJobCancelled emits job:cancelled event", async () => {
|
|
1739
|
-
await createAgentConfig("emit-cancel-agent", {
|
|
1740
|
-
name: "emit-cancel-agent",
|
|
1741
|
-
});
|
|
1742
|
-
const configPath = await createConfig({
|
|
1743
|
-
version: 1,
|
|
1744
|
-
agents: [{ path: "./agents/emit-cancel-agent.yaml" }],
|
|
1745
|
-
});
|
|
1746
|
-
const manager = new FleetManager({
|
|
1747
|
-
configPath,
|
|
1748
|
-
stateDir,
|
|
1749
|
-
logger: createSilentLogger(),
|
|
1750
|
-
});
|
|
1751
|
-
await manager.initialize();
|
|
1752
|
-
const handler = vi.fn();
|
|
1753
|
-
manager.on("job:cancelled", handler);
|
|
1754
|
-
manager.emitJobCancelled({
|
|
1755
|
-
job: {
|
|
1756
|
-
id: "test-job-id",
|
|
1757
|
-
agent: "emit-cancel-agent",
|
|
1758
|
-
trigger_type: "manual",
|
|
1759
|
-
status: "cancelled",
|
|
1760
|
-
started_at: new Date().toISOString(),
|
|
1761
|
-
schedule: null,
|
|
1762
|
-
prompt: null,
|
|
1763
|
-
forked_from: null,
|
|
1764
|
-
},
|
|
1765
|
-
agentName: "emit-cancel-agent",
|
|
1766
|
-
terminationType: "graceful",
|
|
1767
|
-
timestamp: new Date().toISOString(),
|
|
1768
|
-
});
|
|
1769
|
-
expect(handler).toHaveBeenCalledTimes(1);
|
|
1770
|
-
});
|
|
1771
|
-
it("emitJobForked emits job:forked event", async () => {
|
|
1772
|
-
await createAgentConfig("emit-fork-agent", {
|
|
1773
|
-
name: "emit-fork-agent",
|
|
1774
|
-
});
|
|
1775
|
-
const configPath = await createConfig({
|
|
1776
|
-
version: 1,
|
|
1777
|
-
agents: [{ path: "./agents/emit-fork-agent.yaml" }],
|
|
1778
|
-
});
|
|
1779
|
-
const manager = new FleetManager({
|
|
1780
|
-
configPath,
|
|
1781
|
-
stateDir,
|
|
1782
|
-
logger: createSilentLogger(),
|
|
1783
|
-
});
|
|
1784
|
-
await manager.initialize();
|
|
1785
|
-
const handler = vi.fn();
|
|
1786
|
-
manager.on("job:forked", handler);
|
|
1787
|
-
const originalJob = {
|
|
1788
|
-
id: "original-job-id",
|
|
1789
|
-
agent: "emit-fork-agent",
|
|
1790
|
-
trigger_type: "manual",
|
|
1791
|
-
status: "completed",
|
|
1792
|
-
started_at: new Date().toISOString(),
|
|
1793
|
-
schedule: null,
|
|
1794
|
-
prompt: null,
|
|
1795
|
-
forked_from: null,
|
|
1796
|
-
};
|
|
1797
|
-
manager.emitJobForked({
|
|
1798
|
-
job: {
|
|
1799
|
-
id: "forked-job-id",
|
|
1800
|
-
agent: "emit-fork-agent",
|
|
1801
|
-
trigger_type: "fork",
|
|
1802
|
-
status: "pending",
|
|
1803
|
-
started_at: new Date().toISOString(),
|
|
1804
|
-
schedule: null,
|
|
1805
|
-
prompt: null,
|
|
1806
|
-
forked_from: "original-job-id",
|
|
1807
|
-
},
|
|
1808
|
-
originalJob,
|
|
1809
|
-
agentName: "emit-fork-agent",
|
|
1810
|
-
timestamp: new Date().toISOString(),
|
|
1811
|
-
});
|
|
1812
|
-
expect(handler).toHaveBeenCalledTimes(1);
|
|
1813
|
-
});
|
|
1814
|
-
});
|
|
1815
|
-
// ===========================================================================
|
|
1816
1500
|
// getAgentInfoByName tests
|
|
1817
1501
|
// ===========================================================================
|
|
1818
1502
|
describe("getAgentInfoByName", () => {
|
|
@@ -2120,8 +1804,7 @@ describe("FleetManager Coverage Tests", () => {
|
|
|
2120
1804
|
stateDir,
|
|
2121
1805
|
logger: createSilentLogger(),
|
|
2122
1806
|
});
|
|
2123
|
-
|
|
2124
|
-
await expect(manager.start()).rejects.toThrow(FleetManagerStateError);
|
|
1807
|
+
await expect(manager.start()).rejects.toThrow(InvalidStateError);
|
|
2125
1808
|
});
|
|
2126
1809
|
});
|
|
2127
1810
|
// ===========================================================================
|