@mcp-abap-adt/llm-agent-server-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 (179) hide show
  1. package/dist/builders/controller-skill-pipeline-builder.d.ts +57 -0
  2. package/dist/builders/controller-skill-pipeline-builder.d.ts.map +1 -0
  3. package/dist/builders/controller-skill-pipeline-builder.js +175 -0
  4. package/dist/builders/controller-skill-pipeline-builder.js.map +1 -0
  5. package/dist/factories/controller-factory.d.ts +2 -2
  6. package/dist/factories/controller-factory.d.ts.map +1 -1
  7. package/dist/factories/controller-factory.js +2 -1
  8. package/dist/factories/controller-factory.js.map +1 -1
  9. package/dist/generated/version.d.ts +1 -1
  10. package/dist/generated/version.js +1 -1
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/pipelines/controller.d.ts +4 -2
  16. package/dist/pipelines/controller.d.ts.map +1 -1
  17. package/dist/pipelines/controller.js +33 -8
  18. package/dist/pipelines/controller.js.map +1 -1
  19. package/dist/pipelines/coordinator-resolvers.d.ts +68 -0
  20. package/dist/pipelines/coordinator-resolvers.d.ts.map +1 -0
  21. package/dist/pipelines/coordinator-resolvers.js +97 -0
  22. package/dist/pipelines/coordinator-resolvers.js.map +1 -0
  23. package/dist/pipelines/dag.d.ts +2 -2
  24. package/dist/pipelines/dag.js +2 -2
  25. package/dist/pipelines/parsers.d.ts +1 -1
  26. package/dist/pipelines/parsers.d.ts.map +1 -1
  27. package/dist/pipelines/parsers.js +5 -4
  28. package/dist/pipelines/parsers.js.map +1 -1
  29. package/dist/pipelines/register-skill-sources.d.ts.map +1 -1
  30. package/dist/pipelines/register-skill-sources.js +5 -0
  31. package/dist/pipelines/register-skill-sources.js.map +1 -1
  32. package/dist/pipelines/stepper.d.ts +2 -2
  33. package/dist/pipelines/stepper.js +2 -2
  34. package/dist/smart-agent/build-stepper-root.d.ts +3 -2
  35. package/dist/smart-agent/build-stepper-root.d.ts.map +1 -1
  36. package/dist/smart-agent/build-stepper-root.js +2 -1
  37. package/dist/smart-agent/build-stepper-root.js.map +1 -1
  38. package/dist/smart-agent/config-reload-watcher.d.ts +30 -0
  39. package/dist/smart-agent/config-reload-watcher.d.ts.map +1 -0
  40. package/dist/smart-agent/config-reload-watcher.js +101 -0
  41. package/dist/smart-agent/config-reload-watcher.js.map +1 -0
  42. package/dist/smart-agent/config-validator.d.ts +21 -0
  43. package/dist/smart-agent/config-validator.d.ts.map +1 -0
  44. package/dist/smart-agent/config-validator.js +196 -0
  45. package/dist/smart-agent/config-validator.js.map +1 -0
  46. package/dist/smart-agent/config.d.ts +16 -254
  47. package/dist/smart-agent/config.d.ts.map +1 -1
  48. package/dist/smart-agent/config.js +17 -904
  49. package/dist/smart-agent/config.js.map +1 -1
  50. package/dist/smart-agent/controller/board.d.ts +6 -3
  51. package/dist/smart-agent/controller/board.d.ts.map +1 -1
  52. package/dist/smart-agent/controller/board.js +21 -0
  53. package/dist/smart-agent/controller/board.js.map +1 -1
  54. package/dist/smart-agent/controller/controller-coordinator-handler.d.ts +16 -50
  55. package/dist/smart-agent/controller/controller-coordinator-handler.d.ts.map +1 -1
  56. package/dist/smart-agent/controller/controller-coordinator-handler.js +83 -371
  57. package/dist/smart-agent/controller/controller-coordinator-handler.js.map +1 -1
  58. package/dist/smart-agent/controller/finalizer.d.ts +5 -0
  59. package/dist/smart-agent/controller/finalizer.d.ts.map +1 -1
  60. package/dist/smart-agent/controller/finalizer.js +12 -5
  61. package/dist/smart-agent/controller/finalizer.js.map +1 -1
  62. package/dist/smart-agent/controller/parser.d.ts +11 -0
  63. package/dist/smart-agent/controller/parser.d.ts.map +1 -0
  64. package/dist/smart-agent/controller/parser.js +77 -0
  65. package/dist/smart-agent/controller/parser.js.map +1 -0
  66. package/dist/smart-agent/controller/planner.d.ts +20 -16
  67. package/dist/smart-agent/controller/planner.d.ts.map +1 -1
  68. package/dist/smart-agent/controller/planner.js +58 -64
  69. package/dist/smart-agent/controller/planner.js.map +1 -1
  70. package/dist/smart-agent/controller/recall.d.ts +48 -0
  71. package/dist/smart-agent/controller/recall.d.ts.map +1 -0
  72. package/dist/smart-agent/controller/recall.js +196 -0
  73. package/dist/smart-agent/controller/recall.js.map +1 -0
  74. package/dist/smart-agent/controller/reviewer.d.ts.map +1 -1
  75. package/dist/smart-agent/controller/reviewer.js +1 -1
  76. package/dist/smart-agent/controller/reviewer.js.map +1 -1
  77. package/dist/smart-agent/controller/types.d.ts +8 -9
  78. package/dist/smart-agent/controller/types.d.ts.map +1 -1
  79. package/dist/smart-agent/controller/usage-logging.d.ts +16 -0
  80. package/dist/smart-agent/controller/usage-logging.d.ts.map +1 -0
  81. package/dist/smart-agent/controller/usage-logging.js +39 -0
  82. package/dist/smart-agent/controller/usage-logging.js.map +1 -0
  83. package/dist/smart-agent/http/adapter-route-handler.d.ts +13 -0
  84. package/dist/smart-agent/http/adapter-route-handler.d.ts.map +1 -0
  85. package/dist/smart-agent/http/adapter-route-handler.js +76 -0
  86. package/dist/smart-agent/http/adapter-route-handler.js.map +1 -0
  87. package/dist/smart-agent/http/chat-route-handler.d.ts +15 -0
  88. package/dist/smart-agent/http/chat-route-handler.d.ts.map +1 -0
  89. package/dist/smart-agent/http/chat-route-handler.js +327 -0
  90. package/dist/smart-agent/http/chat-route-handler.js.map +1 -0
  91. package/dist/smart-agent/http/config-route-handler.d.ts +21 -0
  92. package/dist/smart-agent/http/config-route-handler.d.ts.map +1 -0
  93. package/dist/smart-agent/http/config-route-handler.js +149 -0
  94. package/dist/smart-agent/http/config-route-handler.js.map +1 -0
  95. package/dist/smart-agent/http/health-route-handler.d.ts +12 -0
  96. package/dist/smart-agent/http/health-route-handler.d.ts.map +1 -0
  97. package/dist/smart-agent/http/health-route-handler.js +19 -0
  98. package/dist/smart-agent/http/health-route-handler.js.map +1 -0
  99. package/dist/smart-agent/http/models-route-handler.d.ts +17 -0
  100. package/dist/smart-agent/http/models-route-handler.d.ts.map +1 -0
  101. package/dist/smart-agent/http/models-route-handler.js +65 -0
  102. package/dist/smart-agent/http/models-route-handler.js.map +1 -0
  103. package/dist/smart-agent/http/response-helpers.d.ts +31 -0
  104. package/dist/smart-agent/http/response-helpers.d.ts.map +1 -0
  105. package/dist/smart-agent/http/response-helpers.js +59 -0
  106. package/dist/smart-agent/http/response-helpers.js.map +1 -0
  107. package/dist/smart-agent/http/route-table.d.ts +44 -0
  108. package/dist/smart-agent/http/route-table.d.ts.map +1 -0
  109. package/dist/smart-agent/http/route-table.js +35 -0
  110. package/dist/smart-agent/http/route-table.js.map +1 -0
  111. package/dist/smart-agent/http/session-cookie.d.ts +10 -0
  112. package/dist/smart-agent/http/session-cookie.d.ts.map +1 -0
  113. package/dist/smart-agent/http/session-cookie.js +16 -0
  114. package/dist/smart-agent/http/session-cookie.js.map +1 -0
  115. package/dist/smart-agent/http/sessions-route-handler.d.ts +8 -0
  116. package/dist/smart-agent/http/sessions-route-handler.d.ts.map +1 -0
  117. package/dist/smart-agent/http/sessions-route-handler.js +54 -0
  118. package/dist/smart-agent/http/sessions-route-handler.js.map +1 -0
  119. package/dist/smart-agent/http/usage-route-handler.d.ts +12 -0
  120. package/dist/smart-agent/http/usage-route-handler.d.ts.map +1 -0
  121. package/dist/smart-agent/http/usage-route-handler.js +28 -0
  122. package/dist/smart-agent/http/usage-route-handler.js.map +1 -0
  123. package/dist/smart-agent/knowledge/make-knowledge-backend.d.ts +13 -0
  124. package/dist/smart-agent/knowledge/make-knowledge-backend.d.ts.map +1 -0
  125. package/dist/smart-agent/knowledge/make-knowledge-backend.js +18 -0
  126. package/dist/smart-agent/knowledge/make-knowledge-backend.js.map +1 -0
  127. package/dist/smart-agent/llm/role-llm-resolver.d.ts +30 -0
  128. package/dist/smart-agent/llm/role-llm-resolver.d.ts.map +1 -0
  129. package/dist/smart-agent/llm/role-llm-resolver.js +44 -0
  130. package/dist/smart-agent/llm/role-llm-resolver.js.map +1 -0
  131. package/dist/smart-agent/llm-config-map.d.ts +38 -0
  132. package/dist/smart-agent/llm-config-map.d.ts.map +1 -0
  133. package/dist/smart-agent/llm-config-map.js +75 -0
  134. package/dist/smart-agent/llm-config-map.js.map +1 -0
  135. package/dist/smart-agent/mcp-readiness-monitor.d.ts +38 -0
  136. package/dist/smart-agent/mcp-readiness-monitor.d.ts.map +1 -0
  137. package/dist/smart-agent/mcp-readiness-monitor.js +81 -0
  138. package/dist/smart-agent/mcp-readiness-monitor.js.map +1 -0
  139. package/dist/smart-agent/mcp-readiness-registry.d.ts +37 -0
  140. package/dist/smart-agent/mcp-readiness-registry.d.ts.map +1 -0
  141. package/dist/smart-agent/mcp-readiness-registry.js +55 -0
  142. package/dist/smart-agent/mcp-readiness-registry.js.map +1 -0
  143. package/dist/smart-agent/resolve-config-sections.d.ts +15 -0
  144. package/dist/smart-agent/resolve-config-sections.d.ts.map +1 -0
  145. package/dist/smart-agent/resolve-config-sections.js +212 -0
  146. package/dist/smart-agent/resolve-config-sections.js.map +1 -0
  147. package/dist/smart-agent/session-lifecycle/index.d.ts +117 -0
  148. package/dist/smart-agent/session-lifecycle/index.d.ts.map +1 -0
  149. package/dist/smart-agent/session-lifecycle/index.js +152 -0
  150. package/dist/smart-agent/session-lifecycle/index.js.map +1 -0
  151. package/dist/smart-agent/skill-plugins-config.d.ts +9 -1
  152. package/dist/smart-agent/skill-plugins-config.d.ts.map +1 -1
  153. package/dist/smart-agent/skill-plugins-config.js +27 -1
  154. package/dist/smart-agent/skill-plugins-config.js.map +1 -1
  155. package/dist/smart-agent/skill-plugins-host-factory.d.ts +14 -2
  156. package/dist/smart-agent/skill-plugins-host-factory.d.ts.map +1 -1
  157. package/dist/smart-agent/skill-plugins-host-factory.js +16 -4
  158. package/dist/smart-agent/skill-plugins-host-factory.js.map +1 -1
  159. package/dist/smart-agent/smart-server.d.ts +151 -222
  160. package/dist/smart-agent/smart-server.d.ts.map +1 -1
  161. package/dist/smart-agent/smart-server.js +529 -1385
  162. package/dist/smart-agent/smart-server.js.map +1 -1
  163. package/dist/smart-agent/stepper-config.d.ts +138 -0
  164. package/dist/smart-agent/stepper-config.d.ts.map +1 -0
  165. package/dist/smart-agent/stepper-config.js +216 -0
  166. package/dist/smart-agent/stepper-config.js.map +1 -0
  167. package/dist/smart-agent/tools-rag-handle.d.ts +10 -0
  168. package/dist/smart-agent/tools-rag-handle.d.ts.map +1 -0
  169. package/dist/smart-agent/tools-rag-handle.js +76 -0
  170. package/dist/smart-agent/tools-rag-handle.js.map +1 -0
  171. package/dist/smart-agent/workers/worker-registry.d.ts +159 -0
  172. package/dist/smart-agent/workers/worker-registry.d.ts.map +1 -0
  173. package/dist/smart-agent/workers/worker-registry.js +203 -0
  174. package/dist/smart-agent/workers/worker-registry.js.map +1 -0
  175. package/dist/smart-agent/yaml-loader.d.ts +7 -0
  176. package/dist/smart-agent/yaml-loader.d.ts.map +1 -0
  177. package/dist/smart-agent/yaml-loader.js +146 -0
  178. package/dist/smart-agent/yaml-loader.js.map +1 -0
  179. package/package.json +7 -7
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Stepper coordinator configuration: types, constants, and parser.
3
+ * Extracted from config.ts (R6) — byte-for-byte move.
4
+ */
5
+ const MODES = new Set([
6
+ 'cyclic-react',
7
+ 'planned-react',
8
+ 'deep-stepper',
9
+ ]);
10
+ /**
11
+ * Preset expansion: each `mode` maps to a default `flow` composition.
12
+ * An explicit `coordinator.flow` block overrides these per-component.
13
+ * `deep-stepper` = llm planner + RECURSIVE executor (demand-driven recursion),
14
+ * relying on the Evaluator as terminator (enforced below).
15
+ */
16
+ const MODE_FLOW_PRESET = {
17
+ 'cyclic-react': { planner: 'none', executor: 'cyclic-react' },
18
+ 'planned-react': { planner: 'llm', executor: 'cyclic-react' },
19
+ 'deep-stepper': { planner: 'llm', executor: 'recursive' },
20
+ };
21
+ /** Parse declarative `flow.plan` nodes (for the static planner). */
22
+ function parseFlowPlan(raw) {
23
+ if (!Array.isArray(raw))
24
+ return undefined;
25
+ const nodes = raw
26
+ .filter((n) => !!n && typeof n.goal === 'string')
27
+ .map((n, i) => ({
28
+ id: typeof n.id === 'string' && n.id ? n.id : `n${i}`,
29
+ goal: n.goal,
30
+ ...(Array.isArray(n.dependsOn)
31
+ ? {
32
+ dependsOn: n.dependsOn.filter((d) => typeof d === 'string'),
33
+ }
34
+ : {}),
35
+ ...(typeof n.agent === 'string' ? { agent: n.agent } : {}),
36
+ }));
37
+ return nodes.length > 0 ? nodes : undefined;
38
+ }
39
+ /**
40
+ * Parse a (possibly nested) `flow` block into a full StepperCompositionSpec,
41
+ * inheriting bounds from the root. Mutually recursive with
42
+ * parseCompositionNodes (function declarations are hoisted).
43
+ */
44
+ function parseNestedFlowSpec(flowCfg, bounds) {
45
+ const plannerType = flowCfg?.planner?.type ?? 'llm';
46
+ if (!['none', 'llm', 'static'].includes(plannerType))
47
+ throw new Error(`flow.planner.type must be none|llm|static`);
48
+ const granularity = flowCfg?.planner?.granularity ?? 'shallow';
49
+ if (!['shallow', 'detailed'].includes(granularity))
50
+ throw new Error(`flow.planner.granularity must be shallow|detailed`);
51
+ const executor = flowCfg?.executor?.type ?? 'cyclic-react';
52
+ if (!['simple', 'cyclic-react', 'recursive'].includes(executor))
53
+ throw new Error(`flow.executor.type must be simple|cyclic-react|recursive`);
54
+ const plannerSystemPrompt = parseSystemPromptOverride(flowCfg?.planner?.systemPrompt, 'flow.planner.systemPrompt');
55
+ const executorSystemPrompt = parseSystemPromptOverride(flowCfg?.executor?.systemPrompt, 'flow.executor.systemPrompt');
56
+ const plan = parseFlowPlan(flowCfg?.plan);
57
+ const nodes = parseCompositionNodes(flowCfg?.nodes, bounds);
58
+ return {
59
+ // Declared nodes ARE the plan ⇒ this level is static (keep the spec honest:
60
+ // buildFromComposition routes a node-bearing level to a StaticPlanner).
61
+ planner: (nodes ? 'static' : plannerType),
62
+ granularity: granularity,
63
+ ...(plan ? { plan } : {}),
64
+ ...(nodes ? { nodes } : {}),
65
+ executor: executor,
66
+ finalizer: 'llm',
67
+ ...(plannerSystemPrompt ? { plannerSystemPrompt } : {}),
68
+ ...(executorSystemPrompt ? { executorSystemPrompt } : {}),
69
+ ...bounds,
70
+ };
71
+ }
72
+ /** Validate an optional system-prompt override: must be a non-empty string. */
73
+ function parseSystemPromptOverride(raw, label) {
74
+ if (raw === undefined || raw === null)
75
+ return undefined;
76
+ if (typeof raw !== 'string' || raw.trim() === '')
77
+ throw new Error(`coordinator.${label} must be a non-empty string`);
78
+ return raw;
79
+ }
80
+ /** Parse composition nodes; a node with a nested `flow` recurses into a sub-spec. */
81
+ function parseCompositionNodes(raw, bounds) {
82
+ if (!Array.isArray(raw))
83
+ return undefined;
84
+ const nodes = raw
85
+ .filter((n) => !!n && typeof n.goal === 'string')
86
+ .map((n, i) => ({
87
+ id: typeof n.id === 'string' && n.id ? n.id : `n${i}`,
88
+ goal: n.goal,
89
+ ...(Array.isArray(n.dependsOn)
90
+ ? {
91
+ dependsOn: n.dependsOn.filter((d) => typeof d === 'string'),
92
+ }
93
+ : {}),
94
+ ...(n.flow ? { flow: parseNestedFlowSpec(n.flow, bounds) } : {}),
95
+ }));
96
+ return nodes.length > 0 ? nodes : undefined;
97
+ }
98
+ /**
99
+ * Parse stepper coordinator configuration from a raw config object.
100
+ *
101
+ * Supports:
102
+ * - `mode` (string) — default 'planned-react'; one of cyclic-react | planned-react
103
+ * - `stepper.maxParallelSteps` (number) — default 4
104
+ * - `stepper.maxDepth` (number) — default 4
105
+ * - `stepper.tokenBudget` (number) — default 1,000,000
106
+ * - `stepper.reviewer.atDepths` (number[] | 'all') — default [0,1]; 'all' means accept any depth
107
+ */
108
+ export function parseStepperCoordinatorConfig(coord) {
109
+ const mode = coord.mode ?? 'planned-react';
110
+ if (!MODES.has(mode))
111
+ throw new Error(`unknown coordinator.mode '${String(coord.mode)}'`);
112
+ // Tool permissioning is the MCP SERVER's responsibility — whatever it exposes
113
+ // via tools/list is allowed. The agent does not classify tools (read-only vs
114
+ // mutating); there is no agent-side gate. The consumer wires the agent to a
115
+ // server that exposes only the permitted tools (e.g. a read-only MCP proxy).
116
+ const stepper = coord.stepper ?? {};
117
+ const reviewerCfg = stepper.reviewer ?? {};
118
+ const atDepths = reviewerCfg.atDepths ?? [0, 1];
119
+ const reviewerAtDepths = atDepths === 'all'
120
+ ? { has: () => true }
121
+ : (() => {
122
+ const s = new Set(atDepths);
123
+ return { has: (d) => s.has(d) };
124
+ })();
125
+ const knowledgeSeed = Array.isArray(coord.knowledgeSeed)
126
+ ? coord.knowledgeSeed
127
+ .filter((e) => e && typeof e.content === 'string' && e.content.trim() !== '')
128
+ .map((e) => ({
129
+ content: e.content,
130
+ artifactType: typeof e.artifactType === 'string' && e.artifactType
131
+ ? e.artifactType
132
+ : 'guidance',
133
+ }))
134
+ : [];
135
+ // Resolve the program flow: explicit `coordinator.flow` overrides the
136
+ // mode-derived preset per component. `mode` thus becomes a preset alias.
137
+ const preset = MODE_FLOW_PRESET[mode];
138
+ const flowCfg = coord.flow;
139
+ const plannerType = flowCfg?.planner?.type ?? preset.planner;
140
+ if (!['none', 'llm', 'static'].includes(plannerType))
141
+ throw new Error(`coordinator.flow.planner.type must be none|llm|static`);
142
+ const granularity = flowCfg?.planner?.granularity ?? 'shallow';
143
+ if (!['shallow', 'detailed'].includes(granularity))
144
+ throw new Error(`coordinator.flow.planner.granularity must be shallow|detailed`);
145
+ const executorType = flowCfg?.executor?.type ?? preset.executor;
146
+ if (!['simple', 'cyclic-react', 'recursive'].includes(executorType))
147
+ throw new Error(`coordinator.flow.executor.type must be simple|cyclic-react|recursive`);
148
+ const finalizerType = flowCfg?.finalizer?.type ?? 'llm';
149
+ if (finalizerType !== 'llm')
150
+ throw new Error(`coordinator.flow.finalizer.type 'passthrough' is not yet implemented (use 'llm')`);
151
+ const plannerSystemPrompt = parseSystemPromptOverride(flowCfg?.planner?.systemPrompt, 'flow.planner.systemPrompt');
152
+ const executorSystemPrompt = parseSystemPromptOverride(flowCfg?.executor?.systemPrompt, 'flow.executor.systemPrompt');
153
+ // 18.1 Evaluator: ON by default at all depths (per design). Disable via
154
+ // `flow.evaluator.enabled: false`; narrow via `flow.evaluator.atDepths`.
155
+ const evaluatorEnabled = flowCfg?.evaluator?.enabled !== false;
156
+ // RUNAWAY GUARD: demand-driven recursion (executor:recursive / deep-stepper)
157
+ // terminates via the Evaluator (executable → leaf, needs-work → recurse).
158
+ // Without it recursion has no termination judge — that is exactly the 18.0
159
+ // runaway (141 spawns). So recursion REQUIRES the Evaluator enabled.
160
+ if (executorType === 'recursive' && !evaluatorEnabled)
161
+ throw new Error('coordinator.flow.executor.type "recursive" (deep-stepper) requires the Evaluator ' +
162
+ '(it is the recursion terminator) — do not set coordinator.flow.evaluator.enabled: false');
163
+ const evalAtDepths = flowCfg?.evaluator?.atDepths ?? 'all';
164
+ const evaluatorAtDepths = evalAtDepths === 'all'
165
+ ? { has: () => true }
166
+ : (() => {
167
+ const s = new Set(evalAtDepths);
168
+ return { has: (d) => s.has(d) };
169
+ })();
170
+ const evaluatorSystemPrompt = parseSystemPromptOverride(flowCfg?.evaluator?.systemPrompt, 'flow.evaluator.systemPrompt');
171
+ const plan = parseFlowPlan(flowCfg?.plan);
172
+ const maxParallelSteps = Number(stepper.maxParallelSteps ?? 4);
173
+ const maxDepth = Number(stepper.maxDepth ?? 4);
174
+ const tokenBudget = Number(stepper.tokenBudget ?? 1_000_000);
175
+ const formalizeTask = coord.formalizeTask === true;
176
+ // Nested composition nodes inherit the root bounds (a sub-cycle uses the same
177
+ // parallelism / depth / budget / safety unless the runtime threads otherwise).
178
+ const bounds = {
179
+ reviewerAtDepths,
180
+ evaluatorEnabled,
181
+ evaluatorAtDepths,
182
+ ...(evaluatorSystemPrompt ? { evaluatorSystemPrompt } : {}),
183
+ maxParallelSteps,
184
+ maxDepth,
185
+ tokenBudget,
186
+ formalizeTask,
187
+ };
188
+ const nodes = parseCompositionNodes(flowCfg?.nodes, bounds);
189
+ // Static planner needs an explicit plan OR declared nodes (nodes ARE the plan).
190
+ if (plannerType === 'static' && !plan && !nodes)
191
+ throw new Error(`coordinator.flow.planner.type 'static' requires coordinator.flow.plan or coordinator.flow.nodes`);
192
+ return {
193
+ mode,
194
+ reviewerAtDepths,
195
+ maxParallelSteps,
196
+ maxDepth,
197
+ tokenBudget,
198
+ knowledgeSeed,
199
+ formalizeTask,
200
+ flow: {
201
+ // Declared root nodes ARE the plan ⇒ static at the root (honest spec).
202
+ planner: (nodes ? 'static' : plannerType),
203
+ granularity: granularity,
204
+ executor: executorType,
205
+ finalizer: 'llm',
206
+ ...(plannerSystemPrompt ? { plannerSystemPrompt } : {}),
207
+ ...(executorSystemPrompt ? { executorSystemPrompt } : {}),
208
+ evaluatorEnabled,
209
+ evaluatorAtDepths,
210
+ ...(evaluatorSystemPrompt ? { evaluatorSystemPrompt } : {}),
211
+ ...(plan ? { plan } : {}),
212
+ ...(nodes ? { nodes } : {}),
213
+ },
214
+ };
215
+ }
216
+ //# sourceMappingURL=stepper-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stepper-config.js","sourceRoot":"","sources":["../../src/smart-agent/stepper-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type IEmbedder, type IMcpClient, type IRag, type IToolsRagHandle } from '@mcp-abap-adt/llm-agent';
2
+ /**
3
+ * Build a real IToolsRagHandle over the tools RAG store + MCP catalog,
4
+ * dispatching over the ALREADY-RESOLVED `clients`. Eagerly populates the
5
+ * catalog so the SYNC `lookup(name)` contract returns a schema before any
6
+ * `query()` runs; a catalog-load failure is swallowed (logged) so startup
7
+ * never crashes. Extracted verbatim from SmartServer.buildToolsRagHandle.
8
+ */
9
+ export declare function makeToolsRagHandle(clients: IMcpClient[], toolsRag: IRag | undefined, resolvedEmbedder: IEmbedder | undefined, log?: (event: Record<string, unknown>) => void): Promise<IToolsRagHandle>;
10
+ //# sourceMappingURL=tools-rag-handle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-rag-handle.d.ts","sourceRoot":"","sources":["../../src/smart-agent/tools-rag-handle.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,IAAI,EACT,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,UAAU,EAAE,EACrB,QAAQ,EAAE,IAAI,GAAG,SAAS,EAC1B,gBAAgB,EAAE,SAAS,GAAG,SAAS,EACvC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAC7C,OAAO,CAAC,eAAe,CAAC,CAiE1B"}
@@ -0,0 +1,76 @@
1
+ import { QueryEmbedding, } from '@mcp-abap-adt/llm-agent';
2
+ /**
3
+ * Build a real IToolsRagHandle over the tools RAG store + MCP catalog,
4
+ * dispatching over the ALREADY-RESOLVED `clients`. Eagerly populates the
5
+ * catalog so the SYNC `lookup(name)` contract returns a schema before any
6
+ * `query()` runs; a catalog-load failure is swallowed (logged) so startup
7
+ * never crashes. Extracted verbatim from SmartServer.buildToolsRagHandle.
8
+ */
9
+ export async function makeToolsRagHandle(clients, toolsRag, resolvedEmbedder, log) {
10
+ const stepperMcpClients = clients ?? [];
11
+ let catalogCache;
12
+ const ensureCatalog = async () => {
13
+ if (catalogCache)
14
+ return catalogCache;
15
+ const catalog = new Map();
16
+ await Promise.allSettled(stepperMcpClients.map(async (client) => {
17
+ const result = await client.listTools();
18
+ if (result.ok) {
19
+ for (const t of result.value) {
20
+ if (!catalog.has(t.name))
21
+ catalog.set(t.name, t);
22
+ }
23
+ }
24
+ }));
25
+ catalogCache = catalog;
26
+ return catalog;
27
+ };
28
+ const handle = {
29
+ async query(text, k, options) {
30
+ const limit = k ?? 20;
31
+ const catalog = await ensureCatalog();
32
+ if (toolsRag && resolvedEmbedder) {
33
+ // Pass options (requestLogger + trace) so the wrapped embedder logs
34
+ // this query-embedding against the request.
35
+ const embedding = new QueryEmbedding(text, resolvedEmbedder, options);
36
+ const ragResult = await toolsRag.query(embedding, limit);
37
+ if (ragResult.ok) {
38
+ const hits = [];
39
+ for (const r of ragResult.value) {
40
+ const id = r.metadata.id;
41
+ if (id?.startsWith('tool:')) {
42
+ const name = id.slice(5).replace(/:.*$/, '');
43
+ const tool = catalog.get(name);
44
+ if (tool)
45
+ hits.push(tool);
46
+ }
47
+ }
48
+ if (hits.length > 0)
49
+ return hits;
50
+ }
51
+ }
52
+ return [...catalog.values()].slice(0, limit);
53
+ },
54
+ lookup(name) {
55
+ return catalogCache?.get(name);
56
+ },
57
+ };
58
+ // F2: eagerly populate the MCP tool catalog at startup (MCP is connected
59
+ // above), so the SYNC `lookup(name)` contract (IToolsRagHandle.lookup) returns
60
+ // a tool schema BEFORE any `query()` runs. `ensureCatalog` is idempotent —
61
+ // later `query()` calls reuse the cached map. Guard against a catalog-load
62
+ // failure so startup never crashes: on failure `catalogCache` stays unset and
63
+ // `lookup` returns undefined (today's worst case), while the happy path works.
64
+ try {
65
+ await ensureCatalog();
66
+ }
67
+ catch (err) {
68
+ log?.({
69
+ event: 'tools_catalog_eager_load_failed',
70
+ message: 'tools catalog eager-load failed; lookup() returns undefined until first query()',
71
+ error: err instanceof Error ? err.message : String(err),
72
+ });
73
+ }
74
+ return handle;
75
+ }
76
+ //# sourceMappingURL=tools-rag-handle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-rag-handle.js","sourceRoot":"","sources":["../../src/smart-agent/tools-rag-handle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * WorkerRegistry — owns the per-worker LLM/embedder/MCP cache and the
3
+ * per-session worker-registry build loop (relocated from SmartServer R6).
4
+ *
5
+ * The cache map, the three free functions (`WorkerLlmSet`, `resolveWorkerLlmSet`,
6
+ * `drainWorkerCache`, `backfillWorkerCacheFromHandle`), and the `buildWorkerRegistry`
7
+ * loop live here. `buildSubAgent` (200-line, deeply coupled to SmartServer) stays
8
+ * in SmartServer and is called through the injected `buildSubAgent` callback.
9
+ */
10
+ import type { EmbedderFactory, IEmbedder, ILlm, ILogger, IMcpClient, IRag, IRagRegistry, IRequestLogger, SubAgentRegistry } from '@mcp-abap-adt/llm-agent';
11
+ import { type SessionAgentParts, type SmartAgent } from '@mcp-abap-adt/llm-agent-libs';
12
+ /**
13
+ * Immutable-ish per-worker LLM/embedder/MCP cache entry, built ONCE per
14
+ * distinct worker name and reused by reference across every per-session
15
+ * session. In addition to LLM/embedder clients, the worker's OWN declared
16
+ * `toolsRag`/`historyRag`/`mcpClients` (if any) are cached here too — the
17
+ * per-session re-wire MUST prefer the worker's own resources over the
18
+ * parent's injected ones, so we build them once and reuse by reference.
19
+ */
20
+ export interface WorkerLlmSet {
21
+ mainLlm: ILlm;
22
+ classifierLlm: ILlm;
23
+ helperLlm?: ILlm;
24
+ embedder?: IEmbedder;
25
+ /** Worker's OWN tools RAG, built from `subCfg.rag` if declared. */
26
+ toolsRag?: IRag;
27
+ /** Worker's OWN history RAG (mirrors flat-rag block, separate instance). */
28
+ historyRag?: IRag;
29
+ /**
30
+ * Worker's OWN MCP clients (from `subCfg.mcpClients` DI or built once from
31
+ * `subCfg.mcp`). Undefined means the worker did not declare any — caller
32
+ * may fall back to the parent's injected clients.
33
+ */
34
+ mcpClients?: IMcpClient[];
35
+ /**
36
+ * Shutdown function returned by the builder's `SmartAgentHandle.close()`
37
+ * for this worker (Fix #21). Disconnects MCP clients (and any other
38
+ * builder-owned resources) registered to this worker. Captured by
39
+ * `backfillWorkerCacheFromHandle` so `_drainWorkerCache()` can call it on
40
+ * config-reload (PUT /v1/config + hot-reload) and on server shutdown —
41
+ * without this, the per-worker handle is discarded by `buildSubAgent` and
42
+ * lazy rebuilds (Fix #18) accumulate MCP connections with no close path.
43
+ */
44
+ close?: () => Promise<void>;
45
+ }
46
+ /**
47
+ * Drain every cached worker's `close` (if any), then clear the cache map.
48
+ * Used by config-reload (PUT /v1/config + hot-reload — Fix #14/18/21) and by
49
+ * server `close()` to release per-worker MCP connections that were attached
50
+ * to the discarded `SmartAgentHandle`s.
51
+ *
52
+ * IMPORTANT — in-flight caveat: this aborts any request that is mid-call on
53
+ * a worker's MCP client. That is acceptable for an admin action (config
54
+ * reload, server shutdown) where the alternative is leaking connections.
55
+ * Server `close()` calls this AFTER `lifecycle.disposeAll()` so per-session
56
+ * graphs that reference worker clients are torn down first.
57
+ *
58
+ * Uses `Promise.allSettled` so one failing close cannot block the others.
59
+ */
60
+ export declare function drainWorkerCache(cache: Map<string, WorkerLlmSet>): Promise<void>;
61
+ /**
62
+ * Build-once-per-worker resolver. The first time a worker name is seen, it
63
+ * constructs the worker's main/classifier/(optional helper) LLM + embedder and
64
+ * caches the set; every later call (e.g. each per-session worker re-wire)
65
+ * returns the SAME set by reference — never reconstructing LLM clients
66
+ * (locked invariant: LLM/embedder clients are global, built once).
67
+ *
68
+ * Accepts optional `makeToolsRag`/`makeHistoryRag`/`makeMcpClients` factories;
69
+ * when provided, the resolver builds them ONCE on the first miss and caches
70
+ * them on the returned set. Subsequent calls return the cached resources by
71
+ * reference — never re-vectorizing or re-connecting MCP.
72
+ */
73
+ export declare function resolveWorkerLlmSet(input: {
74
+ name: string;
75
+ cache: Map<string, WorkerLlmSet>;
76
+ makeMain: () => Promise<ILlm>;
77
+ makeClassifier: () => Promise<ILlm>;
78
+ makeHelper?: () => Promise<ILlm>;
79
+ makeEmbedder?: () => Promise<IEmbedder>;
80
+ makeToolsRag?: () => Promise<IRag>;
81
+ makeHistoryRag?: () => Promise<IRag>;
82
+ makeMcpClients?: () => Promise<IMcpClient[]>;
83
+ }): Promise<WorkerLlmSet>;
84
+ /**
85
+ * Backfill the per-worker cache entry from the BUILT handle (review HIGH #7).
86
+ *
87
+ * The primary `buildSubAgent` populates `cached.mcpClients`/`toolsRag`/
88
+ * `historyRag` only when the worker config provided DI factories. Workers
89
+ * configured with `subCfg.mcp: ...` (regular config that triggers the
90
+ * builder's own auto-connect) or with `subCfg.rag: ...` whose RAG is owned
91
+ * by the builder leave those slots empty — so per-session re-wires would
92
+ * fall back to the PARENT's MCP/RAG, losing the worker's own connection.
93
+ *
94
+ * After the builder finishes, this helper captures what the handle actually
95
+ * holds and stores it BY REFERENCE on the cache entry. Subsequent per-session
96
+ * re-wires read the same slots and find the worker's own resources.
97
+ *
98
+ * Pure helper, mutates `entry` in place. No-op when the corresponding slot
99
+ * is already populated (DI path wins) or when the handle has no resource for
100
+ * that slot (worker simply didn't declare one).
101
+ */
102
+ export declare function backfillWorkerCacheFromHandle(entry: WorkerLlmSet, handle: {
103
+ mcpClients?: IMcpClient[];
104
+ ragRegistry: {
105
+ get(name: string): IRag | undefined;
106
+ };
107
+ close?: () => Promise<void>;
108
+ }): Promise<void>;
109
+ /**
110
+ * Sub-agent config entry. Avoids importing SmartServerConfig from
111
+ * smart-server.ts to prevent an import cycle; the server passes a typed cast
112
+ * at the call boundary.
113
+ */
114
+ type SubAgentConfigEntry = {
115
+ name: string;
116
+ description?: string;
117
+ config: unknown;
118
+ };
119
+ /**
120
+ * Injected callback signature that mirrors SmartServer.buildSubAgent.
121
+ * `subCfg` is typed `unknown` here to avoid the cycle; the server passes
122
+ * `(name, subCfg as Omit<SmartServerConfig,'log'>, ...)` at construction.
123
+ */
124
+ type BuildSubAgentFn = (name: string, subCfg: unknown, parentLogger: ILogger, embedderFactories: Record<string, EmbedderFactory>, injected?: {
125
+ ragRegistry: IRagRegistry;
126
+ toolsRag: IRag | undefined;
127
+ mcpClients: IMcpClient[];
128
+ requestLogger: IRequestLogger;
129
+ mainLlm: ILlm;
130
+ classifierLlm: ILlm;
131
+ helperLlm?: ILlm;
132
+ embedder?: IEmbedder;
133
+ }) => Promise<SmartAgent>;
134
+ export interface WorkerRegistryDeps {
135
+ subAgentConfigs: SubAgentConfigEntry[] | undefined;
136
+ getFileLogger(): ILogger | undefined;
137
+ getEmbedderFactories(): Record<string, EmbedderFactory>;
138
+ buildSubAgent: BuildSubAgentFn;
139
+ }
140
+ export interface IWorkerRegistry {
141
+ build(parts: SessionAgentParts): Promise<SubAgentRegistry>;
142
+ drain(): Promise<void>;
143
+ readonly cache: Map<string, WorkerLlmSet>;
144
+ }
145
+ export declare class WorkerRegistry implements IWorkerRegistry {
146
+ private readonly deps;
147
+ readonly cache: Map<string, WorkerLlmSet>;
148
+ constructor(deps: WorkerRegistryDeps);
149
+ drain(): Promise<void>;
150
+ /**
151
+ * Build the FRESH per-session worker (sub-agent) registry from the SAME
152
+ * `subagents:` configs the primary build() used, injecting globals + this
153
+ * session's logger + the CACHED per-worker LLM/embedder (this.cache).
154
+ * NEVER reconstructs LLM clients; NEVER reuses the global registry.
155
+ */
156
+ build(parts: SessionAgentParts): Promise<SubAgentRegistry>;
157
+ }
158
+ export {};
159
+ //# sourceMappingURL=worker-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-registry.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/workers/worker-registry.ts"],"names":[],"mappings":"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"}