@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.
Files changed (48) hide show
  1. package/dist/factories/controller-factory.d.ts +18 -1
  2. package/dist/factories/controller-factory.d.ts.map +1 -1
  3. package/dist/factories/controller-factory.js +12 -1
  4. package/dist/factories/controller-factory.js.map +1 -1
  5. package/dist/generated/version.d.ts +1 -1
  6. package/dist/generated/version.js +1 -1
  7. package/dist/mcp/compose-auxiliary.d.ts +35 -0
  8. package/dist/mcp/compose-auxiliary.d.ts.map +1 -0
  9. package/dist/mcp/compose-auxiliary.js +64 -0
  10. package/dist/mcp/compose-auxiliary.js.map +1 -0
  11. package/dist/pipelines/controller.d.ts.map +1 -1
  12. package/dist/pipelines/controller.js +68 -2
  13. package/dist/pipelines/controller.js.map +1 -1
  14. package/dist/smart-agent/controller/controller-coordinator-handler.d.ts +19 -3
  15. package/dist/smart-agent/controller/controller-coordinator-handler.d.ts.map +1 -1
  16. package/dist/smart-agent/controller/controller-coordinator-handler.js +516 -361
  17. package/dist/smart-agent/controller/controller-coordinator-handler.js.map +1 -1
  18. package/dist/smart-agent/controller/default-step-execution-control.d.ts +7 -0
  19. package/dist/smart-agent/controller/default-step-execution-control.d.ts.map +1 -0
  20. package/dist/smart-agent/controller/default-step-execution-control.js +36 -0
  21. package/dist/smart-agent/controller/default-step-execution-control.js.map +1 -0
  22. package/dist/smart-agent/controller/noop-run-execution-control.d.ts +6 -0
  23. package/dist/smart-agent/controller/noop-run-execution-control.d.ts.map +1 -0
  24. package/dist/smart-agent/controller/noop-run-execution-control.js +14 -0
  25. package/dist/smart-agent/controller/noop-run-execution-control.js.map +1 -0
  26. package/dist/smart-agent/controller/subagent-client.d.ts +2 -2
  27. package/dist/smart-agent/controller/subagent-client.d.ts.map +1 -1
  28. package/dist/smart-agent/controller/subagent-client.js +2 -2
  29. package/dist/smart-agent/controller/subagent-client.js.map +1 -1
  30. package/dist/smart-agent/controller/types.d.ts +16 -4
  31. package/dist/smart-agent/controller/types.d.ts.map +1 -1
  32. package/dist/smart-agent/controller/types.js.map +1 -1
  33. package/dist/smart-agent/mcp/build-session-mcp-clients.d.ts +44 -0
  34. package/dist/smart-agent/mcp/build-session-mcp-clients.d.ts.map +1 -0
  35. package/dist/smart-agent/mcp/build-session-mcp-clients.js +75 -0
  36. package/dist/smart-agent/mcp/build-session-mcp-clients.js.map +1 -0
  37. package/dist/smart-agent/resolve-config-sections.d.ts.map +1 -1
  38. package/dist/smart-agent/resolve-config-sections.js +3 -0
  39. package/dist/smart-agent/resolve-config-sections.js.map +1 -1
  40. package/dist/smart-agent/session-lifecycle/index.d.ts +16 -0
  41. package/dist/smart-agent/session-lifecycle/index.d.ts.map +1 -1
  42. package/dist/smart-agent/session-lifecycle/index.js +17 -2
  43. package/dist/smart-agent/session-lifecycle/index.js.map +1 -1
  44. package/dist/smart-agent/smart-server.d.ts +22 -1
  45. package/dist/smart-agent/smart-server.d.ts.map +1 -1
  46. package/dist/smart-agent/smart-server.js +71 -6
  47. package/dist/smart-agent/smart-server.js.map +1 -1
  48. 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,EACxB,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;CACzE;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;CA0E7B"}
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":"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"}
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.4.0";
1
+ export declare const PACKAGE_VERSION = "20.6.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by scripts/generate-version.js — do not edit
2
- export const PACKAGE_VERSION = '20.4.0';
2
+ export const PACKAGE_VERSION = '20.6.0';
3
3
  //# sourceMappingURL=version.js.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,EAEV,iBAAiB,EACjB,eAAe,EAChB,MAAM,yBAAyB,CAAC;AAKjC,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;CAgG9B"}
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 selectTools = (query, k, options) => toolsRag ? toolsRag.query(query, k, options) : Promise.resolve([]);
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) => mcpBridge(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":"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"}
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
- callMcp: (toolName: string, args: unknown) => Promise<string>;
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":"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"}
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"}