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
@@ -0,0 +1,263 @@
1
+ /**
2
+ * herdctl cancel - Cancel a running job
3
+ *
4
+ * Commands:
5
+ * - herdctl cancel <id> Cancel running job (with confirmation)
6
+ * - herdctl cancel <id> --force Force cancel (SIGKILL)
7
+ * - herdctl cancel <id> --yes Skip confirmation prompt
8
+ */
9
+ import { confirm } from "@inquirer/prompts";
10
+ import { FleetManager, ConfigNotFoundError, isFleetManagerError, isJobNotFoundError, isJobCancelError, JobManager, } from "@herdctl/core";
11
+ /**
12
+ * Default state directory
13
+ */
14
+ const DEFAULT_STATE_DIR = ".herdctl";
15
+ /**
16
+ * Default cancel timeout (10 seconds)
17
+ */
18
+ const DEFAULT_CANCEL_TIMEOUT = 10000;
19
+ /**
20
+ * Force cancel timeout (1 second for SIGTERM before SIGKILL)
21
+ */
22
+ const FORCE_CANCEL_TIMEOUT = 1000;
23
+ /**
24
+ * Check if colors should be disabled
25
+ */
26
+ function shouldUseColor() {
27
+ if (process.env.NO_COLOR !== undefined && process.env.NO_COLOR !== "") {
28
+ return false;
29
+ }
30
+ if (process.env.FORCE_COLOR !== undefined && process.env.FORCE_COLOR !== "0") {
31
+ return true;
32
+ }
33
+ return process.stdout.isTTY === true;
34
+ }
35
+ /**
36
+ * ANSI color codes
37
+ */
38
+ const colors = {
39
+ reset: "\x1b[0m",
40
+ bold: "\x1b[1m",
41
+ dim: "\x1b[2m",
42
+ green: "\x1b[32m",
43
+ yellow: "\x1b[33m",
44
+ red: "\x1b[31m",
45
+ cyan: "\x1b[36m",
46
+ gray: "\x1b[90m",
47
+ };
48
+ /**
49
+ * Get a colored string, respecting NO_COLOR
50
+ */
51
+ function colorize(text, color) {
52
+ if (!shouldUseColor()) {
53
+ return text;
54
+ }
55
+ return `${colors[color]}${text}${colors.reset}`;
56
+ }
57
+ /**
58
+ * Cancel a running job (herdctl cancel)
59
+ */
60
+ export async function cancelCommand(jobId, options) {
61
+ const stateDir = options.state || DEFAULT_STATE_DIR;
62
+ const isJsonOutput = options.json === true;
63
+ const skipConfirmation = options.yes === true;
64
+ const forceCancel = options.force === true;
65
+ // Create FleetManager
66
+ const manager = new FleetManager({
67
+ configPath: options.config,
68
+ stateDir,
69
+ });
70
+ try {
71
+ // Initialize to load configuration
72
+ await manager.initialize();
73
+ // First, check if the job exists and is running
74
+ const { join } = await import("node:path");
75
+ const jobsDir = join(stateDir, "jobs");
76
+ const jobManager = new JobManager({
77
+ jobsDir,
78
+ });
79
+ // Get job to check status
80
+ const job = await jobManager.getJob(jobId);
81
+ // Check if job is running
82
+ if (job.status !== "running" && job.status !== "pending") {
83
+ if (isJsonOutput) {
84
+ console.log(JSON.stringify({
85
+ error: {
86
+ code: "JOB_NOT_RUNNING",
87
+ message: `Job '${jobId}' is not running (status: ${job.status})`,
88
+ jobId: jobId,
89
+ status: job.status,
90
+ },
91
+ }));
92
+ process.exit(1);
93
+ }
94
+ console.error("");
95
+ console.error(`Error: Job '${jobId}' is not running.`);
96
+ console.error(`Current status: ${job.status}`);
97
+ console.error("");
98
+ console.error("Only running or pending jobs can be cancelled.");
99
+ process.exit(1);
100
+ }
101
+ // Show job info and ask for confirmation (unless --yes)
102
+ if (!skipConfirmation && !isJsonOutput) {
103
+ console.log("");
104
+ console.log(colorize("Job to cancel:", "bold"));
105
+ console.log(` ID: ${colorize(job.id, "cyan")}`);
106
+ console.log(` Agent: ${job.agent}`);
107
+ console.log(` Status: ${colorize(job.status, "green")}`);
108
+ if (job.schedule) {
109
+ console.log(` Schedule: ${job.schedule}`);
110
+ }
111
+ console.log("");
112
+ if (forceCancel) {
113
+ console.log(colorize("WARNING: Force cancel will immediately kill the process (SIGKILL).", "yellow"));
114
+ console.log(colorize("This may leave the job in an inconsistent state.", "yellow"));
115
+ console.log("");
116
+ }
117
+ const confirmed = await confirm({
118
+ message: forceCancel
119
+ ? "Are you sure you want to force cancel this job?"
120
+ : "Are you sure you want to cancel this job?",
121
+ default: false,
122
+ });
123
+ if (!confirmed) {
124
+ console.log("");
125
+ console.log("Cancelled.");
126
+ process.exit(0);
127
+ }
128
+ }
129
+ // Cancel the job
130
+ const timeout = forceCancel ? FORCE_CANCEL_TIMEOUT : DEFAULT_CANCEL_TIMEOUT;
131
+ if (!isJsonOutput) {
132
+ console.log("");
133
+ console.log(colorize(forceCancel ? "Force cancelling job..." : "Cancelling job...", "dim"));
134
+ }
135
+ const result = await manager.cancelJob(jobId, { timeout });
136
+ // Output result
137
+ if (isJsonOutput) {
138
+ const output = {
139
+ success: result.success,
140
+ jobId: result.jobId,
141
+ terminationType: result.terminationType,
142
+ canceledAt: result.canceledAt,
143
+ };
144
+ console.log(JSON.stringify(output, null, 2));
145
+ }
146
+ else {
147
+ console.log("");
148
+ if (result.success) {
149
+ switch (result.terminationType) {
150
+ case "graceful":
151
+ console.log(colorize("Job cancelled successfully.", "green"));
152
+ console.log(`The job responded to termination signal and exited cleanly.`);
153
+ break;
154
+ case "forced":
155
+ console.log(colorize("Job force cancelled.", "yellow"));
156
+ console.log(`The job was forcefully killed after failing to respond to termination signal.`);
157
+ break;
158
+ case "already_stopped":
159
+ console.log(colorize("Job was already stopped.", "yellow"));
160
+ console.log(`The job was not running when cancel was attempted.`);
161
+ break;
162
+ }
163
+ }
164
+ else {
165
+ console.log(colorize("Failed to cancel job.", "red"));
166
+ }
167
+ console.log("");
168
+ console.log(`Job ID: ${colorize(result.jobId, "cyan")}`);
169
+ console.log(`Cancelled at: ${new Date(result.canceledAt).toLocaleString()}`);
170
+ console.log("");
171
+ }
172
+ // Exit with appropriate code
173
+ if (!result.success) {
174
+ process.exit(1);
175
+ }
176
+ }
177
+ catch (error) {
178
+ // Handle specific error types
179
+ if (error instanceof ConfigNotFoundError) {
180
+ if (isJsonOutput) {
181
+ console.log(JSON.stringify({
182
+ error: {
183
+ code: "CONFIG_NOT_FOUND",
184
+ message: "No configuration file found",
185
+ startDirectory: error.startDirectory,
186
+ },
187
+ }));
188
+ process.exit(1);
189
+ }
190
+ console.error("");
191
+ console.error("Error: No configuration file found.");
192
+ console.error(`Searched from: ${error.startDirectory}`);
193
+ console.error("");
194
+ console.error("Run 'herdctl init' to create a configuration file.");
195
+ process.exit(1);
196
+ }
197
+ if (isJobNotFoundError(error)) {
198
+ if (isJsonOutput) {
199
+ console.log(JSON.stringify({
200
+ error: {
201
+ code: "JOB_NOT_FOUND",
202
+ message: error.message,
203
+ jobId: jobId,
204
+ },
205
+ }));
206
+ process.exit(1);
207
+ }
208
+ console.error("");
209
+ console.error(`Error: Job '${jobId}' not found.`);
210
+ console.error("");
211
+ console.error("Run 'herdctl jobs' to see recent jobs.");
212
+ process.exit(1);
213
+ }
214
+ if (isJobCancelError(error)) {
215
+ if (isJsonOutput) {
216
+ console.log(JSON.stringify({
217
+ error: {
218
+ code: "JOB_CANCEL_ERROR",
219
+ message: error.message,
220
+ jobId: error.jobId,
221
+ reason: error.reason,
222
+ },
223
+ }));
224
+ process.exit(1);
225
+ }
226
+ console.error("");
227
+ console.error(`Error: Failed to cancel job '${jobId}'.`);
228
+ console.error(error.message);
229
+ process.exit(1);
230
+ }
231
+ if (isFleetManagerError(error)) {
232
+ if (isJsonOutput) {
233
+ console.log(JSON.stringify({
234
+ error: {
235
+ code: error.code,
236
+ message: error.message,
237
+ },
238
+ }));
239
+ process.exit(1);
240
+ }
241
+ console.error("");
242
+ console.error(`Error: ${error.message}`);
243
+ if (error.code) {
244
+ console.error(`Code: ${error.code}`);
245
+ }
246
+ process.exit(1);
247
+ }
248
+ // Generic error
249
+ if (isJsonOutput) {
250
+ console.log(JSON.stringify({
251
+ error: {
252
+ code: "UNKNOWN_ERROR",
253
+ message: error instanceof Error ? error.message : String(error),
254
+ },
255
+ }));
256
+ process.exit(1);
257
+ }
258
+ console.error("");
259
+ console.error("Error:", error instanceof Error ? error.message : String(error));
260
+ process.exit(1);
261
+ }
262
+ }
263
+ //# sourceMappingURL=cancel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../src/commands/cancel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * herdctl config - Configuration validation and inspection commands
3
+ *
4
+ * Commands:
5
+ * - herdctl config validate Validate current config
6
+ * - herdctl config validate --fix Show suggestions for fixes
7
+ * - herdctl config show Show merged/resolved config
8
+ * - herdctl config show --json JSON output
9
+ */
10
+ export interface ConfigValidateOptions {
11
+ fix?: boolean;
12
+ config?: string;
13
+ }
14
+ export interface ConfigShowOptions {
15
+ json?: boolean;
16
+ config?: string;
17
+ }
18
+ /**
19
+ * Validate the herdctl configuration
20
+ */
21
+ export declare function configValidateCommand(options: ConfigValidateOptions): Promise<void>;
22
+ /**
23
+ * Show the merged/resolved configuration
24
+ */
25
+ export declare function configShowCommand(options: ConfigShowOptions): Promise<void>;
26
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiBH,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA2ED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CA6Gf;AAuGD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
@@ -0,0 +1,287 @@
1
+ /**
2
+ * herdctl config - Configuration validation and inspection commands
3
+ *
4
+ * Commands:
5
+ * - herdctl config validate Validate current config
6
+ * - herdctl config validate --fix Show suggestions for fixes
7
+ * - herdctl config show Show merged/resolved config
8
+ * - herdctl config show --json JSON output
9
+ */
10
+ import * as path from "node:path";
11
+ import { safeLoadConfig, ConfigNotFoundError, SchemaValidationError, AgentLoadError, FileReadError, YamlSyntaxError, AgentYamlSyntaxError, AgentValidationError, UndefinedVariableError, } from "@herdctl/core";
12
+ /**
13
+ * Suggests fixes for common validation errors
14
+ */
15
+ function suggestFix(issue) {
16
+ const { path: issuePath, message, code } = issue;
17
+ // Missing required field
18
+ if (code === "invalid_type" && message.includes("Required")) {
19
+ return `Add the required field '${issuePath}' to your configuration`;
20
+ }
21
+ // Invalid type
22
+ if (code === "invalid_type") {
23
+ const match = message.match(/Expected (\w+), received (\w+)/);
24
+ if (match) {
25
+ return `Change '${issuePath}' from ${match[2]} to ${match[1]}`;
26
+ }
27
+ }
28
+ // Invalid enum value
29
+ if (code === "invalid_enum_value") {
30
+ const match = message.match(/Invalid enum value.*Expected (.*)/);
31
+ if (match) {
32
+ return `Change '${issuePath}' to one of: ${match[1]}`;
33
+ }
34
+ }
35
+ // Unrecognized keys
36
+ if (code === "unrecognized_keys") {
37
+ const match = message.match(/Unrecognized key\(s\) in object: (.+)/);
38
+ if (match) {
39
+ return `Remove unrecognized key(s): ${match[1]}`;
40
+ }
41
+ }
42
+ // Invalid string pattern (e.g., repo format)
43
+ if (code === "invalid_string" && issuePath.includes("repo")) {
44
+ return `Use the format 'owner/repo' for the repository field`;
45
+ }
46
+ return null;
47
+ }
48
+ /**
49
+ * Format validation errors for display
50
+ */
51
+ function formatValidationErrors(issues, showFixes) {
52
+ const lines = [];
53
+ for (const issue of issues) {
54
+ lines.push(` - ${issue.path}: ${issue.message}`);
55
+ if (showFixes) {
56
+ const fix = suggestFix(issue);
57
+ if (fix) {
58
+ lines.push(` Fix: ${fix}`);
59
+ }
60
+ }
61
+ }
62
+ return lines.join("\n");
63
+ }
64
+ /**
65
+ * Get suggestions for environment variable errors
66
+ */
67
+ function suggestEnvVarFix(varName) {
68
+ return `Set the environment variable: export ${varName}=<value>`;
69
+ }
70
+ /**
71
+ * Validate the herdctl configuration
72
+ */
73
+ export async function configValidateCommand(options) {
74
+ const result = await safeLoadConfig(options.config);
75
+ if (result.success) {
76
+ const config = result.data;
77
+ console.log("Configuration is valid.");
78
+ console.log("");
79
+ console.log(`Fleet: ${config.fleet.fleet?.name || "(unnamed)"}`);
80
+ console.log(`Config: ${config.configPath}`);
81
+ console.log(`Agents: ${config.agents.length}`);
82
+ if (config.agents.length > 0) {
83
+ for (const agent of config.agents) {
84
+ console.log(` - ${agent.name}`);
85
+ }
86
+ }
87
+ process.exit(0);
88
+ }
89
+ // Handle errors and show all validation issues
90
+ const error = result.error;
91
+ console.error("Configuration validation failed:\n");
92
+ if (error instanceof ConfigNotFoundError) {
93
+ console.error(`Error: No configuration file found.`);
94
+ console.error(`Searched from: ${error.startDirectory}`);
95
+ console.error("");
96
+ if (options.fix) {
97
+ console.error("Fix: Run 'herdctl init' to create a configuration file.");
98
+ }
99
+ process.exit(1);
100
+ }
101
+ if (error instanceof SchemaValidationError) {
102
+ console.error("Schema validation errors:");
103
+ console.error(formatValidationErrors(error.issues, options.fix ?? false));
104
+ process.exit(1);
105
+ }
106
+ if (error instanceof AgentValidationError) {
107
+ console.error(`Agent validation errors in '${error.filePath}':`);
108
+ console.error(formatValidationErrors(error.issues, options.fix ?? false));
109
+ process.exit(1);
110
+ }
111
+ if (error instanceof YamlSyntaxError || error instanceof AgentYamlSyntaxError) {
112
+ console.error("YAML syntax error:");
113
+ console.error(` ${error.message}`);
114
+ if (error.line !== undefined) {
115
+ console.error(` Location: line ${error.line}, column ${error.column}`);
116
+ }
117
+ if (options.fix) {
118
+ console.error("");
119
+ console.error("Fix: Check your YAML syntax. Common issues:");
120
+ console.error(" - Incorrect indentation (use spaces, not tabs)");
121
+ console.error(" - Missing colons after keys");
122
+ console.error(" - Unquoted special characters");
123
+ }
124
+ process.exit(1);
125
+ }
126
+ if (error instanceof AgentLoadError) {
127
+ console.error(`Failed to load agent: ${error.agentPath}`);
128
+ console.error(` ${error.message}`);
129
+ // Check if the underlying cause has more details
130
+ if (error.cause instanceof SchemaValidationError) {
131
+ console.error("");
132
+ console.error("Agent schema validation errors:");
133
+ console.error(formatValidationErrors(error.cause.issues, options.fix ?? false));
134
+ }
135
+ if (options.fix) {
136
+ console.error("");
137
+ console.error("Fix: Check that the agent file exists and is valid YAML.");
138
+ }
139
+ process.exit(1);
140
+ }
141
+ if (error instanceof FileReadError) {
142
+ console.error(`Failed to read file: ${error.filePath}`);
143
+ console.error(` ${error.message}`);
144
+ if (options.fix) {
145
+ console.error("");
146
+ console.error("Fix: Check that the file exists and is readable.");
147
+ }
148
+ process.exit(1);
149
+ }
150
+ if (error instanceof UndefinedVariableError) {
151
+ console.error(`Undefined environment variable:`);
152
+ console.error(` ${error.message}`);
153
+ if (options.fix) {
154
+ // Extract variable name from error message
155
+ const match = error.message.match(/\${([^}:]+)/);
156
+ if (match) {
157
+ console.error("");
158
+ console.error(`Fix: ${suggestEnvVarFix(match[1])}`);
159
+ }
160
+ }
161
+ process.exit(1);
162
+ }
163
+ // Generic error
164
+ console.error(`Error: ${error.message}`);
165
+ process.exit(1);
166
+ }
167
+ /**
168
+ * Format a resolved config for human-readable output
169
+ */
170
+ function formatConfigForDisplay(config) {
171
+ const lines = [];
172
+ // Fleet info
173
+ lines.push("Fleet Configuration");
174
+ lines.push("===================");
175
+ lines.push(`Name: ${config.fleet.fleet?.name || "(unnamed)"}`);
176
+ if (config.fleet.fleet?.description) {
177
+ lines.push(`Description: ${config.fleet.fleet.description}`);
178
+ }
179
+ lines.push(`Config File: ${config.configPath}`);
180
+ lines.push(`Version: ${config.fleet.version}`);
181
+ // Defaults
182
+ if (config.fleet.defaults) {
183
+ lines.push("");
184
+ lines.push("Defaults");
185
+ lines.push("--------");
186
+ const defaults = config.fleet.defaults;
187
+ if (defaults.model)
188
+ lines.push(`Model: ${defaults.model}`);
189
+ if (defaults.max_turns)
190
+ lines.push(`Max Turns: ${defaults.max_turns}`);
191
+ if (defaults.permission_mode)
192
+ lines.push(`Permission Mode: ${defaults.permission_mode}`);
193
+ if (defaults.permissions) {
194
+ lines.push("Permissions:");
195
+ if (defaults.permissions.mode)
196
+ lines.push(` Mode: ${defaults.permissions.mode}`);
197
+ if (defaults.permissions.allowed_tools?.length) {
198
+ lines.push(` Allowed Tools: ${defaults.permissions.allowed_tools.join(", ")}`);
199
+ }
200
+ if (defaults.permissions.denied_tools?.length) {
201
+ lines.push(` Denied Tools: ${defaults.permissions.denied_tools.join(", ")}`);
202
+ }
203
+ }
204
+ }
205
+ // Agents
206
+ lines.push("");
207
+ lines.push(`Agents (${config.agents.length})`);
208
+ lines.push("------");
209
+ for (const agent of config.agents) {
210
+ lines.push("");
211
+ lines.push(`[${agent.name}]`);
212
+ if (agent.description)
213
+ lines.push(` Description: ${agent.description}`);
214
+ lines.push(` Config: ${path.relative(config.configDir, agent.configPath)}`);
215
+ if (agent.model)
216
+ lines.push(` Model: ${agent.model}`);
217
+ if (agent.max_turns)
218
+ lines.push(` Max Turns: ${agent.max_turns}`);
219
+ if (agent.permission_mode)
220
+ lines.push(` Permission Mode: ${agent.permission_mode}`);
221
+ // Workspace
222
+ if (agent.workspace) {
223
+ const ws = typeof agent.workspace === "string"
224
+ ? agent.workspace
225
+ : agent.workspace.root;
226
+ lines.push(` Workspace: ${ws}`);
227
+ }
228
+ // Schedules
229
+ if (agent.schedules && Object.keys(agent.schedules).length > 0) {
230
+ lines.push(` Schedules:`);
231
+ for (const [name, schedule] of Object.entries(agent.schedules)) {
232
+ const scheduleInfo = [];
233
+ scheduleInfo.push(`type=${schedule.type}`);
234
+ if (schedule.interval)
235
+ scheduleInfo.push(`interval=${schedule.interval}`);
236
+ if (schedule.expression)
237
+ scheduleInfo.push(`cron=${schedule.expression}`);
238
+ lines.push(` - ${name}: ${scheduleInfo.join(", ")}`);
239
+ }
240
+ }
241
+ // Permissions
242
+ if (agent.permissions) {
243
+ lines.push(` Permissions:`);
244
+ if (agent.permissions.mode)
245
+ lines.push(` Mode: ${agent.permissions.mode}`);
246
+ if (agent.permissions.allowed_tools?.length) {
247
+ lines.push(` Allowed Tools: ${agent.permissions.allowed_tools.join(", ")}`);
248
+ }
249
+ if (agent.permissions.denied_tools?.length) {
250
+ lines.push(` Denied Tools: ${agent.permissions.denied_tools.join(", ")}`);
251
+ }
252
+ }
253
+ }
254
+ return lines.join("\n");
255
+ }
256
+ /**
257
+ * Show the merged/resolved configuration
258
+ */
259
+ export async function configShowCommand(options) {
260
+ const result = await safeLoadConfig(options.config);
261
+ if (!result.success) {
262
+ console.error(`Error loading configuration: ${result.error.message}`);
263
+ console.error("");
264
+ console.error("Run 'herdctl config validate' for detailed error information.");
265
+ process.exit(1);
266
+ }
267
+ const config = result.data;
268
+ if (options.json) {
269
+ // JSON output - include the full resolved config
270
+ const output = {
271
+ fleet: config.fleet,
272
+ agents: config.agents.map((agent) => ({
273
+ ...agent,
274
+ configPath: path.relative(config.configDir, agent.configPath),
275
+ })),
276
+ configPath: config.configPath,
277
+ configDir: config.configDir,
278
+ };
279
+ console.log(JSON.stringify(output, null, 2));
280
+ }
281
+ else {
282
+ // Human-readable output
283
+ console.log(formatConfigForDisplay(config));
284
+ }
285
+ process.exit(0);
286
+ }
287
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * herdctl init - Initialize a new herdctl project
3
+ *
4
+ * Scaffolds a new project with:
5
+ * - herdctl.yaml configuration file
6
+ * - agents/ directory with example agent
7
+ * - .herdctl/ state directory
8
+ */
9
+ export interface InitOptions {
10
+ name?: string;
11
+ example?: string;
12
+ yes?: boolean;
13
+ force?: boolean;
14
+ }
15
+ export declare function initCommand(options: InitOptions): Promise<void>;
16
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAyKD,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkKrE"}