@mcp-abap-adt/llm-agent-server-libs 20.7.1 → 20.9.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.
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/pipelines/controller.d.ts.map +1 -1
- package/dist/pipelines/controller.js +9 -1
- package/dist/pipelines/controller.js.map +1 -1
- package/dist/smart-agent/controller/controller-coordinator-handler.d.ts +14 -1
- package/dist/smart-agent/controller/controller-coordinator-handler.d.ts.map +1 -1
- package/dist/smart-agent/controller/controller-coordinator-handler.js +41 -6
- package/dist/smart-agent/controller/controller-coordinator-handler.js.map +1 -1
- package/dist/smart-agent/controller/types.d.ts +4 -0
- package/dist/smart-agent/controller/types.d.ts.map +1 -1
- package/dist/smart-agent/http/adapter-route-handler.d.ts +2 -2
- package/dist/smart-agent/http/adapter-route-handler.d.ts.map +1 -1
- package/dist/smart-agent/http/adapter-route-handler.js +12 -4
- package/dist/smart-agent/http/adapter-route-handler.js.map +1 -1
- package/dist/smart-agent/http/chat-route-handler.d.ts.map +1 -1
- package/dist/smart-agent/http/chat-route-handler.js +87 -79
- package/dist/smart-agent/http/chat-route-handler.js.map +1 -1
- package/dist/smart-agent/http/sse-heartbeat.d.ts +24 -0
- package/dist/smart-agent/http/sse-heartbeat.d.ts.map +1 -0
- package/dist/smart-agent/http/sse-heartbeat.js +62 -0
- package/dist/smart-agent/http/sse-heartbeat.js.map +1 -0
- package/dist/smart-agent/mcp/build-session-mcp-clients.d.ts +8 -6
- package/dist/smart-agent/mcp/build-session-mcp-clients.d.ts.map +1 -1
- package/dist/smart-agent/mcp/build-session-mcp-clients.js +20 -7
- package/dist/smart-agent/mcp/build-session-mcp-clients.js.map +1 -1
- package/dist/smart-agent/mcp/mcp-clients-with-descriptors.d.ts +16 -0
- package/dist/smart-agent/mcp/mcp-clients-with-descriptors.d.ts.map +1 -0
- package/dist/smart-agent/mcp/mcp-clients-with-descriptors.js +2 -0
- package/dist/smart-agent/mcp/mcp-clients-with-descriptors.js.map +1 -0
- package/dist/smart-agent/mcp/namespaced-bridge.d.ts +41 -0
- package/dist/smart-agent/mcp/namespaced-bridge.d.ts.map +1 -0
- package/dist/smart-agent/mcp/namespaced-bridge.js +90 -0
- package/dist/smart-agent/mcp/namespaced-bridge.js.map +1 -0
- package/dist/smart-agent/resolve-agent-embedder.d.ts +3 -3
- package/dist/smart-agent/resolve-agent-embedder.d.ts.map +1 -1
- package/dist/smart-agent/resolve-agent-embedder.js +25 -8
- package/dist/smart-agent/resolve-agent-embedder.js.map +1 -1
- package/dist/smart-agent/resolve-config-sections.d.ts.map +1 -1
- package/dist/smart-agent/resolve-config-sections.js +54 -3
- package/dist/smart-agent/resolve-config-sections.js.map +1 -1
- package/dist/smart-agent/session-lifecycle/index.d.ts +20 -5
- package/dist/smart-agent/session-lifecycle/index.d.ts.map +1 -1
- package/dist/smart-agent/session-lifecycle/index.js +20 -0
- package/dist/smart-agent/session-lifecycle/index.js.map +1 -1
- package/dist/smart-agent/smart-server.d.ts +155 -5
- package/dist/smart-agent/smart-server.d.ts.map +1 -1
- package/dist/smart-agent/smart-server.js +297 -17
- package/dist/smart-agent/smart-server.js.map +1 -1
- package/dist/smart-agent/tools-rag-handle.d.ts +4 -2
- package/dist/smart-agent/tools-rag-handle.d.ts.map +1 -1
- package/dist/smart-agent/tools-rag-handle.js +24 -13
- package/dist/smart-agent/tools-rag-handle.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-route-handler.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/http/chat-route-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,cAAc,EAKpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,UAAU,EACf,KAAK,gBAAgB,EAEtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-route-handler.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/http/chat-route-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,cAAc,EAKpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,UAAU,EACf,KAAK,gBAAgB,EAEtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAU5D;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAC/B,WAAW,EAAE,gBAAgB,CAAC,YAAY,CAAC,EAC3C,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,EACzC,aAAa,EAAE,cAAc,GAAG,SAAS,EACzC,OAAO,EACH;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GAC3D,SAAS,EACb,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,IAAI,CAAC,CAiaf"}
|
|
@@ -3,6 +3,7 @@ import { buildExternalResults, normalizeAndValidateExternalTools, toToolCallDelt
|
|
|
3
3
|
import { SessionLogger, } from '@mcp-abap-adt/llm-agent-libs';
|
|
4
4
|
import { resolveTraceSink } from './debug-trace-sink.js';
|
|
5
5
|
import { jsonError, jsonValidationError, mapStopReason, readBody, } from './response-helpers.js';
|
|
6
|
+
import { attachSseKeepAlive } from './sse-heartbeat.js';
|
|
6
7
|
/**
|
|
7
8
|
* POST /v1/chat/completions handler (OpenAI-compatible), extracted verbatim
|
|
8
9
|
* from SmartServer._handleChat. The only change vs. the original is that the
|
|
@@ -174,99 +175,106 @@ export async function handleChat(req, res, _requestLogger, smartAgent, _chat, _s
|
|
|
174
175
|
...opts,
|
|
175
176
|
externalResults,
|
|
176
177
|
});
|
|
178
|
+
const keepAlive = attachSseKeepAlive(res, cfg.agent?.heartbeatIntervalMs);
|
|
177
179
|
let firstChunk = true;
|
|
178
180
|
let finishReasonSent = false;
|
|
179
181
|
let lastUsage = null;
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
182
|
+
try {
|
|
183
|
+
for await (const chunk of stream) {
|
|
184
|
+
keepAlive.reset();
|
|
185
|
+
if (!chunk.ok) {
|
|
186
|
+
const errorChunk = {
|
|
187
|
+
id,
|
|
188
|
+
object: 'chat.completion.chunk',
|
|
189
|
+
created,
|
|
190
|
+
model: responseModel,
|
|
191
|
+
choices: [
|
|
192
|
+
{
|
|
193
|
+
index: 0,
|
|
194
|
+
delta: { content: `[Error] ${chunk.error.message}` },
|
|
195
|
+
finish_reason: 'stop',
|
|
196
|
+
},
|
|
197
|
+
],
|
|
198
|
+
};
|
|
199
|
+
res.write(`data: ${JSON.stringify(errorChunk)}\n\n`);
|
|
200
|
+
finishReasonSent = true;
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
// SSE heartbeat comment — keeps connection alive, ignored by clients
|
|
204
|
+
if (chunk.value.heartbeat) {
|
|
205
|
+
const hb = chunk.value.heartbeat;
|
|
206
|
+
res.write(`: heartbeat tool=${hb.tool} elapsed=${hb.elapsed}ms\n\n`);
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
// SSE timing breakdown comment — sent with the final chunk
|
|
210
|
+
if (chunk.value.timing) {
|
|
211
|
+
const parts = chunk.value.timing.map((t) => `${t.phase}=${t.duration}ms`);
|
|
212
|
+
res.write(`: timing ${parts.join(' ')}\n\n`);
|
|
213
|
+
}
|
|
214
|
+
if (chunk.value.usage) {
|
|
215
|
+
lastUsage = {
|
|
216
|
+
prompt_tokens: chunk.value.usage.promptTokens,
|
|
217
|
+
completion_tokens: chunk.value.usage.completionTokens,
|
|
218
|
+
total_tokens: chunk.value.usage.totalTokens,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
const baseResponse = {
|
|
183
222
|
id,
|
|
184
223
|
object: 'chat.completion.chunk',
|
|
185
224
|
created,
|
|
186
225
|
model: responseModel,
|
|
187
|
-
|
|
188
|
-
{
|
|
189
|
-
index: 0,
|
|
190
|
-
delta: { content: `[Error] ${chunk.error.message}` },
|
|
191
|
-
finish_reason: 'stop',
|
|
192
|
-
},
|
|
193
|
-
],
|
|
226
|
+
usage: null,
|
|
194
227
|
};
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
228
|
+
if (firstChunk) {
|
|
229
|
+
res.write(`data: ${JSON.stringify({ ...baseResponse, choices: [{ index: 0, delta: { role: 'assistant', content: chunk.value.content || '' }, finish_reason: null }] })}\n\n`);
|
|
230
|
+
firstChunk = false;
|
|
231
|
+
if (!chunk.value.finishReason && !chunk.value.toolCalls)
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
if (chunk.value.content || chunk.value.toolCalls) {
|
|
235
|
+
const delta = {};
|
|
236
|
+
if (chunk.value.content)
|
|
237
|
+
delta.content = chunk.value.content;
|
|
238
|
+
if (chunk.value.toolCalls) {
|
|
239
|
+
delta.tool_calls = chunk.value.toolCalls.map((call, index) => {
|
|
240
|
+
const tc = toToolCallDelta(call, index);
|
|
241
|
+
return {
|
|
242
|
+
index: tc.index,
|
|
243
|
+
id: tc.id,
|
|
244
|
+
type: 'function',
|
|
245
|
+
function: {
|
|
246
|
+
name: tc.name,
|
|
247
|
+
arguments: tc.arguments || '',
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
res.write(`data: ${JSON.stringify({ ...baseResponse, choices: [{ index: 0, delta, finish_reason: null }] })}\n\n`);
|
|
253
|
+
}
|
|
254
|
+
if (chunk.value.finishReason) {
|
|
255
|
+
res.write(`data: ${JSON.stringify({ ...baseResponse, choices: [{ index: 0, delta: {}, finish_reason: mapStopReason(chunk.value.finishReason) }] })}\n\n`);
|
|
256
|
+
finishReasonSent = true;
|
|
257
|
+
}
|
|
209
258
|
}
|
|
210
|
-
if (
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
259
|
+
if (!finishReasonSent) {
|
|
260
|
+
const baseResponse = {
|
|
261
|
+
id,
|
|
262
|
+
object: 'chat.completion.chunk',
|
|
263
|
+
created,
|
|
264
|
+
model: responseModel,
|
|
265
|
+
usage: null,
|
|
215
266
|
};
|
|
267
|
+
res.write(`data: ${JSON.stringify({ ...baseResponse, choices: [{ index: 0, delta: {}, finish_reason: 'stop' }] })}\n\n`);
|
|
216
268
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
object: 'chat.completion.chunk',
|
|
220
|
-
created,
|
|
221
|
-
model: responseModel,
|
|
222
|
-
usage: null,
|
|
223
|
-
};
|
|
224
|
-
if (firstChunk) {
|
|
225
|
-
res.write(`data: ${JSON.stringify({ ...baseResponse, choices: [{ index: 0, delta: { role: 'assistant', content: chunk.value.content || '' }, finish_reason: null }] })}\n\n`);
|
|
226
|
-
firstChunk = false;
|
|
227
|
-
if (!chunk.value.finishReason && !chunk.value.toolCalls)
|
|
228
|
-
continue;
|
|
229
|
-
}
|
|
230
|
-
if (chunk.value.content || chunk.value.toolCalls) {
|
|
231
|
-
const delta = {};
|
|
232
|
-
if (chunk.value.content)
|
|
233
|
-
delta.content = chunk.value.content;
|
|
234
|
-
if (chunk.value.toolCalls) {
|
|
235
|
-
delta.tool_calls = chunk.value.toolCalls.map((call, index) => {
|
|
236
|
-
const tc = toToolCallDelta(call, index);
|
|
237
|
-
return {
|
|
238
|
-
index: tc.index,
|
|
239
|
-
id: tc.id,
|
|
240
|
-
type: 'function',
|
|
241
|
-
function: {
|
|
242
|
-
name: tc.name,
|
|
243
|
-
arguments: tc.arguments || '',
|
|
244
|
-
},
|
|
245
|
-
};
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
res.write(`data: ${JSON.stringify({ ...baseResponse, choices: [{ index: 0, delta, finish_reason: null }] })}\n\n`);
|
|
269
|
+
if ((cfg.reportUsage !== false || body.stream_options?.include_usage) &&
|
|
270
|
+
lastUsage) {
|
|
271
|
+
res.write(`data: ${JSON.stringify({ id, object: 'chat.completion.chunk', created, model: responseModel, choices: [], usage: lastUsage })}\n\n`);
|
|
249
272
|
}
|
|
250
|
-
|
|
251
|
-
res.write(`data: ${JSON.stringify({ ...baseResponse, choices: [{ index: 0, delta: {}, finish_reason: mapStopReason(chunk.value.finishReason) }] })}\n\n`);
|
|
252
|
-
finishReasonSent = true;
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
if (!finishReasonSent) {
|
|
256
|
-
const baseResponse = {
|
|
257
|
-
id,
|
|
258
|
-
object: 'chat.completion.chunk',
|
|
259
|
-
created,
|
|
260
|
-
model: responseModel,
|
|
261
|
-
usage: null,
|
|
262
|
-
};
|
|
263
|
-
res.write(`data: ${JSON.stringify({ ...baseResponse, choices: [{ index: 0, delta: {}, finish_reason: 'stop' }] })}\n\n`);
|
|
273
|
+
res.write('data: [DONE]\n\n');
|
|
264
274
|
}
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
res.write(`data: ${JSON.stringify({ id, object: 'chat.completion.chunk', created, model: responseModel, choices: [], usage: lastUsage })}\n\n`);
|
|
275
|
+
finally {
|
|
276
|
+
keepAlive.stop();
|
|
268
277
|
}
|
|
269
|
-
res.write('data: [DONE]\n\n');
|
|
270
278
|
res.end();
|
|
271
279
|
log({
|
|
272
280
|
event: 'request_done',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-route-handler.js","sourceRoot":"","sources":["../../../src/smart-agent/http/chat-route-handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chat-route-handler.js","sourceRoot":"","sources":["../../../src/smart-agent/http/chat-route-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ServerResponse } from 'node:http';
|
|
2
|
+
export interface IdleHeartbeat {
|
|
3
|
+
/** Re-arm the idle timer. Call on every real chunk written to the client. */
|
|
4
|
+
reset(): void;
|
|
5
|
+
/** Cancel the timer permanently. Idempotent. */
|
|
6
|
+
stop(): void;
|
|
7
|
+
}
|
|
8
|
+
export interface IdleHeartbeatOptions {
|
|
9
|
+
/** Raw configured interval (may be undefined). Normalized internally. */
|
|
10
|
+
intervalMs: number | undefined;
|
|
11
|
+
/** Invoked once each time the stream stays idle for the normalized interval. */
|
|
12
|
+
onBeat: () => void;
|
|
13
|
+
/** Timer injection for deterministic tests. Default: global setTimeout/clearTimeout. */
|
|
14
|
+
schedule?: (cb: () => void, ms: number) => unknown;
|
|
15
|
+
cancel?: (handle: unknown) => void;
|
|
16
|
+
}
|
|
17
|
+
export declare function createIdleHeartbeat(opts: IdleHeartbeatOptions): IdleHeartbeat;
|
|
18
|
+
/**
|
|
19
|
+
* Wire an idle keep-alive to an SSE response: `onBeat` writes a keep-alive
|
|
20
|
+
* comment and `res 'close'` stops the timer. `intervalMs` is the RAW configured
|
|
21
|
+
* value (may be undefined) — normalization happens inside `createIdleHeartbeat`.
|
|
22
|
+
*/
|
|
23
|
+
export declare function attachSseKeepAlive(res: ServerResponse, intervalMs: number | undefined): IdleHeartbeat;
|
|
24
|
+
//# sourceMappingURL=sse-heartbeat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-heartbeat.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/http/sse-heartbeat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,KAAK,IAAI,IAAI,CAAC;IACd,gDAAgD;IAChD,IAAI,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,gFAAgF;IAChF,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC;AAOD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,aAAa,CA2C7E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,aAAa,CAOf"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { normalizeHeartbeatMs } from '@mcp-abap-adt/llm-agent-libs';
|
|
2
|
+
const NOOP = {
|
|
3
|
+
reset() { },
|
|
4
|
+
stop() { },
|
|
5
|
+
};
|
|
6
|
+
export function createIdleHeartbeat(opts) {
|
|
7
|
+
const ms = normalizeHeartbeatMs(opts.intervalMs);
|
|
8
|
+
if (ms === null)
|
|
9
|
+
return NOOP;
|
|
10
|
+
const schedule = opts.schedule ?? ((cb, d) => setTimeout(cb, d));
|
|
11
|
+
const cancel = opts.cancel ??
|
|
12
|
+
((h) => clearTimeout(h));
|
|
13
|
+
let handle;
|
|
14
|
+
let stopped = false;
|
|
15
|
+
const arm = () => {
|
|
16
|
+
if (stopped)
|
|
17
|
+
return; // never schedule after stop
|
|
18
|
+
handle = schedule(() => {
|
|
19
|
+
if (stopped)
|
|
20
|
+
return; // a stop() between scheduling and firing
|
|
21
|
+
opts.onBeat();
|
|
22
|
+
if (stopped)
|
|
23
|
+
return; // onBeat() may have stopped us synchronously (e.g. res close)
|
|
24
|
+
arm();
|
|
25
|
+
}, ms);
|
|
26
|
+
};
|
|
27
|
+
const clear = () => {
|
|
28
|
+
if (handle !== undefined) {
|
|
29
|
+
cancel(handle);
|
|
30
|
+
handle = undefined;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
arm();
|
|
34
|
+
return {
|
|
35
|
+
reset() {
|
|
36
|
+
if (stopped)
|
|
37
|
+
return;
|
|
38
|
+
clear();
|
|
39
|
+
arm();
|
|
40
|
+
},
|
|
41
|
+
stop() {
|
|
42
|
+
if (stopped)
|
|
43
|
+
return;
|
|
44
|
+
stopped = true;
|
|
45
|
+
clear();
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Wire an idle keep-alive to an SSE response: `onBeat` writes a keep-alive
|
|
51
|
+
* comment and `res 'close'` stops the timer. `intervalMs` is the RAW configured
|
|
52
|
+
* value (may be undefined) — normalization happens inside `createIdleHeartbeat`.
|
|
53
|
+
*/
|
|
54
|
+
export function attachSseKeepAlive(res, intervalMs) {
|
|
55
|
+
const hb = createIdleHeartbeat({
|
|
56
|
+
intervalMs,
|
|
57
|
+
onBeat: () => res.write(': keep-alive\n\n'),
|
|
58
|
+
});
|
|
59
|
+
res.on('close', () => hb.stop());
|
|
60
|
+
return hb;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=sse-heartbeat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-heartbeat.js","sourceRoot":"","sources":["../../../src/smart-agent/http/sse-heartbeat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAmBpE,MAAM,IAAI,GAAkB;IAC1B,KAAK,KAAI,CAAC;IACV,IAAI,KAAI,CAAC;CACV,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,IAA0B;IAC5D,MAAM,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE7B,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAc,EAAE,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,MAAM,GACV,IAAI,CAAC,MAAM;QACX,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,YAAY,CAAC,CAAkC,CAAC,CAAC,CAAC;IAErE,IAAI,MAAe,CAAC;IACpB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,GAAG,GAAG,GAAS,EAAE;QACrB,IAAI,OAAO;YAAE,OAAO,CAAC,4BAA4B;QACjD,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;YACrB,IAAI,OAAO;gBAAE,OAAO,CAAC,yCAAyC;YAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,OAAO;gBAAE,OAAO,CAAC,8DAA8D;YACnF,GAAG,EAAE,CAAC;QACR,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,CAAC;YACf,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;IAEF,GAAG,EAAE,CAAC;IAEN,OAAO;QACL,KAAK;YACH,IAAI,OAAO;gBAAE,OAAO;YACpB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;QACR,CAAC;QACD,IAAI;YACF,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,EAAE,CAAC;QACV,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,GAAmB,EACnB,UAA8B;IAE9B,MAAM,EAAE,GAAG,mBAAmB,CAAC;QAC7B,UAAU;QACV,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC;KAC5C,CAAC,CAAC;IACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { IMcpClient } from '@mcp-abap-adt/llm-agent';
|
|
2
1
|
import type { SmartServerMcpConfig } from '../smart-server.js';
|
|
2
|
+
import type { McpClientsWithDescriptors } from './mcp-clients-with-descriptors.js';
|
|
3
3
|
/**
|
|
4
4
|
* Decide whether MCP clients should be isolated per session (#213). Per-session
|
|
5
5
|
* isolation applies ONLY to the YAML `mcp:` path — the connection the server
|
|
@@ -33,12 +33,14 @@ export declare function serverOwnsMcpConnection(o: {
|
|
|
33
33
|
* `callTool`/`listTools`) and does NOT vectorize (the caller reuses the shared
|
|
34
34
|
* global tool catalog via the builder's provided-clients path).
|
|
35
35
|
*
|
|
36
|
-
* Returns `{ clients, close }`:
|
|
37
|
-
*
|
|
38
|
-
*
|
|
36
|
+
* Returns `{ clients, clientDescriptors, configuredSlotCount, close }`:
|
|
37
|
+
* `clientDescriptors[i]` (`{ slotIndex: i, label: cfg[i].name }`) describes
|
|
38
|
+
* `clients[i]` — stable per-slot identity for the namespacing layer (#244).
|
|
39
|
+
* `close()` disconnects the wrappers this helper created — the only place
|
|
40
|
+
* that owns them. `IMcpClient`/`McpClientAdapter` do not expose `disconnect`;
|
|
41
|
+
* the wrapper does.
|
|
39
42
|
*/
|
|
40
|
-
export declare function buildSessionMcpClients(mcpCfg: SmartServerMcpConfig | SmartServerMcpConfig[] | undefined | null): {
|
|
41
|
-
clients: IMcpClient[];
|
|
43
|
+
export declare function buildSessionMcpClients(mcpCfg: SmartServerMcpConfig | SmartServerMcpConfig[] | undefined | null): McpClientsWithDescriptors & {
|
|
42
44
|
close: () => Promise<void>;
|
|
43
45
|
};
|
|
44
46
|
//# sourceMappingURL=build-session-mcp-clients.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-session-mcp-clients.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/mcp/build-session-mcp-clients.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build-session-mcp-clients.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/mcp/build-session-mcp-clients.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAEnF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAAE;IAC5C,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,OAAO,CAEV;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE;IACzC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAEV;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,oBAAoB,GAAG,oBAAoB,EAAE,GAAG,SAAS,GAAG,IAAI,GACvE,yBAAyB,GAAG;IAAE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAgD5D"}
|
|
@@ -29,17 +29,27 @@ export function serverOwnsMcpConnection(o) {
|
|
|
29
29
|
* `callTool`/`listTools`) and does NOT vectorize (the caller reuses the shared
|
|
30
30
|
* global tool catalog via the builder's provided-clients path).
|
|
31
31
|
*
|
|
32
|
-
* Returns `{ clients, close }`:
|
|
33
|
-
*
|
|
34
|
-
*
|
|
32
|
+
* Returns `{ clients, clientDescriptors, configuredSlotCount, close }`:
|
|
33
|
+
* `clientDescriptors[i]` (`{ slotIndex: i, label: cfg[i].name }`) describes
|
|
34
|
+
* `clients[i]` — stable per-slot identity for the namespacing layer (#244).
|
|
35
|
+
* `close()` disconnects the wrappers this helper created — the only place
|
|
36
|
+
* that owns them. `IMcpClient`/`McpClientAdapter` do not expose `disconnect`;
|
|
37
|
+
* the wrapper does.
|
|
35
38
|
*/
|
|
36
39
|
export function buildSessionMcpClients(mcpCfg) {
|
|
37
|
-
if (!mcpCfg)
|
|
38
|
-
return {
|
|
40
|
+
if (!mcpCfg) {
|
|
41
|
+
return {
|
|
42
|
+
clients: [],
|
|
43
|
+
clientDescriptors: [],
|
|
44
|
+
configuredSlotCount: 0,
|
|
45
|
+
close: async () => { },
|
|
46
|
+
};
|
|
47
|
+
}
|
|
39
48
|
const list = Array.isArray(mcpCfg) ? mcpCfg : [mcpCfg];
|
|
40
49
|
const wrappers = [];
|
|
41
50
|
const clients = [];
|
|
42
|
-
|
|
51
|
+
const clientDescriptors = [];
|
|
52
|
+
list.forEach((cfg, i) => {
|
|
43
53
|
const wrapper = cfg.type === 'stdio'
|
|
44
54
|
? new MCPClientWrapper({
|
|
45
55
|
transport: 'stdio',
|
|
@@ -57,9 +67,12 @@ export function buildSessionMcpClients(mcpCfg) {
|
|
|
57
67
|
});
|
|
58
68
|
wrappers.push(wrapper);
|
|
59
69
|
clients.push(new McpClientAdapter(wrapper));
|
|
60
|
-
|
|
70
|
+
clientDescriptors.push({ slotIndex: i, label: cfg.name });
|
|
71
|
+
});
|
|
61
72
|
return {
|
|
62
73
|
clients,
|
|
74
|
+
clientDescriptors,
|
|
75
|
+
configuredSlotCount: list.length,
|
|
63
76
|
close: async () => {
|
|
64
77
|
for (const w of wrappers) {
|
|
65
78
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-session-mcp-clients.js","sourceRoot":"","sources":["../../../src/smart-agent/mcp/build-session-mcp-clients.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"build-session-mcp-clients.js","sourceRoot":"","sources":["../../../src/smart-agent/mcp/build-session-mcp-clients.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IMcpClient, McpClientDescriptor } from '@mcp-abap-adt/llm-agent';
|
|
2
|
+
/**
|
|
3
|
+
* Session MCP clients paired with the stable per-slot descriptors a connection
|
|
4
|
+
* strategy emits (#244). `clientDescriptors[i]` describes `clients[i]` — same
|
|
5
|
+
* index, NOT necessarily the same `slotIndex` (a peer outage can shrink
|
|
6
|
+
* `clients` below the originally configured slot count). `configuredSlotCount`
|
|
7
|
+
* is the number of `mcp[]` entries configured, independent of how many
|
|
8
|
+
* actually connected — used by callers that need to distinguish "fewer
|
|
9
|
+
* clients than configured" from "nothing configured".
|
|
10
|
+
*/
|
|
11
|
+
export interface McpClientsWithDescriptors {
|
|
12
|
+
clients: IMcpClient[];
|
|
13
|
+
clientDescriptors?: readonly McpClientDescriptor[];
|
|
14
|
+
configuredSlotCount?: number;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=mcp-clients-with-descriptors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-clients-with-descriptors.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/mcp/mcp-clients-with-descriptors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE/E;;;;;;;;GAQG;AACH,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,iBAAiB,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACnD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-clients-with-descriptors.js","sourceRoot":"","sources":["../../../src/smart-agent/mcp/mcp-clients-with-descriptors.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { IMcpClient, IMcpFailureClassifier, McpCallResult, McpClientDescriptor } from '@mcp-abap-adt/llm-agent';
|
|
2
|
+
/**
|
|
3
|
+
* Rebind a namespaced-tools `provenance` map (exposed name → { slotIndex,
|
|
4
|
+
* originalName }, built once against the SHARED tool catalog's connections)
|
|
5
|
+
* onto a FRESH set of per-session `clients` (#244). Per-session MCP isolation
|
|
6
|
+
* (#213) constructs new client instances per request, so the catalog-time
|
|
7
|
+
* `toolClientMap` — bound to the original clients — cannot be reused as-is;
|
|
8
|
+
* this walks the stable provenance instead and re-resolves each exposed name
|
|
9
|
+
* against the current session's clients.
|
|
10
|
+
*
|
|
11
|
+
* Mirrors `buildNamespacedTools` (`packages/llm-agent/src/interfaces/build-namespaced-tools.ts`):
|
|
12
|
+
* the real client when the exposed name was NOT namespaced (bare — unique
|
|
13
|
+
* tool), the `bindToolCallName` wrapper when it WAS (so `callTool` still
|
|
14
|
+
* targets the tool's original, pre-namespace name on the wire). The
|
|
15
|
+
* discriminator is purely `exposedName === originalName` — this NEVER
|
|
16
|
+
* re-`listTools()` to "discover" a bare name.
|
|
17
|
+
*
|
|
18
|
+
* When no client matches a provenance slot, the entry is SKIPPED (no map
|
|
19
|
+
* key) rather than thrown — a later `map.get` miss surfaces as an ordinary
|
|
20
|
+
* "Tool not found" from `buildNamespacedMcpBridge`, never a hard failure at
|
|
21
|
+
* rebind time.
|
|
22
|
+
*/
|
|
23
|
+
export declare function rebindProvenanceToClients(provenance: ReadonlyMap<string, {
|
|
24
|
+
slotIndex: number;
|
|
25
|
+
originalName: string;
|
|
26
|
+
}>, clients: readonly IMcpClient[], descriptors?: readonly McpClientDescriptor[]): Map<string, IMcpClient>;
|
|
27
|
+
/**
|
|
28
|
+
* Shared MCP bridge over a pre-resolved exposed-name → owning-client map
|
|
29
|
+
* (#244 addendum §3c). Unlike `buildMcpBridge` (`smart-server.ts`), the owner
|
|
30
|
+
* is already known from `toolClientMap` — no per-call `listTools()` ownership
|
|
31
|
+
* scan is needed, since namespacing has already resolved which client answers
|
|
32
|
+
* for which exposed name at rebind time.
|
|
33
|
+
*
|
|
34
|
+
* The probe + classify/throw-vs-isError branches are otherwise IDENTICAL to
|
|
35
|
+
* `buildMcpBridge`: an availability failure (per the classifier, using the
|
|
36
|
+
* owning client's `healthCheck` as the probe) fails loud — throws — so a
|
|
37
|
+
* transient outage is never mistaken for tool feedback; a tool-level error
|
|
38
|
+
* comes back as `{ isError: true, text: error.message }` for the LLM to see.
|
|
39
|
+
*/
|
|
40
|
+
export declare function buildNamespacedMcpBridge(toolClientMap: ReadonlyMap<string, IMcpClient>, classifier?: IMcpFailureClassifier): (name: string, args: unknown, signal?: AbortSignal) => Promise<McpCallResult>;
|
|
41
|
+
//# sourceMappingURL=namespaced-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namespaced-bridge.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/mcp/namespaced-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAsBjC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5E,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,WAAW,CAAC,EAAE,SAAS,mBAAmB,EAAE,GAC3C,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAazB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EAC9C,UAAU,GAAE,qBAAyD,GACpE,CACD,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,aAAa,CAAC,CA4B1B"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { bindToolCallName } from '@mcp-abap-adt/llm-agent';
|
|
2
|
+
import { DefaultMcpFailureClassifier } from '@mcp-abap-adt/llm-agent-mcp';
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the client that currently owns a given provenance `slotIndex`: the
|
|
5
|
+
* client whose descriptor carries that `slotIndex` (descriptors are index-
|
|
6
|
+
* aligned with `clients`), or — when no descriptors were supplied — the
|
|
7
|
+
* client at that array index directly. Returns `undefined` when nothing
|
|
8
|
+
* matches (fewer session clients than provenance slots, e.g. a slot that
|
|
9
|
+
* never (re)connected).
|
|
10
|
+
*/
|
|
11
|
+
function resolveSlotClient(slotIndex, clients, descriptors) {
|
|
12
|
+
if (!descriptors)
|
|
13
|
+
return clients[slotIndex];
|
|
14
|
+
const idx = descriptors.findIndex((d) => d.slotIndex === slotIndex);
|
|
15
|
+
return idx === -1 ? undefined : clients[idx];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Rebind a namespaced-tools `provenance` map (exposed name → { slotIndex,
|
|
19
|
+
* originalName }, built once against the SHARED tool catalog's connections)
|
|
20
|
+
* onto a FRESH set of per-session `clients` (#244). Per-session MCP isolation
|
|
21
|
+
* (#213) constructs new client instances per request, so the catalog-time
|
|
22
|
+
* `toolClientMap` — bound to the original clients — cannot be reused as-is;
|
|
23
|
+
* this walks the stable provenance instead and re-resolves each exposed name
|
|
24
|
+
* against the current session's clients.
|
|
25
|
+
*
|
|
26
|
+
* Mirrors `buildNamespacedTools` (`packages/llm-agent/src/interfaces/build-namespaced-tools.ts`):
|
|
27
|
+
* the real client when the exposed name was NOT namespaced (bare — unique
|
|
28
|
+
* tool), the `bindToolCallName` wrapper when it WAS (so `callTool` still
|
|
29
|
+
* targets the tool's original, pre-namespace name on the wire). The
|
|
30
|
+
* discriminator is purely `exposedName === originalName` — this NEVER
|
|
31
|
+
* re-`listTools()` to "discover" a bare name.
|
|
32
|
+
*
|
|
33
|
+
* When no client matches a provenance slot, the entry is SKIPPED (no map
|
|
34
|
+
* key) rather than thrown — a later `map.get` miss surfaces as an ordinary
|
|
35
|
+
* "Tool not found" from `buildNamespacedMcpBridge`, never a hard failure at
|
|
36
|
+
* rebind time.
|
|
37
|
+
*/
|
|
38
|
+
export function rebindProvenanceToClients(provenance, clients, descriptors) {
|
|
39
|
+
const map = new Map();
|
|
40
|
+
for (const [exposedName, { slotIndex, originalName }] of provenance) {
|
|
41
|
+
const client = resolveSlotClient(slotIndex, clients, descriptors);
|
|
42
|
+
if (!client)
|
|
43
|
+
continue;
|
|
44
|
+
map.set(exposedName, exposedName === originalName
|
|
45
|
+
? client
|
|
46
|
+
: bindToolCallName(client, originalName));
|
|
47
|
+
}
|
|
48
|
+
return map;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Shared MCP bridge over a pre-resolved exposed-name → owning-client map
|
|
52
|
+
* (#244 addendum §3c). Unlike `buildMcpBridge` (`smart-server.ts`), the owner
|
|
53
|
+
* is already known from `toolClientMap` — no per-call `listTools()` ownership
|
|
54
|
+
* scan is needed, since namespacing has already resolved which client answers
|
|
55
|
+
* for which exposed name at rebind time.
|
|
56
|
+
*
|
|
57
|
+
* The probe + classify/throw-vs-isError branches are otherwise IDENTICAL to
|
|
58
|
+
* `buildMcpBridge`: an availability failure (per the classifier, using the
|
|
59
|
+
* owning client's `healthCheck` as the probe) fails loud — throws — so a
|
|
60
|
+
* transient outage is never mistaken for tool feedback; a tool-level error
|
|
61
|
+
* comes back as `{ isError: true, text: error.message }` for the LLM to see.
|
|
62
|
+
*/
|
|
63
|
+
export function buildNamespacedMcpBridge(toolClientMap, classifier = new DefaultMcpFailureClassifier()) {
|
|
64
|
+
return async (name, args, signal) => {
|
|
65
|
+
const client = toolClientMap.get(name);
|
|
66
|
+
if (!client)
|
|
67
|
+
return { text: `Tool not found: ${name}`, isError: true };
|
|
68
|
+
const safeArgs = args != null && typeof args === 'object' && !Array.isArray(args)
|
|
69
|
+
? args
|
|
70
|
+
: {};
|
|
71
|
+
const opts = signal ? { signal } : undefined;
|
|
72
|
+
const probe = client.healthCheck
|
|
73
|
+
? () => client.healthCheck(opts).then((r) => (r.ok ? r.value : false))
|
|
74
|
+
: undefined;
|
|
75
|
+
const result = await client.callTool(name, safeArgs, opts);
|
|
76
|
+
if (!result.ok) {
|
|
77
|
+
// Availability failure → fail loud; a tool-level error → LLM feedback
|
|
78
|
+
// text WITH isError:true so the caller can see it failed (#213).
|
|
79
|
+
if ((await classifier.classify(result.error, probe)) === 'unavailable')
|
|
80
|
+
throw result.error;
|
|
81
|
+
return { text: result.error.message, isError: true };
|
|
82
|
+
}
|
|
83
|
+
const { content, isError } = result.value;
|
|
84
|
+
return {
|
|
85
|
+
text: typeof content === 'string' ? content : JSON.stringify(content),
|
|
86
|
+
isError: isError ?? false,
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=namespaced-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namespaced-bridge.js","sourceRoot":"","sources":["../../../src/smart-agent/mcp/namespaced-bridge.ts"],"names":[],"mappings":"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"}
|