@mcp-abap-adt/llm-agent-server-libs 25.0.0 → 27.0.1

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 (158) hide show
  1. package/dist/builders/controller-skill-pipeline-builder.d.ts +6 -5
  2. package/dist/builders/controller-skill-pipeline-builder.d.ts.map +1 -1
  3. package/dist/builders/controller-skill-pipeline-builder.js +49 -54
  4. package/dist/builders/controller-skill-pipeline-builder.js.map +1 -1
  5. package/dist/factories/controller-factory.d.ts +13 -10
  6. package/dist/factories/controller-factory.d.ts.map +1 -1
  7. package/dist/factories/controller-factory.js +33 -12
  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 +2 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +2 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/pipelines/controller-subagents.d.ts +11 -0
  16. package/dist/pipelines/controller-subagents.d.ts.map +1 -0
  17. package/dist/pipelines/controller-subagents.js +77 -0
  18. package/dist/pipelines/controller-subagents.js.map +1 -0
  19. package/dist/pipelines/controller.d.ts +11 -10
  20. package/dist/pipelines/controller.d.ts.map +1 -1
  21. package/dist/pipelines/controller.js +14 -65
  22. package/dist/pipelines/controller.js.map +1 -1
  23. package/dist/pipelines/coordinator-resolvers.d.ts +6 -11
  24. package/dist/pipelines/coordinator-resolvers.d.ts.map +1 -1
  25. package/dist/pipelines/coordinator-resolvers.js +7 -17
  26. package/dist/pipelines/coordinator-resolvers.js.map +1 -1
  27. package/dist/pipelines/dag.d.ts +9 -9
  28. package/dist/pipelines/dag.d.ts.map +1 -1
  29. package/dist/pipelines/dag.js +11 -22
  30. package/dist/pipelines/dag.js.map +1 -1
  31. package/dist/pipelines/flat.d.ts +4 -7
  32. package/dist/pipelines/flat.d.ts.map +1 -1
  33. package/dist/pipelines/flat.js +3 -8
  34. package/dist/pipelines/flat.js.map +1 -1
  35. package/dist/pipelines/linear.d.ts +8 -10
  36. package/dist/pipelines/linear.d.ts.map +1 -1
  37. package/dist/pipelines/linear.js +18 -11
  38. package/dist/pipelines/linear.js.map +1 -1
  39. package/dist/pipelines/parsers.d.ts +0 -3
  40. package/dist/pipelines/parsers.d.ts.map +1 -1
  41. package/dist/pipelines/parsers.js +4 -19
  42. package/dist/pipelines/parsers.js.map +1 -1
  43. package/dist/pipelines/server-context.d.ts +0 -5
  44. package/dist/pipelines/server-context.d.ts.map +1 -1
  45. package/dist/pipelines/server-context.js.map +1 -1
  46. package/dist/pipelines/stepper.d.ts +5 -4
  47. package/dist/pipelines/stepper.d.ts.map +1 -1
  48. package/dist/pipelines/stepper.js +5 -4
  49. package/dist/pipelines/stepper.js.map +1 -1
  50. package/dist/smart-agent/build-dag-coordinator-deps.d.ts +11 -22
  51. package/dist/smart-agent/build-dag-coordinator-deps.d.ts.map +1 -1
  52. package/dist/smart-agent/build-dag-coordinator-deps.js +21 -78
  53. package/dist/smart-agent/build-dag-coordinator-deps.js.map +1 -1
  54. package/dist/smart-agent/build-stepper-root.d.ts.map +1 -1
  55. package/dist/smart-agent/build-stepper-root.js +0 -1
  56. package/dist/smart-agent/build-stepper-root.js.map +1 -1
  57. package/dist/smart-agent/config-validator.d.ts +8 -1
  58. package/dist/smart-agent/config-validator.d.ts.map +1 -1
  59. package/dist/smart-agent/config-validator.js +200 -62
  60. package/dist/smart-agent/config-validator.js.map +1 -1
  61. package/dist/smart-agent/config.d.ts +7 -7
  62. package/dist/smart-agent/config.d.ts.map +1 -1
  63. package/dist/smart-agent/config.js +24 -11
  64. package/dist/smart-agent/config.js.map +1 -1
  65. package/dist/smart-agent/controller/types.d.ts +22 -15
  66. package/dist/smart-agent/controller/types.d.ts.map +1 -1
  67. package/dist/smart-agent/controller/types.js.map +1 -1
  68. package/dist/smart-agent/http/config-route-handler.d.ts +2 -0
  69. package/dist/smart-agent/http/config-route-handler.d.ts.map +1 -1
  70. package/dist/smart-agent/http/config-route-handler.js +20 -0
  71. package/dist/smart-agent/http/config-route-handler.js.map +1 -1
  72. package/dist/smart-agent/llm/role-llm-resolver.d.ts +23 -11
  73. package/dist/smart-agent/llm/role-llm-resolver.d.ts.map +1 -1
  74. package/dist/smart-agent/llm/role-llm-resolver.js +65 -37
  75. package/dist/smart-agent/llm/role-llm-resolver.js.map +1 -1
  76. package/dist/smart-agent/llm-config-map.d.ts +9 -1
  77. package/dist/smart-agent/llm-config-map.d.ts.map +1 -1
  78. package/dist/smart-agent/llm-config-map.js +27 -5
  79. package/dist/smart-agent/llm-config-map.js.map +1 -1
  80. package/dist/smart-agent/pipeline-settings.d.ts +50 -0
  81. package/dist/smart-agent/pipeline-settings.d.ts.map +1 -0
  82. package/dist/smart-agent/pipeline-settings.js +174 -0
  83. package/dist/smart-agent/pipeline-settings.js.map +1 -0
  84. package/dist/smart-agent/pipeline.d.ts +3 -63
  85. package/dist/smart-agent/pipeline.d.ts.map +1 -1
  86. package/dist/smart-agent/pipeline.js +3 -2
  87. package/dist/smart-agent/pipeline.js.map +1 -1
  88. package/dist/smart-agent/rag-config.d.ts +155 -0
  89. package/dist/smart-agent/rag-config.d.ts.map +1 -0
  90. package/dist/smart-agent/rag-config.js +62 -0
  91. package/dist/smart-agent/rag-config.js.map +1 -0
  92. package/dist/smart-agent/resolve-agent-embedder.d.ts +11 -10
  93. package/dist/smart-agent/resolve-agent-embedder.d.ts.map +1 -1
  94. package/dist/smart-agent/resolve-agent-embedder.js +37 -36
  95. package/dist/smart-agent/resolve-agent-embedder.js.map +1 -1
  96. package/dist/smart-agent/resolve-config-sections.d.ts +1 -1
  97. package/dist/smart-agent/resolve-config-sections.d.ts.map +1 -1
  98. package/dist/smart-agent/resolve-config-sections.js +124 -30
  99. package/dist/smart-agent/resolve-config-sections.js.map +1 -1
  100. package/dist/smart-agent/select-pipeline-plugin.d.ts +8 -0
  101. package/dist/smart-agent/select-pipeline-plugin.d.ts.map +1 -0
  102. package/dist/smart-agent/select-pipeline-plugin.js +26 -0
  103. package/dist/smart-agent/select-pipeline-plugin.js.map +1 -0
  104. package/dist/smart-agent/session-lifecycle/index.d.ts +38 -4
  105. package/dist/smart-agent/session-lifecycle/index.d.ts.map +1 -1
  106. package/dist/smart-agent/session-lifecycle/index.js +11 -1
  107. package/dist/smart-agent/session-lifecycle/index.js.map +1 -1
  108. package/dist/smart-agent/session-lifecycle/session-rag-registry.d.ts +39 -0
  109. package/dist/smart-agent/session-lifecycle/session-rag-registry.d.ts.map +1 -0
  110. package/dist/smart-agent/session-lifecycle/session-rag-registry.js +109 -0
  111. package/dist/smart-agent/session-lifecycle/session-rag-registry.js.map +1 -0
  112. package/dist/smart-agent/skill-plugins-config.d.ts +3 -2
  113. package/dist/smart-agent/skill-plugins-config.d.ts.map +1 -1
  114. package/dist/smart-agent/skill-plugins-config.js +12 -1
  115. package/dist/smart-agent/skill-plugins-config.js.map +1 -1
  116. package/dist/smart-agent/skill-plugins-host-factory.d.ts +9 -0
  117. package/dist/smart-agent/skill-plugins-host-factory.d.ts.map +1 -1
  118. package/dist/smart-agent/skill-plugins-host-factory.js +12 -6
  119. package/dist/smart-agent/skill-plugins-host-factory.js.map +1 -1
  120. package/dist/smart-agent/smart-server.d.ts +90 -78
  121. package/dist/smart-agent/smart-server.d.ts.map +1 -1
  122. package/dist/smart-agent/smart-server.js +201 -152
  123. package/dist/smart-agent/smart-server.js.map +1 -1
  124. package/dist/smart-agent/worker-llm.d.ts +18 -0
  125. package/dist/smart-agent/worker-llm.d.ts.map +1 -0
  126. package/dist/smart-agent/worker-llm.js +59 -0
  127. package/dist/smart-agent/worker-llm.js.map +1 -0
  128. package/dist/smart-agent/workers/worker-registry.d.ts +6 -14
  129. package/dist/smart-agent/workers/worker-registry.d.ts.map +1 -1
  130. package/dist/smart-agent/workers/worker-registry.js +2 -11
  131. package/dist/smart-agent/workers/worker-registry.js.map +1 -1
  132. package/dist/smart-agent/yaml-loader.d.ts +1 -1
  133. package/dist/smart-agent/yaml-loader.d.ts.map +1 -1
  134. package/dist/smart-agent/yaml-loader.js +20 -17
  135. package/dist/smart-agent/yaml-loader.js.map +1 -1
  136. package/package.json +8 -7
  137. package/dist/smart-agent/mcp/mcp-content.d.ts +0 -19
  138. package/dist/smart-agent/mcp/mcp-content.d.ts.map +0 -1
  139. package/dist/smart-agent/mcp/mcp-content.js +0 -31
  140. package/dist/smart-agent/mcp/mcp-content.js.map +0 -1
  141. package/dist/smart-agent/mcp/require-mcp-timeout.d.ts +0 -20
  142. package/dist/smart-agent/mcp/require-mcp-timeout.d.ts.map +0 -1
  143. package/dist/smart-agent/mcp/require-mcp-timeout.js +0 -23
  144. package/dist/smart-agent/mcp/require-mcp-timeout.js.map +0 -1
  145. package/dist/smart-agent/mcp-readiness-monitor.d.ts +0 -38
  146. package/dist/smart-agent/mcp-readiness-monitor.d.ts.map +0 -1
  147. package/dist/smart-agent/mcp-readiness-monitor.js +0 -81
  148. package/dist/smart-agent/mcp-readiness-monitor.js.map +0 -1
  149. package/dist/smart-agent/mcp-readiness-registry.d.ts +0 -37
  150. package/dist/smart-agent/mcp-readiness-registry.d.ts.map +0 -1
  151. package/dist/smart-agent/mcp-readiness-registry.js +0 -55
  152. package/dist/smart-agent/mcp-readiness-registry.js.map +0 -1
  153. package/dist/smart-agent/skill-plugins-config.test.d.ts +0 -2
  154. package/dist/smart-agent/skill-plugins-config.test.d.ts.map +0 -1
  155. package/dist/smart-agent/skill-plugins-config.test.js.map +0 -1
  156. package/dist/smart-agent/skill-plugins-host-factory.test.d.ts +0 -2
  157. package/dist/smart-agent/skill-plugins-host-factory.test.d.ts.map +0 -1
  158. package/dist/smart-agent/skill-plugins-host-factory.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/smart-agent/controller/types.ts"],"names":[],"mappings":"AAoCA,sDAAsD;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,oDAAoD;AACpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC;;;;;;;;kCAQkC;AAClC,MAAM,UAAU,gBAAgB,CAAC,CAAU;IACzC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,CAAC,CAAC,MAAM,GAAG,YAAY;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,iBAAiB;YAAE,OAAO,KAAK,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/smart-agent/controller/types.ts"],"names":[],"mappings":"AAmCA,sDAAsD;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,oDAAoD;AACpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC;;;;;;;;kCAQkC;AAClC,MAAM,UAAU,gBAAgB,CAAC,CAAU;IACzC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,CAAC,CAAC,MAAM,GAAG,YAAY;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,iBAAiB;YAAE,OAAO,KAAK,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -4,6 +4,8 @@ import type { SmartAgent } from '@mcp-abap-adt/llm-agent-libs';
