@herdctl/core 4.1.0 → 4.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +3 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/fleet-manager/__tests__/coverage.test.js +8 -0
- package/dist/fleet-manager/__tests__/coverage.test.js.map +1 -1
- package/dist/fleet-manager/__tests__/discord-manager.test.js +2 -2
- package/dist/fleet-manager/__tests__/discord-manager.test.js.map +1 -1
- package/dist/fleet-manager/__tests__/slack-manager.test.js +8 -3
- package/dist/fleet-manager/__tests__/slack-manager.test.js.map +1 -1
- package/dist/fleet-manager/discord-manager.js +7 -7
- package/dist/fleet-manager/discord-manager.js.map +1 -1
- package/dist/fleet-manager/fleet-manager.d.ts.map +1 -1
- package/dist/fleet-manager/fleet-manager.js +5 -9
- package/dist/fleet-manager/fleet-manager.js.map +1 -1
- package/dist/fleet-manager/job-control.js +1 -1
- package/dist/fleet-manager/job-control.js.map +1 -1
- package/dist/fleet-manager/job-queue.d.ts.map +1 -1
- package/dist/fleet-manager/job-queue.js +2 -6
- package/dist/fleet-manager/job-queue.js.map +1 -1
- package/dist/fleet-manager/slack-manager.js +6 -6
- package/dist/fleet-manager/slack-manager.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/runner/job-executor.d.ts +1 -0
- package/dist/runner/job-executor.d.ts.map +1 -1
- package/dist/runner/job-executor.js +4 -7
- package/dist/runner/job-executor.js.map +1 -1
- package/dist/runner/runtime/cli-runtime.d.ts.map +1 -1
- package/dist/runner/runtime/cli-runtime.js +29 -27
- package/dist/runner/runtime/cli-runtime.js.map +1 -1
- package/dist/runner/runtime/cli-session-watcher.d.ts.map +1 -1
- package/dist/runner/runtime/cli-session-watcher.js +20 -18
- package/dist/runner/runtime/cli-session-watcher.js.map +1 -1
- package/dist/runner/runtime/container-manager.d.ts.map +1 -1
- package/dist/runner/runtime/container-manager.js +7 -5
- package/dist/runner/runtime/container-manager.js.map +1 -1
- package/dist/runner/runtime/container-runner.d.ts.map +1 -1
- package/dist/runner/runtime/container-runner.js +12 -10
- package/dist/runner/runtime/container-runner.js.map +1 -1
- package/dist/scheduler/__tests__/scheduler.test.js +2 -2
- package/dist/scheduler/__tests__/scheduler.test.js.map +1 -1
- package/dist/scheduler/schedule-runner.d.ts.map +1 -1
- package/dist/scheduler/schedule-runner.js +2 -6
- package/dist/scheduler/schedule-runner.js.map +1 -1
- package/dist/scheduler/schedule-state.d.ts.map +1 -1
- package/dist/scheduler/schedule-state.js +2 -3
- package/dist/scheduler/schedule-state.js.map +1 -1
- package/dist/scheduler/scheduler.d.ts.map +1 -1
- package/dist/scheduler/scheduler.js +3 -7
- package/dist/scheduler/scheduler.js.map +1 -1
- package/dist/state/fleet-state.d.ts.map +1 -1
- package/dist/state/fleet-state.js +2 -3
- package/dist/state/fleet-state.js.map +1 -1
- package/dist/state/schemas/job-output.d.ts +2 -2
- package/dist/utils/__tests__/logger.test.d.ts +2 -0
- package/dist/utils/__tests__/logger.test.d.ts.map +1 -0
- package/dist/utils/__tests__/logger.test.js +360 -0
- package/dist/utils/__tests__/logger.test.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +72 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +117 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +1 -1
|
@@ -17,6 +17,8 @@ import { execa } from "execa";
|
|
|
17
17
|
import { getCliSessionDir, getCliSessionFile, waitForNewSessionFile, } from "./cli-session-path.js";
|
|
18
18
|
import { CLISessionWatcher } from "./cli-session-watcher.js";
|
|
19
19
|
import { transformMcpServers } from "../sdk-adapter.js";
|
|
20
|
+
import { createLogger } from "../../utils/logger.js";
|
|
21
|
+
const logger = createLogger("CLIRuntime");
|
|
20
22
|
/**
|
|
21
23
|
* CLI runtime implementation
|
|
22
24
|
*
|
|
@@ -124,8 +126,8 @@ export class CLIRuntime {
|
|
|
124
126
|
}
|
|
125
127
|
// Note: Prompt is NOT added to args - it's provided via stdin (see processSpawner call below)
|
|
126
128
|
// DEBUG: Log the command being executed
|
|
127
|
-
|
|
128
|
-
|
|
129
|
+
logger.debug(`Executing command: claude ${args.join(" ")}`);
|
|
130
|
+
logger.debug(`Prompt: ${options.prompt}`);
|
|
129
131
|
// Track process and watcher for cleanup
|
|
130
132
|
let subprocess;
|
|
131
133
|
let watcher;
|
|
@@ -138,25 +140,25 @@ export class CLIRuntime {
|
|
|
138
140
|
? working_directory
|
|
139
141
|
: working_directory.root
|
|
140
142
|
: process.cwd();
|
|
141
|
-
|
|
142
|
-
|
|
143
|
+
logger.debug(`Working directory: ${cwd}`);
|
|
144
|
+
logger.debug(`Agent working_directory config: ${JSON.stringify(working_directory)}`);
|
|
143
145
|
// Get the CLI session directory where files will be written
|
|
144
146
|
// Use override if provided (for Docker execution with mounted sessions)
|
|
145
147
|
const sessionDir = this.sessionDirOverride ?? getCliSessionDir(cwd);
|
|
146
|
-
|
|
148
|
+
logger.debug(`Session directory: ${sessionDir}`);
|
|
147
149
|
// Record start time before spawning process
|
|
148
150
|
const processStartTime = Date.now();
|
|
149
151
|
// Spawn claude subprocess with prompt via stdin
|
|
150
152
|
// Uses custom spawner if provided (e.g., for Docker execution)
|
|
151
153
|
// Note: processSpawner returns Subprocess directly (which is promise-like)
|
|
152
154
|
subprocess = this.processSpawner(args, cwd, options.prompt, options.abortController?.signal);
|
|
153
|
-
|
|
155
|
+
logger.debug(`Subprocess spawned, PID: ${subprocess.pid}`);
|
|
154
156
|
// Log subprocess output for debugging
|
|
155
157
|
subprocess.stdout?.on("data", (data) => {
|
|
156
|
-
|
|
158
|
+
logger.info(data.toString());
|
|
157
159
|
});
|
|
158
160
|
subprocess.stderr?.on("data", (data) => {
|
|
159
|
-
|
|
161
|
+
logger.warn(data.toString());
|
|
160
162
|
});
|
|
161
163
|
// Track subprocess completion for later
|
|
162
164
|
const processExitPromise = (async () => {
|
|
@@ -164,13 +166,13 @@ export class CLIRuntime {
|
|
|
164
166
|
return await subprocess;
|
|
165
167
|
}
|
|
166
168
|
catch (error) {
|
|
167
|
-
|
|
169
|
+
logger.error(`Process failed: ${error}`);
|
|
168
170
|
throw error;
|
|
169
171
|
}
|
|
170
172
|
})();
|
|
171
173
|
// Monitor subprocess completion in background (for logging only)
|
|
172
174
|
processExitPromise.then((result) => {
|
|
173
|
-
|
|
175
|
+
logger.debug(`Process completed with exit code: ${result.exitCode}`);
|
|
174
176
|
}, () => {
|
|
175
177
|
// Error already logged above
|
|
176
178
|
});
|
|
@@ -185,29 +187,29 @@ export class CLIRuntime {
|
|
|
185
187
|
else {
|
|
186
188
|
sessionFilePath = getCliSessionFile(cwd, options.resume);
|
|
187
189
|
}
|
|
188
|
-
|
|
190
|
+
logger.debug(`Resuming session, watching file: ${sessionFilePath}`);
|
|
189
191
|
}
|
|
190
192
|
else {
|
|
191
193
|
// When starting new session, wait for a NEW file created after process start
|
|
192
|
-
|
|
194
|
+
logger.debug("Waiting for new session file...");
|
|
193
195
|
sessionFilePath = await waitForNewSessionFile(sessionDir, processStartTime, {
|
|
194
196
|
timeoutMs: 15000, // Increase timeout to 15 seconds for debugging
|
|
195
197
|
pollIntervalMs: 200,
|
|
196
198
|
});
|
|
197
|
-
|
|
199
|
+
logger.debug(`New session, watching newly created file: ${sessionFilePath}`);
|
|
198
200
|
}
|
|
199
201
|
// Extract session ID from filename (basename without .jsonl extension)
|
|
200
202
|
// For CLI runtime, the session ID is the filename - this matches SDK runtime behavior
|
|
201
203
|
const sessionFileName = sessionFilePath.split("/").pop() || "";
|
|
202
204
|
const extractedSessionId = sessionFileName.replace(/\.jsonl$/, "");
|
|
203
|
-
|
|
205
|
+
logger.debug(`Extracted session ID: ${extractedSessionId}`);
|
|
204
206
|
// Watch the session file for messages
|
|
205
207
|
watcher = new CLISessionWatcher(sessionFilePath);
|
|
206
208
|
// When resuming, initialize watcher to skip existing content
|
|
207
209
|
// This prevents replaying the entire conversation history on each message
|
|
208
210
|
if (options.resume) {
|
|
209
211
|
await watcher.initialize();
|
|
210
|
-
|
|
212
|
+
logger.debug("Watcher initialized for resume, will skip existing content");
|
|
211
213
|
}
|
|
212
214
|
// Set up abort handling
|
|
213
215
|
if (options.abortController) {
|
|
@@ -219,15 +221,15 @@ export class CLIRuntime {
|
|
|
219
221
|
// Set up process completion handler - stop watcher when process exits
|
|
220
222
|
// This allows the for-await loop to exit naturally
|
|
221
223
|
processExitPromise.then(() => {
|
|
222
|
-
|
|
224
|
+
logger.debug("Process completed, stopping watcher to exit loop");
|
|
223
225
|
watcher?.stop();
|
|
224
|
-
}, (
|
|
225
|
-
|
|
226
|
+
}, () => {
|
|
227
|
+
logger.debug("Process failed, stopping watcher");
|
|
226
228
|
watcher?.stop();
|
|
227
229
|
});
|
|
228
230
|
// Stream messages from the session file
|
|
229
231
|
// Just iterate naturally - the watcher handles all the waiting
|
|
230
|
-
|
|
232
|
+
logger.debug("Starting to stream messages from watcher");
|
|
231
233
|
// Yield synthetic system message with session ID (matches SDK runtime behavior)
|
|
232
234
|
// This allows the message processor to extract the session ID for persistence
|
|
233
235
|
yield {
|
|
@@ -236,10 +238,10 @@ export class CLIRuntime {
|
|
|
236
238
|
session_id: extractedSessionId,
|
|
237
239
|
content: "CLI session initialized",
|
|
238
240
|
};
|
|
239
|
-
|
|
241
|
+
logger.debug("Yielded synthetic system message with session ID");
|
|
240
242
|
// Stream messages from the watcher as they arrive
|
|
241
243
|
for await (const message of watcher.watch()) {
|
|
242
|
-
|
|
244
|
+
logger.debug(`Received message type: ${message.type}`);
|
|
243
245
|
yield message;
|
|
244
246
|
// Track errors
|
|
245
247
|
if (message.type === "error") {
|
|
@@ -247,24 +249,24 @@ export class CLIRuntime {
|
|
|
247
249
|
}
|
|
248
250
|
// If this is a result message, we're done
|
|
249
251
|
if (message.type === "result") {
|
|
250
|
-
|
|
252
|
+
logger.debug("Got result message, stopping");
|
|
251
253
|
break;
|
|
252
254
|
}
|
|
253
255
|
}
|
|
254
|
-
|
|
256
|
+
logger.debug("Watcher iteration complete");
|
|
255
257
|
// Wait for process to complete
|
|
256
258
|
const { exitCode } = await processExitPromise;
|
|
257
|
-
|
|
259
|
+
logger.debug("Process completed, flushing any remaining messages");
|
|
258
260
|
// After process exits, explicitly flush the file one more time
|
|
259
261
|
// This catches any final messages that hadn't triggered chokidar events yet
|
|
260
262
|
const remainingMessages = await watcher.flushRemainingMessages();
|
|
261
|
-
|
|
263
|
+
logger.debug(`Found ${remainingMessages.length} remaining message(s) after process exit`);
|
|
262
264
|
// Stop the watcher now - we've flushed everything we need
|
|
263
|
-
|
|
265
|
+
logger.debug("Stopping watcher after flush");
|
|
264
266
|
watcher.stop();
|
|
265
267
|
// Yield any remaining messages
|
|
266
268
|
for (const message of remainingMessages) {
|
|
267
|
-
|
|
269
|
+
logger.debug(`Yielding remaining message type: ${message.type}`);
|
|
268
270
|
yield message;
|
|
269
271
|
// Track errors
|
|
270
272
|
if (message.type === "error") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-runtime.js","sourceRoot":"","sources":["../../../src/runner/runtime/cli-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,KAAK,EAAmB,MAAM,OAAO,CAAC;AAG/C,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-runtime.js","sourceRoot":"","sources":["../../../src/runner/runtime/cli-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-session-watcher.d.ts","sourceRoot":"","sources":["../../../src/runner/runtime/cli-session-watcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-session-watcher.d.ts","sourceRoot":"","sources":["../../../src/runner/runtime/cli-session-watcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK9C;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAkD;IACjE,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,OAAO,CAAC,OAAO,CAAS;gBAEZ,eAAe,EAAE,MAAM;IAInC;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBjC;;OAEG;YACW,WAAW;IAwCzB;;;;;OAKG;IACI,KAAK,IAAI,aAAa,CAAC,UAAU,CAAC;IA0DzC;;;;;;;OAOG;IACG,sBAAsB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAYrD;;OAEG;IACH,IAAI,IAAI,IAAI;CAab;AAED;;GAEG;AACH,wBAAuB,gBAAgB,CACrC,eAAe,EAAE,MAAM,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,aAAa,CAAC,UAAU,CAAC,CAa3B"}
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import chokidar from "chokidar";
|
|
8
8
|
import { readFile } from "node:fs/promises";
|
|
9
|
+
import { createLogger } from "../../utils/logger.js";
|
|
10
|
+
const logger = createLogger("CLISessionWatcher");
|
|
9
11
|
/**
|
|
10
12
|
* Watches a CLI session file and yields new messages as they're written
|
|
11
13
|
*/
|
|
@@ -30,15 +32,15 @@ export class CLISessionWatcher {
|
|
|
30
32
|
const content = await readFile(this.sessionFilePath, "utf-8");
|
|
31
33
|
const lines = content.split("\n").filter((line) => line.trim() !== "");
|
|
32
34
|
this.lastLineCount = lines.length;
|
|
33
|
-
|
|
35
|
+
logger.debug(`Initialized at line ${this.lastLineCount}, will skip existing content`);
|
|
34
36
|
}
|
|
35
37
|
catch (error) {
|
|
36
38
|
if (error.code === "ENOENT") {
|
|
37
39
|
// File doesn't exist yet - that's fine for new sessions
|
|
38
|
-
|
|
40
|
+
logger.debug(`File doesn't exist yet, starting from line 0`);
|
|
39
41
|
}
|
|
40
42
|
else {
|
|
41
|
-
|
|
43
|
+
logger.warn(`Failed to initialize: ${error instanceof Error ? error.message : String(error)}`);
|
|
42
44
|
}
|
|
43
45
|
}
|
|
44
46
|
}
|
|
@@ -52,29 +54,29 @@ export class CLISessionWatcher {
|
|
|
52
54
|
// Process only new lines since last read
|
|
53
55
|
const newLines = lines.slice(this.lastLineCount);
|
|
54
56
|
this.lastLineCount = lines.length;
|
|
55
|
-
|
|
57
|
+
logger.debug(`Processing ${newLines.length} new lines`);
|
|
56
58
|
// Parse and queue valid messages
|
|
57
59
|
for (const line of newLines) {
|
|
58
60
|
try {
|
|
59
61
|
const message = JSON.parse(line);
|
|
60
|
-
|
|
62
|
+
logger.debug(`Queued message type: ${message.type}`);
|
|
61
63
|
this.messageQueue.push(message);
|
|
62
64
|
}
|
|
63
65
|
catch (error) {
|
|
64
66
|
// Skip invalid JSON lines (CLI may output non-JSON)
|
|
65
|
-
|
|
67
|
+
logger.debug(`Failed to parse line: ${error instanceof Error ? error.message : String(error)}`);
|
|
66
68
|
}
|
|
67
69
|
}
|
|
68
70
|
// If someone is waiting for a message and we have one, wake them up
|
|
69
71
|
if (this.pendingMessageResolve && this.messageQueue.length > 0) {
|
|
70
|
-
|
|
72
|
+
logger.debug(`Waking up waiting iterator`);
|
|
71
73
|
this.pendingMessageResolve();
|
|
72
74
|
this.pendingMessageResolve = null;
|
|
73
75
|
}
|
|
74
76
|
}
|
|
75
77
|
catch (error) {
|
|
76
78
|
if (error.code !== "ENOENT") {
|
|
77
|
-
|
|
79
|
+
logger.warn(`Error reading session file: ${error instanceof Error ? error.message : String(error)}`);
|
|
78
80
|
}
|
|
79
81
|
}
|
|
80
82
|
}
|
|
@@ -94,26 +96,26 @@ export class CLISessionWatcher {
|
|
|
94
96
|
ignoreInitial: false,
|
|
95
97
|
});
|
|
96
98
|
this.watcher.on("add", async () => {
|
|
97
|
-
|
|
99
|
+
logger.debug("File 'add' event");
|
|
98
100
|
await this.processFile();
|
|
99
101
|
});
|
|
100
102
|
this.watcher.on("change", async () => {
|
|
101
|
-
|
|
103
|
+
logger.debug("File 'change' event");
|
|
102
104
|
await this.processFile();
|
|
103
105
|
});
|
|
104
106
|
this.watcher.on("error", (error) => {
|
|
105
|
-
|
|
107
|
+
logger.error(`Watcher error: ${error instanceof Error ? error.message : String(error)}`);
|
|
106
108
|
});
|
|
107
109
|
try {
|
|
108
110
|
while (!this.stopped) {
|
|
109
111
|
// If we have queued messages, yield them
|
|
110
112
|
while (this.messageQueue.length > 0) {
|
|
111
113
|
const message = this.messageQueue.shift();
|
|
112
|
-
|
|
114
|
+
logger.debug(`Yielding message type: ${message.type}`);
|
|
113
115
|
yield message;
|
|
114
116
|
}
|
|
115
117
|
// No messages - wait for chokidar to add one
|
|
116
|
-
|
|
118
|
+
logger.debug(`No messages, waiting for chokidar event`);
|
|
117
119
|
await new Promise((resolve) => {
|
|
118
120
|
this.pendingMessageResolve = resolve;
|
|
119
121
|
// Also wake up if stopped
|
|
@@ -121,7 +123,7 @@ export class CLISessionWatcher {
|
|
|
121
123
|
resolve();
|
|
122
124
|
}
|
|
123
125
|
});
|
|
124
|
-
|
|
126
|
+
logger.debug(`Woke up (stopped: ${this.stopped}, queue: ${this.messageQueue.length})`);
|
|
125
127
|
// Check if we should exit
|
|
126
128
|
if (this.stopped) {
|
|
127
129
|
break;
|
|
@@ -129,7 +131,7 @@ export class CLISessionWatcher {
|
|
|
129
131
|
}
|
|
130
132
|
}
|
|
131
133
|
finally {
|
|
132
|
-
|
|
134
|
+
logger.debug(`Generator exiting`);
|
|
133
135
|
this.stop();
|
|
134
136
|
}
|
|
135
137
|
}
|
|
@@ -142,19 +144,19 @@ export class CLISessionWatcher {
|
|
|
142
144
|
* @returns Array of any remaining messages found
|
|
143
145
|
*/
|
|
144
146
|
async flushRemainingMessages() {
|
|
145
|
-
|
|
147
|
+
logger.debug(`Flushing remaining messages from file`);
|
|
146
148
|
await this.processFile();
|
|
147
149
|
// Return all queued messages
|
|
148
150
|
const messages = [...this.messageQueue];
|
|
149
151
|
this.messageQueue = [];
|
|
150
|
-
|
|
152
|
+
logger.debug(`Flushed ${messages.length} remaining message(s)`);
|
|
151
153
|
return messages;
|
|
152
154
|
}
|
|
153
155
|
/**
|
|
154
156
|
* Stop watching
|
|
155
157
|
*/
|
|
156
158
|
stop() {
|
|
157
|
-
|
|
159
|
+
logger.debug(`stop() called`);
|
|
158
160
|
this.stopped = true;
|
|
159
161
|
if (this.watcher) {
|
|
160
162
|
this.watcher.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-session-watcher.js","sourceRoot":"","sources":["../../../src/runner/runtime/cli-session-watcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-session-watcher.js","sourceRoot":"","sources":["../../../src/runner/runtime/cli-session-watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-manager.d.ts","sourceRoot":"","sources":["../../../src/runner/runtime/container-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAA0B,IAAI,EAAc,MAAM,WAAW,CAAC;AAKrF,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"container-manager.d.ts","sourceRoot":"","sources":["../../../src/runner/runtime/container-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAA0B,IAAI,EAAc,MAAM,WAAW,CAAC;AAKrF,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAK3D;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,iBAAiB,CAAgC;gBAE7C,MAAM,CAAC,EAAE,OAAO,WAAW,CAAC;IAIxC;;;;;;;;;;;OAWG;IACG,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,WAAW,EAAE,EACrB,GAAG,EAAE,MAAM,EAAE,GACZ,OAAO,CAAC,SAAS,CAAC;IA+BrB;;OAEG;YACW,eAAe;IAkG7B;;;;;;;OAOG;IACG,eAAe,CACnB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,GAAE,MAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAWhB;;;;;;;OAOG;IACG,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC;IAwBhB;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,MAAM,GACf,WAAW,EAAE,CAgCf;AAsFD;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,aAAa,EACpB,MAAM,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,EAAE,CAAC,CA2DnB"}
|
|
@@ -8,6 +8,8 @@ import Dockerode from "dockerode";
|
|
|
8
8
|
import * as path from "node:path";
|
|
9
9
|
import * as fs from "node:fs";
|
|
10
10
|
import * as os from "node:os";
|
|
11
|
+
import { createLogger } from "../../utils/logger.js";
|
|
12
|
+
const logger = createLogger("ContainerManager");
|
|
11
13
|
/**
|
|
12
14
|
* Container manager for herdctl Docker execution
|
|
13
15
|
*/
|
|
@@ -271,7 +273,7 @@ function writeCredentialsFile(oauth) {
|
|
|
271
273
|
fs.writeFileSync(credsPath, JSON.stringify(creds, null, 2));
|
|
272
274
|
}
|
|
273
275
|
catch (err) {
|
|
274
|
-
|
|
276
|
+
logger.error(`Failed to write credentials file: ${err}`);
|
|
275
277
|
}
|
|
276
278
|
}
|
|
277
279
|
/**
|
|
@@ -281,7 +283,7 @@ function writeCredentialsFile(oauth) {
|
|
|
281
283
|
*/
|
|
282
284
|
async function refreshClaudeOAuthToken(refreshToken) {
|
|
283
285
|
try {
|
|
284
|
-
|
|
286
|
+
logger.info("Refreshing Claude OAuth token...");
|
|
285
287
|
const response = await fetch(CLAUDE_OAUTH_TOKEN_URL, {
|
|
286
288
|
method: "POST",
|
|
287
289
|
headers: { "Content-Type": "application/json" },
|
|
@@ -292,7 +294,7 @@ async function refreshClaudeOAuthToken(refreshToken) {
|
|
|
292
294
|
}),
|
|
293
295
|
});
|
|
294
296
|
if (!response.ok) {
|
|
295
|
-
|
|
297
|
+
logger.error(`Token refresh failed: HTTP ${response.status}`);
|
|
296
298
|
return null;
|
|
297
299
|
}
|
|
298
300
|
const data = await response.json();
|
|
@@ -302,11 +304,11 @@ async function refreshClaudeOAuthToken(refreshToken) {
|
|
|
302
304
|
expiresAt: Date.now() + data.expires_in * 1000,
|
|
303
305
|
};
|
|
304
306
|
writeCredentialsFile(oauth);
|
|
305
|
-
|
|
307
|
+
logger.info(`Token refreshed, expires in ${Math.round(data.expires_in / 3600)}h`);
|
|
306
308
|
return oauth;
|
|
307
309
|
}
|
|
308
310
|
catch (err) {
|
|
309
|
-
|
|
311
|
+
logger.error(`Token refresh error: ${err}`);
|
|
310
312
|
return null;
|
|
311
313
|
}
|
|
312
314
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-manager.js","sourceRoot":"","sources":["../../../src/runner/runtime/container-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"container-manager.js","sourceRoot":"","sources":["../../../src/runner/runtime/container-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-runner.d.ts","sourceRoot":"","sources":["../../../src/runner/runtime/container-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAwB,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"container-runner.d.ts","sourceRoot":"","sources":["../../../src/runner/runtime/container-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAwB,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAevD;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IAapD,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IAbhB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;;;;;OAOG;gBAEO,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,YAAY,EAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,OAAO,WAAW,CAAC;IAM9B;;;;;;OAMG;IACI,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAAC,UAAU,CAAC;IAqEzE;;;;OAIG;YACY,iBAAiB;IAkChC;;;;;;OAMG;YACY,iBAAiB;CAkJjC"}
|
|
@@ -26,6 +26,8 @@ import { CLIRuntime } from "./cli-runtime.js";
|
|
|
26
26
|
import { SDKRuntime } from "./sdk-runtime.js";
|
|
27
27
|
import { toSDKOptions } from "../sdk-adapter.js";
|
|
28
28
|
import Dockerode from "dockerode";
|
|
29
|
+
import { createLogger } from "../../utils/logger.js";
|
|
30
|
+
const logger = createLogger("ContainerRunner");
|
|
29
31
|
/**
|
|
30
32
|
* Container runtime decorator
|
|
31
33
|
*
|
|
@@ -102,7 +104,7 @@ export class ContainerRunner {
|
|
|
102
104
|
}
|
|
103
105
|
catch (stopError) {
|
|
104
106
|
// Log but don't fail - container might already be stopped
|
|
105
|
-
|
|
107
|
+
logger.error(`Failed to stop ephemeral container: ${stopError}`);
|
|
106
108
|
}
|
|
107
109
|
}
|
|
108
110
|
// Always cleanup old containers, regardless of success/failure
|
|
@@ -112,7 +114,7 @@ export class ContainerRunner {
|
|
|
112
114
|
}
|
|
113
115
|
catch (cleanupError) {
|
|
114
116
|
// Log cleanup errors but don't fail the execution
|
|
115
|
-
|
|
117
|
+
logger.error(`Failed to cleanup old containers: ${cleanupError}`);
|
|
116
118
|
}
|
|
117
119
|
}
|
|
118
120
|
}
|
|
@@ -134,8 +136,8 @@ export class ContainerRunner {
|
|
|
134
136
|
return `'${arg.replace(/'/g, "'\\''")}'`;
|
|
135
137
|
}).join(" ");
|
|
136
138
|
const claudeCommand = `cd /workspace && printf %s "${escapedPrompt}" | claude ${claudeArgs}`;
|
|
137
|
-
|
|
138
|
-
|
|
139
|
+
logger.debug(`Executing docker exec in container ${containerId}`);
|
|
140
|
+
logger.debug(`Prompt length: ${prompt.length}`);
|
|
139
141
|
// execa returns Subprocess directly (which is promise-like)
|
|
140
142
|
return execa("docker", ["exec", containerId, "sh", "-c", claudeCommand], {
|
|
141
143
|
cancelSignal: signal,
|
|
@@ -177,7 +179,7 @@ export class ContainerRunner {
|
|
|
177
179
|
type: "http",
|
|
178
180
|
url: `http://herdctl:${bridge.port}/mcp`,
|
|
179
181
|
};
|
|
180
|
-
|
|
182
|
+
logger.debug(`Started MCP HTTP bridge for '${name}' on port ${bridge.port}`);
|
|
181
183
|
}
|
|
182
184
|
sdkOptions.mcpServers = mcpServers;
|
|
183
185
|
// Auto-add injected MCP server tool patterns to allowedTools
|
|
@@ -203,8 +205,8 @@ export class ContainerRunner {
|
|
|
203
205
|
// Use bash login shell to get full environment including PATH
|
|
204
206
|
const optionsJson = JSON.stringify(wrapperOptions).replace(/'/g, "'\\''");
|
|
205
207
|
const command = `export HERDCTL_SDK_OPTIONS='${optionsJson}' && node /usr/local/lib/docker-sdk-wrapper.js`;
|
|
206
|
-
|
|
207
|
-
|
|
208
|
+
logger.debug(`SDK exec command length: ${command.length}`);
|
|
209
|
+
logger.debug(`Options JSON length: ${optionsJson.length}`);
|
|
208
210
|
const exec = await container.exec({
|
|
209
211
|
Cmd: [
|
|
210
212
|
"bash",
|
|
@@ -234,7 +236,7 @@ export class ContainerRunner {
|
|
|
234
236
|
stderrRl.on("line", (line) => {
|
|
235
237
|
const trimmed = line.trim();
|
|
236
238
|
if (trimmed) {
|
|
237
|
-
|
|
239
|
+
logger.error(`SDK stderr: ${trimmed}`);
|
|
238
240
|
stderrLines.push(trimmed);
|
|
239
241
|
}
|
|
240
242
|
});
|
|
@@ -252,7 +254,7 @@ export class ContainerRunner {
|
|
|
252
254
|
yield message;
|
|
253
255
|
}
|
|
254
256
|
catch (error) {
|
|
255
|
-
|
|
257
|
+
logger.warn(`Failed to parse SDK output: ${error instanceof Error ? error.message : String(error)}`);
|
|
256
258
|
}
|
|
257
259
|
}
|
|
258
260
|
// Check exec exit code
|
|
@@ -273,7 +275,7 @@ export class ContainerRunner {
|
|
|
273
275
|
await bridge.close();
|
|
274
276
|
}
|
|
275
277
|
catch (err) {
|
|
276
|
-
|
|
278
|
+
logger.error(`Failed to close MCP HTTP bridge: ${err}`);
|
|
277
279
|
}
|
|
278
280
|
}
|
|
279
281
|
}
|