staff-mcp 1.2.0 → 1.3.0
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 +35 -3
- package/README_zh.md +30 -3
- package/dist/src/index.js +19 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/lsp/manager.d.ts +2 -0
- package/dist/src/lsp/manager.js +22 -10
- package/dist/src/lsp/manager.js.map +1 -1
- package/dist/src/server.js +1 -1
- package/dist/src/server.js.map +1 -1
- package/dist/src/tools/mcp-client-tools.js +1 -1
- package/dist/src/tools/mcp-client-tools.js.map +1 -1
- package/dist/src/tools/system-tools.d.ts +9 -3
- package/dist/src/tools/system-tools.js +31 -48
- package/dist/src/tools/system-tools.js.map +1 -1
- package/dist/src/transports/http.d.ts +2 -1
- package/dist/src/transports/http.js +26 -3
- package/dist/src/transports/http.js.map +1 -1
- package/dist/src/transports/stdio.d.ts +1 -0
- package/dist/src/transports/stdio.js +6 -4
- package/dist/src/transports/stdio.js.map +1 -1
- package/dist/src/utils/proxy.d.ts +1 -1
- package/dist/src/utils/proxy.js.map +1 -1
- package/package.json +14 -15
- package/dist/tests/docker-proxy.test.d.ts +0 -1
- package/dist/tests/docker-proxy.test.js +0 -395
- package/dist/tests/docker-proxy.test.js.map +0 -1
- package/dist/tests/file-write-queue.test.d.ts +0 -1
- package/dist/tests/file-write-queue.test.js +0 -105
- package/dist/tests/file-write-queue.test.js.map +0 -1
- package/dist/tests/fte-lifecycle.test.d.ts +0 -1
- package/dist/tests/fte-lifecycle.test.js +0 -118
- package/dist/tests/fte-lifecycle.test.js.map +0 -1
- package/dist/tests/lsp-client.test.d.ts +0 -1
- package/dist/tests/lsp-client.test.js +0 -52
- package/dist/tests/lsp-client.test.js.map +0 -1
- package/dist/tests/package-info.test.d.ts +0 -1
- package/dist/tests/package-info.test.js +0 -54
- package/dist/tests/package-info.test.js.map +0 -1
- package/dist/tests/proxy-no-proxy.test.d.ts +0 -1
- package/dist/tests/proxy-no-proxy.test.js +0 -156
- package/dist/tests/proxy-no-proxy.test.js.map +0 -1
- package/dist/tests/proxy.test.d.ts +0 -1
- package/dist/tests/proxy.test.js +0 -89
- package/dist/tests/proxy.test.js.map +0 -1
- package/dist/tests/reverse-reconnect.test.d.ts +0 -1
- package/dist/tests/reverse-reconnect.test.js +0 -89
- package/dist/tests/reverse-reconnect.test.js.map +0 -1
- package/dist/tests/security.test.d.ts +0 -1
- package/dist/tests/security.test.js +0 -21
- package/dist/tests/security.test.js.map +0 -1
- package/dist/tests/shell-tools.test.d.ts +0 -1
- package/dist/tests/shell-tools.test.js +0 -113
- package/dist/tests/shell-tools.test.js.map +0 -1
- package/dist/tests/test_files/test.d.ts +0 -1
- package/dist/tests/test_files/test.js +0 -4
- package/dist/tests/test_files/test.js.map +0 -1
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { test } from "node:test";
|
|
2
|
-
import assert from "node:assert";
|
|
3
|
-
import path from "path";
|
|
4
|
-
import { SecurityManager } from "../src/security.js";
|
|
5
|
-
test("SecurityManager - Should allow paths inside allowed directories", () => {
|
|
6
|
-
const security = new SecurityManager("/tmp/sandbox");
|
|
7
|
-
const validated = security.resolveAndValidatePath("test.txt", "/tmp/sandbox");
|
|
8
|
-
assert.strictEqual(validated, path.resolve("/tmp/sandbox/test.txt"));
|
|
9
|
-
});
|
|
10
|
-
test("SecurityManager - Should block paths outside allowed directories", () => {
|
|
11
|
-
const security = new SecurityManager("/tmp/sandbox");
|
|
12
|
-
assert.throws(() => {
|
|
13
|
-
security.resolveAndValidatePath("../outside.txt", "/tmp/sandbox");
|
|
14
|
-
}, /Security Error/);
|
|
15
|
-
});
|
|
16
|
-
test("SecurityManager - Should allow subdirectory access", () => {
|
|
17
|
-
const security = new SecurityManager("/tmp/sandbox");
|
|
18
|
-
const validated = security.resolveAndValidatePath("subdir/file.ts", "/tmp/sandbox");
|
|
19
|
-
assert.strictEqual(validated, path.resolve("/tmp/sandbox/subdir/file.ts"));
|
|
20
|
-
});
|
|
21
|
-
//# sourceMappingURL=security.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"security.test.js","sourceRoot":"","sources":["../../tests/security.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;IAC3E,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,sBAAsB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kEAAkE,EAAE,GAAG,EAAE;IAC5E,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC;IACrD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;QACjB,QAAQ,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IACpE,CAAC,EAAE,gBAAgB,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAC9D,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IACpF,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC;AAC7E,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert/strict";
|
|
2
|
-
import { test, after } from "node:test";
|
|
3
|
-
import { executeCommandCore, getTaskLogsCore, stopTaskCore, listTasksCore, cleanupAllTasks, } from "../src/tools/shell-tools.js";
|
|
4
|
-
const CWD = process.cwd();
|
|
5
|
-
const NODE = `"${process.execPath}"`;
|
|
6
|
-
const IS_WIN = process.platform === "win32";
|
|
7
|
-
after(() => {
|
|
8
|
-
cleanupAllTasks();
|
|
9
|
-
});
|
|
10
|
-
test("fast command completes within the wait window and leaves no task behind", async () => {
|
|
11
|
-
const result = await executeCommandCore(`${NODE} -e "console.log('hello-from-test')"`, CWD, 5000);
|
|
12
|
-
assert.equal(result.isError, false);
|
|
13
|
-
assert.equal(result.taskId, undefined);
|
|
14
|
-
assert.match(result.text, /Exit Code: 0/);
|
|
15
|
-
assert.match(result.text, /hello-from-test/);
|
|
16
|
-
// one-shot commands are not tracked
|
|
17
|
-
assert.match(listTasksCore().text, /No background tasks found/);
|
|
18
|
-
});
|
|
19
|
-
test("failing command reports a non-zero exit code as an error", async () => {
|
|
20
|
-
const result = await executeCommandCore(`${NODE} -e "process.exit(3)"`, CWD, 5000);
|
|
21
|
-
assert.equal(result.isError, true);
|
|
22
|
-
assert.match(result.text, /Exit Code: 3/);
|
|
23
|
-
});
|
|
24
|
-
test("output larger than 1MB completes instead of dying with maxBuffer exceeded", async () => {
|
|
25
|
-
// 2MB of output — the old exec-based implementation failed here (Node default maxBuffer = 1MB)
|
|
26
|
-
const result = await executeCommandCore(`${NODE} -e "process.stdout.write('x'.repeat(2 * 1024 * 1024))"`, CWD, 30000);
|
|
27
|
-
assert.equal(result.isError, false);
|
|
28
|
-
assert.match(result.text, /Exit Code: 0/);
|
|
29
|
-
// ring buffer (100KB) and result cap (50KB) must have kicked in
|
|
30
|
-
assert.match(result.text, /truncated|dropped/i);
|
|
31
|
-
assert.ok(result.text.length < 200_000, `result should be bounded, got ${result.text.length}`);
|
|
32
|
-
});
|
|
33
|
-
test("slow command yields a task ID, logs(wait) follows it to completion, stop reports already-exited", async () => {
|
|
34
|
-
const result = await executeCommandCore(`${NODE} -e "console.log('started'); setTimeout(() => console.log('finished'), 2500)"`, CWD, 300);
|
|
35
|
-
// not killed on timeout: moved to background with a task ID, NOT an error
|
|
36
|
-
assert.equal(result.isError, false);
|
|
37
|
-
assert.ok(result.taskId, "expected a task ID for the still-running process");
|
|
38
|
-
assert.match(result.text, /still running/);
|
|
39
|
-
assert.match(result.text, /NOT killed/);
|
|
40
|
-
assert.match(result.text, /started/);
|
|
41
|
-
assert.match(result.text, new RegExp(result.taskId));
|
|
42
|
-
// logs(wait) blocks until new output OR exit; poll until the exit is observed
|
|
43
|
-
const t0 = Date.now();
|
|
44
|
-
let logs = await getTaskLogsCore(result.taskId, 100, 15000);
|
|
45
|
-
for (let i = 0; i < 10 && !/exited \(code: 0\)/.test(logs.text); i++) {
|
|
46
|
-
logs = await getTaskLogsCore(result.taskId, 100, 15000);
|
|
47
|
-
}
|
|
48
|
-
const elapsed = Date.now() - t0;
|
|
49
|
-
assert.equal(logs.isError, false);
|
|
50
|
-
assert.match(logs.text, /finished/);
|
|
51
|
-
assert.match(logs.text, /exited \(code: 0\)/);
|
|
52
|
-
assert.ok(elapsed < 14000, `logs(wait) returned after ${elapsed}ms, expected early wakeup on exit`);
|
|
53
|
-
// stopping an already-exited task is a no-op, not an error
|
|
54
|
-
const stop = await stopTaskCore(result.taskId);
|
|
55
|
-
assert.equal(stop.isError, false);
|
|
56
|
-
assert.match(stop.text, /already/);
|
|
57
|
-
// exited task is still listed for postmortem
|
|
58
|
-
assert.match(listTasksCore().text, new RegExp(result.taskId));
|
|
59
|
-
});
|
|
60
|
-
test("unknown task ID produces a helpful not-found error", async () => {
|
|
61
|
-
const logs = await getTaskLogsCore("task_does_not_exist", 100, 0);
|
|
62
|
-
assert.equal(logs.isError, true);
|
|
63
|
-
assert.match(logs.text, /not found/);
|
|
64
|
-
const stop = await stopTaskCore("task_does_not_exist");
|
|
65
|
-
assert.equal(stop.isError, true);
|
|
66
|
-
assert.match(stop.text, /not found/);
|
|
67
|
-
});
|
|
68
|
-
test("stop terminates the whole process group and keeps logs for postmortem", { skip: IS_WIN }, async () => {
|
|
69
|
-
// Parent spawns a grandchild in the same process group, then both idle.
|
|
70
|
-
const result = await executeCommandCore(`${NODE} -e "const { spawn } = require('child_process'); const g = spawn(process.execPath, ['-e', 'setInterval(() => {}, 1000)']); console.log('grandchild:' + g.pid); setInterval(() => {}, 1000);"`, CWD, 300);
|
|
71
|
-
assert.equal(result.isError, false);
|
|
72
|
-
assert.ok(result.taskId, "expected a task ID");
|
|
73
|
-
// wait until the grandchild PID shows up in the logs
|
|
74
|
-
let grandchildPid = null;
|
|
75
|
-
for (let i = 0; i < 20 && grandchildPid === null; i++) {
|
|
76
|
-
const logs = await getTaskLogsCore(result.taskId, 100, 1000);
|
|
77
|
-
const m = logs.text.match(/grandchild:(\d+)/);
|
|
78
|
-
if (m)
|
|
79
|
-
grandchildPid = Number(m[1]);
|
|
80
|
-
}
|
|
81
|
-
assert.ok(grandchildPid, "grandchild PID should appear in task logs");
|
|
82
|
-
const stop = await stopTaskCore(result.taskId);
|
|
83
|
-
assert.equal(stop.isError, false);
|
|
84
|
-
assert.match(stop.text, /stopped/);
|
|
85
|
-
// the grandchild must be gone too (process-group kill, not just the shell)
|
|
86
|
-
let alive = true;
|
|
87
|
-
for (let i = 0; i < 30 && alive; i++) {
|
|
88
|
-
try {
|
|
89
|
-
process.kill(grandchildPid, 0);
|
|
90
|
-
await new Promise((r) => setTimeout(r, 100));
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
alive = false;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
assert.equal(alive, false, `grandchild process ${grandchildPid} should have been killed`);
|
|
97
|
-
// postmortem: logs still available, status reflects the kill
|
|
98
|
-
const postmortem = await getTaskLogsCore(result.taskId, 100, 0);
|
|
99
|
-
assert.equal(postmortem.isError, false);
|
|
100
|
-
assert.match(postmortem.text, /killed by stop/);
|
|
101
|
-
});
|
|
102
|
-
test("logs(wait) wakes up early when new output arrives", async () => {
|
|
103
|
-
const result = await executeCommandCore(`${NODE} -e "setInterval(() => console.log('tick'), 400); setTimeout(() => process.exit(0), 5000);"`, CWD, 300);
|
|
104
|
-
assert.ok(result.taskId);
|
|
105
|
-
const t0 = Date.now();
|
|
106
|
-
const logs = await getTaskLogsCore(result.taskId, 100, 30000); // generous cap
|
|
107
|
-
const elapsed = Date.now() - t0;
|
|
108
|
-
assert.equal(logs.isError, false);
|
|
109
|
-
assert.match(logs.text, /tick/);
|
|
110
|
-
assert.ok(elapsed < 10000, `logs(wait) should wake on new output, took ${elapsed}ms`);
|
|
111
|
-
await stopTaskCore(result.taskId);
|
|
112
|
-
});
|
|
113
|
-
//# sourceMappingURL=shell-tools.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shell-tools.test.js","sourceRoot":"","sources":["../../tests/shell-tools.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../tests/test_files/test.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAW,aAAa,CAAC;AACtC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC"}
|