sdl-mcp 0.11.12 → 0.11.13

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.
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA4D3C,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAibvE"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA6E3C,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmbvE"}
@@ -18,6 +18,7 @@ import { ShutdownManager } from "../../util/shutdown.js";
18
18
  import { installProcessHandlers } from "../../startup/process-handlers.js";
19
19
  import { findExistingProcess, formatExistingProcessMessage, removePidfile, writePidfile, } from "../../util/pidfile.js";
20
20
  import { enableFileLogging, getLogFilePath, logger, shutdownLogger, } from "../../util/logger.js";
21
+ import { safeWriteStderr } from "../../util/stdio-safety.js";
21
22
  import { configureToolDispatchLimiter } from "../../mcp/dispatch-limiter.js";
22
23
  import { isIndexingActive } from "../../mcp/indexing-gate.js";
23
24
  import { SessionManager } from "../../mcp/session-manager.js";
@@ -27,6 +28,17 @@ import { recoverStaleDerivedStateOnStartup } from "../../startup/derived-state-r
27
28
  import { loadConfiguredAdapterPlugins } from "../../startup/plugins.js";
28
29
  import { detectCpuProfile } from "../../util/cpu-detect.js";
29
30
  import { BeamExplainStore, createObservabilityService, installObservabilityTap, setBeamExplainStore, startRuntimeProbes, stopRuntimeProbes, } from "../../observability/index.js";
