@alfe.ai/mcp-bundler 0.3.2 → 0.4.1
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 +26 -0
- package/dist/index.cjs +658 -157
- package/dist/index.d.cts +83 -17
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +83 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +659 -159
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -9,6 +9,8 @@ interface StdioServerConfig {
|
|
|
9
9
|
args?: string[];
|
|
10
10
|
env?: Record<string, string>;
|
|
11
11
|
cwd?: string;
|
|
12
|
+
/** Per-server connect+discovery bound (ms) — overrides `BundlerOptions.connectTimeoutMs`. */
|
|
13
|
+
connectionTimeoutMs?: number;
|
|
12
14
|
}
|
|
13
15
|
interface RemoteServerConfig {
|
|
14
16
|
url: string;
|
|
@@ -67,6 +69,8 @@ interface Logger {
|
|
|
67
69
|
interface McpToolCallResult {
|
|
68
70
|
content: Record<string, unknown>[];
|
|
69
71
|
isError?: boolean;
|
|
72
|
+
structuredContent?: Record<string, unknown>;
|
|
73
|
+
[key: string]: unknown;
|
|
70
74
|
}
|
|
71
75
|
/** A failed MCP tool call, surfaced to the host via `BundlerOptions.onToolError`. */
|
|
72
76
|
interface McpToolErrorInfo {
|
|
@@ -101,6 +105,24 @@ interface BundlerOptions {
|
|
|
101
105
|
* outer bound that keeps re-checking.
|
|
102
106
|
*/
|
|
103
107
|
retrySweepIntervalMs?: number;
|
|
108
|
+
/**
|
|
109
|
+
* Upper bound (ms) on one connect + tool-discovery attempt. A hung child —
|
|
110
|
+
* or a cold `npx` download that never completes the MCP handshake — throws
|
|
111
|
+
* past this bound, which records `lastError` and arms reconnect backoff so
|
|
112
|
+
* the retry sweep can re-attempt. Without a bound such a server has no
|
|
113
|
+
* error, no diagnostics, and no self-heal path. Per-server
|
|
114
|
+
* `connectionTimeoutMs` overrides. 0 disables. Default: 120_000 (generous
|
|
115
|
+
* enough for a cold `npx` package download).
|
|
116
|
+
*/
|
|
117
|
+
connectTimeoutMs?: number;
|
|
118
|
+
/**
|
|
119
|
+
* Also have the retry sweep attempt servers that have NEVER had a connect
|
|
120
|
+
* attempt (e.g. added after the host's warmup pass already ran). Off by
|
|
121
|
+
* default to preserve pure-lazy embedding semantics; the daemon — which
|
|
122
|
+
* eagerly warms everything — enables it so a missed warm self-heals within
|
|
123
|
+
* one sweep instead of stranding the server's tools until a restart.
|
|
124
|
+
*/
|
|
125
|
+
retryNeverConnected?: boolean;
|
|
104
126
|
/**
|
|
105
127
|
* Host hook fired when a tool call fails — thrown or `isError` result.
|
|
106
128
|
* Invoked best-effort (exceptions swallowed); must not block.
|
|
@@ -191,6 +213,9 @@ declare class Connection {
|
|
|
191
213
|
private static readonly RECONNECT_BACKOFF_MAX_MS;
|
|
192
214
|
private readonly onUnexpectedClose;
|
|
193
215
|
private readonly onStderrLine;
|
|
216
|
+
private readonly connectTimeoutMs;
|
|
217
|
+
/** Whether any connect has ever been attempted — drives the eager retry sweep. */
|
|
218
|
+
private connectAttempted;
|
|
194
219
|
constructor(params: {
|
|
195
220
|
name: string;
|
|
196
221
|
config: McpServerConfig;
|
|
@@ -200,6 +225,8 @@ declare class Connection {
|
|
|
200
225
|
onUnexpectedClose?: () => void;
|
|
201
226
|
/** Threaded to the connect factory — pipes stdio child stderr when set. */
|
|
202
227
|
onStderrLine?: (line: string) => void;
|
|
228
|
+
/** Bound (ms) on one connect + discovery attempt. 0/undefined disables. */
|
|
229
|
+
connectTimeoutMs?: number;
|
|
203
230
|
});
|
|
204
231
|
/** Returns the most recent known tool list. May be empty if the server hasn't connected yet. */
|
|
205
232
|
snapshotTools(): McpToolDescriptor[];
|
|
@@ -211,6 +238,13 @@ declare class Connection {
|
|
|
211
238
|
failureCount(): number;
|
|
212
239
|
/** Message from the most recent failed connect attempt, if any. */
|
|
213
240
|
lastErrorMessage(): string | undefined;
|
|
241
|
+
/**
|
|
242
|
+
* Whether a connect was ever attempted (success or failure). A reconciled
|
|
243
|
+
* connection that was never warmed has neither a client nor a `lastError` —
|
|
244
|
+
* this flag lets an eager host's retry sweep find it without also
|
|
245
|
+
* resurrecting cleanly-closed (idle-reaped) connections.
|
|
246
|
+
*/
|
|
247
|
+
hasConnectAttempted(): boolean;
|
|
214
248
|
/** Idle timestamp for reaping. */
|
|
215
249
|
idleSinceMs(): number;
|
|
216
250
|
/**
|
|
@@ -219,6 +253,8 @@ declare class Connection {
|
|
|
219
253
|
*/
|
|
220
254
|
ensureConnected(): Promise<void>;
|
|
221
255
|
private connectAndDiscover;
|
|
256
|
+
/** Race the attempt against `connectTimeoutMs`; 0 disables the bound. */
|
|
257
|
+
private raceConnectTimeout;
|
|
222
258
|
/**
|
|
223
259
|
* Handle an unexpected transport close (crash / network drop). Clears the
|
|
224
260
|
* dead client + tools so the next `ensureConnected` re-spawns. No-op if we
|
|
@@ -271,6 +307,8 @@ declare class McpBundler {
|
|
|
271
307
|
private readonly retrySweepIntervalMs;
|
|
272
308
|
private retrySweepTimer;
|
|
273
309
|
private retrySweepInFlight;
|
|
310
|
+
private readonly connectTimeoutMs;
|
|
311
|
+
private readonly retryNeverConnected;
|
|
274
312
|
private readonly deps;
|
|
275
313
|
private readonly onToolError;
|
|
276
314
|
private readonly onServerCrash;
|
|
@@ -320,8 +358,13 @@ declare class McpBundler {
|
|
|
320
358
|
* 500ms → 30s cap). A server that keeps `exit(1)`-ing fast-fails while in
|
|
321
359
|
* backoff, so repeated sweeps are cheap and never become a tight crash-loop
|
|
322
360
|
* — the backoff widens with each failure. Servers that connect on their
|
|
323
|
-
* first warm
|
|
324
|
-
*
|
|
361
|
+
* first warm are left alone, as are cleanly-closed (idle-reaped) ones.
|
|
362
|
+
*
|
|
363
|
+
* Lazily-added servers that were NEVER attempted (no client, no
|
|
364
|
+
* `lastError`) are also left alone by default — but with
|
|
365
|
+
* `retryNeverConnected` (the daemon's eager mode) the sweep picks them up,
|
|
366
|
+
* so a server added after the host's warmup pass self-heals within one
|
|
367
|
+
* sweep instead of stranding its tools until a restart.
|
|
325
368
|
*
|
|
326
369
|
* Returns the statuses of the servers it attempted (empty if none needed a
|
|
327
370
|
* retry). Never throws — per-server failures are reflected in the status.
|
|
@@ -356,6 +399,12 @@ declare class McpBundler {
|
|
|
356
399
|
* tool name. Returns undefined if the tool is not currently advertised.
|
|
357
400
|
*/
|
|
358
401
|
private routeToolName;
|
|
402
|
+
/**
|
|
403
|
+
* Build one collision-resolved catalog used by BOTH registration and
|
|
404
|
+
* routing. Keeping these views together prevents an advertised `-2` name
|
|
405
|
+
* from becoming uncallable when two child names sanitize to the same key.
|
|
406
|
+
*/
|
|
407
|
+
private resolvedCatalog;
|
|
359
408
|
/**
|
|
360
409
|
* Tear down all connections and stop background tasks. Idempotent.
|
|
361
410
|
* Call from `registerRuntimeLifecycle({ cleanup })` in the host plugin.
|
|
@@ -455,8 +504,8 @@ declare class Store {
|
|
|
455
504
|
* The lock guards the read-then-rename window so two processes
|
|
456
505
|
* (e.g. two `alfe mcp add` shells, or the CLI racing the daemon)
|
|
457
506
|
* can't drop each other's writes. The lock file is at
|
|
458
|
-
* `<storePath>.lock`;
|
|
459
|
-
*
|
|
507
|
+
* `<storePath>.lock`; locks whose recorded writer process is no longer
|
|
508
|
+
* alive are reclaimed so a crashed writer doesn't wedge the store.
|
|
460
509
|
*
|
|
461
510
|
* Pure-function shape (instead of a `read()` then `write(next)`
|
|
462
511
|
* pair) intentionally — it keeps the read-modify-write contract
|
|
@@ -466,18 +515,19 @@ declare class Store {
|
|
|
466
515
|
update(fn: (cur: StoreSchema) => StoreSchema): StoreSchema;
|
|
467
516
|
/**
|
|
468
517
|
* Acquire an inter-process file lock by atomically creating a
|
|
469
|
-
* sentinel via `openSync(lockPath, 'wx')`.
|
|
470
|
-
* backoff up to `LOCK_WAIT_MS`.
|
|
471
|
-
*
|
|
472
|
-
*
|
|
473
|
-
*
|
|
518
|
+
* sentinel via `openSync(lockPath, 'wx')`. Waits with bounded
|
|
519
|
+
* backoff up to `LOCK_WAIT_MS`. A structured lock is reclaimed only when
|
|
520
|
+
* its writer process is no longer alive; age alone cannot steal a lock
|
|
521
|
+
* from a slow but valid writer. Old malformed/legacy locks retain a
|
|
522
|
+
* conservative age fallback.
|
|
474
523
|
*
|
|
475
524
|
* Returns the release function. Single-process callers are
|
|
476
525
|
* unaffected — re-entering the same process spins briefly while
|
|
477
526
|
* the prior call's `finally` runs.
|
|
478
527
|
*/
|
|
479
528
|
private acquireLock;
|
|
480
|
-
private
|
|
529
|
+
private inspectStaleLock;
|
|
530
|
+
private fsyncParentDirectory;
|
|
481
531
|
/**
|
|
482
532
|
* Watch the store file for external changes (e.g. another `alfe mcp add`
|
|
483
533
|
* shelling out from a separate process). Returns an unsubscribe fn.
|
|
@@ -491,6 +541,12 @@ declare class Store {
|
|
|
491
541
|
private disposeWatcher;
|
|
492
542
|
}
|
|
493
543
|
declare function defaultStorePath(): string;
|
|
544
|
+
/**
|
|
545
|
+
* One-way launch-identity fingerprint for cache invalidation across IPC.
|
|
546
|
+
* Store entries contain credentials in env/headers, so consumers that only
|
|
547
|
+
* need equality receive this digest rather than the executable configuration.
|
|
548
|
+
*/
|
|
549
|
+
declare function serverLaunchFingerprint(entry: StoredServerEntry): string;
|
|
494
550
|
/** Pull the runtime config (transport + transport-specific fields) out of a stored entry. */
|
|
495
551
|
declare function toServerConfig(entry: StoredServerEntry): McpServerConfig;
|
|
496
552
|
/** Build a stored entry from a runtime config + ownership metadata. */
|
|
@@ -534,6 +590,7 @@ interface AddServerOptions {
|
|
|
534
590
|
*/
|
|
535
591
|
declare class Manager {
|
|
536
592
|
private readonly store;
|
|
593
|
+
private readonly ownsStore;
|
|
537
594
|
private readonly logger?;
|
|
538
595
|
private bundler?;
|
|
539
596
|
private changeListeners;
|
|
@@ -544,8 +601,11 @@ declare class Manager {
|
|
|
544
601
|
/**
|
|
545
602
|
* Register or overwrite a server entry. Mutation lands in the store
|
|
546
603
|
* synchronously; if a bundler has been attached via `loadIntoBundler`,
|
|
547
|
-
* it
|
|
548
|
-
*
|
|
604
|
+
* it is re-reconciled BEFORE `onChange` listeners fire. A reconcile error is
|
|
605
|
+
* logged and does not roll back the durable store mutation, but listeners do
|
|
606
|
+
* not fire against stale live state. The ordering is load-bearing: the daemon's `onChange`
|
|
607
|
+
* handler warms the bundler's current connections, so the just-added
|
|
608
|
+
* server must already have its Connection object or it is never warmed.
|
|
549
609
|
*/
|
|
550
610
|
addServer(config: McpServerConfig, opts: AddServerOptions): Promise<void>;
|
|
551
611
|
/**
|
|
@@ -592,11 +652,17 @@ declare class Manager {
|
|
|
592
652
|
onChange(cb: () => void): () => void;
|
|
593
653
|
/**
|
|
594
654
|
* Detach from the bundler and stop watching the store. Safe to call
|
|
595
|
-
* multiple times.
|
|
596
|
-
*
|
|
655
|
+
* multiple times. An injected Store remains owned by its caller; a Store
|
|
656
|
+
* constructed by this manager is disposed here.
|
|
597
657
|
*/
|
|
598
658
|
dispose(): Promise<void>;
|
|
599
|
-
|
|
659
|
+
/**
|
|
660
|
+
* Awaited by every mutator so `onChange` listeners observe a bundler
|
|
661
|
+
* that already contains the mutation. Reconcile failures are logged and
|
|
662
|
+
* return false so callers preserve the durable mutation without notifying
|
|
663
|
+
* listeners against stale derived state.
|
|
664
|
+
*/
|
|
665
|
+
private reconcileBundlerLogged;
|
|
600
666
|
private reconcileBundler;
|
|
601
667
|
private fireChange;
|
|
602
668
|
}
|
|
@@ -632,7 +698,7 @@ interface PatternAOptions {
|
|
|
632
698
|
}
|
|
633
699
|
interface PatternAViolation {
|
|
634
700
|
tool: string;
|
|
635
|
-
reason:
|
|
701
|
+
reason: 'missing-selector-property' | 'selector-not-required' | 'selector-property-not-string';
|
|
636
702
|
detail: string;
|
|
637
703
|
}
|
|
638
704
|
/**
|
|
@@ -661,5 +727,5 @@ declare function fromMcpDescriptor(descriptor: McpToolDescriptor): ValidatableTo
|
|
|
661
727
|
//# sourceMappingURL=pattern-a-validator.d.ts.map
|
|
662
728
|
|
|
663
729
|
//#endregion
|
|
664
|
-
export { type AddServerOptions, type BundlerOptions, type ConnectContext, Connection, type ConnectionDeps, type Logger, Manager, type ManagerOptions, McpBundler, type McpClientHandle, type McpServerConfig, type McpServerStatus, type McpToolCallResult, type McpToolDescriptor, type McpToolErrorInfo, type McpTransportKind, type PatternAOptions, type PatternAViolation, type ReconcileDiff, type RemoteServerConfig, STDIO_ENV_DENYLIST, type ServerOwner, type StdioServerConfig, Store, type StoreOptions, type StoreSchema, type StoredServerEntry, type ValidatableTool, assertPatternA, buildNamespacedToolName, checkPatternA, defaultConnect, defaultStorePath, disambiguateAgainst, fromMcpDescriptor, sanitizeNameSegment, sanitizeStdioEnv, toServerConfig, toStoredEntry };
|
|
730
|
+
export { type AddServerOptions, type BundlerOptions, type ConnectContext, Connection, type ConnectionDeps, type Logger, Manager, type ManagerOptions, McpBundler, type McpClientHandle, type McpServerConfig, type McpServerStatus, type McpToolCallResult, type McpToolDescriptor, type McpToolErrorInfo, type McpTransportKind, type PatternAOptions, type PatternAViolation, type ReconcileDiff, type RemoteServerConfig, STDIO_ENV_DENYLIST, type ServerOwner, type StdioServerConfig, Store, type StoreOptions, type StoreSchema, type StoredServerEntry, type ValidatableTool, assertPatternA, buildNamespacedToolName, checkPatternA, defaultConnect, defaultStorePath, disambiguateAgainst, fromMcpDescriptor, sanitizeNameSegment, sanitizeStdioEnv, serverLaunchFingerprint, toServerConfig, toStoredEntry };
|
|
665
731
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/connection.ts","../src/bundler.ts","../src/tool-naming.ts","../src/store.ts","../src/manager.ts","../src/pattern-a-validator.ts"],"mappings":";;AAIA;;;AAAkD,KAAtC,eAAA,GAAkB,iBAAoB,GAAA,kBAAA;AAAkB,UAEnD,iBAAA,CAFmD;EAEnD,OAAA,EAAA,MAAA;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/connection.ts","../src/bundler.ts","../src/tool-naming.ts","../src/store.ts","../src/manager.ts","../src/pattern-a-validator.ts"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ interface StdioServerConfig {
|
|
|
9
9
|
args?: string[];
|
|
10
10
|
env?: Record<string, string>;
|
|
11
11
|
cwd?: string;
|
|
12
|
+
/** Per-server connect+discovery bound (ms) — overrides `BundlerOptions.connectTimeoutMs`. */
|
|
13
|
+
connectionTimeoutMs?: number;
|
|
12
14
|
}
|
|
13
15
|
interface RemoteServerConfig {
|
|
14
16
|
url: string;
|
|
@@ -67,6 +69,8 @@ interface Logger {
|
|
|
67
69
|
interface McpToolCallResult {
|
|
68
70
|
content: Record<string, unknown>[];
|
|
69
71
|
isError?: boolean;
|
|
72
|
+
structuredContent?: Record<string, unknown>;
|
|
73
|
+
[key: string]: unknown;
|
|
70
74
|
}
|
|
71
75
|
/** A failed MCP tool call, surfaced to the host via `BundlerOptions.onToolError`. */
|
|
72
76
|
interface McpToolErrorInfo {
|
|
@@ -101,6 +105,24 @@ interface BundlerOptions {
|
|
|
101
105
|
* outer bound that keeps re-checking.
|
|
102
106
|
*/
|
|
103
107
|
retrySweepIntervalMs?: number;
|
|
108
|
+
/**
|
|
109
|
+
* Upper bound (ms) on one connect + tool-discovery attempt. A hung child —
|
|
110
|
+
* or a cold `npx` download that never completes the MCP handshake — throws
|
|
111
|
+
* past this bound, which records `lastError` and arms reconnect backoff so
|
|
112
|
+
* the retry sweep can re-attempt. Without a bound such a server has no
|
|
113
|
+
* error, no diagnostics, and no self-heal path. Per-server
|
|
114
|
+
* `connectionTimeoutMs` overrides. 0 disables. Default: 120_000 (generous
|
|
115
|
+
* enough for a cold `npx` package download).
|
|
116
|
+
*/
|
|
117
|
+
connectTimeoutMs?: number;
|
|
118
|
+
/**
|
|
119
|
+
* Also have the retry sweep attempt servers that have NEVER had a connect
|
|
120
|
+
* attempt (e.g. added after the host's warmup pass already ran). Off by
|
|
121
|
+
* default to preserve pure-lazy embedding semantics; the daemon — which
|
|
122
|
+
* eagerly warms everything — enables it so a missed warm self-heals within
|
|
123
|
+
* one sweep instead of stranding the server's tools until a restart.
|
|
124
|
+
*/
|
|
125
|
+
retryNeverConnected?: boolean;
|
|
104
126
|
/**
|
|
105
127
|
* Host hook fired when a tool call fails — thrown or `isError` result.
|
|
106
128
|
* Invoked best-effort (exceptions swallowed); must not block.
|
|
@@ -191,6 +213,9 @@ declare class Connection {
|
|
|
191
213
|
private static readonly RECONNECT_BACKOFF_MAX_MS;
|
|
192
214
|
private readonly onUnexpectedClose;
|
|
193
215
|
private readonly onStderrLine;
|
|
216
|
+
private readonly connectTimeoutMs;
|
|
217
|
+
/** Whether any connect has ever been attempted — drives the eager retry sweep. */
|
|
218
|
+
private connectAttempted;
|
|
194
219
|
constructor(params: {
|
|
195
220
|
name: string;
|
|
196
221
|
config: McpServerConfig;
|
|
@@ -200,6 +225,8 @@ declare class Connection {
|
|
|
200
225
|
onUnexpectedClose?: () => void;
|
|
201
226
|
/** Threaded to the connect factory — pipes stdio child stderr when set. */
|
|
202
227
|
onStderrLine?: (line: string) => void;
|
|
228
|
+
/** Bound (ms) on one connect + discovery attempt. 0/undefined disables. */
|
|
229
|
+
connectTimeoutMs?: number;
|
|
203
230
|
});
|
|
204
231
|
/** Returns the most recent known tool list. May be empty if the server hasn't connected yet. */
|
|
205
232
|
snapshotTools(): McpToolDescriptor[];
|
|
@@ -211,6 +238,13 @@ declare class Connection {
|
|
|
211
238
|
failureCount(): number;
|
|
212
239
|
/** Message from the most recent failed connect attempt, if any. */
|
|
213
240
|
lastErrorMessage(): string | undefined;
|
|
241
|
+
/**
|
|
242
|
+
* Whether a connect was ever attempted (success or failure). A reconciled
|
|
243
|
+
* connection that was never warmed has neither a client nor a `lastError` —
|
|
244
|
+
* this flag lets an eager host's retry sweep find it without also
|
|
245
|
+
* resurrecting cleanly-closed (idle-reaped) connections.
|
|
246
|
+
*/
|
|
247
|
+
hasConnectAttempted(): boolean;
|
|
214
248
|
/** Idle timestamp for reaping. */
|
|
215
249
|
idleSinceMs(): number;
|
|
216
250
|
/**
|
|
@@ -219,6 +253,8 @@ declare class Connection {
|
|
|
219
253
|
*/
|
|
220
254
|
ensureConnected(): Promise<void>;
|
|
221
255
|
private connectAndDiscover;
|
|
256
|
+
/** Race the attempt against `connectTimeoutMs`; 0 disables the bound. */
|
|
257
|
+
private raceConnectTimeout;
|
|
222
258
|
/**
|
|
223
259
|
* Handle an unexpected transport close (crash / network drop). Clears the
|
|
224
260
|
* dead client + tools so the next `ensureConnected` re-spawns. No-op if we
|
|
@@ -271,6 +307,8 @@ declare class McpBundler {
|
|
|
271
307
|
private readonly retrySweepIntervalMs;
|
|
272
308
|
private retrySweepTimer;
|
|
273
309
|
private retrySweepInFlight;
|
|
310
|
+
private readonly connectTimeoutMs;
|
|
311
|
+
private readonly retryNeverConnected;
|
|
274
312
|
private readonly deps;
|
|
275
313
|
private readonly onToolError;
|
|
276
314
|
private readonly onServerCrash;
|
|
@@ -320,8 +358,13 @@ declare class McpBundler {
|
|
|
320
358
|
* 500ms → 30s cap). A server that keeps `exit(1)`-ing fast-fails while in
|
|
321
359
|
* backoff, so repeated sweeps are cheap and never become a tight crash-loop
|
|
322
360
|
* — the backoff widens with each failure. Servers that connect on their
|
|
323
|
-
* first warm
|
|
324
|
-
*
|
|
361
|
+
* first warm are left alone, as are cleanly-closed (idle-reaped) ones.
|
|
362
|
+
*
|
|
363
|
+
* Lazily-added servers that were NEVER attempted (no client, no
|
|
364
|
+
* `lastError`) are also left alone by default — but with
|
|
365
|
+
* `retryNeverConnected` (the daemon's eager mode) the sweep picks them up,
|
|
366
|
+
* so a server added after the host's warmup pass self-heals within one
|
|
367
|
+
* sweep instead of stranding its tools until a restart.
|
|
325
368
|
*
|
|
326
369
|
* Returns the statuses of the servers it attempted (empty if none needed a
|
|
327
370
|
* retry). Never throws — per-server failures are reflected in the status.
|
|
@@ -356,6 +399,12 @@ declare class McpBundler {
|
|
|
356
399
|
* tool name. Returns undefined if the tool is not currently advertised.
|
|
357
400
|
*/
|
|
358
401
|
private routeToolName;
|
|
402
|
+
/**
|
|
403
|
+
* Build one collision-resolved catalog used by BOTH registration and
|
|
404
|
+
* routing. Keeping these views together prevents an advertised `-2` name
|
|
405
|
+
* from becoming uncallable when two child names sanitize to the same key.
|
|
406
|
+
*/
|
|
407
|
+
private resolvedCatalog;
|
|
359
408
|
/**
|
|
360
409
|
* Tear down all connections and stop background tasks. Idempotent.
|
|
361
410
|
* Call from `registerRuntimeLifecycle({ cleanup })` in the host plugin.
|
|
@@ -455,8 +504,8 @@ declare class Store {
|
|
|
455
504
|
* The lock guards the read-then-rename window so two processes
|
|
456
505
|
* (e.g. two `alfe mcp add` shells, or the CLI racing the daemon)
|
|
457
506
|
* can't drop each other's writes. The lock file is at
|
|
458
|
-
* `<storePath>.lock`;
|
|
459
|
-
*
|
|
507
|
+
* `<storePath>.lock`; locks whose recorded writer process is no longer
|
|
508
|
+
* alive are reclaimed so a crashed writer doesn't wedge the store.
|
|
460
509
|
*
|
|
461
510
|
* Pure-function shape (instead of a `read()` then `write(next)`
|
|
462
511
|
* pair) intentionally — it keeps the read-modify-write contract
|
|
@@ -466,18 +515,19 @@ declare class Store {
|
|
|
466
515
|
update(fn: (cur: StoreSchema) => StoreSchema): StoreSchema;
|
|
467
516
|
/**
|
|
468
517
|
* Acquire an inter-process file lock by atomically creating a
|
|
469
|
-
* sentinel via `openSync(lockPath, 'wx')`.
|
|
470
|
-
* backoff up to `LOCK_WAIT_MS`.
|
|
471
|
-
*
|
|
472
|
-
*
|
|
473
|
-
*
|
|
518
|
+
* sentinel via `openSync(lockPath, 'wx')`. Waits with bounded
|
|
519
|
+
* backoff up to `LOCK_WAIT_MS`. A structured lock is reclaimed only when
|
|
520
|
+
* its writer process is no longer alive; age alone cannot steal a lock
|
|
521
|
+
* from a slow but valid writer. Old malformed/legacy locks retain a
|
|
522
|
+
* conservative age fallback.
|
|
474
523
|
*
|
|
475
524
|
* Returns the release function. Single-process callers are
|
|
476
525
|
* unaffected — re-entering the same process spins briefly while
|
|
477
526
|
* the prior call's `finally` runs.
|
|
478
527
|
*/
|
|
479
528
|
private acquireLock;
|
|
480
|
-
private
|
|
529
|
+
private inspectStaleLock;
|
|
530
|
+
private fsyncParentDirectory;
|
|
481
531
|
/**
|
|
482
532
|
* Watch the store file for external changes (e.g. another `alfe mcp add`
|
|
483
533
|
* shelling out from a separate process). Returns an unsubscribe fn.
|
|
@@ -491,6 +541,12 @@ declare class Store {
|
|
|
491
541
|
private disposeWatcher;
|
|
492
542
|
}
|
|
493
543
|
declare function defaultStorePath(): string;
|
|
544
|
+
/**
|
|
545
|
+
* One-way launch-identity fingerprint for cache invalidation across IPC.
|
|
546
|
+
* Store entries contain credentials in env/headers, so consumers that only
|
|
547
|
+
* need equality receive this digest rather than the executable configuration.
|
|
548
|
+
*/
|
|
549
|
+
declare function serverLaunchFingerprint(entry: StoredServerEntry): string;
|
|
494
550
|
/** Pull the runtime config (transport + transport-specific fields) out of a stored entry. */
|
|
495
551
|
declare function toServerConfig(entry: StoredServerEntry): McpServerConfig;
|
|
496
552
|
/** Build a stored entry from a runtime config + ownership metadata. */
|
|
@@ -534,6 +590,7 @@ interface AddServerOptions {
|
|
|
534
590
|
*/
|
|
535
591
|
declare class Manager {
|
|
536
592
|
private readonly store;
|
|
593
|
+
private readonly ownsStore;
|
|
537
594
|
private readonly logger?;
|
|
538
595
|
private bundler?;
|
|
539
596
|
private changeListeners;
|
|
@@ -544,8 +601,11 @@ declare class Manager {
|
|
|
544
601
|
/**
|
|
545
602
|
* Register or overwrite a server entry. Mutation lands in the store
|
|
546
603
|
* synchronously; if a bundler has been attached via `loadIntoBundler`,
|
|
547
|
-
* it
|
|
548
|
-
*
|
|
604
|
+
* it is re-reconciled BEFORE `onChange` listeners fire. A reconcile error is
|
|
605
|
+
* logged and does not roll back the durable store mutation, but listeners do
|
|
606
|
+
* not fire against stale live state. The ordering is load-bearing: the daemon's `onChange`
|
|
607
|
+
* handler warms the bundler's current connections, so the just-added
|
|
608
|
+
* server must already have its Connection object or it is never warmed.
|
|
549
609
|
*/
|
|
550
610
|
addServer(config: McpServerConfig, opts: AddServerOptions): Promise<void>;
|
|
551
611
|
/**
|
|
@@ -592,11 +652,17 @@ declare class Manager {
|
|
|
592
652
|
onChange(cb: () => void): () => void;
|
|
593
653
|
/**
|
|
594
654
|
* Detach from the bundler and stop watching the store. Safe to call
|
|
595
|
-
* multiple times.
|
|
596
|
-
*
|
|
655
|
+
* multiple times. An injected Store remains owned by its caller; a Store
|
|
656
|
+
* constructed by this manager is disposed here.
|
|
597
657
|
*/
|
|
598
658
|
dispose(): Promise<void>;
|
|
599
|
-
|
|
659
|
+
/**
|
|
660
|
+
* Awaited by every mutator so `onChange` listeners observe a bundler
|
|
661
|
+
* that already contains the mutation. Reconcile failures are logged and
|
|
662
|
+
* return false so callers preserve the durable mutation without notifying
|
|
663
|
+
* listeners against stale derived state.
|
|
664
|
+
*/
|
|
665
|
+
private reconcileBundlerLogged;
|
|
600
666
|
private reconcileBundler;
|
|
601
667
|
private fireChange;
|
|
602
668
|
}
|
|
@@ -632,7 +698,7 @@ interface PatternAOptions {
|
|
|
632
698
|
}
|
|
633
699
|
interface PatternAViolation {
|
|
634
700
|
tool: string;
|
|
635
|
-
reason:
|
|
701
|
+
reason: 'missing-selector-property' | 'selector-not-required' | 'selector-property-not-string';
|
|
636
702
|
detail: string;
|
|
637
703
|
}
|
|
638
704
|
/**
|
|
@@ -661,5 +727,5 @@ declare function fromMcpDescriptor(descriptor: McpToolDescriptor): ValidatableTo
|
|
|
661
727
|
//# sourceMappingURL=pattern-a-validator.d.ts.map
|
|
662
728
|
|
|
663
729
|
//#endregion
|
|
664
|
-
export { type AddServerOptions, type BundlerOptions, type ConnectContext, Connection, type ConnectionDeps, type Logger, Manager, type ManagerOptions, McpBundler, type McpClientHandle, type McpServerConfig, type McpServerStatus, type McpToolCallResult, type McpToolDescriptor, type McpToolErrorInfo, type McpTransportKind, type PatternAOptions, type PatternAViolation, type ReconcileDiff, type RemoteServerConfig, STDIO_ENV_DENYLIST, type ServerOwner, type StdioServerConfig, Store, type StoreOptions, type StoreSchema, type StoredServerEntry, type ValidatableTool, assertPatternA, buildNamespacedToolName, checkPatternA, defaultConnect, defaultStorePath, disambiguateAgainst, fromMcpDescriptor, sanitizeNameSegment, sanitizeStdioEnv, toServerConfig, toStoredEntry };
|
|
730
|
+
export { type AddServerOptions, type BundlerOptions, type ConnectContext, Connection, type ConnectionDeps, type Logger, Manager, type ManagerOptions, McpBundler, type McpClientHandle, type McpServerConfig, type McpServerStatus, type McpToolCallResult, type McpToolDescriptor, type McpToolErrorInfo, type McpTransportKind, type PatternAOptions, type PatternAViolation, type ReconcileDiff, type RemoteServerConfig, STDIO_ENV_DENYLIST, type ServerOwner, type StdioServerConfig, Store, type StoreOptions, type StoreSchema, type StoredServerEntry, type ValidatableTool, assertPatternA, buildNamespacedToolName, checkPatternA, defaultConnect, defaultStorePath, disambiguateAgainst, fromMcpDescriptor, sanitizeNameSegment, sanitizeStdioEnv, serverLaunchFingerprint, toServerConfig, toStoredEntry };
|
|
665
731
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/connection.ts","../src/bundler.ts","../src/tool-naming.ts","../src/store.ts","../src/manager.ts","../src/pattern-a-validator.ts"],"mappings":";;AAIA;;;AAAkD,KAAtC,eAAA,GAAkB,iBAAoB,GAAA,kBAAA;AAAkB,UAEnD,iBAAA,CAFmD;EAEnD,OAAA,EAAA,MAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/connection.ts","../src/bundler.ts","../src/tool-naming.ts","../src/store.ts","../src/manager.ts","../src/pattern-a-validator.ts"],"mappings":"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"}
|