@mcp-abap-adt/llm-agent-server-libs 20.4.0 → 20.6.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/factories/controller-factory.d.ts +18 -1
- package/dist/factories/controller-factory.d.ts.map +1 -1
- package/dist/factories/controller-factory.js +12 -1
- package/dist/factories/controller-factory.js.map +1 -1
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/mcp/compose-auxiliary.d.ts +35 -0
- package/dist/mcp/compose-auxiliary.d.ts.map +1 -0
- package/dist/mcp/compose-auxiliary.js +64 -0
- package/dist/mcp/compose-auxiliary.js.map +1 -0
- package/dist/pipelines/controller.d.ts.map +1 -1
- package/dist/pipelines/controller.js +68 -2
- package/dist/pipelines/controller.js.map +1 -1
- package/dist/smart-agent/controller/controller-coordinator-handler.d.ts +19 -3
- package/dist/smart-agent/controller/controller-coordinator-handler.d.ts.map +1 -1
- package/dist/smart-agent/controller/controller-coordinator-handler.js +516 -361
- package/dist/smart-agent/controller/controller-coordinator-handler.js.map +1 -1
- package/dist/smart-agent/controller/default-step-execution-control.d.ts +7 -0
- package/dist/smart-agent/controller/default-step-execution-control.d.ts.map +1 -0
- package/dist/smart-agent/controller/default-step-execution-control.js +36 -0
- package/dist/smart-agent/controller/default-step-execution-control.js.map +1 -0
- package/dist/smart-agent/controller/noop-run-execution-control.d.ts +6 -0
- package/dist/smart-agent/controller/noop-run-execution-control.d.ts.map +1 -0
- package/dist/smart-agent/controller/noop-run-execution-control.js +14 -0
- package/dist/smart-agent/controller/noop-run-execution-control.js.map +1 -0
- package/dist/smart-agent/controller/subagent-client.d.ts +2 -2
- package/dist/smart-agent/controller/subagent-client.d.ts.map +1 -1
- package/dist/smart-agent/controller/subagent-client.js +2 -2
- package/dist/smart-agent/controller/subagent-client.js.map +1 -1
- package/dist/smart-agent/controller/types.d.ts +16 -4
- package/dist/smart-agent/controller/types.d.ts.map +1 -1
- package/dist/smart-agent/controller/types.js.map +1 -1
- package/dist/smart-agent/mcp/build-session-mcp-clients.d.ts +44 -0
- package/dist/smart-agent/mcp/build-session-mcp-clients.d.ts.map +1 -0
- package/dist/smart-agent/mcp/build-session-mcp-clients.js +75 -0
- package/dist/smart-agent/mcp/build-session-mcp-clients.js.map +1 -0
- package/dist/smart-agent/resolve-config-sections.d.ts.map +1 -1
- package/dist/smart-agent/resolve-config-sections.js +3 -0
- package/dist/smart-agent/resolve-config-sections.js.map +1 -1
- package/dist/smart-agent/session-lifecycle/index.d.ts +16 -0
- package/dist/smart-agent/session-lifecycle/index.d.ts.map +1 -1
- package/dist/smart-agent/session-lifecycle/index.js +17 -2
- package/dist/smart-agent/session-lifecycle/index.js.map +1 -1
- package/dist/smart-agent/smart-server.d.ts +22 -1
- package/dist/smart-agent/smart-server.d.ts.map +1 -1
- package/dist/smart-agent/smart-server.js +71 -6
- package/dist/smart-agent/smart-server.js.map +1 -1
- package/package.json +7 -7
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BuiltCoordinator, CallOptions, IEmbedder, IKnowledgeRagHandle, IPipelineFactory, LlmTool, PipelineFactoryDepsBase } from '@mcp-abap-adt/llm-agent';
|
|
1
|
+
import type { BuiltCoordinator, CallOptions, IEmbedder, IKnowledgeRagHandle, IPipelineFactory, IRunExecutionControl, IStepExecutionControl, LlmTool, PipelineFactoryDepsBase, ToolLoopContextStrategyFactory } from '@mcp-abap-adt/llm-agent';
|
|
2
2
|
import type { KnowledgeBackend } from '@mcp-abap-adt/llm-agent-libs';
|
|
3
3
|
import type { ControllerConfig, PlannerKind } from '../smart-agent/controller/types.js';
|
|
4
4
|
/**
|
|
@@ -29,6 +29,23 @@ export interface ControllerFactoryDeps extends PipelineFactoryDepsBase {
|
|
|
29
29
|
* to the agnostic path (the measurement toggle).
|
|
30
30
|
*/
|
|
31
31
|
skillsRecall?: (goal: string, options?: CallOptions) => Promise<string>;
|
|
32
|
+
/**
|
|
33
|
+
* Per-step tool-loop context strategy factory (record/form). Called ONCE per
|
|
34
|
+
* step by the handler with the per-step run context (`{ rag, runId, meta,
|
|
35
|
+
* stepName }`). The controller pipeline injects a `RagRecall` factory here (its
|
|
36
|
+
* `record` persists an `mcp-result`, its `recall` runs `runScopedRecall`).
|
|
37
|
+
* Absent → the handler falls back to `LegacyAccumulateContextStrategy`
|
|
38
|
+
* (byte-identical to the historical growing transcript).
|
|
39
|
+
*/
|
|
40
|
+
toolLoopContextStrategyFactory?: ToolLoopContextStrategyFactory;
|
|
41
|
+
/** Consumer-swappable per-step execution control (timeout / tool-call budget).
|
|
42
|
+
* The controller pipeline resolves `ctx.stepExecutionControl ?? new DefaultStepExecutionControl()`.
|
|
43
|
+
* Absent → the handler defaults (no timeout armed, never aborts). */
|
|
44
|
+
stepExecutionControl?: IStepExecutionControl;
|
|
45
|
+
/** Consumer-swappable per-run execution control (max steps / run timeout).
|
|
46
|
+
* The controller pipeline resolves `ctx.runExecutionControl ?? new NoopRunExecutionControl()`.
|
|
47
|
+
* Absent → the handler no-ops (never fires). */
|
|
48
|
+
runExecutionControl?: IRunExecutionControl;
|
|
32
49
|
}
|
|
33
50
|
/**
|
|
34
51
|
* Builder-factory for the `controller` pipeline — the code-level (no-YAML)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller-factory.d.ts","sourceRoot":"","sources":["../../src/factories/controller-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,EACP,uBAAuB,
|
|
1
|
+
{"version":3,"file":"controller-factory.d.ts","sourceRoot":"","sources":["../../src/factories/controller-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,OAAO,EACP,uBAAuB,EACvB,8BAA8B,EAC/B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAMrE,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB;IACpE,uEAAuE;IACvE,OAAO,EAAE,gBAAgB,CAAC;IAC1B,2CAA2C;IAC3C,eAAe,EAAE,CACf,SAAS,EAAE,MAAM,KACd,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACxD;;wFAEoF;IACpF,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,qEAAqE;IACrE,WAAW,EAAE,CACX,KAAK,EAAE,MAAM,EACb,CAAC,CAAC,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,WAAW,KAClB,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;IACjC,yEAAyE;IACzE,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/C;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE;;;;;;;OAOG;IACH,8BAA8B,CAAC,EAAE,8BAA8B,CAAC;IAChE;;0EAEsE;IACtE,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C;;qDAEiD;IACjD,mBAAmB,CAAC,EAAE,oBAAoB,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,iBACX,YAAW,gBAAgB,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;IAEpE,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;IAEhC,KAAK,CACT,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,qBAAqB,EAC3B,WAAW,GAAE,WAA8B,GAC1C,OAAO,CAAC,gBAAgB,CAAC;CAqF7B"}
|
|
@@ -76,10 +76,21 @@ export class ControllerFactory {
|
|
|
76
76
|
backend: deps.backend,
|
|
77
77
|
knowledgeRagFor: deps.knowledgeRagFor,
|
|
78
78
|
embedder: deps.embedder,
|
|
79
|
-
callMcp: (name, args) => deps.callMcp(name, args),
|
|
79
|
+
callMcp: (name, args, signal) => deps.callMcp(name, args, signal),
|
|
80
80
|
selectTools: deps.selectTools,
|
|
81
81
|
...(deps.isExternalTool ? { isExternalTool: deps.isExternalTool } : {}),
|
|
82
82
|
...(deps.skillsRecall ? { skillsRecall: deps.skillsRecall } : {}),
|
|
83
|
+
...(deps.toolLoopContextStrategyFactory
|
|
84
|
+
? {
|
|
85
|
+
toolLoopContextStrategyFactory: deps.toolLoopContextStrategyFactory,
|
|
86
|
+
}
|
|
87
|
+
: {}),
|
|
88
|
+
...(deps.stepExecutionControl
|
|
89
|
+
? { stepExecutionControl: deps.stepExecutionControl }
|
|
90
|
+
: {}),
|
|
91
|
+
...(deps.runExecutionControl
|
|
92
|
+
? { runExecutionControl: deps.runExecutionControl }
|
|
93
|
+
: {}),
|
|
83
94
|
reviewer: new LlmReviewer(makeSubagentClient(reviewerLlm)),
|
|
84
95
|
finalizer: new LlmFinalizer(makeSubagentClient(finalizerLlm), {
|
|
85
96
|
budget: 12000,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller-factory.js","sourceRoot":"","sources":["../../src/factories/controller-factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"controller-factory.js","sourceRoot":"","sources":["../../src/factories/controller-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PACKAGE_VERSION = "20.
|
|
1
|
+
export declare const PACKAGE_VERSION = "20.6.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { CallOptions, IAuxiliaryMcpTools, IToolsRagHandle, LlmTool, McpError, McpTool, McpToolResult, Result } from '@mcp-abap-adt/llm-agent';
|
|
2
|
+
type CallMcp = (name: string, args: unknown, signal?: AbortSignal) => Promise<string>;
|
|
3
|
+
type AuxCallTool = (name: string, args: Record<string, unknown>, options?: CallOptions) => Promise<Result<McpToolResult, McpError>>;
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the auxiliary tool defs ONCE at build. `!ok` is a real bug in the
|
|
6
|
+
* in-process provider — fail loud, never silently skip the aux tools.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveAuxDefs(aux: IAuxiliaryMcpTools): Promise<McpTool[]>;
|
|
9
|
+
/**
|
|
10
|
+
* Fail-loud collision gate (sync, over the already-resolved defs). Aux-first
|
|
11
|
+
* dispatch would otherwise silently shadow a same-named domain tool. Uses the
|
|
12
|
+
* sync `toolsRag.lookup` (non-optional on IPipelineContext; EMPTY_TOOLS_RAG
|
|
13
|
+
* returns undefined for every name when there is no domain catalog).
|
|
14
|
+
*/
|
|
15
|
+
export declare function assertNoAuxCollision(auxDefs: McpTool[], toolsRag: IToolsRagHandle): void;
|
|
16
|
+
type SelectTools = (query: string, k?: number, options?: CallOptions) => Promise<readonly LlmTool[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Wrap the pipeline's `selectTools` so the resolved auxiliary defs are ALWAYS
|
|
19
|
+
* merged into every selection result (deduped by name; aux appended). Auxiliary
|
|
20
|
+
* tools are a small fixed utility set that should always be in scope — not
|
|
21
|
+
* semantically ranked — which also makes them available MCP-less (domain
|
|
22
|
+
* `selectTools` → [] → result is just the aux defs). `McpTool` is structurally
|
|
23
|
+
* an `LlmTool`, so aux defs are assignable into the `LlmTool[]` result.
|
|
24
|
+
*/
|
|
25
|
+
export declare function composeAuxiliarySelect(auxDefs: McpTool[], selectTools: SelectTools): SelectTools;
|
|
26
|
+
/**
|
|
27
|
+
* Wrap the domain `callMcp` bridge so auxiliary tools are dispatched FIRST
|
|
28
|
+
* (aux-first; collisions were rejected at build). Auxiliary results are mapped
|
|
29
|
+
* to the string bridge contract: ok → content text / JSON; !ok → error.message
|
|
30
|
+
* (tool-level, the domain classifier / fail-loud is NOT run). An abort rejection
|
|
31
|
+
* from `auxCallTool` propagates unchanged (see the controller's abort handling).
|
|
32
|
+
*/
|
|
33
|
+
export declare function composeAuxiliaryBridge(auxDefs: McpTool[], auxCallTool: AuxCallTool, domainBridge: CallMcp): CallMcp;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=compose-auxiliary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-auxiliary.d.ts","sourceRoot":"","sources":["../../src/mcp/compose-auxiliary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,QAAQ,EACR,OAAO,EACP,aAAa,EACb,MAAM,EACP,MAAM,yBAAyB,CAAC;AAEjC,KAAK,OAAO,GAAG,CACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,KAAK,WAAW,GAAG,CACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,WAAW,KAClB,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE9C;;;GAGG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,OAAO,EAAE,CAAC,CAQpB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAAE,EAClB,QAAQ,EAAE,eAAe,GACxB,IAAI,CASN;AAED,KAAK,WAAW,GAAG,CACjB,KAAK,EAAE,MAAM,EACb,CAAC,CAAC,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,WAAW,KAClB,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;AAEjC;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAAE,EAClB,WAAW,EAAE,WAAW,GACvB,WAAW,CAOb;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAAE,EAClB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,OAAO,GACpB,OAAO,CAiBT"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the auxiliary tool defs ONCE at build. `!ok` is a real bug in the
|
|
3
|
+
* in-process provider — fail loud, never silently skip the aux tools.
|
|
4
|
+
*/
|
|
5
|
+
export async function resolveAuxDefs(aux) {
|
|
6
|
+
const listed = await aux.listTools();
|
|
7
|
+
if (!listed.ok) {
|
|
8
|
+
throw new Error(`auxiliary tools failed to list at build: ${listed.error.message}`);
|
|
9
|
+
}
|
|
10
|
+
return listed.value;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Fail-loud collision gate (sync, over the already-resolved defs). Aux-first
|
|
14
|
+
* dispatch would otherwise silently shadow a same-named domain tool. Uses the
|
|
15
|
+
* sync `toolsRag.lookup` (non-optional on IPipelineContext; EMPTY_TOOLS_RAG
|
|
16
|
+
* returns undefined for every name when there is no domain catalog).
|
|
17
|
+
*/
|
|
18
|
+
export function assertNoAuxCollision(auxDefs, toolsRag) {
|
|
19
|
+
for (const def of auxDefs) {
|
|
20
|
+
if (toolsRag.lookup(def.name) !== undefined) {
|
|
21
|
+
throw new Error(`auxiliary tool '${def.name}' collides with a connected MCP tool — ` +
|
|
22
|
+
'rename the auxiliary tool');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Wrap the pipeline's `selectTools` so the resolved auxiliary defs are ALWAYS
|
|
28
|
+
* merged into every selection result (deduped by name; aux appended). Auxiliary
|
|
29
|
+
* tools are a small fixed utility set that should always be in scope — not
|
|
30
|
+
* semantically ranked — which also makes them available MCP-less (domain
|
|
31
|
+
* `selectTools` → [] → result is just the aux defs). `McpTool` is structurally
|
|
32
|
+
* an `LlmTool`, so aux defs are assignable into the `LlmTool[]` result.
|
|
33
|
+
*/
|
|
34
|
+
export function composeAuxiliarySelect(auxDefs, selectTools) {
|
|
35
|
+
return async (query, k, options) => {
|
|
36
|
+
const domain = await selectTools(query, k, options);
|
|
37
|
+
const domainNames = new Set(domain.map((t) => t.name));
|
|
38
|
+
const extra = auxDefs.filter((d) => !domainNames.has(d.name));
|
|
39
|
+
return [...domain, ...extra];
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Wrap the domain `callMcp` bridge so auxiliary tools are dispatched FIRST
|
|
44
|
+
* (aux-first; collisions were rejected at build). Auxiliary results are mapped
|
|
45
|
+
* to the string bridge contract: ok → content text / JSON; !ok → error.message
|
|
46
|
+
* (tool-level, the domain classifier / fail-loud is NOT run). An abort rejection
|
|
47
|
+
* from `auxCallTool` propagates unchanged (see the controller's abort handling).
|
|
48
|
+
*/
|
|
49
|
+
export function composeAuxiliaryBridge(auxDefs, auxCallTool, domainBridge) {
|
|
50
|
+
const auxNames = new Set(auxDefs.map((d) => d.name));
|
|
51
|
+
return async (name, args, signal) => {
|
|
52
|
+
if (!auxNames.has(name))
|
|
53
|
+
return domainBridge(name, args, signal);
|
|
54
|
+
const safeArgs = args != null && typeof args === 'object' && !Array.isArray(args)
|
|
55
|
+
? args
|
|
56
|
+
: {};
|
|
57
|
+
const result = await auxCallTool(name, safeArgs, signal ? { signal } : undefined);
|
|
58
|
+
if (!result.ok)
|
|
59
|
+
return result.error.message;
|
|
60
|
+
const { content } = result.value;
|
|
61
|
+
return typeof content === 'string' ? content : JSON.stringify(content);
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=compose-auxiliary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-auxiliary.js","sourceRoot":"","sources":["../../src/mcp/compose-auxiliary.ts"],"names":[],"mappings":"AAuBA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAuB;IAEvB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,4CAA4C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CACnE,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAkB,EAClB,QAAyB;IAEzB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,mBAAmB,GAAG,CAAC,IAAI,yCAAyC;gBAClE,2BAA2B,CAC9B,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAQD;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAkB,EAClB,WAAwB;IAExB,OAAO,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAkB,EAClB,WAAwB,EACxB,YAAqB;IAErB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,QAAQ,GACZ,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAC9D,CAAC,CAAE,IAAgC;YACnC,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,IAAI,EACJ,QAAQ,EACR,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAChC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;QACjC,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/pipelines/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/pipelines/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,iBAAiB,EACjB,eAAe,EAGhB,MAAM,yBAAyB,CAAC;AAyBjC,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AAM5E,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,GAC3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,4BAA4B,EAC5B,KAAK,qBAAqB,GAC3B,MAAM,6DAA6D,CAAC;AACrE,OAAO,EACL,KAAK,eAAe,EACpB,kBAAkB,GACnB,MAAM,8CAA8C,CAAC;AACtD,YAAY,EACV,gBAAgB,EAChB,aAAa,GACd,MAAM,oCAAoC,CAAC;AAE5C;;;;;;GAMG;AACH,qBAAa,wBACX,YAAW,eAAe,CAAC,gBAAgB,CAAC;IAE5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAExC,IAAI,SAAe,EACnB,WAAW,GAAE,WAA8B;IAM7C,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IAsDrC,KAAK,CACT,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,gCAAgC,GACpC,OAAO,CAAC,iBAAiB,CAAC;CAsM9B"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
+
import { RagRecallContextStrategy } from '@mcp-abap-adt/llm-agent-libs';
|
|
2
|
+
import { DefaultAuxiliaryMcpTools, makeWaitTool, } from '@mcp-abap-adt/llm-agent-mcp';
|
|
1
3
|
import { ControllerFactory, } from '../factories/controller-factory.js';
|
|
4
|
+
import { assertNoAuxCollision, composeAuxiliaryBridge, composeAuxiliarySelect, resolveAuxDefs, } from '../mcp/compose-auxiliary.js';
|
|
5
|
+
import { DefaultStepExecutionControl } from '../smart-agent/controller/default-step-execution-control.js';
|
|
6
|
+
import { writeArtifact } from '../smart-agent/controller/memorizer.js';
|
|
7
|
+
import { NoopRunExecutionControl } from '../smart-agent/controller/noop-run-execution-control.js';
|
|
8
|
+
import { buildRecallBlock, RECALL_K_MCP, RECALL_MAX_CHARS_MCP, runScopedRecall, } from '../smart-agent/controller/recall.js';
|
|
2
9
|
import { buildMcpBridge } from '../smart-agent/smart-server.js';
|
|
3
10
|
// Re-export the controller building blocks so embedders (no-YAML) can compose
|
|
4
11
|
// the coordinator in code — preferably via the `ControllerFactory`
|
|
@@ -71,13 +78,20 @@ export class ControllerPipelinePlugin {
|
|
|
71
78
|
// silently fall back to DefaultMcpFailureClassifier and a custom policy (e.g. mapping
|
|
72
79
|
// an otherwise-tool-level code to 'unavailable') would be lost for the controller.
|
|
73
80
|
const mcpBridge = buildMcpBridge(mcpClients, ctx.mcpFailureClassifier);
|
|
81
|
+
// Auxiliary/service tools contributed at pipeline creation (default: wait).
|
|
82
|
+
// Consumer overrides the whole provider via ctx.auxiliaryMcpTools.
|
|
83
|
+
const aux = ctx.auxiliaryMcpTools ?? new DefaultAuxiliaryMcpTools([makeWaitTool()]);
|
|
84
|
+
const auxDefs = await resolveAuxDefs(aux); // single build-time listTools()
|
|
85
|
+
assertNoAuxCollision(auxDefs, ctx.toolsRag); // fail-loud on name collision
|
|
86
|
+
const auxCallMcp = composeAuxiliaryBridge(auxDefs, aux.callTool.bind(aux), mcpBridge);
|
|
74
87
|
// INTERNAL tools reach the executor/planner via SEMANTIC selection over the
|
|
75
88
|
// vectorized MCP catalog (toolsRag) — relevant top-K per query, not a full
|
|
76
89
|
// dump. The server vectorizes every MCP `tool:<name>` into toolsRag at
|
|
77
90
|
// startup. When no toolsRag is wired (MCP-less / no embedder) selection
|
|
78
91
|
// yields [] and the loop runs with external tools only.
|
|
79
92
|
const toolsRag = ctx.toolsRag;
|
|
80
|
-
const
|
|
93
|
+
const baseSelectTools = (query, k, options) => (toolsRag ? toolsRag.query(query, k, options) : Promise.resolve([]));
|
|
94
|
+
const selectTools = composeAuxiliarySelect(auxDefs, baseSelectTools);
|
|
81
95
|
// Controller-OWN skills recall hook (B4). The controller pipeline builds its
|
|
82
96
|
// subagent prompts itself (it does NOT use the context-assembler), so it needs
|
|
83
97
|
// its own recall: query the configured controller skill group and format a
|
|
@@ -125,18 +139,70 @@ export class ControllerPipelinePlugin {
|
|
|
125
139
|
return out;
|
|
126
140
|
}
|
|
127
141
|
: undefined;
|
|
142
|
+
// Per-step tool-loop context strategy: RagRecall. The handler calls this
|
|
143
|
+
// factory ONCE PER STEP, passing the per-step run context
|
|
144
|
+
// (`{ rag, runId, meta, stepName }`) — meta/stepName are only known inside
|
|
145
|
+
// runStep. `record` persists the round as an `mcp-result` artifact (the write
|
|
146
|
+
// the handler used to do inline); `recall` runs the run-scoped MCP recall and
|
|
147
|
+
// formats a bounded "Relevant prior context" block, excluding the raw-tail
|
|
148
|
+
// round (which form() re-injects verbatim) by roundId.
|
|
149
|
+
//
|
|
150
|
+
// Run-scoped over-fetch bound (kPrime): a generous derivation from the
|
|
151
|
+
// controller budgets (steps × attempts × tool-calls) mirroring the prior
|
|
152
|
+
// inline `maxSteps * maxAttempts * maxTool`. maxStepAttempts is not on the
|
|
153
|
+
// pipeline budgets here, so `maxRetries + 1` stands in for per-step attempts.
|
|
154
|
+
const b = cfg.budgets;
|
|
155
|
+
const mcpBound = (b.maxSteps ?? 20) * ((b.maxRetries ?? 3) + 1) * (b.maxToolCalls ?? 10);
|
|
156
|
+
const ragRecallFactory = ({ run }) => {
|
|
157
|
+
const { rag, runId, meta, stepName } = run;
|
|
158
|
+
return new RagRecallContextStrategy({
|
|
159
|
+
// Mirror the removed inline mcp-result write. Write `roundId` as its OWN
|
|
160
|
+
// metadata field so recall can exclude the raw-tail round by roundId;
|
|
161
|
+
// `identityKey` stays tool+args (fetch dedup) and is a DIFFERENT key.
|
|
162
|
+
record: (round, options) => writeArtifact(rag, {
|
|
163
|
+
...meta,
|
|
164
|
+
artifactType: 'mcp-result',
|
|
165
|
+
task: stepName,
|
|
166
|
+
runId,
|
|
167
|
+
identityKey: round.meta?.[0]?.identityKey ?? round.roundId,
|
|
168
|
+
roundId: round.roundId,
|
|
169
|
+
// Monotonic per-write ordinal stamped by the handler. isBetterMcp
|
|
170
|
+
// tie-breaks on writeOrdinal FIRST (then createdAt); without it a
|
|
171
|
+
// later same-identityKey fetch cannot supersede a stale earlier one
|
|
172
|
+
// when createdAt ties (all mcp writes in a step share createdAt).
|
|
173
|
+
writeOrdinal: round.ordinal,
|
|
174
|
+
content: round.results
|
|
175
|
+
.map((r) => String(r.content ?? ''))
|
|
176
|
+
.join('\n'),
|
|
177
|
+
}, options),
|
|
178
|
+
recall: async (queryText, excludeRoundIds, options) => {
|
|
179
|
+
const rows = await runScopedRecall(rag, queryText, RECALL_K_MCP, runId, mcpBound, ['mcp-result'], options);
|
|
180
|
+
return (buildRecallBlock(rows.filter((r) => !excludeRoundIds.includes(String(r.metadata?.roundId))), RECALL_MAX_CHARS_MCP) ?? '');
|
|
181
|
+
},
|
|
182
|
+
}, { runId });
|
|
183
|
+
};
|
|
184
|
+
// Honor a CONSUMER-injected tool-loop context strategy on the controller
|
|
185
|
+
// path: `new SmartServer(cfg, { toolLoopContextStrategyFactory })` threads
|
|
186
|
+
// it onto `ctx.toolLoopContextStrategyFactory` (undefined when not injected).
|
|
187
|
+
// When the consumer supplied one it OVERRIDES the controller's RagRecall
|
|
188
|
+
// example default; otherwise RagRecall stands. We never silently drop an
|
|
189
|
+
// injected DI dependency.
|
|
190
|
+
const toolLoopContextStrategyFactory = ctx.toolLoopContextStrategyFactory ?? ragRecallFactory;
|
|
128
191
|
// The factory resolves the three role LLMs via makeRoleLlm, wraps them as
|
|
129
192
|
// subagent clients, validates the embedder requirement, and builds the
|
|
130
193
|
// handler. external-tool routing is decided PER-REQUEST inside the handler
|
|
131
194
|
// from `ctx.externalTools`, so we do NOT wire `isExternalTool` here.
|
|
132
195
|
const deps = {
|
|
133
196
|
makeRoleLlm: (role) => ctx.makeLlm(cfg.subagents[role]),
|
|
134
|
-
callMcp: (name, args) =>
|
|
197
|
+
callMcp: (name, args, signal) => auxCallMcp(name, args, signal),
|
|
135
198
|
backend: ctx.stepperKnowledgeBackend,
|
|
136
199
|
knowledgeRagFor: (sessionId) => ctx.knowledgeRagFor(sessionId),
|
|
137
200
|
embedder: ctx.embedder,
|
|
138
201
|
selectTools,
|
|
139
202
|
...(skillsRecall ? { skillsRecall } : {}),
|
|
203
|
+
toolLoopContextStrategyFactory,
|
|
204
|
+
stepExecutionControl: ctx.stepExecutionControl ?? new DefaultStepExecutionControl(),
|
|
205
|
+
runExecutionControl: ctx.runExecutionControl ?? new NoopRunExecutionControl(),
|
|
140
206
|
};
|
|
141
207
|
const { handler } = await new ControllerFactory().build(cfg, deps, this.plannerKind);
|
|
142
208
|
const builder = await ctx.createAgentBuilder();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/pipelines/controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/pipelines/controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CallOptions, type IEmbedder, type IKnowledgeRagHandle, type IStageHandler, type LlmTool, type LlmUsage, type ModelUsageEntry } from '@mcp-abap-adt/llm-agent';
|
|
1
|
+
import { type CallOptions, type IEmbedder, type IKnowledgeRagHandle, type IRunExecutionControl, type IStageHandler, type IStepExecutionControl, type LlmTool, type LlmUsage, type ModelUsageEntry, type ToolLoopContextStrategyFactory } from '@mcp-abap-adt/llm-agent';
|
|
2
2
|
import { type KnowledgeBackend, type PipelineContext } from '@mcp-abap-adt/llm-agent-libs';
|
|
3
3
|
import type { IFinalizer } from './finalizer.js';
|
|
4
4
|
import type { IReviewer } from './reviewer.js';
|
|
@@ -18,8 +18,10 @@ export interface ControllerHandlerDeps {
|
|
|
18
18
|
/** Required only for distance-based target-state strategies
|
|
19
19
|
* (semantic-distance/auto); unused by consumer-confirm. */
|
|
20
20
|
embedder?: IEmbedder;
|
|
21
|
-
/** Executes an INTERNAL (MCP) tool and returns its textual result.
|
|
22
|
-
|
|
21
|
+
/** Executes an INTERNAL (MCP) tool and returns its textual result. The
|
|
22
|
+
* optional `signal` is the merged per-step budget + caller-cancel signal
|
|
23
|
+
* (Task 5/7); the bridge cancels the in-flight MCP call when it aborts. */
|
|
24
|
+
callMcp: (toolName: string, args: unknown, signal?: AbortSignal) => Promise<string>;
|
|
23
25
|
/**
|
|
24
26
|
* Semantic tool selection over the vectorized MCP catalog (toolsRag): returns
|
|
25
27
|
* the top-K tools relevant to `query`. This is how INTERNAL tools reach the
|
|
@@ -72,6 +74,20 @@ export interface ControllerHandlerDeps {
|
|
|
72
74
|
* makeControllerPlanner(...). Lets a test/consumer supply an IControllerPlanner
|
|
73
75
|
* that emits behaviours the default smart/weak planners do not (e.g. rewind). */
|
|
74
76
|
controllerPlanner?: IControllerPlanner;
|
|
77
|
+
/** Per-step tool-loop context strategy factory (record/form). Called ONCE per
|
|
78
|
+
* step with the per-step run context (`{ rag, runId, meta, stepName }`); the
|
|
79
|
+
* returned strategy owns the executor messages sent each round so the loop never
|
|
80
|
+
* grows a raw transcript. Absent → `LegacyAccumulateContextStrategy` (byte-
|
|
81
|
+
* identical to the historical growing-transcript behaviour). */
|
|
82
|
+
toolLoopContextStrategyFactory?: ToolLoopContextStrategyFactory;
|
|
83
|
+
/** Consumer-swappable per-step execution control (wall-clock time budget +
|
|
84
|
+
* prospective maxToolCalls gate). Absent → `DefaultStepExecutionControl`
|
|
85
|
+
* (time never fires unless `budgets.perStepTimeoutMs` is set, so behaviour is
|
|
86
|
+
* byte-identical to the historical count-only bound). */
|
|
87
|
+
stepExecutionControl?: IStepExecutionControl;
|
|
88
|
+
/** Consumer-swappable run-level execution control. Reserved for the run-budget
|
|
89
|
+
* wiring (a follow-up); not consulted by `runStep` yet. */
|
|
90
|
+
runExecutionControl?: IRunExecutionControl;
|
|
75
91
|
}
|
|
76
92
|
export { renderLiveBoard } from './board.js';
|
|
77
93
|
export { parseNextStep } from './parser.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller-coordinator-handler.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/controller/controller-coordinator-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"controller-coordinator-handler.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/controller/controller-coordinator-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAG1B,KAAK,OAAO,EAEZ,KAAK,QAAQ,EAGb,KAAK,eAAe,EAEpB,KAAK,8BAA8B,EAEpC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,gBAAgB,EAGrB,KAAK,eAAe,EAErB,MAAM,8BAA8B,CAAC;AAQtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAgBjD,OAAO,KAAK,EAAY,SAAS,EAAgB,MAAM,eAAe,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,KAAK,EAEV,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EAIZ,MAAM,YAAY,CAAC;AAcpB,oFAAoF;AACpF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC1C,CAAC;AAMF,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,eAAe,EAAE,CACf,SAAS,EAAE,MAAM,KACd,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACxD;gEAC4D;IAC5D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;gFAE4E;IAC5E,OAAO,EAAE,CACP,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB;;;;;OAKG;IACH,WAAW,EAAE,CACX,KAAK,EAAE,MAAM,EACb,CAAC,CAAC,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,WAAW,KAClB,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;IACjC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/C,MAAM,EAAE,gBAAgB,CAAC;IACzB;+EAC2E;IAC3E,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;iFAE6E;IAC7E,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;+GAC2G;IAC3G,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,oEAAoE;IACpE,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE;;uEAEmE;IACnE,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;sFAEkF;IAClF,iBAAiB,CAAC,EAAE,kBAAkB,CAAC;IACvC;;;;qEAIiE;IACjE,8BAA8B,CAAC,EAAE,8BAA8B,CAAC;IAChE;;;8DAG0D;IAC1D,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C;gEAC4D;IAC5D,mBAAmB,CAAC,EAAE,oBAAoB,CAAC;CAC5C;AAKD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMlD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,4BAA6B,YAAW,aAAa;IACpD,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,qBAAqB;IAElD,OAAO,CACX,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC;IAmpBnB;;;;;;yCAMqC;YACvB,OAAO;YA8oBP,QAAQ;IAatB;;wFAEoF;YACtE,aAAa;YAyBb,QAAQ;IAuItB;+EAC2E;YAC7D,qBAAqB;IAyBnC,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,eAAe;CAexB"}
|