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,328 @@
1
+ /**
2
+ * herdctl jobs - List jobs with filtering and pagination
3
+ *
4
+ * Commands:
5
+ * - herdctl jobs List recent jobs (last 20)
6
+ * - herdctl jobs --agent <name> Jobs for specific agent
7
+ * - herdctl jobs --status running Filter by status
8
+ * - herdctl jobs --limit 50 Custom limit
9
+ * - herdctl jobs --json JSON output
10
+ */
11
+ import { FleetManager, ConfigNotFoundError, isFleetManagerError, isAgentNotFoundError, JobManager, } from "@herdctl/core";
12
+ /**
13
+ * Default state directory
14
+ */
15
+ const DEFAULT_STATE_DIR = ".herdctl";
16
+ /**
17
+ * Default job limit
18
+ */
19
+ const DEFAULT_LIMIT = 20;
20
+ /**
21
+ * Valid job statuses
22
+ */
23
+ const VALID_STATUSES = ["pending", "running", "completed", "failed", "cancelled"];
24
+ /**
25
+ * Check if colors should be disabled
26
+ */
27
+ function shouldUseColor() {
28
+ if (process.env.NO_COLOR !== undefined && process.env.NO_COLOR !== "") {
29
+ return false;
30
+ }
31
+ if (process.env.FORCE_COLOR !== undefined && process.env.FORCE_COLOR !== "0") {
32
+ return true;
33
+ }
34
+ return process.stdout.isTTY === true;
35
+ }
36
+ /**
37
+ * ANSI color codes
38
+ */
39
+ const colors = {
40
+ reset: "\x1b[0m",
41
+ bold: "\x1b[1m",
42
+ dim: "\x1b[2m",
43
+ green: "\x1b[32m",
44
+ yellow: "\x1b[33m",
45
+ red: "\x1b[31m",
46
+ cyan: "\x1b[36m",
47
+ gray: "\x1b[90m",
48
+ blue: "\x1b[34m",
49
+ };
50
+ /**
51
+ * Get a colored string, respecting NO_COLOR
52
+ */
53
+ function colorize(text, color) {
54
+ if (!shouldUseColor()) {
55
+ return text;
56
+ }
57
+ return `${colors[color]}${text}${colors.reset}`;
58
+ }
59
+ /**
60
+ * Get status color based on job status
61
+ */
62
+ function getStatusColor(status) {
63
+ switch (status) {
64
+ case "running":
65
+ return "green";
66
+ case "pending":
67
+ return "yellow";
68
+ case "completed":
69
+ return "cyan";
70
+ case "failed":
71
+ return "red";
72
+ case "cancelled":
73
+ return "gray";
74
+ default:
75
+ return "reset";
76
+ }
77
+ }
78
+ /**
79
+ * Format job status with color
80
+ */
81
+ function formatStatus(status) {
82
+ const color = getStatusColor(status);
83
+ return colorize(status, color);
84
+ }
85
+ /**
86
+ * Format duration in human-readable format
87
+ */
88
+ function formatDuration(seconds) {
89
+ if (seconds === null || seconds === undefined) {
90
+ return "-";
91
+ }
92
+ const minutes = Math.floor(seconds / 60);
93
+ const hours = Math.floor(minutes / 60);
94
+ const days = Math.floor(hours / 24);
95
+ if (days > 0) {
96
+ return `${days}d ${hours % 24}h`;
97
+ }
98
+ else if (hours > 0) {
99
+ return `${hours}h ${minutes % 60}m`;
100
+ }
101
+ else if (minutes > 0) {
102
+ return `${minutes}m ${Math.floor(seconds % 60)}s`;
103
+ }
104
+ else {
105
+ return `${Math.floor(seconds)}s`;
106
+ }
107
+ }
108
+ /**
109
+ * Format timestamp to local timezone
110
+ */
111
+ function formatTimestamp(isoTimestamp) {
112
+ const date = new Date(isoTimestamp);
113
+ return date.toLocaleString(undefined, {
114
+ month: "short",
115
+ day: "numeric",
116
+ hour: "2-digit",
117
+ minute: "2-digit",
118
+ hour12: false,
119
+ });
120
+ }
121
+ /**
122
+ * Format relative time (e.g., "5m ago")
123
+ */
124
+ function formatRelativeTime(isoTimestamp) {
125
+ const now = Date.now();
126
+ const timestamp = new Date(isoTimestamp).getTime();
127
+ const diffMs = now - timestamp;
128
+ const absDiffMs = Math.abs(diffMs);
129
+ const seconds = Math.floor(absDiffMs / 1000);
130
+ const minutes = Math.floor(seconds / 60);
131
+ const hours = Math.floor(minutes / 60);
132
+ const days = Math.floor(hours / 24);
133
+ let timeStr;
134
+ if (days > 0) {
135
+ timeStr = `${days}d`;
136
+ }
137
+ else if (hours > 0) {
138
+ timeStr = `${hours}h`;
139
+ }
140
+ else if (minutes > 0) {
141
+ timeStr = `${minutes}m`;
142
+ }
143
+ else {
144
+ timeStr = `${seconds}s`;
145
+ }
146
+ return `${timeStr} ago`;
147
+ }
148
+ /**
149
+ * Format jobs table for console output
150
+ */
151
+ function formatJobsTable(jobs, total, limit) {
152
+ const lines = [];
153
+ if (jobs.length === 0) {
154
+ lines.push("");
155
+ lines.push(colorize("No jobs found.", "dim"));
156
+ lines.push("");
157
+ return lines.join("\n");
158
+ }
159
+ // Header
160
+ lines.push("");
161
+ lines.push(colorize(`Jobs (${jobs.length}${total > jobs.length ? ` of ${total}` : ""})`, "bold"));
162
+ lines.push("═".repeat(90));
163
+ // Calculate column widths
164
+ const idWidth = Math.max(10, ...jobs.map(j => j.id.length)) + 2;
165
+ const agentWidth = Math.max(6, ...jobs.map(j => j.agent.length)) + 2;
166
+ const statusWidth = 12;
167
+ const durationWidth = 10;
168
+ const startedWidth = 16;
169
+ // Table header
170
+ lines.push(`${"JOB ID".padEnd(idWidth)}${"AGENT".padEnd(agentWidth)}${"STATUS".padEnd(statusWidth)}${"DURATION".padEnd(durationWidth)}${"STARTED".padEnd(startedWidth)}`);
171
+ lines.push(colorize("─".repeat(idWidth + agentWidth + statusWidth + durationWidth + startedWidth), "dim"));
172
+ // Table rows
173
+ for (const job of jobs) {
174
+ const statusStr = formatStatus(job.status);
175
+ const statusPad = shouldUseColor()
176
+ ? statusWidth + colors[getStatusColor(job.status)].length + colors.reset.length
177
+ : statusWidth;
178
+ lines.push(`${colorize(job.id, "cyan").padEnd(idWidth + (shouldUseColor() ? colors.cyan.length + colors.reset.length : 0))}${job.agent.padEnd(agentWidth)}${statusStr.padEnd(statusPad)}${formatDuration(job.duration_seconds ?? null).padEnd(durationWidth)}${formatRelativeTime(job.started_at).padEnd(startedWidth)}`);
179
+ }
180
+ if (total > jobs.length) {
181
+ lines.push("");
182
+ lines.push(colorize(`Showing ${jobs.length} of ${total} jobs. Use --limit to see more.`, "dim"));
183
+ }
184
+ lines.push("");
185
+ return lines.join("\n");
186
+ }
187
+ /**
188
+ * List jobs (herdctl jobs)
189
+ */
190
+ export async function jobsCommand(options) {
191
+ const stateDir = options.state || DEFAULT_STATE_DIR;
192
+ const isJsonOutput = options.json === true;
193
+ const limit = options.limit ?? DEFAULT_LIMIT;
194
+ // Validate status if provided
195
+ if (options.status && !VALID_STATUSES.includes(options.status)) {
196
+ if (isJsonOutput) {
197
+ console.log(JSON.stringify({
198
+ error: {
199
+ code: "INVALID_STATUS",
200
+ message: `Invalid status '${options.status}'. Valid statuses: ${VALID_STATUSES.join(", ")}`,
201
+ },
202
+ }));
203
+ process.exit(1);
204
+ }
205
+ console.error("");
206
+ console.error(`Error: Invalid status '${options.status}'.`);
207
+ console.error(`Valid statuses: ${VALID_STATUSES.join(", ")}`);
208
+ process.exit(1);
209
+ }
210
+ // Create FleetManager
211
+ const manager = new FleetManager({
212
+ configPath: options.config,
213
+ stateDir,
214
+ });
215
+ try {
216
+ // Initialize to load configuration
217
+ await manager.initialize();
218
+ // Create JobManager to query jobs
219
+ const { join } = await import("node:path");
220
+ const jobsDir = join(stateDir, "jobs");
221
+ const jobManager = new JobManager({
222
+ jobsDir,
223
+ });
224
+ // Build filter
225
+ const filter = {
226
+ limit,
227
+ };
228
+ if (options.agent) {
229
+ filter.agent = options.agent;
230
+ }
231
+ if (options.status) {
232
+ filter.status = options.status;
233
+ }
234
+ // Get jobs
235
+ const result = await jobManager.getJobs(filter);
236
+ if (isJsonOutput) {
237
+ const output = {
238
+ jobs: result.jobs.map((job) => ({
239
+ id: job.id,
240
+ agent: job.agent,
241
+ schedule: job.schedule,
242
+ status: job.status,
243
+ triggerType: job.trigger_type,
244
+ startedAt: job.started_at,
245
+ finishedAt: job.finished_at,
246
+ durationSeconds: job.duration_seconds,
247
+ exitReason: job.exit_reason,
248
+ summary: job.summary,
249
+ })),
250
+ total: result.total,
251
+ limit,
252
+ };
253
+ console.log(JSON.stringify(output, null, 2));
254
+ }
255
+ else {
256
+ console.log(formatJobsTable(result.jobs, result.total, limit));
257
+ }
258
+ }
259
+ catch (error) {
260
+ // Handle specific error types
261
+ if (error instanceof ConfigNotFoundError) {
262
+ if (isJsonOutput) {
263
+ console.log(JSON.stringify({
264
+ error: {
265
+ code: "CONFIG_NOT_FOUND",
266
+ message: "No configuration file found",
267
+ startDirectory: error.startDirectory,
268
+ },
269
+ }));
270
+ process.exit(1);
271
+ }
272
+ console.error("");
273
+ console.error("Error: No configuration file found.");
274
+ console.error(`Searched from: ${error.startDirectory}`);
275
+ console.error("");
276
+ console.error("Run 'herdctl init' to create a configuration file.");
277
+ process.exit(1);
278
+ }
279
+ if (isAgentNotFoundError(error)) {
280
+ if (isJsonOutput) {
281
+ console.log(JSON.stringify({
282
+ error: {
283
+ code: "AGENT_NOT_FOUND",
284
+ message: error.message,
285
+ agentName: options.agent,
286
+ },
287
+ }));
288
+ process.exit(1);
289
+ }
290
+ console.error("");
291
+ console.error(`Error: Agent '${options.agent}' not found.`);
292
+ console.error("");
293
+ console.error("Run 'herdctl status' to see all agents.");
294
+ process.exit(1);
295
+ }
296
+ if (isFleetManagerError(error)) {
297
+ if (isJsonOutput) {
298
+ console.log(JSON.stringify({
299
+ error: {
300
+ code: error.code,
301
+ message: error.message,
302
+ },
303
+ }));
304
+ process.exit(1);
305
+ }
306
+ console.error("");
307
+ console.error(`Error: ${error.message}`);
308
+ if (error.code) {
309
+ console.error(`Code: ${error.code}`);
310
+ }
311
+ process.exit(1);
312
+ }
313
+ // Generic error
314
+ if (isJsonOutput) {
315
+ console.log(JSON.stringify({
316
+ error: {
317
+ code: "UNKNOWN_ERROR",
318
+ message: error instanceof Error ? error.message : String(error),
319
+ },
320
+ }));
321
+ process.exit(1);
322
+ }
323
+ console.error("");
324
+ console.error("Error:", error instanceof Error ? error.message : String(error));
325
+ process.exit(1);
326
+ }
327
+ }
328
+ //# sourceMappingURL=jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/commands/jobs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * herdctl logs - Show agent logs
3
+ *
4
+ * Commands:
5
+ * - herdctl logs Recent logs from all agents
6
+ * - herdctl logs <agent> Logs from specific agent
7
+ * - herdctl logs -f Follow mode (stream new logs)
8
+ * - herdctl logs -f <agent> Follow specific agent
9
+ * - herdctl logs --job <id> Logs from specific job
10
+ * - herdctl logs -n 100 Last 100 lines (default: 50)
11
+ * - herdctl logs --json JSON output for each log entry
12
+ */
13
+ export interface LogsOptions {
14
+ follow?: boolean;
15
+ job?: string;
16
+ lines?: string;
17
+ json?: boolean;
18
+ state?: string;
19
+ config?: string;
20
+ }
21
+ /**
22
+ * Show logs (herdctl logs)
23
+ */
24
+ export declare function logsCommand(agentName: string | undefined, options: LogsOptions): Promise<void>;
25
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAYH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAgKD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA8Nf"}