4
4
  /** Exactly the SmartServer state PUT /v1/config touches — the hot-swap seam. */
5
5
  export interface IConfigUpdateTarget {
6
6
  readonly modelResolver?: IModelResolver;
7
+ /** The switch startup's model check obeys; a swapped-in model is checked the same way. */
8
+ readonly skipModelValidation: boolean;
7
9
  setMainLlm(llm: ILlm): void;
8
10
  setClassifierLlm(llm: ILlm): void;
9
11
  setHelperLlm(llm: ILlm): void;
@@ -1 +1 @@
1
- {"version":3,"file":"config-route-handler.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/http/config-route-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EACV,UAAU,EAEX,MAAM,8BAA8B,CAAC;AAGtC,gFAAgF;AAChF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC;IACxC,UAAU,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,gBAAgB,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9B,4FAA4F;IAC5F,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACrD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAaD;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA0Jf"}
1
+ {"version":3,"file":"config-route-handler.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/http/config-route-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EACV,UAAU,EAEX,MAAM,8BAA8B,CAAC;AAGtC,gFAAgF;AAChF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC;IACxC,0FAA0F;IAC1F,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,UAAU,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,gBAAgB,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9B,4FAA4F;IAC5F,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACrD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAaD;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAsLf"}
@@ -97,6 +97,26 @@ export async function handleConfigUpdate(req, res, smartAgent, target) {
97
97
  res.end(jsonError(String(err), 'server_error'));
98
98
  return;
99
99
  }
100
+ // A resolver only constructs: a wrong model name first fails on a call.
101
+ // Ask each new model once, as startup does, BEFORE anything is applied —
102
+ // otherwise the swap succeeds and every later request fails.
103
+ if (!target.skipModelValidation) {
104
+ const checks = [
105
+ [String(modelFields.mainModel), resolvedModels.mainLlm],
106
+ [String(modelFields.classifierModel), resolvedModels.classifierLlm],
107
+ [String(modelFields.helperModel), resolvedModels.helperLlm],
108
+ ];
109
+ for (const [name, llm] of checks) {
110
+ if (!llm)
111
+ continue;
112
+ const probe = await llm.chat([{ role: 'user', content: 'Reply with OK' }], undefined, { maxTokens: 10 });
113
+ if (!probe.ok) {
114
+ res.writeHead(400, { 'Content-Type': 'application/json' });
115
+ res.end(jsonError(`model "${name}" is not available: ${probe.error.message}`, 'invalid_request_error'));
116
+ return;
117
+ }
118
+ }
119
+ }
100
120
  }
