@mcp-abap-adt/llm-agent-libs 19.2.0 → 20.4.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 (80) hide show
  1. package/dist/adapters/llm-adapter.d.ts.map +1 -1
  2. package/dist/adapters/llm-adapter.js +16 -7
  3. package/dist/adapters/llm-adapter.js.map +1 -1
  4. package/dist/agent/rag-helpers.d.ts +20 -0
  5. package/dist/agent/rag-helpers.d.ts.map +1 -0
  6. package/dist/agent/rag-helpers.js +61 -0
  7. package/dist/agent/rag-helpers.js.map +1 -0
  8. package/dist/agent/rag-orchestrator-types.d.ts +53 -0
  9. package/dist/agent/rag-orchestrator-types.d.ts.map +1 -0
  10. package/dist/agent/rag-orchestrator-types.js +2 -0
  11. package/dist/agent/rag-orchestrator-types.js.map +1 -0
  12. package/dist/agent/rag-orchestrator.d.ts +14 -0
  13. package/dist/agent/rag-orchestrator.d.ts.map +1 -0
  14. package/dist/agent/rag-orchestrator.js +352 -0
  15. package/dist/agent/rag-orchestrator.js.map +1 -0
  16. package/dist/agent.d.ts +11 -9
  17. package/dist/agent.d.ts.map +1 -1
  18. package/dist/agent.js +111 -818
  19. package/dist/agent.js.map +1 -1
  20. package/dist/builder-types.d.ts +64 -0
  21. package/dist/builder-types.d.ts.map +1 -0
  22. package/dist/builder-types.js +18 -0
  23. package/dist/builder-types.js.map +1 -0
  24. package/dist/builder.d.ts +23 -51
  25. package/dist/builder.d.ts.map +1 -1
  26. package/dist/builder.js +69 -224
  27. package/dist/builder.js.map +1 -1
  28. package/dist/coordinator/planning/one-shot.d.ts.map +1 -1
  29. package/dist/coordinator/planning/one-shot.js +13 -2
  30. package/dist/coordinator/planning/one-shot.js.map +1 -1
  31. package/dist/health/agent-health.d.ts +13 -0
  32. package/dist/health/agent-health.d.ts.map +1 -0
  33. package/dist/health/agent-health.js +82 -0
  34. package/dist/health/agent-health.js.map +1 -0
  35. package/dist/health/health-checker.d.ts.map +1 -1
  36. package/dist/health/health-checker.js +4 -4
  37. package/dist/health/health-checker.js.map +1 -1
  38. package/dist/interfaces/pipeline.d.ts +3 -1
  39. package/dist/interfaces/pipeline.d.ts.map +1 -1
  40. package/dist/mcp/tool-registry.d.ts +22 -0
  41. package/dist/mcp/tool-registry.d.ts.map +1 -0
  42. package/dist/mcp/tool-registry.js +57 -0
  43. package/dist/mcp/tool-registry.js.map +1 -0
  44. package/dist/mcp/vectorize-mcp-tools.d.ts +11 -0
  45. package/dist/mcp/vectorize-mcp-tools.d.ts.map +1 -0
  46. package/dist/mcp/vectorize-mcp-tools.js +191 -0
  47. package/dist/mcp/vectorize-mcp-tools.js.map +1 -0
  48. package/dist/pipeline/context.d.ts +3 -1
  49. package/dist/pipeline/context.d.ts.map +1 -1
  50. package/dist/pipeline/default-pipeline.d.ts.map +1 -1
  51. package/dist/pipeline/default-pipeline.js +1 -0
  52. package/dist/pipeline/default-pipeline.js.map +1 -1
  53. package/dist/pipeline/handlers/escalate-if-unavailable.d.ts +33 -0
  54. package/dist/pipeline/handlers/escalate-if-unavailable.d.ts.map +1 -0
  55. package/dist/pipeline/handlers/escalate-if-unavailable.js +22 -0
  56. package/dist/pipeline/handlers/escalate-if-unavailable.js.map +1 -0
  57. package/dist/pipeline/handlers/pass-through.d.ts +3 -0
  58. package/dist/pipeline/handlers/pass-through.d.ts.map +1 -0
  59. package/dist/pipeline/handlers/pass-through.js +77 -0
  60. package/dist/pipeline/handlers/pass-through.js.map +1 -0
  61. package/dist/pipeline/handlers/tool-loop-core.d.ts +92 -0
  62. package/dist/pipeline/handlers/tool-loop-core.d.ts.map +1 -0
  63. package/dist/pipeline/handlers/tool-loop-core.js +269 -0
  64. package/dist/pipeline/handlers/tool-loop-core.js.map +1 -0
  65. package/dist/pipeline/handlers/tool-loop.d.ts.map +1 -1
  66. package/dist/pipeline/handlers/tool-loop.js +67 -216
  67. package/dist/pipeline/handlers/tool-loop.js.map +1 -1
  68. package/dist/pipeline/pipeline-to-stream.d.ts +5 -0
  69. package/dist/pipeline/pipeline-to-stream.d.ts.map +1 -0
  70. package/dist/pipeline/pipeline-to-stream.js +49 -0
  71. package/dist/pipeline/pipeline-to-stream.js.map +1 -0
  72. package/dist/skills/plugin-host/github-transport.d.ts +35 -0
  73. package/dist/skills/plugin-host/github-transport.d.ts.map +1 -0
  74. package/dist/skills/plugin-host/github-transport.js +124 -0
  75. package/dist/skills/plugin-host/github-transport.js.map +1 -0
  76. package/dist/skills/plugin-host/index.d.ts +1 -0
  77. package/dist/skills/plugin-host/index.d.ts.map +1 -1
  78. package/dist/skills/plugin-host/index.js +1 -0
  79. package/dist/skills/plugin-host/index.js.map +1 -1
  80. package/package.json +14 -14
