network-ai 3.9.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,371 @@
1
+ "use strict";
2
+ /**
3
+ * Extended MCP Tools — Phase 6 Part 2
4
+ *
5
+ * Exposes budget, token, and audit operations as MCP-compatible tools so
6
+ * an external AI agent can manage Network-AI's security and resource planes
7
+ * without any code changes.
8
+ *
9
+ * Tool groups:
10
+ * Budget — budget_status, budget_spend, budget_reset, budget_set_ceiling, budget_get_log
11
+ * Token — token_validate, token_revoke, token_create
12
+ * Audit — audit_query, audit_tail
13
+ *
14
+ * @module mcp-tools-extended
15
+ * @version 1.0.0
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.ExtendedMcpTools = void 0;
19
+ const node_fs_1 = require("node:fs");
20
+ // ============================================================================
21
+ // TOOL DEFINITIONS
22
+ // ============================================================================
23
+ const EXTENDED_TOOL_DEFINITIONS = [
24
+ // ---- Budget ---------------------------------------------------------------
25
+ {
26
+ name: 'budget_status',
27
+ description: 'Get the current budget status: ceiling, total spent, remaining tokens, and per-agent breakdown.',
28
+ inputSchema: {
29
+ type: 'object',
30
+ properties: {
31
+ agent_id: { type: 'string', description: 'Calling agent identifier (for audit)' },
32
+ },
33
+ required: ['agent_id'],
34
+ },
35
+ },
36
+ {
37
+ name: 'budget_spend',
38
+ description: 'Spend tokens on behalf of an agent. Returns allowed/denied with remaining balance.',
39
+ inputSchema: {
40
+ type: 'object',
41
+ properties: {
42
+ agent_id: { type: 'string', description: 'The agent spending tokens' },
43
+ tokens: { type: 'string', description: 'Number of tokens to spend (positive integer)' },
44
+ },
45
+ required: ['agent_id', 'tokens'],
46
+ },
47
+ },
48
+ {
49
+ name: 'budget_reset',
50
+ description: 'Reset all spend counters to zero. The ceiling is preserved. Use when starting a new task cycle.',
51
+ inputSchema: {
52
+ type: 'object',
53
+ properties: {
54
+ agent_id: { type: 'string', description: 'Calling agent identifier (for audit)' },
55
+ confirm: { type: 'string', description: 'Must be "yes" to prevent accidental resets' },
56
+ },
57
+ required: ['agent_id', 'confirm'],
58
+ },
59
+ },
60
+ {
61
+ name: 'budget_set_ceiling',
62
+ description: 'Dynamically change the global token ceiling. Can be raised or lowered at runtime.',
63
+ inputSchema: {
64
+ type: 'object',
65
+ properties: {
66
+ agent_id: { type: 'string', description: 'Calling agent identifier (for audit)' },
67
+ ceiling: { type: 'string', description: 'New ceiling value (positive number)' },
68
+ },
69
+ required: ['agent_id', 'ceiling'],
70
+ },
71
+ },
72
+ {
73
+ name: 'budget_get_log',
74
+ description: 'Retrieve the full transaction log of all spend() calls in chronological order.',
75
+ inputSchema: {
76
+ type: 'object',
77
+ properties: {
78
+ agent_id: { type: 'string', description: 'Calling agent identifier' },
79
+ limit: { type: 'string', description: 'Maximum number of entries to return (default: 50)' },
80
+ },
81
+ required: ['agent_id'],
82
+ },
83
+ },
84
+ // ---- Token ----------------------------------------------------------------
85
+ {
86
+ name: 'token_create',
87
+ description: 'Generate a new signed security token for an agent. Returns the full token object.',
88
+ inputSchema: {
89
+ type: 'object',
90
+ properties: {
91
+ agent_id: { type: 'string', description: 'Agent to issue the token to' },
92
+ resource_type: { type: 'string', description: 'Resource type the token grants access to (e.g. "FILE_SYSTEM")' },
93
+ scope: { type: 'string', description: 'Permission scope (e.g. "read", "write", "admin")' },
94
+ },
95
+ required: ['agent_id', 'resource_type', 'scope'],
96
+ },
97
+ },
98
+ {
99
+ name: 'token_validate',
100
+ description: 'Validate a security token — checks signature, expiration, and revocation status.',
101
+ inputSchema: {
102
+ type: 'object',
103
+ properties: {
104
+ token_json: {
105
+ type: 'string',
106
+ description: 'JSON-encoded SecureToken object (as returned by token_create)',
107
+ },
108
+ },
109
+ required: ['token_json'],
110
+ },
111
+ },
112
+ {
113
+ name: 'token_revoke',
114
+ description: 'Revoke a token by its tokenId. The token will be rejected on all future validation attempts.',
115
+ inputSchema: {
116
+ type: 'object',
117
+ properties: {
118
+ token_id: { type: 'string', description: 'The tokenId to revoke' },
119
+ reason: { type: 'string', description: 'Optional reason for revocation (for audit)' },
120
+ },
121
+ required: ['token_id'],
122
+ },
123
+ },
124
+ // ---- Audit ----------------------------------------------------------------
125
+ {
126
+ name: 'audit_query',
127
+ description: 'Query the audit log. Filter by agent_id, event_type, outcome, or time range.',
128
+ inputSchema: {
129
+ type: 'object',
130
+ properties: {
131
+ agent_id_filter: { type: 'string', description: 'Filter entries by this agent ID (optional)' },
132
+ event_type_filter: { type: 'string', description: 'Filter by event type (optional)' },
133
+ outcome_filter: { type: 'string', description: 'Filter by outcome: success, failure, denied (optional)' },
134
+ since_iso: { type: 'string', description: 'ISO 8601 timestamp — return entries at or after this time (optional)' },
135
+ limit: { type: 'string', description: 'Maximum number of entries to return (default: 100)' },
136
+ },
137
+ required: [],
138
+ },
139
+ },
140
+ {
141
+ name: 'audit_tail',
142
+ description: 'Return the N most recent audit log entries. Fast — reads from end of file.',
143
+ inputSchema: {
144
+ type: 'object',
145
+ properties: {
146
+ n: { type: 'string', description: 'Number of recent entries to return (default: 20, max: 500)' },
147
+ },
148
+ required: [],
149
+ },
150
+ },
151
+ ];
152
+ /**
153
+ * MCP tool provider for budget, token, and audit operations.
154
+ *
155
+ * All three categories are optional — only provide the services you need.
156
+ * Tools for missing services return a clear `{ ok: false, error }` response.
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * import { FederatedBudget, SecureTokenManager } from 'network-ai';
161
+ * import { ExtendedMcpTools } from 'network-ai';
162
+ *
163
+ * const tools = new ExtendedMcpTools({
164
+ * budget: new FederatedBudget({ ceiling: 100_000 }),
165
+ * tokenManager: new SecureTokenManager(),
166
+ * auditLogPath: './data/audit_log.jsonl',
167
+ * });
168
+ *
169
+ * // Register with McpCombinedBridge
170
+ * combined.register(tools);
171
+ * ```
172
+ */
173
+ class ExtendedMcpTools {
174
+ _budget;
175
+ _tokenManager;
176
+ _auditLogPath;
177
+ constructor(options = {}) {
178
+ this._budget = options.budget;
179
+ this._tokenManager = options.tokenManager;
180
+ this._auditLogPath = options.auditLogPath ?? './data/audit_log.jsonl';
181
+ }
182
+ getDefinitions() {
183
+ return EXTENDED_TOOL_DEFINITIONS;
184
+ }
185
+ async call(toolName, args) {
186
+ try {
187
+ switch (toolName) {
188
+ case 'budget_status': return this._budgetStatus();
189
+ case 'budget_spend': return this._budgetSpend(args);
190
+ case 'budget_reset': return this._budgetReset(args);
191
+ case 'budget_set_ceiling': return this._budgetSetCeiling(args);
192
+ case 'budget_get_log': return this._budgetGetLog(args);
193
+ case 'token_create': return this._tokenCreate(args);
194
+ case 'token_validate': return this._tokenValidate(args);
195
+ case 'token_revoke': return this._tokenRevoke(args);
196
+ case 'audit_query': return this._auditQuery(args);
197
+ case 'audit_tail': return this._auditTail(args);
198
+ default:
199
+ return { ok: false, tool: toolName, error: `Unknown extended tool: "${toolName}"` };
200
+ }
201
+ }
202
+ catch (err) {
203
+ return { ok: false, tool: toolName, error: err instanceof Error ? err.message : String(err) };
204
+ }
205
+ }
206
+ // --------------------------------------------------------------------------
207
+ // Budget tools
208
+ // --------------------------------------------------------------------------
209
+ _budgetStatus() {
210
+ if (!this._budget)
211
+ return this._noBudget('budget_status');
212
+ return {
213
+ ok: true,
214
+ tool: 'budget_status',
215
+ data: {
216
+ ceiling: this._budget.getCeiling(),
217
+ totalSpent: this._budget.getTotalSpent(),
218
+ remaining: this._budget.remaining(),
219
+ perAgent: this._budget.getSpendLog(),
220
+ },
221
+ };
222
+ }
223
+ _budgetSpend(args) {
224
+ if (!this._budget)
225
+ return this._noBudget('budget_spend');
226
+ const agentId = String(args['agent_id'] ?? '');
227
+ const tokens = Number(args['tokens']);
228
+ if (!agentId)
229
+ return { ok: false, tool: 'budget_spend', error: 'agent_id is required' };
230
+ if (!Number.isFinite(tokens) || tokens <= 0)
231
+ return { ok: false, tool: 'budget_spend', error: 'tokens must be a positive number' };
232
+ const result = this._budget.spend(agentId, tokens);
233
+ return { ok: true, tool: 'budget_spend', data: result };
234
+ }
235
+ _budgetReset(args) {
236
+ if (!this._budget)
237
+ return this._noBudget('budget_reset');
238
+ if (String(args['confirm']).toLowerCase() !== 'yes') {
239
+ return { ok: false, tool: 'budget_reset', error: 'confirm must be "yes" to reset the budget' };
240
+ }
241
+ this._budget.reset();
242
+ return { ok: true, tool: 'budget_reset', data: { reset: true, remaining: this._budget.remaining() } };
243
+ }
244
+ _budgetSetCeiling(args) {
245
+ if (!this._budget)
246
+ return this._noBudget('budget_set_ceiling');
247
+ const ceiling = Number(args['ceiling']);
248
+ if (!Number.isFinite(ceiling) || ceiling <= 0) {
249
+ return { ok: false, tool: 'budget_set_ceiling', error: 'ceiling must be a positive number' };
250
+ }
251
+ this._budget.setCeiling(ceiling);
252
+ return { ok: true, tool: 'budget_set_ceiling', data: { ceiling, remaining: this._budget.remaining() } };
253
+ }
254
+ _budgetGetLog(args) {
255
+ if (!this._budget)
256
+ return this._noBudget('budget_get_log');
257
+ const limit = Math.min(Number(args['limit']) || 50, 1000);
258
+ const log = this._budget.getTransactionLog();
259
+ const entries = log.slice(-limit);
260
+ return { ok: true, tool: 'budget_get_log', data: { entries, total: log.length, shown: entries.length } };
261
+ }
262
+ _noBudget(tool) {
263
+ return { ok: false, tool, error: 'No FederatedBudget instance configured. Pass budget: new FederatedBudget(...) to ExtendedMcpTools.' };
264
+ }
265
+ // --------------------------------------------------------------------------
266
+ // Token tools
267
+ // --------------------------------------------------------------------------
268
+ _tokenCreate(args) {
269
+ if (!this._tokenManager)
270
+ return this._noTokenManager('token_create');
271
+ const agentId = String(args['agent_id'] ?? '');
272
+ const resourceType = String(args['resource_type'] ?? '');
273
+ const scope = String(args['scope'] ?? '');
274
+ if (!agentId || !resourceType || !scope) {
275
+ return { ok: false, tool: 'token_create', error: 'agent_id, resource_type, and scope are required' };
276
+ }
277
+ const token = this._tokenManager.generateToken(agentId, resourceType, scope);
278
+ return { ok: true, tool: 'token_create', data: token };
279
+ }
280
+ _tokenValidate(args) {
281
+ if (!this._tokenManager)
282
+ return this._noTokenManager('token_validate');
283
+ const tokenJson = String(args['token_json'] ?? '');
284
+ if (!tokenJson)
285
+ return { ok: false, tool: 'token_validate', error: 'token_json is required' };
286
+ try {
287
+ const token = JSON.parse(tokenJson);
288
+ const result = this._tokenManager.validateToken(token);
289
+ return { ok: true, tool: 'token_validate', data: result };
290
+ }
291
+ catch (e) {
292
+ return { ok: false, tool: 'token_validate', error: `Invalid token JSON: ${e instanceof Error ? e.message : String(e)}` };
293
+ }
294
+ }
295
+ _tokenRevoke(args) {
296
+ if (!this._tokenManager)
297
+ return this._noTokenManager('token_revoke');
298
+ const tokenId = String(args['token_id'] ?? '');
299
+ if (!tokenId)
300
+ return { ok: false, tool: 'token_revoke', error: 'token_id is required' };
301
+ this._tokenManager.revokeToken(tokenId);
302
+ return { ok: true, tool: 'token_revoke', data: { tokenId, revoked: true, reason: args['reason'] ?? 'revoked via MCP' } };
303
+ }
304
+ _noTokenManager(tool) {
305
+ return { ok: false, tool, error: 'No SecureTokenManager instance configured. Pass tokenManager: new SecureTokenManager() to ExtendedMcpTools.' };
306
+ }
307
+ // --------------------------------------------------------------------------
308
+ // Audit tools
309
+ // --------------------------------------------------------------------------
310
+ _auditQuery(args) {
311
+ const entries = this._readAuditLog();
312
+ if (!entries.ok)
313
+ return { ok: false, tool: 'audit_query', error: entries.error };
314
+ let results = entries.data;
315
+ const agentFilter = args['agent_id_filter'] ? String(args['agent_id_filter']) : null;
316
+ const eventFilter = args['event_type_filter'] ? String(args['event_type_filter']) : null;
317
+ const outcomeFilter = args['outcome_filter'] ? String(args['outcome_filter']) : null;
318
+ const sinceIso = args['since_iso'] ? String(args['since_iso']) : null;
319
+ const limit = Math.min(Number(args['limit']) || 100, 1000);
320
+ if (agentFilter)
321
+ results = results.filter(e => e.agentId === agentFilter);
322
+ if (eventFilter)
323
+ results = results.filter(e => e.eventType === eventFilter);
324
+ if (outcomeFilter)
325
+ results = results.filter(e => e.outcome === outcomeFilter);
326
+ if (sinceIso) {
327
+ const since = new Date(sinceIso).getTime();
328
+ if (!isNaN(since)) {
329
+ results = results.filter(e => new Date(e.timestamp).getTime() >= since);
330
+ }
331
+ }
332
+ const sliced = results.slice(-limit);
333
+ return { ok: true, tool: 'audit_query', data: { entries: sliced, total: results.length, shown: sliced.length } };
334
+ }
335
+ _auditTail(args) {
336
+ const n = Math.min(Math.max(Number(args['n']) || 20, 1), 500);
337
+ const entries = this._readAuditLog();
338
+ if (!entries.ok)
339
+ return { ok: false, tool: 'audit_tail', error: entries.error };
340
+ const all = entries.data;
341
+ const tail = all.slice(-n);
342
+ return { ok: true, tool: 'audit_tail', data: { entries: tail, total: all.length, shown: tail.length } };
343
+ }
344
+ _readAuditLog() {
345
+ try {
346
+ if (!(0, node_fs_1.existsSync)(this._auditLogPath)) {
347
+ return { ok: true, data: [] };
348
+ }
349
+ const raw = (0, node_fs_1.readFileSync)(this._auditLogPath, 'utf-8').trim();
350
+ if (!raw)
351
+ return { ok: true, data: [] };
352
+ const entries = raw.split('\n')
353
+ .filter(l => l.trim())
354
+ .map(l => {
355
+ try {
356
+ return JSON.parse(l);
357
+ }
358
+ catch {
359
+ return null;
360
+ }
361
+ })
362
+ .filter((e) => e !== null);
363
+ return { ok: true, data: entries };
364
+ }
365
+ catch (err) {
366
+ return { ok: false, error: `Failed to read audit log: ${err instanceof Error ? err.message : String(err)}` };
367
+ }
368
+ }
369
+ }
370
+ exports.ExtendedMcpTools = ExtendedMcpTools;
371
+ //# sourceMappingURL=mcp-tools-extended.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tools-extended.js","sourceRoot":"","sources":["../../lib/mcp-tools-extended.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * MCP SSE/HTTP Transport — Phase 6 Part 1
3
+ *
4
+ * Makes the MCP bridge network-accessible over HTTP + Server-Sent Events so
5
+ * any MCP-compatible AI (Claude Desktop, Cursor, Cline, etc.) can connect
6
+ * to Network-AI from outside the process.
7
+ *
8
+ * Architecture:
9
+ *
10
+ * External AI agent
11
+ * │ POST /mcp (JSON-RPC 2.0 request)
12
+ * ▼
13
+ * McpSseServer (HTTP, port 3001)
14
+ * │ handleRPC()
15
+ * ▼
16
+ * McpCombinedBridge
17
+ * ├── blackboard tools (read/write/list/delete/exists)
18
+ * ├── extended tools (budget/token/audit)
19
+ * └── control tools (config/agent/fsm)
20
+ *
21
+ * External AI agent
22
+ * │ GET /sse (SSE connection — server pushes events)
23
+ * ▼
24
+ * McpSseServer broadcasts events to all connected clients
25
+ *
26
+ * Zero external dependencies — uses Node.js built-in `node:http` only.
27
+ *
28
+ * @module mcp-transport-sse
29
+ * @version 1.0.0
30
+ */
31
+ import type { McpTransport, McpJsonRpcRequest, McpJsonRpcResponse } from './mcp-bridge';
32
+ import { McpBlackboardBridge } from './mcp-bridge';
33
+ import type { MCPToolDefinition, BlackboardToolResult } from './mcp-blackboard-tools';
34
+ /**
35
+ * Any object that provides MCP tools can implement this interface and be
36
+ * registered with `McpCombinedBridge`.
37
+ */
38
+ export interface McpToolProvider {
39
+ getDefinitions(): MCPToolDefinition[];
40
+ call(toolName: string, args: Record<string, unknown>): Promise<BlackboardToolResult>;
41
+ }
42
+ /**
43
+ * Aggregates multiple `McpToolProvider` instances into a single MCP bridge.
44
+ *
45
+ * Handles `tools/list` by merging all definitions, and routes `tools/call`
46
+ * to the first provider that owns the requested tool name.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const combined = new McpCombinedBridge('network-ai');
51
+ * combined.register(new McpBlackboardBridgeAdapter(myBridge));
52
+ * combined.register(new ExtendedMcpTools({ budget }));
53
+ * combined.register(new ControlMcpTools({ config, orchestrator }));
54
+ *
55
+ * const server = new McpSseServer(combined, { port: 3001 });
56
+ * await server.listen();
57
+ * ```
58
+ */
59
+ export declare class McpCombinedBridge {
60
+ readonly name: string;
61
+ private readonly _providers;
62
+ private readonly _toolIndex;
63
+ constructor(name?: string);
64
+ /**
65
+ * Register a tool provider. Tools names must be globally unique across all
66
+ * registered providers — duplicate names are silently overwritten with the
67
+ * latest registration.
68
+ */
69
+ register(provider: McpToolProvider): void;
70
+ /** All tool definitions across every registered provider. */
71
+ allDefinitions(): MCPToolDefinition[];
72
+ /**
73
+ * Handle a single JSON-RPC 2.0 request. Never rejects — errors are encoded
74
+ * in the response `error` field.
75
+ */
76
+ handleRPC(request: McpJsonRpcRequest): Promise<McpJsonRpcResponse>;
77
+ private _ok;
78
+ private _error;
79
+ }
80
+ /**
81
+ * Wraps an existing `McpBlackboardBridge` as a `McpToolProvider` so it can be
82
+ * registered with `McpCombinedBridge` alongside extended and control tools.
83
+ */
84
+ export declare class McpBlackboardBridgeAdapter implements McpToolProvider {
85
+ private readonly bridge;
86
+ constructor(bridge: McpBlackboardBridge);
87
+ getDefinitions(): MCPToolDefinition[];
88
+ call(toolName: string, args: Record<string, unknown>): Promise<BlackboardToolResult>;
89
+ }
90
+ /** Options for `McpSseServer`. */
91
+ export interface McpSseServerOptions {
92
+ /** TCP port to listen on. Defaults to `3001`. */
93
+ port?: number;
94
+ /** Hostname to bind to. Defaults to `'0.0.0.0'` (all interfaces). */
95
+ host?: string;
96
+ /** Heartbeat interval in ms. Defaults to `15000`. Set to `0` to disable. */
97
+ heartbeatMs?: number;
98
+ }
99
+ /**
100
+ * HTTP server that exposes a `McpCombinedBridge` (or any object with
101
+ * `handleRPC`) over two endpoints:
102
+ *
103
+ * - `GET /sse` — Server-Sent Events stream; sends initial `endpoint` event
104
+ * - `POST /mcp` — Receive JSON-RPC 2.0 requests, return responses
105
+ * - `GET /health` — Health check returning `{ status: 'ok', bridge, clients }`
106
+ * - `GET /tools` — List all available tools as JSON
107
+ *
108
+ * No external packages required — built on Node.js `node:http`.
109
+ */
110
+ export declare class McpSseServer {
111
+ private readonly _bridge;
112
+ private readonly _opts;
113
+ private _server;
114
+ private readonly _sseClients;
115
+ constructor(bridge: {
116
+ handleRPC(req: McpJsonRpcRequest): Promise<McpJsonRpcResponse>;
117
+ name?: string;
118
+ allDefinitions?: () => MCPToolDefinition[];
119
+ }, options?: McpSseServerOptions);
120
+ /** Start listening. Resolves when the server is ready. */
121
+ listen(): Promise<void>;
122
+ /** Stop the server and close all SSE streams. */
123
+ close(): Promise<void>;
124
+ /** Current TCP port (useful when port was auto-assigned). */
125
+ get port(): number;
126
+ /** Number of currently connected SSE clients. */
127
+ get clientCount(): number;
128
+ /**
129
+ * Broadcast an event to every connected SSE client.
130
+ * Useful for pushing agent status updates, budget alerts, etc.
131
+ */
132
+ broadcast(eventName: string, data: unknown): void;
133
+ private _handleRequest;
134
+ private _handleSse;
135
+ private _handlePost;
136
+ private _handleHealth;
137
+ private _handleTools;
138
+ }
139
+ /**
140
+ * `McpTransport` implementation that sends JSON-RPC requests to a remote
141
+ * `McpSseServer` via HTTP POST.
142
+ *
143
+ * Use this when the MCP client and server are in different processes or
144
+ * machines. Pairs with `McpBridgeClient` as a drop-in replacement for
145
+ * `McpInProcessTransport`.
146
+ *
147
+ * @example
148
+ * ```typescript
149
+ * import { McpBridgeClient } from 'network-ai';
150
+ * import { McpSseTransport } from 'network-ai';
151
+ *
152
+ * const transport = new McpSseTransport('http://localhost:3001');
153
+ * const client = new McpBridgeClient(transport);
154
+ *
155
+ * const tools = await client.listTools();
156
+ * const result = await client.callTool('blackboard_read', { key: 'status', agent_id: 'my-agent' });
157
+ * ```
158
+ */
159
+ export declare class McpSseTransport implements McpTransport {
160
+ private readonly _postUrl;
161
+ private _idCounter;
162
+ /**
163
+ * @param baseUrl Base URL of the `McpSseServer`, e.g. `'http://localhost:3001'`.
164
+ * The transport will POST to `<baseUrl>/mcp`.
165
+ */
166
+ constructor(baseUrl: string);
167
+ /** Send a JSON-RPC request and wait for the response. */
168
+ send(request: McpJsonRpcRequest): Promise<McpJsonRpcResponse>;
169
+ /** Generate a unique request ID. */
170
+ nextId(): number;
171
+ }
172
+ //# sourceMappingURL=mcp-transport-sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-transport-sse.d.ts","sourceRoot":"","sources":["../../lib/mcp-transport-sse.ts"],"names":[],"mappings":"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"}