herdctl 0.0.1 → 0.0.2

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 (70) hide show
  1. package/bin/herdctl.js +9 -0
  2. package/dist/commands/__tests__/config.test.d.ts +2 -0
  3. package/dist/commands/__tests__/config.test.d.ts.map +1 -0
  4. package/dist/commands/__tests__/config.test.js +299 -0
  5. package/dist/commands/__tests__/config.test.js.map +1 -0
  6. package/dist/commands/__tests__/init.test.d.ts +2 -0
  7. package/dist/commands/__tests__/init.test.d.ts.map +1 -0
  8. package/dist/commands/__tests__/init.test.js +247 -0
  9. package/dist/commands/__tests__/init.test.js.map +1 -0
  10. package/dist/commands/__tests__/start.test.d.ts +2 -0
  11. package/dist/commands/__tests__/start.test.d.ts.map +1 -0
  12. package/dist/commands/__tests__/start.test.js +185 -0
  13. package/dist/commands/__tests__/start.test.js.map +1 -0
  14. package/dist/commands/__tests__/status.test.d.ts +2 -0
  15. package/dist/commands/__tests__/status.test.d.ts.map +1 -0
  16. package/dist/commands/__tests__/status.test.js +342 -0
  17. package/dist/commands/__tests__/status.test.js.map +1 -0
  18. package/dist/commands/__tests__/stop.test.d.ts +2 -0
  19. package/dist/commands/__tests__/stop.test.d.ts.map +1 -0
  20. package/dist/commands/__tests__/stop.test.js +229 -0
  21. package/dist/commands/__tests__/stop.test.js.map +1 -0
  22. package/dist/commands/__tests__/trigger.test.d.ts +2 -0
  23. package/dist/commands/__tests__/trigger.test.d.ts.map +1 -0
  24. package/dist/commands/__tests__/trigger.test.js +321 -0
  25. package/dist/commands/__tests__/trigger.test.js.map +1 -0
  26. package/dist/commands/cancel.d.ts +20 -0
  27. package/dist/commands/cancel.d.ts.map +1 -0
  28. package/dist/commands/cancel.js +263 -0
  29. package/dist/commands/cancel.js.map +1 -0
  30. package/dist/commands/config.d.ts +26 -0
  31. package/dist/commands/config.d.ts.map +1 -0
  32. package/dist/commands/config.js +287 -0
  33. package/dist/commands/config.js.map +1 -0
  34. package/dist/commands/init.d.ts +16 -0
  35. package/dist/commands/init.d.ts.map +1 -0
  36. package/dist/commands/init.js +305 -0
  37. package/dist/commands/init.js.map +1 -0
  38. package/dist/commands/job.d.ts +19 -0
  39. package/dist/commands/job.d.ts.map +1 -0
  40. package/dist/commands/job.js +460 -0
  41. package/dist/commands/job.js.map +1 -0
  42. package/dist/commands/jobs.d.ts +23 -0
  43. package/dist/commands/jobs.d.ts.map +1 -0
  44. package/dist/commands/jobs.js +328 -0
  45. package/dist/commands/jobs.js.map +1 -0
  46. package/dist/commands/logs.d.ts +25 -0
  47. package/dist/commands/logs.d.ts.map +1 -0
  48. package/dist/commands/logs.js +360 -0
  49. package/dist/commands/logs.js.map +1 -0
  50. package/dist/commands/start.d.ts +17 -0
  51. package/dist/commands/start.d.ts.map +1 -0
  52. package/dist/commands/start.js +166 -0
  53. package/dist/commands/start.js.map +1 -0
  54. package/dist/commands/status.d.ts +18 -0
  55. package/dist/commands/status.d.ts.map +1 -0
  56. package/dist/commands/status.js +373 -0
  57. package/dist/commands/status.js.map +1 -0
  58. package/dist/commands/stop.d.ts +18 -0
  59. package/dist/commands/stop.d.ts.map +1 -0
  60. package/dist/commands/stop.js +161 -0
  61. package/dist/commands/stop.js.map +1 -0
  62. package/dist/commands/trigger.d.ts +23 -0
  63. package/dist/commands/trigger.d.ts.map +1 -0
  64. package/dist/commands/trigger.js +332 -0
  65. package/dist/commands/trigger.js.map +1 -0
  66. package/dist/index.d.ts +23 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +283 -0
  69. package/dist/index.js.map +1 -0
  70. package/package.json +46 -7
