@provos/ironcurtain 0.4.0 → 0.5.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 +219 -248
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -1
- package/dist/config/config-command.js +144 -6
- package/dist/config/config-command.js.map +1 -1
- package/dist/config/constitution-user-base.md +2 -0
- package/dist/config/first-start.js +77 -12
- package/dist/config/first-start.js.map +1 -1
- package/dist/config/generated/compiled-policy.json +199 -72
- package/dist/config/generated/tool-annotations.json +1018 -36
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/mcp-servers.json +13 -0
- package/dist/config/paths.d.ts +31 -0
- package/dist/config/paths.js +52 -2
- package/dist/config/paths.js.map +1 -1
- package/dist/config/types.d.ts +10 -0
- package/dist/config/user-config.d.ts +21 -3
- package/dist/config/user-config.js +34 -3
- package/dist/config/user-config.js.map +1 -1
- package/dist/docker/adapters/claude-code.d.ts +4 -0
- package/dist/docker/adapters/claude-code.js +96 -37
- package/dist/docker/adapters/claude-code.js.map +1 -1
- package/dist/docker/agent-adapter.d.ts +22 -13
- package/dist/docker/code-mode-proxy.d.ts +34 -0
- package/dist/docker/code-mode-proxy.js +137 -0
- package/dist/docker/code-mode-proxy.js.map +1 -0
- package/dist/docker/docker-agent-session.d.ts +22 -14
- package/dist/docker/docker-agent-session.js +144 -117
- package/dist/docker/docker-agent-session.js.map +1 -1
- package/dist/docker/docker-infrastructure.d.ts +51 -0
- package/dist/docker/docker-infrastructure.js +261 -0
- package/dist/docker/docker-infrastructure.js.map +1 -0
- package/dist/docker/docker-manager.js +27 -0
- package/dist/docker/docker-manager.js.map +1 -1
- package/dist/docker/mitm-proxy.js +4 -0
- package/dist/docker/mitm-proxy.js.map +1 -1
- package/dist/docker/oauth-credentials.d.ts +81 -0
- package/dist/docker/oauth-credentials.js +178 -0
- package/dist/docker/oauth-credentials.js.map +1 -0
- package/dist/docker/orientation.d.ts +3 -2
- package/dist/docker/orientation.js +4 -4
- package/dist/docker/orientation.js.map +1 -1
- package/dist/docker/provider-config.d.ts +3 -0
- package/dist/docker/provider-config.js +28 -0
- package/dist/docker/provider-config.js.map +1 -1
- package/dist/docker/pty-session.d.ts +27 -0
- package/dist/docker/pty-session.js +420 -0
- package/dist/docker/pty-session.js.map +1 -0
- package/dist/docker/pty-types.d.ts +24 -0
- package/dist/docker/pty-types.js +12 -0
- package/dist/docker/pty-types.js.map +1 -0
- package/dist/docker/types.d.ts +18 -2
- package/dist/escalation/escalation-watcher.d.ts +44 -0
- package/dist/escalation/escalation-watcher.js +92 -0
- package/dist/escalation/escalation-watcher.js.map +1 -0
- package/dist/escalation/listener-command.d.ts +10 -0
- package/dist/escalation/listener-command.js +407 -0
- package/dist/escalation/listener-command.js.map +1 -0
- package/dist/escalation/listener-state.d.ts +49 -0
- package/dist/escalation/listener-state.js +104 -0
- package/dist/escalation/listener-state.js.map +1 -0
- package/dist/escalation/session-registry.d.ts +17 -0
- package/dist/escalation/session-registry.js +98 -0
- package/dist/escalation/session-registry.js.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/logger.js +2 -3
- package/dist/logger.js.map +1 -1
- package/dist/pipeline/annotate.js +35 -15
- package/dist/pipeline/annotate.js.map +1 -1
- package/dist/pipeline/constitution-customizer.d.ts +2 -1
- package/dist/pipeline/constitution-customizer.js +36 -3
- package/dist/pipeline/constitution-customizer.js.map +1 -1
- package/dist/pipeline/github-identity.d.ts +38 -0
- package/dist/pipeline/github-identity.js +64 -0
- package/dist/pipeline/github-identity.js.map +1 -0
- package/dist/pipeline/handwritten-scenarios.js +34 -0
- package/dist/pipeline/handwritten-scenarios.js.map +1 -1
- package/dist/sandbox/index.d.ts +25 -1
- package/dist/sandbox/index.js +90 -12
- package/dist/sandbox/index.js.map +1 -1
- package/dist/servers/fetch-server.d.ts +6 -1
- package/dist/servers/fetch-server.js +26 -14
- package/dist/servers/fetch-server.js.map +1 -1
- package/dist/session/agent-session.js +9 -5
- package/dist/session/agent-session.js.map +1 -1
- package/dist/session/base-transport.d.ts +19 -0
- package/dist/session/base-transport.js +36 -0
- package/dist/session/base-transport.js.map +1 -0
- package/dist/session/cli-transport.d.ts +3 -3
- package/dist/session/cli-transport.js +7 -4
- package/dist/session/cli-transport.js.map +1 -1
- package/dist/session/index.js +24 -106
- package/dist/session/index.js.map +1 -1
- package/dist/session/interaction-log.d.ts +13 -0
- package/dist/session/interaction-log.js +28 -0
- package/dist/session/interaction-log.js.map +1 -0
- package/dist/session/preflight.d.ts +3 -0
- package/dist/session/preflight.js +45 -18
- package/dist/session/preflight.js.map +1 -1
- package/dist/session/prompts.d.ts +9 -3
- package/dist/session/prompts.js +28 -10
- package/dist/session/prompts.js.map +1 -1
- package/dist/session/types.d.ts +2 -0
- package/dist/signal/bot-command.js +5 -0
- package/dist/signal/bot-command.js.map +1 -1
- package/dist/signal/format.d.ts +21 -1
- package/dist/signal/format.js +41 -3
- package/dist/signal/format.js.map +1 -1
- package/dist/signal/signal-bot-daemon.d.ts +53 -18
- package/dist/signal/signal-bot-daemon.js +344 -106
- package/dist/signal/signal-bot-daemon.js.map +1 -1
- package/dist/signal/signal-config.d.ts +4 -0
- package/dist/signal/signal-config.js +2 -0
- package/dist/signal/signal-config.js.map +1 -1
- package/dist/signal/signal-transport.d.ts +13 -7
- package/dist/signal/signal-transport.js +36 -12
- package/dist/signal/signal-transport.js.map +1 -1
- package/dist/trusted-process/audit-log.d.ts +6 -1
- package/dist/trusted-process/audit-log.js +22 -2
- package/dist/trusted-process/audit-log.js.map +1 -1
- package/dist/trusted-process/audit-redactor.d.ts +25 -0
- package/dist/trusted-process/audit-redactor.js +121 -0
- package/dist/trusted-process/audit-redactor.js.map +1 -0
- package/dist/trusted-process/escalation.d.ts +1 -1
- package/dist/trusted-process/escalation.js +6 -1
- package/dist/trusted-process/escalation.js.map +1 -1
- package/dist/trusted-process/index.d.ts +2 -1
- package/dist/trusted-process/index.js +24 -6
- package/dist/trusted-process/index.js.map +1 -1
- package/dist/trusted-process/mcp-client-manager.js +14 -2
- package/dist/trusted-process/mcp-client-manager.js.map +1 -1
- package/dist/trusted-process/mcp-error-utils.d.ts +11 -0
- package/dist/trusted-process/mcp-error-utils.js +50 -0
- package/dist/trusted-process/mcp-error-utils.js.map +1 -0
- package/dist/trusted-process/mcp-proxy-server.d.ts +115 -1
- package/dist/trusted-process/mcp-proxy-server.js +318 -267
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/dist/trusted-process/policy-engine.d.ts +3 -1
- package/dist/trusted-process/policy-engine.js +17 -6
- package/dist/trusted-process/policy-engine.js.map +1 -1
- package/dist/trusted-process/sandbox-integration.d.ts +16 -4
- package/dist/trusted-process/sandbox-integration.js +14 -8
- package/dist/trusted-process/sandbox-integration.js.map +1 -1
- package/dist/trusted-process/server-context.d.ts +21 -0
- package/dist/trusted-process/server-context.js +42 -0
- package/dist/trusted-process/server-context.js.map +1 -0
- package/dist/types/argument-roles.d.ts +12 -2
- package/dist/types/argument-roles.js +37 -4
- package/dist/types/argument-roles.js.map +1 -1
- package/docker/Dockerfile.claude-code +8 -3
- package/docker/entrypoint-claude-code.sh +64 -4
- package/package.json +19 -9
- package/src/config/constitution-user-base.md +2 -0
- package/src/config/generated/compiled-policy.json +199 -72
- package/src/config/generated/tool-annotations.json +1018 -36
- package/src/config/mcp-servers.json +13 -0
- package/dist/docker/managed-proxy.d.ts +0 -31
- package/dist/docker/managed-proxy.js +0 -265
- package/dist/docker/managed-proxy.js.map +0 -1
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"filesystem": {
|
|
3
|
+
"description": "Read, write, search, and manage files and directories",
|
|
3
4
|
"command": "npx",
|
|
4
5
|
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp/ironcurtain-sandbox"],
|
|
5
6
|
"sandbox": false
|
|
6
7
|
},
|
|
7
8
|
"git": {
|
|
9
|
+
"description": "Git version control operations (commits, branches, diffs, etc.)",
|
|
8
10
|
"command": "node",
|
|
9
11
|
"args": ["node_modules/.bin/git-mcp-server"],
|
|
10
12
|
"env": {
|
|
@@ -20,9 +22,20 @@
|
|
|
20
22
|
}
|
|
21
23
|
},
|
|
22
24
|
"fetch": {
|
|
25
|
+
"description": "HTTP requests and web search",
|
|
23
26
|
"command": "tsx",
|
|
24
27
|
"args": ["./src/servers/fetch-server.ts"],
|
|
25
28
|
"sandbox": false,
|
|
26
29
|
"_comment": "sandbox: false because srt's network sandbox (seccomp/bubblewrap) blocks Unix domain sockets needed by tsx in dev mode and cannot selectively allow network while restricting filesystem. The policy engine handles URL-level security (SSRF blocking, domain allowlists) independently."
|
|
30
|
+
},
|
|
31
|
+
"github": {
|
|
32
|
+
"description": "GitHub API operations (issues, pull requests, repos, search)",
|
|
33
|
+
"command": "docker",
|
|
34
|
+
"args": [
|
|
35
|
+
"run", "-i", "--rm",
|
|
36
|
+
"-e", "GITHUB_PERSONAL_ACCESS_TOKEN",
|
|
37
|
+
"ghcr.io/github/github-mcp-server"
|
|
38
|
+
],
|
|
39
|
+
"sandbox": false
|
|
27
40
|
}
|
|
28
41
|
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manages the lifecycle of an MCP proxy server process for a Docker session.
|
|
3
|
-
*
|
|
4
|
-
* Spawns the proxy as a child process with PROXY_SOCKET_PATH set.
|
|
5
|
-
* The proxy process is the same mcp-proxy-server.ts used by the
|
|
6
|
-
* built-in session, just with a UDS transport instead of stdio.
|
|
7
|
-
*/
|
|
8
|
-
import type { ToolInfo } from './agent-adapter.js';
|
|
9
|
-
export interface ManagedProxy {
|
|
10
|
-
/** Start the proxy process. Resolves when the transport is ready for connections. */
|
|
11
|
-
start(): Promise<void>;
|
|
12
|
-
/** Query available tools from the running proxy. */
|
|
13
|
-
listTools(): Promise<ToolInfo[]>;
|
|
14
|
-
/** Stop the proxy process and clean up the socket. */
|
|
15
|
-
stop(): Promise<void>;
|
|
16
|
-
/** The socket path the proxy is listening on (UDS mode). */
|
|
17
|
-
readonly socketPath: string;
|
|
18
|
-
/** The TCP port the proxy is listening on (TCP mode). Only valid after start(). */
|
|
19
|
-
readonly port: number | undefined;
|
|
20
|
-
}
|
|
21
|
-
export interface ManagedProxyOptions {
|
|
22
|
-
/** Absolute path for the UDS socket (used in UDS mode). */
|
|
23
|
-
readonly socketPath: string;
|
|
24
|
-
/** Environment variables to pass to the proxy process. */
|
|
25
|
-
readonly env: Record<string, string>;
|
|
26
|
-
/** Working directory for the proxy process. Defaults to process.cwd(). */
|
|
27
|
-
readonly cwd?: string;
|
|
28
|
-
/** Listen mode: 'uds' (default) or 'tcp'. TCP mode uses OS-assigned port. */
|
|
29
|
-
readonly listenMode?: 'uds' | 'tcp';
|
|
30
|
-
}
|
|
31
|
-
export declare function createManagedProxy(options: ManagedProxyOptions): ManagedProxy;
|
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manages the lifecycle of an MCP proxy server process for a Docker session.
|
|
3
|
-
*
|
|
4
|
-
* Spawns the proxy as a child process with PROXY_SOCKET_PATH set.
|
|
5
|
-
* The proxy process is the same mcp-proxy-server.ts used by the
|
|
6
|
-
* built-in session, just with a UDS transport instead of stdio.
|
|
7
|
-
*/
|
|
8
|
-
import { fork } from 'node:child_process';
|
|
9
|
-
import { existsSync, readFileSync, unlinkSync } from 'node:fs';
|
|
10
|
-
import { setTimeout as delay } from 'node:timers/promises';
|
|
11
|
-
import { resolve, dirname } from 'node:path';
|
|
12
|
-
import { fileURLToPath } from 'node:url';
|
|
13
|
-
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
14
|
-
import { connect as netConnect } from 'node:net';
|
|
15
|
-
import { ReadBuffer, serializeMessage } from '@modelcontextprotocol/sdk/shared/stdio.js';
|
|
16
|
-
import { VERSION } from '../version.js';
|
|
17
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
18
|
-
/** Timeout for socket readiness polling. */
|
|
19
|
-
const SOCKET_READY_TIMEOUT_MS = 15_000;
|
|
20
|
-
const SOCKET_POLL_INTERVAL_MS = 50;
|
|
21
|
-
/** Path to the mcp-proxy-server module. */
|
|
22
|
-
function getProxyModulePath() {
|
|
23
|
-
// In compiled mode: dist/trusted-process/mcp-proxy-server.js
|
|
24
|
-
// In source mode: src/trusted-process/mcp-proxy-server.ts (needs tsx)
|
|
25
|
-
const compiledPath = resolve(__dirname, '..', 'trusted-process', 'mcp-proxy-server.js');
|
|
26
|
-
if (existsSync(compiledPath))
|
|
27
|
-
return compiledPath;
|
|
28
|
-
return resolve(__dirname, '..', 'trusted-process', 'mcp-proxy-server.ts');
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Creates a temporary MCP client connection via TCP.
|
|
32
|
-
* Used for listTools() queries in TCP mode.
|
|
33
|
-
*/
|
|
34
|
-
class TcpClientTransport {
|
|
35
|
-
socket = null;
|
|
36
|
-
readBuffer = new ReadBuffer();
|
|
37
|
-
host;
|
|
38
|
-
port;
|
|
39
|
-
onclose;
|
|
40
|
-
onerror;
|
|
41
|
-
onmessage;
|
|
42
|
-
constructor(host, port) {
|
|
43
|
-
this.host = host;
|
|
44
|
-
this.port = port;
|
|
45
|
-
}
|
|
46
|
-
async start() {
|
|
47
|
-
return new Promise((resolve, reject) => {
|
|
48
|
-
this.socket = netConnect({ host: this.host, port: this.port }, () => resolve());
|
|
49
|
-
this.socket.on('error', reject);
|
|
50
|
-
this.socket.on('data', (chunk) => {
|
|
51
|
-
this.readBuffer.append(chunk);
|
|
52
|
-
let message;
|
|
53
|
-
while ((message = this.readBuffer.readMessage()) !== null) {
|
|
54
|
-
this.onmessage?.(message);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
this.socket.on('close', () => this.onclose?.());
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
async send(message) {
|
|
61
|
-
const socket = this.socket;
|
|
62
|
-
if (!socket || socket.destroyed) {
|
|
63
|
-
throw new Error('TCP client not connected');
|
|
64
|
-
}
|
|
65
|
-
return new Promise((resolve, reject) => {
|
|
66
|
-
socket.write(serializeMessage(message), (err) => {
|
|
67
|
-
if (err)
|
|
68
|
-
reject(err);
|
|
69
|
-
else
|
|
70
|
-
resolve();
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
// eslint-disable-next-line @typescript-eslint/require-await -- must be async to satisfy Transport interface
|
|
75
|
-
async close() {
|
|
76
|
-
this.socket?.destroy();
|
|
77
|
-
this.socket = null;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Creates a temporary MCP client connection to the UDS socket.
|
|
82
|
-
* Used for listTools() queries.
|
|
83
|
-
*/
|
|
84
|
-
class UdsClientTransport {
|
|
85
|
-
socket = null;
|
|
86
|
-
readBuffer = new ReadBuffer();
|
|
87
|
-
socketPath;
|
|
88
|
-
onclose;
|
|
89
|
-
onerror;
|
|
90
|
-
onmessage;
|
|
91
|
-
constructor(socketPath) {
|
|
92
|
-
this.socketPath = socketPath;
|
|
93
|
-
}
|
|
94
|
-
async start() {
|
|
95
|
-
return new Promise((resolve, reject) => {
|
|
96
|
-
this.socket = netConnect(this.socketPath, () => resolve());
|
|
97
|
-
this.socket.on('error', reject);
|
|
98
|
-
this.socket.on('data', (chunk) => {
|
|
99
|
-
this.readBuffer.append(chunk);
|
|
100
|
-
let message;
|
|
101
|
-
while ((message = this.readBuffer.readMessage()) !== null) {
|
|
102
|
-
this.onmessage?.(message);
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
this.socket.on('close', () => this.onclose?.());
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
async send(message) {
|
|
109
|
-
const socket = this.socket;
|
|
110
|
-
if (!socket || socket.destroyed) {
|
|
111
|
-
throw new Error('UDS client not connected');
|
|
112
|
-
}
|
|
113
|
-
return new Promise((resolve, reject) => {
|
|
114
|
-
socket.write(serializeMessage(message), (err) => {
|
|
115
|
-
if (err)
|
|
116
|
-
reject(err);
|
|
117
|
-
else
|
|
118
|
-
resolve();
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
// eslint-disable-next-line @typescript-eslint/require-await -- must be async to satisfy Transport interface
|
|
123
|
-
async close() {
|
|
124
|
-
this.socket?.destroy();
|
|
125
|
-
this.socket = null;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
export function createManagedProxy(options) {
|
|
129
|
-
let childProcess = null;
|
|
130
|
-
const useTcp = options.listenMode === 'tcp';
|
|
131
|
-
let resolvedPort;
|
|
132
|
-
// In TCP mode, the proxy writes its port to this file after binding
|
|
133
|
-
const portFilePath = resolve(dirname(options.socketPath), 'proxy-port.txt');
|
|
134
|
-
return {
|
|
135
|
-
socketPath: options.socketPath,
|
|
136
|
-
get port() {
|
|
137
|
-
return resolvedPort;
|
|
138
|
-
},
|
|
139
|
-
async start() {
|
|
140
|
-
// Remove stale port file from a prior crashed run to prevent
|
|
141
|
-
// false readiness during polling.
|
|
142
|
-
if (useTcp) {
|
|
143
|
-
try {
|
|
144
|
-
unlinkSync(portFilePath);
|
|
145
|
-
}
|
|
146
|
-
catch {
|
|
147
|
-
/* file may not exist */
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
const modulePath = getProxyModulePath();
|
|
151
|
-
const isTsSource = modulePath.endsWith('.ts');
|
|
152
|
-
// Fork the proxy process with the appropriate transport env vars
|
|
153
|
-
const env = {
|
|
154
|
-
...process.env,
|
|
155
|
-
...options.env,
|
|
156
|
-
};
|
|
157
|
-
if (useTcp) {
|
|
158
|
-
// Ensure UDS-specific env vars do not leak from the parent environment
|
|
159
|
-
delete env.PROXY_SOCKET_PATH;
|
|
160
|
-
env.PROXY_TCP_PORT = '0'; // OS-assigned port
|
|
161
|
-
env.PROXY_PORT_FILE = portFilePath;
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
// Ensure TCP-specific env vars do not leak from the parent environment
|
|
165
|
-
delete env.PROXY_TCP_PORT;
|
|
166
|
-
delete env.PROXY_PORT_FILE;
|
|
167
|
-
env.PROXY_SOCKET_PATH = options.socketPath;
|
|
168
|
-
}
|
|
169
|
-
const cwd = options.cwd ?? process.cwd();
|
|
170
|
-
if (isTsSource) {
|
|
171
|
-
// In development, use tsx to run TypeScript directly
|
|
172
|
-
const { spawn } = await import('node:child_process');
|
|
173
|
-
childProcess = spawn('npx', ['tsx', modulePath], {
|
|
174
|
-
env,
|
|
175
|
-
cwd,
|
|
176
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
childProcess = fork(modulePath, [], {
|
|
181
|
-
env,
|
|
182
|
-
cwd,
|
|
183
|
-
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
// Capture stderr and exit for diagnostics
|
|
187
|
-
let proxyStderr = '';
|
|
188
|
-
let proxyExited = false;
|
|
189
|
-
let proxyExitCode = null;
|
|
190
|
-
childProcess.stderr?.on('data', (chunk) => {
|
|
191
|
-
proxyStderr += chunk.toString();
|
|
192
|
-
});
|
|
193
|
-
childProcess.on('error', (err) => {
|
|
194
|
-
console.error(`MCP proxy process error: ${err.message}`);
|
|
195
|
-
});
|
|
196
|
-
childProcess.on('exit', (code) => {
|
|
197
|
-
proxyExited = true;
|
|
198
|
-
proxyExitCode = code;
|
|
199
|
-
});
|
|
200
|
-
// Poll for readiness: port file in TCP mode, socket file in UDS mode
|
|
201
|
-
const readinessTarget = useTcp ? portFilePath : options.socketPath;
|
|
202
|
-
const start = Date.now();
|
|
203
|
-
while (!existsSync(readinessTarget)) {
|
|
204
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- mutated by async 'exit' event handler
|
|
205
|
-
if (proxyExited) {
|
|
206
|
-
throw new Error(`MCP proxy process exited with code ${proxyExitCode} before becoming ready.\nStderr: ${proxyStderr}`);
|
|
207
|
-
}
|
|
208
|
-
if (Date.now() - start > SOCKET_READY_TIMEOUT_MS) {
|
|
209
|
-
throw new Error(`MCP proxy did not become ready within ${SOCKET_READY_TIMEOUT_MS}ms.\nStderr: ${proxyStderr}`);
|
|
210
|
-
}
|
|
211
|
-
await delay(SOCKET_POLL_INTERVAL_MS);
|
|
212
|
-
}
|
|
213
|
-
// In TCP mode, read the port from the file
|
|
214
|
-
if (useTcp && portFilePath) {
|
|
215
|
-
const rawPort = readFileSync(portFilePath, 'utf-8').trim();
|
|
216
|
-
const parsedPort = parseInt(rawPort, 10);
|
|
217
|
-
if (!Number.isInteger(parsedPort) || parsedPort <= 0 || parsedPort > 65535) {
|
|
218
|
-
throw new Error(`Invalid TCP port "${rawPort}" read from ${portFilePath}.`);
|
|
219
|
-
}
|
|
220
|
-
resolvedPort = parsedPort;
|
|
221
|
-
}
|
|
222
|
-
},
|
|
223
|
-
async listTools() {
|
|
224
|
-
const transport = useTcp && resolvedPort !== undefined
|
|
225
|
-
? new TcpClientTransport('127.0.0.1', resolvedPort)
|
|
226
|
-
: new UdsClientTransport(options.socketPath);
|
|
227
|
-
const client = new Client({ name: 'ironcurtain-tool-lister', version: VERSION }, {});
|
|
228
|
-
try {
|
|
229
|
-
await client.connect(transport);
|
|
230
|
-
const result = await client.listTools();
|
|
231
|
-
return result.tools.map((t) => ({
|
|
232
|
-
name: t.name,
|
|
233
|
-
description: t.description,
|
|
234
|
-
inputSchema: t.inputSchema,
|
|
235
|
-
}));
|
|
236
|
-
}
|
|
237
|
-
finally {
|
|
238
|
-
try {
|
|
239
|
-
await client.close();
|
|
240
|
-
}
|
|
241
|
-
catch {
|
|
242
|
-
/* ignore cleanup errors */
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
},
|
|
246
|
-
async stop() {
|
|
247
|
-
if (childProcess) {
|
|
248
|
-
childProcess.kill('SIGTERM');
|
|
249
|
-
// Give it a moment to clean up
|
|
250
|
-
await new Promise((resolve) => {
|
|
251
|
-
const timeout = setTimeout(() => {
|
|
252
|
-
childProcess?.kill('SIGKILL');
|
|
253
|
-
resolve();
|
|
254
|
-
}, 3000);
|
|
255
|
-
childProcess?.on('exit', () => {
|
|
256
|
-
clearTimeout(timeout);
|
|
257
|
-
resolve();
|
|
258
|
-
});
|
|
259
|
-
});
|
|
260
|
-
childProcess = null;
|
|
261
|
-
}
|
|
262
|
-
},
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
//# sourceMappingURL=managed-proxy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"managed-proxy.js","sourceRoot":"","sources":["../../src/docker/managed-proxy.ts"],"names":[],"mappings":"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"}
|