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.
- package/bin/herdctl.js +9 -0
- package/dist/commands/__tests__/config.test.d.ts +2 -0
- package/dist/commands/__tests__/config.test.d.ts.map +1 -0
- package/dist/commands/__tests__/config.test.js +299 -0
- package/dist/commands/__tests__/config.test.js.map +1 -0
- package/dist/commands/__tests__/init.test.d.ts +2 -0
- package/dist/commands/__tests__/init.test.d.ts.map +1 -0
- package/dist/commands/__tests__/init.test.js +247 -0
- package/dist/commands/__tests__/init.test.js.map +1 -0
- package/dist/commands/__tests__/start.test.d.ts +2 -0
- package/dist/commands/__tests__/start.test.d.ts.map +1 -0
- package/dist/commands/__tests__/start.test.js +185 -0
- package/dist/commands/__tests__/start.test.js.map +1 -0
- package/dist/commands/__tests__/status.test.d.ts +2 -0
- package/dist/commands/__tests__/status.test.d.ts.map +1 -0
- package/dist/commands/__tests__/status.test.js +342 -0
- package/dist/commands/__tests__/status.test.js.map +1 -0
- package/dist/commands/__tests__/stop.test.d.ts +2 -0
- package/dist/commands/__tests__/stop.test.d.ts.map +1 -0
- package/dist/commands/__tests__/stop.test.js +229 -0
- package/dist/commands/__tests__/stop.test.js.map +1 -0
- package/dist/commands/__tests__/trigger.test.d.ts +2 -0
- package/dist/commands/__tests__/trigger.test.d.ts.map +1 -0
- package/dist/commands/__tests__/trigger.test.js +321 -0
- package/dist/commands/__tests__/trigger.test.js.map +1 -0
- package/dist/commands/cancel.d.ts +20 -0
- package/dist/commands/cancel.d.ts.map +1 -0
- package/dist/commands/cancel.js +263 -0
- package/dist/commands/cancel.js.map +1 -0
- package/dist/commands/config.d.ts +26 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +287 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.d.ts +16 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +305 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/job.d.ts +19 -0
- package/dist/commands/job.d.ts.map +1 -0
- package/dist/commands/job.js +460 -0
- package/dist/commands/job.js.map +1 -0
- package/dist/commands/jobs.d.ts +23 -0
- package/dist/commands/jobs.d.ts.map +1 -0
- package/dist/commands/jobs.js +328 -0
- package/dist/commands/jobs.js.map +1 -0
- package/dist/commands/logs.d.ts +25 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +360 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/start.d.ts +17 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +166 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +18 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +373 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +18 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +161 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/trigger.d.ts +23 -0
- package/dist/commands/trigger.d.ts.map +1 -0
- package/dist/commands/trigger.js +332 -0
- package/dist/commands/trigger.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +283 -0
- package/dist/index.js.map +1 -0
- 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"}
|