@mcp-abap-adt/llm-agent-server-libs 20.0.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/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.map +1 -1
- package/dist/pipelines/controller.js +19 -3
- 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/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/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 +6 -48
- package/dist/smart-agent/controller/controller-coordinator-handler.d.ts.map +1 -1
- package/dist/smart-agent/controller/controller-coordinator-handler.js +68 -357
- 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.js +1 -1
- 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/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 +527 -1384
- 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,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect whether an object is a flat SmartServerLlmConfig shape.
|
|
3
|
+
* Flat shape is identified by the presence of ANY of the known flat-shape
|
|
4
|
+
* fields: `provider`, `apiKey`, `model`, or `url`. This covers keyless
|
|
5
|
+
* providers (Ollama, SAP AI Core) that omit `apiKey` — using `apiKey`-only
|
|
6
|
+
* detection silently misclassified those configs as a "map" shape.
|
|
7
|
+
*/
|
|
8
|
+
function isFlatLlmConfig(input) {
|
|
9
|
+
const flat = input;
|
|
10
|
+
return (typeof flat.provider === 'string' ||
|
|
11
|
+
typeof flat.apiKey === 'string' ||
|
|
12
|
+
typeof flat.model === 'string' ||
|
|
13
|
+
typeof flat.url === 'string');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Normalize the optional top-level `llm:` block.
|
|
17
|
+
* - undefined → undefined (pipeline-only configs stay valid)
|
|
18
|
+
* - flat shape (has `provider` | `apiKey` | `model` | `url`) → { main: flat } (backward compat)
|
|
19
|
+
* - map shape → must include `main`; returned as NormalizedLlmMap
|
|
20
|
+
*/
|
|
21
|
+
export function normalizeLlmConfig(input) {
|
|
22
|
+
if (input === undefined)
|
|
23
|
+
return undefined;
|
|
24
|
+
if (isFlatLlmConfig(input)) {
|
|
25
|
+
return { main: input };
|
|
26
|
+
}
|
|
27
|
+
const map = input;
|
|
28
|
+
if (!map.main) {
|
|
29
|
+
throw new Error("llm: map must include a 'main' key (default LLM for unspecified roles)");
|
|
30
|
+
}
|
|
31
|
+
return map;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Strict lookup: returns map[name] if explicitly present, else undefined.
|
|
35
|
+
* Does NOT fall through to map.main. Use when the caller needs to
|
|
36
|
+
* detect explicit-presence (e.g. to decide between an alias and the
|
|
37
|
+
* named map entry).
|
|
38
|
+
*/
|
|
39
|
+
export function resolveLlmConfigStrict(map, name) {
|
|
40
|
+
if (!map || !name)
|
|
41
|
+
return undefined;
|
|
42
|
+
return map[name];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Resolve a per-role LLM config by name from a normalized map.
|
|
46
|
+
* Lookup chain: map[name] → map.main → pipelineFallback.
|
|
47
|
+
* When map is undefined, falls back to pipelineFallback (so pipeline-only
|
|
48
|
+
* configs keep working with no top-level llm: block).
|
|
49
|
+
*
|
|
50
|
+
* The caller decides whether `undefined` is an error.
|
|
51
|
+
*/
|
|
52
|
+
export function resolveLlmConfig(map, name, pipelineFallback) {
|
|
53
|
+
if (!map)
|
|
54
|
+
return pipelineFallback;
|
|
55
|
+
if (!name || name === 'main')
|
|
56
|
+
return map.main;
|
|
57
|
+
return map[name] ?? map.main;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Read the reviewer block's LLM-name selector, accepting both the
|
|
61
|
+
* preferred `reviewerLlm` field and the deprecated `plannerLlm` alias.
|
|
62
|
+
* When the alias is used, calls `warn(message)`.
|
|
63
|
+
*/
|
|
64
|
+
export function resolveReviewerLlmName(block, warn) {
|
|
65
|
+
if (!block)
|
|
66
|
+
return undefined;
|
|
67
|
+
if (typeof block.reviewerLlm === 'string')
|
|
68
|
+
return block.reviewerLlm;
|
|
69
|
+
if (typeof block.plannerLlm === 'string') {
|
|
70
|
+
warn("coordinator.reviewer.plannerLlm is deprecated; rename to 'reviewerLlm'");
|
|
71
|
+
return block.plannerLlm;
|
|
72
|
+
}
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=llm-config-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-config-map.js","sourceRoot":"","sources":["../../src/smart-agent/llm-config-map.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,KAA0C;IACjE,MAAM,IAAI,GAAG,KAAsC,CAAC;IACpD,OAAO,CACL,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;QACjC,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;QAC/B,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;QAC9B,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,CAC7B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAA2C;IAE3C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,KAA6B,EAAsB,CAAC;IACrE,CAAC;IACD,MAAM,GAAG,GAAG,KAAqB,CAAC;IAClC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;IACJ,CAAC;IACD,OAAO,GAAuB,CAAC;AACjC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAiC,EACjC,IAAwB;IAExB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IACpC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAiC,EACjC,IAAa,EACb,gBAAuC;IAEvC,IAAI,CAAC,GAAG;QAAE,OAAO,gBAAgB,CAAC;IAClC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC;IAC9C,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAgE,EAChE,IAA2B;IAE3B,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,WAAW,CAAC;IACpE,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACzC,IAAI,CACF,wEAAwE,CACzE,CAAC;QACF,OAAO,KAAK,CAAC,UAAU,CAAC;IAC1B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { IMcpClient } from '@mcp-abap-adt/llm-agent';
|
|
2
|
+
import type { McpReadinessRegistry } from './mcp-readiness-registry.js';
|
|
3
|
+
export interface McpReadinessMonitorDeps {
|
|
4
|
+
/** Lazily (re)connect a slot's opaque config to a live client. Throws if still
|
|
5
|
+
* down. */
|
|
6
|
+
connect: (config: unknown) => Promise<IMcpClient>;
|
|
7
|
+
/** Called after a GLOBAL slot transitions DOWN→UP, so the server can refresh the
|
|
8
|
+
* vectorized tool catalog (toolsRag) over the now-live clients. */
|
|
9
|
+
onGlobalRecovered?: () => Promise<void>;
|
|
10
|
+
/** Called after a WORKER slot transitions DOWN→UP, so the server can invalidate
|
|
11
|
+
* the worker cache (next session rebuild injects the recovered client). */
|
|
12
|
+
onWorkerRecovered?: (id: string) => void;
|
|
13
|
+
cooldownMs?: number;
|
|
14
|
+
intervalMs?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Periodic readiness probe over the SmartServer-owned MCP target registry. Drives
|
|
18
|
+
* the `_ready` signal: probes live clients via `healthCheck()` (→ `ping()`, a LIVE
|
|
19
|
+
* round-trip — never the cached `listTools()`), and lazily (re)connects DOWN targets
|
|
20
|
+
* on a cooldown. `tick()` is one pass; the timer just calls it on an interval so
|
|
21
|
+
* tests are deterministic.
|
|
22
|
+
*/
|
|
23
|
+
export declare class McpReadinessMonitor {
|
|
24
|
+
private readonly registry;
|
|
25
|
+
private readonly deps;
|
|
26
|
+
private timer?;
|
|
27
|
+
private readonly cooldownMs;
|
|
28
|
+
private readonly intervalMs;
|
|
29
|
+
constructor(registry: McpReadinessRegistry, deps: McpReadinessMonitorDeps);
|
|
30
|
+
isReady(): boolean;
|
|
31
|
+
/** One monitoring pass. The timer calls this; tests call it directly (passing an
|
|
32
|
+
* explicit `now` for deterministic cooldown). */
|
|
33
|
+
tick(now?: number): Promise<void>;
|
|
34
|
+
private _fireRecovered;
|
|
35
|
+
start(): void;
|
|
36
|
+
stop(): void;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=mcp-readiness-monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-readiness-monitor.d.ts","sourceRoot":"","sources":["../../src/smart-agent/mcp-readiness-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACtC;gBACY;IACZ,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAClD;wEACoE;IACpE,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC;gFAC4E;IAC5E,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,qBAAa,mBAAmB;IAM5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IANvB,OAAO,CAAC,KAAK,CAAC,CAAiC;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGjB,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,EAAE,uBAAuB;IAMhD,OAAO,IAAI,OAAO;IAIlB;sDACkD;IAC5C,IAAI,CAAC,GAAG,SAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAsC7B,cAAc;IAQ5B,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;CAIb"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Periodic readiness probe over the SmartServer-owned MCP target registry. Drives
|
|
3
|
+
* the `_ready` signal: probes live clients via `healthCheck()` (→ `ping()`, a LIVE
|
|
4
|
+
* round-trip — never the cached `listTools()`), and lazily (re)connects DOWN targets
|
|
5
|
+
* on a cooldown. `tick()` is one pass; the timer just calls it on an interval so
|
|
6
|
+
* tests are deterministic.
|
|
7
|
+
*/
|
|
8
|
+
export class McpReadinessMonitor {
|
|
9
|
+
registry;
|
|
10
|
+
deps;
|
|
11
|
+
timer;
|
|
12
|
+
cooldownMs;
|
|
13
|
+
intervalMs;
|
|
14
|
+
constructor(registry, deps) {
|
|
15
|
+
this.registry = registry;
|
|
16
|
+
this.deps = deps;
|
|
17
|
+
this.cooldownMs = deps.cooldownMs ?? 30000;
|
|
18
|
+
this.intervalMs = deps.intervalMs ?? 10000;
|
|
19
|
+
}
|
|
20
|
+
isReady() {
|
|
21
|
+
return this.registry.allHealthy();
|
|
22
|
+
}
|
|
23
|
+
/** One monitoring pass. The timer calls this; tests call it directly (passing an
|
|
24
|
+
* explicit `now` for deterministic cooldown). */
|
|
25
|
+
async tick(now = Date.now()) {
|
|
26
|
+
for (const slot of this.registry.list()) {
|
|
27
|
+
const wasDown = !slot.healthy;
|
|
28
|
+
if (slot.client) {
|
|
29
|
+
// healthCheck is OPTIONAL on IMcpClient. A client WITHOUT it is ASSUMED
|
|
30
|
+
// healthy (per the interface contract) — never marked down on a missing
|
|
31
|
+
// probe, else a DI/plugin client without a probe wedges readiness down
|
|
32
|
+
// forever with no config to reconnect.
|
|
33
|
+
if (typeof slot.client.healthCheck !== 'function') {
|
|
34
|
+
this.registry.markHealthy(slot.id, slot.client);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const hc = await slot.client.healthCheck();
|
|
38
|
+
if (hc?.ok) {
|
|
39
|
+
this.registry.markHealthy(slot.id, slot.client);
|
|
40
|
+
if (wasDown)
|
|
41
|
+
await this._fireRecovered(slot.id, slot.scope);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
this.registry.markDown(slot.id);
|
|
45
|
+
// fall through to a reconnect attempt
|
|
46
|
+
}
|
|
47
|
+
if (!slot.healthy &&
|
|
48
|
+
slot.config !== undefined &&
|
|
49
|
+
now - slot.lastAttempt >= this.cooldownMs) {
|
|
50
|
+
slot.lastAttempt = now;
|
|
51
|
+
try {
|
|
52
|
+
const client = await this.deps.connect(slot.config);
|
|
53
|
+
this.registry.markHealthy(slot.id, client);
|
|
54
|
+
if (wasDown)
|
|
55
|
+
await this._fireRecovered(slot.id, slot.scope);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
this.registry.markDown(slot.id);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async _fireRecovered(id, scope) {
|
|
64
|
+
if (scope === 'global')
|
|
65
|
+
await this.deps.onGlobalRecovered?.();
|
|
66
|
+
else
|
|
67
|
+
this.deps.onWorkerRecovered?.(id);
|
|
68
|
+
}
|
|
69
|
+
start() {
|
|
70
|
+
if (this.timer)
|
|
71
|
+
return;
|
|
72
|
+
this.timer = setInterval(() => void this.tick(), this.intervalMs);
|
|
73
|
+
this.timer.unref?.();
|
|
74
|
+
}
|
|
75
|
+
stop() {
|
|
76
|
+
if (this.timer)
|
|
77
|
+
clearInterval(this.timer);
|
|
78
|
+
this.timer = undefined;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=mcp-readiness-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-readiness-monitor.js","sourceRoot":"","sources":["../../src/smart-agent/mcp-readiness-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { IMcpClient } from '@mcp-abap-adt/llm-agent';
|
|
2
|
+
export type ReadinessScope = 'global' | 'worker';
|
|
3
|
+
export interface ReadinessSlot {
|
|
4
|
+
id: string;
|
|
5
|
+
scope: ReadinessScope;
|
|
6
|
+
/** Opaque MCP target config (the monitor's `connect` knows how to use it).
|
|
7
|
+
* Absent for DI-only live clients that have no reconnect config. */
|
|
8
|
+
config?: unknown;
|
|
9
|
+
client?: IMcpClient;
|
|
10
|
+
healthy: boolean;
|
|
11
|
+
lastAttempt: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Registry of configured MCP targets driving SmartServer readiness. A target with
|
|
15
|
+
* no healthy client ⇒ NOT ready. Built from CONFIG (not from successful connects),
|
|
16
|
+
* so a down-at-boot target is a DOWN slot, not a missing one — which is what makes
|
|
17
|
+
* "cold-MCP startup → NOT_READY (no throw), recover later" implementable.
|
|
18
|
+
*/
|
|
19
|
+
export declare class McpReadinessRegistry {
|
|
20
|
+
private readonly slots;
|
|
21
|
+
/** Register a configured target whose client may not be connected yet.
|
|
22
|
+
* Idempotent on `id` (the worker setup runs on both the primary build and the
|
|
23
|
+
* per-session rebuild — re-`addTarget` with the same id must keep ONE slot). */
|
|
24
|
+
addTarget(id: string, config: unknown, scope: ReadinessScope): void;
|
|
25
|
+
/** Register an already-live DI client (no lazy connect needed). */
|
|
26
|
+
addLiveClient(id: string, client: IMcpClient, scope: ReadinessScope): void;
|
|
27
|
+
markHealthy(id: string, client: IMcpClient): void;
|
|
28
|
+
markDown(id: string): void;
|
|
29
|
+
allHealthy(): boolean;
|
|
30
|
+
list(): ReadinessSlot[];
|
|
31
|
+
/** Live execution clients for GLOBAL targets — the source of truth `callMcp`
|
|
32
|
+
* reads so a monitor-recovered client is used without a restart. Worker targets
|
|
33
|
+
* are excluded: worker clients drive readiness + worker INJECTION (the worker
|
|
34
|
+
* hoist), not the top-level callMcp. */
|
|
35
|
+
liveClients(): IMcpClient[];
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=mcp-readiness-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-readiness-registry.d.ts","sourceRoot":"","sources":["../../src/smart-agent/mcp-readiness-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,cAAc,CAAC;IACtB;yEACqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;IAE1D;;qFAEiF;IACjF,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI;IAKnE,mEAAmE;IACnE,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI;IAI1E,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAQjD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK1B,UAAU,IAAI,OAAO;IAKrB,IAAI,IAAI,aAAa,EAAE;IAIvB;;;6CAGyC;IACzC,WAAW,IAAI,UAAU,EAAE;CAO5B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry of configured MCP targets driving SmartServer readiness. A target with
|
|
3
|
+
* no healthy client ⇒ NOT ready. Built from CONFIG (not from successful connects),
|
|
4
|
+
* so a down-at-boot target is a DOWN slot, not a missing one — which is what makes
|
|
5
|
+
* "cold-MCP startup → NOT_READY (no throw), recover later" implementable.
|
|
6
|
+
*/
|
|
7
|
+
export class McpReadinessRegistry {
|
|
8
|
+
slots = new Map();
|
|
9
|
+
/** Register a configured target whose client may not be connected yet.
|
|
10
|
+
* Idempotent on `id` (the worker setup runs on both the primary build and the
|
|
11
|
+
* per-session rebuild — re-`addTarget` with the same id must keep ONE slot). */
|
|
12
|
+
addTarget(id, config, scope) {
|
|
13
|
+
if (this.slots.has(id))
|
|
14
|
+
return;
|
|
15
|
+
this.slots.set(id, { id, scope, config, healthy: false, lastAttempt: 0 });
|
|
16
|
+
}
|
|
17
|
+
/** Register an already-live DI client (no lazy connect needed). */
|
|
18
|
+
addLiveClient(id, client, scope) {
|
|
19
|
+
this.slots.set(id, { id, scope, client, healthy: true, lastAttempt: 0 });
|
|
20
|
+
}
|
|
21
|
+
markHealthy(id, client) {
|
|
22
|
+
const s = this.slots.get(id);
|
|
23
|
+
if (s) {
|
|
24
|
+
s.client = client;
|
|
25
|
+
s.healthy = true;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
markDown(id) {
|
|
29
|
+
const s = this.slots.get(id);
|
|
30
|
+
if (s)
|
|
31
|
+
s.healthy = false;
|
|
32
|
+
}
|
|
33
|
+
allHealthy() {
|
|
34
|
+
for (const s of this.slots.values())
|
|
35
|
+
if (!s.healthy)
|
|
36
|
+
return false;
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
list() {
|
|
40
|
+
return [...this.slots.values()];
|
|
41
|
+
}
|
|
42
|
+
/** Live execution clients for GLOBAL targets — the source of truth `callMcp`
|
|
43
|
+
* reads so a monitor-recovered client is used without a restart. Worker targets
|
|
44
|
+
* are excluded: worker clients drive readiness + worker INJECTION (the worker
|
|
45
|
+
* hoist), not the top-level callMcp. */
|
|
46
|
+
liveClients() {
|
|
47
|
+
const out = [];
|
|
48
|
+
for (const s of this.slots.values()) {
|
|
49
|
+
if (s.scope === 'global' && s.healthy && s.client)
|
|
50
|
+
out.push(s.client);
|
|
51
|
+
}
|
|
52
|
+
return out;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=mcp-readiness-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-readiness-registry.js","sourceRoot":"","sources":["../../src/smart-agent/mcp-readiness-registry.ts"],"names":[],"mappings":"AAeA;;;;;GAKG;AACH,MAAM,OAAO,oBAAoB;IACd,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE1D;;qFAEiF;IACjF,SAAS,CAAC,EAAU,EAAE,MAAe,EAAE,KAAqB;QAC1D,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,mEAAmE;IACnE,aAAa,CAAC,EAAU,EAAE,MAAkB,EAAE,KAAqB;QACjE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,WAAW,CAAC,EAAU,EAAE,MAAkB;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;YAClB,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC;YAAE,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,UAAU;QACR,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,IAAI,CAAC,CAAC,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,CAAC;IAED;;;6CAGyC;IACzC,WAAW;QACT,MAAM,GAAG,GAAiB,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-section config builders extracted from resolveSmartServerConfig.
|
|
3
|
+
* Internal module — not re-exported by the package barrel.
|
|
4
|
+
*/
|
|
5
|
+
import type { SmartServerAgentConfig, SmartServerConfig } from './smart-server.js';
|
|
6
|
+
import type { YamlConfig } from './yaml-loader.js';
|
|
7
|
+
export declare function resolveLlmSection(yaml: YamlConfig, apiKey: string): SmartServerConfig['llm'];
|
|
8
|
+
export declare function resolveRagSection(yaml: YamlConfig, args: Record<string, unknown>): SmartServerConfig['rag'];
|
|
9
|
+
export declare function resolveMcpSection(yaml: YamlConfig, args: Record<string, unknown>): SmartServerConfig['mcp'];
|
|
10
|
+
export declare function resolveAgentSection(yaml: YamlConfig, args: Record<string, unknown>): SmartServerAgentConfig;
|
|
11
|
+
export declare function resolvePromptsSection(yaml: YamlConfig): SmartServerConfig['prompts'];
|
|
12
|
+
export declare function resolvePipelineSelection(yaml: YamlConfig): {
|
|
13
|
+
pipeline?: SmartServerConfig['pipeline'];
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=resolve-config-sections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-config-sections.d.ts","sourceRoot":"","sources":["../../src/smart-agent/resolve-config-sections.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EAGlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,GACb,iBAAiB,CAAC,KAAK,CAAC,CAqB1B;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,iBAAiB,CAAC,KAAK,CAAC,CA+B1B;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,iBAAiB,CAAC,KAAK,CAAC,CAyC1B;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,sBAAsB,CAkIxB;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,UAAU,GACf,iBAAiB,CAAC,SAAS,CAAC,CA2B9B;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG;IAC1D,QAAQ,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;CAC1C,CAsBA"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-section config builders extracted from resolveSmartServerConfig.
|
|
3
|
+
* Internal module — not re-exported by the package barrel.
|
|
4
|
+
*/
|
|
5
|
+
import { get } from './yaml-loader.js';
|
|
6
|
+
export function resolveLlmSection(yaml, apiKey) {
|
|
7
|
+
return get(yaml, 'llm')
|
|
8
|
+
? typeof get(yaml, 'llm', 'provider') === 'string'
|
|
9
|
+
? {
|
|
10
|
+
provider: get(yaml, 'llm', 'provider'),
|
|
11
|
+
apiKey,
|
|
12
|
+
url: get(yaml, 'llm', 'url'),
|
|
13
|
+
model: get(yaml, 'llm', 'model'),
|
|
14
|
+
temperature: Number(get(yaml, 'llm', 'temperature') ?? 0.7),
|
|
15
|
+
classifierTemperature: Number(get(yaml, 'llm', 'classifierTemperature') ?? 0.1),
|
|
16
|
+
}
|
|
17
|
+
: get(yaml, 'llm')
|
|
18
|
+
: undefined;
|
|
19
|
+
}
|
|
20
|
+
export function resolveRagSection(yaml, args) {
|
|
21
|
+
return get(yaml, 'rag')
|
|
22
|
+
? {
|
|
23
|
+
type: get(yaml, 'rag', 'type'),
|
|
24
|
+
embedder: get(yaml, 'rag', 'embedder') ?? undefined,
|
|
25
|
+
url: get(yaml, 'rag', 'url'),
|
|
26
|
+
model: get(yaml, 'rag', 'model'),
|
|
27
|
+
collectionName: args['rag-collection-name'] ??
|
|
28
|
+
get(yaml, 'rag', 'collectionName') ??
|
|
29
|
+
undefined,
|
|
30
|
+
dedupThreshold: Number(get(yaml, 'rag', 'dedupThreshold') ?? 0.92),
|
|
31
|
+
vectorWeight: Number(get(yaml, 'rag', 'vectorWeight') ?? 0.7),
|
|
32
|
+
keywordWeight: Number(get(yaml, 'rag', 'keywordWeight') ?? 0.3),
|
|
33
|
+
...(get(yaml, 'rag', 'resourceGroup') !== undefined
|
|
34
|
+
? { resourceGroup: String(get(yaml, 'rag', 'resourceGroup')) }
|
|
35
|
+
: {}),
|
|
36
|
+
...(get(yaml, 'rag', 'scenario') !== undefined
|
|
37
|
+
? {
|
|
38
|
+
scenario: String(get(yaml, 'rag', 'scenario')),
|
|
39
|
+
}
|
|
40
|
+
: {}),
|
|
41
|
+
}
|
|
42
|
+
: undefined;
|
|
43
|
+
}
|
|
44
|
+
export function resolveMcpSection(yaml, args) {
|
|
45
|
+
const rawMcp = yaml.mcp;
|
|
46
|
+
const mcpIsArray = Array.isArray(rawMcp);
|
|
47
|
+
const mcpUrl = get(yaml, 'mcp', 'url');
|
|
48
|
+
const mcpCommand = get(yaml, 'mcp', 'command');
|
|
49
|
+
const mcpTypeRaw = mcpIsArray
|
|
50
|
+
? null // array form: type resolved per-entry inside connectMcpClientsFromConfig
|
|
51
|
+
: (get(yaml, 'mcp', 'type') ??
|
|
52
|
+
(mcpUrl ? 'http' : mcpCommand ? 'stdio' : null));
|
|
53
|
+
const mcpType = (mcpTypeRaw === 'none' ? null : mcpTypeRaw);
|
|
54
|
+
return mcpIsArray
|
|
55
|
+
? rawMcp
|
|
56
|
+
: mcpType
|
|
57
|
+
? {
|
|
58
|
+
type: mcpType,
|
|
59
|
+
url: mcpUrl || undefined,
|
|
60
|
+
command: mcpCommand || undefined,
|
|
61
|
+
args: args['mcp-args'] || get(yaml, 'mcp', 'args')
|
|
62
|
+
? String(args['mcp-args'] || get(yaml, 'mcp', 'args')).split(' ')
|
|
63
|
+
: undefined,
|
|
64
|
+
headers: get(yaml, 'mcp', 'headers') ||
|
|
65
|
+
undefined,
|
|
66
|
+
...(get(yaml, 'mcp', 'timeout') !== undefined
|
|
67
|
+
? { timeout: Number(get(yaml, 'mcp', 'timeout')) }
|
|
68
|
+
: {}),
|
|
69
|
+
...(get(yaml, 'mcp', 'toolTimeouts') !== undefined
|
|
70
|
+
? {
|
|
71
|
+
toolTimeouts: get(yaml, 'mcp', 'toolTimeouts'),
|
|
72
|
+
}
|
|
73
|
+
: {}),
|
|
74
|
+
}
|
|
75
|
+
: undefined;
|
|
76
|
+
}
|
|
77
|
+
export function resolveAgentSection(yaml, args) {
|
|
78
|
+
return {
|
|
79
|
+
externalToolsValidationMode: (get(yaml, 'agent', 'externalToolsValidationMode') ?? 'permissive'),
|
|
80
|
+
maxIterations: Number(get(yaml, 'agent', 'maxIterations') ?? 10),
|
|
81
|
+
maxToolCalls: Number(get(yaml, 'agent', 'maxToolCalls') ?? 30),
|
|
82
|
+
toolUnavailableTtlMs: Number(get(yaml, 'agent', 'toolUnavailableTtlMs') ?? 600000),
|
|
83
|
+
ragQueryK: Number(get(yaml, 'agent', 'ragQueryK') ?? 10),
|
|
84
|
+
...(get(yaml, 'agent', 'contextBudgetTokens') !== undefined
|
|
85
|
+
? {
|
|
86
|
+
contextBudgetTokens: Number(get(yaml, 'agent', 'contextBudgetTokens')),
|
|
87
|
+
}
|
|
88
|
+
: {}),
|
|
89
|
+
...(get(yaml, 'agent', 'semanticHistoryEnabled') !== undefined
|
|
90
|
+
? {
|
|
91
|
+
semanticHistoryEnabled: Boolean(get(yaml, 'agent', 'semanticHistoryEnabled')),
|
|
92
|
+
}
|
|
93
|
+
: {}),
|
|
94
|
+
...(get(yaml, 'agent', 'historyRecencyWindow') !== undefined
|
|
95
|
+
? {
|
|
96
|
+
historyRecencyWindow: Number(get(yaml, 'agent', 'historyRecencyWindow')),
|
|
97
|
+
}
|
|
98
|
+
: {}),
|
|
99
|
+
...(get(yaml, 'agent', 'historyTurnSummaryPrompt') !== undefined
|
|
100
|
+
? {
|
|
101
|
+
historyTurnSummaryPrompt: String(get(yaml, 'agent', 'historyTurnSummaryPrompt')),
|
|
102
|
+
}
|
|
103
|
+
: {}),
|
|
104
|
+
showReasoning: Boolean(args['agent-show-reasoning'] ??
|
|
105
|
+
get(yaml, 'agent', 'showReasoning') ??
|
|
106
|
+
false),
|
|
107
|
+
historyAutoSummarizeLimit: Number(get(yaml, 'agent', 'historyAutoSummarizeLimit') ?? 10),
|
|
108
|
+
queryExpansionEnabled: Boolean(get(yaml, 'agent', 'queryExpansionEnabled') ?? false),
|
|
109
|
+
toolResultCacheTtlMs: Number(get(yaml, 'agent', 'toolResultCacheTtlMs') ?? 300000),
|
|
110
|
+
sessionTokenBudget: Number(get(yaml, 'agent', 'sessionTokenBudget') ?? 0),
|
|
111
|
+
...(get(yaml, 'agent', 'classificationEnabled') !== undefined
|
|
112
|
+
? {
|
|
113
|
+
classificationEnabled: Boolean(get(yaml, 'agent', 'classificationEnabled')),
|
|
114
|
+
}
|
|
115
|
+
: {}),
|
|
116
|
+
...(get(yaml, 'agent', 'toolReselectPerIteration') !== undefined
|
|
117
|
+
? {
|
|
118
|
+
toolReselectPerIteration: Boolean(get(yaml, 'agent', 'toolReselectPerIteration')),
|
|
119
|
+
}
|
|
120
|
+
: {}),
|
|
121
|
+
...(get(yaml, 'agent', 'ragTranslateEnabled') !== undefined
|
|
122
|
+
? {
|
|
123
|
+
ragTranslateEnabled: Boolean(get(yaml, 'agent', 'ragTranslateEnabled')),
|
|
124
|
+
}
|
|
125
|
+
: {}),
|
|
126
|
+
...(get(yaml, 'agent', 'refreshToolsPerIteration') !== undefined
|
|
127
|
+
? {
|
|
128
|
+
refreshToolsPerIteration: Boolean(get(yaml, 'agent', 'refreshToolsPerIteration')),
|
|
129
|
+
}
|
|
130
|
+
: {}),
|
|
131
|
+
...(get(yaml, 'agent', 'streamMode') !== undefined
|
|
132
|
+
? {
|
|
133
|
+
streamMode: String(get(yaml, 'agent', 'streamMode')),
|
|
134
|
+
}
|
|
135
|
+
: {}),
|
|
136
|
+
...(get(yaml, 'agent', 'llmCallStrategy') !== undefined
|
|
137
|
+
? {
|
|
138
|
+
llmCallStrategy: String(get(yaml, 'agent', 'llmCallStrategy')),
|
|
139
|
+
}
|
|
140
|
+
: {}),
|
|
141
|
+
...(get(yaml, 'agent', 'heartbeatIntervalMs') !== undefined
|
|
142
|
+
? {
|
|
143
|
+
heartbeatIntervalMs: Number(get(yaml, 'agent', 'heartbeatIntervalMs')),
|
|
144
|
+
}
|
|
145
|
+
: {}),
|
|
146
|
+
...(get(yaml, 'agent', 'healthTimeoutMs') !== undefined
|
|
147
|
+
? {
|
|
148
|
+
healthTimeoutMs: Number(get(yaml, 'agent', 'healthTimeoutMs')),
|
|
149
|
+
}
|
|
150
|
+
: {}),
|
|
151
|
+
...(get(yaml, 'agent', 'retry') !== undefined
|
|
152
|
+
? {
|
|
153
|
+
retry: get(yaml, 'agent', 'retry'),
|
|
154
|
+
}
|
|
155
|
+
: {}),
|
|
156
|
+
...(get(yaml, 'agent', 'toolSelection') !== undefined
|
|
157
|
+
? {
|
|
158
|
+
toolSelection: get(yaml, 'agent', 'toolSelection'),
|
|
159
|
+
}
|
|
160
|
+
: {}),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
export function resolvePromptsSection(yaml) {
|
|
164
|
+
const promptSystem = get(yaml, 'prompts', 'system') ?? null;
|
|
165
|
+
const promptClassifier = get(yaml, 'prompts', 'classifier') ?? null;
|
|
166
|
+
const promptReasoning = get(yaml, 'prompts', 'reasoning') ?? null;
|
|
167
|
+
const promptRagTranslate = get(yaml, 'prompts', 'ragTranslate') ?? null;
|
|
168
|
+
const promptHistorySummary = get(yaml, 'prompts', 'historySummary') ?? null;
|
|
169
|
+
return promptSystem ||
|
|
170
|
+
promptClassifier ||
|
|
171
|
+
promptReasoning ||
|
|
172
|
+
promptRagTranslate ||
|
|
173
|
+
promptHistorySummary
|
|
174
|
+
? {
|
|
175
|
+
...(promptSystem ? { system: promptSystem } : {}),
|
|
176
|
+
...(promptClassifier ? { classifier: promptClassifier } : {}),
|
|
177
|
+
...(typeof promptReasoning === 'string'
|
|
178
|
+
? { reasoning: promptReasoning }
|
|
179
|
+
: {}),
|
|
180
|
+
...(typeof promptRagTranslate === 'string'
|
|
181
|
+
? { ragTranslate: promptRagTranslate }
|
|
182
|
+
: {}),
|
|
183
|
+
...(typeof promptHistorySummary === 'string'
|
|
184
|
+
? { historySummary: promptHistorySummary }
|
|
185
|
+
: {}),
|
|
186
|
+
}
|
|
187
|
+
: undefined;
|
|
188
|
+
}
|
|
189
|
+
export function resolvePipelineSelection(yaml) {
|
|
190
|
+
// Pipeline selection: `pipeline: { name, config }`. `name` is required;
|
|
191
|
+
// `config` is the plugin's opaque dialect (validated by the plugin's
|
|
192
|
+
// parseConfig at build time). A bare string (`pipeline: stepper`) is
|
|
193
|
+
// accepted as shorthand for `{ name: <string> }`.
|
|
194
|
+
const raw = yaml.pipeline;
|
|
195
|
+
if (raw === undefined || raw === null)
|
|
196
|
+
return {};
|
|
197
|
+
if (typeof raw === 'string')
|
|
198
|
+
return { pipeline: { name: raw } };
|
|
199
|
+
const obj = raw;
|
|
200
|
+
if (typeof obj.name !== 'string') {
|
|
201
|
+
throw new Error("pipeline: requires a 'name' (one of: flat, linear, dag, stepper, controller, controller-weak, or a registered plugin)");
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
pipeline: {
|
|
205
|
+
name: obj.name,
|
|
206
|
+
...(obj.config && typeof obj.config === 'object'
|
|
207
|
+
? { config: obj.config }
|
|
208
|
+
: {}),
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=resolve-config-sections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-config-sections.js","sourceRoot":"","sources":["../../src/smart-agent/resolve-config-sections.ts"],"names":[],"mappings":"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"}
|