101
121
  // --- All validation passed — apply mutations ---
102
122
  if (resolvedModels) {
@@ -1 +1 @@
1
- {"version":3,"file":"config-route-handler.js","sourceRoot":"","sources":["../../../src/smart-agent/http/config-route-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-route-handler.js","sourceRoot":"","sources":["../../../src/smart-agent/http/config-route-handler.ts"],"names":[],"mappings":"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"}
@@ -1,30 +1,42 @@
1
1
  import type { ILlm } from '@mcp-abap-adt/llm-agent';
2
- import { type NormalizedLlmMap } from '../config.js';
2
+ import type { NormalizedLlmMap } from '../config.js';
3
3
  import type { SmartServerLlmConfig } from '../smart-server.js';
4
- /** The real `makeLlm`-backed construction (the SmartServer seam's default). */
5
- export declare function makeDefaultRoleLlm(lc: SmartServerLlmConfig, mainTemp: number | undefined): Promise<ILlm>;
4
+ /** The server's answer to "which LLM?" — lookups only. Nothing here constructs on a
5
+ * caller's behalf, which is why `makeLlm` is not a member (§4.6.6). */
6
6
  export interface IRoleLlmResolver {
7
+ /** Default for a role: `main`/`classifier`/`helper` → the held instances; `planner`
8
+ * → the held helper when there is one; any other name → its `llm:` entry, built
9
+ * once and held; a name with no entry → the held `main`. */
7
10
  resolve(role: string): Promise<ILlm>;
8
- makeLlm(lc: SmartServerLlmConfig): Promise<ILlm>;
11
+ /** Strict: only an `llm:` entry of exactly this name; rejects, naming the key.
12
+ * A declared `main`/`classifier`/`helper` key answers with the held instance. */
13
+ resolveNamed(key: string): Promise<ILlm>;
9
14
  }
10
15
  export interface RoleLlmResolverDeps {
11
16
  getMain(): ILlm | undefined;
12
17
  getHelper(): ILlm | undefined;
13
18
  getClassifier(): ILlm | undefined;
14
19
  getLlmMap(): NormalizedLlmMap | undefined;
15
- getPipelineFallback(): SmartServerLlmConfig | undefined;
16
- makeLlm(lc: SmartServerLlmConfig): Promise<ILlm>;
20
+ /** Builds one `llm:` entry. Called at most once per key while builds succeed. */
21
+ build(entry: SmartServerLlmConfig): Promise<ILlm>;
17
22
  }
18
23
  /**
19
- * Resolve a per-role LLM through the normalized map → pipelineFallback chain.
20
- * Reads the role LLM instances through LIVE accessors so a config-reload
21
- * hot-swap of `main`/`helper`/`classifier` is observed transparently (the
22
- * SmartServer keeps the fields as source-of-truth).
24
+ * The default implementation's role map (§4.6.6). Held roles are read through LIVE
25
+ * accessors, so a `PUT /v1/config` swap of main/classifier/helper is observed by the
26
+ * next lookup; every other entry is built once per key and held (§4.6.5).
27
+ *
28
+ * One instance is one scope: what it builds lives as long as it does. `SmartServer`
29
+ * constructs one per server — the deployment scope, the only one it ships, because
30
+ * its sessions carry no caller credential. A consumer that builds from a session's
31
+ * credential constructs one per session and drops it with the session.
23
32
  */
24
33
  export declare class RoleLlmResolver implements IRoleLlmResolver {
25
34
  private readonly deps;
35
+ private readonly built;
26
36
  constructor(deps: RoleLlmResolverDeps);
27
- makeLlm(lc: SmartServerLlmConfig): Promise<ILlm>;
28
37
  resolve(role: string): Promise<ILlm>;
38
+ resolveNamed(key: string): Promise<ILlm>;
39
+ private heldMain;
40
+ private entry;
29
41
  }
30
42
  //# sourceMappingURL=role-llm-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"role-llm-resolver.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/llm/role-llm-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,KAAK,gBAAgB,EAAoB,MAAM,cAAc,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,oBAAoB,EACxB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAAC,IAAI,CAAC,CAef;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,IAAI,IAAI,GAAG,SAAS,CAAC;IAC5B,SAAS,IAAI,IAAI,GAAG,SAAS,CAAC;IAC9B,aAAa,IAAI,IAAI,GAAG,SAAS,CAAC;IAClC,SAAS,IAAI,gBAAgB,GAAG,SAAS,CAAC;IAC1C,mBAAmB,IAAI,oBAAoB,GAAG,SAAS,CAAC;IACxD,OAAO,CAAC,EAAE,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,mBAAmB;IAEtD,OAAO,CAAC,EAAE,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgB3C"}
1
+ {"version":3,"file":"role-llm-resolver.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/llm/role-llm-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D;wEACwE;AACxE,MAAM,WAAW,gBAAgB;IAC/B;;iEAE6D;IAC7D,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC;sFACkF;IAClF,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,IAAI,IAAI,GAAG,SAAS,CAAC;IAC5B,SAAS,IAAI,IAAI,GAAG,SAAS,CAAC;IAC9B,aAAa,IAAI,IAAI,GAAG,SAAS,CAAC;IAClC,SAAS,IAAI,gBAAgB,GAAG,SAAS,CAAC;IAC1C,iFAAiF;IACjF,KAAK,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAED;;;;;;;;;GASG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IAG1C,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;gBAE7B,IAAI,EAAE,mBAAmB;IAEhD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAepC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB9C,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,KAAK;CAUd"}
@@ -1,49 +1,77 @@
1
- import { makeLlm } from '@mcp-abap-adt/llm-agent-libs';
2
- import { resolveLlmConfig } from '../config.js';
3
- /** The real `makeLlm`-backed construction (the SmartServer seam's default). */
4
- export function makeDefaultRoleLlm(lc, mainTemp) {
5
- return makeLlm({
6
- provider: lc.provider ?? 'deepseek',
7
- apiKey: lc.apiKey,
8
- baseURL: lc.url,
9
- model: lc.model,
10
- // Hand-copied field lists are how a config stops arriving: maxTokens was
11
- // declared on SmartServerLlmConfig and never passed on, and whenThrottled
12
- // would have gone the same way. Anything added to that type belongs here.
13
- maxTokens: lc.maxTokens,
14
- whenThrottled: lc.whenThrottled,
15
- }, Number(lc.temperature ?? mainTemp ?? 0.7));
16
- }
17
1
  /**
18
- * Resolve a per-role LLM through the normalized map → pipelineFallback chain.
19
- * Reads the role LLM instances through LIVE accessors so a config-reload
20
- * hot-swap of `main`/`helper`/`classifier` is observed transparently (the
21
- * SmartServer keeps the fields as source-of-truth).
2
+ * The default implementation's role map (§4.6.6). Held roles are read through LIVE
3
+ * accessors, so a `PUT /v1/config` swap of main/classifier/helper is observed by the
4
+ * next lookup; every other entry is built once per key and held (§4.6.5).
5
+ *
6
+ * One instance is one scope: what it builds lives as long as it does. `SmartServer`
7
+ * constructs one per server — the deployment scope, the only one it ships, because
8
+ * its sessions carry no caller credential. A consumer that builds from a session's
9
+ * credential constructs one per session and drops it with the session.
22
10
  */
23
11
  export class RoleLlmResolver {
24
12
  deps;
13
+ built = new Map();
25
14
  constructor(deps) {
26
15
  this.deps = deps;
27
16
  }
28
- makeLlm(lc) {
29
- return this.deps.makeLlm(lc);
30
- }
31
17
  async resolve(role) {
18
+ if (role === 'main')
19
+ return this.heldMain(role);
20
+ if (role === 'classifier') {
21
+ const classifier = this.deps.getClassifier();
22
+ if (classifier)
23
+ return classifier;
24
+ }
25
+ if (role === 'helper' || role === 'planner') {
26
+ const helper = this.deps.getHelper();
27
+ if (helper)
28
+ return helper;
29
+ }
30
+ const map = this.deps.getLlmMap();
31
+ if (map && Object.hasOwn(map, role))
32
+ return this.entry(role, map[role]);
33
+ return this.heldMain(role);
34
+ }
35
+ async resolveNamed(key) {
36
+ const map = this.deps.getLlmMap();
37
+ if (!map || !Object.hasOwn(map, key)) {
38
+ throw new Error(`llm: has no entry named '${key}' — a key named in configuration is resolved ` +
39
+ `strictly (declared: ${map ? Object.keys(map).join(', ') : 'none'})`);
40
+ }
41
+ // A declared key that names a held role answers with the HELD instance — the one
42
+ // PUT /v1/config swaps — never a second build of the same entry (§4.6.6).
43
+ if (key === 'main')
44
+ return this.heldMain(key);
45
+ if (key === 'classifier') {
46
+ const classifier = this.deps.getClassifier();
47
+ if (classifier)
48
+ return classifier;
49
+ }
50
+ if (key === 'helper') {
51
+ const helper = this.deps.getHelper();
52
+ if (helper)
53
+ return helper;
54
+ }
55
+ return this.entry(key, map[key]);
56
+ }
57
+ heldMain(asked) {
32
58
  const main = this.deps.getMain();
33
- const helper = this.deps.getHelper();
34
- const classifier = this.deps.getClassifier();
35
- if (role === 'main' && main)
36
- return main;
37
- if ((role === 'helper' || role === 'planner') && helper)
38
- return helper;
39
- if (role === 'classifier' && classifier)
40
- return classifier;
41
- const cfg = resolveLlmConfig(this.deps.getLlmMap(), role, this.deps.getPipelineFallback());
42
- if (cfg)
43
- return this.deps.makeLlm(cfg);
44
- if (main)
45
- return main;
46
- throw new Error(`cannot resolve LLM for role '${role}': no config`);
59
+ if (!main) {
60
+ throw new Error(`cannot resolve LLM for role '${asked}': no main LLM is held`);
61
+ }
62
+ return main;
63
+ }
64
+ entry(key, cfg) {
65
+ const held = this.built.get(key);
66
+ if (held)
67
+ return held;
68
+ const building = this.deps.build(cfg);
69
+ this.built.set(key, building);
70
+ building.catch(() => {
71
+ if (this.built.get(key) === building)
72
+ this.built.delete(key);
73
+ });
74
+ return building;
47
75
  }
48
76
  }
49
77
  //# sourceMappingURL=role-llm-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"role-llm-resolver.js","sourceRoot":"","sources":["../../../src/smart-agent/llm/role-llm-resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,OAAO,EAAyB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGvE,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAChC,EAAwB,EACxB,QAA4B;IAE5B,OAAO,OAAO,CACZ;QACE,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,UAAU;QACnC,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,OAAO,EAAE,EAAE,CAAC,GAAG;QACf,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,yEAAyE;QACzE,0EAA0E;QAC1E,0EAA0E;QAC1E,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,aAAa,EAAE,EAAE,CAAC,aAAa;KAChC,EACD,MAAM,CAAC,EAAE,CAAC,WAAW,IAAI,QAAQ,IAAI,GAAG,CAAC,CAC1C,CAAC;AACJ,CAAC;AAgBD;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,IAAyB;QAAzB,SAAI,GAAJ,IAAI,CAAqB;IAAG,CAAC;IAE1D,OAAO,CAAC,EAAwB;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7C,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACzC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QACvE,IAAI,IAAI,KAAK,YAAY,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;QAC3D,MAAM,GAAG,GAAG,gBAAgB,CAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EACrB,IAAI,EACJ,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAChC,CAAC;QACF,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,cAAc,CAAC,CAAC;IACtE,CAAC;CACF"}
1
+ {"version":3,"file":"role-llm-resolver.js","sourceRoot":"","sources":["../../../src/smart-agent/llm/role-llm-resolver.ts"],"names":[],"mappings":"AAyBA;;;;;;;;;GASG;AACH,MAAM,OAAO,eAAe;IAGG;IAFZ,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE1D,YAA6B,IAAyB;QAAzB,SAAI,GAAJ,IAAI,CAAqB;IAAG,CAAC;IAE1D,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC7C,IAAI,UAAU;gBAAE,OAAO,UAAU,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC5B,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,4BAA4B,GAAG,+CAA+C;gBAC5E,uBAAuB,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CACvE,CAAC;QACJ,CAAC;QACD,iFAAiF;QACjF,0EAA0E;QAC1E,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC7C,IAAI,UAAU;gBAAE,OAAO,UAAU,CAAC;QACpC,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC5B,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC;IAEO,QAAQ,CAAC,KAAa;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,gCAAgC,KAAK,wBAAwB,CAC9D,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,GAAW,EAAE,GAAyB;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC9B,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE;YAClB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
@@ -6,7 +6,7 @@ export type NormalizedLlmMap = {
6
6
  /**
7
7
  * Normalize the optional top-level `llm:` block.
8
8
  * - undefined → undefined (pipeline-only configs stay valid)
9
- * - flat shape (has `provider` | `apiKey` | `model` | `url`) → { main: flat } (backward compat)
9
+ * - flat shape (has `provider` | `credentialRef` | `model` | `url`) → { main: flat } (backward compat)
10
10
  * - map shape → must include `main`; returned as NormalizedLlmMap
11
11
  */
12
12
  export declare function normalizeLlmConfig(input?: SmartServerLlmConfig | LlmConfigMap): NormalizedLlmMap | undefined;
@@ -35,4 +35,12 @@ export declare function resolveReviewerLlmName(block: {
35
35
  reviewerLlm?: string;
36
36
  plannerLlm?: string;
37
37
  } | undefined, warn: (msg: string) => void): string | undefined;
38
+ /**
39
+ * Fields that belong to an LLM configuration and therefore to an `llm:` entry
40
+ * only. A pipeline section or a worker file that carries one of them is holding
41
+ * an inline model, which §4.6.7 refuses: the file configures each model once.
42
+ */
43
+ export declare const INLINE_LLM_CONFIG_FIELDS: readonly string[];
44
+ /** The keys a file may name: a flat `llm:` block normalizes to `{ main }`. */
45
+ export declare function llmKeySet(map: NormalizedLlmMap | undefined): ReadonlySet<string>;
38
46
  //# sourceMappingURL=llm-config-map.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"llm-config-map.d.ts","sourceRoot":"","sources":["../../src/smart-agent/llm-config-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAChE,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,GAAG,YAAY,CAAC;AAmB7E;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,CAAC,EAAE,oBAAoB,GAAG,YAAY,GAC1C,gBAAgB,GAAG,SAAS,CAY9B;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,gBAAgB,GAAG,SAAS,EACjC,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,oBAAoB,GAAG,SAAS,CAGlC;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,gBAAgB,GAAG,SAAS,EACjC,IAAI,CAAC,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,oBAAoB,GACtC,oBAAoB,GAAG,SAAS,CAIlC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EAChE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC1B,MAAM,GAAG,SAAS,CAUpB"}
1
+ {"version":3,"file":"llm-config-map.d.ts","sourceRoot":"","sources":["../../src/smart-agent/llm-config-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAChE,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,GAAG,YAAY,CAAC;AAoB7E;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,CAAC,EAAE,oBAAoB,GAAG,YAAY,GAC1C,gBAAgB,GAAG,SAAS,CAY9B;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,gBAAgB,GAAG,SAAS,EACjC,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,oBAAoB,GAAG,SAAS,CAGlC;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,gBAAgB,GAAG,SAAS,EACjC,IAAI,CAAC,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,oBAAoB,GACtC,oBAAoB,GAAG,SAAS,CAIlC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EAChE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC1B,MAAM,GAAG,SAAS,CAUpB;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAWrD,CAAC;AAEF,8EAA8E;AAC9E,wBAAgB,SAAS,CACvB,GAAG,EAAE,gBAAgB,GAAG,SAAS,GAChC,WAAW,CAAC,MAAM,CAAC,CAErB"}
@@ -1,21 +1,22 @@
1
1
  /**
2
2
  * Detect whether an object is a flat SmartServerLlmConfig shape.
3
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.
4
+ * fields: `provider`, `credentialRef`, `model`, or `url`. This covers keyless
5
+ * providers (Ollama, SAP AI Core) that omit `credentialRef` — using
6
+ * `credentialRef`-only detection silently misclassified those configs as a
7
+ * "map" shape.
7
8
  */
8
9
  function isFlatLlmConfig(input) {
9
10
  const flat = input;
10
11
  return (typeof flat.provider === 'string' ||
11
- typeof flat.apiKey === 'string' ||
12
+ typeof flat.credentialRef === 'string' ||
12
13
  typeof flat.model === 'string' ||
13
14
  typeof flat.url === 'string');
14
15
  }
15
16
  /**
16
17
  * Normalize the optional top-level `llm:` block.
17
18
  * - undefined → undefined (pipeline-only configs stay valid)
18
- * - flat shape (has `provider` | `apiKey` | `model` | `url`) → { main: flat } (backward compat)
19
+ * - flat shape (has `provider` | `credentialRef` | `model` | `url`) → { main: flat } (backward compat)
19
20
  * - map shape → must include `main`; returned as NormalizedLlmMap
20
21
  */
21
22
  export function normalizeLlmConfig(input) {
@@ -72,4 +73,25 @@ export function resolveReviewerLlmName(block, warn) {
72
73
  }
73
74
  return undefined;
74
75
  }
76
+ /**
77
+ * Fields that belong to an LLM configuration and therefore to an `llm:` entry
78
+ * only. A pipeline section or a worker file that carries one of them is holding
79
+ * an inline model, which §4.6.7 refuses: the file configures each model once.
80
+ */
81
+ export const INLINE_LLM_CONFIG_FIELDS = [
82
+ 'provider',
83
+ 'model',
84
+ 'url',
85
+ 'apiKey',
86
+ 'credentialRef',
87
+ 'temperature',
88
+ 'classifierTemperature',
89
+ 'maxTokens',
90
+ 'whenThrottled',
91
+ 'resourceGroup',
92
+ ];
93
+ /** The keys a file may name: a flat `llm:` block normalizes to `{ main }`. */
94
+ export function llmKeySet(map) {
95
+ return new Set(map ? Object.keys(map) : []);
96
+ }
75
97
  //# sourceMappingURL=llm-config-map.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"llm-config-map.js","sourceRoot":"","sources":["../../src/smart-agent/llm-config-map.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,KAA0C;IACjE,MAAM,IAAI,GAAG,KAAsC,CAAC;IACpD,OAAO,CACL,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;QACjC,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ;QACtC,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;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAsB;IACzD,UAAU;IACV,OAAO;IACP,KAAK;IACL,QAAQ;IACR,eAAe;IACf,aAAa;IACb,uBAAuB;IACvB,WAAW;IACX,eAAe;IACf,eAAe;CAChB,CAAC;AAEF,8EAA8E;AAC9E,MAAM,UAAU,SAAS,CACvB,GAAiC;IAEjC,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,50 @@
1
+ import type { FinalizerYaml } from '../pipelines/coordinator-resolvers.js';
2
+ import type { ControllerConfig } from './controller/types.js';
3
+ import { type NormalizedLlmMap } from './llm-config-map.js';
4
+ import { type StepperCoordinatorConfig } from './stepper-config.js';
5
+ declare const PLANNING: readonly ["one-shot", "replan-on-error", "skill-steps"];
6
+ declare const DISPATCH: readonly ["subagent", "self", "hybrid"];
7
+ export interface LinearPipelineSettings {
8
+ planning: (typeof PLANNING)[number];
9
+ /** Omitted → `resolveCoordinatorDispatchKind`'s default. */
10
+ dispatch?: (typeof DISPATCH)[number];
11
+ maxSteps: number;
12
+ maxRetriesPerStep: number;
13
+ failPolicy: 'abort' | 'continue';
14
+ }
15
+ export declare function parseLinearSettings(raw: unknown): LinearPipelineSettings;
16
+ export declare function parseStepperSettings(raw: unknown): StepperCoordinatorConfig;
17
+ export interface DagPipelineSettings {
18
+ /** `planner.plannerLlm` — an `llm:` key; omitted → the `planner` role's default. */
19
+ plannerLlm?: string;
20
+ /** Present iff the section has a `reviewer:` block; an omitted key → the role default. */
21
+ reviewer?: {
22
+ reviewerLlm?: string;
23
+ };
24
+ finalizer?: FinalizerYaml;
25
+ stateOracle?: string;
26
+ activation: 'auto' | 'explicit';
27
+ errorStrategy?: {
28
+ type: 'replan';
29
+ maxReplans?: number;
30
+ } | {
31
+ type: 'abort';
32
+ };
33
+ maxRoundTrips?: number;
34
+ }
35
+ export declare function parseDagSettings(raw: unknown, warn: (msg: string) => void): DagPipelineSettings;
36
+ /** The `llm:` keys a dag section NAMED — each must exist, checked at startup. */
37
+ export declare function dagNamedLlmKeys(settings: DagPipelineSettings): string[];
38
+ /**
39
+ * Refuse, at startup, a key a built-in section named that has no `llm:` entry — the
40
+ * same answer `resolveNamedLlm` would give at the first session, given while the
41
+ * operator is still watching (§4.6.7). Task B15 adds controller's and the worker
42
+ * files' keys to the callers.
43
+ */
44
+ export declare function assertNamedLlmKeys(keys: readonly string[], map: NormalizedLlmMap | undefined, where: string): void;
45
+ /** Moved from `ControllerPipelinePlugin.parseConfig` (`controller.ts:83-150`) with only
46
+ * the section guard changed. `subagents.<role>` names an `llm:` key; a named key
47
+ * with no entry is refused here, at startup. */
48
+ export declare function parseControllerSettings(raw: unknown, llmKeys: ReadonlySet<string>): ControllerConfig;
49
+ export {};
50
+ //# sourceMappingURL=pipeline-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-settings.d.ts","sourceRoot":"","sources":["../../src/smart-agent/pipeline-settings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAC;AAiC7B,QAAA,MAAM,QAAQ,yDAA0D,CAAC;AACzE,QAAA,MAAM,QAAQ,yCAA0C,CAAC;AAEzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IACpC,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,GAAG,UAAU,CAAC;CAClC;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAyBxE;AAID,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,wBAAwB,CAE3E;AAID,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC1B,mBAAmB,CAiErB;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAevE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,gBAAgB,GAAG,SAAS,EACjC,KAAK,EAAE,MAAM,GACZ,IAAI,CAQN;AAID;;iDAEiD;AACjD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAC3B,gBAAgB,CA0DlB"}
@@ -0,0 +1,174 @@
1
+ import { parseControllerSubagents } from '../pipelines/controller-subagents.js';
2
+ import { resolveReviewerLlmName, } from './llm-config-map.js';
3
+ import { parseStepperCoordinatorConfig, } from './stepper-config.js';
4
+ function asSection(raw, pipeline) {
5
+ if (raw === undefined || raw === null)
6
+ return {};
7
+ if (typeof raw !== 'object' || Array.isArray(raw)) {
8
+ throw new Error(`pipeline '${pipeline}': 'pipeline.config' must be an object, got ${Array.isArray(raw) ? 'an array' : typeof raw}`);
9
+ }
10
+ return raw;
11
+ }
12
+ function optionalKey(value, where) {
13
+ if (value === undefined)
14
+ return undefined;
15
+ if (typeof value !== 'string' || value === '') {
16
+ throw new Error(`${where} must name an llm: key (a non-empty string), got ${JSON.stringify(value)}`);
17
+ }
18
+ return value;
19
+ }
20
+ // ---- linear -------------------------------------------------------------
21
+ const PLANNING = ['one-shot', 'replan-on-error', 'skill-steps'];
22
+ const DISPATCH = ['subagent', 'self', 'hybrid'];
23
+ export function parseLinearSettings(raw) {
24
+ const cfg = asSection(raw, 'linear');
25
+ const planning = cfg.planning ?? 'one-shot';
26
+ if (!PLANNING.includes(planning)) {
27
+ throw new Error(`Unknown coordinator.planning strategy: '${String(planning)}'. Allowed: ${PLANNING.join(', ')}.`);
28
+ }
29
+ if (cfg.dispatch !== undefined &&
30
+ !DISPATCH.includes(cfg.dispatch)) {
31
+ throw new Error(`Unknown coordinator.dispatch strategy: '${String(cfg.dispatch)}'. Allowed: ${DISPATCH.join(', ')}.`);
32
+ }
33
+ return {
34
+ planning: planning,
35
+ ...(cfg.dispatch !== undefined
36
+ ? { dispatch: cfg.dispatch }
37
+ : {}),
38
+ maxSteps: cfg.maxSteps ?? 10,
39
+ maxRetriesPerStep: cfg.maxRetriesPerStep ?? 1,
40
+ failPolicy: cfg.failPolicy ?? 'abort',
41
+ };
42
+ }
43
+ // ---- stepper ------------------------------------------------------------
44
+ export function parseStepperSettings(raw) {
45
+ return parseStepperCoordinatorConfig(asSection(raw, 'stepper'));
46
+ }
47
+ export function parseDagSettings(raw, warn) {
48
+ const cfg = asSection(raw, 'dag');
49
+ if (cfg.planner === undefined) {
50
+ throw new Error("pipeline 'dag' requires a 'planner' in its config");
51
+ }
52
+ const block = (v) => typeof v === 'object' && v !== null ? v : {};
53
+ const plannerLlm = optionalKey(block(cfg.planner).plannerLlm, "pipeline 'dag': 'planner.plannerLlm'");
54
+ let reviewer;
55
+ if (cfg.reviewer !== undefined) {
56
+ const name = resolveReviewerLlmName(block(cfg.reviewer), warn);
57
+ const reviewerLlm = optionalKey(name, "pipeline 'dag': 'reviewer.reviewerLlm'");
58
+ reviewer = reviewerLlm !== undefined ? { reviewerLlm } : {};
59
+ }
60
+ const activation = cfg.activation ?? 'explicit';
61
+ if (activation !== 'auto' && activation !== 'explicit') {
62
+ throw new Error(`Unknown coordinator.activation strategy: '${String(activation)}'. Allowed: auto, explicit.`);
63
+ }
64
+ const es = block(cfg.errorStrategy);
65
+ const errorStrategy = es.type === 'replan'
66
+ ? {
67
+ type: 'replan',
68
+ ...(typeof es.maxReplans === 'number'
69
+ ? { maxReplans: es.maxReplans }
70
+ : {}),
71
+ }
72
+ : es.type === 'abort'
73
+ ? { type: 'abort' }
74
+ : undefined;
75
+ const finalizer = cfg.finalizer;
76
+ optionalKey(finalizer?.finalizerLlm, "pipeline 'dag': 'finalizer.finalizerLlm'");
77
+ return {
78
+ ...(plannerLlm !== undefined ? { plannerLlm } : {}),
79
+ ...(reviewer !== undefined ? { reviewer } : {}),
80
+ ...(finalizer !== undefined ? { finalizer } : {}),
81
+ ...(typeof cfg.stateOracle === 'string'
82
+ ? { stateOracle: cfg.stateOracle }
83
+ : {}),
84
+ activation: activation,
85
+ ...(errorStrategy !== undefined ? { errorStrategy } : {}),
86
+ ...(typeof cfg.maxRoundTrips === 'number'
87
+ ? { maxRoundTrips: cfg.maxRoundTrips }
88
+ : {}),
89
+ };
90
+ }
91
+ /** The `llm:` keys a dag section NAMED — each must exist, checked at startup. */
92
+ export function dagNamedLlmKeys(settings) {
93
+ const keys = [];
94
+ if (settings.plannerLlm !== undefined)
95
+ keys.push(settings.plannerLlm);
96
+ if (settings.reviewer?.reviewerLlm !== undefined)
97
+ keys.push(settings.reviewer.reviewerLlm);
98
+ const kind = settings.finalizer?.type ?? 'passthrough';
99
+ const finalizerLlm = settings.finalizer?.finalizerLlm;
100
+ if (kind !== 'passthrough' &&
101
+ kind !== 'template' &&
102
+ finalizerLlm !== undefined) {
103
+ keys.push(finalizerLlm);
104
+ }
105
+ return keys;
106
+ }
107
+ /**
108
+ * Refuse, at startup, a key a built-in section named that has no `llm:` entry — the
109
+ * same answer `resolveNamedLlm` would give at the first session, given while the
110
+ * operator is still watching (§4.6.7). Task B15 adds controller's and the worker
111
+ * files' keys to the callers.
112
+ */
113
+ export function assertNamedLlmKeys(keys, map, where) {
114
+ for (const key of keys) {
115
+ if (map && Object.hasOwn(map, key))
116
+ continue;
117
+ throw new Error(`${where} names llm: key '${key}', but llm: has no entry of that name ` +
118
+ `(declared: ${map ? Object.keys(map).join(', ') : 'none'})`);
119
+ }
120
+ }
121
+ // ---- controller ---------------------------------------------------------
122
+ /** Moved from `ControllerPipelinePlugin.parseConfig` (`controller.ts:83-150`) with only
123
+ * the section guard changed. `subagents.<role>` names an `llm:` key; a named key
124
+ * with no entry is refused here, at startup. */
125
+ export function parseControllerSettings(raw, llmKeys) {
126
+ const cfg = asSection(raw, 'controller');
127
+ const targetStateRaw = (cfg.targetState ?? {});
128
+ const sessionMemoryRaw = (cfg.sessionMemory ?? {});
129
+ const budgetsRaw = (cfg.budgets ?? {});
130
+ if ('planner' in cfg) {
131
+ throw new Error('controller: `planner:` removed — capability is preset-encoded. Select ' +
132
+ 'pipeline: { name: controller } (smart-executor) or ' +
133
+ '{ name: controller-weak } (weak-executor), or pass the kind to ' +
134
+ '`new ControllerFactory().build(config, deps, "weak-executor")` when ' +
135
+ 'composing in code. No `planner:` alias exists.');
136
+ }
137
+ const requireInt = (key, min) => {
138
+ const v = budgetsRaw[key];
139
+ if (v === undefined)
140
+ return;
141
+ if (typeof v !== 'number' || !Number.isInteger(v) || v < min) {
142
+ throw new Error(`controller: 'budgets.${key}' must be a ${min > 0 ? 'positive' : 'non-negative'} finite integer (ms), got ${JSON.stringify(v)}`);
143
+ }
144
+ };
145
+ requireInt('maxWaitMs', 1);
146
+ requireInt('maxTotalWaitMs', 0);
147
+ return {
148
+ subagents: parseControllerSubagents(cfg.subagents, llmKeys),
149
+ targetState: {
150
+ strategy: 'auto',
151
+ distanceThreshold: 0.25,
152
+ ...targetStateRaw,
153
+ },
154
+ sessionMemory: {
155
+ collection: 'session-memory',
156
+ ...sessionMemoryRaw,
157
+ },
158
+ budgets: {
159
+ maxSteps: 20,
160
+ maxRetries: 3,
161
+ maxRewinds: 5,
162
+ maxToolCalls: 10,
163
+ maxDigestChars: 500,
164
+ maxIntentChars: 120,
165
+ maxActiveSteps: 16,
166
+ maxBoardChars: 12000,
167
+ keepRecentDigests: 8,
168
+ maxWaitMs: 600_000,
169
+ maxTotalWaitMs: 1_800_000,
170
+ ...budgetsRaw,
171
+ },
172
+ };
173
+ }
174
+ //# sourceMappingURL=pipeline-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-settings.js","sourceRoot":"","sources":["../../src/smart-agent/pipeline-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAGhF,OAAO,EAEL,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,6BAA6B,GAE9B,MAAM,qBAAqB,CAAC;AAW7B,SAAS,SAAS,CAAC,GAAY,EAAE,QAAgB;IAC/C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACjD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,aAAa,QAAQ,+CAA+C,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CACnH,CAAC;IACJ,CAAC;IACD,OAAO,GAAc,CAAC;AACxB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,KAAa;IAChD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,oDAAoD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CACpF,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4EAA4E;AAE5E,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,iBAAiB,EAAE,aAAa,CAAU,CAAC;AACzE,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AAWzD,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,UAAU,CAAC;IAC5C,IAAI,CAAE,QAA+B,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CACb,2CAA2C,MAAM,CAAC,QAAQ,CAAC,eAAe,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACjG,CAAC;IACJ,CAAC;IACD,IACE,GAAG,CAAC,QAAQ,KAAK,SAAS;QAC1B,CAAE,QAA+B,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EACxD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,2CAA2C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACrG,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,QAA8C;QACxD,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS;YAC5B,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAA8C,EAAE;YAClE,CAAC,CAAC,EAAE,CAAC;QACP,QAAQ,EAAG,GAAG,CAAC,QAA+B,IAAI,EAAE;QACpD,iBAAiB,EAAG,GAAG,CAAC,iBAAwC,IAAI,CAAC;QACrE,UAAU,EAAG,GAAG,CAAC,UAA+C,IAAI,OAAO;KAC5E,CAAC;AACJ,CAAC;AAED,4EAA4E;AAE5E,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,OAAO,6BAA6B,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;AAClE,CAAC;AAgBD,MAAM,UAAU,gBAAgB,CAC9B,GAAY,EACZ,IAA2B;IAE3B,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClC,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,CAAU,EAAW,EAAE,CACpC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAE,CAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5D,MAAM,UAAU,GAAG,WAAW,CAC5B,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,UAAU,EAC7B,sCAAsC,CACvC,CAAC;IAEF,IAAI,QAAyC,CAAC;IAC9C,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,sBAAsB,CACjC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAkD,EACpE,IAAI,CACL,CAAC;QACF,MAAM,WAAW,GAAG,WAAW,CAC7B,IAAI,EACJ,wCAAwC,CACzC,CAAC;QACF,QAAQ,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,UAAU,CAAC;IAChD,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CACb,6CAA6C,MAAM,CAAC,UAAU,CAAC,6BAA6B,CAC7F,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACpC,MAAM,aAAa,GACjB,EAAE,CAAC,IAAI,KAAK,QAAQ;QAClB,CAAC,CAAC;YACE,IAAI,EAAE,QAAQ;YACd,GAAG,CAAC,OAAO,EAAE,CAAC,UAAU,KAAK,QAAQ;gBACnC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE;gBAC/B,CAAC,CAAC,EAAE,CAAC;SACR;QACH,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,OAAO;YACnB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;YACnB,CAAC,CAAC,SAAS,CAAC;IAElB,MAAM,SAAS,GAAG,GAAG,CAAC,SAAsC,CAAC;IAC7D,WAAW,CACT,SAAS,EAAE,YAAY,EACvB,0CAA0C,CAC3C,CAAC;IAEF,OAAO;QACL,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ;YACrC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE;YAClC,CAAC,CAAC,EAAE,CAAC;QACP,UAAU,EAAE,UAA+C;QAC3D,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ;YACvC,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE;YACtC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAAC,QAA6B;IAC3D,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACtE,IAAI,QAAQ,CAAC,QAAQ,EAAE,WAAW,KAAK,SAAS;QAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,IAAI,aAAa,CAAC;IACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACtD,IACE,IAAI,KAAK,aAAa;QACtB,IAAI,KAAK,UAAU;QACnB,YAAY,KAAK,SAAS,EAC1B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAuB,EACvB,GAAiC,EACjC,KAAa;IAEb,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;YAAE,SAAS;QAC7C,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,oBAAoB,GAAG,wCAAwC;YACrE,cAAc,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,4EAA4E;AAE5E;;iDAEiD;AACjD,MAAM,UAAU,uBAAuB,CACrC,GAAY,EACZ,OAA4B;IAE5B,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAEzC,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAA4B,CAAC;IAC1E,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAA4B,CAAC;IAC9E,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAC;IAElE,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,wEAAwE;YACtE,qDAAqD;YACrD,iEAAiE;YACjE,sEAAsE;YACtE,gDAAgD,CACnD,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,CACjB,GAAmC,EACnC,GAAW,EACL,EAAE;QACR,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO;QAC5B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CACb,wBAAwB,GAAG,eAAe,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,6BAA6B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAChI,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IACF,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC3B,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAEhC,OAAO;QACL,SAAS,EAAE,wBAAwB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;QAC3D,WAAW,EAAE;YACX,QAAQ,EAAE,MAAM;YAChB,iBAAiB,EAAE,IAAI;YACvB,GAAG,cAAc;SACiB;QACpC,aAAa,EAAE;YACb,UAAU,EAAE,gBAAgB;YAC5B,GAAG,gBAAgB;SACiB;QACtC,OAAO,EAAE;YACP,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,EAAE;YAChB,cAAc,EAAE,GAAG;YACnB,cAAc,EAAE,GAAG;YACnB,cAAc,EAAE,EAAE;YAClB,aAAa,EAAE,KAAK;YACpB,iBAAiB,EAAE,CAAC;YACpB,SAAS,EAAE,OAAO;YAClB,cAAc,EAAE,SAAS;YACzB,GAAG,UAAU;SACiB;KACjC,CAAC;AACJ,CAAC"}