@classcad/mcp 0.1.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/LICENSE +21 -0
- package/README.md +361 -0
- package/dist/auth.d.ts +32 -0
- package/dist/auth.js +272 -0
- package/dist/auth.js.map +1 -0
- package/dist/bridge/protocol.d.ts +87 -0
- package/dist/bridge/protocol.js +14 -0
- package/dist/bridge/protocol.js.map +1 -0
- package/dist/bridge/server.d.ts +35 -0
- package/dist/bridge/server.js +236 -0
- package/dist/bridge/server.js.map +1 -0
- package/dist/client.d.ts +98 -0
- package/dist/client.js +879 -0
- package/dist/client.js.map +1 -0
- package/dist/daemon.d.ts +38 -0
- package/dist/daemon.js +390 -0
- package/dist/daemon.js.map +1 -0
- package/dist/engine/wasm-worker.d.ts +1 -0
- package/dist/engine/wasm-worker.js +176 -0
- package/dist/engine/wasm-worker.js.map +1 -0
- package/dist/engine/wasm.d.ts +60 -0
- package/dist/engine/wasm.js +212 -0
- package/dist/engine/wasm.js.map +1 -0
- package/dist/mcp-server.d.ts +23 -0
- package/dist/mcp-server.js +141 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/ports.d.ts +2 -0
- package/dist/ports.js +5 -0
- package/dist/ports.js.map +1 -0
- package/dist/queue.d.ts +9 -0
- package/dist/queue.js +50 -0
- package/dist/queue.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.js +423 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/auth.d.ts +7 -0
- package/dist/tools/auth.js +63 -0
- package/dist/tools/auth.js.map +1 -0
- package/dist/tools/bridge.d.ts +4 -0
- package/dist/tools/bridge.js +115 -0
- package/dist/tools/bridge.js.map +1 -0
- package/dist/tools/docs.d.ts +13 -0
- package/dist/tools/docs.js +180 -0
- package/dist/tools/docs.js.map +1 -0
- package/dist/tools/lifecycle.d.ts +3 -0
- package/dist/tools/lifecycle.js +156 -0
- package/dist/tools/lifecycle.js.map +1 -0
- package/dist/tools/script.d.ts +3 -0
- package/dist/tools/script.js +102 -0
- package/dist/tools/script.js.map +1 -0
- package/dist/tools/snapshot.d.ts +3 -0
- package/dist/tools/snapshot.js +174 -0
- package/dist/tools/snapshot.js.map +1 -0
- package/dist/tools/state.d.ts +3 -0
- package/dist/tools/state.js +95 -0
- package/dist/tools/state.js.map +1 -0
- package/dist/types.d.ts +46 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import type { EnginePolicy } from './client.js';
|
|
3
|
+
import { type LocalWasmOptions } from './engine/wasm.js';
|
|
4
|
+
import { DEFAULT_DAEMON_PORT } from './ports.js';
|
|
5
|
+
export declare const DAEMON_HOST = "127.0.0.1";
|
|
6
|
+
/**
|
|
7
|
+
* Build stamp of the daemon code: the newest mtime of daemon.js and the
|
|
8
|
+
* workspace packages it runs (renderer, script). The package version only
|
|
9
|
+
* changes on releases; during development every `npm run build` must make the
|
|
10
|
+
* next shim replace a running (idle) daemon, so /health reports the stamp the
|
|
11
|
+
* daemon STARTED with and the shim compares it with the files on disk now.
|
|
12
|
+
*/
|
|
13
|
+
export declare function daemonBuildStamp(): string;
|
|
14
|
+
export { DEFAULT_DAEMON_PORT };
|
|
15
|
+
export declare const DEFAULT_BRIDGE_LISTEN = "ws://127.0.0.1:9096/bridge";
|
|
16
|
+
/** Exit after this long without any session (ms). */
|
|
17
|
+
export declare const DEFAULT_IDLE_MS = 60000;
|
|
18
|
+
export type DaemonOptions = {
|
|
19
|
+
port?: number;
|
|
20
|
+
wsUrl?: string;
|
|
21
|
+
bridgeListen?: string;
|
|
22
|
+
idleMs?: number;
|
|
23
|
+
/** Where to log (a file path); undefined = stderr. */
|
|
24
|
+
logFile?: string;
|
|
25
|
+
/** Default engine policy for sessions that do not name one. */
|
|
26
|
+
engine?: EnginePolicy;
|
|
27
|
+
/** Default local WASM settings (a session may pass its own key/origin in headers). */
|
|
28
|
+
wasm?: LocalWasmOptions | null;
|
|
29
|
+
};
|
|
30
|
+
export type DaemonHandle = {
|
|
31
|
+
url: string;
|
|
32
|
+
port: number;
|
|
33
|
+
close: () => Promise<void>;
|
|
34
|
+
};
|
|
35
|
+
/** Starts the daemon; resolves once the HTTP port is bound. Rejects (EADDRINUSE etc.) otherwise. */
|
|
36
|
+
export declare function startDaemon(opts?: DaemonOptions): Promise<DaemonHandle>;
|
|
37
|
+
/** Default log file of a detached daemon (stderr is not connected then). */
|
|
38
|
+
export declare function defaultDaemonLogFile(): string;
|
package/dist/daemon.js
ADDED
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// daemon.ts — the one ClassCAD MCP process per machine.
|
|
3
|
+
//
|
|
4
|
+
// Why a daemon: stdio MCP servers are child processes of their host, one per
|
|
5
|
+
// Claude tab. That was fine while the MCP was only a WebSocket client of a
|
|
6
|
+
// ClassCAD worker. With the app bridge it also LISTENS (apps announce share
|
|
7
|
+
// tokens on ws://127.0.0.1:9096/bridge), and a listening port belongs to
|
|
8
|
+
// exactly one process — a second tab would either fail to bind or, worse,
|
|
9
|
+
// bind the other address family of "localhost" and receive half the apps.
|
|
10
|
+
//
|
|
11
|
+
// So the MCP itself is a thin stdio shim (server.ts) that finds or starts
|
|
12
|
+
// this daemon and forwards its host's JSON-RPC to it over HTTP (MCP
|
|
13
|
+
// Streamable HTTP transport). The daemon holds:
|
|
14
|
+
// • the single bridge listener,
|
|
15
|
+
// • one MCP server instance PER SESSION — every tab gets its own engine
|
|
16
|
+
// client, emission config, caches and tool queue (mcp-server.ts),
|
|
17
|
+
// • an idle timer: with no sessions and no app attached it exits by itself
|
|
18
|
+
// (a Drogon-only user never notices it; a WASM user has it running while
|
|
19
|
+
// a tab is shared).
|
|
20
|
+
//
|
|
21
|
+
// HTTP surface (127.0.0.1 only; requests with an Origin header or a
|
|
22
|
+
// non-loopback Host are refused with 403 — no browser may drive it):
|
|
23
|
+
// GET /health → { name:'classcad-mcp', version, build, pid, sessions, apps, bridge, bridgeListen, logFile, uptimeMs }
|
|
24
|
+
// POST /shutdown → exits when no session is active (409 otherwise);
|
|
25
|
+
// ?drain=1 → stops taking NEW sessions (503) and exits as
|
|
26
|
+
// soon as the current ones are gone (a newer build waits)
|
|
27
|
+
// POST/GET/DELETE /mcp → MCP Streamable HTTP (session id in mcp-session-id)
|
|
28
|
+
// A shim may pass `x-classcad-ws-url` on its initialize request to choose the
|
|
29
|
+
// worker URL for that session (defaults to the daemon's CLASSCAD_WS_URL).
|
|
30
|
+
import { createServer } from 'node:http';
|
|
31
|
+
import { randomUUID } from 'node:crypto';
|
|
32
|
+
import { appendFileSync, mkdirSync, statSync } from 'node:fs';
|
|
33
|
+
import { join, dirname } from 'node:path';
|
|
34
|
+
import { tmpdir } from 'node:os';
|
|
35
|
+
import { fileURLToPath } from 'node:url';
|
|
36
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
37
|
+
import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
38
|
+
import { createMcpServer, DEFAULT_WS_URL, VERSION } from './mcp-server.js';
|
|
39
|
+
import { startBridgeServer } from './bridge/server.js';
|
|
40
|
+
import { wasmOptionsFromEnv } from './engine/wasm.js';
|
|
41
|
+
import { DEFAULT_DAEMON_PORT } from './ports.js';
|
|
42
|
+
export const DAEMON_HOST = '127.0.0.1';
|
|
43
|
+
/** Code the daemon loads besides its own dist: a rebuild of any of them is a new build. */
|
|
44
|
+
const BUILD_DEPENDENCIES = ['@classcad/renderer/node', '@classcad/script'];
|
|
45
|
+
/**
|
|
46
|
+
* Build stamp of the daemon code: the newest mtime of daemon.js and the
|
|
47
|
+
* workspace packages it runs (renderer, script). The package version only
|
|
48
|
+
* changes on releases; during development every `npm run build` must make the
|
|
49
|
+
* next shim replace a running (idle) daemon, so /health reports the stamp the
|
|
50
|
+
* daemon STARTED with and the shim compares it with the files on disk now.
|
|
51
|
+
*/
|
|
52
|
+
export function daemonBuildStamp() {
|
|
53
|
+
// Test hook: lets the daemon contract simulate "another build".
|
|
54
|
+
if (process.env.CLASSCAD_MCP_BUILD)
|
|
55
|
+
return process.env.CLASSCAD_MCP_BUILD;
|
|
56
|
+
const files = [import.meta.url];
|
|
57
|
+
for (const dep of BUILD_DEPENDENCIES) {
|
|
58
|
+
try {
|
|
59
|
+
files.push(import.meta.resolve(dep));
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
/* not resolvable from here: only daemon.js counts */
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
let newest = 0;
|
|
66
|
+
for (const file of files) {
|
|
67
|
+
try {
|
|
68
|
+
newest = Math.max(newest, statSync(fileURLToPath(file)).mtimeMs);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
/* missing file: ignore */
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return newest > 0 ? new Date(newest).toISOString() : 'unknown';
|
|
75
|
+
}
|
|
76
|
+
const LOOPBACK_HOSTNAMES = new Set(['127.0.0.1', 'localhost', '[::1]']);
|
|
77
|
+
/**
|
|
78
|
+
* Only local non-browser clients (the shims, curl, the CLI) may talk to the
|
|
79
|
+
* daemon. Binding 127.0.0.1 keeps the network out but not web pages: a page can
|
|
80
|
+
* fire simple requests at loopback, and DNS rebinding makes it same-origin.
|
|
81
|
+
* Browsers always send Origin on POST and cross-origin requests, and a rebound
|
|
82
|
+
* request carries the attacker's hostname in Host — reject both.
|
|
83
|
+
*/
|
|
84
|
+
function isLoopbackClient(req) {
|
|
85
|
+
if (req.headers.origin !== undefined)
|
|
86
|
+
return false;
|
|
87
|
+
const host = req.headers.host;
|
|
88
|
+
if (!host)
|
|
89
|
+
return false;
|
|
90
|
+
try {
|
|
91
|
+
return LOOPBACK_HOSTNAMES.has(new URL(`http://${host}`).hostname);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export { DEFAULT_DAEMON_PORT };
|
|
98
|
+
export const DEFAULT_BRIDGE_LISTEN = 'ws://127.0.0.1:9096/bridge';
|
|
99
|
+
/** Exit after this long without any session (ms). */
|
|
100
|
+
export const DEFAULT_IDLE_MS = 60_000;
|
|
101
|
+
/** Retry interval when the bridge port is taken (ms). */
|
|
102
|
+
const BRIDGE_RETRY_MS = 5_000;
|
|
103
|
+
function makeLog(logFile) {
|
|
104
|
+
if (!logFile)
|
|
105
|
+
return msg => process.stderr.write(`[classcad-mcp daemon] ${msg}\n`);
|
|
106
|
+
try {
|
|
107
|
+
mkdirSync(dirname(logFile), { recursive: true });
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
/* best effort */
|
|
111
|
+
}
|
|
112
|
+
return msg => {
|
|
113
|
+
try {
|
|
114
|
+
appendFileSync(logFile, `${new Date().toISOString()} ${msg}\n`);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
/* never fail on logging */
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function readJsonBody(req) {
|
|
122
|
+
return new Promise((resolve, reject) => {
|
|
123
|
+
const chunks = [];
|
|
124
|
+
req.on('data', c => chunks.push(Buffer.isBuffer(c) ? c : Buffer.from(c)));
|
|
125
|
+
req.on('end', () => {
|
|
126
|
+
if (chunks.length === 0)
|
|
127
|
+
return resolve(undefined);
|
|
128
|
+
try {
|
|
129
|
+
resolve(JSON.parse(Buffer.concat(chunks).toString('utf8')));
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
reject(e);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
req.on('error', reject);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
function sendJson(res, status, body) {
|
|
139
|
+
const text = JSON.stringify(body);
|
|
140
|
+
res.writeHead(status, { 'content-type': 'application/json', 'content-length': Buffer.byteLength(text) });
|
|
141
|
+
res.end(text);
|
|
142
|
+
}
|
|
143
|
+
/** Starts the daemon; resolves once the HTTP port is bound. Rejects (EADDRINUSE etc.) otherwise. */
|
|
144
|
+
export async function startDaemon(opts = {}) {
|
|
145
|
+
const port = opts.port ?? DEFAULT_DAEMON_PORT;
|
|
146
|
+
const wsUrl = opts.wsUrl ?? DEFAULT_WS_URL;
|
|
147
|
+
const bridgeListen = opts.bridgeListen ?? DEFAULT_BRIDGE_LISTEN;
|
|
148
|
+
const idleMs = opts.idleMs ?? DEFAULT_IDLE_MS;
|
|
149
|
+
const log = makeLog(opts.logFile);
|
|
150
|
+
const startedAt = Date.now();
|
|
151
|
+
// Taken once: the code this process runs, not whatever a later build left on disk.
|
|
152
|
+
const build = daemonBuildStamp();
|
|
153
|
+
// The bridge listener: one per machine, hence one per daemon. Apps announce
|
|
154
|
+
// their share tokens here; sessions attach to them through the registry.
|
|
155
|
+
// If the port is taken (typically an MCP of the previous, pre-daemon build
|
|
156
|
+
// that a still-open tab keeps alive) the daemon runs without a bridge and
|
|
157
|
+
// keeps retrying: as soon as the old process is gone the listener comes up,
|
|
158
|
+
// no restart needed.
|
|
159
|
+
let bridgeRegistry = null;
|
|
160
|
+
let bridgeRetry = null;
|
|
161
|
+
let closing = false;
|
|
162
|
+
// Draining: a newer build asked us to go. Existing sessions run to their
|
|
163
|
+
// end, new ones are refused, exit right after the last one closes.
|
|
164
|
+
let draining = false;
|
|
165
|
+
const bindBridge = async () => {
|
|
166
|
+
try {
|
|
167
|
+
bridgeRegistry = await startBridgeServer({ listen: bridgeListen, log });
|
|
168
|
+
log(`bridge listener on ${bridgeRegistry.url}`);
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
log(`bridge listener failed (${bridgeListen}): ${err instanceof Error ? err.message : err} — retrying every ${BRIDGE_RETRY_MS / 1000}s`);
|
|
172
|
+
if (!closing)
|
|
173
|
+
bridgeRetry = setTimeout(() => void bindBridge(), BRIDGE_RETRY_MS);
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
await bindBridge();
|
|
177
|
+
const sessions = new Map();
|
|
178
|
+
let idleTimer = null;
|
|
179
|
+
// "Idle" = no MCP session AND no app holding a bridge connection. A shared
|
|
180
|
+
// WASM tab counts as use: its bridge must stay up so the next tab's
|
|
181
|
+
// use_session attaches at once instead of waiting for the app's reconnect
|
|
182
|
+
// backoff. The registry has no change event, so the timer re-checks itself.
|
|
183
|
+
const appCount = () => bridgeRegistry?.list().length ?? 0;
|
|
184
|
+
const armIdle = () => {
|
|
185
|
+
if (idleTimer)
|
|
186
|
+
clearTimeout(idleTimer);
|
|
187
|
+
idleTimer = setTimeout(() => {
|
|
188
|
+
if (closing || sessions.size > 0)
|
|
189
|
+
return;
|
|
190
|
+
if (appCount() > 0) {
|
|
191
|
+
armIdle();
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
log(`idle for ${idleMs} ms with no sessions and no apps — exiting`);
|
|
195
|
+
void shutdown(0);
|
|
196
|
+
}, idleMs);
|
|
197
|
+
};
|
|
198
|
+
const disarmIdle = () => {
|
|
199
|
+
if (idleTimer)
|
|
200
|
+
clearTimeout(idleTimer);
|
|
201
|
+
idleTimer = null;
|
|
202
|
+
};
|
|
203
|
+
const dropSession = (id, why) => {
|
|
204
|
+
const s = sessions.get(id);
|
|
205
|
+
if (!s)
|
|
206
|
+
return;
|
|
207
|
+
sessions.delete(id);
|
|
208
|
+
try {
|
|
209
|
+
s.client.close();
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
/* already closed */
|
|
213
|
+
}
|
|
214
|
+
log(`session ${id} closed (${why}); ${sessions.size} left`);
|
|
215
|
+
if (sessions.size === 0) {
|
|
216
|
+
if (draining) {
|
|
217
|
+
log('drained — exiting for the newer build');
|
|
218
|
+
setTimeout(() => void shutdown(0), 50);
|
|
219
|
+
}
|
|
220
|
+
else
|
|
221
|
+
armIdle();
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
const httpServer = createServer(async (req, res) => {
|
|
225
|
+
try {
|
|
226
|
+
if (!isLoopbackClient(req)) {
|
|
227
|
+
log(`refused ${req.method} ${req.url} (host ${req.headers.host ?? '-'}, origin ${req.headers.origin ?? '-'})`);
|
|
228
|
+
sendJson(res, 403, { error: 'forbidden: local non-browser clients only' });
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
const url = new URL(req.url ?? '/', `http://${DAEMON_HOST}`);
|
|
232
|
+
if (url.pathname === '/health') {
|
|
233
|
+
sendJson(res, 200, {
|
|
234
|
+
name: 'classcad-mcp',
|
|
235
|
+
version: VERSION,
|
|
236
|
+
build,
|
|
237
|
+
pid: process.pid,
|
|
238
|
+
sessions: sessions.size,
|
|
239
|
+
draining,
|
|
240
|
+
apps: appCount(),
|
|
241
|
+
bridge: bridgeRegistry?.url ?? null,
|
|
242
|
+
bridgeListen,
|
|
243
|
+
logFile: opts.logFile ?? null,
|
|
244
|
+
uptimeMs: Date.now() - startedAt,
|
|
245
|
+
});
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
if (url.pathname === '/shutdown' && req.method === 'POST') {
|
|
249
|
+
if (sessions.size > 0) {
|
|
250
|
+
if (url.searchParams.get('drain') === '1') {
|
|
251
|
+
draining = true;
|
|
252
|
+
log(`draining: ${sessions.size} session(s) keep running, no new ones; exit when they are gone`);
|
|
253
|
+
sendJson(res, 202, { ok: true, draining: true, sessions: sessions.size });
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
sendJson(res, 409, { ok: false, sessions: sessions.size, error: 'sessions active' });
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
sendJson(res, 200, { ok: true });
|
|
260
|
+
log('shutdown requested');
|
|
261
|
+
setTimeout(() => void shutdown(0), 50);
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
if (url.pathname !== '/mcp') {
|
|
265
|
+
sendJson(res, 404, { error: 'not found' });
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
const sid = typeof req.headers['mcp-session-id'] === 'string' ? req.headers['mcp-session-id'] : undefined;
|
|
269
|
+
if (sid) {
|
|
270
|
+
const s = sessions.get(sid);
|
|
271
|
+
if (!s) {
|
|
272
|
+
sendJson(res, 404, { jsonrpc: '2.0', error: { code: -32001, message: 'Session not found' }, id: null });
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
const body = req.method === 'POST' ? await readJsonBody(req) : undefined;
|
|
276
|
+
await s.transport.handleRequest(req, res, body);
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
if (req.method !== 'POST') {
|
|
280
|
+
sendJson(res, 400, { jsonrpc: '2.0', error: { code: -32000, message: 'Bad request: no session' }, id: null });
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
const body = await readJsonBody(req);
|
|
284
|
+
if (!isInitializeRequest(body)) {
|
|
285
|
+
sendJson(res, 400, { jsonrpc: '2.0', error: { code: -32000, message: 'Bad request: expected initialize' }, id: null });
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
if (draining) {
|
|
289
|
+
sendJson(res, 503, { jsonrpc: '2.0', error: { code: -32000, message: 'daemon is draining (a newer build is waiting)' }, id: null });
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
// A new MCP session: its own server instance and engine client. The shim
|
|
293
|
+
// may name the worker, the engine policy and the local-WASM key/origin it
|
|
294
|
+
// was configured with (loopback headers; the daemon's own env is the default).
|
|
295
|
+
const hdr = (name) => {
|
|
296
|
+
const v = req.headers[name];
|
|
297
|
+
return typeof v === 'string' && v.length > 0 ? v : undefined;
|
|
298
|
+
};
|
|
299
|
+
const sessionWsUrl = hdr('x-classcad-ws-url') ?? wsUrl;
|
|
300
|
+
const enginePolicy = hdr('x-classcad-engine') ?? opts.engine ?? 'auto';
|
|
301
|
+
const key = hdr('x-classcad-wasm-key') ?? opts.wasm?.key;
|
|
302
|
+
const sessionWasm = key
|
|
303
|
+
? { ...(opts.wasm ?? { key }), key, origin: hdr('x-classcad-wasm-origin') ?? opts.wasm?.origin }
|
|
304
|
+
: null;
|
|
305
|
+
const sessionLog = (msg) => log(`[${transport.sessionId ?? 'new'}] ${msg}`);
|
|
306
|
+
const { server, client } = await createMcpServer({ wsUrl: sessionWsUrl, bridge: () => bridgeRegistry, engine: enginePolicy, wasm: sessionWasm, log: sessionLog });
|
|
307
|
+
const transport = new StreamableHTTPServerTransport({
|
|
308
|
+
sessionIdGenerator: () => randomUUID(),
|
|
309
|
+
onsessioninitialized: id => {
|
|
310
|
+
disarmIdle();
|
|
311
|
+
sessions.set(id, { transport, server, client, createdAt: Date.now() });
|
|
312
|
+
log(`session ${id} opened (worker ${sessionWsUrl}, engine ${enginePolicy}, local wasm ${sessionWasm ? 'available' : 'no key'}); ${sessions.size} active`);
|
|
313
|
+
},
|
|
314
|
+
});
|
|
315
|
+
transport.onclose = () => {
|
|
316
|
+
if (transport.sessionId)
|
|
317
|
+
dropSession(transport.sessionId, 'transport closed');
|
|
318
|
+
};
|
|
319
|
+
await server.connect(transport);
|
|
320
|
+
await transport.handleRequest(req, res, body);
|
|
321
|
+
}
|
|
322
|
+
catch (err) {
|
|
323
|
+
log(`request failed: ${err instanceof Error ? err.stack ?? err.message : err}`);
|
|
324
|
+
if (!res.headersSent)
|
|
325
|
+
sendJson(res, 500, { error: err instanceof Error ? err.message : String(err) });
|
|
326
|
+
else
|
|
327
|
+
res.end();
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
await new Promise((resolve, reject) => {
|
|
331
|
+
httpServer.once('error', reject);
|
|
332
|
+
httpServer.listen(port, DAEMON_HOST, () => {
|
|
333
|
+
httpServer.off('error', reject);
|
|
334
|
+
resolve();
|
|
335
|
+
});
|
|
336
|
+
});
|
|
337
|
+
const url = `http://${DAEMON_HOST}:${port}`;
|
|
338
|
+
log(`daemon ${VERSION} pid ${process.pid} listening on ${url}`);
|
|
339
|
+
armIdle();
|
|
340
|
+
const shutdown = async (code) => {
|
|
341
|
+
if (closing)
|
|
342
|
+
return;
|
|
343
|
+
closing = true;
|
|
344
|
+
disarmIdle();
|
|
345
|
+
if (bridgeRetry)
|
|
346
|
+
clearTimeout(bridgeRetry);
|
|
347
|
+
for (const [id] of sessions)
|
|
348
|
+
dropSession(id, 'daemon shutdown');
|
|
349
|
+
if (bridgeRegistry)
|
|
350
|
+
await bridgeRegistry.close().catch(() => { });
|
|
351
|
+
await new Promise(r => httpServer.close(() => r()));
|
|
352
|
+
log('stopped');
|
|
353
|
+
if (process.env.CLASSCAD_MCP_DAEMON === '1')
|
|
354
|
+
process.exit(code);
|
|
355
|
+
};
|
|
356
|
+
process.once('SIGINT', () => void shutdown(0));
|
|
357
|
+
process.once('SIGTERM', () => void shutdown(0));
|
|
358
|
+
return { url, port, close: () => shutdown(0) };
|
|
359
|
+
}
|
|
360
|
+
/** Default log file of a detached daemon (stderr is not connected then). */
|
|
361
|
+
export function defaultDaemonLogFile() {
|
|
362
|
+
return join(tmpdir(), 'classcad-mcp', 'daemon.log');
|
|
363
|
+
}
|
|
364
|
+
// Run directly: `node dist/daemon.js` (what the shim spawns, detached).
|
|
365
|
+
const isMain = (() => {
|
|
366
|
+
try {
|
|
367
|
+
return process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1];
|
|
368
|
+
}
|
|
369
|
+
catch {
|
|
370
|
+
return false;
|
|
371
|
+
}
|
|
372
|
+
})();
|
|
373
|
+
if (isMain) {
|
|
374
|
+
const port = Number(process.env.CLASSCAD_MCP_PORT ?? DEFAULT_DAEMON_PORT);
|
|
375
|
+
startDaemon({
|
|
376
|
+
port,
|
|
377
|
+
wsUrl: process.env.CLASSCAD_WS_URL,
|
|
378
|
+
bridgeListen: process.env.CLASSCAD_BRIDGE_LISTEN,
|
|
379
|
+
idleMs: process.env.CLASSCAD_DAEMON_IDLE_MS ? Number(process.env.CLASSCAD_DAEMON_IDLE_MS) : undefined,
|
|
380
|
+
logFile: process.env.CLASSCAD_MCP_LOG ?? (process.env.CLASSCAD_MCP_DAEMON === '1' ? defaultDaemonLogFile() : undefined),
|
|
381
|
+
engine: process.env.CLASSCAD_ENGINE,
|
|
382
|
+
wasm: wasmOptionsFromEnv(),
|
|
383
|
+
}).catch(err => {
|
|
384
|
+
// Typically EADDRINUSE: another daemon won the race, or a foreign program
|
|
385
|
+
// holds the port. The shim polls /health and decides what to do.
|
|
386
|
+
process.stderr.write(`[classcad-mcp daemon] cannot start on ${DAEMON_HOST}:${port}: ${err?.message ?? err}\n`);
|
|
387
|
+
process.exit(3);
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|