@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.
Files changed (58) hide show
  1. package/dist/generated/version.d.ts +1 -1
  2. package/dist/generated/version.js +1 -1
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/pipelines/controller.d.ts.map +1 -1
  8. package/dist/pipelines/controller.js +9 -1
  9. package/dist/pipelines/controller.js.map +1 -1
  10. package/dist/smart-agent/controller/controller-coordinator-handler.d.ts +14 -1
  11. package/dist/smart-agent/controller/controller-coordinator-handler.d.ts.map +1 -1
  12. package/dist/smart-agent/controller/controller-coordinator-handler.js +41 -6
  13. package/dist/smart-agent/controller/controller-coordinator-handler.js.map +1 -1
  14. package/dist/smart-agent/controller/types.d.ts +4 -0
  15. package/dist/smart-agent/controller/types.d.ts.map +1 -1
  16. package/dist/smart-agent/http/adapter-route-handler.d.ts +2 -2
  17. package/dist/smart-agent/http/adapter-route-handler.d.ts.map +1 -1
  18. package/dist/smart-agent/http/adapter-route-handler.js +12 -4
  19. package/dist/smart-agent/http/adapter-route-handler.js.map +1 -1
  20. package/dist/smart-agent/http/chat-route-handler.d.ts.map +1 -1
  21. package/dist/smart-agent/http/chat-route-handler.js +87 -79
  22. package/dist/smart-agent/http/chat-route-handler.js.map +1 -1
  23. package/dist/smart-agent/http/sse-heartbeat.d.ts +24 -0
  24. package/dist/smart-agent/http/sse-heartbeat.d.ts.map +1 -0
  25. package/dist/smart-agent/http/sse-heartbeat.js +62 -0
  26. package/dist/smart-agent/http/sse-heartbeat.js.map +1 -0
  27. package/dist/smart-agent/mcp/build-session-mcp-clients.d.ts +8 -6
  28. package/dist/smart-agent/mcp/build-session-mcp-clients.d.ts.map +1 -1
  29. package/dist/smart-agent/mcp/build-session-mcp-clients.js +20 -7
  30. package/dist/smart-agent/mcp/build-session-mcp-clients.js.map +1 -1
  31. package/dist/smart-agent/mcp/mcp-clients-with-descriptors.d.ts +16 -0
  32. package/dist/smart-agent/mcp/mcp-clients-with-descriptors.d.ts.map +1 -0
  33. package/dist/smart-agent/mcp/mcp-clients-with-descriptors.js +2 -0
  34. package/dist/smart-agent/mcp/mcp-clients-with-descriptors.js.map +1 -0
  35. package/dist/smart-agent/mcp/namespaced-bridge.d.ts +41 -0
  36. package/dist/smart-agent/mcp/namespaced-bridge.d.ts.map +1 -0
  37. package/dist/smart-agent/mcp/namespaced-bridge.js +90 -0
  38. package/dist/smart-agent/mcp/namespaced-bridge.js.map +1 -0
  39. package/dist/smart-agent/resolve-agent-embedder.d.ts +3 -3
  40. package/dist/smart-agent/resolve-agent-embedder.d.ts.map +1 -1
  41. package/dist/smart-agent/resolve-agent-embedder.js +25 -8
  42. package/dist/smart-agent/resolve-agent-embedder.js.map +1 -1
  43. package/dist/smart-agent/resolve-config-sections.d.ts.map +1 -1
  44. package/dist/smart-agent/resolve-config-sections.js +54 -3
  45. package/dist/smart-agent/resolve-config-sections.js.map +1 -1
  46. package/dist/smart-agent/session-lifecycle/index.d.ts +20 -5
  47. package/dist/smart-agent/session-lifecycle/index.d.ts.map +1 -1
  48. package/dist/smart-agent/session-lifecycle/index.js +20 -0
  49. package/dist/smart-agent/session-lifecycle/index.js.map +1 -1
  50. package/dist/smart-agent/smart-server.d.ts +155 -5
  51. package/dist/smart-agent/smart-server.d.ts.map +1 -1
  52. package/dist/smart-agent/smart-server.js +297 -17
  53. package/dist/smart-agent/smart-server.js.map +1 -1
  54. package/dist/smart-agent/tools-rag-handle.d.ts +4 -2
  55. package/dist/smart-agent/tools-rag-handle.d.ts.map +1 -1
  56. package/dist/smart-agent/tools-rag-handle.js +24 -13
  57. package/dist/smart-agent/tools-rag-handle.js.map +1 -1
  58. 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;AAS5D;;;;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,CA2Zf"}
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
- for await (const chunk of stream) {
181
- if (!chunk.ok) {
182
- const errorChunk = {
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
- choices: [
188
- {
189
- index: 0,
190
- delta: { content: `[Error] ${chunk.error.message}` },
191
- finish_reason: 'stop',
192
- },
193
- ],
226
+ usage: null,
194
227
  };
195
- res.write(`data: ${JSON.stringify(errorChunk)}\n\n`);
196
- finishReasonSent = true;
197
- break;
198
- }
199
- // SSE heartbeat comment — keeps connection alive, ignored by clients
200
- if (chunk.value.heartbeat) {
201
- const hb = chunk.value.heartbeat;
202
- res.write(`: heartbeat tool=${hb.tool} elapsed=${hb.elapsed}ms\n\n`);
203
- continue;
204
- }
205
- // SSE timing breakdown comment — sent with the final chunk
206
- if (chunk.value.timing) {
207
- const parts = chunk.value.timing.map((t) => `${t.phase}=${t.duration}ms`);
208
- res.write(`: timing ${parts.join(' ')}\n\n`);
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 (chunk.value.usage) {
211
- lastUsage = {
212
- prompt_tokens: chunk.value.usage.promptTokens,
213
- completion_tokens: chunk.value.usage.completionTokens,
214
- total_tokens: chunk.value.usage.totalTokens,
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
- const baseResponse = {
218
- id,
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
- if (chunk.value.finishReason) {
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
- if ((cfg.reportUsage !== false || body.stream_options?.include_usage) &&
266
- lastUsage) {
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 }`: `close()` disconnects the wrappers this helper
37
- * created — the only place that owns them. `IMcpClient`/`McpClientAdapter` do
38
- * not expose `disconnect`; the wrapper does.
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":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAK1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;;;;;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;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,oBAAoB,GAAG,oBAAoB,EAAE,GAAG,SAAS,GAAG,IAAI,GACvE;IAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAqCvD"}
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 }`: `close()` disconnects the wrappers this helper
33
- * created — the only place that owns them. `IMcpClient`/`McpClientAdapter` do
34
- * not expose `disconnect`; the wrapper does.
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 { clients: [], close: async () => { } };
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
- for (const cfg of list) {
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;AAGrC;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,CAG1C;IACC,OAAO,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC;AAC7C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,CAIvC;IACC,OAAO,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC;AACpE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAwE;IAExE,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GACX,GAAG,CAAC,IAAI,KAAK,OAAO;YAClB,CAAC,CAAC,IAAI,gBAAgB,CAAC;gBACnB,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;gBACpB,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE,CAAC;YACJ,CAAC,CAAC,IAAI,gBAAgB,CAAC;gBACnB,SAAS,EAAE,MAAM;gBACjB,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE,CAAC,CAAC;QACT,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO;QACL,OAAO;QACP,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;gBACvB,CAAC;gBAAC,MAAM,CAAC;oBACP,oEAAoE;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mcp-clients-with-descriptors.js.map
@@ -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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"}