@@ -0,0 +1,33 @@
1
+ import type { IMcpFailureClassifier, McpError } from '@mcp-abap-adt/llm-agent';
2
+ type ToolRes = {
3
+ ok: true;
4
+ value: {
5
+ content: unknown;
6
+ };
7
+ } | {
8
+ ok: false;
9
+ error: {
10
+ message: string;
11
+ };
12
+ };
13
+ /** The decision both MCP tool loops share for one tool-call result:
14
+ * - `escalate` → an availability failure (transport down / 403 / timeout after
15
+ * reconnect): the caller must FAIL LOUD (yield an error → process() ok:false),
16
+ * NOT feed it to the LLM as text;
17
+ * - `text` → normal content OR a tool-level error, which stays LLM feedback. */
18
+ export type ToolResultDecision = {
19
+ escalate: McpError;
20
+ } | {
21
+ escalate?: undefined;
22
+ text: string;
23
+ };
24
+ /** Classify a tool-call result. Used by BOTH the core SmartAgent tool loop and the
25
+ * pipeline-handler tool loop so the throw-or-text decision lives in ONE place.
26
+ *
27
+ * The optional `classifier` (default: `DefaultMcpFailureClassifier`) controls
28
+ * whether a failed result is treated as an availability escalation or a tool-level
29
+ * error. `probeHealth` is forwarded to `classifier.classify` unchanged; pass it
30
+ * when you have a per-client health probe (Task 5 threads it here). */
31
+ export declare function classifyToolResult(res: ToolRes, classifier?: IMcpFailureClassifier, probeHealth?: () => Promise<boolean>): Promise<ToolResultDecision>;
32
+ export {};
33
+ //# sourceMappingURL=escalate-if-unavailable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escalate-if-unavailable.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/escalate-if-unavailable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAO/E,KAAK,OAAO,GACR;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,GACzC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE9C;;;;iFAIiF;AACjF,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,GACtB;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C;;;;;;wEAMwE;AACxE,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,OAAO,EACZ,UAAU,GAAE,qBAAyD,EACrE,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GACnC,OAAO,CAAC,kBAAkB,CAAC,CAY7B"}
@@ -0,0 +1,22 @@
1
+ import { DefaultMcpFailureClassifier } from '@mcp-abap-adt/llm-agent-mcp';
2
+ /** Classify a tool-call result. Used by BOTH the core SmartAgent tool loop and the
3
+ * pipeline-handler tool loop so the throw-or-text decision lives in ONE place.
4
+ *
5
+ * The optional `classifier` (default: `DefaultMcpFailureClassifier`) controls
6
+ * whether a failed result is treated as an availability escalation or a tool-level
7
+ * error. `probeHealth` is forwarded to `classifier.classify` unchanged; pass it
8
+ * when you have a per-client health probe (Task 5 threads it here). */
9
+ export async function classifyToolResult(res, classifier = new DefaultMcpFailureClassifier(), probeHealth) {
10
+ if (!res.ok) {
11
+ const kind = await classifier.classify(res.error, probeHealth);
12
+ if (kind === 'unavailable')
13
+ return { escalate: res.error };
14
+ return { text: res.error.message };
15
+ }
16
+ return {
17
+ text: typeof res.value.content === 'string'
18
+ ? res.value.content
19
+ : JSON.stringify(res.value.content),
20
+ };
21
+ }
22
+ //# sourceMappingURL=escalate-if-unavailable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escalate-if-unavailable.js","sourceRoot":"","sources":["../../../src/pipeline/handlers/escalate-if-unavailable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAmB1E;;;;;;wEAMwE;AACxE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAY,EACZ,aAAoC,IAAI,2BAA2B,EAAE,EACrE,WAAoC;IAEpC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAiB,EAAE,WAAW,CAAC,CAAC;QAC3E,IAAI,IAAI,KAAK,aAAa;YAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAiB,EAAE,CAAC;QACvE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC;IACD,OAAO;QACL,IAAI,EACF,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ;YACnC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO;YACnB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;KACxC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CallOptions, ILlm, IRequestLogger, LlmStreamChunk, LlmTool, Message, OrchestratorError, Result } from '@mcp-abap-adt/llm-agent';
2
+ export declare function runPassThrough(llm: ILlm, requestLogger: IRequestLogger, messages: Message[], externalTools: LlmTool[], opts: CallOptions | undefined): AsyncIterable<Result<LlmStreamChunk, OrchestratorError>>;
3
+ //# sourceMappingURL=pass-through.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pass-through.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/pass-through.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,IAAI,EACJ,cAAc,EACd,cAAc,EACd,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,MAAM,EACP,MAAM,yBAAyB,CAAC;AAGjC,wBAAuB,cAAc,CACnC,GAAG,EAAE,IAAI,EACT,aAAa,EAAE,cAAc,EAC7B,QAAQ,EAAE,OAAO,EAAE,EACnB,aAAa,EAAE,OAAO,EAAE,EACxB,IAAI,EAAE,WAAW,GAAG,SAAS,GAC5B,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAuE1D"}
@@ -0,0 +1,77 @@
1
+ import { summaryToUsage } from '../../logger/session-request-logger.js';
2
+ export async function* runPassThrough(llm, requestLogger, messages, externalTools, opts) {
3
+ const passStart = Date.now();
4
+ const traceId2 = opts?.trace?.traceId;
5
+ const stream = llm.streamChat(messages, externalTools, opts);
6
+ let passContent = '';
7
+ const passToolCalls = [];
8
+ let accPrompt = 0;
9
+ let accCompletion = 0;
10
+ let accTotal = 0;
11
+ let hasUsage = false;
12
+ const logPassUsage = () => {
13
+ // Log only if a usage chunk was actually seen (mirrors
14
+ // LoggingLlm.streamChat) — avoids creating a zero tool-loop bucket.
15
+ if (!hasUsage)
16
+ return;
17
+ requestLogger.logLlmCall({
18
+ component: 'tool-loop',
19
+ model: llm.model ?? 'unknown',
20
+ promptTokens: accPrompt,
21
+ completionTokens: accCompletion,
22
+ totalTokens: accTotal,
23
+ durationMs: Date.now() - passStart,
24
+ requestId: traceId2,
25
+ });
26
+ };
27
+ for await (const chunk of stream) {
28
+ if (!chunk.ok) {
29
+ // process() returns on the first error chunk → post-loop code never
30
+ // runs. Log accumulated (partial) spend BEFORE yielding the error.
31
+ logPassUsage();
32
+ yield chunk;
33
+ return;
34
+ }
35
+ if (chunk.value.reset) {
36
+ passContent = '';
37
+ passToolCalls.length = 0;
38
+ continue;
39
+ }
40
+ if (chunk.value.content)
41
+ passContent += chunk.value.content;
42
+ if (chunk.value.toolCalls)
43
+ passToolCalls.push(...chunk.value.toolCalls);
44
+ if (chunk.value.usage) {
45
+ accPrompt += chunk.value.usage.promptTokens;
46
+ accCompletion += chunk.value.usage.completionTokens;
47
+ accTotal += chunk.value.usage.totalTokens;
48
+ hasUsage = true;
49
+ }
50
+ // Strip usage from the forwarded chunk: the single usage-bearing chunk
51
+ // is the terminal getSummary chunk below (one usage chunk per request).
52
+ const { usage: _omitUsage, ...rest } = chunk.value;
53
+ yield { ok: true, value: rest };
54
+ }
55
+ opts?.sessionLogger?.logStep('llm_response_pass', {
56
+ content: passContent,
57
+ toolCalls: passToolCalls.length > 0 ? passToolCalls : undefined,
58
+ });
59
+ logPassUsage();
60
+ const passSummary = traceId2 ? requestLogger.getSummary(traceId2) : undefined;
61
+ yield {
62
+ ok: true,
63
+ value: {
64
+ content: '',
65
+ finishReason: 'stop',
66
+ ...(passSummary
67
+ ? {
68
+ usage: {
69
+ ...summaryToUsage(passSummary),
70
+ models: passSummary.byModel,
71
+ },
72
+ }
73
+ : {}),
74
+ },
75
+ };
76
+ }
77
+ //# sourceMappingURL=pass-through.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pass-through.js","sourceRoot":"","sources":["../../../src/pipeline/handlers/pass-through.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Shared setup-phase helpers for the two tool-loop implementations
3
+ * (SmartAgent._runStreamingToolLoop and ToolLoopHandler.execute).
4
+ *
5
+ * These helpers are INTERNAL to llm-agent-libs and are NOT exported from
6
+ * the package barrel (src/index.ts).
7
+ */
8
+ import type { CallOptions, IMcpClient, IMcpFailureClassifier, IToolCache, LlmStreamChunk, LlmTool, Message, Result, TimingEntry } from '@mcp-abap-adt/llm-agent';
9
+ import { OrchestratorError } from '@mcp-abap-adt/llm-agent';
10
+ import type { IMetrics } from '../../metrics/types.js';
11
+ import type { PendingToolResultsRegistry } from '../../policy/pending-tool-results-registry.js';
12
+ import { type ToolAvailabilityRegistry } from '../../policy/tool-availability-registry.js';
13
+ import type { ISpan, ITracer } from '../../tracer/types.js';
14
+ import type { IOutputValidator } from '../../validator/types.js';
15
+ export type ParsedToolCall = {
16
+ id: string;
17
+ name: string;
18
+ arguments: Record<string, unknown>;
19
+ };
20
+ export interface IClassifiedToolCalls {
21
+ internalCalls: ParsedToolCall[];
22
+ validExternalCalls: ParsedToolCall[];
23
+ blockedCalls: ParsedToolCall[];
24
+ hallucinations: ParsedToolCall[];
25
+ }
26
+ /** Partition tool calls into internal / valid-external / blocked / hallucinated. */
27
+ export declare function classifyToolCalls(toolCalls: ParsedToolCall[], toolClientMap: Map<string, IMcpClient>, externalToolNames: Set<string>, toolAvailabilityRegistry: ToolAvailabilityRegistry, sessionId: string): IClassifiedToolCalls;
28
+ /** Append the client-tool priority instruction to the system message when
29
+ * external tools are present. Returns messages unchanged otherwise. */
30
+ export declare function injectToolPriority(messages: Message[], externalTools: LlmTool[]): Message[];
31
+ /** Filter out session-blocked tools; log the blocked set when non-empty.
32
+ * Returns the allowed subset. */
33
+ export declare function filterAvailableTools(registry: ToolAvailabilityRegistry, sessionId: string, currentTools: LlmTool[], iteration: number, options: CallOptions | undefined): LlmTool[];
34
+ /** Inject pending internal tool results from a prior mixed-call request. */
35
+ export declare function injectPendingResults(messages: Message[], pendingToolResults: PendingToolResultsRegistry, sessionId: string, options: CallOptions | undefined): Promise<Message[]>;
36
+ /** Append an assistant(tool_calls=blocked) + per-blocked tool-error messages;
37
+ * log the interception. Returns the extended messages. */
38
+ export declare function buildBlockedToolMessages(messages: Message[], content: string, blockedCalls: ParsedToolCall[], options: CallOptions | undefined): Message[];
39
+ /** Append an assistant(tool_calls=ALL calls) + per-hallucination "not found"
40
+ * tool messages. Returns the extended messages. */
41
+ export declare function buildHallucinatedToolMessages(messages: Message[], content: string, toolCalls: ParsedToolCall[], hallucinations: ParsedToolCall[]): Message[];
42
+ export type ToolExecResult = {
43
+ tc: ParsedToolCall;
44
+ text: string;
45
+ res: Result<{
46
+ content: string | Record<string, unknown>;
47
+ isError?: boolean;
48
+ }, {
49
+ message: string;
50
+ }> | null;
51
+ duration: number;
52
+ cached: boolean;
53
+ };
54
+ export type BatchOutcome = {
55
+ escalated: true;
56
+ } | {
57
+ escalated: false;
58
+ currentTools: LlmTool[];
59
+ toolCallCount: number;
60
+ toolMessages: Message[];
61
+ };
62
+ export interface IExecuteToolBatchArgs {
63
+ batch: ParsedToolCall[];
64
+ toolClientMap: Map<string, IMcpClient>;
65
+ toolCache: IToolCache;
66
+ tracer: ITracer;
67
+ metrics: IMetrics;
68
+ parentSpan: ISpan;
69
+ toolAvailabilityRegistry: ToolAvailabilityRegistry;
70
+ sessionId: string;
71
+ externalToolNames: Set<string>;
72
+ currentTools: LlmTool[];
73
+ toolCallCount: number;
74
+ timingLog: TimingEntry[];
75
+ heartbeatMs: number;
76
+ options: CallOptions | undefined;
77
+ onToolExecuted?: (r: ToolExecResult) => void;
78
+ mcpFailureClassifier?: IMcpFailureClassifier;
79
+ }
80
+ /** Execute a batch of internal tool calls concurrently, yielding heartbeat
81
+ * chunks while they run; on an MCP-availability escalation yield an error
82
+ * chunk and return `{ escalated: true }`; otherwise return the updated
83
+ * currentTools / toolCallCount / tool messages. */
84
+ export declare function executeToolBatchWithHeartbeat(args: IExecuteToolBatchArgs): AsyncGenerator<Result<LlmStreamChunk, OrchestratorError>, BatchOutcome>;
85
+ export interface IReprompt {
86
+ reprompt: boolean;
87
+ messages: Message[];
88
+ }
89
+ /** Validate the no-tool-call output; on invalid, append the assistant reply +
90
+ * a correction user message and signal a reprompt. Otherwise pass through. */
91
+ export declare function runOutputValidationReprompt(outputValidator: IOutputValidator, content: string, messages: Message[], currentTools: LlmTool[], options: CallOptions | undefined): Promise<IReprompt>;
92
+ //# sourceMappingURL=tool-loop-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-loop-core.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/tool-loop-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,269 @@
1
+ import { OrchestratorError } from '@mcp-abap-adt/llm-agent';
2
+ import { isToolContextUnavailableError, } from '../../policy/tool-availability-registry.js';
3
+ import { classifyToolResult } from './escalate-if-unavailable.js';
4
+ /** Partition tool calls into internal / valid-external / blocked / hallucinated. */
5
+ export function classifyToolCalls(toolCalls, toolClientMap, externalToolNames, toolAvailabilityRegistry, sessionId) {
6
+ const internalCalls = toolCalls.filter((tc) => toolClientMap.has(tc.name));
7
+ const validExternalCalls = toolCalls.filter((tc) => externalToolNames.has(tc.name));
8
+ const blockedToolNames = toolAvailabilityRegistry.getBlockedToolNames(sessionId);
9
+ const blockedCalls = toolCalls.filter((tc) => blockedToolNames.has(tc.name));
10
+ const hallucinations = toolCalls.filter((tc) => !blockedToolNames.has(tc.name) &&
11
+ !toolClientMap.has(tc.name) &&
12
+ !externalToolNames.has(tc.name));
13
+ return { internalCalls, validExternalCalls, blockedCalls, hallucinations };
14
+ }
15
+ /** Append the client-tool priority instruction to the system message when
16
+ * external tools are present. Returns messages unchanged otherwise. */
17
+ export function injectToolPriority(messages, externalTools) {
18
+ if (externalTools.length > 0) {
19
+ const systemIdx = messages.findIndex((m) => m.role === 'system');
20
+ if (systemIdx >= 0) {
21
+ const sys = messages[systemIdx];
22
+ const next = [...messages];
23
+ next[systemIdx] = {
24
+ ...sys,
25
+ content: `${sys.content}\n\nIMPORTANT: You have internal tools and client-provided tools (marked [client-provided] in their description). Always prefer internal tools when they can accomplish the task. Use client-provided tools only when no internal tool can do the job.`,
26
+ };
27
+ return next;
28
+ }
29
+ }
30
+ return messages;
31
+ }
32
+ /** Filter out session-blocked tools; log the blocked set when non-empty.
33
+ * Returns the allowed subset. */
34
+ export function filterAvailableTools(registry, sessionId, currentTools, iteration, options) {
35
+ const filtered = registry.filterTools(sessionId, currentTools);
36
+ if (filtered.blocked.length > 0) {
37
+ options?.sessionLogger?.logStep('active_tools_filtered_in_iteration', {
38
+ iteration: iteration + 1,
39
+ blocked: filtered.blocked,
40
+ });
41
+ }
42
+ return filtered.allowed;
43
+ }
44
+ /** Inject pending internal tool results from a prior mixed-call request. */
45
+ export async function injectPendingResults(messages, pendingToolResults, sessionId, options) {
46
+ if (pendingToolResults.has(sessionId)) {
47
+ const pending = await pendingToolResults.consume(sessionId);
48
+ if (pending) {
49
+ const next = [
50
+ ...messages,
51
+ pending.assistantMessage,
52
+ ...pending.results.map((r) => ({
53
+ role: 'tool',
54
+ content: r.text,
55
+ tool_call_id: r.toolCallId,
56
+ })),
57
+ ];
58
+ options?.sessionLogger?.logStep('pending_tool_results_injected', {
59
+ toolNames: pending.results.map((r) => r.toolName),
60
+ });
61
+ return next;
62
+ }
63
+ }
64
+ return messages;
65
+ }
66
+ /** Append an assistant(tool_calls=blocked) + per-blocked tool-error messages;
67
+ * log the interception. Returns the extended messages. */
68
+ export function buildBlockedToolMessages(messages, content, blockedCalls, options) {
69
+ let next = [
70
+ ...messages,
71
+ {
72
+ role: 'assistant',
73
+ content: content || null,
74
+ tool_calls: blockedCalls.map((tc) => ({
75
+ id: tc.id,
76
+ type: 'function',
77
+ function: { name: tc.name, arguments: JSON.stringify(tc.arguments) },
78
+ })),
79
+ },
80
+ ];
81
+ for (const blocked of blockedCalls) {
82
+ next = [
83
+ ...next,
84
+ {
85
+ role: 'tool',
86
+ content: `Error: Tool "${blocked.name}" is temporarily unavailable in this session.`,
87
+ tool_call_id: blocked.id,
88
+ },
89
+ ];
90
+ }
91
+ options?.sessionLogger?.logStep('blocked_tool_calls_intercepted', {
92
+ toolNames: blockedCalls.map((tc) => tc.name),
93
+ });
94
+ return next;
95
+ }
96
+ /** Append an assistant(tool_calls=ALL calls) + per-hallucination "not found"
97
+ * tool messages. Returns the extended messages. */
98
+ export function buildHallucinatedToolMessages(messages, content, toolCalls, hallucinations) {
99
+ let next = [
100
+ ...messages,
101
+ {
102
+ role: 'assistant',
103
+ content: content || null,
104
+ tool_calls: toolCalls.map((tc) => ({
105
+ id: tc.id,
106
+ type: 'function',
107
+ function: { name: tc.name, arguments: JSON.stringify(tc.arguments) },
108
+ })),
109
+ },
110
+ ];
111
+ for (const h of hallucinations) {
112
+ next = [
113
+ ...next,
114
+ {
115
+ role: 'tool',
116
+ content: `Error: Tool "${h.name}" not found.`,
117
+ tool_call_id: h.id,
118
+ },
119
+ ];
120
+ }
121
+ return next;
122
+ }
123
+ /** Execute a batch of internal tool calls concurrently, yielding heartbeat
124
+ * chunks while they run; on an MCP-availability escalation yield an error
125
+ * chunk and return `{ escalated: true }`; otherwise return the updated
126
+ * currentTools / toolCallCount / tool messages. */
127
+ export async function* executeToolBatchWithHeartbeat(args) {
128
+ const { batch, toolClientMap, toolCache, tracer, metrics, parentSpan, toolAvailabilityRegistry, sessionId, externalToolNames, timingLog, heartbeatMs, options, onToolExecuted, } = args;
129
+ let currentTools = args.currentTools;
130
+ let toolCallCount = args.toolCallCount;
131
+ const toolExecPromises = batch.map(async (tc) => {
132
+ const toolStart = Date.now();
133
+ options?.sessionLogger?.logStep(`mcp_call_${tc.name}`, {
134
+ arguments: tc.arguments,
135
+ });
136
+ const client = toolClientMap.get(tc.name);
137
+ if (!client)
138
+ return { tc, text: '', res: null, duration: 0, cached: false };
139
+ const toolSpan = tracer.startSpan('smart_agent.tool_call', {
140
+ parent: parentSpan,
141
+ attributes: { 'tool.name': tc.name },
142
+ });
143
+ const cachedValue = toolCache.get(tc.name, tc.arguments);
144
+ const wasCached = !!cachedValue;
145
+ const res = cachedValue
146
+ ? (() => {
147
+ metrics.toolCacheHitCount.add();
148
+ toolSpan.setAttribute('cache', 'hit');
149
+ return { ok: true, value: cachedValue };
150
+ })()
151
+ : await (async () => {
152
+ const r = await client.callTool(tc.name, tc.arguments, options);
153
+ if (r.ok)
154
+ toolCache.set(tc.name, tc.arguments, r.value);
155
+ return r;
156
+ })();
157
+ const text = !res.ok
158
+ ? res.error.message
159
+ : typeof res.value.content === 'string'
160
+ ? res.value.content
161
+ : JSON.stringify(res.value.content);
162
+ toolSpan.setStatus(res.ok ? 'ok' : 'error', res.ok ? undefined : text);
163
+ toolSpan.end();
164
+ return {
165
+ tc,
166
+ text,
167
+ res,
168
+ duration: Date.now() - toolStart,
169
+ cached: wasCached,
170
+ };
171
+ });
172
+ const allDone = Promise.all(toolExecPromises);
173
+ const pendingTools = new Set(batch.map((tc) => tc.name));
174
+ const toolStartTime = Date.now();
175
+ let results = [];
176
+ let settled = false;
177
+ for (const [i, p] of toolExecPromises.entries()) {
178
+ p.then(() => pendingTools.delete(batch[i].name));
179
+ }
180
+ while (!settled) {
181
+ const winner = await Promise.race([
182
+ allDone.then((r) => ({ tag: 'done', results: r })),
183
+ new Promise((resolve) => setTimeout(() => resolve({ tag: 'tick' }), heartbeatMs)),
184
+ ]);
185
+ if (winner.tag === 'done') {
186
+ results = winner.results;
187
+ settled = true;
188
+ }
189
+ else {
190
+ for (const tool of pendingTools) {
191
+ yield {
192
+ ok: true,
193
+ value: {
194
+ content: '',
195
+ heartbeat: { tool, elapsed: Date.now() - toolStartTime },
196
+ },
197
+ };
198
+ }
199
+ }
200
+ }
201
+ for (const r of results) {
202
+ timingLog.push({ phase: `tool_${r.tc.name}`, duration: r.duration });
203
+ }
204
+ const toolMessages = [];
205
+ for (const r of results) {
206
+ const { tc, text, res } = r;
207
+ if (!res)
208
+ continue;
209
+ // FAIL LOUD on an MCP availability failure — yield an error chunk (→ the
210
+ // caller returns ok:false) instead of feeding "MCP error" to the LLM.
211
+ const tcClient = toolClientMap.get(tc.name);
212
+ const probe = tcClient?.healthCheck
213
+ ? () => tcClient.healthCheck().then((hr) => (hr.ok ? hr.value : false))
214
+ : undefined;
215
+ const decision = await classifyToolResult(res, args.mcpFailureClassifier, probe);
216
+ if (decision.escalate) {
217
+ // Emit timing BEFORE escalating so the timed-out/unavailable tool call
218
+ // appears in the timing log. onToolExecuted fires exactly once here;
219
+ // the end-of-loop call is skipped because we return early.
220
+ onToolExecuted?.(r);
221
+ yield {
222
+ ok: false,
223
+ error: new OrchestratorError(decision.escalate.message, 'MCP_UNAVAILABLE'),
224
+ };
225
+ return { escalated: true };
226
+ }
227
+ if (!res.ok &&
228
+ isToolContextUnavailableError(text) &&
229
+ !externalToolNames.has(tc.name)) {
230
+ const entry = toolAvailabilityRegistry.block(sessionId, tc.name, text);
231
+ currentTools = currentTools.filter((t) => t.name !== tc.name);
232
+ options?.sessionLogger?.logStep(`tool_blacklisted_${tc.name}`, {
233
+ reason: text,
234
+ blockedUntil: entry.blockedUntil,
235
+ });
236
+ }
237
+ options?.sessionLogger?.logStep(`mcp_result_${tc.name}`, { result: text });
238
+ toolCallCount++;
239
+ metrics.toolCallCount.add();
240
+ toolMessages.push({
241
+ role: 'tool',
242
+ content: text,
243
+ tool_call_id: tc.id,
244
+ });
245
+ onToolExecuted?.(r);
246
+ }
247
+ return { escalated: false, currentTools, toolCallCount, toolMessages };
248
+ }
249
+ /** Validate the no-tool-call output; on invalid, append the assistant reply +
250
+ * a correction user message and signal a reprompt. Otherwise pass through. */
251
+ export async function runOutputValidationReprompt(outputValidator, content, messages, currentTools, options) {
252
+ const valResult = await outputValidator.validate(content, { messages, tools: currentTools }, options);
253
+ if (valResult.ok && !valResult.value.valid) {
254
+ const correction = valResult.value.correctedContent ?? valResult.value.reason;
255
+ return {
256
+ reprompt: true,
257
+ messages: [
258
+ ...messages,
259
+ { role: 'assistant', content },
260
+ {
261
+ role: 'user',
262
+ content: `Your previous response was rejected by validation: ${correction}. Please try again.`,
263
+ },
264
+ ],
265
+ };
266
+ }
267
+ return { reprompt: false, messages };
268
+ }
269
+ //# sourceMappingURL=tool-loop-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-loop-core.js","sourceRoot":"","sources":["../../../src/pipeline/handlers/tool-loop-core.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-loop.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/tool-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAiBH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAqDzD,qBAAa,eAAgB,YAAW,aAAa;IAC7C,OAAO,CACX,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,EAAE,KAAK,GAChB,OAAO,CAAC,OAAO,CAAC;CAw3BpB"}
1
+ {"version":3,"file":"tool-loop.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/tool-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAeH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA+DzD,qBAAa,eAAgB,YAAW,aAAa;IAC7C,OAAO,CACX,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,EAAE,KAAK,GAChB,OAAO,CAAC,OAAO,CAAC;CAktBpB"}