31
+ function writeStderrLine(message) {
32
+ return safeWriteStderr(`${message}\n`);
33
+ }
34
+ async function closeDbAfterStartupFailure() {
35
+ try {
36
+ await closeLadybugDb();
37
+ }
38
+ catch (error) {
39
+ writeStderrLine(`[sdl-mcp] LadybugDB cleanup after startup failure failed: ${error instanceof Error ? error.message : String(error)}`);
40
+ }
41
+ }
30
42
  export async function serveCommand(options) {
31
43
  if (options.transport === "http" && options.dashboardPort !== undefined) {
32
44
  throw new Error("--dashboard-port can only be used with --stdio");
@@ -41,6 +53,67 @@ export async function serveCommand(options) {
41
53
  if (!getLogFilePath()) {
42
54
  enableFileLogging();
43
55
  }
56
+ const transport = options.transport === "stdio" ? "stdio" : "http";
57
+ let pidfilePath;
58
+ const watchers = [];
59
+ let idleMonitor;
60
+ let walMaintenance;
61
+ let stdioServer;
62
+ let observabilityService = null;
63
+ let beamExplainStore = null;
64
+ let httpHandle;
65
+ let dashboardHandle;
66
+ const shutdownMgr = new ShutdownManager({
67
+ log: (msg) => safeWriteStderr(`[sdl-mcp] ${msg}\n`),
68
+ });
69
+ const writeServeStderrLine = (message) => {
70
+ if (!writeStderrLine(message)) {
71
+ void shutdownMgr.shutdown("stdio pipe error", 1);
72
+ }
73
+ };
74
+ const uninstallProcessHandlers = installProcessHandlers(shutdownMgr);
75
+ shutdownMgr.addCleanup("processHandlers", uninstallProcessHandlers);
76
+ shutdownMgr.addCleanup("idleMonitor", () => {
77
+ idleMonitor?.stop();
78
+ });
79
+ shutdownMgr.addCleanup("walMaintenance", () => {
80
+ walMaintenance?.stop();
81
+ });
82
+ shutdownMgr.addCleanup("observability", () => {
83
+ stopRuntimeProbes();
84
+ observabilityService?.stop();
85
+ });
86
+ shutdownMgr.addCleanup("server", () => stdioServer?.stop());
87
+ shutdownMgr.addCleanup("observabilityDashboard", () => dashboardHandle?.close());
88
+ shutdownMgr.addCleanup("httpServer", () => httpHandle?.close());
89
+ shutdownMgr.addCleanup("persistUsage", async () => {
90
+ try {
91
+ if (tokenAccumulator.hasUsage) {
92
+ await persistUsageSnapshot(tokenAccumulator.getSnapshot());
93
+ }
94
+ }
95
+ catch (err) {
96
+ // Non-critical — don't block shutdown.
97
+ writeServeStderrLine("[sdl-mcp] Failed to persist usage snapshot: " +
98
+ (err instanceof Error ? err.message : String(err)));
99
+ }
100
+ });
101
+ shutdownMgr.addCleanup("watchers", async () => {
102
+ for (const watcher of watchers) {
103
+ try {
104
+ await watcher.close();
105
+ }
106
+ catch (error) {
107
+ writeServeStderrLine(`[sdl-mcp] Watcher close error during shutdown: ${error}`);
108
+ }
109
+ }
110
+ });
111
+ shutdownMgr.addCleanup("db", () => closeLadybugDb());
112
+ shutdownMgr.addCleanup("logger", () => shutdownLogger());
113
+ shutdownMgr.registerSignals(); // SIGINT, SIGTERM, SIGHUP
114
+ if (options.transport === "stdio") {
115
+ shutdownMgr.monitorStdin();
116
+ }
44
117
  const configPath = activateCliConfigPath(options.config);
45
118
  const configSource = options.config
46
119
  ? "--config flag"
@@ -49,7 +122,7 @@ export async function serveCommand(options) {
49
122
  : process.env.SDL_CONFIG_PATH
50
123
  ? "SDL_CONFIG_PATH"
51
124
  : "auto-discovery";
52
- console.error(`[sdl-mcp] Config: ${configPath} (${configSource})`);
125
+ writeServeStderrLine(`[sdl-mcp] Config: ${configPath} (${configSource})`);
53
126
  const config = loadConfig(configPath);
54
127
  configureLogger(options.logLevel ?? "info", options.logFormat ?? "pretty");
55
128
  // Log detected CPU tier for observability.
@@ -57,7 +130,7 @@ export async function serveCommand(options) {
57
130
  const effectiveTier = config.performanceTier === "auto"
58
131
  ? cpuProfile.detectedTier
59
132
  : config.performanceTier;
60
- console.error(`[sdl-mcp] CPU tier: ${effectiveTier} (${cpuProfile.logicalCores} logical cores` +
133
+ writeServeStderrLine(`[sdl-mcp] CPU tier: ${effectiveTier} (${cpuProfile.logicalCores} logical cores` +
61
134
  (cpuProfile.physicalCores
62
135
  ? `, ~${cpuProfile.physicalCores} physical`
63
136
  : "") +
@@ -66,10 +139,10 @@ export async function serveCommand(options) {
66
139
  // repro environment looks like. These envs are the standard isolation
67
140
  // levers when investigating native-layer aborts.
68
141
  if (process.env.SDL_MCP_DISABLE_NATIVE_ADDON) {
69
- console.error("[sdl-mcp] SDL_MCP_DISABLE_NATIVE_ADDON is set — Rust indexer & SCIP native decoder disabled (TS fallback active). Use this to isolate native-addon crashes.");
142
+ writeServeStderrLine("[sdl-mcp] SDL_MCP_DISABLE_NATIVE_ADDON is set — Rust indexer & SCIP native decoder disabled (TS fallback active). Use this to isolate native-addon crashes.");
70
143
  }
71
144
  if (process.execArgv.some((a) => a.includes("abort-on-uncaught-exception"))) {
72
- console.error("[sdl-mcp] Node started with --abort-on-uncaught-exception — uncaught errors will produce a core dump (set NODE_OPTIONS=--abort-on-uncaught-exception or pass the flag on the shebang line to enable).");
145
+ writeServeStderrLine("[sdl-mcp] Node started with --abort-on-uncaught-exception — uncaught errors will produce a core dump (set NODE_OPTIONS=--abort-on-uncaught-exception or pass the flag on the shebang line to enable).");
73
146
  }
74
147
  // Wire concurrency configuration from config file
75
148
  const concurrency = config.concurrency;
@@ -99,255 +172,200 @@ export async function serveCommand(options) {
99
172
  : config.graphDatabase?.path
100
173
  ? "config"
101
174
  : "default (beside config)";
102
- console.error(`[sdl-mcp] Graph DB: ${graphDbPath} (${graphDbSource})`);
175
+ writeServeStderrLine(`[sdl-mcp] Graph DB: ${graphDbPath} (${graphDbSource})`);
103
176
  // Check for an existing live server process (stale PIDs are auto-cleaned).
104
177
  const existing = findExistingProcess(graphDbPath);
105
178
  if (existing) {
106
- console.error(formatExistingProcessMessage(graphDbPath, existing));
179
+ writeServeStderrLine(formatExistingProcessMessage(graphDbPath, existing));
107
180
  process.exit(1);
108
181
  }
109
182
  // Claim the singleton + pidfile BEFORE opening the WAL so two concurrent
110
183
  // stdio servers cannot both open the DB and corrupt it (issue #19).
111
184
  // HTTP transport re-writes the pidfile after listen() with the bound port.
112
- const transport = options.transport === "stdio" ? "stdio" : "http";
113
- let pidfilePath = writePidfile(graphDbPath, transport);
114
- console.error(`PID file written: ${pidfilePath}`);
115
- await initGraphDb(config, configPath);
116
- await loadConfiguredAdapterPlugins(config, configPath, (message) => {
117
- console.error(message);
118
- });
119
- await ensureConfiguredReposRegistered(config, (message) => {
120
- console.error(message);
121
- });
122
- await recoverStaleDerivedStateOnStartup(config, (message) => {
123
- console.error(message);
124
- });
125
- await startPrefetchPolicy(config);
126
- // Pre-warm the local embeddings ONNX session if semantic search is on.
127
- // First semantic call paid ~2.7s for session creation; subsequent calls
128
- // were sub-300ms. Fire-and-forget so serve startup is unaffected.
129
- if (config.semantic?.provider === "local") {
130
- queueMicrotask(async () => {
131
- try {
132
- const { getEmbeddingProvider } = await import("../../indexer/embeddings.js");
133
- const modelPlan = resolveSemanticEmbeddingModelPlan(config.semantic);
134
- const warmupModels = [
135
- ...new Set([
136
- ...modelPlan.symbolEmbeddingModels,
137
- ...modelPlan.fileSummaryEmbeddingModels,
138
- ]),
139
- ];
140
- if (warmupModels.length === 0) {
141
- return;
142
- }
143
- for (const model of warmupModels) {
144
- const provider = getEmbeddingProvider("local", model);
145
- await provider.embed(["sdl-mcp warmup"]);
146
- }
147
- logger.debug("[serve] embeddings sessions pre-warmed", {
148
- models: warmupModels,
149
- });
150
- }
151
- catch (err) {
152
- logger.debug("[serve] embeddings warmup skipped", {
153
- error: err instanceof Error ? err.message : String(err),
154
- });
155
- }
156
- });
185
+ pidfilePath = writePidfile(graphDbPath, transport);
186
+ writeServeStderrLine(`PID file written: ${pidfilePath}`);
187
+ shutdownMgr.setPidfilePath(pidfilePath);
188
+ await new Promise((resolve) => setImmediate(resolve));
189
+ if (options.transport === "stdio" && !safeWriteStderr("")) {
190
+ void shutdownMgr.shutdown("stdio pipe error", 1);
157
191
  }
158
- const watchers = [];
159
- if (config.indexing?.enableFileWatching && !options.noWatch) {
160
- console.error(`Starting file watchers for ${config.repos.length} repo(s)...`);
161
- const results = await Promise.allSettled(config.repos.map(async (repo) => {
192
+ if (shutdownMgr.isShuttingDown) {
193
+ if (pidfilePath) {
162
194
  try {
163
- return {
164
- repoId: repo.repoId,
165
- handle: await watchRepository(repo.repoId),
166
- };
167
- }
168
- catch (error) {
169
- const msg = error instanceof Error ? error.message : String(error);
170
- throw new Error(`[${repo.repoId}] ${msg}`);
171
- }
172
- }));
173
- for (const result of results) {
174
- if (result.status === "fulfilled") {
175
- watchers.push(result.value.handle);
195
+ removePidfile(pidfilePath);
176
196
  }
177
- else {
178
- console.error(`Failed to start watcher: ${String(result.reason)}`);
197
+ catch {
198
+ /* best-effort */
179
199
  }
180
200
  }
181
- console.error(`Watching ${watchers.length} repo(s)`);
201
+ await shutdownMgr.shutdown("early stdio close", 1);
202
+ return;
182
203
  }
183
- else if (config.indexing?.enableFileWatching && options.noWatch) {
184
- console.error("File watching disabled by --no-watch");
185
- }
186
- await configureDefaultLiveIndexCoordinator({
187
- enabled: config.liveIndex?.enabled ?? true,
188
- debounceMs: config.liveIndex?.debounceMs,
189
- maxDraftFiles: config.liveIndex?.maxDraftFiles,
190
- });
191
- const liveIndex = getDefaultLiveIndexCoordinator();
192
- const idleMonitor = new IdleMonitor({
193
- overlayStore: getDefaultOverlayStore(),
194
- checkpointRepo: (request) => liveIndex.checkpointRepo(request),
195
- intervalMs: DEFAULT_IDLE_CHECKPOINT_INTERVAL_MS,
196
- quietPeriodMs: config.liveIndex?.idleCheckpointMs ??
197
- DEFAULT_IDLE_CHECKPOINT_QUIET_PERIOD_MS,
198
- });
199
- if (config.liveIndex?.enabled ?? true) {
200
- idleMonitor.start();
201
- }
202
- const walMaintenance = createWalCheckpointMaintenance({
203
- graphDbPath,
204
- isIndexingActive,
205
- });
206
- walMaintenance.start();
207
- // For stdio: create a single MCPServer (only one client possible).
208
- // For HTTP: the transport creates per-session servers via createMCPServer().
209
- let stdioServer;
210
- if (options.transport === "stdio") {
211
- stdioServer = await createMCPServer({
212
- liveIndex,
213
- gatewayConfig: config.gateway,
214
- codeModeConfig: config.codeMode,
204
+ try {
205
+ await initGraphDb(config, configPath);
206
+ await loadConfiguredAdapterPlugins(config, configPath, (message) => {
207
+ writeServeStderrLine(message);
215
208
  });
216
- }
217
- // Create session manager for HTTP transport
218
- const sessionManager = new SessionManager(concurrency?.maxSessions ?? 8);
219
- // Wire observability service + beam-explain store before HTTP transport
220
- // so the dashboard routes (and the global tap) see live data.
221
- const observabilityConfig = config.observability ?? {
222
- enabled: true,
223
- sampleIntervalMs: 2000,
224
- retentionShortMinutes: 15,
225
- retentionLongHours: 24,
226
- pprMetricsEnabled: true,
227
- packedStatsEnabled: true,
228
- scipIngestMetrics: true,
229
- beamExplainCapacity: 128,
230
- beamExplainEntriesPerSlice: 512,
231
- sseHeartbeatMs: 15000,
232
- sseMaxStreamMs: 3_600_000,
233
- };
234
- let observabilityService = null;
235
- let beamExplainStore = null;
236
- if (observabilityConfig.enabled) {
237
- observabilityService = createObservabilityService(observabilityConfig);
238
- observabilityService.start();
239
- installObservabilityTap(observabilityService);
240
- startRuntimeProbes(observabilityConfig);
241
- beamExplainStore = new BeamExplainStore({
242
- capacity: observabilityConfig.beamExplainCapacity,
243
- maxEntriesPerSlice: observabilityConfig.beamExplainEntriesPerSlice,
209
+ await ensureConfiguredReposRegistered(config, (message) => {
210
+ writeServeStderrLine(message);
244
211
  });
245
- setBeamExplainStore(beamExplainStore);
246
- observabilityService.setBeamExplainStore(beamExplainStore);
247
- }
248
- const httpPort = options.port ?? 3000;
249
- // Set up centralized shutdown manager.
250
- const shutdownMgr = new ShutdownManager({
251
- log: (msg) => console.error(`[sdl-mcp] ${msg}`),
252
- });
253
- const uninstallProcessHandlers = installProcessHandlers(shutdownMgr);
254
- shutdownMgr.addCleanup("processHandlers", uninstallProcessHandlers);
255
- if (pidfilePath) {
256
- shutdownMgr.setPidfilePath(pidfilePath);
257
- }
258
- shutdownMgr.addCleanup("idleMonitor", () => {
259
- idleMonitor.stop();
260
- });
261
- shutdownMgr.addCleanup("walMaintenance", () => {
262
- walMaintenance.stop();
263
- });
264
- if (observabilityService) {
265
- shutdownMgr.addCleanup("observability", () => {
266
- stopRuntimeProbes();
267
- observabilityService?.stop();
212
+ await recoverStaleDerivedStateOnStartup(config, (message) => {
213
+ writeServeStderrLine(message);
268
214
  });
269
- }
270
- if (stdioServer) {
271
- shutdownMgr.addCleanup("server", () => stdioServer.stop());
272
- }
273
- // Final cleanups must run after transport-specific server cleanup.
274
- let finalCleanupsRegistered = false;
275
- const registerFinalCleanups = () => {
276
- if (finalCleanupsRegistered)
277
- return;
278
- finalCleanupsRegistered = true;
279
- // Persist token usage while the DB is still open, but after transport
280
- // cleanup has stopped accepting new HTTP work.
281
- shutdownMgr.addCleanup("persistUsage", async () => {
282
- try {
283
- if (tokenAccumulator.hasUsage) {
284
- await persistUsageSnapshot(tokenAccumulator.getSnapshot());
215
+ await startPrefetchPolicy(config);
216
+ // Pre-warm the local embeddings ONNX session if semantic search is on.
217
+ // First semantic call paid ~2.7s for session creation; subsequent calls
218
+ // were sub-300ms. Fire-and-forget so serve startup is unaffected.
219
+ if (config.semantic?.provider === "local") {
220
+ queueMicrotask(async () => {
221
+ try {
222
+ const { getEmbeddingProvider } = await import("../../indexer/embeddings.js");
223
+ const modelPlan = resolveSemanticEmbeddingModelPlan(config.semantic);
224
+ const warmupModels = [
225
+ ...new Set([
226
+ ...modelPlan.symbolEmbeddingModels,
227
+ ...modelPlan.fileSummaryEmbeddingModels,
228
+ ]),
229
+ ];
230
+ if (warmupModels.length === 0) {
231
+ return;
232
+ }
233
+ for (const model of warmupModels) {
234
+ const provider = getEmbeddingProvider("local", model);
235
+ await provider.embed(["sdl-mcp warmup"]);
236
+ }
237
+ logger.debug("[serve] embeddings sessions pre-warmed", {
238
+ models: warmupModels,
239
+ });
285
240
  }
286
- }
287
- catch (err) {
288
- // Non-critical don't block shutdown
289
- console.error("[sdl-mcp] Failed to persist usage snapshot: " +
290
- (err instanceof Error ? err.message : String(err)));
291
- }
292
- });
293
- shutdownMgr.addCleanup("db", () => closeLadybugDb());
294
- shutdownMgr.addCleanup("logger", () => shutdownLogger());
295
- shutdownMgr.addCleanup("watchers", async () => {
296
- for (const watcher of watchers) {
241
+ catch (err) {
242
+ logger.debug("[serve] embeddings warmup skipped", {
243
+ error: err instanceof Error ? err.message : String(err),
244
+ });
245
+ }
246
+ });
247
+ }
248
+ if (config.indexing?.enableFileWatching && !options.noWatch) {
249
+ writeServeStderrLine(`Starting file watchers for ${config.repos.length} repo(s)...`);
250
+ const results = await Promise.allSettled(config.repos.map(async (repo) => {
297
251
  try {
298
- await watcher.close();
252
+ return {
253
+ repoId: repo.repoId,
254
+ handle: await watchRepository(repo.repoId),
255
+ };
299
256
  }
300
257
  catch (error) {
301
- // Don't let a single watcher failure abort cleanup of others
302
- console.error(`[sdl-mcp] Watcher close error during shutdown: ${error}`);
258
+ const msg = error instanceof Error ? error.message : String(error);
259
+ throw new Error(`[${repo.repoId}] ${msg}`);
260
+ }
261
+ }));
262
+ for (const result of results) {
263
+ if (result.status === "fulfilled") {
264
+ watchers.push(result.value.handle);
265
+ }
266
+ else {
267
+ writeServeStderrLine(`Failed to start watcher: ${String(result.reason)}`);
303
268
  }
304
269
  }
270
+ writeServeStderrLine(`Watching ${watchers.length} repo(s)`);
271
+ }
272
+ else if (config.indexing?.enableFileWatching && options.noWatch) {
273
+ writeServeStderrLine("File watching disabled by --no-watch");
274
+ }
275
+ await configureDefaultLiveIndexCoordinator({
276
+ enabled: config.liveIndex?.enabled ?? true,
277
+ debounceMs: config.liveIndex?.debounceMs,
278
+ maxDraftFiles: config.liveIndex?.maxDraftFiles,
305
279
  });
306
- };
307
- if (options.transport === "stdio") {
308
- registerFinalCleanups();
309
- }
310
- // Register all shutdown triggers.
311
- shutdownMgr.registerSignals(); // SIGINT, SIGTERM, SIGHUP
312
- if (options.transport === "stdio") {
313
- shutdownMgr.monitorStdin();
314
- }
315
- const activeLogFile = getLogFilePath();
316
- if (activeLogFile) {
317
- console.error(`[sdl-mcp] File logging enabled: ${activeLogFile}`);
318
- }
319
- if (stdioServer) {
320
- // Mirror the direct entrypoint so stdio client disconnects flow through
321
- // the centralized shutdown path before Node can exit on its own.
322
- stdioServer.getServer().onclose = () => {
323
- console.error("[sdl-mcp] MCP transport closed, initiating shutdown...");
324
- void shutdownMgr.shutdown("transport closed");
280
+ const liveIndex = getDefaultLiveIndexCoordinator();
281
+ idleMonitor = new IdleMonitor({
282
+ overlayStore: getDefaultOverlayStore(),
283
+ checkpointRepo: (request) => liveIndex.checkpointRepo(request),
284
+ intervalMs: DEFAULT_IDLE_CHECKPOINT_INTERVAL_MS,
285
+ quietPeriodMs: config.liveIndex?.idleCheckpointMs ??
286
+ DEFAULT_IDLE_CHECKPOINT_QUIET_PERIOD_MS,
287
+ });
288
+ if (config.liveIndex?.enabled ?? true) {
289
+ idleMonitor.start();
290
+ }
291
+ walMaintenance = createWalCheckpointMaintenance({
292
+ graphDbPath,
293
+ isIndexingActive,
294
+ });
295
+ walMaintenance.start();
296
+ // For stdio: create a single MCPServer (only one client possible).
297
+ // For HTTP: the transport creates per-session servers via createMCPServer().
298
+ if (options.transport === "stdio") {
299
+ stdioServer = await createMCPServer({
300
+ liveIndex,
301
+ gatewayConfig: config.gateway,
302
+ codeModeConfig: config.codeMode,
303
+ });
304
+ }
305
+ // Create session manager for HTTP transport
306
+ const sessionManager = new SessionManager(concurrency?.maxSessions ?? 8);
307
+ // Wire observability service + beam-explain store before HTTP transport
308
+ // so the dashboard routes (and the global tap) see live data.
309
+ const observabilityConfig = config.observability ?? {
310
+ enabled: true,
311
+ sampleIntervalMs: 2000,
312
+ retentionShortMinutes: 15,
313
+ retentionLongHours: 24,
314
+ pprMetricsEnabled: true,
315
+ packedStatsEnabled: true,
316
+ scipIngestMetrics: true,
317
+ beamExplainCapacity: 128,
318
+ beamExplainEntriesPerSlice: 512,
319
+ sseHeartbeatMs: 15000,
320
+ sseMaxStreamMs: 3_600_000,
325
321
  };
326
- }
327
- try {
322
+ if (observabilityConfig.enabled) {
323
+ observabilityService = createObservabilityService(observabilityConfig);
324
+ observabilityService.start();
325
+ installObservabilityTap(observabilityService);
326
+ startRuntimeProbes(observabilityConfig);
327
+ beamExplainStore = new BeamExplainStore({
328
+ capacity: observabilityConfig.beamExplainCapacity,
329
+ maxEntriesPerSlice: observabilityConfig.beamExplainEntriesPerSlice,
330
+ });
331
+ setBeamExplainStore(beamExplainStore);
332
+ observabilityService.setBeamExplainStore(beamExplainStore);
333
+ }
334
+ const httpPort = options.port ?? 3000;
335
+ const activeLogFile = getLogFilePath();
336
+ if (activeLogFile) {
337
+ writeServeStderrLine(`[sdl-mcp] File logging enabled: ${activeLogFile}`);
338
+ }
339
+ if (stdioServer) {
340
+ // Mirror the direct entrypoint so stdio client disconnects flow through
341
+ // the centralized shutdown path before Node can exit on its own.
342
+ stdioServer.getServer().onclose = () => {
343
+ writeServeStderrLine("[sdl-mcp] MCP transport closed, initiating shutdown...");
344
+ void shutdownMgr.shutdown("transport closed");
345
+ };
346
+ }
328
347
  if (options.transport === "stdio") {
329
348
  if (options.dashboardPort !== undefined) {
330
- const dashboardHandle = await setupObservabilityDashboardSidecar(options.dashboardPort, {
349
+ dashboardHandle = await setupObservabilityDashboardSidecar(options.dashboardPort, {
331
350
  observabilityService,
332
351
  beamExplainStore,
333
352
  observabilitySseHeartbeatMs: observabilityConfig.sseHeartbeatMs,
334
353
  observabilitySseMaxStreamMs: observabilityConfig.sseMaxStreamMs,
335
354
  }, config.httpAuth);
336
355
  pidfilePath = writePidfile(graphDbPath, transport, dashboardHandle.port, dashboardHandle.authToken ?? undefined);
337
- console.error(`PID file written: ${pidfilePath}`);
356
+ writeServeStderrLine(`PID file written: ${pidfilePath}`);
338
357
  shutdownMgr.setPidfilePath(pidfilePath);
339
- shutdownMgr.addCleanup("observabilityDashboard", () => dashboardHandle.close());
340
- console.error(`[sdl-mcp] Observability dashboard: http://127.0.0.1:${dashboardHandle.port}/ui/observability`);
358
+ writeServeStderrLine(`[sdl-mcp] Observability dashboard: http://127.0.0.1:${dashboardHandle.port}/ui/observability`);
341
359
  }
342
- console.error("Starting MCP server on stdio transport...");
360
+ writeServeStderrLine("Starting MCP server on stdio transport...");
343
361
  await setupStdioTransport(stdioServer);
344
362
  // Wait for shutdown signal (triggered by transport close or signal handlers)
345
363
  await shutdownMgr.shutdownInitiated;
346
364
  }
347
365
  else {
348
366
  const host = options.host ?? "localhost";
349
- console.error(`Starting MCP server on http://${host}:${httpPort}...`);
350
- const httpHandle = await setupHttpTransport(host, httpPort, graphDbPath, {
367
+ writeServeStderrLine(`Starting MCP server on http://${host}:${httpPort}...`);
368
+ httpHandle = await setupHttpTransport(host, httpPort, graphDbPath, {
351
369
  liveIndex,
352
370
  sessionManager,
353
371
  gatewayConfig: config.gateway,
@@ -359,11 +377,8 @@ export async function serveCommand(options) {
359
377
  }, config.httpAuth, config.http);
360
378
  // Now that we know the actual bound port, write the pidfile.
361
379
  pidfilePath = writePidfile(graphDbPath, transport, httpHandle.port, httpHandle.authToken ?? undefined);
362
- console.error(`PID file written: ${pidfilePath}`);
380
+ writeServeStderrLine(`PID file written: ${pidfilePath}`);
363
381
  shutdownMgr.setPidfilePath(pidfilePath);
364
- // Register HTTP server with shutdown manager for graceful close
365
- shutdownMgr.addCleanup("httpServer", () => httpHandle.close());
366
- registerFinalCleanups();
367
382
  // Block until the server closes
368
383
  await httpHandle.serverClosed;
369
384
  }
@@ -377,7 +392,8 @@ export async function serveCommand(options) {
377
392
  /* best-effort */
378
393
  }
379
394
  }
380
- console.error(`Fatal error: ${error instanceof Error ? error.message : String(error)}`);
395
+ await closeDbAfterStartupFailure();
396
+ writeServeStderrLine(`Fatal error: ${error instanceof Error ? error.message : String(error)}`);
381
397
  process.exit(1);
382
398
  }
383
399
  }
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"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"}
@@ -118,11 +118,17 @@ export interface BuildDeferredIndexesOptions {
118
118
  /** @internal test seam for failure-policy coverage without opening LadybugDB. */
119
119
  _dependenciesForTesting?: BuildDeferredIndexesDependencies;
120
120
  }
121
+ export interface EnsureCriticalSymbolFtsIndexOptions {
122
+ recordTiming?: DeferredIndexTimingRecorder;
123
+ /** @internal test seam for failure-policy coverage without opening LadybugDB. */
124
+ _dependenciesForTesting?: BuildDeferredIndexesDependencies;
125
+ }
121
126
  interface IndexEnsureFailureSource {
122
127
  failed: readonly string[];
123
128
  }
124
129
  /** @internal exported for focused failure-policy tests. */
125
130
  export declare function _setDeferredIndexesPendingForTesting(value: boolean): void;
131
+ export declare function ensureCriticalSymbolFtsIndex(options?: EnsureCriticalSymbolFtsIndexOptions): Promise<void>;
126
132
  export declare function buildDeferredIndexes(options?: BuildDeferredIndexesOptions): Promise<void>;
127
133
  export declare function closeLadybugDb(options?: CloseLadybugDbOptions): Promise<void>;
128
134
  /**