@herdctl/core 4.0.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/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +3 -1
- package/dist/config/index.js.map +1 -1
- 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/config/schema.d.ts +571 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +67 -1
- package/dist/config/schema.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.d.ts +11 -0
- package/dist/fleet-manager/__tests__/slack-manager.test.d.ts.map +1 -0
- package/dist/fleet-manager/__tests__/slack-manager.test.js +1027 -0
- package/dist/fleet-manager/__tests__/slack-manager.test.js.map +1 -0
- package/dist/fleet-manager/context.d.ts +4 -0
- package/dist/fleet-manager/context.d.ts.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/event-types.d.ts +113 -0
- package/dist/fleet-manager/event-types.d.ts.map +1 -1
- package/dist/fleet-manager/fleet-manager.d.ts +3 -0
- package/dist/fleet-manager/fleet-manager.d.ts.map +1 -1
- package/dist/fleet-manager/fleet-manager.js +15 -9
- package/dist/fleet-manager/fleet-manager.js.map +1 -1
- package/dist/fleet-manager/job-control.d.ts.map +1 -1
- package/dist/fleet-manager/job-control.js +6 -3
- 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.d.ts +158 -0
- package/dist/fleet-manager/slack-manager.d.ts.map +1 -0
- package/dist/fleet-manager/slack-manager.js +570 -0
- package/dist/fleet-manager/slack-manager.js.map +1 -0
- package/dist/fleet-manager/status-queries.d.ts +2 -1
- package/dist/fleet-manager/status-queries.d.ts.map +1 -1
- package/dist/fleet-manager/status-queries.js +42 -3
- package/dist/fleet-manager/status-queries.js.map +1 -1
- package/dist/fleet-manager/types.d.ts +43 -3
- package/dist/fleet-manager/types.d.ts.map +1 -1
- package/dist/hooks/__tests__/slack-runner.test.d.ts +5 -0
- package/dist/hooks/__tests__/slack-runner.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/slack-runner.test.js +307 -0
- package/dist/hooks/__tests__/slack-runner.test.js.map +1 -0
- package/dist/hooks/hook-executor.d.ts +1 -0
- package/dist/hooks/hook-executor.d.ts.map +1 -1
- package/dist/hooks/hook-executor.js +8 -0
- package/dist/hooks/hook-executor.js.map +1 -1
- package/dist/hooks/index.d.ts +2 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/runners/slack.d.ts +62 -0
- package/dist/hooks/runners/slack.d.ts.map +1 -0
- package/dist/hooks/runners/slack.js +329 -0
- package/dist/hooks/runners/slack.js.map +1 -0
- package/dist/hooks/types.d.ts +4 -4
- package/dist/hooks/types.d.ts.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/__tests__/file-sender-mcp.test.d.ts +2 -0
- package/dist/runner/__tests__/file-sender-mcp.test.d.ts.map +1 -0
- package/dist/runner/__tests__/file-sender-mcp.test.js +177 -0
- package/dist/runner/__tests__/file-sender-mcp.test.js.map +1 -0
- package/dist/runner/__tests__/job-executor.test.js +12 -12
- package/dist/runner/__tests__/job-executor.test.js.map +1 -1
- package/dist/runner/file-sender-mcp.d.ts +69 -0
- package/dist/runner/file-sender-mcp.d.ts.map +1 -0
- package/dist/runner/file-sender-mcp.js +145 -0
- package/dist/runner/file-sender-mcp.js.map +1 -0
- package/dist/runner/index.d.ts +1 -0
- package/dist/runner/index.d.ts.map +1 -1
- package/dist/runner/index.js +2 -0
- package/dist/runner/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 +38 -11
- package/dist/runner/job-executor.js.map +1 -1
- package/dist/runner/runtime/__tests__/docker-security.test.js +12 -12
- package/dist/runner/runtime/__tests__/docker-security.test.js.map +1 -1
- package/dist/runner/runtime/__tests__/mcp-http-bridge.test.d.ts +2 -0
- package/dist/runner/runtime/__tests__/mcp-http-bridge.test.d.ts.map +1 -0
- package/dist/runner/runtime/__tests__/mcp-http-bridge.test.js +191 -0
- package/dist/runner/runtime/__tests__/mcp-http-bridge.test.js.map +1 -0
- 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 +5 -1
- package/dist/runner/runtime/container-manager.d.ts.map +1 -1
- package/dist/runner/runtime/container-manager.js +117 -5
- package/dist/runner/runtime/container-manager.js.map +1 -1
- package/dist/runner/runtime/container-runner.d.ts +2 -0
- package/dist/runner/runtime/container-runner.d.ts.map +1 -1
- package/dist/runner/runtime/container-runner.js +127 -78
- package/dist/runner/runtime/container-runner.js.map +1 -1
- package/dist/runner/runtime/index.d.ts +1 -0
- package/dist/runner/runtime/index.d.ts.map +1 -1
- package/dist/runner/runtime/index.js +2 -0
- package/dist/runner/runtime/index.js.map +1 -1
- package/dist/runner/runtime/interface.d.ts +2 -0
- package/dist/runner/runtime/interface.d.ts.map +1 -1
- package/dist/runner/runtime/mcp-http-bridge.d.ts +39 -0
- package/dist/runner/runtime/mcp-http-bridge.d.ts.map +1 -0
- package/dist/runner/runtime/mcp-http-bridge.js +205 -0
- package/dist/runner/runtime/mcp-http-bridge.js.map +1 -0
- package/dist/runner/runtime/sdk-runtime.d.ts.map +1 -1
- package/dist/runner/runtime/sdk-runtime.js +74 -1
- package/dist/runner/runtime/sdk-runtime.js.map +1 -1
- package/dist/runner/types.d.ts +44 -0
- package/dist/runner/types.d.ts.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/index.d.ts +1 -1
- package/dist/state/index.d.ts.map +1 -1
- package/dist/state/index.js +1 -1
- package/dist/state/index.js.map +1 -1
- package/dist/state/schemas/job-output.d.ts +2 -2
- package/dist/state/session-validation.d.ts +8 -0
- package/dist/state/session-validation.d.ts.map +1 -1
- package/dist/state/session-validation.js +36 -0
- package/dist/state/session-validation.js.map +1 -1
- 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 -9
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from "vitest";
|
|
2
|
+
import { startMcpHttpBridge } from "../mcp-http-bridge.js";
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Helpers
|
|
5
|
+
// =============================================================================
|
|
6
|
+
function createTestDef(handler = async (args) => ({
|
|
7
|
+
content: [{ type: "text", text: `Received: ${JSON.stringify(args)}` }],
|
|
8
|
+
})) {
|
|
9
|
+
return {
|
|
10
|
+
name: "test-server",
|
|
11
|
+
version: "1.0.0",
|
|
12
|
+
tools: [
|
|
13
|
+
{
|
|
14
|
+
name: "test_tool",
|
|
15
|
+
description: "A test tool",
|
|
16
|
+
inputSchema: {
|
|
17
|
+
type: "object",
|
|
18
|
+
properties: {
|
|
19
|
+
message: { type: "string", description: "A message" },
|
|
20
|
+
count: { type: "number", description: "A count" },
|
|
21
|
+
},
|
|
22
|
+
required: ["message"],
|
|
23
|
+
},
|
|
24
|
+
handler,
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
|
+
async function jsonRpcPost(port, method, params, id = 1) {
|
|
31
|
+
const body = JSON.stringify({
|
|
32
|
+
jsonrpc: "2.0",
|
|
33
|
+
id,
|
|
34
|
+
method,
|
|
35
|
+
params,
|
|
36
|
+
});
|
|
37
|
+
const res = await fetch(`http://127.0.0.1:${port}/mcp`, {
|
|
38
|
+
method: "POST",
|
|
39
|
+
headers: { "Content-Type": "application/json" },
|
|
40
|
+
body,
|
|
41
|
+
});
|
|
42
|
+
if (res.status === 204)
|
|
43
|
+
return null; // notification
|
|
44
|
+
return res.json();
|
|
45
|
+
}
|
|
46
|
+
// =============================================================================
|
|
47
|
+
// Tests
|
|
48
|
+
// =============================================================================
|
|
49
|
+
describe("MCP HTTP Bridge", () => {
|
|
50
|
+
let bridge = null;
|
|
51
|
+
afterEach(async () => {
|
|
52
|
+
if (bridge) {
|
|
53
|
+
await bridge.close();
|
|
54
|
+
bridge = null;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
it("starts and listens on a random port", async () => {
|
|
58
|
+
const def = createTestDef();
|
|
59
|
+
bridge = await startMcpHttpBridge(def);
|
|
60
|
+
expect(bridge.port).toBeGreaterThan(0);
|
|
61
|
+
expect(bridge.server.listening).toBe(true);
|
|
62
|
+
});
|
|
63
|
+
it("handles initialize request", async () => {
|
|
64
|
+
const def = createTestDef();
|
|
65
|
+
bridge = await startMcpHttpBridge(def);
|
|
66
|
+
const response = await jsonRpcPost(bridge.port, "initialize", {
|
|
67
|
+
protocolVersion: "2024-11-05",
|
|
68
|
+
capabilities: {},
|
|
69
|
+
clientInfo: { name: "test", version: "1.0" },
|
|
70
|
+
});
|
|
71
|
+
expect(response.result.protocolVersion).toBe("2024-11-05");
|
|
72
|
+
expect(response.result.serverInfo.name).toBe("test-server");
|
|
73
|
+
expect(response.result.capabilities.tools).toBeDefined();
|
|
74
|
+
});
|
|
75
|
+
it("handles notifications/initialized with 204", async () => {
|
|
76
|
+
const def = createTestDef();
|
|
77
|
+
bridge = await startMcpHttpBridge(def);
|
|
78
|
+
const res = await fetch(`http://127.0.0.1:${bridge.port}/mcp`, {
|
|
79
|
+
method: "POST",
|
|
80
|
+
headers: { "Content-Type": "application/json" },
|
|
81
|
+
body: JSON.stringify({ jsonrpc: "2.0", method: "notifications/initialized" }),
|
|
82
|
+
});
|
|
83
|
+
expect(res.status).toBe(204);
|
|
84
|
+
});
|
|
85
|
+
it("handles tools/list", async () => {
|
|
86
|
+
const def = createTestDef();
|
|
87
|
+
bridge = await startMcpHttpBridge(def);
|
|
88
|
+
const response = await jsonRpcPost(bridge.port, "tools/list");
|
|
89
|
+
expect(response.result.tools).toHaveLength(1);
|
|
90
|
+
expect(response.result.tools[0].name).toBe("test_tool");
|
|
91
|
+
expect(response.result.tools[0].description).toBe("A test tool");
|
|
92
|
+
expect(response.result.tools[0].inputSchema.properties.message.type).toBe("string");
|
|
93
|
+
});
|
|
94
|
+
it("handles tools/call successfully", async () => {
|
|
95
|
+
const def = createTestDef();
|
|
96
|
+
bridge = await startMcpHttpBridge(def);
|
|
97
|
+
const response = await jsonRpcPost(bridge.port, "tools/call", {
|
|
98
|
+
name: "test_tool",
|
|
99
|
+
arguments: { message: "hello" },
|
|
100
|
+
});
|
|
101
|
+
expect(response.result.content[0].text).toContain("hello");
|
|
102
|
+
expect(response.result.isError).toBeUndefined();
|
|
103
|
+
});
|
|
104
|
+
it("returns error for unknown tool", async () => {
|
|
105
|
+
const def = createTestDef();
|
|
106
|
+
bridge = await startMcpHttpBridge(def);
|
|
107
|
+
const response = await jsonRpcPost(bridge.port, "tools/call", {
|
|
108
|
+
name: "nonexistent_tool",
|
|
109
|
+
arguments: {},
|
|
110
|
+
});
|
|
111
|
+
expect(response.error).toBeDefined();
|
|
112
|
+
expect(response.error.message).toContain("Unknown tool");
|
|
113
|
+
});
|
|
114
|
+
it("handles ping", async () => {
|
|
115
|
+
const def = createTestDef();
|
|
116
|
+
bridge = await startMcpHttpBridge(def);
|
|
117
|
+
const response = await jsonRpcPost(bridge.port, "ping");
|
|
118
|
+
expect(response.result).toEqual({});
|
|
119
|
+
});
|
|
120
|
+
it("returns method not found for unknown methods", async () => {
|
|
121
|
+
const def = createTestDef();
|
|
122
|
+
bridge = await startMcpHttpBridge(def);
|
|
123
|
+
const response = await jsonRpcPost(bridge.port, "nonexistent/method");
|
|
124
|
+
expect(response.error.code).toBe(-32601);
|
|
125
|
+
});
|
|
126
|
+
it("returns 404 for non-MCP paths", async () => {
|
|
127
|
+
const def = createTestDef();
|
|
128
|
+
bridge = await startMcpHttpBridge(def);
|
|
129
|
+
const res = await fetch(`http://127.0.0.1:${bridge.port}/not-mcp`, {
|
|
130
|
+
method: "POST",
|
|
131
|
+
});
|
|
132
|
+
expect(res.status).toBe(404);
|
|
133
|
+
});
|
|
134
|
+
it("translates Docker /workspace/ paths in file_path", async () => {
|
|
135
|
+
let receivedArgs = {};
|
|
136
|
+
const def = createTestDef(async (args) => {
|
|
137
|
+
receivedArgs = args;
|
|
138
|
+
return { content: [{ type: "text", text: "ok" }] };
|
|
139
|
+
});
|
|
140
|
+
// Add a tool with file_path param
|
|
141
|
+
def.tools[0].name = "send_file";
|
|
142
|
+
bridge = await startMcpHttpBridge(def);
|
|
143
|
+
await jsonRpcPost(bridge.port, "tools/call", {
|
|
144
|
+
name: "send_file",
|
|
145
|
+
arguments: { file_path: "/workspace/report.pdf", message: "test" },
|
|
146
|
+
});
|
|
147
|
+
expect(receivedArgs.file_path).toBe("report.pdf");
|
|
148
|
+
expect(receivedArgs.message).toBe("test");
|
|
149
|
+
});
|
|
150
|
+
it("handles tool call errors gracefully", async () => {
|
|
151
|
+
const def = createTestDef(async () => {
|
|
152
|
+
throw new Error("Upload failed");
|
|
153
|
+
});
|
|
154
|
+
bridge = await startMcpHttpBridge(def);
|
|
155
|
+
const response = await jsonRpcPost(bridge.port, "tools/call", {
|
|
156
|
+
name: "test_tool",
|
|
157
|
+
arguments: { message: "test" },
|
|
158
|
+
});
|
|
159
|
+
expect(response.error).toBeDefined();
|
|
160
|
+
expect(response.error.message).toContain("Upload failed");
|
|
161
|
+
});
|
|
162
|
+
it("handles malformed JSON", async () => {
|
|
163
|
+
const def = createTestDef();
|
|
164
|
+
bridge = await startMcpHttpBridge(def);
|
|
165
|
+
const res = await fetch(`http://127.0.0.1:${bridge.port}/mcp`, {
|
|
166
|
+
method: "POST",
|
|
167
|
+
headers: { "Content-Type": "application/json" },
|
|
168
|
+
body: "not json",
|
|
169
|
+
});
|
|
170
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
171
|
+
const json = await res.json();
|
|
172
|
+
expect(json.error.code).toBe(-32700);
|
|
173
|
+
});
|
|
174
|
+
it("closes cleanly", async () => {
|
|
175
|
+
const def = createTestDef();
|
|
176
|
+
bridge = await startMcpHttpBridge(def);
|
|
177
|
+
const port = bridge.port;
|
|
178
|
+
await bridge.close();
|
|
179
|
+
bridge = null;
|
|
180
|
+
// Server should no longer accept connections
|
|
181
|
+
try {
|
|
182
|
+
await fetch(`http://127.0.0.1:${port}/mcp`, { method: "POST" });
|
|
183
|
+
// If we get here, the connection was unexpectedly accepted
|
|
184
|
+
expect.unreachable("Server should be closed");
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
// Expected - connection refused
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
//# sourceMappingURL=mcp-http-bridge.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-http-bridge.test.js","sourceRoot":"","sources":["../../../../src/runner/runtime/__tests__/mcp-http-bridge.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-runtime.d.ts","sourceRoot":"","sources":["../../../src/runner/runtime/cli-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-runtime.d.ts","sourceRoot":"","sources":["../../../src/runner/runtime/cli-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAY9C;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,KACjB,UAAU,CAAC;AAEhB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,UAAW,YAAW,gBAAgB;IACjD,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,kBAAkB,CAAC,CAAS;gBAExB,OAAO,CAAC,EAAE,iBAAiB;IAYvC;;;;;;;;;;;;;;;;;;OAkBG;IACI,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAAC,UAAU,CAAC;CAyR1E"}
|
|
@@ -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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"}
|
|
@@ -68,9 +68,13 @@ export declare function buildContainerMounts(agent: ResolvedAgent, dockerConfig:
|
|
|
68
68
|
/**
|
|
69
69
|
* Build environment variables for container
|
|
70
70
|
*
|
|
71
|
+
* Reads OAuth tokens from the mounted credentials file and refreshes
|
|
72
|
+
* them if expired. This ensures agents always get valid tokens without
|
|
73
|
+
* requiring manual herdctl restarts.
|
|
74
|
+
*
|
|
71
75
|
* @param agent - Resolved agent configuration
|
|
72
76
|
* @param config - Docker configuration (for custom env vars)
|
|
73
77
|
* @returns Array of "KEY=value" strings
|
|
74
78
|
*/
|
|
75
|
-
export declare function buildContainerEnv(agent: ResolvedAgent, config?: DockerConfig): string[]
|
|
79
|
+
export declare function buildContainerEnv(agent: ResolvedAgent, config?: DockerConfig): Promise<string[]>;
|
|
76
80
|
//# sourceMappingURL=container-manager.d.ts.map
|
|
@@ -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;
|
|
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"}
|