package/bin/herdctl.js ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * herdctl CLI entry point
5
+ *
6
+ * This file bootstraps the CLI by importing the compiled TypeScript.
7
+ */
8
+
9
+ import "../dist/index.js";
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,299 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
+ import * as fs from "node:fs";
3
+ import * as path from "node:path";
4
+ import { tmpdir } from "node:os";
5
+ import { configValidateCommand, configShowCommand } from "../config.js";
6
+ // Helper to create a temp directory
7
+ function createTempDir() {
8
+ const baseDir = path.join(tmpdir(), `herdctl-cli-config-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
9
+ fs.mkdirSync(baseDir, { recursive: true });
10
+ return fs.realpathSync(baseDir);
11
+ }
12
+ // Helper to clean up temp directory
13
+ function cleanupTempDir(dir) {
14
+ fs.rmSync(dir, { recursive: true, force: true });
15
+ }
16
+ // Helper to create a valid fleet config
17
+ function createFleetConfig(dir, overrides = {}) {
18
+ const config = {
19
+ version: 1,
20
+ fleet: { name: "test-fleet", description: "A test fleet" },
21
+ agents: [{ path: "./agents/test-agent.yaml" }],
22
+ ...overrides,
23
+ };
24
+ // Convert to YAML manually for simplicity
25
+ let yaml = `version: ${config.version}\n`;
26
+ yaml += `fleet:\n name: ${config.fleet.name}\n`;
27
+ if (config.fleet.description) {
28
+ yaml += ` description: ${config.fleet.description}\n`;
29
+ }
30
+ yaml += `agents:\n`;
31
+ for (const agent of config.agents) {
32
+ yaml += ` - path: ${agent.path}\n`;
33
+ }
34
+ fs.writeFileSync(path.join(dir, "herdctl.yaml"), yaml, "utf-8");
35
+ }
36
+ // Helper to create a valid agent config
37
+ function createAgentConfig(dir, filename, name) {
38
+ const agentsDir = path.join(dir, "agents");
39
+ fs.mkdirSync(agentsDir, { recursive: true });
40
+ const yaml = `name: ${name}
41
+ description: A test agent
42
+ schedules:
43
+ heartbeat:
44
+ type: interval
45
+ interval: 5m
46
+ prompt: Hello
47
+ `;
48
+ fs.writeFileSync(path.join(agentsDir, filename), yaml, "utf-8");
49
+ }
50
+ describe("configValidateCommand", () => {
51
+ let tempDir;
52
+ let originalCwd;
53
+ let consoleLogs;
54
+ let consoleErrors;
55
+ let originalConsoleLog;
56
+ let originalConsoleError;
57
+ let originalProcessExit;
58
+ let exitCode;
59
+ beforeEach(() => {
60
+ tempDir = createTempDir();
61
+ originalCwd = process.cwd();
62
+ process.chdir(tempDir);
63
+ // Capture console output
64
+ consoleLogs = [];
65
+ consoleErrors = [];
66
+ originalConsoleLog = console.log;
67
+ originalConsoleError = console.error;
68
+ console.log = (...args) => consoleLogs.push(args.join(" "));
69
+ console.error = (...args) => consoleErrors.push(args.join(" "));
70
+ // Mock process.exit
71
+ exitCode = undefined;
72
+ originalProcessExit = process.exit;
73
+ process.exit = ((code) => {
74
+ exitCode = code ?? 0;
75
+ throw new Error(`process.exit(${code})`);
76
+ });
77
+ vi.clearAllMocks();
78
+ });
79
+ afterEach(() => {
80
+ process.chdir(originalCwd);
81
+ cleanupTempDir(tempDir);
82
+ console.log = originalConsoleLog;
83
+ console.error = originalConsoleError;
84
+ process.exit = originalProcessExit;
85
+ });
86
+ describe("valid configuration", () => {
87
+ it("validates a valid configuration", async () => {
88
+ createFleetConfig(tempDir);
89
+ createAgentConfig(tempDir, "test-agent.yaml", "test-agent");
90
+ await expect(configValidateCommand({})).rejects.toThrow("process.exit(0)");
91
+ expect(exitCode).toBe(0);
92
+ expect(consoleLogs.some((log) => log.includes("Configuration is valid"))).toBe(true);
93
+ expect(consoleLogs.some((log) => log.includes("test-fleet"))).toBe(true);
94
+ expect(consoleLogs.some((log) => log.includes("test-agent"))).toBe(true);
95
+ });
96
+ it("shows agent count", async () => {
97
+ createFleetConfig(tempDir);
98
+ createAgentConfig(tempDir, "test-agent.yaml", "test-agent");
99
+ await expect(configValidateCommand({})).rejects.toThrow("process.exit(0)");
100
+ expect(consoleLogs.some((log) => log.includes("Agents: 1"))).toBe(true);
101
+ });
102
+ it("accepts --config option to specify path", async () => {
103
+ const subdir = path.join(tempDir, "subproject");
104
+ fs.mkdirSync(subdir, { recursive: true });
105
+ createFleetConfig(subdir);
106
+ createAgentConfig(subdir, "test-agent.yaml", "test-agent");
107
+ await expect(configValidateCommand({ config: path.join(subdir, "herdctl.yaml") })).rejects.toThrow("process.exit(0)");
108
+ expect(exitCode).toBe(0);
109
+ });
110
+ });
111
+ describe("missing configuration", () => {
112
+ it("reports error when no config file found", async () => {
113
+ await expect(configValidateCommand({})).rejects.toThrow("process.exit(1)");
114
+ expect(exitCode).toBe(1);
115
+ expect(consoleErrors.some((e) => e.includes("No configuration file found"))).toBe(true);
116
+ });
117
+ it("suggests fix when no config file found with --fix", async () => {
118
+ await expect(configValidateCommand({ fix: true })).rejects.toThrow("process.exit(1)");
119
+ expect(exitCode).toBe(1);
120
+ expect(consoleErrors.some((e) => e.includes("herdctl init"))).toBe(true);
121
+ });
122
+ });
123
+ describe("YAML syntax errors", () => {
124
+ it("reports YAML syntax errors", async () => {
125
+ // Use genuinely invalid YAML with unclosed quote
126
+ fs.writeFileSync(path.join(tempDir, "herdctl.yaml"), 'version: 1\nagents:\n - path: "./unclosed\n', "utf-8");
127
+ await expect(configValidateCommand({})).rejects.toThrow("process.exit(1)");
128
+ expect(exitCode).toBe(1);
129
+ // The loader may wrap it differently, check for any syntax-related error
130
+ expect(consoleErrors.some((e) => e.includes("YAML syntax error") ||
131
+ e.includes("Invalid YAML syntax") ||
132
+ e.includes("Unexpected end"))).toBe(true);
133
+ });
134
+ it("shows fix suggestions for YAML errors with --fix", async () => {
135
+ // Use genuinely invalid YAML with unclosed quote
136
+ fs.writeFileSync(path.join(tempDir, "herdctl.yaml"), 'version: 1\nagents:\n - path: "./unclosed\n', "utf-8");
137
+ await expect(configValidateCommand({ fix: true })).rejects.toThrow("process.exit(1)");
138
+ // Check for fix suggestions (indentation or other common issues)
139
+ expect(consoleErrors.some((e) => e.includes("indentation") ||
140
+ e.includes("YAML syntax") ||
141
+ e.includes("Fix:"))).toBe(true);
142
+ });
143
+ });
144
+ describe("schema validation errors", () => {
145
+ it("reports all schema validation errors", async () => {
146
+ // Missing required 'name' field on agent
147
+ fs.writeFileSync(path.join(tempDir, "herdctl.yaml"), "version: 1\nagents:\n - path: ./agents/invalid.yaml\n", "utf-8");
148
+ fs.mkdirSync(path.join(tempDir, "agents"), { recursive: true });
149
+ fs.writeFileSync(path.join(tempDir, "agents", "invalid.yaml"), "description: Missing name field", "utf-8");
150
+ await expect(configValidateCommand({})).rejects.toThrow("process.exit(1)");
151
+ expect(exitCode).toBe(1);
152
+ expect(consoleErrors.some((e) => e.includes("Failed to load agent"))).toBe(true);
153
+ });
154
+ it("shows fix suggestions for schema errors with --fix", async () => {
155
+ fs.writeFileSync(path.join(tempDir, "herdctl.yaml"), "version: 1\nagents:\n - path: ./agents/invalid.yaml\n", "utf-8");
156
+ fs.mkdirSync(path.join(tempDir, "agents"), { recursive: true });
157
+ fs.writeFileSync(path.join(tempDir, "agents", "invalid.yaml"), "description: Missing name field", "utf-8");
158
+ await expect(configValidateCommand({ fix: true })).rejects.toThrow("process.exit(1)");
159
+ expect(exitCode).toBe(1);
160
+ });
161
+ });
162
+ describe("agent load errors", () => {
163
+ it("reports missing agent file", async () => {
164
+ fs.writeFileSync(path.join(tempDir, "herdctl.yaml"), "version: 1\nagents:\n - path: ./agents/nonexistent.yaml\n", "utf-8");
165
+ await expect(configValidateCommand({})).rejects.toThrow("process.exit(1)");
166
+ expect(exitCode).toBe(1);
167
+ expect(consoleErrors.some((e) => e.includes("Failed to load agent"))).toBe(true);
168
+ });
169
+ it("suggests fix for missing agent with --fix", async () => {
170
+ fs.writeFileSync(path.join(tempDir, "herdctl.yaml"), "version: 1\nagents:\n - path: ./agents/nonexistent.yaml\n", "utf-8");
171
+ await expect(configValidateCommand({ fix: true })).rejects.toThrow("process.exit(1)");
172
+ expect(consoleErrors.some((e) => e.includes("file exists"))).toBe(true);
173
+ });
174
+ });
175
+ });
176
+ describe("configShowCommand", () => {
177
+ let tempDir;
178
+ let originalCwd;
179
+ let consoleLogs;
180
+ let consoleErrors;
181
+ let originalConsoleLog;
182
+ let originalConsoleError;
183
+ let originalProcessExit;
184
+ let exitCode;
185
+ beforeEach(() => {
186
+ tempDir = createTempDir();
187
+ originalCwd = process.cwd();
188
+ process.chdir(tempDir);
189
+ // Capture console output
190
+ consoleLogs = [];
191
+ consoleErrors = [];
192
+ originalConsoleLog = console.log;
193
+ originalConsoleError = console.error;
194
+ console.log = (...args) => consoleLogs.push(args.join(" "));
195
+ console.error = (...args) => consoleErrors.push(args.join(" "));
196
+ // Mock process.exit
197
+ exitCode = undefined;
198
+ originalProcessExit = process.exit;
199
+ process.exit = ((code) => {
200
+ exitCode = code ?? 0;
201
+ throw new Error(`process.exit(${code})`);
202
+ });
203
+ vi.clearAllMocks();
204
+ });
205
+ afterEach(() => {
206
+ process.chdir(originalCwd);
207
+ cleanupTempDir(tempDir);
208
+ console.log = originalConsoleLog;
209
+ console.error = originalConsoleError;
210
+ process.exit = originalProcessExit;
211
+ });
212
+ describe("human-readable output", () => {
213
+ it("shows fleet configuration", async () => {
214
+ createFleetConfig(tempDir);
215
+ createAgentConfig(tempDir, "test-agent.yaml", "test-agent");
216
+ await expect(configShowCommand({})).rejects.toThrow("process.exit(0)");
217
+ expect(exitCode).toBe(0);
218
+ expect(consoleLogs.some((log) => log.includes("Fleet Configuration"))).toBe(true);
219
+ expect(consoleLogs.some((log) => log.includes("Name: test-fleet"))).toBe(true);
220
+ });
221
+ it("shows agents section", async () => {
222
+ createFleetConfig(tempDir);
223
+ createAgentConfig(tempDir, "test-agent.yaml", "test-agent");
224
+ await expect(configShowCommand({})).rejects.toThrow("process.exit(0)");
225
+ expect(consoleLogs.some((log) => log.includes("Agents (1)"))).toBe(true);
226
+ expect(consoleLogs.some((log) => log.includes("[test-agent]"))).toBe(true);
227
+ });
228
+ it("shows schedule information", async () => {
229
+ createFleetConfig(tempDir);
230
+ createAgentConfig(tempDir, "test-agent.yaml", "test-agent");
231
+ await expect(configShowCommand({})).rejects.toThrow("process.exit(0)");
232
+ expect(consoleLogs.some((log) => log.includes("Schedules:"))).toBe(true);
233
+ expect(consoleLogs.some((log) => log.includes("heartbeat"))).toBe(true);
234
+ });
235
+ it("shows defaults when present", async () => {
236
+ fs.writeFileSync(path.join(tempDir, "herdctl.yaml"), `version: 1
237
+ fleet:
238
+ name: test-fleet
239
+ defaults:
240
+ model: claude-sonnet-4-20250514
241
+ max_turns: 100
242
+ agents:
243
+ - path: ./agents/test-agent.yaml
244
+ `, "utf-8");
245
+ createAgentConfig(tempDir, "test-agent.yaml", "test-agent");
246
+ await expect(configShowCommand({})).rejects.toThrow("process.exit(0)");
247
+ expect(consoleLogs.some((log) => log.includes("Defaults"))).toBe(true);
248
+ expect(consoleLogs.some((log) => log.includes("Model: claude-sonnet-4-20250514"))).toBe(true);
249
+ });
250
+ });
251
+ describe("JSON output", () => {
252
+ it("outputs valid JSON with --json", async () => {
253
+ createFleetConfig(tempDir);
254
+ createAgentConfig(tempDir, "test-agent.yaml", "test-agent");
255
+ await expect(configShowCommand({ json: true })).rejects.toThrow("process.exit(0)");
256
+ expect(exitCode).toBe(0);
257
+ // Combine all logs and parse as JSON
258
+ const output = consoleLogs.join("\n");
259
+ const parsed = JSON.parse(output);
260
+ expect(parsed).toHaveProperty("fleet");
261
+ expect(parsed).toHaveProperty("agents");
262
+ expect(parsed).toHaveProperty("configPath");
263
+ expect(parsed.fleet.fleet.name).toBe("test-fleet");
264
+ expect(parsed.agents).toHaveLength(1);
265
+ expect(parsed.agents[0].name).toBe("test-agent");
266
+ });
267
+ it("includes all agent properties in JSON output", async () => {
268
+ createFleetConfig(tempDir);
269
+ createAgentConfig(tempDir, "test-agent.yaml", "test-agent");
270
+ await expect(configShowCommand({ json: true })).rejects.toThrow("process.exit(0)");
271
+ const output = consoleLogs.join("\n");
272
+ const parsed = JSON.parse(output);
273
+ const agent = parsed.agents[0];
274
+ expect(agent.name).toBe("test-agent");
275
+ expect(agent.description).toBe("A test agent");
276
+ expect(agent.schedules).toHaveProperty("heartbeat");
277
+ });
278
+ });
279
+ describe("error handling", () => {
280
+ it("reports error for invalid config", async () => {
281
+ await expect(configShowCommand({})).rejects.toThrow("process.exit(1)");
282
+ expect(exitCode).toBe(1);
283
+ expect(consoleErrors.some((e) => e.includes("Error loading configuration"))).toBe(true);
284
+ });
285
+ it("suggests running validate for more info", async () => {
286
+ await expect(configShowCommand({})).rejects.toThrow("process.exit(1)");
287
+ expect(consoleErrors.some((e) => e.includes("herdctl config validate"))).toBe(true);
288
+ });
289
+ it("accepts --config option", async () => {
290
+ const subdir = path.join(tempDir, "subproject");
291
+ fs.mkdirSync(subdir, { recursive: true });
292
+ createFleetConfig(subdir);
293
+ createAgentConfig(subdir, "test-agent.yaml", "test-agent");
294
+ await expect(configShowCommand({ config: path.join(subdir, "herdctl.yaml") })).rejects.toThrow("process.exit(0)");
295
+ expect(exitCode).toBe(0);
296
+ });
297
+ });
298
+ });
299
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=init.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/init.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,247 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
+ import * as fs from "node:fs";
3
+ import * as path from "node:path";
4
+ import { tmpdir } from "node:os";
5
+ import { initCommand } from "../init.js";
6
+ // Mock @inquirer/prompts
7
+ vi.mock("@inquirer/prompts", () => ({
8
+ input: vi.fn(),
9
+ confirm: vi.fn(),
10
+ select: vi.fn(),
11
+ }));
12
+ import { input, confirm, select } from "@inquirer/prompts";
13
+ const mockedInput = vi.mocked(input);
14
+ const mockedConfirm = vi.mocked(confirm);
15
+ const mockedSelect = vi.mocked(select);
16
+ // Helper to create a temp directory
17
+ function createTempDir() {
18
+ const baseDir = path.join(tmpdir(), `herdctl-cli-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
19
+ fs.mkdirSync(baseDir, { recursive: true });
20
+ return fs.realpathSync(baseDir);
21
+ }
22
+ // Helper to clean up temp directory
23
+ function cleanupTempDir(dir) {
24
+ fs.rmSync(dir, { recursive: true, force: true });
25
+ }
26
+ describe("initCommand", () => {
27
+ let tempDir;
28
+ let originalCwd;
29
+ let consoleLogs;
30
+ let consoleErrors;
31
+ let originalConsoleLog;
32
+ let originalConsoleError;
33
+ let originalProcessExit;
34
+ let exitCode;
35
+ beforeEach(() => {
36
+ tempDir = createTempDir();
37
+ originalCwd = process.cwd();
38
+ process.chdir(tempDir);
39
+ // Capture console output
40
+ consoleLogs = [];
41
+ consoleErrors = [];
42
+ originalConsoleLog = console.log;
43
+ originalConsoleError = console.error;
44
+ console.log = (...args) => consoleLogs.push(args.join(" "));
45
+ console.error = (...args) => consoleErrors.push(args.join(" "));
46
+ // Mock process.exit
47
+ exitCode = undefined;
48
+ originalProcessExit = process.exit;
49
+ process.exit = ((code) => {
50
+ exitCode = code ?? 0;
51
+ throw new Error(`process.exit(${code})`);
52
+ });
53
+ // Reset mocks
54
+ vi.clearAllMocks();
55
+ });
56
+ afterEach(() => {
57
+ process.chdir(originalCwd);
58
+ cleanupTempDir(tempDir);
59
+ console.log = originalConsoleLog;
60
+ console.error = originalConsoleError;
61
+ process.exit = originalProcessExit;
62
+ });
63
+ describe("with --yes flag (non-interactive)", () => {
64
+ it("creates herdctl.yaml with default fleet name from directory", async () => {
65
+ await initCommand({ yes: true });
66
+ const configPath = path.join(tempDir, "herdctl.yaml");
67
+ expect(fs.existsSync(configPath)).toBe(true);
68
+ const content = fs.readFileSync(configPath, "utf-8");
69
+ expect(content).toContain("version: 1");
70
+ expect(content).toContain(`name: ${path.basename(tempDir)}`);
71
+ });
72
+ it("creates agents/ directory", async () => {
73
+ await initCommand({ yes: true });
74
+ const agentsDir = path.join(tempDir, "agents");
75
+ expect(fs.existsSync(agentsDir)).toBe(true);
76
+ expect(fs.statSync(agentsDir).isDirectory()).toBe(true);
77
+ });
78
+ it("creates .herdctl/ directory", async () => {
79
+ await initCommand({ yes: true });
80
+ const stateDir = path.join(tempDir, ".herdctl");
81
+ expect(fs.existsSync(stateDir)).toBe(true);
82
+ expect(fs.statSync(stateDir).isDirectory()).toBe(true);
83
+ });
84
+ it("creates example agent file with simple template", async () => {
85
+ await initCommand({ yes: true });
86
+ const agentPath = path.join(tempDir, "agents", "example-agent.yaml");
87
+ expect(fs.existsSync(agentPath)).toBe(true);
88
+ const content = fs.readFileSync(agentPath, "utf-8");
89
+ expect(content).toContain("name: example-agent");
90
+ expect(content).toContain("schedules:");
91
+ });
92
+ it("uses provided --name option", async () => {
93
+ await initCommand({ yes: true, name: "my-fleet" });
94
+ const content = fs.readFileSync(path.join(tempDir, "herdctl.yaml"), "utf-8");
95
+ expect(content).toContain("name: my-fleet");
96
+ });
97
+ it("shows success message and next steps", async () => {
98
+ await initCommand({ yes: true });
99
+ expect(consoleLogs.some((log) => log.includes("Initialized herdctl project"))).toBe(true);
100
+ expect(consoleLogs.some((log) => log.includes("Next steps"))).toBe(true);
101
+ expect(consoleLogs.some((log) => log.includes("herdctl start"))).toBe(true);
102
+ });
103
+ });
104
+ describe("template selection", () => {
105
+ it("uses simple template by default", async () => {
106
+ await initCommand({ yes: true });
107
+ const content = fs.readFileSync(path.join(tempDir, "herdctl.yaml"), "utf-8");
108
+ expect(content).toContain("defaults:");
109
+ expect(content).toContain("model: claude-sonnet-4-20250514");
110
+ const agentPath = path.join(tempDir, "agents", "example-agent.yaml");
111
+ expect(fs.existsSync(agentPath)).toBe(true);
112
+ });
113
+ it("uses quickstart template with --example quickstart", async () => {
114
+ await initCommand({ yes: true, example: "quickstart" });
115
+ const content = fs.readFileSync(path.join(tempDir, "herdctl.yaml"), "utf-8");
116
+ expect(content).not.toContain("defaults:");
117
+ const agentPath = path.join(tempDir, "agents", "hello-agent.yaml");
118
+ expect(fs.existsSync(agentPath)).toBe(true);
119
+ const agentContent = fs.readFileSync(agentPath, "utf-8");
120
+ expect(agentContent).toContain("name: hello-agent");
121
+ expect(agentContent).toContain("interval: 30s");
122
+ });
123
+ it("uses github template with --example github", async () => {
124
+ await initCommand({ yes: true, example: "github" });
125
+ const agentPath = path.join(tempDir, "agents", "github-agent.yaml");
126
+ expect(fs.existsSync(agentPath)).toBe(true);
127
+ const agentContent = fs.readFileSync(agentPath, "utf-8");
128
+ expect(agentContent).toContain("name: github-agent");
129
+ expect(agentContent).toContain("github_issues");
130
+ });
131
+ it("exits with error for unknown template", async () => {
132
+ await expect(initCommand({ yes: true, example: "nonexistent" })).rejects.toThrow("process.exit");
133
+ expect(exitCode).toBe(1);
134
+ expect(consoleErrors.some((e) => e.includes("Unknown example template"))).toBe(true);
135
+ });
136
+ });
137
+ describe("error handling", () => {
138
+ it("exits with error if herdctl.yaml already exists", async () => {
139
+ fs.writeFileSync(path.join(tempDir, "herdctl.yaml"), "version: 1");
140
+ await expect(initCommand({ yes: true })).rejects.toThrow("process.exit");
141
+ expect(exitCode).toBe(1);
142
+ expect(consoleErrors.some((e) => e.includes("herdctl.yaml already exists"))).toBe(true);
143
+ });
144
+ it("overwrites existing config with --force", async () => {
145
+ fs.writeFileSync(path.join(tempDir, "herdctl.yaml"), "version: 1\nfleet:\n name: old-fleet");
146
+ await initCommand({ yes: true, force: true, name: "new-fleet" });
147
+ const content = fs.readFileSync(path.join(tempDir, "herdctl.yaml"), "utf-8");
148
+ expect(content).toContain("name: new-fleet");
149
+ expect(content).not.toContain("old-fleet");
150
+ });
151
+ });
152
+ describe(".gitignore handling", () => {
153
+ it("updates existing .gitignore to include .herdctl/", async () => {
154
+ fs.writeFileSync(path.join(tempDir, ".gitignore"), "node_modules/\n");
155
+ await initCommand({ yes: true });
156
+ const gitignore = fs.readFileSync(path.join(tempDir, ".gitignore"), "utf-8");
157
+ expect(gitignore).toContain(".herdctl/");
158
+ expect(gitignore).toContain("node_modules/");
159
+ });
160
+ it("does not duplicate .herdctl/ in .gitignore", async () => {
161
+ fs.writeFileSync(path.join(tempDir, ".gitignore"), "node_modules/\n.herdctl/\n");
162
+ await initCommand({ yes: true });
163
+ const gitignore = fs.readFileSync(path.join(tempDir, ".gitignore"), "utf-8");
164
+ const count = (gitignore.match(/\.herdctl\//g) || []).length;
165
+ expect(count).toBe(1);
166
+ });
167
+ it("does not create .gitignore if it does not exist", async () => {
168
+ await initCommand({ yes: true });
169
+ // .gitignore should not be created
170
+ expect(fs.existsSync(path.join(tempDir, ".gitignore"))).toBe(false);
171
+ });
172
+ });
173
+ describe("interactive mode", () => {
174
+ it("prompts for fleet name when not provided", async () => {
175
+ mockedInput.mockResolvedValueOnce("prompted-fleet"); // fleet name
176
+ mockedInput.mockResolvedValueOnce("A test fleet"); // description
177
+ mockedSelect.mockResolvedValueOnce("simple"); // template
178
+ mockedConfirm.mockResolvedValueOnce(true); // proceed
179
+ await initCommand({});
180
+ expect(mockedInput).toHaveBeenCalledWith(expect.objectContaining({
181
+ message: "Fleet name:",
182
+ }));
183
+ const content = fs.readFileSync(path.join(tempDir, "herdctl.yaml"), "utf-8");
184
+ expect(content).toContain("name: prompted-fleet");
185
+ });
186
+ it("uses provided name in interactive mode", async () => {
187
+ mockedInput.mockResolvedValueOnce("A test fleet"); // description
188
+ mockedSelect.mockResolvedValueOnce("simple"); // template
189
+ mockedConfirm.mockResolvedValueOnce(true); // proceed
190
+ await initCommand({ name: "my-preset-fleet" });
191
+ // Should not prompt for fleet name
192
+ expect(mockedInput).not.toHaveBeenCalledWith(expect.objectContaining({
193
+ message: "Fleet name:",
194
+ }));
195
+ const content = fs.readFileSync(path.join(tempDir, "herdctl.yaml"), "utf-8");
196
+ expect(content).toContain("name: my-preset-fleet");
197
+ });
198
+ it("aborts when user declines confirmation", async () => {
199
+ mockedInput.mockResolvedValueOnce("test-fleet"); // fleet name
200
+ mockedInput.mockResolvedValueOnce(""); // description
201
+ mockedSelect.mockResolvedValueOnce("simple"); // template
202
+ mockedConfirm.mockResolvedValueOnce(false); // decline
203
+ await expect(initCommand({})).rejects.toThrow("process.exit");
204
+ expect(exitCode).toBe(0);
205
+ expect(consoleLogs.some((log) => log.includes("Aborted"))).toBe(true);
206
+ // Should not create any files
207
+ expect(fs.existsSync(path.join(tempDir, "herdctl.yaml"))).toBe(false);
208
+ });
209
+ it("skips template prompt when --example is provided", async () => {
210
+ mockedInput.mockResolvedValueOnce("test-fleet"); // fleet name
211
+ mockedInput.mockResolvedValueOnce(""); // description
212
+ mockedConfirm.mockResolvedValueOnce(true); // proceed
213
+ await initCommand({ example: "quickstart" });
214
+ // Should not prompt for template
215
+ expect(mockedSelect).not.toHaveBeenCalled();
216
+ });
217
+ });
218
+ describe("agents directory behavior", () => {
219
+ it("does not overwrite existing agent file without --force", async () => {
220
+ fs.mkdirSync(path.join(tempDir, "agents"), { recursive: true });
221
+ fs.writeFileSync(path.join(tempDir, "agents", "example-agent.yaml"), "name: existing-agent");
222
+ await initCommand({ yes: true, force: true });
223
+ const content = fs.readFileSync(path.join(tempDir, "agents", "example-agent.yaml"), "utf-8");
224
+ // With force, it should be overwritten
225
+ expect(content).toContain("name: example-agent");
226
+ });
227
+ it("preserves existing agent file without --force", async () => {
228
+ fs.mkdirSync(path.join(tempDir, "agents"), { recursive: true });
229
+ fs.writeFileSync(path.join(tempDir, "agents", "example-agent.yaml"), "name: existing-agent");
230
+ // Need force to overwrite herdctl.yaml, but agent file should be preserved
231
+ // Actually this is a new init, so let's test differently
232
+ // First create config, then try init with force
233
+ fs.writeFileSync(path.join(tempDir, "herdctl.yaml"), "version: 1");
234
+ await initCommand({ yes: true, force: true });
235
+ // Agent file should be overwritten with --force
236
+ const content = fs.readFileSync(path.join(tempDir, "agents", "example-agent.yaml"), "utf-8");
237
+ expect(content).toContain("name: example-agent");
238
+ });
239
+ });
240
+ describe("github template specific output", () => {
241
+ it("shows github-specific instructions", async () => {
242
+ await initCommand({ yes: true, example: "github" });
243
+ expect(consoleLogs.some((log) => log.includes("GITHUB_TOKEN"))).toBe(true);
244
+ });
245
+ });
246
+ });
247
+ //# sourceMappingURL=init.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/init.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=start.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/start.test.ts"],"names":[],"mappings":""}