@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.
- package/dist/builders/controller-skill-pipeline-builder.d.ts +57 -0
- package/dist/builders/controller-skill-pipeline-builder.d.ts.map +1 -0
- package/dist/builders/controller-skill-pipeline-builder.js +175 -0
- package/dist/builders/controller-skill-pipeline-builder.js.map +1 -0
- package/dist/factories/controller-factory.d.ts +2 -2
- package/dist/factories/controller-factory.d.ts.map +1 -1
- package/dist/factories/controller-factory.js +2 -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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/pipelines/controller.d.ts +4 -2
- package/dist/pipelines/controller.d.ts.map +1 -1
- package/dist/pipelines/controller.js +33 -8
- package/dist/pipelines/controller.js.map +1 -1
- package/dist/pipelines/coordinator-resolvers.d.ts +68 -0
- package/dist/pipelines/coordinator-resolvers.d.ts.map +1 -0
- package/dist/pipelines/coordinator-resolvers.js +97 -0
- package/dist/pipelines/coordinator-resolvers.js.map +1 -0
- package/dist/pipelines/dag.d.ts +2 -2
- package/dist/pipelines/dag.js +2 -2
- package/dist/pipelines/parsers.d.ts +1 -1
- package/dist/pipelines/parsers.d.ts.map +1 -1
- package/dist/pipelines/parsers.js +5 -4
- package/dist/pipelines/parsers.js.map +1 -1
- package/dist/pipelines/register-skill-sources.d.ts.map +1 -1
- package/dist/pipelines/register-skill-sources.js +5 -0
- package/dist/pipelines/register-skill-sources.js.map +1 -1
- package/dist/pipelines/stepper.d.ts +2 -2
- package/dist/pipelines/stepper.js +2 -2
- package/dist/smart-agent/build-stepper-root.d.ts +3 -2
- package/dist/smart-agent/build-stepper-root.d.ts.map +1 -1
- package/dist/smart-agent/build-stepper-root.js +2 -1
- package/dist/smart-agent/build-stepper-root.js.map +1 -1
- package/dist/smart-agent/config-reload-watcher.d.ts +30 -0
- package/dist/smart-agent/config-reload-watcher.d.ts.map +1 -0
- package/dist/smart-agent/config-reload-watcher.js +101 -0
- package/dist/smart-agent/config-reload-watcher.js.map +1 -0
- package/dist/smart-agent/config-validator.d.ts +21 -0
- package/dist/smart-agent/config-validator.d.ts.map +1 -0
- package/dist/smart-agent/config-validator.js +196 -0
- package/dist/smart-agent/config-validator.js.map +1 -0
- package/dist/smart-agent/config.d.ts +16 -254
- package/dist/smart-agent/config.d.ts.map +1 -1
- package/dist/smart-agent/config.js +17 -904
- package/dist/smart-agent/config.js.map +1 -1
- package/dist/smart-agent/controller/board.d.ts +6 -3
- package/dist/smart-agent/controller/board.d.ts.map +1 -1
- package/dist/smart-agent/controller/board.js +21 -0
- package/dist/smart-agent/controller/board.js.map +1 -1
- package/dist/smart-agent/controller/controller-coordinator-handler.d.ts +16 -50
- package/dist/smart-agent/controller/controller-coordinator-handler.d.ts.map +1 -1
- package/dist/smart-agent/controller/controller-coordinator-handler.js +83 -371
- package/dist/smart-agent/controller/controller-coordinator-handler.js.map +1 -1
- package/dist/smart-agent/controller/finalizer.d.ts +5 -0
- package/dist/smart-agent/controller/finalizer.d.ts.map +1 -1
- package/dist/smart-agent/controller/finalizer.js +12 -5
- package/dist/smart-agent/controller/finalizer.js.map +1 -1
- package/dist/smart-agent/controller/parser.d.ts +11 -0
- package/dist/smart-agent/controller/parser.d.ts.map +1 -0
- package/dist/smart-agent/controller/parser.js +77 -0
- package/dist/smart-agent/controller/parser.js.map +1 -0
- package/dist/smart-agent/controller/planner.d.ts +20 -16
- package/dist/smart-agent/controller/planner.d.ts.map +1 -1
- package/dist/smart-agent/controller/planner.js +58 -64
- package/dist/smart-agent/controller/planner.js.map +1 -1
- package/dist/smart-agent/controller/recall.d.ts +48 -0
- package/dist/smart-agent/controller/recall.d.ts.map +1 -0
- package/dist/smart-agent/controller/recall.js +196 -0
- package/dist/smart-agent/controller/recall.js.map +1 -0
- package/dist/smart-agent/controller/reviewer.d.ts.map +1 -1
- package/dist/smart-agent/controller/reviewer.js +1 -1
- package/dist/smart-agent/controller/reviewer.js.map +1 -1
- package/dist/smart-agent/controller/types.d.ts +8 -9
- package/dist/smart-agent/controller/types.d.ts.map +1 -1
- package/dist/smart-agent/controller/usage-logging.d.ts +16 -0
- package/dist/smart-agent/controller/usage-logging.d.ts.map +1 -0
- package/dist/smart-agent/controller/usage-logging.js +39 -0
- package/dist/smart-agent/controller/usage-logging.js.map +1 -0
- package/dist/smart-agent/http/adapter-route-handler.d.ts +13 -0
- package/dist/smart-agent/http/adapter-route-handler.d.ts.map +1 -0
- package/dist/smart-agent/http/adapter-route-handler.js +76 -0
- package/dist/smart-agent/http/adapter-route-handler.js.map +1 -0
- package/dist/smart-agent/http/chat-route-handler.d.ts +15 -0
- package/dist/smart-agent/http/chat-route-handler.d.ts.map +1 -0
- package/dist/smart-agent/http/chat-route-handler.js +327 -0
- package/dist/smart-agent/http/chat-route-handler.js.map +1 -0
- package/dist/smart-agent/http/config-route-handler.d.ts +21 -0
- package/dist/smart-agent/http/config-route-handler.d.ts.map +1 -0
- package/dist/smart-agent/http/config-route-handler.js +149 -0
- package/dist/smart-agent/http/config-route-handler.js.map +1 -0
- package/dist/smart-agent/http/health-route-handler.d.ts +12 -0
- package/dist/smart-agent/http/health-route-handler.d.ts.map +1 -0
- package/dist/smart-agent/http/health-route-handler.js +19 -0
- package/dist/smart-agent/http/health-route-handler.js.map +1 -0
- package/dist/smart-agent/http/models-route-handler.d.ts +17 -0
- package/dist/smart-agent/http/models-route-handler.d.ts.map +1 -0
- package/dist/smart-agent/http/models-route-handler.js +65 -0
- package/dist/smart-agent/http/models-route-handler.js.map +1 -0
- package/dist/smart-agent/http/response-helpers.d.ts +31 -0
- package/dist/smart-agent/http/response-helpers.d.ts.map +1 -0
- package/dist/smart-agent/http/response-helpers.js +59 -0
- package/dist/smart-agent/http/response-helpers.js.map +1 -0
- package/dist/smart-agent/http/route-table.d.ts +44 -0
- package/dist/smart-agent/http/route-table.d.ts.map +1 -0
- package/dist/smart-agent/http/route-table.js +35 -0
- package/dist/smart-agent/http/route-table.js.map +1 -0
- package/dist/smart-agent/http/session-cookie.d.ts +10 -0
- package/dist/smart-agent/http/session-cookie.d.ts.map +1 -0
- package/dist/smart-agent/http/session-cookie.js +16 -0
- package/dist/smart-agent/http/session-cookie.js.map +1 -0
- package/dist/smart-agent/http/sessions-route-handler.d.ts +8 -0
- package/dist/smart-agent/http/sessions-route-handler.d.ts.map +1 -0
- package/dist/smart-agent/http/sessions-route-handler.js +54 -0
- package/dist/smart-agent/http/sessions-route-handler.js.map +1 -0
- package/dist/smart-agent/http/usage-route-handler.d.ts +12 -0
- package/dist/smart-agent/http/usage-route-handler.d.ts.map +1 -0
- package/dist/smart-agent/http/usage-route-handler.js +28 -0
- package/dist/smart-agent/http/usage-route-handler.js.map +1 -0
- package/dist/smart-agent/knowledge/make-knowledge-backend.d.ts +13 -0
- package/dist/smart-agent/knowledge/make-knowledge-backend.d.ts.map +1 -0
- package/dist/smart-agent/knowledge/make-knowledge-backend.js +18 -0
- package/dist/smart-agent/knowledge/make-knowledge-backend.js.map +1 -0
- package/dist/smart-agent/llm/role-llm-resolver.d.ts +30 -0
- package/dist/smart-agent/llm/role-llm-resolver.d.ts.map +1 -0
- package/dist/smart-agent/llm/role-llm-resolver.js +44 -0
- package/dist/smart-agent/llm/role-llm-resolver.js.map +1 -0
- package/dist/smart-agent/llm-config-map.d.ts +38 -0
- package/dist/smart-agent/llm-config-map.d.ts.map +1 -0
- package/dist/smart-agent/llm-config-map.js +75 -0
- package/dist/smart-agent/llm-config-map.js.map +1 -0
- package/dist/smart-agent/mcp-readiness-monitor.d.ts +38 -0
- package/dist/smart-agent/mcp-readiness-monitor.d.ts.map +1 -0
- package/dist/smart-agent/mcp-readiness-monitor.js +81 -0
- package/dist/smart-agent/mcp-readiness-monitor.js.map +1 -0
- package/dist/smart-agent/mcp-readiness-registry.d.ts +37 -0
- package/dist/smart-agent/mcp-readiness-registry.d.ts.map +1 -0
- package/dist/smart-agent/mcp-readiness-registry.js +55 -0
- package/dist/smart-agent/mcp-readiness-registry.js.map +1 -0
- package/dist/smart-agent/resolve-config-sections.d.ts +15 -0
- package/dist/smart-agent/resolve-config-sections.d.ts.map +1 -0
- package/dist/smart-agent/resolve-config-sections.js +212 -0
- package/dist/smart-agent/resolve-config-sections.js.map +1 -0
- package/dist/smart-agent/session-lifecycle/index.d.ts +117 -0
- package/dist/smart-agent/session-lifecycle/index.d.ts.map +1 -0
- package/dist/smart-agent/session-lifecycle/index.js +152 -0
- package/dist/smart-agent/session-lifecycle/index.js.map +1 -0
- package/dist/smart-agent/skill-plugins-config.d.ts +9 -1
- package/dist/smart-agent/skill-plugins-config.d.ts.map +1 -1
- package/dist/smart-agent/skill-plugins-config.js +27 -1
- package/dist/smart-agent/skill-plugins-config.js.map +1 -1
- package/dist/smart-agent/skill-plugins-host-factory.d.ts +14 -2
- package/dist/smart-agent/skill-plugins-host-factory.d.ts.map +1 -1
- package/dist/smart-agent/skill-plugins-host-factory.js +16 -4
- package/dist/smart-agent/skill-plugins-host-factory.js.map +1 -1
- package/dist/smart-agent/smart-server.d.ts +151 -222
- package/dist/smart-agent/smart-server.d.ts.map +1 -1
- package/dist/smart-agent/smart-server.js +529 -1385
- package/dist/smart-agent/smart-server.js.map +1 -1
- package/dist/smart-agent/stepper-config.d.ts +138 -0
- package/dist/smart-agent/stepper-config.d.ts.map +1 -0
- package/dist/smart-agent/stepper-config.js +216 -0
- package/dist/smart-agent/stepper-config.js.map +1 -0
- package/dist/smart-agent/tools-rag-handle.d.ts +10 -0
- package/dist/smart-agent/tools-rag-handle.d.ts.map +1 -0
- package/dist/smart-agent/tools-rag-handle.js +76 -0
- package/dist/smart-agent/tools-rag-handle.js.map +1 -0
- package/dist/smart-agent/workers/worker-registry.d.ts +159 -0
- package/dist/smart-agent/workers/worker-registry.d.ts.map +1 -0
- package/dist/smart-agent/workers/worker-registry.js +203 -0
- package/dist/smart-agent/workers/worker-registry.js.map +1 -0
- package/dist/smart-agent/yaml-loader.d.ts +7 -0
- package/dist/smart-agent/yaml-loader.d.ts.map +1 -0
- package/dist/smart-agent/yaml-loader.js +146 -0
- package/dist/smart-agent/yaml-loader.js.map +1 -0
- 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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"}
|