@vinkius-core/mcp-fusion 2.14.0 → 2.14.2

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.
Files changed (61) hide show
  1. package/dist/cli/fusion.js +35 -35
  2. package/dist/cli/templates/config.js +26 -26
  3. package/dist/cli/templates/core.d.ts.map +1 -1
  4. package/dist/cli/templates/core.js +108 -111
  5. package/dist/cli/templates/core.js.map +1 -1
  6. package/dist/cli/templates/middleware.js +25 -25
  7. package/dist/cli/templates/readme.js +142 -142
  8. package/dist/cli/templates/testing.js +83 -83
  9. package/dist/cli/templates/tools.js +46 -46
  10. package/dist/cli/templates/vectors/database.js +69 -69
  11. package/dist/cli/templates/vectors/oauth.js +63 -63
  12. package/dist/cli/templates/vectors/openapi.js +97 -97
  13. package/dist/core/builder/ActionGroupBuilder.d.ts +6 -2
  14. package/dist/core/builder/ActionGroupBuilder.d.ts.map +1 -1
  15. package/dist/core/builder/ActionGroupBuilder.js +6 -2
  16. package/dist/core/builder/ActionGroupBuilder.js.map +1 -1
  17. package/dist/core/builder/FluentRouter.d.ts +6 -2
  18. package/dist/core/builder/FluentRouter.d.ts.map +1 -1
  19. package/dist/core/builder/FluentRouter.js +6 -2
  20. package/dist/core/builder/FluentRouter.js.map +1 -1
  21. package/dist/core/builder/FluentToolBuilder.d.ts +45 -9
  22. package/dist/core/builder/FluentToolBuilder.d.ts.map +1 -1
  23. package/dist/core/builder/FluentToolBuilder.js +54 -27
  24. package/dist/core/builder/FluentToolBuilder.js.map +1 -1
  25. package/dist/core/builder/GroupedToolBuilder.d.ts +32 -2
  26. package/dist/core/builder/GroupedToolBuilder.d.ts.map +1 -1
  27. package/dist/core/builder/GroupedToolBuilder.js +47 -2
  28. package/dist/core/builder/GroupedToolBuilder.js.map +1 -1
  29. package/dist/core/builder/defineTool.d.ts +5 -4
  30. package/dist/core/builder/defineTool.d.ts.map +1 -1
  31. package/dist/core/builder/defineTool.js +3 -2
  32. package/dist/core/builder/defineTool.js.map +1 -1
  33. package/dist/core/initFusion.d.ts +26 -1
  34. package/dist/core/initFusion.d.ts.map +1 -1
  35. package/dist/core/initFusion.js +5 -0
  36. package/dist/core/initFusion.js.map +1 -1
  37. package/dist/fsm/StateMachineGate.d.ts +264 -0
  38. package/dist/fsm/StateMachineGate.d.ts.map +1 -0
  39. package/dist/fsm/StateMachineGate.js +343 -0
  40. package/dist/fsm/StateMachineGate.js.map +1 -0
  41. package/dist/index.d.ts +4 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +3 -0
  44. package/dist/index.js.map +1 -1
  45. package/dist/introspection/SemanticProbe.js +49 -49
  46. package/dist/observability/TelemetryBus.d.ts +82 -0
  47. package/dist/observability/TelemetryBus.d.ts.map +1 -0
  48. package/dist/observability/TelemetryBus.js +335 -0
  49. package/dist/observability/TelemetryBus.js.map +1 -0
  50. package/dist/observability/TelemetryEvent.d.ts +171 -0
  51. package/dist/observability/TelemetryEvent.d.ts.map +1 -0
  52. package/dist/observability/TelemetryEvent.js +2 -0
  53. package/dist/observability/TelemetryEvent.js.map +1 -0
  54. package/dist/presenter/definePresenter.d.ts +2 -2
  55. package/dist/presenter/definePresenter.d.ts.map +1 -1
  56. package/dist/prompt/FluentPromptBuilder.d.ts.map +1 -1
  57. package/dist/server/ServerAttachment.d.ts +63 -0
  58. package/dist/server/ServerAttachment.d.ts.map +1 -1
  59. package/dist/server/ServerAttachment.js +149 -6
  60. package/dist/server/ServerAttachment.js.map +1 -1
  61. package/package.json +10 -3
