glm-acp-agent 1.6.0 → 1.6.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/README.md CHANGED
@@ -32,7 +32,7 @@ Built-in web tools use Coding Plan-compatible MCP endpoints, not the general `/a
32
32
  - **Per-session model switching** – `session/set_model` lets clients change the active GLM model mid-conversation; `session/new` returns the curated `availableModels` list
33
33
  - **Image input via Coding Plan-native vision or Vision MCP** – `promptCapabilities.image` is advertised; the advertised coding models route pasted ACP image blocks through Z.AI Vision MCP (`@z_ai/mcp-server`), while `glm-5v-turbo` sessions — opt-in via `ACP_GLM_AVAILABLE_MODELS`, since it is no longer on the Coding Plan allowlist — send supported image parts directly to the model. Direct chat-image-only models (e.g. `glm-4v-plus`) are intentionally not used.
34
34
  - **Session persistence** – conversations are written to `~/.local/state/glm-acp-agent/sessions/` and can be reloaded via `session/load`, branched via `session/fork`, or resumed without replay via `session/resume`
35
- - **Six built-in tools** (see below)
35
+ - **Seven built-in tools** (see below)
36
36
  - **Self-sufficient local tools** – file reads/writes, directory listings, and shell commands run in the agent process, so they do not depend on ACP client `fs` or `terminal` capabilities
37
37
  - **Configurable permissions** – `write_file` and `run_command` behavior depends on the active session mode (prompts by default)
38
38
  - **Protocol-correct stop reasons** – maps model and runtime conditions to ACP `end_turn`, `max_tokens`, `max_turn_requests`, `refusal`, and `cancelled`
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session-mcp-client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-mcp-client.test.d.ts","sourceRoot":"","sources":["../../src/tests/session-mcp-client.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,349 @@
1
+ import test from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { EventEmitter } from "node:events";
4
+ import { Readable, Writable } from "node:stream";
5
+ import { StdioMcpClient } from "../tools/session-mcp-client.js";
6
+ function makeFakeChild() {
7
+ const written = [];
8
+ let killCount = 0;
9
+ const stdin = new Writable({
10
+ write(chunk, _enc, cb) {
11
+ written.push(chunk.toString("utf8"));
12
+ cb();
13
+ },
14
+ });
15
+ const stdout = new Readable({ read() { } });
16
+ const stderr = new Readable({ read() { } });
17
+ const child = Object.assign(new EventEmitter(), {
18
+ stdin,
19
+ stdout,
20
+ stderr,
21
+ pid: 5150,
22
+ exitCode: null,
23
+ kill: () => {
24
+ killCount += 1;
25
+ return true;
26
+ },
27
+ });
28
+ return {
29
+ child,
30
+ written,
31
+ pushStdout: (line) => stdout.push(line),
32
+ pushStderr: (line) => stderr.push(line),
33
+ getKillCount: () => killCount,
34
+ };
35
+ }
36
+ function stdioServer(overrides = {}) {
37
+ return {
38
+ name: "docs",
39
+ command: "npx",
40
+ args: ["-y", "@example/mcp-docs"],
41
+ env: [],
42
+ ...overrides,
43
+ };
44
+ }
45
+ const tick = () => new Promise((r) => setImmediate(r));
46
+ /** Drive a fake child through initialize + tools/list so the client is ready for tools/call. */
47
+ async function completeHandshake(written, pushStdout, tools = [{ name: "search" }]) {
48
+ await tick();
49
+ const init = JSON.parse(written[0]?.trim() ?? "{}");
50
+ pushStdout(JSON.stringify({ jsonrpc: "2.0", id: init.id, result: { protocolVersion: "2025-06-18" } }) + "\n");
51
+ await tick();
52
+ const list = JSON.parse(written[2]?.trim() ?? "{}");
53
+ pushStdout(JSON.stringify({ jsonrpc: "2.0", id: list.id, result: { tools } }) + "\n");
54
+ await tick();
55
+ }
56
+ test("StdioMcpClient rejects an asynchronous spawn error instead of hanging", async () => {
57
+ const { child } = makeFakeChild();
58
+ const client = new StdioMcpClient(stdioServer(), { spawn: () => child });
59
+ const listPromise = client.listTools();
60
+ await tick();
61
+ child.emit("error", Object.assign(new Error("spawn npx ENOENT"), { code: "ENOENT" }));
62
+ await assert.rejects(listPromise, /could not launch `npx`/i);
63
+ await client.dispose();
64
+ });
65
+ test("StdioMcpClient rejects a pending tools/call when the child errors asynchronously", async () => {
66
+ const { child, written, pushStdout } = makeFakeChild();
67
+ const client = new StdioMcpClient(stdioServer(), { spawn: () => child });
68
+ const listPromise = client.listTools();
69
+ await completeHandshake(written, pushStdout);
70
+ await listPromise;
71
+ const callPromise = client.callTool("search", { q: "x" });
72
+ await tick();
73
+ child.emit("error", Object.assign(new Error("spawn npx EINVAL"), { code: "EINVAL" }));
74
+ await assert.rejects(callPromise, /EINVAL/);
75
+ await client.dispose();
76
+ });
77
+ test("StdioMcpClient times out initialization and terminates the child", async () => {
78
+ const { child, getKillCount } = makeFakeChild();
79
+ const client = new StdioMcpClient(stdioServer(), {
80
+ spawn: () => child,
81
+ initializationTimeoutMs: 50,
82
+ });
83
+ await assert.rejects(() => client.listTools(), /timed out after \d+ms/i);
84
+ assert.equal(getKillCount(), 1);
85
+ await client.dispose();
86
+ });
87
+ test("StdioMcpClient times out an individual tools/call and terminates the child", async () => {
88
+ const { child, written, pushStdout, getKillCount } = makeFakeChild();
89
+ const client = new StdioMcpClient(stdioServer(), {
90
+ spawn: () => child,
91
+ requestTimeoutMs: 50,
92
+ });
93
+ const listPromise = client.listTools();
94
+ await completeHandshake(written, pushStdout);
95
+ await listPromise;
96
+ await assert.rejects(() => client.callTool("search", { q: "x" }), /timed out after \d+ms/i);
97
+ assert.equal(getKillCount(), 1);
98
+ await client.dispose();
99
+ });
100
+ test("StdioMcpClient launches npx through cmd.exe on Windows", async () => {
101
+ const { child } = makeFakeChild();
102
+ let command = "";
103
+ let args = [];
104
+ let windowsHide = false;
105
+ const client = new StdioMcpClient(stdioServer(), {
106
+ platform: "win32",
107
+ comSpec: "C:\\Windows\\System32\\cmd.exe",
108
+ killProcessTree: () => true,
109
+ spawn: (capturedCommand, capturedArgs, options) => {
110
+ command = capturedCommand;
111
+ args = capturedArgs;
112
+ windowsHide = options.windowsHide === true;
113
+ return child;
114
+ },
115
+ });
116
+ const listPromise = client.listTools();
117
+ await tick();
118
+ child.emit("error", new Error("test stop"));
119
+ await assert.rejects(listPromise, /test stop/i);
120
+ assert.equal(command, "C:\\Windows\\System32\\cmd.exe");
121
+ assert.deepEqual(args, ["/d", "/s", "/c", "npx", "-y", "@example/mcp-docs"]);
122
+ assert.equal(windowsHide, true);
123
+ await client.dispose();
124
+ });
125
+ test("StdioMcpClient launches a .cmd shim through cmd.exe on Windows", async () => {
126
+ const { child } = makeFakeChild();
127
+ let args = [];
128
+ const client = new StdioMcpClient(stdioServer({ command: "C:\\tools\\mcp-docs.cmd", args: ["--stdio"] }), {
129
+ platform: "win32",
130
+ comSpec: "cmd.exe",
131
+ killProcessTree: () => true,
132
+ spawn: (_command, capturedArgs) => {
133
+ args = capturedArgs;
134
+ return child;
135
+ },
136
+ });
137
+ const listPromise = client.listTools();
138
+ await tick();
139
+ child.emit("error", new Error("test stop"));
140
+ await assert.rejects(listPromise, /test stop/i);
141
+ assert.deepEqual(args, ["/d", "/s", "/c", "C:\\tools\\mcp-docs.cmd", "--stdio"]);
142
+ await client.dispose();
143
+ });
144
+ test("StdioMcpClient spawns a real executable directly on Windows", async () => {
145
+ const { child } = makeFakeChild();
146
+ let command = "";
147
+ let args = [];
148
+ const client = new StdioMcpClient(stdioServer({ command: "node", args: ["server.js"] }), {
149
+ platform: "win32",
150
+ comSpec: "cmd.exe",
151
+ killProcessTree: () => true,
152
+ spawn: (capturedCommand, capturedArgs) => {
153
+ command = capturedCommand;
154
+ args = capturedArgs;
155
+ return child;
156
+ },
157
+ });
158
+ const listPromise = client.listTools();
159
+ await tick();
160
+ child.emit("error", new Error("test stop"));
161
+ await assert.rejects(listPromise, /test stop/i);
162
+ assert.equal(command, "node");
163
+ assert.deepEqual(args, ["server.js"]);
164
+ await client.dispose();
165
+ });
166
+ test("StdioMcpClient rejects cmd.exe metacharacters in client-supplied args before spawning", async () => {
167
+ let spawned = false;
168
+ const client = new StdioMcpClient(stdioServer({ args: ["-y", "@example/mcp-docs & calc.exe"] }), {
169
+ platform: "win32",
170
+ comSpec: "cmd.exe",
171
+ spawn: () => {
172
+ spawned = true;
173
+ return makeFakeChild().child;
174
+ },
175
+ });
176
+ await assert.rejects(() => client.listTools(), /unsafe .*cmd\.exe/i);
177
+ assert.equal(spawned, false);
178
+ });
179
+ test("StdioMcpClient rejects cmd.exe metacharacters in the command before spawning", async () => {
180
+ let spawned = false;
181
+ const client = new StdioMcpClient(stdioServer({ command: "C:\\tools & calc.exe\\mcp-docs.cmd", args: [] }), {
182
+ platform: "win32",
183
+ comSpec: "cmd.exe",
184
+ spawn: () => {
185
+ spawned = true;
186
+ return makeFakeChild().child;
187
+ },
188
+ });
189
+ await assert.rejects(() => client.listTools(), /unsafe .*cmd\.exe/i);
190
+ assert.equal(spawned, false);
191
+ });
192
+ test("StdioMcpClient allows cmd.exe metacharacters on POSIX where no shell is involved", async () => {
193
+ const { child } = makeFakeChild();
194
+ let command = "";
195
+ let args = [];
196
+ const client = new StdioMcpClient(stdioServer({ command: "npx", args: ["-y", "@example/weird&name"] }), {
197
+ platform: "linux",
198
+ spawn: (capturedCommand, capturedArgs) => {
199
+ command = capturedCommand;
200
+ args = capturedArgs;
201
+ return child;
202
+ },
203
+ });
204
+ const listPromise = client.listTools();
205
+ await tick();
206
+ child.emit("error", new Error("test stop"));
207
+ await assert.rejects(listPromise, /test stop/i);
208
+ assert.equal(command, "npx");
209
+ assert.deepEqual(args, ["-y", "@example/weird&name"]);
210
+ await client.dispose();
211
+ });
212
+ test("StdioMcpClient drains stderr and redacts secret env values on failure", async () => {
213
+ const secret = "sk-super-secret-token";
214
+ const { child, pushStderr } = makeFakeChild();
215
+ const client = new StdioMcpClient(stdioServer({
216
+ env: [
217
+ { name: "DOCS_API_KEY", value: secret },
218
+ { name: "DOCS_LOCALE", value: "en-US" },
219
+ ],
220
+ }), { spawn: () => child });
221
+ const listPromise = client.listTools();
222
+ await tick();
223
+ pushStderr(`auth failed for key ${secret} (locale en-US)\n`);
224
+ child.emit("exit", 1, null);
225
+ await assert.rejects(listPromise, (error) => {
226
+ assert.match(error.message, /stderr: auth failed for key/);
227
+ assert.match(error.message, /\[REDACTED\]/);
228
+ assert.doesNotMatch(error.message, new RegExp(secret));
229
+ assert.match(error.message, /locale en-US/);
230
+ return true;
231
+ });
232
+ await client.dispose();
233
+ });
234
+ test("StdioMcpClient redacts inherited environment secrets from stderr", async () => {
235
+ const inherited = "inherited-parent-credential";
236
+ const suffixed = "suffixed-db-password";
237
+ process.env["GLM_TEST_UPSTREAM_TOKEN"] = inherited;
238
+ process.env["GLM_TEST_DB_PWD"] = suffixed;
239
+ try {
240
+ const { child, pushStderr } = makeFakeChild();
241
+ const client = new StdioMcpClient(stdioServer(), { spawn: () => child });
242
+ const listPromise = client.listTools();
243
+ await tick();
244
+ // The child inherits process.env, so a parent-held credential can reach its stderr.
245
+ pushStderr(`upstream rejected ${inherited} / ${suffixed} in ${process.cwd()}\n`);
246
+ child.emit("exit", 1, null);
247
+ await assert.rejects(listPromise, (error) => {
248
+ assert.match(error.message, /\[REDACTED\]/);
249
+ assert.doesNotMatch(error.message, new RegExp(inherited));
250
+ // A `_PWD`-suffixed name is a credential (MYSQL_PWD and friends), not a path.
251
+ assert.doesNotMatch(error.message, new RegExp(suffixed));
252
+ // Bare PWD/OLDPWD are exempt, or every diagnostic loses its cwd.
253
+ assert.match(error.message, new RegExp(process.cwd().replace(/[.*+?^${}()|[\]\\]/g, "\\$&")));
254
+ return true;
255
+ });
256
+ await client.dispose();
257
+ }
258
+ finally {
259
+ delete process.env["GLM_TEST_UPSTREAM_TOKEN"];
260
+ delete process.env["GLM_TEST_DB_PWD"];
261
+ }
262
+ });
263
+ test("StdioMcpClient terminates the Windows process tree on dispose", async () => {
264
+ const { child, getKillCount } = makeFakeChild();
265
+ let terminatedPid;
266
+ const client = new StdioMcpClient(stdioServer(), {
267
+ platform: "win32",
268
+ comSpec: "cmd.exe",
269
+ spawn: () => child,
270
+ killProcessTree: (pid) => {
271
+ terminatedPid = pid;
272
+ return true;
273
+ },
274
+ });
275
+ const listPromise = client.listTools();
276
+ await tick();
277
+ await client.dispose();
278
+ await assert.rejects(listPromise, /disposed/i);
279
+ assert.equal(terminatedPid, 5150);
280
+ assert.equal(getKillCount(), 0);
281
+ });
282
+ test("StdioMcpClient keeps a shared initialization alive when one caller aborts", async () => {
283
+ const { child, written, pushStdout, getKillCount } = makeFakeChild();
284
+ const controller = new AbortController();
285
+ const client = new StdioMcpClient(stdioServer(), { spawn: () => child });
286
+ const cancelledCall = client.callTool("search", { q: "cancelled" }, controller.signal);
287
+ const survivingCall = client.callTool("search", { q: "surviving" });
288
+ await tick();
289
+ controller.abort();
290
+ await assert.rejects(cancelledCall, /cancelled/i);
291
+ assert.equal(getKillCount(), 0);
292
+ // Only the handshake is shared; each caller issues its own tools/call afterwards.
293
+ const init = JSON.parse(written[0]?.trim() ?? "{}");
294
+ pushStdout(JSON.stringify({ jsonrpc: "2.0", id: init.id, result: { protocolVersion: "2025-06-18" } }) + "\n");
295
+ await tick();
296
+ const callBody = JSON.parse(written.at(-1)?.trim() ?? "{}");
297
+ assert.equal(callBody.params.arguments.q, "surviving");
298
+ pushStdout(JSON.stringify({ jsonrpc: "2.0", id: callBody.id, result: { content: [] } }) + "\n");
299
+ await assert.doesNotReject(survivingCall);
300
+ await client.dispose();
301
+ });
302
+ test("StdioMcpClient does not kill an initialized server when a caller aborts", async () => {
303
+ const { child, written, pushStdout, getKillCount } = makeFakeChild();
304
+ const client = new StdioMcpClient(stdioServer(), { spawn: () => child });
305
+ const listPromise = client.listTools();
306
+ await completeHandshake(written, pushStdout);
307
+ await listPromise;
308
+ const controller = new AbortController();
309
+ const cancelledCall = client.callTool("search", { q: "cancelled" }, controller.signal);
310
+ controller.abort();
311
+ await assert.rejects(cancelledCall, /cancelled|aborted/i);
312
+ assert.equal(getKillCount(), 0);
313
+ // The server is still usable for the next caller.
314
+ const survivingCall = client.callTool("search", { q: "surviving" });
315
+ await tick();
316
+ const callBody = JSON.parse(written.at(-1)?.trim() ?? "{}");
317
+ assert.equal(callBody.params.arguments.q, "surviving");
318
+ pushStdout(JSON.stringify({ jsonrpc: "2.0", id: callBody.id, result: { content: [] } }) + "\n");
319
+ await assert.doesNotReject(survivingCall);
320
+ await client.dispose();
321
+ });
322
+ test("StdioMcpClient keeps a shared initialization alive for a concurrent listTools", async () => {
323
+ const { child, written, pushStdout, getKillCount } = makeFakeChild();
324
+ const controller = new AbortController();
325
+ const client = new StdioMcpClient(stdioServer(), { spawn: () => child });
326
+ const cancelledCall = client.callTool("search", { q: "cancelled" }, controller.signal);
327
+ const listPromise = client.listTools();
328
+ await tick();
329
+ controller.abort();
330
+ await assert.rejects(cancelledCall, /cancelled/i);
331
+ assert.equal(getKillCount(), 0);
332
+ await completeHandshake(written, pushStdout);
333
+ assert.deepEqual(await listPromise, [{ name: "search", description: undefined, inputSchema: undefined }]);
334
+ await client.dispose();
335
+ });
336
+ test("StdioMcpClient does not resurrect a disposed server", async () => {
337
+ const { child } = makeFakeChild();
338
+ let spawnCount = 0;
339
+ const client = new StdioMcpClient(stdioServer(), {
340
+ spawn: () => {
341
+ spawnCount += 1;
342
+ return child;
343
+ },
344
+ });
345
+ await client.dispose();
346
+ await assert.rejects(() => client.callTool("search", {}), /disposed/i);
347
+ assert.equal(spawnCount, 0);
348
+ });
349
+ //# sourceMappingURL=session-mcp-client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-mcp-client.test.js","sourceRoot":"","sources":["../../src/tests/session-mcp-client.test.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { Readable, Writable } from "node:stream";
5
5
  import { StdioVisionMcpClient } from "../tools/vision-mcp-client.js";
6
6
  function makeFakeChild() {
7
7
  const written = [];
8
+ let killCount = 0;
8
9
  const stdin = new Writable({
9
10
  write(chunk, _enc, cb) {
10
11
  written.push(chunk.toString("utf8"));
@@ -18,10 +19,15 @@ function makeFakeChild() {
18
19
  stdout,
19
20
  stderr,
20
21
  pid: 4242,
21
- kill: () => true,
22
+ exitCode: null,
23
+ kill: () => {
24
+ killCount += 1;
25
+ return true;
26
+ },
22
27
  });
23
28
  const pushStdout = (line) => stdout.push(line);
24
- return { child, written, pushStdout };
29
+ const pushStderr = (line) => stderr.push(line);
30
+ return { child, written, pushStdout, pushStderr, getKillCount: () => killCount };
25
31
  }
26
32
  test("StdioVisionMcpClient initializes once and forwards tools/call", async () => {
27
33
  const { child, written, pushStdout } = makeFakeChild();
@@ -80,6 +86,157 @@ test("StdioVisionMcpClient explains a missing npx as an actionable error", async
80
86
  });
81
87
  await assert.rejects(() => client.callTool("image_analysis", { image_source: "x" }), /npx.*not found/i);
82
88
  });
89
+ test("StdioVisionMcpClient rejects an asynchronous spawn error instead of hanging", async () => {
90
+ const { child } = makeFakeChild();
91
+ const client = new StdioVisionMcpClient({ apiKey: "k", spawn: () => child });
92
+ const callPromise = client.callTool("image_analysis", { image_source: "x" });
93
+ await new Promise((r) => setImmediate(r));
94
+ child.emit("error", Object.assign(new Error("spawn npx ENOENT"), { code: "ENOENT" }));
95
+ await assert.rejects(callPromise, /could not launch npx/i);
96
+ await client.dispose();
97
+ });
98
+ test("StdioVisionMcpClient times out initialization and terminates the child", async () => {
99
+ const { child, getKillCount } = makeFakeChild();
100
+ const client = new StdioVisionMcpClient({
101
+ apiKey: "k",
102
+ spawn: () => child,
103
+ initializationTimeoutMs: 50,
104
+ });
105
+ await assert.rejects(() => client.callTool("image_analysis", { image_source: "x" }), /timed out after \d+ms/i);
106
+ assert.equal(getKillCount(), 1);
107
+ await client.dispose();
108
+ });
109
+ test("StdioVisionMcpClient aborts initialization and terminates the child", async () => {
110
+ const { child, getKillCount } = makeFakeChild();
111
+ const controller = new AbortController();
112
+ const client = new StdioVisionMcpClient({ apiKey: "k", spawn: () => child });
113
+ const callPromise = client.callTool("image_analysis", { image_source: "x" }, controller.signal);
114
+ await new Promise((r) => setImmediate(r));
115
+ controller.abort();
116
+ await assert.rejects(callPromise, /Vision MCP call cancelled/i);
117
+ assert.equal(getKillCount(), 1);
118
+ await client.dispose();
119
+ });
120
+ test("StdioVisionMcpClient keeps shared initialization alive for another caller", async () => {
121
+ const { child, written, pushStdout, getKillCount } = makeFakeChild();
122
+ const controller = new AbortController();
123
+ const client = new StdioVisionMcpClient({ apiKey: "k", spawn: () => child });
124
+ const cancelledCall = client.callTool("image_analysis", { image_source: "cancelled" }, controller.signal);
125
+ const survivingCall = client.callTool("image_analysis", { image_source: "surviving" });
126
+ await new Promise((r) => setImmediate(r));
127
+ controller.abort();
128
+ await assert.rejects(cancelledCall, /Vision MCP call cancelled/i);
129
+ assert.equal(getKillCount(), 0);
130
+ const initBody = JSON.parse(written[0]?.trim() ?? "{}");
131
+ pushStdout(JSON.stringify({ jsonrpc: "2.0", id: initBody.id, result: { protocolVersion: "2025-06-18" } }) + "\n");
132
+ await new Promise((r) => setImmediate(r));
133
+ const toolsListBody = JSON.parse(written[2]?.trim() ?? "{}");
134
+ pushStdout(JSON.stringify({ jsonrpc: "2.0", id: toolsListBody.id, result: { tools: [{ name: "image_analysis" }] } }) + "\n");
135
+ await new Promise((r) => setImmediate(r));
136
+ const callBody = JSON.parse(written[3]?.trim() ?? "{}");
137
+ assert.equal(callBody.params.arguments.image_source, "surviving");
138
+ pushStdout(JSON.stringify({ jsonrpc: "2.0", id: callBody.id, result: { content: [{ type: "text", text: "ok" }] } }) + "\n");
139
+ await assert.doesNotReject(survivingCall);
140
+ await client.dispose();
141
+ });
142
+ test("StdioVisionMcpClient does not kill an initialized server when a caller aborts", async () => {
143
+ const { child, written, pushStdout, getKillCount } = makeFakeChild();
144
+ const client = new StdioVisionMcpClient({ apiKey: "k", spawn: () => child });
145
+ const firstCall = client.callTool("image_analysis", { image_source: "first" });
146
+ await new Promise((r) => setImmediate(r));
147
+ pushStdout(JSON.stringify({ jsonrpc: "2.0", id: 1, result: { protocolVersion: "2025-06-18" } }) + "\n");
148
+ await new Promise((r) => setImmediate(r));
149
+ pushStdout(JSON.stringify({ jsonrpc: "2.0", id: 2, result: { tools: [{ name: "image_analysis" }] } }) + "\n");
150
+ await new Promise((r) => setImmediate(r));
151
+ pushStdout(JSON.stringify({ jsonrpc: "2.0", id: 3, result: { content: [{ type: "text", text: "first ok" }] } }) + "\n");
152
+ await assert.doesNotReject(firstCall);
153
+ const controller = new AbortController();
154
+ const cancelledCall = client.callTool("image_analysis", { image_source: "cancelled" }, controller.signal);
155
+ controller.abort();
156
+ await assert.rejects(cancelledCall, /Vision MCP call cancelled|aborted/i);
157
+ assert.equal(getKillCount(), 0);
158
+ const survivingCall = client.callTool("image_analysis", { image_source: "surviving" });
159
+ await new Promise((r) => setImmediate(r));
160
+ const callBody = JSON.parse(written.at(-1)?.trim() ?? "{}");
161
+ assert.equal(callBody.params.arguments.image_source, "surviving");
162
+ pushStdout(JSON.stringify({ jsonrpc: "2.0", id: callBody.id, result: { content: [{ type: "text", text: "still ok" }] } }) + "\n");
163
+ await assert.doesNotReject(survivingCall);
164
+ await client.dispose();
165
+ });
166
+ test("StdioVisionMcpClient launches npx through cmd.exe on Windows", async () => {
167
+ const { child } = makeFakeChild();
168
+ let command = "";
169
+ let args = [];
170
+ let windowsHide = false;
171
+ const client = new StdioVisionMcpClient({
172
+ apiKey: "k",
173
+ platform: "win32",
174
+ comSpec: "C:\\Windows\\System32\\cmd.exe",
175
+ spawn: (capturedCommand, capturedArgs, options) => {
176
+ command = capturedCommand;
177
+ args = capturedArgs;
178
+ windowsHide = options.windowsHide === true;
179
+ return child;
180
+ },
181
+ });
182
+ const callPromise = client.callTool("image_analysis", { image_source: "x" });
183
+ await new Promise((r) => setImmediate(r));
184
+ child.emit("error", new Error("test stop"));
185
+ await assert.rejects(callPromise, /test stop/i);
186
+ assert.equal(command, "C:\\Windows\\System32\\cmd.exe");
187
+ assert.deepEqual(args.slice(0, 5), ["/d", "/s", "/c", "npx", "-y"]);
188
+ assert.equal(windowsHide, true);
189
+ await client.dispose();
190
+ });
191
+ test("StdioVisionMcpClient rejects unsafe Windows package specs before spawning", async () => {
192
+ let spawned = false;
193
+ const client = new StdioVisionMcpClient({
194
+ apiKey: "k",
195
+ platform: "win32",
196
+ packageSpec: "@z_ai/mcp-server@latest & echo injected",
197
+ spawn: () => {
198
+ spawned = true;
199
+ return makeFakeChild().child;
200
+ },
201
+ });
202
+ await assert.rejects(() => client.callTool("image_analysis", { image_source: "x" }), /unsafe npm package spec/i);
203
+ assert.equal(spawned, false);
204
+ });
205
+ test("StdioVisionMcpClient terminates the Windows process tree on dispose", async () => {
206
+ const { child, getKillCount } = makeFakeChild();
207
+ let terminatedPid;
208
+ const client = new StdioVisionMcpClient({
209
+ apiKey: "k",
210
+ platform: "win32",
211
+ spawn: () => child,
212
+ killProcessTree: (pid) => {
213
+ terminatedPid = pid;
214
+ return true;
215
+ },
216
+ });
217
+ const callPromise = client.callTool("image_analysis", { image_source: "x" });
218
+ await new Promise((r) => setImmediate(r));
219
+ await client.dispose();
220
+ await assert.rejects(callPromise, /client disposed/i);
221
+ assert.equal(terminatedPid, 4242);
222
+ assert.equal(getKillCount(), 0);
223
+ });
224
+ test("StdioVisionMcpClient drains and redacts stderr on failure", async () => {
225
+ const apiKey = "secret-vision-key";
226
+ const { child, pushStderr } = makeFakeChild();
227
+ const client = new StdioVisionMcpClient({ apiKey, spawn: () => child });
228
+ const callPromise = client.callTool("image_analysis", { image_source: "x" });
229
+ await new Promise((r) => setImmediate(r));
230
+ pushStderr(`provider failed for ${apiKey}\n`);
231
+ child.emit("exit", 1, null);
232
+ await assert.rejects(callPromise, (error) => {
233
+ assert.match(error.message, /stderr: provider failed/);
234
+ assert.match(error.message, /\[REDACTED\]/);
235
+ assert.doesNotMatch(error.message, new RegExp(apiKey));
236
+ return true;
237
+ });
238
+ await client.dispose();
239
+ });
83
240
  test("StdioVisionMcpClient resolves tool name via keyword fallback when server uses a different name", async () => {
84
241
  const { child, written, pushStdout } = makeFakeChild();
85
242
  const client = new StdioVisionMcpClient({ apiKey: "k", spawn: () => child });
@@ -1 +1 @@
1
- {"version":3,"file":"vision-mcp-client.test.js","sourceRoot":"","sources":["../../src/tests/vision-mcp-client.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vision-mcp-client.test.js","sourceRoot":"","sources":["../../src/tests/vision-mcp-client.test.ts"],"names":[],"mappings":"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"}