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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +233 -217
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/db/ladybug.d.ts +6 -0
- package/dist/db/ladybug.d.ts.map +1 -1
- package/dist/db/ladybug.js +32 -0
- package/dist/db/ladybug.js.map +1 -1
- package/dist/indexer/indexer-pass1.d.ts.map +1 -1
- package/dist/indexer/indexer-pass1.js +3 -1
- package/dist/indexer/indexer-pass1.js.map +1 -1
- package/dist/indexer/indexer.d.ts.map +1 -1
- package/dist/indexer/indexer.js +627 -599
- package/dist/indexer/indexer.js.map +1 -1
- package/dist/indexer/language-packs.js +16 -1
- package/dist/indexer/language-packs.js.map +1 -1
- package/dist/main.js +62 -52
- package/dist/main.js.map +1 -1
- package/dist/startup/process-handlers.d.ts.map +1 -1
- package/dist/startup/process-handlers.js +13 -3
- package/dist/startup/process-handlers.js.map +1 -1
- package/dist/util/logger.d.ts.map +1 -1
- package/dist/util/logger.js +3 -2
- package/dist/util/logger.js.map +1 -1
- package/dist/util/shutdown.d.ts +4 -0
- package/dist/util/shutdown.d.ts.map +1 -1
- package/dist/util/shutdown.js +26 -6
- package/dist/util/shutdown.js.map +1 -1
- package/dist/util/stdio-safety.d.ts +3 -0
- package/dist/util/stdio-safety.d.ts.map +1 -0
- package/dist/util/stdio-safety.js +20 -0
- package/dist/util/stdio-safety.js.map +1 -0
- package/package.json +5 -5
package/dist/main.js
CHANGED
|
@@ -17,11 +17,12 @@ import { recoverStaleDerivedStateOnStartup } from "./startup/derived-state-recov
|
|
|
17
17
|
import { startPrefetchPolicy } from "./startup/prefetch-startup.js";
|
|
18
18
|
import { loadConfiguredAdapterPlugins } from "./startup/plugins.js";
|
|
19
19
|
import { installProcessHandlers } from "./startup/process-handlers.js";
|
|
20
|
+
import { safeWriteStderr } from "./util/stdio-safety.js";
|
|
20
21
|
import { resetScorerPool } from "./graph/slice/beam-search-engine.js";
|
|
21
22
|
// Fail fast with a clear message on unsupported Node.js versions.
|
|
22
23
|
const _nodeMajor = parseInt(process.version.slice(1).split(".")[0], 10);
|
|
23
24
|
if (_nodeMajor < NODE_MIN_MAJOR_VERSION) {
|
|
24
|
-
|
|
25
|
+
safeWriteStderr("[sdl-mcp] Error: sdl-mcp requires Node.js " + NODE_MIN_MAJOR_VERSION + "+, found " + process.version + ".\n" +
|
|
25
26
|
"[sdl-mcp] Please upgrade: https://nodejs.org/\n");
|
|
26
27
|
process.exit(1);
|
|
27
28
|
}
|
|
@@ -31,14 +32,59 @@ if (_nodeMajor < NODE_MIN_MAJOR_VERSION) {
|
|
|
31
32
|
if (!getLogFilePath()) {
|
|
32
33
|
enableFileLogging();
|
|
33
34
|
}
|
|
34
|
-
const log = (msg) =>
|
|
35
|
+
const log = (msg) => safeWriteStderr(`[sdl-mcp] ${msg}\n`);
|
|
36
|
+
async function closeDbAfterStartupFailure() {
|
|
37
|
+
try {
|
|
38
|
+
await closeLadybugDb();
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
log(`LadybugDB cleanup after startup failure failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
35
44
|
async function main() {
|
|
36
45
|
const server = new MCPServer();
|
|
37
46
|
const watchers = [];
|
|
47
|
+
let cleanupInterval;
|
|
38
48
|
let watcherStartTimer;
|
|
49
|
+
let idleMonitor;
|
|
39
50
|
const shutdownMgr = new ShutdownManager({ log });
|
|
40
51
|
const uninstallProcessHandlers = installProcessHandlers(shutdownMgr);
|
|
41
52
|
shutdownMgr.addCleanup("processHandlers", uninstallProcessHandlers);
|
|
53
|
+
shutdownMgr.addCleanup("cleanupInterval", () => {
|
|
54
|
+
if (cleanupInterval)
|
|
55
|
+
clearInterval(cleanupInterval);
|
|
56
|
+
});
|
|
57
|
+
shutdownMgr.addCleanup("watcherStartTimer", () => {
|
|
58
|
+
if (watcherStartTimer)
|
|
59
|
+
clearTimeout(watcherStartTimer);
|
|
60
|
+
});
|
|
61
|
+
shutdownMgr.addCleanup("idleMonitor", () => {
|
|
62
|
+
idleMonitor?.stop();
|
|
63
|
+
});
|
|
64
|
+
shutdownMgr.addCleanup("server", () => server.stop());
|
|
65
|
+
shutdownMgr.addCleanup("persistUsage", async () => {
|
|
66
|
+
try {
|
|
67
|
+
if (tokenAccumulator.hasUsage) {
|
|
68
|
+
await persistUsageSnapshot(tokenAccumulator.getSnapshot());
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Non-critical — don't block shutdown.
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
shutdownMgr.addCleanup("scorerPool", () => resetScorerPool());
|
|
76
|
+
shutdownMgr.addCleanup("watchers", async () => {
|
|
77
|
+
for (const watcher of watchers) {
|
|
78
|
+
try {
|
|
79
|
+
await watcher.close();
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
safeWriteStderr(`[sdl-mcp] Watcher close error during shutdown: ${error}\n`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
shutdownMgr.addCleanup("db", () => closeLadybugDb());
|
|
87
|
+
shutdownMgr.addCleanup("logger", () => shutdownLogger());
|
|
42
88
|
// Hoisted so the catch handler can clean up if startup fails after the pidfile is claimed.
|
|
43
89
|
let pidfilePath;
|
|
44
90
|
try {
|
|
@@ -56,6 +102,8 @@ async function main() {
|
|
|
56
102
|
pidfilePath = writePidfile(graphDbPath, "stdio");
|
|
57
103
|
shutdownMgr.setPidfilePath(pidfilePath);
|
|
58
104
|
log(`PID file written: ${pidfilePath}`);
|
|
105
|
+
shutdownMgr.registerSignals(); // SIGINT, SIGTERM, SIGHUP
|
|
106
|
+
shutdownMgr.monitorStdin();
|
|
59
107
|
await initGraphDb(config, resolvedConfigPath);
|
|
60
108
|
log(`Graph database initialized at ${graphDbPath}`);
|
|
61
109
|
await loadConfiguredAdapterPlugins(config, resolvedConfigPath, log);
|
|
@@ -71,7 +119,7 @@ async function main() {
|
|
|
71
119
|
maxDraftFiles: config.liveIndex?.maxDraftFiles,
|
|
72
120
|
});
|
|
73
121
|
const liveIndex = getDefaultLiveIndexCoordinator();
|
|
74
|
-
|
|
122
|
+
idleMonitor = new IdleMonitor({
|
|
75
123
|
overlayStore: getDefaultOverlayStore(),
|
|
76
124
|
checkpointRepo: (request) => liveIndex.checkpointRepo(request),
|
|
77
125
|
intervalMs: DEFAULT_IDLE_CHECKPOINT_INTERVAL_MS,
|
|
@@ -106,13 +154,13 @@ async function main() {
|
|
|
106
154
|
watchers.push(result.value.handle);
|
|
107
155
|
}
|
|
108
156
|
else {
|
|
109
|
-
|
|
157
|
+
safeWriteStderr(`[sdl-mcp] Failed to start watcher: ${String(result.reason)}\n`);
|
|
110
158
|
}
|
|
111
159
|
}
|
|
112
160
|
log(`File watchers started for ${watchers.length} repo(s).`);
|
|
113
161
|
}
|
|
114
162
|
catch (error) {
|
|
115
|
-
|
|
163
|
+
safeWriteStderr(`[sdl-mcp] File watcher startup error: ${error}\n`);
|
|
116
164
|
}
|
|
117
165
|
})();
|
|
118
166
|
}, 5_000);
|
|
@@ -120,7 +168,7 @@ async function main() {
|
|
|
120
168
|
}
|
|
121
169
|
log("Starting slice handle cleanup scheduler (interval: 1 hour)...");
|
|
122
170
|
const { cleanupExpiredSliceHandles } = await import("./mcp/tools/slice.js");
|
|
123
|
-
|
|
171
|
+
cleanupInterval = setInterval(() => {
|
|
124
172
|
try {
|
|
125
173
|
void Promise.resolve(cleanupExpiredSliceHandles())
|
|
126
174
|
.then((deleted) => {
|
|
@@ -129,54 +177,15 @@ async function main() {
|
|
|
129
177
|
}
|
|
130
178
|
})
|
|
131
179
|
.catch((error) => {
|
|
132
|
-
|
|
180
|
+
safeWriteStderr(`[sdl-mcp] Slice handle cleanup error: ${error}\n`);
|
|
133
181
|
});
|
|
134
182
|
}
|
|
135
183
|
catch (error) {
|
|
136
|
-
|
|
184
|
+
safeWriteStderr(`[sdl-mcp] Slice handle cleanup error: ${error}\n`);
|
|
137
185
|
}
|
|
138
186
|
}, CLEANUP_INTERVAL_MS);
|
|
139
187
|
// Do not keep process alive solely because of periodic cleanup timer.
|
|
140
188
|
cleanupInterval.unref();
|
|
141
|
-
// Register cleanup callbacks (run in order during shutdown).
|
|
142
|
-
shutdownMgr.addCleanup("cleanupInterval", () => {
|
|
143
|
-
clearInterval(cleanupInterval);
|
|
144
|
-
});
|
|
145
|
-
shutdownMgr.addCleanup("watcherStartTimer", () => {
|
|
146
|
-
if (watcherStartTimer)
|
|
147
|
-
clearTimeout(watcherStartTimer);
|
|
148
|
-
});
|
|
149
|
-
shutdownMgr.addCleanup("idleMonitor", () => {
|
|
150
|
-
idleMonitor.stop();
|
|
151
|
-
});
|
|
152
|
-
shutdownMgr.addCleanup("server", () => server.stop());
|
|
153
|
-
shutdownMgr.addCleanup("persistUsage", async () => {
|
|
154
|
-
// Match serve.ts behavior - flush token accumulator before DB closes
|
|
155
|
-
try {
|
|
156
|
-
if (tokenAccumulator.hasUsage) {
|
|
157
|
-
await persistUsageSnapshot(tokenAccumulator.getSnapshot());
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
catch {
|
|
161
|
-
// Non-critical — don't block shutdown
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
shutdownMgr.addCleanup("scorerPool", () => resetScorerPool());
|
|
165
|
-
shutdownMgr.addCleanup("db", () => closeLadybugDb());
|
|
166
|
-
shutdownMgr.addCleanup("logger", () => shutdownLogger());
|
|
167
|
-
shutdownMgr.addCleanup("watchers", async () => {
|
|
168
|
-
for (const watcher of watchers) {
|
|
169
|
-
try {
|
|
170
|
-
await watcher.close();
|
|
171
|
-
}
|
|
172
|
-
catch (error) {
|
|
173
|
-
process.stderr.write(`[sdl-mcp] Watcher close error during shutdown: ${error}\n`);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
// Register all shutdown triggers.
|
|
178
|
-
shutdownMgr.registerSignals(); // SIGINT, SIGTERM, SIGHUP
|
|
179
|
-
shutdownMgr.monitorStdin();
|
|
180
189
|
const activeLogFile = getLogFilePath();
|
|
181
190
|
if (activeLogFile) {
|
|
182
191
|
log(`File logging enabled: ${activeLogFile}`);
|
|
@@ -198,24 +207,25 @@ async function main() {
|
|
|
198
207
|
}
|
|
199
208
|
catch { /* best-effort */ }
|
|
200
209
|
}
|
|
210
|
+
await closeDbAfterStartupFailure();
|
|
201
211
|
if (error instanceof ConfigError) {
|
|
202
|
-
|
|
212
|
+
safeWriteStderr(`[sdl-mcp] Configuration error: ${error.message}\n`);
|
|
203
213
|
process.exit(1);
|
|
204
214
|
}
|
|
205
215
|
if (error instanceof DatabaseError) {
|
|
206
|
-
|
|
216
|
+
safeWriteStderr(`[sdl-mcp] Database error: ${error.message}\n`);
|
|
207
217
|
process.exit(1);
|
|
208
218
|
}
|
|
209
219
|
if (error instanceof Error) {
|
|
210
|
-
|
|
220
|
+
safeWriteStderr(`[sdl-mcp] Fatal error: ${error.message}\n`);
|
|
211
221
|
process.exit(1);
|
|
212
222
|
}
|
|
213
|
-
|
|
223
|
+
safeWriteStderr(`[sdl-mcp] Fatal error: ${String(error)}\n`);
|
|
214
224
|
process.exit(1);
|
|
215
225
|
}
|
|
216
226
|
}
|
|
217
227
|
main().catch((error) => {
|
|
218
|
-
|
|
228
|
+
safeWriteStderr(`[sdl-mcp] Uncaught error: ${error}\n`);
|
|
219
229
|
process.exit(1);
|
|
220
230
|
});
|
|
221
231
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EACL,oCAAoC,EACpC,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mCAAmC,EACnC,uCAAuC,EACvC,WAAW,GACZ,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,4BAA4B,EAC5B,aAAa,EACb,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EACL,oCAAoC,EACpC,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mCAAmC,EACnC,uCAAuC,EACvC,WAAW,GACZ,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,4BAA4B,EAC5B,aAAa,EACb,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAEtE,kEAAkE;AAClE,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxE,IAAI,UAAU,GAAG,sBAAsB,EAAE,CAAC;IACxC,eAAe,CACb,4CAA4C,GAAG,sBAAsB,GAAG,WAAW,GAAG,OAAO,CAAC,OAAO,GAAG,KAAK;QAC7G,iDAAiD,CAClD,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,yEAAyE;AACzE,yEAAyE;AACzE,yEAAyE;AACzE,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;IACtB,iBAAiB,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;AAEnE,KAAK,UAAU,0BAA0B;IACvC,IAAI,CAAC;QACH,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CACD,mDACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAA0C,EAAE,CAAC;IAC3D,IAAI,eAA2C,CAAC;IAChD,IAAI,iBAA6C,CAAC;IAClD,IAAI,WAAoC,CAAC;IACzC,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACjD,MAAM,wBAAwB,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACrE,WAAW,CAAC,UAAU,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,CAAC;IACpE,WAAW,CAAC,UAAU,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC7C,IAAI,eAAe;YAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IACH,WAAW,CAAC,UAAU,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC/C,IAAI,iBAAiB;YAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,WAAW,CAAC,UAAU,CAAC,aAAa,EAAE,GAAG,EAAE;QACzC,WAAW,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IACH,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACtD,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;QAChD,IAAI,CAAC;YACH,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC;gBAC9B,MAAM,oBAAoB,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,WAAW,CAAC,UAAU,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;IAC9D,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;QAC5C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,eAAe,CACb,kDAAkD,KAAK,IAAI,CAC5D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;IACrD,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;IAEzD,2FAA2F;IAC3F,IAAI,WAA+B,CAAC;IAEpC,IAAI,CAAC;QACH,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAChC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAE9C,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAEnE,yEAAyE;QACzE,oEAAoE;QACpE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,QAAQ,EAAE,CAAC;YACb,GAAG,CAAC,4BAA4B,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,WAAW,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACjD,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,qBAAqB,WAAW,EAAE,CAAC,CAAC;QAExC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,0BAA0B;QACzD,WAAW,CAAC,YAAY,EAAE,CAAC;QAE3B,MAAM,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAC9C,GAAG,CAAC,iCAAiC,WAAW,EAAE,CAAC,CAAC;QAEpD,MAAM,4BAA4B,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;QACpE,MAAM,+BAA+B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACnD,MAAM,iCAAiC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAElC,0EAA0E;QAC1E,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAChC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC/D,MAAM,oCAAoC,CAAC;YACzC,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,IAAI,IAAI;YAC1C,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU;YACxC,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa;SAC/C,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,8BAA8B,EAAE,CAAC;QACnD,WAAW,GAAG,IAAI,WAAW,CAAC;YAC5B,YAAY,EAAE,sBAAsB,EAAE;YACtC,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC;YAC9D,UAAU,EAAE,mCAAmC;YAC/C,aAAa,EACX,MAAM,CAAC,SAAS,EAAE,gBAAgB;gBAClC,uCAAuC;SAC1C,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,SAAS,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC;YACtC,WAAW,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;QACD,aAAa,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEtE,IAAI,MAAM,CAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;YACxC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YACvD,iBAAiB,GAAG,UAAU,CAAC,GAAG,EAAE;gBAClC,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC;wBACH,GAAG,CAAC,2BAA2B,CAAC,CAAC;wBACjC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;wBACjE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;4BAC9B,IAAI,CAAC;gCACH,OAAO;oCACL,MAAM,EAAE,IAAI,CAAC,MAAM;oCACnB,MAAM,EAAE,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;iCAC3C,CAAC;4BACJ,CAAC;4BAAC,OAAO,KAAK,EAAE,CAAC;gCACf,MAAM,GAAG,GACP,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gCACzD,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC;4BAC7C,CAAC;wBACH,CAAC,CAAC,CACH,CAAC;wBAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;4BAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gCAClC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;4BACrC,CAAC;iCAAM,CAAC;gCACN,eAAe,CACb,sCAAsC,MAAM,CAC1C,MAAM,CAAC,MAAM,CACd,IAAI,CACN,CAAC;4BACJ,CAAC;wBACH,CAAC;wBACD,GAAG,CAAC,6BAA6B,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC;oBAC/D,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,eAAe,CACb,yCAAyC,KAAK,IAAI,CACnD,CAAC;oBACJ,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,EAAE,KAAK,CAAC,CAAC;YACV,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;QAED,GAAG,CAAC,+DAA+D,CAAC,CAAC;QACrE,MAAM,EAAE,0BAA0B,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC5E,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC;gBACH,KAAK,OAAO,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC;qBAC/C,IAAI,CAAC,CAAC,OAAe,EAAE,EAAE;oBACxB,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;wBAChB,GAAG,CAAC,cAAc,OAAO,0BAA0B,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;oBACxB,eAAe,CACb,yCAAyC,KAAK,IAAI,CACnD,CAAC;gBACJ,CAAC,CAAC,CAAC;YACP,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,eAAe,CACb,yCAAyC,KAAK,IAAI,CACnD,CAAC;YACJ,CAAC;QACH,CAAC,EAAE,mBAAmB,CAAC,CAAC;QACxB,sEAAsE;QACtE,eAAe,CAAC,KAAK,EAAE,CAAC;QAExB,MAAM,aAAa,GAAG,cAAc,EAAE,CAAC;QACvC,IAAI,aAAa,EAAE,CAAC;YAClB,GAAG,CAAC,yBAAyB,aAAa,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAC9B,uEAAuE;QACvE,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE;YAChC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YACpD,KAAK,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAChD,CAAC,CAAC;QAEF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACjC,MAAM,WAAW,CAAC,iBAAiB,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC;gBAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,0BAA0B,EAAE,CAAC;QACnC,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,eAAe,CAAC,kCAAkC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;YACnC,eAAe,CAAC,6BAA6B,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,eAAe,CAAC,0BAA0B,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,eAAe,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,eAAe,CAAC,6BAA6B,KAAK,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-handlers.d.ts","sourceRoot":"","sources":["../../src/startup/process-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"process-handlers.d.ts","sourceRoot":"","sources":["../../src/startup/process-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAI3D,KAAK,sBAAsB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;AAWhE;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,sBAAsB,GAClC,MAAM,IAAI,CA8CZ"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { logger } from "../util/logger.js";
|
|
2
|
+
import { isBrokenPipeError, safeWriteStderr } from "../util/stdio-safety.js";
|
|
2
3
|
let installed = false;
|
|
3
4
|
let installedHandlers = null;
|
|
4
5
|
/**
|
|
@@ -11,8 +12,13 @@ let installedHandlers = null;
|
|
|
11
12
|
export function installProcessHandlers(shutdownMgr) {
|
|
12
13
|
if (installed)
|
|
13
14
|
return () => { };
|
|
15
|
+
const stdioError = (error) => {
|
|
16
|
+
if (!isBrokenPipeError(error))
|
|
17
|
+
throw error;
|
|
18
|
+
void shutdownMgr.shutdown("stdio pipe error", 1);
|
|
19
|
+
};
|
|
14
20
|
const uncaughtException = (error) => {
|
|
15
|
-
|
|
21
|
+
safeWriteStderr(`[sdl-mcp] Fatal uncaught exception: ${error.message}\n`);
|
|
16
22
|
logger.error("Uncaught exception", {
|
|
17
23
|
error: error.message,
|
|
18
24
|
stack: error.stack,
|
|
@@ -21,7 +27,7 @@ export function installProcessHandlers(shutdownMgr) {
|
|
|
21
27
|
};
|
|
22
28
|
const unhandledRejection = (reason) => {
|
|
23
29
|
const message = reason instanceof Error ? reason.message : String(reason);
|
|
24
|
-
|
|
30
|
+
safeWriteStderr(`[sdl-mcp] Unhandled rejection: ${message}\n`);
|
|
25
31
|
logger.error("Unhandled rejection", {
|
|
26
32
|
error: message,
|
|
27
33
|
stack: reason instanceof Error ? reason.stack : undefined,
|
|
@@ -31,13 +37,17 @@ export function installProcessHandlers(shutdownMgr) {
|
|
|
31
37
|
};
|
|
32
38
|
process.on("uncaughtException", uncaughtException);
|
|
33
39
|
process.on("unhandledRejection", unhandledRejection);
|
|
40
|
+
process.stdout.on("error", stdioError);
|
|
41
|
+
process.stderr.on("error", stdioError);
|
|
34
42
|
installed = true;
|
|
35
|
-
installedHandlers = { uncaughtException, unhandledRejection };
|
|
43
|
+
installedHandlers = { uncaughtException, unhandledRejection, stdioError };
|
|
36
44
|
return () => {
|
|
37
45
|
if (!installedHandlers)
|
|
38
46
|
return;
|
|
39
47
|
process.off("uncaughtException", installedHandlers.uncaughtException);
|
|
40
48
|
process.off("unhandledRejection", installedHandlers.unhandledRejection);
|
|
49
|
+
process.stdout.off("error", installedHandlers.stdioError);
|
|
50
|
+
process.stderr.off("error", installedHandlers.stdioError);
|
|
41
51
|
installedHandlers = null;
|
|
42
52
|
installed = false;
|
|
43
53
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-handlers.js","sourceRoot":"","sources":["../../src/startup/process-handlers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"process-handlers.js","sourceRoot":"","sources":["../../src/startup/process-handlers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI7E,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB,IAAI,iBAAiB,GAMV,IAAI,CAAC;AAEhB;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAAmC;IAEnC,IAAI,SAAS;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAE/B,MAAM,UAAU,GAAG,CAAC,KAAY,EAAQ,EAAE;QACxC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;QAC3C,KAAK,WAAW,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,KAAY,EAAQ,EAAE;QAC/C,eAAe,CACb,uCAAuC,KAAK,CAAC,OAAO,IAAI,CACzD,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;YACjC,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QACH,KAAK,WAAW,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,CAAC,MAAe,EAAQ,EAAE;QACnD,MAAM,OAAO,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1E,eAAe,CAAC,kCAAkC,OAAO,IAAI,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE;YAClC,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SAC1D,CAAC,CAAC;QACH,uEAAuE;QACvE,sEAAsE;IACxE,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACvC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACvC,SAAS,GAAG,IAAI,CAAC;IACjB,iBAAiB,GAAG,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC;IAE1E,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAC/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;QACxE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC1D,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC1D,iBAAiB,GAAG,IAAI,CAAC;QACzB,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,WAAW,IAAI,mBAAmB,EAClC,gBAAgB,EAChB,eAAe,IAAI,uBAAuB,EAC3C,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,WAAW,IAAI,mBAAmB,EAClC,gBAAgB,EAChB,eAAe,IAAI,uBAAuB,EAC3C,MAAM,cAAc,CAAC;AAGtB,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAS3D,UAAU,iBAAiB;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB;AAkJD,cAAM,MAAM;IACV,OAAO,CAAC,KAAK,CAAW;gBAEZ,KAAK,GAAE,QAAiB;IAIpC,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,IAAI;IAeZ,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAG7D;AAED,eAAO,MAAM,MAAM,QAAe,CAAC;AAEnC,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAOzC;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAE1D;AAED,wBAAgB,oBAAoB,IAAI,iBAAiB,CAOxD;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,IAAI,CAqBN;AAED,wBAAgB,WAAW,IAAI,IAAI,CAIlC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAID,OAAO,EACL,mBAAmB,IAAI,WAAW,EAClC,gBAAgB,EAChB,uBAAuB,IAAI,eAAe,GAC3C,CAAC"}
|
package/dist/util/logger.js
CHANGED
|
@@ -2,6 +2,7 @@ import { appendFileSync, createWriteStream, mkdirSync, renameSync, statSync } fr
|
|
|
2
2
|
import { dirname, join } from "path";
|
|
3
3
|
import { homedir, tmpdir } from "os";
|
|
4
4
|
import { initTracing as initTracingInternal, isTracingEnabled, shutdownTracing as shutdownTracingInternal, } from "./tracing.js";
|
|
5
|
+
import { safeWriteStderr } from "./stdio-safety.js";
|
|
5
6
|
const LOG_FILE_MAX_BYTES = 5 * 1024 * 1024;
|
|
6
7
|
const LOG_FILE_MAX_ROTATIONS = 3;
|
|
7
8
|
const LOG_ROTATION_CHECK_INTERVAL_BYTES = 64 * 1024;
|
|
@@ -95,7 +96,7 @@ function writeToLogFile(msg) {
|
|
|
95
96
|
catch (err) {
|
|
96
97
|
logWriteErrorCount++;
|
|
97
98
|
if (logWriteErrorCount === 1 || logWriteErrorCount % 100 === 0) {
|
|
98
|
-
|
|
99
|
+
safeWriteStderr(`[sdl-mcp] Log file write failed (count: ${logWriteErrorCount}): ${err}\n`);
|
|
99
100
|
}
|
|
100
101
|
}
|
|
101
102
|
}
|
|
@@ -103,7 +104,7 @@ function writeToStderr(msg) {
|
|
|
103
104
|
if (!consoleMirroringEnabled) {
|
|
104
105
|
return;
|
|
105
106
|
}
|
|
106
|
-
|
|
107
|
+
safeWriteStderr(msg + "\n");
|
|
107
108
|
}
|
|
108
109
|
function safeStringify(obj) {
|
|
109
110
|
try {
|
package/dist/util/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAoB,MAAM,IAAI,CAAC;AAC1G,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,EACL,WAAW,IAAI,mBAAmB,EAClC,gBAAgB,EAChB,eAAe,IAAI,uBAAuB,GAC3C,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/util/shutdown.d.ts
CHANGED
|
@@ -35,9 +35,13 @@ export declare class ShutdownManager {
|
|
|
35
35
|
private forceTimeoutMs;
|
|
36
36
|
private log;
|
|
37
37
|
private shutdownResolve;
|
|
38
|
+
private shutdownCompleteResolve;
|
|
38
39
|
/** Promise that resolves when shutdown is initiated (before cleanup runs) */
|
|
39
40
|
readonly shutdownInitiated: Promise<void>;
|
|
41
|
+
/** Promise that resolves immediately before the managed process exit. */
|
|
42
|
+
readonly shutdownComplete: Promise<void>;
|
|
40
43
|
constructor(options?: ShutdownManagerOptions);
|
|
44
|
+
private writeLog;
|
|
41
45
|
/**
|
|
42
46
|
* Register a named cleanup callback. Cleanups run sequentially in
|
|
43
47
|
* registration order during shutdown.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../src/util/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../src/util/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,MAAM,MAAM,SAAS,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnD,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,GAAG,CAAwB;IACnC,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,uBAAuB,CAA6B;IAC5D,6EAA6E;IAC7E,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,yEAAyE;IACzE,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAE7B,OAAO,GAAE,sBAA2B;IAchD,OAAO,CAAC,QAAQ;IAQhB;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI;IAI7C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC;;;;;;;OAOG;IACH,eAAe,IAAI,IAAI;IAYvB;;;;;OAKG;IACH,YAAY,IAAI,IAAI;IAKpB;;;;;;;;;;OAUG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAgE3D;;OAEG;IACH,IAAI,cAAc,IAAI,OAAO,CAE5B;CACF"}
|
package/dist/util/shutdown.js
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import { SHUTDOWN_FORCE_EXIT_TIMEOUT_MS } from "../config/constants.js";
|
|
20
20
|
import { removePidfile } from "./pidfile.js";
|
|
21
|
+
import { isBrokenPipeError, safeWriteStderr } from "./stdio-safety.js";
|
|
21
22
|
export class ShutdownManager {
|
|
22
23
|
shutdownCalled = false;
|
|
23
24
|
cleanups = [];
|
|
@@ -25,17 +26,32 @@ export class ShutdownManager {
|
|
|
25
26
|
forceTimeoutMs;
|
|
26
27
|
log;
|
|
27
28
|
shutdownResolve = null;
|
|
29
|
+
shutdownCompleteResolve = null;
|
|
28
30
|
/** Promise that resolves when shutdown is initiated (before cleanup runs) */
|
|
29
31
|
shutdownInitiated;
|
|
32
|
+
/** Promise that resolves immediately before the managed process exit. */
|
|
33
|
+
shutdownComplete;
|
|
30
34
|
constructor(options = {}) {
|
|
31
35
|
this.forceTimeoutMs =
|
|
32
36
|
options.forceTimeoutMs ?? SHUTDOWN_FORCE_EXIT_TIMEOUT_MS;
|
|
33
37
|
this.log =
|
|
34
38
|
options.log ??
|
|
35
|
-
((msg) =>
|
|
39
|
+
((msg) => safeWriteStderr(`[sdl-mcp] ${msg}\n`));
|
|
36
40
|
this.shutdownInitiated = new Promise((resolve) => {
|
|
37
41
|
this.shutdownResolve = resolve;
|
|
38
42
|
});
|
|
43
|
+
this.shutdownComplete = new Promise((resolve) => {
|
|
44
|
+
this.shutdownCompleteResolve = resolve;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
writeLog(msg) {
|
|
48
|
+
try {
|
|
49
|
+
this.log(msg);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (!isBrokenPipeError(error))
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
39
55
|
}
|
|
40
56
|
/**
|
|
41
57
|
* Register a named cleanup callback. Cleanups run sequentially in
|
|
@@ -90,7 +106,7 @@ export class ShutdownManager {
|
|
|
90
106
|
*/
|
|
91
107
|
async shutdown(reason, exitCode = 0) {
|
|
92
108
|
if (this.shutdownCalled) {
|
|
93
|
-
return;
|
|
109
|
+
return this.shutdownComplete;
|
|
94
110
|
}
|
|
95
111
|
this.shutdownCalled = true;
|
|
96
112
|
// Signal shutdown initiated so waiters can unblock
|
|
@@ -98,14 +114,14 @@ export class ShutdownManager {
|
|
|
98
114
|
this.shutdownResolve();
|
|
99
115
|
this.shutdownResolve = null;
|
|
100
116
|
}
|
|
101
|
-
this.
|
|
117
|
+
this.writeLog(`Received ${reason}, shutting down gracefully...`);
|
|
102
118
|
let activeCleanup = null;
|
|
103
119
|
// Safety net: if cleanup hangs, force exit after timeout.
|
|
104
120
|
const forceTimer = setTimeout(() => {
|
|
105
121
|
const activeCleanupSuffix = activeCleanup
|
|
106
122
|
? ` while running cleanup "${activeCleanup}"`
|
|
107
123
|
: "";
|
|
108
|
-
this.
|
|
124
|
+
this.writeLog(`Cleanup did not finish within ${this.forceTimeoutMs}ms${activeCleanupSuffix} — forcing exit.`);
|
|
109
125
|
// Remove PID file even on forced exit.
|
|
110
126
|
if (this.pidfilePath) {
|
|
111
127
|
removePidfile(this.pidfilePath);
|
|
@@ -121,12 +137,12 @@ export class ShutdownManager {
|
|
|
121
137
|
await fn();
|
|
122
138
|
}
|
|
123
139
|
catch (error) {
|
|
124
|
-
this.
|
|
140
|
+
this.writeLog(`Cleanup "${name}" error: ${error instanceof Error ? error.message : String(error)}`);
|
|
125
141
|
}
|
|
126
142
|
finally {
|
|
127
143
|
const durationMs = Date.now() - cleanupStartedAt;
|
|
128
144
|
if (durationMs >= 1000) {
|
|
129
|
-
this.
|
|
145
|
+
this.writeLog(`Cleanup "${name}" completed in ${durationMs}ms`);
|
|
130
146
|
}
|
|
131
147
|
activeCleanup = null;
|
|
132
148
|
}
|
|
@@ -136,6 +152,10 @@ export class ShutdownManager {
|
|
|
136
152
|
removePidfile(this.pidfilePath);
|
|
137
153
|
}
|
|
138
154
|
clearTimeout(forceTimer);
|
|
155
|
+
if (this.shutdownCompleteResolve) {
|
|
156
|
+
this.shutdownCompleteResolve();
|
|
157
|
+
this.shutdownCompleteResolve = null;
|
|
158
|
+
}
|
|
139
159
|
process.exit(exitCode);
|
|
140
160
|
}
|
|
141
161
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../src/util/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../src/util/shutdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-safety.d.ts","sourceRoot":"","sources":["../../src/util/stdio-safety.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMzD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAUxD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function isBrokenPipeError(error) {
|
|
2
|
+
const code = typeof error === "object" && error !== null
|
|
3
|
+
? error.code
|
|
4
|
+
: undefined;
|
|
5
|
+
return code === "EPIPE" || code === "ERR_STREAM_DESTROYED";
|
|
6
|
+
}
|
|
7
|
+
export function safeWriteStderr(message) {
|
|
8
|
+
if (process.stderr.destroyed || process.stderr.writableEnded) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
return process.stderr.write(message);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
if (!isBrokenPipeError(error))
|
|
16
|
+
throw error;
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=stdio-safety.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-safety.js","sourceRoot":"","sources":["../../src/util/stdio-safety.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,IAAI,GACR,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QACzC,CAAC,CAAE,KAA4B,CAAC,IAAI;QACpC,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,sBAAsB,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sdl-mcp",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.13",
|
|
4
4
|
"description": "Symbol Delta Ledger MCP Server - Cards-first code context for polyglot repositories",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/main.js",
|
|
@@ -141,11 +141,11 @@
|
|
|
141
141
|
"fb-watchman": "^2.0.2",
|
|
142
142
|
"kuzu": "npm:@ladybugdb/core@0.16.0",
|
|
143
143
|
"onnxruntime-node": "^1.24.3",
|
|
144
|
-
"sdl-mcp-native": "0.11.
|
|
145
|
-
"sdl-mcp-watchman": "0.11.
|
|
144
|
+
"sdl-mcp-native": "0.11.13",
|
|
145
|
+
"sdl-mcp-watchman": "0.11.13",
|
|
146
146
|
"tokenizers": "npm:@anush008/tokenizers@^0.6.0",
|
|
147
|
-
"sdl-mcp-watchman-linux-x64": "0.11.
|
|
148
|
-
"sdl-mcp-watchman-win32-x64": "0.11.
|
|
147
|
+
"sdl-mcp-watchman-linux-x64": "0.11.13",
|
|
148
|
+
"sdl-mcp-watchman-win32-x64": "0.11.13"
|
|
149
149
|
},
|
|
150
150
|
"devDependencies": {
|
|
151
151
|
"@bufbuild/protobuf": "^2.0.0",
|