@@ -0,0 +1,335 @@
1
+ /**
2
+ * TelemetryBus — Shadow Socket IPC Server
3
+ *
4
+ * Fire-and-forget out-of-band telemetry transport. Creates a Named Pipe
5
+ * (Windows) or Unix Domain Socket (POSIX) that streams NDJSON events
6
+ * to connected `fusion top` / `davinci` TUI clients.
7
+ *
8
+ * Architecture:
9
+ * ┌─────────────────────────────────────────────────────┐
10
+ * │ MCP Server Process (owns the IPC server) │
11
+ * │ │
12
+ * │ createTelemetryBus() │
13
+ * │ │ │
14
+ * │ ▼ │
15
+ * │ net.createServer() → Named Pipe / Unix Socket │
16
+ * │ │ │
17
+ * │ ▼ │
18
+ * │ emit(event) → NDJSON → broadcast to all clients │
19
+ * │ │ │
20
+ * │ └─ If 0 clients → silent no-op (zero overhead) │
21
+ * └─────────────────────────────────────────────────────┘
22
+ *
23
+ * Security mitigations (Staff Engineer Gotchas):
24
+ * 1. chmod 0o600 on Unix sockets (prevents PII sniffing)
25
+ * 2. Ghost socket recovery (stale file → probe → unlink)
26
+ * 3. Backpressure: slow clients disconnected at 64KB buffer
27
+ * 4. Clean shutdown on process exit / SIGTERM
28
+ *
29
+ * @module
30
+ */
31
+ import { createServer, connect } from 'node:net';
32
+ import { existsSync, unlinkSync, chmodSync, statSync } from 'node:fs';
33
+ import { platform } from 'node:os';
34
+ // ============================================================================
35
+ // Constants
36
+ // ============================================================================
37
+ /** Maximum write buffer per client before forced disconnect */
38
+ const MAX_CLIENT_BUFFER_BYTES = 65_536; // 64KB
39
+ /** Heartbeat interval in milliseconds */
40
+ const HEARTBEAT_INTERVAL_MS = 5_000;
41
+ // ============================================================================
42
+ // Path Convention
43
+ // ============================================================================
44
+ /**
45
+ * Compute the IPC path for a given process ID.
46
+ *
47
+ * - Windows: `\\.\pipe\mcp-fusion-{pid}` (Named Pipe, auto-cleaned by OS)
48
+ * - POSIX: `/tmp/mcp-fusion-{pid}.sock` (Unix Domain Socket)
49
+ *
50
+ * @param pid - Process ID (defaults to `process.pid`)
51
+ * @returns The IPC path string
52
+ */
53
+ export function getTelemetryPath(pid) {
54
+ const id = pid ?? process.pid;
55
+ if (platform() === 'win32') {
56
+ return `\\\\.\\pipe\\mcp-fusion-${id}`;
57
+ }
58
+ return `/tmp/mcp-fusion-${id}.sock`;
59
+ }
60
+ /**
61
+ * Discover active telemetry sockets by scanning for `mcp-fusion-*.sock`.
62
+ * Returns an array of `{ pid, path }` for each discovered socket.
63
+ *
64
+ * On Windows, Named Pipes are not file-system entities, so we probe
65
+ * a list of candidate PIDs from the user.
66
+ *
67
+ * @param candidatePids - Optional list of PIDs to probe (Windows-only)
68
+ * @returns Array of discovered sockets with their PIDs
69
+ */
70
+ export function discoverSockets(candidatePids) {
71
+ if (platform() === 'win32') {
72
+ // On Windows, Named Pipes don't live in the filesystem.
73
+ // We probe the candidate PIDs by attempting a connection.
74
+ const pids = candidatePids ?? [];
75
+ return pids
76
+ .map((pid) => ({ pid, path: getTelemetryPath(pid) }));
77
+ }
78
+ // On POSIX: scan /tmp for mcp-fusion-*.sock files
79
+ const results = [];
80
+ try {
81
+ const { readdirSync } = require('node:fs');
82
+ const files = readdirSync('/tmp');
83
+ for (const file of files) {
84
+ const match = file.match(/^mcp-fusion-(\d+)\.sock$/);
85
+ if (match) {
86
+ const pid = parseInt(match[1], 10);
87
+ const path = `/tmp/${file}`;
88
+ results.push({ pid, path });
89
+ }
90
+ }
91
+ }
92
+ catch {
93
+ // /tmp scan failed — return empty
94
+ }
95
+ return results;
96
+ }
97
+ // ============================================================================
98
+ // Ghost Socket Recovery (Gotcha #2)
99
+ // ============================================================================
100
+ /**
101
+ * Check if a socket file is a "ghost" (stale, left by a crashed process).
102
+ *
103
+ * Attempts a dummy connection. If `ECONNREFUSED`, the socket is stale
104
+ * and safe to unlink. If the connection succeeds, it's alive — don't touch it.
105
+ *
106
+ * @param socketPath - Path to the Unix socket file
107
+ * @returns Promise that resolves to `true` if the ghost was cleaned up
108
+ * @internal
109
+ */
110
+ function cleanGhostSocket(socketPath) {
111
+ return new Promise((resolve) => {
112
+ // On Windows, Named Pipes are auto-cleaned — skip
113
+ if (platform() === 'win32') {
114
+ resolve(false);
115
+ return;
116
+ }
117
+ if (!existsSync(socketPath)) {
118
+ resolve(false);
119
+ return;
120
+ }
121
+ // Verify it's actually a socket file, not a regular file
122
+ try {
123
+ const stats = statSync(socketPath);
124
+ if (!stats.isSocket()) {
125
+ // Not a socket — don't touch it
126
+ resolve(false);
127
+ return;
128
+ }
129
+ }
130
+ catch {
131
+ resolve(false);
132
+ return;
133
+ }
134
+ // Probe with a dummy client connection
135
+ const probe = connect(socketPath);
136
+ const timeout = setTimeout(() => {
137
+ // Connection hanging — assume ghost, clean up
138
+ probe.destroy();
139
+ try {
140
+ unlinkSync(socketPath);
141
+ }
142
+ catch { /* ignore */ }
143
+ resolve(true);
144
+ }, 500);
145
+ probe.on('connect', () => {
146
+ // Socket is alive — another server is using it!
147
+ clearTimeout(timeout);
148
+ probe.destroy();
149
+ resolve(false);
150
+ });
151
+ probe.on('error', (err) => {
152
+ clearTimeout(timeout);
153
+ probe.destroy();
154
+ if (err.code === 'ECONNREFUSED') {
155
+ // Ghost socket — safe to remove
156
+ try {
157
+ unlinkSync(socketPath);
158
+ }
159
+ catch { /* ignore */ }
160
+ resolve(true);
161
+ }
162
+ resolve(false);
163
+ });
164
+ });
165
+ }
166
+ /**
167
+ * Create an out-of-band telemetry bus for MCP Fusion.
168
+ *
169
+ * The returned `emit` function is the {@link TelemetrySink} to pass
170
+ * to `AttachOptions.telemetry`. It broadcasts events as NDJSON
171
+ * to all connected TUI clients via IPC.
172
+ *
173
+ * When no clients are connected, `emit()` is a no-op — zero overhead.
174
+ *
175
+ * @param config - Optional configuration
176
+ * @returns A promise that resolves to the running bus instance
177
+ *
178
+ * @example
179
+ * ```typescript
180
+ * import { createTelemetryBus } from '@vinkius-core/mcp-fusion/observability';
181
+ *
182
+ * const bus = await createTelemetryBus();
183
+ *
184
+ * // Pass to server attachment
185
+ * registry.attachToServer(server, {
186
+ * contextFactory: createContext,
187
+ * telemetry: bus.emit,
188
+ * });
189
+ *
190
+ * // On shutdown
191
+ * await bus.close();
192
+ * ```
193
+ */
194
+ export async function createTelemetryBus(config) {
195
+ const socketPath = config?.path ?? getTelemetryPath();
196
+ const clients = new Set();
197
+ // ── Gotcha #2: Ghost Socket Recovery ──────────────────
198
+ await cleanGhostSocket(socketPath);
199
+ // ── Create IPC Server ─────────────────────────────────
200
+ const server = createServer((client) => {
201
+ clients.add(client);
202
+ // Send initial topology snapshot if available
203
+ if (config?.onConnect) {
204
+ const topology = config.onConnect();
205
+ if (topology) {
206
+ try {
207
+ client.write(JSON.stringify(topology) + '\n');
208
+ }
209
+ catch { /* swallow */ }
210
+ }
211
+ }
212
+ client.on('error', () => {
213
+ clients.delete(client);
214
+ });
215
+ client.on('close', () => {
216
+ clients.delete(client);
217
+ });
218
+ });
219
+ // ── Start Listening ───────────────────────────────────
220
+ await new Promise((resolve, reject) => {
221
+ server.on('error', (err) => {
222
+ if (err.code === 'EADDRINUSE') {
223
+ // Final fallback: force unlink and retry
224
+ try {
225
+ unlinkSync(socketPath);
226
+ }
227
+ catch { /* ignore */ }
228
+ server.listen(socketPath, () => resolve());
229
+ }
230
+ else {
231
+ reject(err);
232
+ }
233
+ });
234
+ server.listen(socketPath, () => resolve());
235
+ });
236
+ // ── Gotcha #1: IPC Security (chmod 0o600) ─────────────
237
+ // Restrict socket to owner-only on POSIX to prevent PII sniffing
238
+ if (platform() !== 'win32') {
239
+ try {
240
+ chmodSync(socketPath, 0o600);
241
+ }
242
+ catch {
243
+ // Non-fatal — log warning via stderr (never stdout!)
244
+ process.stderr.write('[mcp-fusion] Warning: Could not restrict socket permissions.\n');
245
+ }
246
+ }
247
+ // ── Heartbeat Timer ───────────────────────────────────
248
+ const heartbeatTimer = setInterval(() => {
249
+ if (clients.size === 0)
250
+ return;
251
+ const mem = process.memoryUsage();
252
+ emit({
253
+ type: 'heartbeat',
254
+ heapUsedBytes: mem.heapUsed,
255
+ heapTotalBytes: mem.heapTotal,
256
+ rssBytes: mem.rss,
257
+ uptimeSeconds: Math.floor(process.uptime()),
258
+ timestamp: Date.now(),
259
+ });
260
+ }, HEARTBEAT_INTERVAL_MS);
261
+ // Don't let the heartbeat timer keep the process alive
262
+ heartbeatTimer.unref();
263
+ // ── Emit Function (Fire-and-Forget) ───────────────────
264
+ function emit(event) {
265
+ // Zero overhead when no clients
266
+ if (clients.size === 0)
267
+ return;
268
+ let line;
269
+ try {
270
+ line = JSON.stringify(event) + '\n';
271
+ }
272
+ catch {
273
+ return; // Non-serializable event — silently drop
274
+ }
275
+ for (const client of clients) {
276
+ // ── Gotcha #3 (Backpressure) ──────────────────
277
+ // If the client's write buffer exceeds the limit,
278
+ // disconnect it to protect the server from memory bloat
279
+ if (client.writableLength > MAX_CLIENT_BUFFER_BYTES) {
280
+ client.destroy();
281
+ clients.delete(client);
282
+ continue;
283
+ }
284
+ try {
285
+ client.write(line);
286
+ }
287
+ catch {
288
+ // Write failed — client is dead, remove it
289
+ client.destroy();
290
+ clients.delete(client);
291
+ }
292
+ }
293
+ }
294
+ // ── Clean Shutdown ────────────────────────────────────
295
+ function cleanup() {
296
+ clearInterval(heartbeatTimer);
297
+ for (const client of clients) {
298
+ try {
299
+ client.destroy();
300
+ }
301
+ catch { /* ignore */ }
302
+ }
303
+ clients.clear();
304
+ try {
305
+ server.close();
306
+ }
307
+ catch { /* ignore */ }
308
+ // Remove socket file on POSIX
309
+ if (platform() !== 'win32') {
310
+ try {
311
+ unlinkSync(socketPath);
312
+ }
313
+ catch { /* ignore */ }
314
+ }
315
+ }
316
+ // Register cleanup on process exit signals
317
+ const exitHandler = () => { cleanup(); };
318
+ process.on('exit', exitHandler);
319
+ process.on('SIGINT', exitHandler);
320
+ process.on('SIGTERM', exitHandler);
321
+ // ── Close Method ──────────────────────────────────────
322
+ async function close() {
323
+ process.removeListener('exit', exitHandler);
324
+ process.removeListener('SIGINT', exitHandler);
325
+ process.removeListener('SIGTERM', exitHandler);
326
+ cleanup();
327
+ }
328
+ return {
329
+ emit,
330
+ path: socketPath,
331
+ clientCount: () => clients.size,
332
+ close,
333
+ };
334
+ }
335
+ //# sourceMappingURL=TelemetryBus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetryBus.js","sourceRoot":"","sources":["../../src/observability/TelemetryBus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * TelemetryEvent — Enriched Out-of-Band Telemetry Types
3
+ *
4
+ * Extends the core {@link DebugEvent} discriminated union with
5
+ * domain-specific telemetry events for the Shadow Socket transport.
6
+ *
7
+ * These events are emitted over an IPC channel (Named Pipe on Windows,
8
+ * Unix Domain Socket on POSIX) and consumed by `fusion top`.
9
+ * They NEVER touch stdio — the MCP JSON-RPC channel is 100% safe.
10
+ *
11
+ * Design rules:
12
+ * - All events are JSON-serializable (no Date objects, no functions)
13
+ * - All events carry a `timestamp` (epoch ms) for chronological ordering
14
+ * - The `type` field is the discriminator for exhaustive `switch` handling
15
+ * - Events are fire-and-forget — dropping them must never affect the server
16
+ *
17
+ * @module
18
+ */
19
+ import type { DebugEvent } from './DebugObserver.js';
20
+ /**
21
+ * Emitted after the DLP RedactEngine masks PII fields.
22
+ * Allows the TUI to display live redaction activity and field paths.
23
+ */
24
+ export interface DlpRedactEvent {
25
+ readonly type: 'dlp.redact';
26
+ readonly tool: string;
27
+ readonly action: string;
28
+ /** Number of fields that were masked */
29
+ readonly fieldsRedacted: number;
30
+ /** The configured redaction paths that matched */
31
+ readonly paths: readonly string[];
32
+ readonly timestamp: number;
33
+ }
34
+ /**
35
+ * Emitted after the Presenter's Late Guillotine slices data.
36
+ * Shows the token-saving ratio — the visual ROI proof.
37
+ */
38
+ export interface PresenterSliceEvent {
39
+ readonly type: 'presenter.slice';
40
+ readonly tool: string;
41
+ readonly action: string;
42
+ /** Size of the raw data from the handler (bytes) */
43
+ readonly rawBytes: number;
44
+ /** Size after Presenter filtering for the LLM wire (bytes) */
45
+ readonly wireBytes: number;
46
+ /** Number of raw rows/items before filtering */
47
+ readonly rowsRaw: number;
48
+ /** Number of rows/items after filtering */
49
+ readonly rowsWire: number;
50
+ readonly timestamp: number;
51
+ }
52
+ /**
53
+ * Emitted after the Presenter injects cognitive rules.
54
+ * Allows the TUI to display the JIT domain rules sent to the LLM.
55
+ */
56
+ export interface PresenterRulesEvent {
57
+ readonly type: 'presenter.rules';
58
+ readonly tool: string;
59
+ readonly action: string;
60
+ /** The system rules injected into the response */
61
+ readonly rules: readonly string[];
62
+ readonly timestamp: number;
63
+ }
64
+ /**
65
+ * Emitted after a SandboxEngine execution completes.
66
+ * Shows V8 isolate metrics for the computation delegation.
67
+ */
68
+ export interface SandboxExecEvent {
69
+ readonly type: 'sandbox.exec';
70
+ /** Execution time in milliseconds */
71
+ readonly executionMs: number;
72
+ /** Whether the execution succeeded */
73
+ readonly ok: boolean;
74
+ /** Error code if execution failed */
75
+ readonly errorCode?: string;
76
+ readonly timestamp: number;
77
+ }
78
+ /**
79
+ * Emitted after an FSM state transition.
80
+ * Shows the temporal anti-hallucination gate in action.
81
+ */
82
+ export interface FsmTransitionEvent {
83
+ readonly type: 'fsm.transition';
84
+ readonly previousState: string;
85
+ readonly currentState: string;
86
+ /** The event that triggered the transition */
87
+ readonly event: string;
88
+ /** Number of tools visible in the new state */
89
+ readonly toolsVisible: number;
90
+ readonly timestamp: number;
91
+ }
92
+ /**
93
+ * Emitted once on TUI client connection.
94
+ * Provides the full server topology for immediate panel population.
95
+ */
96
+ export interface TopologyEvent {
97
+ readonly type: 'topology';
98
+ readonly serverName: string;
99
+ readonly pid: number;
100
+ readonly tools: readonly TopologyTool[];
101
+ /** Current FSM state, if FSM is configured */
102
+ readonly fsmState?: string;
103
+ readonly timestamp: number;
104
+ }
105
+ /** Tool entry within a {@link TopologyEvent} */
106
+ export interface TopologyTool {
107
+ readonly name: string;
108
+ readonly actions: readonly string[];
109
+ /** Read-only or destructive annotation */
110
+ readonly readOnly?: boolean;
111
+ readonly destructive?: boolean;
112
+ /** Whether this tool runs in the V8 Sandbox */
113
+ readonly sandboxed?: boolean;
114
+ /** FSM states where this tool is visible */
115
+ readonly fsmStates?: readonly string[];
116
+ }
117
+ /**
118
+ * Periodic heartbeat with process-level metrics.
119
+ * Emitted every 5 seconds to keep the TUI header bar alive.
120
+ */
121
+ export interface HeartbeatEvent {
122
+ readonly type: 'heartbeat';
123
+ /** V8 heap used in bytes */
124
+ readonly heapUsedBytes: number;
125
+ /** V8 heap total in bytes */
126
+ readonly heapTotalBytes: number;
127
+ /** RSS in bytes */
128
+ readonly rssBytes: number;
129
+ /** Process uptime in seconds */
130
+ readonly uptimeSeconds: number;
131
+ readonly timestamp: number;
132
+ }
133
+ /**
134
+ * All possible telemetry events that flow through the Shadow Socket.
135
+ *
136
+ * This is a superset of {@link DebugEvent} — the core pipeline events
137
+ * are included alongside the domain-specific telemetry.
138
+ *
139
+ * Use `switch (event.type)` for exhaustive handling:
140
+ * ```typescript
141
+ * function handle(event: TelemetryEvent) {
142
+ * switch (event.type) {
143
+ * case 'route': // DebugEvent
144
+ * case 'validate': // DebugEvent
145
+ * case 'execute': // DebugEvent
146
+ * case 'error': // DebugEvent
147
+ * case 'middleware': // DebugEvent
148
+ * case 'governance': // DebugEvent
149
+ * case 'dlp.redact': // DlpRedactEvent
150
+ * case 'presenter.slice': // PresenterSliceEvent
151
+ * case 'presenter.rules': // PresenterRulesEvent
152
+ * case 'sandbox.exec': // SandboxExecEvent
153
+ * case 'fsm.transition': // FsmTransitionEvent
154
+ * case 'topology': // TopologyEvent
155
+ * case 'heartbeat': // HeartbeatEvent
156
+ * }
157
+ * }
158
+ * ```
159
+ */
160
+ export type TelemetryEvent = DebugEvent | DlpRedactEvent | PresenterSliceEvent | PresenterRulesEvent | SandboxExecEvent | FsmTransitionEvent | TopologyEvent | HeartbeatEvent;
161
+ /**
162
+ * A function that accepts telemetry events for out-of-band delivery.
163
+ *
164
+ * The implementation is a fire-and-forget NDJSON writer to the IPC socket.
165
+ * If no TUI client is connected, the events are silently discarded.
166
+ *
167
+ * This type is passed to `AttachOptions.telemetry` and to individual
168
+ * subsystems (Presenter, RedactEngine, SandboxEngine) for event emission.
169
+ */
170
+ export type TelemetrySink = (event: TelemetryEvent) => void;
171
+ //# sourceMappingURL=TelemetryEvent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetryEvent.d.ts","sourceRoot":"","sources":["../../src/observability/TelemetryEvent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TelemetryEvent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetryEvent.js","sourceRoot":"","sources":["../../src/observability/TelemetryEvent.ts"],"names":[],"mappings":""}
@@ -62,7 +62,7 @@ export interface PresenterConfig<T> {
62
62
  /** Human-readable domain name (for debugging and introspection) */
63
63
  readonly name: string;
64
64
  /** Zod schema for data validation and field filtering */
65
- readonly schema?: ZodType<T>;
65
+ readonly schema?: ZodType<T, any, any>;
66
66
  /**
67
67
  * System rules that travel with the data.
68
68
  *
@@ -178,7 +178,7 @@ export interface PresenterConfig<T> {
178
178
  * @see {@link createPresenter} for the legacy fluent builder API
179
179
  * @see {@link Presenter} for the full Presenter class documentation
180
180
  */
181
- export declare function definePresenter<TSchema extends ZodType>(config: PresenterConfig<TSchema['_output']> & {
181
+ export declare function definePresenter<TSchema extends ZodType<any, any, any>>(config: PresenterConfig<TSchema['_output']> & {
182
182
  schema: TSchema;
183
183
  }): Presenter<TSchema['_output']>;
184
184
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"definePresenter.d.ts","sourceRoot":"","sources":["../../src/presenter/definePresenter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAKvC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,QAAQ,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;CAC1D;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB,oEAAoE;IACpE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,yDAAyD;IACzD,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAE7B;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAErF;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IAE7D;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IAE1E;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;IAEpC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,gBAAgB,EAAE,CAAC;IAEzE;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAEtC;;;;;;;;;OASG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE;QACjB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC;KAC3D,CAAC;CACL;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,eAAe,CAAC,OAAO,SAAS,OAAO,EACnD,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAClE,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AAEjC;;;;;GAKG;AACH,wBAAgB,eAAe,CAC3B,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,GAC1D,SAAS,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"definePresenter.d.ts","sourceRoot":"","sources":["../../src/presenter/definePresenter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAKvC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,QAAQ,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;CAC1D;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB,oEAAoE;IACpE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,yDAAyD;IACzD,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAEvC;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAErF;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IAE7D;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IAE1E;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;IAEpC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,gBAAgB,EAAE,CAAC;IAEzE;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAEtC;;;;;;;;;OASG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE;QACjB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC;KAC3D,CAAC;CACL;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,eAAe,CAAC,OAAO,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAClE,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAClE,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AAEjC;;;;;GAKG;AACH,wBAAgB,eAAe,CAC3B,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,GAC1D,SAAS,CAAC,OAAO,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FluentPromptBuilder.d.ts","sourceRoot":"","sources":["../../src/prompt/FluentPromptBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AACvD,OAAO,EACH,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOrD;;;;;;;;;GASG;AACH,qBAAa,mBAAmB,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC7G,YAAW,aAAa,CAAC,QAAQ,CAAC;IAElC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAoC;IACnD,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,KAAK,CAAC,CAA2C;IACzD,OAAO,CAAC,iBAAiB,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,CAA0E;IAE3F,+EAA+E;IAC/E,OAAO,CAAC,SAAS,CAAsC;gBAE3C,IAAI,EAAE,MAAM;IAMxB;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM1B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMnC;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMrD;;;;;OAKG;IACH,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAM7B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAC,CAAC,SAAS,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1G,KAAK,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAQpC;;;;;;;;OAQG;IACH,GAAG,CAAC,GAAG,GAAG,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI;IAM3C;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMzB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,QAAQ,GAAG,eAAe,EAAE,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAQ1F,mEAAmE;IACnE,OAAO,CAAC,MAAM;IAuBd,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM,GAAG,SAAS;IAIpC,OAAO,IAAI,MAAM,EAAE;IAInB,aAAa,IAAI,OAAO;IAIxB,mBAAmB,IAAI,MAAM,GAAG,SAAS;IAIzC,qBAAqB;;;;;uBAQ6/J,CAAC;oBAA8B,CAAC;;;IAJljK,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;CAG9E"}
1
+ {"version":3,"file":"FluentPromptBuilder.d.ts","sourceRoot":"","sources":["../../src/prompt/FluentPromptBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AACvD,OAAO,EACH,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOrD;;;;;;;;;GASG;AACH,qBAAa,mBAAmB,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC7G,YAAW,aAAa,CAAC,QAAQ,CAAC;IAElC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAoC;IACnD,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,KAAK,CAAC,CAA2C;IACzD,OAAO,CAAC,iBAAiB,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,CAA0E;IAE3F,+EAA+E;IAC/E,OAAO,CAAC,SAAS,CAAsC;gBAE3C,IAAI,EAAE,MAAM;IAMxB;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM1B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMnC;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMrD;;;;;OAKG;IACH,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAM7B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAC,CAAC,SAAS,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1G,KAAK,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAQpC;;;;;;;;OAQG;IACH,GAAG,CAAC,GAAG,GAAG,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI;IAM3C;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMzB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,QAAQ,GAAG,eAAe,EAAE,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAQ1F,mEAAmE;IACnE,OAAO,CAAC,MAAM;IAuBd,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM,GAAG,SAAS;IAIpC,OAAO,IAAI,MAAM,EAAE;IAInB,aAAa,IAAI,OAAO;IAIxB,mBAAmB,IAAI,MAAM,GAAG,SAAS;IAIzC,qBAAqB;;;;;uBAQopK,CAAC;oBAA+B,CAAC;;;IAJ1sK,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;CAG9E"}
@@ -10,6 +10,7 @@ import { type ZeroTrustConfig } from '../introspection/CryptoAttestation.js';
10
10
  import { type SelfHealingConfig } from '../introspection/ContractAwareSelfHealing.js';
11
11
  import { type ToolExposition } from '../exposition/types.js';
12
12
  import { type PromptRegistry } from '../prompt/PromptRegistry.js';
13
+ import { StateMachineGate, type FsmStateStore } from '../fsm/StateMachineGate.js';
13
14
  /** Options for attaching to an MCP Server */
14
15
  export interface AttachOptions<TContext> {
15
16
  /** Only expose tools matching these tag filters */
@@ -232,6 +233,68 @@ export interface AttachOptions<TContext> {
232
233
  * @see {@link SelfHealingConfig} for configuration options
233
234
  */
234
235
  selfHealing?: SelfHealingConfig;
236
+ /**
237
+ * FSM gate for temporal anti-hallucination.
238
+ *
239
+ * When configured, tools bound to FSM states (via `.bindState()`)
240
+ * are dynamically filtered from `tools/list` based on the current
241
+ * workflow state. The LLM physically cannot call tools that don't
242
+ * exist in its reality.
243
+ *
244
+ * On successful tool execution, the FSM transitions automatically
245
+ * (if a transition event is bound), and `notifications/tools/list_changed`
246
+ * is emitted so the client re-fetches the tool list.
247
+ *
248
+ * Zero overhead when omitted — no FSM code runs.
249
+ *
250
+ * @example
251
+ * ```typescript
252
+ * const gate = new StateMachineGate({
253
+ * id: 'checkout',
254
+ * initial: 'empty',
255
+ * states: {
256
+ * empty: { on: { ADD_ITEM: 'has_items' } },
257
+ * has_items: { on: { CHECKOUT: 'payment' } },
258
+ * payment: { on: { PAY: 'confirmed' } },
259
+ * confirmed: { type: 'final' },
260
+ * },
261
+ * });
262
+ *
263
+ * registry.attachToServer(server, {
264
+ * contextFactory: createContext,
265
+ * fsm: gate,
266
+ * });
267
+ * ```
268
+ *
269
+ * @see {@link StateMachineGate} for the FSM engine
270
+ */
271
+ fsm?: StateMachineGate;
272
+ /**
273
+ * External state store for FSM persistence in serverless/edge deployments.
274
+ *
275
+ * When MCP runs over Streamable HTTP (Vercel, Cloudflare Workers),
276
+ * there is no persistent process — FSM state must be externalized.
277
+ * The `sessionId` comes from the `Mcp-Session-Id` request header.
278
+ *
279
+ * Zero overhead when omitted — FSM state lives in-memory.
280
+ *
281
+ * @example
282
+ * ```typescript
283
+ * registry.attachToServer(server, {
284
+ * fsm: gate,
285
+ * fsmStore: {
286
+ * load: async (sessionId) => {
287
+ * const data = await redis.get(`fsm:${sessionId}`);
288
+ * return data ? JSON.parse(data) : undefined;
289
+ * },
290
+ * save: async (sessionId, snapshot) => {
291
+ * await redis.set(`fsm:${sessionId}`, JSON.stringify(snapshot), { EX: 3600 });
292
+ * },
293
+ * },
294
+ * });
295
+ * ```
296
+ */
297
+ fsmStore?: FsmStateStore;
235
298
  }
236
299
  /** Function to detach the registry from the server */
237
300
  export type DetachFn = () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"ServerAttachment.d.ts","sourceRoot":"","sources":["../../src/server/ServerAttachment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ServerAttachment.d.ts","sourceRoot":"","sources":["../../src/server/ServerAttachment.ts"],"names":[],"mappings":"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"}