@snutils/snu 0.2.1 → 0.2.3
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/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +146 -12
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/portReclaim.d.ts +48 -0
- package/dist/cli/portReclaim.d.ts.map +1 -0
- package/dist/cli/portReclaim.js +191 -0
- package/dist/cli/portReclaim.js.map +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +17 -3
- package/dist/mcp/index.js.map +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +4 -2
- package/dist/registry.js.map +1 -1
- package/dist/server/dispatcher.d.ts +8 -0
- package/dist/server/dispatcher.d.ts.map +1 -1
- package/dist/server/dispatcher.js +56 -2
- package/dist/server/dispatcher.js.map +1 -1
- package/dist/server/standalone.d.ts +6 -0
- package/dist/server/standalone.d.ts.map +1 -1
- package/dist/server/standalone.js +51 -0
- package/dist/server/standalone.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,OAAO,QAA0B,CAAC;AAY/C,wBAAgB,SAAS,IAAI,IAAI,CAiDhC;AAED,wBAAsB,MAAM,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0lBxE"}
|
package/dist/cli/index.js
CHANGED
|
@@ -47,6 +47,7 @@ const index_js_1 = require("../mcp/index.js");
|
|
|
47
47
|
const standalone_js_1 = require("../server/standalone.js");
|
|
48
48
|
const updateCheck_js_1 = require("./updateCheck.js");
|
|
49
49
|
const daemon_js_1 = require("./daemon.js");
|
|
50
|
+
const portReclaim_js_1 = require("./portReclaim.js");
|
|
50
51
|
const selfUpdate_js_1 = require("./selfUpdate.js");
|
|
51
52
|
const setup_js_1 = require("./setup.js");
|
|
52
53
|
const packageMetadata = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../package.json'), 'utf8'));
|
|
@@ -70,8 +71,8 @@ function printHelp() {
|
|
|
70
71
|
snu --mcp Start Model Context Protocol (MCP) server on stdio
|
|
71
72
|
snu serve [--port <p>] [--ws <p>] Start persistent standalone bridge daemon
|
|
72
73
|
snu status Show the active local bridge process
|
|
73
|
-
snu restart
|
|
74
|
-
snu stop
|
|
74
|
+
snu restart [--force] Replace a standalone bridge (reclaims a stuck port)
|
|
75
|
+
snu stop [--force] Stop a standalone bridge, even an orphaned one holding port 1978
|
|
75
76
|
snu update [--check] Check for or install the latest CLI release
|
|
76
77
|
snu setup [options] Configure AI clients (Claude Code, Cursor, ...) to use the MCP server
|
|
77
78
|
|
|
@@ -166,6 +167,7 @@ async function runCli(argv = process.argv.slice(2)) {
|
|
|
166
167
|
port: { type: 'string' },
|
|
167
168
|
ws: { type: 'string' },
|
|
168
169
|
check: { type: 'boolean' },
|
|
170
|
+
force: { type: 'boolean' },
|
|
169
171
|
},
|
|
170
172
|
allowPositionals: true,
|
|
171
173
|
strict: false,
|
|
@@ -206,9 +208,74 @@ async function runCli(argv = process.argv.slice(2)) {
|
|
|
206
208
|
};
|
|
207
209
|
// Standalone bridge lifecycle commands.
|
|
208
210
|
if (['serve', 'status', 'stop', 'restart'].includes(lifecycleCommand)) {
|
|
211
|
+
const forceReclaim = lifecycleValues.force === true;
|
|
212
|
+
let bridgePorts = [1978, 1977];
|
|
213
|
+
const describeListener = (l) => {
|
|
214
|
+
const cmd = (l.command || '').trim();
|
|
215
|
+
const shortCmd = cmd.length > 90 ? `${cmd.slice(0, 87)}...` : cmd;
|
|
216
|
+
return `PID ${l.pid}${shortCmd ? ` (${shortCmd})` : ''}`;
|
|
217
|
+
};
|
|
218
|
+
const explainBlocked = (port, result) => {
|
|
219
|
+
const who = result.listener ? describeListener(result.listener) : 'an unknown process';
|
|
220
|
+
if (result.status === 'refused_vscode') {
|
|
221
|
+
return new client_js_1.ScriptSyncClientError(`Port ${port} is held by a ScriptSync bridge inside VS Code (${who}). Stop it from the sn-scriptsync status bar in VS Code instead.`, 'E_NOT_STANDALONE');
|
|
222
|
+
}
|
|
223
|
+
if (result.status === 'refused_foreign') {
|
|
224
|
+
return new client_js_1.ScriptSyncClientError(`Port ${port} is held by ${who}, which does not look like an snu bridge. Re-run with --force to stop it anyway.`, 'E_PORT_BUSY');
|
|
225
|
+
}
|
|
226
|
+
return new client_js_1.ScriptSyncClientError(`Could not free port ${port}: ${who} did not stop.`, 'E_STOP_FAILED');
|
|
227
|
+
};
|
|
228
|
+
// Free the bridge ports from ground truth. Port-file discovery can miss a
|
|
229
|
+
// live bridge (deleted or clobbered port file — e.g. an MCP host spawned
|
|
230
|
+
// `snu --mcp` and something else removed the global port file), which used
|
|
231
|
+
// to leave `snu stop` claiming "already stopped" while the port stayed
|
|
232
|
+
// bound.
|
|
233
|
+
const reclaimBridgePorts = async () => {
|
|
234
|
+
const reclaimed = [];
|
|
235
|
+
const seenPids = new Set();
|
|
236
|
+
for (const port of bridgePorts) {
|
|
237
|
+
const result = await (0, portReclaim_js_1.reclaimPort)(port, { force: forceReclaim });
|
|
238
|
+
if (result.status === 'free')
|
|
239
|
+
continue;
|
|
240
|
+
if (result.status === 'reclaimed') {
|
|
241
|
+
if (result.listener && !seenPids.has(result.listener.pid)) {
|
|
242
|
+
seenPids.add(result.listener.pid);
|
|
243
|
+
reclaimed.push(result.listener);
|
|
244
|
+
}
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
return { reclaimed, blocked: { port, result } };
|
|
248
|
+
}
|
|
249
|
+
return { reclaimed };
|
|
250
|
+
};
|
|
209
251
|
try {
|
|
252
|
+
bridgePorts = [parsePort('ws', 1978), parsePort('port', 1977)];
|
|
210
253
|
const status = await (0, daemon_js_1.inspectBridge)({ portFile, cwd: process.cwd() });
|
|
211
254
|
if (lifecycleCommand === 'status') {
|
|
255
|
+
let orphan = null;
|
|
256
|
+
let orphanKind;
|
|
257
|
+
let orphanHealth = null;
|
|
258
|
+
if (!status.running) {
|
|
259
|
+
for (const port of bridgePorts) {
|
|
260
|
+
orphan = await (0, portReclaim_js_1.findPortListener)(port);
|
|
261
|
+
if (orphan)
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
if (orphan) {
|
|
265
|
+
orphanKind = (0, portReclaim_js_1.classifyListener)(orphan.command);
|
|
266
|
+
// A VS Code-hosted bridge can be perfectly healthy while its
|
|
267
|
+
// discovery file is missing (an older ScriptSync build in another
|
|
268
|
+
// editor window deletes it). /api/health needs no token — probe
|
|
269
|
+
// the fixed HTTP port so the advice matches reality.
|
|
270
|
+
const httpPort = bridgePorts[1];
|
|
271
|
+
try {
|
|
272
|
+
orphanHealth = await (0, client_js_1.checkHealth)(httpPort);
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
orphanHealth = null;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
212
279
|
const result = status.running
|
|
213
280
|
? {
|
|
214
281
|
running: true,
|
|
@@ -217,7 +284,14 @@ async function runCli(argv = process.argv.slice(2)) {
|
|
|
217
284
|
httpPort: status.discovery.port,
|
|
218
285
|
apiVersion: status.health.apiVersion,
|
|
219
286
|
}
|
|
220
|
-
:
|
|
287
|
+
: orphan
|
|
288
|
+
? {
|
|
289
|
+
running: false,
|
|
290
|
+
orphanListener: { pid: orphan.pid, command: orphan.command },
|
|
291
|
+
orphanKind,
|
|
292
|
+
bridgeHealthy: orphanHealth !== null,
|
|
293
|
+
}
|
|
294
|
+
: { running: false };
|
|
221
295
|
if (isJsonMode)
|
|
222
296
|
(0, format_js_1.outputJson)(result);
|
|
223
297
|
else if (status.running) {
|
|
@@ -226,6 +300,26 @@ async function runCli(argv = process.argv.slice(2)) {
|
|
|
226
300
|
console.log(` PID: ${status.health.pid}`);
|
|
227
301
|
console.log(` HTTP API: http://127.0.0.1:${status.discovery.port}/api\n`);
|
|
228
302
|
}
|
|
303
|
+
else if (orphan && orphanKind === 'vscode' && orphanHealth) {
|
|
304
|
+
console.log('\nSN Utils Bridge: healthy, but not discoverable (its port file is missing).');
|
|
305
|
+
console.log('A ScriptSync bridge is running inside a VS Code-family editor:');
|
|
306
|
+
console.log(` ${describeListener(orphan)}`);
|
|
307
|
+
console.log('To re-register it, reload the SN Utils helper tab in the browser, or toggle');
|
|
308
|
+
console.log('ScriptSync off and on in that editor window. If a second editor window also');
|
|
309
|
+
console.log('runs ScriptSync, update the extension there — older builds delete this file.\n');
|
|
310
|
+
}
|
|
311
|
+
else if (orphan && orphanKind === 'vscode') {
|
|
312
|
+
console.log('\nSN Utils Bridge: not discoverable. A VS Code-family editor holds the bridge');
|
|
313
|
+
console.log('port but is not answering:');
|
|
314
|
+
console.log(` ${describeListener(orphan)}`);
|
|
315
|
+
console.log('Toggle ScriptSync off and on in that editor window (`snu stop` will not');
|
|
316
|
+
console.log('touch an editor-hosted bridge).\n');
|
|
317
|
+
}
|
|
318
|
+
else if (orphan) {
|
|
319
|
+
console.log('\nSN Utils Bridge: not discoverable, but a bridge port is still held by');
|
|
320
|
+
console.log(` ${describeListener(orphan)}`);
|
|
321
|
+
console.log('Run `snu stop` to reclaim it.\n');
|
|
322
|
+
}
|
|
229
323
|
else {
|
|
230
324
|
console.log('\nSN Utils Bridge: not running\n');
|
|
231
325
|
}
|
|
@@ -247,17 +341,51 @@ async function runCli(argv = process.argv.slice(2)) {
|
|
|
247
341
|
await printUpdateNotice(updateNotice);
|
|
248
342
|
return;
|
|
249
343
|
}
|
|
344
|
+
// Graceful stop of a discovered standalone bridge, escalating to a
|
|
345
|
+
// process-level stop when the yield request fails or times out.
|
|
346
|
+
const stopDiscoveredBridge = async () => {
|
|
347
|
+
const pid = status.running ? status.discovery.pid : 0;
|
|
348
|
+
if (!status.running)
|
|
349
|
+
return pid;
|
|
350
|
+
try {
|
|
351
|
+
await (0, daemon_js_1.requestStandaloneYield)(status);
|
|
352
|
+
await (0, daemon_js_1.waitForBridgeExit)(pid);
|
|
353
|
+
}
|
|
354
|
+
catch (err) {
|
|
355
|
+
if (err?.code === 'E_NOT_STANDALONE')
|
|
356
|
+
throw err; // VS Code owns it — never kill.
|
|
357
|
+
const stopped = await (0, portReclaim_js_1.terminateListener)(pid, status.discovery.port);
|
|
358
|
+
if (!stopped)
|
|
359
|
+
throw err;
|
|
360
|
+
}
|
|
361
|
+
return pid;
|
|
362
|
+
};
|
|
250
363
|
if (lifecycleCommand === 'stop') {
|
|
251
364
|
if (!status.running) {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
365
|
+
const { reclaimed, blocked } = await reclaimBridgePorts();
|
|
366
|
+
if (reclaimed.length && !isJsonMode) {
|
|
367
|
+
console.log('\nStopped a bridge that was holding the port without a valid port file:');
|
|
368
|
+
reclaimed.forEach((l) => console.log(` ${describeListener(l)}`));
|
|
369
|
+
console.log('');
|
|
370
|
+
}
|
|
371
|
+
if (blocked)
|
|
372
|
+
throw explainBlocked(blocked.port, blocked.result);
|
|
373
|
+
if (isJsonMode) {
|
|
374
|
+
if (reclaimed.length)
|
|
375
|
+
(0, format_js_1.outputJson)({ stopped: true, reclaimedPids: reclaimed.map((l) => l.pid) });
|
|
376
|
+
else
|
|
377
|
+
(0, format_js_1.outputJson)({ stopped: false, alreadyStopped: true });
|
|
378
|
+
}
|
|
379
|
+
else if (!reclaimed.length) {
|
|
255
380
|
console.log('\nSN Utils standalone bridge is already stopped.\n');
|
|
381
|
+
}
|
|
256
382
|
return;
|
|
257
383
|
}
|
|
258
|
-
const pid =
|
|
259
|
-
|
|
260
|
-
|
|
384
|
+
const pid = await stopDiscoveredBridge();
|
|
385
|
+
// The discovered bridge is down; sweep for any second orphan still
|
|
386
|
+
// holding a port (e.g. discovery found HTTP but the WS port belongs
|
|
387
|
+
// to an older instance).
|
|
388
|
+
await reclaimBridgePorts();
|
|
261
389
|
if (isJsonMode)
|
|
262
390
|
(0, format_js_1.outputJson)({ stopped: true, pid });
|
|
263
391
|
else
|
|
@@ -265,12 +393,18 @@ async function runCli(argv = process.argv.slice(2)) {
|
|
|
265
393
|
return;
|
|
266
394
|
}
|
|
267
395
|
if (lifecycleCommand === 'restart' && status.running) {
|
|
268
|
-
const pid =
|
|
269
|
-
await (0, daemon_js_1.requestStandaloneYield)(status);
|
|
270
|
-
await (0, daemon_js_1.waitForBridgeExit)(pid);
|
|
396
|
+
const pid = await stopDiscoveredBridge();
|
|
271
397
|
if (!isJsonMode)
|
|
272
398
|
console.log(`\nStopped SN Utils standalone bridge (PID ${pid}). Restarting...`);
|
|
273
399
|
}
|
|
400
|
+
// serve / restart: make sure the ports are actually free before binding,
|
|
401
|
+
// even when discovery saw nothing.
|
|
402
|
+
const { reclaimed, blocked } = await reclaimBridgePorts();
|
|
403
|
+
if (reclaimed.length && !isJsonMode) {
|
|
404
|
+
reclaimed.forEach((l) => console.log(`\nStopped orphaned bridge ${describeListener(l)} to free the port.`));
|
|
405
|
+
}
|
|
406
|
+
if (blocked)
|
|
407
|
+
throw explainBlocked(blocked.port, blocked.result);
|
|
274
408
|
await startStandalone();
|
|
275
409
|
}
|
|
276
410
|
catch (err) {
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Port-level bridge reclaim. Port-file discovery can go stale (the file gets
|
|
3
|
+
* deleted or overwritten by another bridge host) while the process itself keeps
|
|
4
|
+
* ports 1977/1978 bound. These helpers find the actual listener on a port,
|
|
5
|
+
* classify it, and stop it so lifecycle commands work from ground truth instead
|
|
6
|
+
* of trusting the port files.
|
|
7
|
+
*/
|
|
8
|
+
export interface PortListener {
|
|
9
|
+
pid: number;
|
|
10
|
+
command: string;
|
|
11
|
+
}
|
|
12
|
+
export type ListenerKind = 'snu' | 'vscode' | 'unknown';
|
|
13
|
+
export type ExecImpl = (file: string, args: string[]) => Promise<{
|
|
14
|
+
stdout: string;
|
|
15
|
+
}>;
|
|
16
|
+
/** Identify the process listening on 127.0.0.1:<port>, if any. */
|
|
17
|
+
export declare function findPortListener(port: number, execImpl?: ExecImpl, platform?: NodeJS.Platform): Promise<PortListener | null>;
|
|
18
|
+
/** Classify a listener's command line: one of ours, a VS Code host, or foreign. */
|
|
19
|
+
export declare function classifyListener(command: string): ListenerKind;
|
|
20
|
+
/** True when nothing is bound to 127.0.0.1:<port>. */
|
|
21
|
+
export declare function isPortFree(port: number): Promise<boolean>;
|
|
22
|
+
export interface TerminateHooks {
|
|
23
|
+
killImpl?: (pid: number, signal: NodeJS.Signals) => void;
|
|
24
|
+
portFreeImpl?: (port: number) => Promise<boolean>;
|
|
25
|
+
delayMs?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Stop a listener: SIGTERM first (the standalone bridge shuts down cleanly on
|
|
29
|
+
* it, removing its port files), escalate to SIGKILL if the port stays bound.
|
|
30
|
+
*/
|
|
31
|
+
export declare function terminateListener(pid: number, port: number, hooks?: TerminateHooks): Promise<boolean>;
|
|
32
|
+
export interface ReclaimResult {
|
|
33
|
+
status: 'free' | 'reclaimed' | 'refused_vscode' | 'refused_foreign' | 'failed';
|
|
34
|
+
listener?: PortListener;
|
|
35
|
+
}
|
|
36
|
+
export interface ReclaimOptions {
|
|
37
|
+
/** Also stop listeners that don't look like an snu bridge. Never applies to VS Code hosts. */
|
|
38
|
+
force?: boolean;
|
|
39
|
+
findImpl?: (port: number) => Promise<PortListener | null>;
|
|
40
|
+
terminateImpl?: (pid: number, port: number) => Promise<boolean>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Make <port> available: no-op when free, stop an orphaned snu bridge, refuse
|
|
44
|
+
* a VS Code-hosted bridge (stop it from VS Code) or, without --force, any
|
|
45
|
+
* process that isn't recognizably ours.
|
|
46
|
+
*/
|
|
47
|
+
export declare function reclaimPort(port: number, options?: ReclaimOptions): Promise<ReclaimResult>;
|
|
48
|
+
//# sourceMappingURL=portReclaim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portReclaim.d.ts","sourceRoot":"","sources":["../../src/cli/portReclaim.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;AAExD,MAAM,MAAM,QAAQ,GAAG,CACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,KACX,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAWjC,kEAAkE;AAClE,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,QAAsB,EAChC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAsB9B;AA4BD,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAuB9D;AAED,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQzD;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;IACzD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,cAAmB,GACzB,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,QAAQ,CAAC;IAC/E,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,8FAA8F;IAC9F,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC1D,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACjE;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAapG"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.findPortListener = findPortListener;
|
|
37
|
+
exports.classifyListener = classifyListener;
|
|
38
|
+
exports.isPortFree = isPortFree;
|
|
39
|
+
exports.terminateListener = terminateListener;
|
|
40
|
+
exports.reclaimPort = reclaimPort;
|
|
41
|
+
const child_process_1 = require("child_process");
|
|
42
|
+
const net = __importStar(require("net"));
|
|
43
|
+
function defaultExec(file, args) {
|
|
44
|
+
return new Promise((resolve, reject) => {
|
|
45
|
+
(0, child_process_1.execFile)(file, args, { timeout: 5_000, windowsHide: true }, (err, stdout) => {
|
|
46
|
+
if (err)
|
|
47
|
+
reject(err);
|
|
48
|
+
else
|
|
49
|
+
resolve({ stdout: String(stdout) });
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/** Identify the process listening on 127.0.0.1:<port>, if any. */
|
|
54
|
+
async function findPortListener(port, execImpl = defaultExec, platform = process.platform) {
|
|
55
|
+
try {
|
|
56
|
+
if (platform === 'win32') {
|
|
57
|
+
return await findPortListenerWindows(port, execImpl);
|
|
58
|
+
}
|
|
59
|
+
const { stdout } = await execImpl('lsof', ['-nP', `-iTCP:${port}`, '-sTCP:LISTEN', '-Fp']);
|
|
60
|
+
const pidLine = stdout.split('\n').find((line) => /^p\d+$/.test(line.trim()));
|
|
61
|
+
if (!pidLine)
|
|
62
|
+
return null;
|
|
63
|
+
const pid = parseInt(pidLine.trim().slice(1), 10);
|
|
64
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
65
|
+
return null;
|
|
66
|
+
let command = '';
|
|
67
|
+
try {
|
|
68
|
+
const ps = await execImpl('ps', ['-p', String(pid), '-o', 'command=']);
|
|
69
|
+
command = ps.stdout.trim();
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Process may have exited between the two calls.
|
|
73
|
+
}
|
|
74
|
+
return { pid, command };
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// lsof missing or nothing listening — treat as unknown/free.
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function findPortListenerWindows(port, execImpl) {
|
|
82
|
+
const { stdout } = await execImpl('netstat', ['-ano', '-p', 'tcp']);
|
|
83
|
+
const line = stdout
|
|
84
|
+
.split('\n')
|
|
85
|
+
.find((l) => l.includes('LISTENING') && (l.includes(`:${port} `) || l.trim().split(/\s+/)[1]?.endsWith(`:${port}`)));
|
|
86
|
+
if (!line)
|
|
87
|
+
return null;
|
|
88
|
+
const parts = line.trim().split(/\s+/);
|
|
89
|
+
const pid = parseInt(parts[parts.length - 1], 10);
|
|
90
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
91
|
+
return null;
|
|
92
|
+
let command = '';
|
|
93
|
+
try {
|
|
94
|
+
const ps = await execImpl('powershell', [
|
|
95
|
+
'-NoProfile',
|
|
96
|
+
'-Command',
|
|
97
|
+
`(Get-CimInstance Win32_Process -Filter "ProcessId=${pid}").CommandLine`,
|
|
98
|
+
]);
|
|
99
|
+
command = ps.stdout.trim();
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
try {
|
|
103
|
+
const tl = await execImpl('tasklist', ['/FI', `PID eq ${pid}`, '/FO', 'CSV', '/NH']);
|
|
104
|
+
command = tl.stdout.split(',')[0]?.replace(/"/g, '').trim() || '';
|
|
105
|
+
}
|
|
106
|
+
catch { }
|
|
107
|
+
}
|
|
108
|
+
return { pid, command };
|
|
109
|
+
}
|
|
110
|
+
/** Classify a listener's command line: one of ours, a VS Code host, or foreign. */
|
|
111
|
+
function classifyListener(command) {
|
|
112
|
+
const c = (command || '').toLowerCase();
|
|
113
|
+
if (c.includes('@snutils/snu') ||
|
|
114
|
+
c.includes('@snutils\\snu') ||
|
|
115
|
+
/[\\/]\.bin[\\/]snu(\s|$)/.test(c) ||
|
|
116
|
+
/[\\/]snu[\\/]bin[\\/]snu\.js/.test(c) ||
|
|
117
|
+
/(^|\s|[\\/])snu(\.js)?\s+(--mcp|serve|restart)(\s|$)/.test(c) ||
|
|
118
|
+
c.includes('sn-scriptsync/packages/snu')) {
|
|
119
|
+
return 'snu';
|
|
120
|
+
}
|
|
121
|
+
if (c.includes('code helper') ||
|
|
122
|
+
c.includes('extensionhost') ||
|
|
123
|
+
c.includes('vscode') ||
|
|
124
|
+
c.includes('visual studio code') ||
|
|
125
|
+
c.includes('cursor helper') ||
|
|
126
|
+
c.includes('windsurf helper')) {
|
|
127
|
+
return 'vscode';
|
|
128
|
+
}
|
|
129
|
+
return 'unknown';
|
|
130
|
+
}
|
|
131
|
+
/** True when nothing is bound to 127.0.0.1:<port>. */
|
|
132
|
+
function isPortFree(port) {
|
|
133
|
+
return new Promise((resolve) => {
|
|
134
|
+
const probe = net
|
|
135
|
+
.createServer()
|
|
136
|
+
.once('error', () => resolve(false))
|
|
137
|
+
.once('listening', () => probe.close(() => resolve(true)));
|
|
138
|
+
probe.listen(port, '127.0.0.1');
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Stop a listener: SIGTERM first (the standalone bridge shuts down cleanly on
|
|
143
|
+
* it, removing its port files), escalate to SIGKILL if the port stays bound.
|
|
144
|
+
*/
|
|
145
|
+
async function terminateListener(pid, port, hooks = {}) {
|
|
146
|
+
const kill = hooks.killImpl ?? ((p, s) => process.kill(p, s));
|
|
147
|
+
const portFree = hooks.portFreeImpl ?? isPortFree;
|
|
148
|
+
const delay = hooks.delayMs ?? 150;
|
|
149
|
+
const waitFree = async (rounds) => {
|
|
150
|
+
for (let i = 0; i < rounds; i++) {
|
|
151
|
+
if (await portFree(port))
|
|
152
|
+
return true;
|
|
153
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
154
|
+
}
|
|
155
|
+
return portFree(port);
|
|
156
|
+
};
|
|
157
|
+
try {
|
|
158
|
+
kill(pid, 'SIGTERM');
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Already gone (or not permitted) — verify via the port itself.
|
|
162
|
+
return waitFree(3);
|
|
163
|
+
}
|
|
164
|
+
if (await waitFree(20))
|
|
165
|
+
return true;
|
|
166
|
+
try {
|
|
167
|
+
kill(pid, 'SIGKILL');
|
|
168
|
+
}
|
|
169
|
+
catch { }
|
|
170
|
+
return waitFree(10);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Make <port> available: no-op when free, stop an orphaned snu bridge, refuse
|
|
174
|
+
* a VS Code-hosted bridge (stop it from VS Code) or, without --force, any
|
|
175
|
+
* process that isn't recognizably ours.
|
|
176
|
+
*/
|
|
177
|
+
async function reclaimPort(port, options = {}) {
|
|
178
|
+
const find = options.findImpl ?? findPortListener;
|
|
179
|
+
const terminate = options.terminateImpl ?? terminateListener;
|
|
180
|
+
const listener = await find(port);
|
|
181
|
+
if (!listener)
|
|
182
|
+
return { status: 'free' };
|
|
183
|
+
const kind = classifyListener(listener.command);
|
|
184
|
+
if (kind === 'vscode')
|
|
185
|
+
return { status: 'refused_vscode', listener };
|
|
186
|
+
if (kind === 'unknown' && !options.force)
|
|
187
|
+
return { status: 'refused_foreign', listener };
|
|
188
|
+
const stopped = await terminate(listener.pid, port);
|
|
189
|
+
return { status: stopped ? 'reclaimed' : 'failed', listener };
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=portReclaim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portReclaim.js","sourceRoot":"","sources":["../../src/cli/portReclaim.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAwCpE,wBAAsB,eAAe,IAAI,OAAO,CAAC,SAAS,CAAC,CAkS1D;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAoCpD"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -8,6 +8,7 @@ const zod_1 = require("zod");
|
|
|
8
8
|
const registry_js_1 = require("../registry.js");
|
|
9
9
|
const client_js_1 = require("../client.js");
|
|
10
10
|
const standalone_js_1 = require("../server/standalone.js");
|
|
11
|
+
const portReclaim_js_1 = require("../cli/portReclaim.js");
|
|
11
12
|
// Surfaced verbatim by MCP clients. This is the only guidance an agent that
|
|
12
13
|
// reaches the bridge over MCP ever sees: it has no access to the ScriptSync
|
|
13
14
|
// agent rules unless it happens to be working inside a sync workspace. Keep it
|
|
@@ -238,9 +239,22 @@ async function startMcpServer() {
|
|
|
238
239
|
err?.code === 'E_BRIDGE_UNREACHABLE' ||
|
|
239
240
|
err?.code === 'E_STALE_PORT_FILE') {
|
|
240
241
|
console.error('[snu-mcp] No active VS Code bridge found. Starting in-process standalone bridge on WS 1978 & HTTP 1977...');
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
242
|
+
// Discovery saw no bridge, yet the WS port may still be held by an
|
|
243
|
+
// orphaned snu instance (stale/clobbered port file). Reclaim it so this
|
|
244
|
+
// server takes over instead of crashing on EADDRINUSE. VS Code hosts and
|
|
245
|
+
// foreign processes are left alone.
|
|
246
|
+
try {
|
|
247
|
+
const reclaimed = await (0, portReclaim_js_1.reclaimPort)(1978, {});
|
|
248
|
+
if (reclaimed.status === 'reclaimed' && reclaimed.listener) {
|
|
249
|
+
console.error(`[snu-mcp] Stopped orphaned bridge PID ${reclaimed.listener.pid} to free port 1978.`);
|
|
250
|
+
}
|
|
251
|
+
const standalone = new standalone_js_1.StandaloneBridge();
|
|
252
|
+
await standalone.start();
|
|
253
|
+
console.error('[snu-mcp] In-process standalone bridge active.');
|
|
254
|
+
}
|
|
255
|
+
catch (startErr) {
|
|
256
|
+
console.error(`[snu-mcp] Could not start in-process bridge: ${startErr?.message || startErr}. Continuing as MCP server only; ServiceNow commands will fail until a bridge is available.`);
|
|
257
|
+
}
|
|
244
258
|
}
|
|
245
259
|
}
|
|
246
260
|
const server = await createMcpServer();
|