@mcp-abap-adt/llm-agent-libs 12.0.2 → 12.0.4

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 (361) hide show
  1. package/dist/adapters/index.d.ts +4 -0
  2. package/dist/adapters/index.d.ts.map +1 -0
  3. package/dist/adapters/index.js +4 -0
  4. package/dist/adapters/index.js.map +1 -0
  5. package/dist/adapters/llm-adapter.d.ts +24 -0
  6. package/dist/adapters/llm-adapter.d.ts.map +1 -0
  7. package/dist/adapters/llm-adapter.js +345 -0
  8. package/dist/adapters/llm-adapter.js.map +1 -0
  9. package/dist/adapters/llm-provider-bridge.d.ts +30 -0
  10. package/dist/adapters/llm-provider-bridge.d.ts.map +1 -0
  11. package/dist/adapters/llm-provider-bridge.js +122 -0
  12. package/dist/adapters/llm-provider-bridge.js.map +1 -0
  13. package/dist/adapters/non-streaming-llm.d.ts +18 -0
  14. package/dist/adapters/non-streaming-llm.d.ts.map +1 -0
  15. package/dist/adapters/non-streaming-llm.js +44 -0
  16. package/dist/adapters/non-streaming-llm.js.map +1 -0
  17. package/dist/agent.d.ts +227 -0
  18. package/dist/agent.d.ts.map +1 -0
  19. package/dist/agent.js +1534 -0
  20. package/dist/agent.js.map +1 -0
  21. package/dist/builder.d.ts +260 -0
  22. package/dist/builder.d.ts.map +1 -0
  23. package/dist/builder.js +949 -0
  24. package/dist/builder.js.map +1 -0
  25. package/dist/classifier/index.d.ts +3 -0
  26. package/dist/classifier/index.d.ts.map +1 -0
  27. package/dist/classifier/index.js +2 -0
  28. package/dist/classifier/index.js.map +1 -0
  29. package/dist/classifier/llm-classifier.d.ts +20 -0
  30. package/dist/classifier/llm-classifier.d.ts.map +1 -0
  31. package/dist/classifier/llm-classifier.js +128 -0
  32. package/dist/classifier/llm-classifier.js.map +1 -0
  33. package/dist/config/config-watcher.d.ts +54 -0
  34. package/dist/config/config-watcher.d.ts.map +1 -0
  35. package/dist/config/config-watcher.js +107 -0
  36. package/dist/config/config-watcher.js.map +1 -0
  37. package/dist/config/index.d.ts +2 -0
  38. package/dist/config/index.d.ts.map +1 -0
  39. package/dist/config/index.js +2 -0
  40. package/dist/config/index.js.map +1 -0
  41. package/dist/context/context-assembler.d.ts +49 -0
  42. package/dist/context/context-assembler.d.ts.map +1 -0
  43. package/dist/context/context-assembler.js +184 -0
  44. package/dist/context/context-assembler.js.map +1 -0
  45. package/dist/context/index.d.ts +3 -0
  46. package/dist/context/index.d.ts.map +1 -0
  47. package/dist/context/index.js +2 -0
  48. package/dist/context/index.js.map +1 -0
  49. package/dist/health/health-checker.d.ts +21 -0
  50. package/dist/health/health-checker.d.ts.map +1 -0
  51. package/dist/health/health-checker.js +52 -0
  52. package/dist/health/health-checker.js.map +1 -0
  53. package/dist/health/index.d.ts +3 -0
  54. package/dist/health/index.d.ts.map +1 -0
  55. package/dist/health/index.js +2 -0
  56. package/dist/health/index.js.map +1 -0
  57. package/dist/health/types.d.ts +2 -0
  58. package/dist/health/types.d.ts.map +1 -0
  59. package/dist/health/types.js +2 -0
  60. package/dist/health/types.js.map +1 -0
  61. package/dist/history/history-memory.d.ts +12 -0
  62. package/dist/history/history-memory.d.ts.map +1 -0
  63. package/dist/history/history-memory.js +26 -0
  64. package/dist/history/history-memory.js.map +1 -0
  65. package/dist/history/history-summarizer.d.ts +10 -0
  66. package/dist/history/history-summarizer.d.ts.map +1 -0
  67. package/dist/history/history-summarizer.js +27 -0
  68. package/dist/history/history-summarizer.js.map +1 -0
  69. package/dist/history/index.d.ts +3 -0
  70. package/dist/history/index.d.ts.map +1 -0
  71. package/dist/history/index.js +3 -0
  72. package/dist/history/index.js.map +1 -0
  73. package/dist/index.d.ts +37 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +86 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/interfaces/mcp-connection-strategy.d.ts +2 -0
  78. package/dist/interfaces/mcp-connection-strategy.d.ts.map +1 -0
  79. package/dist/interfaces/mcp-connection-strategy.js +2 -0
  80. package/dist/interfaces/mcp-connection-strategy.js.map +1 -0
  81. package/dist/interfaces/model-resolver.d.ts +2 -0
  82. package/dist/interfaces/model-resolver.d.ts.map +1 -0
  83. package/dist/interfaces/model-resolver.js +2 -0
  84. package/dist/interfaces/model-resolver.js.map +1 -0
  85. package/dist/interfaces/pipeline.d.ts +123 -0
  86. package/dist/interfaces/pipeline.d.ts.map +1 -0
  87. package/dist/interfaces/pipeline.js +13 -0
  88. package/dist/interfaces/pipeline.js.map +1 -0
  89. package/dist/logger/console-logger.d.ts +7 -0
  90. package/dist/logger/console-logger.d.ts.map +1 -0
  91. package/dist/logger/console-logger.js +12 -0
  92. package/dist/logger/console-logger.js.map +1 -0
  93. package/dist/logger/default-request-logger.d.ts +17 -0
  94. package/dist/logger/default-request-logger.d.ts.map +1 -0
  95. package/dist/logger/default-request-logger.js +86 -0
  96. package/dist/logger/default-request-logger.js.map +1 -0
  97. package/dist/logger/index.d.ts +3 -0
  98. package/dist/logger/index.d.ts.map +1 -0
  99. package/dist/logger/index.js +2 -0
  100. package/dist/logger/index.js.map +1 -0
  101. package/dist/logger/noop-request-logger.d.ts +11 -0
  102. package/dist/logger/noop-request-logger.d.ts.map +1 -0
  103. package/dist/logger/noop-request-logger.js +20 -0
  104. package/dist/logger/noop-request-logger.js.map +1 -0
  105. package/dist/logger/session-logger.d.ts +10 -0
  106. package/dist/logger/session-logger.d.ts.map +1 -0
  107. package/dist/logger/session-logger.js +40 -0
  108. package/dist/logger/session-logger.js.map +1 -0
  109. package/dist/metrics/in-memory-metrics.d.ts +36 -0
  110. package/dist/metrics/in-memory-metrics.d.ts.map +1 -0
  111. package/dist/metrics/in-memory-metrics.js +87 -0
  112. package/dist/metrics/in-memory-metrics.js.map +1 -0
  113. package/dist/metrics/index.d.ts +4 -0
  114. package/dist/metrics/index.d.ts.map +1 -0
  115. package/dist/metrics/index.js +3 -0
  116. package/dist/metrics/index.js.map +1 -0
  117. package/dist/metrics/noop-metrics.d.ts +17 -0
  118. package/dist/metrics/noop-metrics.d.ts.map +1 -0
  119. package/dist/metrics/noop-metrics.js +22 -0
  120. package/dist/metrics/noop-metrics.js.map +1 -0
  121. package/dist/metrics/types.d.ts +2 -0
  122. package/dist/metrics/types.d.ts.map +1 -0
  123. package/dist/metrics/types.js +2 -0
  124. package/dist/metrics/types.js.map +1 -0
  125. package/dist/otel/index.d.ts +2 -0
  126. package/dist/otel/index.d.ts.map +1 -0
  127. package/dist/otel/index.js +2 -0
  128. package/dist/otel/index.js.map +1 -0
  129. package/dist/otel/otel-tracer-adapter.d.ts +15 -0
  130. package/dist/otel/otel-tracer-adapter.d.ts.map +1 -0
  131. package/dist/otel/otel-tracer-adapter.js +62 -0
  132. package/dist/otel/otel-tracer-adapter.js.map +1 -0
  133. package/dist/pipeline/condition-evaluator.d.ts +35 -0
  134. package/dist/pipeline/condition-evaluator.d.ts.map +1 -0
  135. package/dist/pipeline/condition-evaluator.js +143 -0
  136. package/dist/pipeline/condition-evaluator.js.map +1 -0
  137. package/dist/pipeline/context.d.ts +119 -0
  138. package/dist/pipeline/context.d.ts.map +1 -0
  139. package/dist/pipeline/context.js +19 -0
  140. package/dist/pipeline/context.js.map +1 -0
  141. package/dist/pipeline/default-pipeline.d.ts +69 -0
  142. package/dist/pipeline/default-pipeline.d.ts.map +1 -0
  143. package/dist/pipeline/default-pipeline.js +276 -0
  144. package/dist/pipeline/default-pipeline.js.map +1 -0
  145. package/dist/pipeline/executor.d.ts +54 -0
  146. package/dist/pipeline/executor.d.ts.map +1 -0
  147. package/dist/pipeline/executor.js +133 -0
  148. package/dist/pipeline/executor.js.map +1 -0
  149. package/dist/pipeline/handlers/assemble.d.ts +16 -0
  150. package/dist/pipeline/handlers/assemble.d.ts.map +1 -0
  151. package/dist/pipeline/handlers/assemble.js +72 -0
  152. package/dist/pipeline/handlers/assemble.js.map +1 -0
  153. package/dist/pipeline/handlers/build-tool-query.d.ts +30 -0
  154. package/dist/pipeline/handlers/build-tool-query.d.ts.map +1 -0
  155. package/dist/pipeline/handlers/build-tool-query.js +80 -0
  156. package/dist/pipeline/handlers/build-tool-query.js.map +1 -0
  157. package/dist/pipeline/handlers/classify.d.ts +21 -0
  158. package/dist/pipeline/handlers/classify.d.ts.map +1 -0
  159. package/dist/pipeline/handlers/classify.js +60 -0
  160. package/dist/pipeline/handlers/classify.js.map +1 -0
  161. package/dist/pipeline/handlers/expand.d.ts +16 -0
  162. package/dist/pipeline/handlers/expand.d.ts.map +1 -0
  163. package/dist/pipeline/handlers/expand.js +24 -0
  164. package/dist/pipeline/handlers/expand.js.map +1 -0
  165. package/dist/pipeline/handlers/history-upsert.d.ts +29 -0
  166. package/dist/pipeline/handlers/history-upsert.d.ts.map +1 -0
  167. package/dist/pipeline/handlers/history-upsert.js +75 -0
  168. package/dist/pipeline/handlers/history-upsert.js.map +1 -0
  169. package/dist/pipeline/handlers/index.d.ts +31 -0
  170. package/dist/pipeline/handlers/index.d.ts.map +1 -0
  171. package/dist/pipeline/handlers/index.js +44 -0
  172. package/dist/pipeline/handlers/index.js.map +1 -0
  173. package/dist/pipeline/handlers/rag-query.d.ts +27 -0
  174. package/dist/pipeline/handlers/rag-query.d.ts.map +1 -0
  175. package/dist/pipeline/handlers/rag-query.js +117 -0
  176. package/dist/pipeline/handlers/rag-query.js.map +1 -0
  177. package/dist/pipeline/handlers/rerank.d.ts +16 -0
  178. package/dist/pipeline/handlers/rerank.d.ts.map +1 -0
  179. package/dist/pipeline/handlers/rerank.js +27 -0
  180. package/dist/pipeline/handlers/rerank.js.map +1 -0
  181. package/dist/pipeline/handlers/skill-select.d.ts +18 -0
  182. package/dist/pipeline/handlers/skill-select.d.ts.map +1 -0
  183. package/dist/pipeline/handlers/skill-select.js +88 -0
  184. package/dist/pipeline/handlers/skill-select.js.map +1 -0
  185. package/dist/pipeline/handlers/summarize.d.ts +17 -0
  186. package/dist/pipeline/handlers/summarize.d.ts.map +1 -0
  187. package/dist/pipeline/handlers/summarize.js +56 -0
  188. package/dist/pipeline/handlers/summarize.js.map +1 -0
  189. package/dist/pipeline/handlers/tool-loop.d.ts +32 -0
  190. package/dist/pipeline/handlers/tool-loop.d.ts.map +1 -0
  191. package/dist/pipeline/handlers/tool-loop.js +734 -0
  192. package/dist/pipeline/handlers/tool-loop.js.map +1 -0
  193. package/dist/pipeline/handlers/tool-select.d.ts +21 -0
  194. package/dist/pipeline/handlers/tool-select.d.ts.map +1 -0
  195. package/dist/pipeline/handlers/tool-select.js +109 -0
  196. package/dist/pipeline/handlers/tool-select.js.map +1 -0
  197. package/dist/pipeline/handlers/translate.d.ts +17 -0
  198. package/dist/pipeline/handlers/translate.d.ts.map +1 -0
  199. package/dist/pipeline/handlers/translate.js +42 -0
  200. package/dist/pipeline/handlers/translate.js.map +1 -0
  201. package/dist/pipeline/index.d.ts +14 -0
  202. package/dist/pipeline/index.d.ts.map +1 -0
  203. package/dist/pipeline/index.js +16 -0
  204. package/dist/pipeline/index.js.map +1 -0
  205. package/dist/pipeline/stage-handler.d.ts +27 -0
  206. package/dist/pipeline/stage-handler.d.ts.map +1 -0
  207. package/dist/pipeline/stage-handler.js +25 -0
  208. package/dist/pipeline/stage-handler.js.map +1 -0
  209. package/dist/pipeline/types.d.ts +5 -0
  210. package/dist/pipeline/types.d.ts.map +1 -0
  211. package/dist/pipeline/types.js +2 -0
  212. package/dist/pipeline/types.js.map +1 -0
  213. package/dist/plugins/index.d.ts +4 -0
  214. package/dist/plugins/index.d.ts.map +1 -0
  215. package/dist/plugins/index.js +3 -0
  216. package/dist/plugins/index.js.map +1 -0
  217. package/dist/plugins/loader.d.ts +67 -0
  218. package/dist/plugins/loader.d.ts.map +1 -0
  219. package/dist/plugins/loader.js +114 -0
  220. package/dist/plugins/loader.js.map +1 -0
  221. package/dist/plugins/types.d.ts +24 -0
  222. package/dist/plugins/types.d.ts.map +1 -0
  223. package/dist/plugins/types.js +86 -0
  224. package/dist/plugins/types.js.map +1 -0
  225. package/dist/policy/heuristic-injection-detector.d.ts +5 -0
  226. package/dist/policy/heuristic-injection-detector.d.ts.map +1 -0
  227. package/dist/policy/heuristic-injection-detector.js +36 -0
  228. package/dist/policy/heuristic-injection-detector.js.map +1 -0
  229. package/dist/policy/index.d.ts +6 -0
  230. package/dist/policy/index.d.ts.map +1 -0
  231. package/dist/policy/index.js +5 -0
  232. package/dist/policy/index.js.map +1 -0
  233. package/dist/policy/mixed-tool-call-handler.d.ts +15 -0
  234. package/dist/policy/mixed-tool-call-handler.d.ts.map +1 -0
  235. package/dist/policy/mixed-tool-call-handler.js +49 -0
  236. package/dist/policy/mixed-tool-call-handler.js.map +1 -0
  237. package/dist/policy/pending-tool-results-registry.d.ts +25 -0
  238. package/dist/policy/pending-tool-results-registry.d.ts.map +1 -0
  239. package/dist/policy/pending-tool-results-registry.js +50 -0
  240. package/dist/policy/pending-tool-results-registry.js.map +1 -0
  241. package/dist/policy/tool-availability-registry.d.ts +21 -0
  242. package/dist/policy/tool-availability-registry.d.ts.map +1 -0
  243. package/dist/policy/tool-availability-registry.js +77 -0
  244. package/dist/policy/tool-availability-registry.js.map +1 -0
  245. package/dist/policy/tool-policy-guard.d.ts +8 -0
  246. package/dist/policy/tool-policy-guard.d.ts.map +1 -0
  247. package/dist/policy/tool-policy-guard.js +40 -0
  248. package/dist/policy/tool-policy-guard.js.map +1 -0
  249. package/dist/policy/types.d.ts +51 -0
  250. package/dist/policy/types.d.ts.map +1 -0
  251. package/dist/policy/types.js +17 -0
  252. package/dist/policy/types.js.map +1 -0
  253. package/dist/providers.d.ts +48 -0
  254. package/dist/providers.d.ts.map +1 -0
  255. package/dist/providers.js +192 -0
  256. package/dist/providers.js.map +1 -0
  257. package/dist/reranker/index.d.ts +4 -0
  258. package/dist/reranker/index.d.ts.map +1 -0
  259. package/dist/reranker/index.js +3 -0
  260. package/dist/reranker/index.js.map +1 -0
  261. package/dist/reranker/llm-reranker.d.ts +10 -0
  262. package/dist/reranker/llm-reranker.d.ts.map +1 -0
  263. package/dist/reranker/llm-reranker.js +55 -0
  264. package/dist/reranker/llm-reranker.js.map +1 -0
  265. package/dist/reranker/noop-reranker.d.ts +6 -0
  266. package/dist/reranker/noop-reranker.d.ts.map +1 -0
  267. package/dist/reranker/noop-reranker.js +6 -0
  268. package/dist/reranker/noop-reranker.js.map +1 -0
  269. package/dist/reranker/types.d.ts +2 -0
  270. package/dist/reranker/types.d.ts.map +1 -0
  271. package/dist/reranker/types.js +2 -0
  272. package/dist/reranker/types.js.map +1 -0
  273. package/dist/resilience/rate-limiter-llm.d.ts +17 -0
  274. package/dist/resilience/rate-limiter-llm.d.ts.map +1 -0
  275. package/dist/resilience/rate-limiter-llm.js +30 -0
  276. package/dist/resilience/rate-limiter-llm.js.map +1 -0
  277. package/dist/resilience/retry-llm.d.ts +32 -0
  278. package/dist/resilience/retry-llm.d.ts.map +1 -0
  279. package/dist/resilience/retry-llm.js +103 -0
  280. package/dist/resilience/retry-llm.js.map +1 -0
  281. package/dist/resilience/token-bucket-rate-limiter.d.ts +21 -0
  282. package/dist/resilience/token-bucket-rate-limiter.d.ts.map +1 -0
  283. package/dist/resilience/token-bucket-rate-limiter.js +32 -0
  284. package/dist/resilience/token-bucket-rate-limiter.js.map +1 -0
  285. package/dist/session/index.d.ts +4 -0
  286. package/dist/session/index.d.ts.map +1 -0
  287. package/dist/session/index.js +3 -0
  288. package/dist/session/index.js.map +1 -0
  289. package/dist/session/noop-session-manager.d.ts +8 -0
  290. package/dist/session/noop-session-manager.d.ts.map +1 -0
  291. package/dist/session/noop-session-manager.js +11 -0
  292. package/dist/session/noop-session-manager.js.map +1 -0
  293. package/dist/session/session-manager.d.ts +13 -0
  294. package/dist/session/session-manager.d.ts.map +1 -0
  295. package/dist/session/session-manager.js +20 -0
  296. package/dist/session/session-manager.js.map +1 -0
  297. package/dist/session/types.d.ts +2 -0
  298. package/dist/session/types.d.ts.map +1 -0
  299. package/dist/session/types.js +2 -0
  300. package/dist/session/types.js.map +1 -0
  301. package/dist/skills/claude-skill-manager.d.ts +24 -0
  302. package/dist/skills/claude-skill-manager.d.ts.map +1 -0
  303. package/dist/skills/claude-skill-manager.js +81 -0
  304. package/dist/skills/claude-skill-manager.js.map +1 -0
  305. package/dist/skills/codex-skill-manager.d.ts +20 -0
  306. package/dist/skills/codex-skill-manager.d.ts.map +1 -0
  307. package/dist/skills/codex-skill-manager.js +75 -0
  308. package/dist/skills/codex-skill-manager.js.map +1 -0
  309. package/dist/skills/filesystem-skill-manager.d.ts +17 -0
  310. package/dist/skills/filesystem-skill-manager.d.ts.map +1 -0
  311. package/dist/skills/filesystem-skill-manager.js +48 -0
  312. package/dist/skills/filesystem-skill-manager.js.map +1 -0
  313. package/dist/skills/filesystem-skill.d.ts +25 -0
  314. package/dist/skills/filesystem-skill.d.ts.map +1 -0
  315. package/dist/skills/filesystem-skill.js +110 -0
  316. package/dist/skills/filesystem-skill.js.map +1 -0
  317. package/dist/skills/index.d.ts +9 -0
  318. package/dist/skills/index.d.ts.map +1 -0
  319. package/dist/skills/index.js +9 -0
  320. package/dist/skills/index.js.map +1 -0
  321. package/dist/skills/skill-utils.d.ts +15 -0
  322. package/dist/skills/skill-utils.d.ts.map +1 -0
  323. package/dist/skills/skill-utils.js +46 -0
  324. package/dist/skills/skill-utils.js.map +1 -0
  325. package/dist/testing/index.d.ts +118 -0
  326. package/dist/testing/index.d.ts.map +1 -0
  327. package/dist/testing/index.js +351 -0
  328. package/dist/testing/index.js.map +1 -0
  329. package/dist/tracer/index.d.ts +3 -0
  330. package/dist/tracer/index.d.ts.map +1 -0
  331. package/dist/tracer/index.js +2 -0
  332. package/dist/tracer/index.js.map +1 -0
  333. package/dist/tracer/noop-tracer.d.ts +5 -0
  334. package/dist/tracer/noop-tracer.d.ts.map +1 -0
  335. package/dist/tracer/noop-tracer.js +16 -0
  336. package/dist/tracer/noop-tracer.js.map +1 -0
  337. package/dist/tracer/types.d.ts +2 -0
  338. package/dist/tracer/types.d.ts.map +1 -0
  339. package/dist/tracer/types.js +2 -0
  340. package/dist/tracer/types.js.map +1 -0
  341. package/dist/utils/lazy.d.ts +51 -0
  342. package/dist/utils/lazy.d.ts.map +1 -0
  343. package/dist/utils/lazy.js +127 -0
  344. package/dist/utils/lazy.js.map +1 -0
  345. package/dist/utils/parse-frontmatter.d.ts +15 -0
  346. package/dist/utils/parse-frontmatter.d.ts.map +1 -0
  347. package/dist/utils/parse-frontmatter.js +22 -0
  348. package/dist/utils/parse-frontmatter.js.map +1 -0
  349. package/dist/validator/index.d.ts +3 -0
  350. package/dist/validator/index.d.ts.map +1 -0
  351. package/dist/validator/index.js +2 -0
  352. package/dist/validator/index.js.map +1 -0
  353. package/dist/validator/noop-validator.d.ts +6 -0
  354. package/dist/validator/noop-validator.d.ts.map +1 -0
  355. package/dist/validator/noop-validator.js +6 -0
  356. package/dist/validator/noop-validator.js.map +1 -0
  357. package/dist/validator/types.d.ts +3 -0
  358. package/dist/validator/types.d.ts.map +1 -0
  359. package/dist/validator/types.js +2 -0
  360. package/dist/validator/types.js.map +1 -0
  361. package/package.json +14 -11
@@ -0,0 +1,276 @@
1
+ /**
2
+ * DefaultPipeline — IPipeline implementation backed by PipelineExecutor + stage handlers.
3
+ *
4
+ * This is the standard pipeline used by SmartAgent when no custom pipeline is
5
+ * configured. It runs one of two stage sequences, selected by
6
+ * {@link SmartAgentConfig.enrichedToolSearch}:
7
+ *
8
+ * **Single-phase (default):**
9
+ * ```text
10
+ * classify → summarize → parallel(rag-query tools, rag-query history, rag-query <custom>…) →
11
+ * rerank → skill-select → tool-select → assemble → tool-loop → history-upsert
12
+ * ```
13
+ *
14
+ * **Enriched (`enrichedToolSearch: true`):** the tools RAG store is queried in
15
+ * a second phase driven by context from prior retrieval + selected skills:
16
+ * ```text
17
+ * classify → summarize → parallel(rag-query history, rag-query <custom>…) →
18
+ * rerank → skill-select → build-tool-query → rag-query tools (enriched) →
19
+ * tool-select → assemble → tool-loop → history-upsert
20
+ * ```
21
+ *
22
+ * Built-in RAG stores (`tools`, `history`) are wired from `toolsRag`/`historyRag` deps.
23
+ * Additional custom stores can be passed via `ragStores` and are queried in parallel
24
+ * with built-ins. Stores can be added/removed at runtime via `rebuildStages()`.
25
+ */
26
+ import { NoopQueryExpander, NoopToolCache, StreamingLlmCallStrategy, } from '@mcp-abap-adt/llm-agent';
27
+ import { LlmClassifier } from '../classifier/llm-classifier.js';
28
+ import { ContextAssembler } from '../context/context-assembler.js';
29
+ import { NoopRequestLogger } from '../logger/noop-request-logger.js';
30
+ import { NoopMetrics } from '../metrics/noop-metrics.js';
31
+ import { PendingToolResultsRegistry } from '../policy/pending-tool-results-registry.js';
32
+ import { ToolAvailabilityRegistry } from '../policy/tool-availability-registry.js';
33
+ import { NoopReranker } from '../reranker/noop-reranker.js';
34
+ import { NoopSessionManager } from '../session/noop-session-manager.js';
35
+ import { NoopTracer } from '../tracer/noop-tracer.js';
36
+ import { NoopValidator } from '../validator/noop-validator.js';
37
+ import { PipelineExecutor } from './executor.js';
38
+ import { buildDefaultHandlerRegistry } from './handlers/index.js';
39
+ // ---------------------------------------------------------------------------
40
+ // Default SmartAgentConfig for standalone use
41
+ // ---------------------------------------------------------------------------
42
+ const DEFAULT_CONFIG = {
43
+ maxIterations: 10,
44
+ classificationEnabled: false,
45
+ skillInjectionEnabled: true,
46
+ mode: 'smart',
47
+ ragQueryK: 10,
48
+ };
49
+ // ---------------------------------------------------------------------------
50
+ // DefaultPipeline
51
+ // ---------------------------------------------------------------------------
52
+ /**
53
+ * Standard IPipeline implementation that orchestrates the default SmartAgent
54
+ * request lifecycle via PipelineExecutor and built-in stage handlers.
55
+ *
56
+ * Usage:
57
+ * ```ts
58
+ * const pipeline = new DefaultPipeline();
59
+ * pipeline.initialize(deps);
60
+ * const result = await pipeline.execute(input, history, options, yieldChunk);
61
+ * ```
62
+ */
63
+ export class DefaultPipeline {
64
+ deps;
65
+ executor;
66
+ stages;
67
+ // Cached defaults (created once in initialize, reused per request)
68
+ resolvedTracer;
69
+ resolvedClassifier;
70
+ resolvedAssembler;
71
+ resolvedReranker;
72
+ resolvedQueryExpander;
73
+ resolvedToolCache;
74
+ resolvedOutputValidator;
75
+ resolvedSessionManager;
76
+ resolvedMetrics;
77
+ resolvedRequestLogger;
78
+ resolvedLlmCallStrategy;
79
+ // -------------------------------------------------------------------------
80
+ // IPipeline
81
+ // -------------------------------------------------------------------------
82
+ initialize(deps) {
83
+ this.deps = deps;
84
+ // Resolve all optional deps once
85
+ this.resolvedTracer = deps.tracer ?? new NoopTracer();
86
+ this.resolvedClassifier =
87
+ deps.classifier ?? new LlmClassifier(deps.classifierLlm ?? deps.mainLlm);
88
+ this.resolvedAssembler = deps.assembler ?? new ContextAssembler();
89
+ this.resolvedReranker = deps.reranker ?? new NoopReranker();
90
+ this.resolvedQueryExpander = deps.queryExpander ?? new NoopQueryExpander();
91
+ this.resolvedToolCache = deps.toolCache ?? new NoopToolCache();
92
+ this.resolvedOutputValidator = deps.outputValidator ?? new NoopValidator();
93
+ this.resolvedSessionManager =
94
+ deps.sessionManager ?? new NoopSessionManager();
95
+ this.resolvedMetrics = deps.metrics ?? new NoopMetrics();
96
+ this.resolvedRequestLogger = deps.requestLogger ?? new NoopRequestLogger();
97
+ this.resolvedLlmCallStrategy =
98
+ deps.llmCallStrategy ?? new StreamingLlmCallStrategy();
99
+ const registry = buildDefaultHandlerRegistry();
100
+ this.executor = new PipelineExecutor(registry, this.resolvedTracer);
101
+ // Fixed stage list — only tools + history RAG stores
102
+ this.stages = this._buildStages();
103
+ }
104
+ async execute(input, history, options, yieldChunk, externalTools) {
105
+ const rootSpan = this.resolvedTracer.startSpan('pipeline.execute');
106
+ const ctx = this._buildContext(input, history, options, yieldChunk, externalTools);
107
+ try {
108
+ await this.executor.executeStages(this.stages, ctx, rootSpan);
109
+ }
110
+ catch (err) {
111
+ rootSpan.setStatus('error', String(err));
112
+ }
113
+ finally {
114
+ rootSpan.end();
115
+ }
116
+ return {
117
+ timing: ctx.timing,
118
+ error: ctx.error,
119
+ };
120
+ }
121
+ rebuildStages() {
122
+ this.stages = this._buildStages();
123
+ }
124
+ // -------------------------------------------------------------------------
125
+ // Internals
126
+ // -------------------------------------------------------------------------
127
+ /**
128
+ * Build the fixed stage list. RAG parallel block only includes stores
129
+ * that were provided in deps.
130
+ */
131
+ _buildStages() {
132
+ const enriched = this.deps.agentConfig?.enrichedToolSearch === true;
133
+ const hasToolsRag = Boolean(this.deps.toolsRag);
134
+ const ragChildren = [];
135
+ // In enriched mode, the tools store is queried separately AFTER
136
+ // build-tool-query so the enriched query can drive tool discovery.
137
+ if (hasToolsRag && !enriched) {
138
+ ragChildren.push({
139
+ id: 'rag-tools',
140
+ type: 'rag-query',
141
+ config: { store: 'tools' },
142
+ });
143
+ }
144
+ if (this.deps.historyRag) {
145
+ ragChildren.push({
146
+ id: 'rag-history',
147
+ type: 'rag-query',
148
+ config: { store: 'history', scope: 'session' },
149
+ });
150
+ }
151
+ // Custom stores — appended after built-in, same parallel block
152
+ if (this.deps.ragStores) {
153
+ for (const name of Object.keys(this.deps.ragStores)) {
154
+ if (name === 'tools' || name === 'history')
155
+ continue;
156
+ ragChildren.push({
157
+ id: `rag-${name}`,
158
+ type: 'rag-query',
159
+ config: { store: name },
160
+ });
161
+ }
162
+ }
163
+ const stages = [
164
+ { id: 'classify', type: 'classify' },
165
+ { id: 'summarize', type: 'summarize' },
166
+ ];
167
+ const needsTranslate = ragChildren.length > 0 || (enriched && hasToolsRag);
168
+ if (needsTranslate) {
169
+ // Translate non-ASCII RAG query before retrieval (enabled by default)
170
+ stages.push({
171
+ id: 'translate',
172
+ type: 'translate',
173
+ when: 'config.ragTranslateEnabled != false',
174
+ });
175
+ }
176
+ // First-phase retrieval: non-tool stores (enriched mode) or all stores (default).
177
+ if (ragChildren.length > 0) {
178
+ stages.push({
179
+ id: 'rag-retrieval',
180
+ type: 'parallel',
181
+ stages: ragChildren,
182
+ after: [{ id: 'rerank', type: 'rerank' }],
183
+ });
184
+ }
185
+ stages.push({ id: 'skill-select', type: 'skill-select' });
186
+ // Second-phase retrieval (enriched mode only): build the enriched
187
+ // query, then hit the tools RAG store with it.
188
+ if (enriched && hasToolsRag) {
189
+ stages.push({ id: 'build-tool-query', type: 'build-tool-query' });
190
+ stages.push({
191
+ id: 'rag-tools',
192
+ type: 'rag-query',
193
+ config: { store: 'tools', queryText: 'toolQueryText' },
194
+ });
195
+ }
196
+ stages.push({ id: 'tool-select', type: 'tool-select' }, { id: 'assemble', type: 'assemble' }, { id: 'tool-loop', type: 'tool-loop' }, { id: 'history-upsert', type: 'history-upsert' });
197
+ return stages;
198
+ }
199
+ /**
200
+ * Create a PipelineContext from deps + per-request input.
201
+ * Mirrors the pattern in SmartAgent._runStructuredPipeline().
202
+ */
203
+ _buildContext(input, history, options, yieldChunk, externalTools) {
204
+ const text = typeof input === 'string'
205
+ ? input
206
+ : (input.filter((m) => m.role === 'user').slice(-1)[0]?.content ?? '');
207
+ // Build ragStores record — custom stores first, built-ins override by name
208
+ const ragStores = {
209
+ ...(this.deps.ragStores ?? {}),
210
+ };
211
+ if (this.deps.toolsRag)
212
+ ragStores.tools = this.deps.toolsRag;
213
+ if (this.deps.historyRag)
214
+ ragStores.history = this.deps.historyRag;
215
+ return {
216
+ // Immutable input
217
+ textOrMessages: input,
218
+ options,
219
+ config: { ...DEFAULT_CONFIG, ...this.deps.agentConfig },
220
+ sessionId: options?.sessionId ?? 'default',
221
+ // Dependencies (resolved once in initialize)
222
+ mainLlm: this.deps.mainLlm,
223
+ helperLlm: this.deps.helperLlm,
224
+ classifierLlm: this.deps.classifierLlm ?? this.deps.mainLlm,
225
+ classifier: this.resolvedClassifier,
226
+ assembler: this.resolvedAssembler,
227
+ ragStores,
228
+ ragRegistry: this.deps.ragRegistry,
229
+ ragProviderRegistry: this.deps.ragProviderRegistry,
230
+ mcpClients: this.deps.mcpClients,
231
+ reranker: this.resolvedReranker,
232
+ queryExpander: this.resolvedQueryExpander,
233
+ toolCache: this.resolvedToolCache,
234
+ outputValidator: this.resolvedOutputValidator,
235
+ sessionManager: this.resolvedSessionManager,
236
+ tracer: this.resolvedTracer,
237
+ metrics: this.resolvedMetrics,
238
+ logger: this.deps.logger,
239
+ requestLogger: this.resolvedRequestLogger,
240
+ toolPolicy: this.deps.toolPolicy,
241
+ injectionDetector: this.deps.injectionDetector,
242
+ toolAvailabilityRegistry: new ToolAvailabilityRegistry(),
243
+ pendingToolResults: new PendingToolResultsRegistry(),
244
+ skillManager: this.deps.skillManager,
245
+ embedder: this.deps.embedder,
246
+ historyMemory: this.deps.historyMemory,
247
+ historySummarizer: this.deps.historySummarizer,
248
+ llmCallStrategy: this.resolvedLlmCallStrategy,
249
+ // Mutable state
250
+ inputText: text,
251
+ history: [...history],
252
+ subprompts: [],
253
+ toolClientMap: new Map(),
254
+ ragText: '',
255
+ ragResults: Object.fromEntries(Object.keys(ragStores).map((k) => [k, []])),
256
+ mcpTools: [],
257
+ selectedTools: [],
258
+ externalTools: externalTools ?? [],
259
+ assembledMessages: [],
260
+ activeTools: [],
261
+ selectedSkills: [],
262
+ skillContent: '',
263
+ skillArgs: '',
264
+ queryEmbedding: undefined,
265
+ // Control flags — DefaultPipeline always retrieves when stores exist
266
+ shouldRetrieve: true,
267
+ isAscii: true,
268
+ isSapRequired: false,
269
+ // Output
270
+ timing: [],
271
+ // Streaming callback
272
+ yield: yieldChunk,
273
+ };
274
+ }
275
+ }
276
+ //# sourceMappingURL=default-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-pipeline.js","sourceRoot":"","sources":["../../src/pipeline/default-pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * PipelineExecutor — walks a stage definition tree and dispatches to handlers.
3
+ *
4
+ * The executor is the engine that interprets the structured pipeline YAML.
5
+ * It handles three execution modes:
6
+ *
7
+ * 1. **Sequential** (default) — stages in a list run one after another.
8
+ * 2. **Parallel** — child stages run concurrently via `Promise.all`.
9
+ * Optional `after` stages run sequentially after all children complete.
10
+ * 3. **Repeat** — child stages run in a loop until a condition or max iterations.
11
+ *
12
+ * ## Condition evaluation
13
+ *
14
+ * Each stage can have a `when` field — a condition expression evaluated
15
+ * against the {@link PipelineContext}. If the condition is falsy, the stage
16
+ * is skipped. See {@link evaluateCondition} for supported expression syntax.
17
+ *
18
+ * ## Error handling
19
+ *
20
+ * If a handler returns `false` or sets `ctx.error`, the executor stops
21
+ * processing and propagates the error back to the caller.
22
+ *
23
+ * ## Tracing
24
+ *
25
+ * Each stage execution is wrapped in a tracer span named `pipeline.<stage.id>`.
26
+ * The span is passed to the handler for sub-span creation.
27
+ */
28
+ import type { ISpan, ITracer } from '../tracer/types.js';
29
+ import type { PipelineContext } from './context.js';
30
+ import type { StageHandlerRegistry } from './handlers/index.js';
31
+ import type { StageDefinition } from './types.js';
32
+ export declare class PipelineExecutor {
33
+ private readonly handlers;
34
+ private readonly tracer;
35
+ constructor(handlers: StageHandlerRegistry, tracer: ITracer);
36
+ /**
37
+ * Execute a list of stages sequentially.
38
+ *
39
+ * @param stages - Stage definitions to execute in order.
40
+ * @param ctx - Mutable pipeline context.
41
+ * @param parentSpan - Parent tracing span.
42
+ * @returns `true` if all stages completed successfully, `false` if aborted.
43
+ */
44
+ executeStages(stages: StageDefinition[], ctx: PipelineContext, parentSpan: ISpan): Promise<boolean>;
45
+ /**
46
+ * Execute child stages in parallel, then run `after` stages sequentially.
47
+ */
48
+ private _executeParallel;
49
+ /**
50
+ * Execute child stages in a loop until condition or max iterations.
51
+ */
52
+ private _executeRepeat;
53
+ }
54
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/pipeline/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO;IAGlC;;;;;;;OAOG;IACG,aAAa,CACjB,MAAM,EAAE,eAAe,EAAE,EACzB,GAAG,EAAE,eAAe,EACpB,UAAU,EAAE,KAAK,GAChB,OAAO,CAAC,OAAO,CAAC;IAyDnB;;OAEG;YACW,gBAAgB;IAoB9B;;OAEG;YACW,cAAc;CAkB7B"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * PipelineExecutor — walks a stage definition tree and dispatches to handlers.
3
+ *
4
+ * The executor is the engine that interprets the structured pipeline YAML.
5
+ * It handles three execution modes:
6
+ *
7
+ * 1. **Sequential** (default) — stages in a list run one after another.
8
+ * 2. **Parallel** — child stages run concurrently via `Promise.all`.
9
+ * Optional `after` stages run sequentially after all children complete.
10
+ * 3. **Repeat** — child stages run in a loop until a condition or max iterations.
11
+ *
12
+ * ## Condition evaluation
13
+ *
14
+ * Each stage can have a `when` field — a condition expression evaluated
15
+ * against the {@link PipelineContext}. If the condition is falsy, the stage
16
+ * is skipped. See {@link evaluateCondition} for supported expression syntax.
17
+ *
18
+ * ## Error handling
19
+ *
20
+ * If a handler returns `false` or sets `ctx.error`, the executor stops
21
+ * processing and propagates the error back to the caller.
22
+ *
23
+ * ## Tracing
24
+ *
25
+ * Each stage execution is wrapped in a tracer span named `pipeline.<stage.id>`.
26
+ * The span is passed to the handler for sub-span creation.
27
+ */
28
+ import { evaluateCondition } from './condition-evaluator.js';
29
+ export class PipelineExecutor {
30
+ handlers;
31
+ tracer;
32
+ constructor(handlers, tracer) {
33
+ this.handlers = handlers;
34
+ this.tracer = tracer;
35
+ }
36
+ /**
37
+ * Execute a list of stages sequentially.
38
+ *
39
+ * @param stages - Stage definitions to execute in order.
40
+ * @param ctx - Mutable pipeline context.
41
+ * @param parentSpan - Parent tracing span.
42
+ * @returns `true` if all stages completed successfully, `false` if aborted.
43
+ */
44
+ async executeStages(stages, ctx, parentSpan) {
45
+ for (const stage of stages) {
46
+ if (ctx.error)
47
+ return false;
48
+ if (ctx.options?.signal?.aborted)
49
+ return false;
50
+ // Evaluate `when` condition
51
+ const shouldRun = evaluateCondition(stage.when, ctx);
52
+ if (!shouldRun) {
53
+ ctx.options?.sessionLogger?.logStep(`stage_skipped_${stage.id}`, {
54
+ reason: stage.when,
55
+ });
56
+ continue;
57
+ }
58
+ const span = this.tracer.startSpan(`pipeline.${stage.id}`, {
59
+ parent: parentSpan,
60
+ attributes: { 'stage.type': stage.type },
61
+ });
62
+ const stageStart = Date.now();
63
+ let ok;
64
+ try {
65
+ if (stage.type === 'parallel') {
66
+ ok = await this._executeParallel(stage, ctx, span);
67
+ }
68
+ else if (stage.type === 'repeat') {
69
+ ok = await this._executeRepeat(stage, ctx, span);
70
+ }
71
+ else {
72
+ const handler = this.handlers.get(stage.type);
73
+ if (!handler) {
74
+ throw new Error(`Unknown stage type "${stage.type}" in stage "${stage.id}". ` +
75
+ `Available types: ${[...this.handlers.keys()].join(', ')}, parallel, repeat`);
76
+ }
77
+ ok = await handler.execute(ctx, stage.config ?? {}, span);
78
+ }
79
+ }
80
+ catch (err) {
81
+ span.setStatus('error', String(err));
82
+ span.end();
83
+ ctx.options?.sessionLogger?.logStep(`stage_error_${stage.id}`, {
84
+ error: String(err),
85
+ });
86
+ return false;
87
+ }
88
+ ctx.timing.push({
89
+ phase: stage.id,
90
+ duration: Date.now() - stageStart,
91
+ });
92
+ span.setStatus(ok ? 'ok' : 'error');
93
+ span.end();
94
+ if (!ok)
95
+ return false;
96
+ }
97
+ return true;
98
+ }
99
+ /**
100
+ * Execute child stages in parallel, then run `after` stages sequentially.
101
+ */
102
+ async _executeParallel(stage, ctx, parentSpan) {
103
+ if (!stage.stages?.length)
104
+ return true;
105
+ const results = await Promise.all(stage.stages.map((child) => this.executeStages([child], ctx, parentSpan)));
106
+ if (results.some((r) => !r))
107
+ return false;
108
+ // Run sequential `after` stages after all parallel children complete
109
+ if (stage.after?.length) {
110
+ return this.executeStages(stage.after, ctx, parentSpan);
111
+ }
112
+ return true;
113
+ }
114
+ /**
115
+ * Execute child stages in a loop until condition or max iterations.
116
+ */
117
+ async _executeRepeat(stage, ctx, parentSpan) {
118
+ const max = stage.maxIterations ?? 10;
119
+ for (let i = 0; i < max; i++) {
120
+ // Check `until` stop condition
121
+ if (stage.until && evaluateCondition(stage.until, ctx)) {
122
+ break;
123
+ }
124
+ if (stage.stages) {
125
+ const ok = await this.executeStages(stage.stages, ctx, parentSpan);
126
+ if (!ok)
127
+ return false;
128
+ }
129
+ }
130
+ return true;
131
+ }
132
+ }
133
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/pipeline/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * AssembleHandler — builds the final LLM context from action + retrieved + history.
3
+ *
4
+ * Reads: `ctx.subprompts`, `ctx.ragResults`, `ctx.mcpTools` (selected), `ctx.history`
5
+ * Writes: `ctx.assembledMessages`
6
+ *
7
+ * Merges multiple action subprompts into a single action, then delegates
8
+ * to the injected IContextAssembler.
9
+ */
10
+ import type { ISpan } from '../../tracer/types.js';
11
+ import type { PipelineContext } from '../context.js';
12
+ import type { IStageHandler } from '../stage-handler.js';
13
+ export declare class AssembleHandler implements IStageHandler {
14
+ execute(ctx: PipelineContext, _config: Record<string, unknown>, span: ISpan): Promise<boolean>;
15
+ }
16
+ //# sourceMappingURL=assemble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/assemble.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,eAAgB,YAAW,aAAa;IAC7C,OAAO,CACX,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,EAAE,KAAK,GACV,OAAO,CAAC,OAAO,CAAC;CAoFpB"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * AssembleHandler — builds the final LLM context from action + retrieved + history.
3
+ *
4
+ * Reads: `ctx.subprompts`, `ctx.ragResults`, `ctx.mcpTools` (selected), `ctx.history`
5
+ * Writes: `ctx.assembledMessages`
6
+ *
7
+ * Merges multiple action subprompts into a single action, then delegates
8
+ * to the injected IContextAssembler.
9
+ */
10
+ import { OrchestratorError } from '../../agent.js';
11
+ export class AssembleHandler {
12
+ async execute(ctx, _config, span) {
13
+ const actions = ctx.subprompts.filter((sp) => sp.type === 'action');
14
+ // Merge multiple actions into one
15
+ const mainAction = actions.length > 1
16
+ ? {
17
+ type: 'action',
18
+ text: actions.map((a) => a.text).join('\n'),
19
+ context: actions.find((a) => a.context)?.context,
20
+ dependency: 'independent',
21
+ }
22
+ : actions.length === 1
23
+ ? actions[0]
24
+ : (ctx.subprompts.find((sp) => sp.type === 'chat') ??
25
+ ctx.subprompts[0]);
26
+ if (actions.length > 1) {
27
+ ctx.options?.sessionLogger?.logStep('actions_merged', {
28
+ count: actions.length,
29
+ actions: actions.map((a) => ({
30
+ text: a.text,
31
+ dependency: a.dependency,
32
+ })),
33
+ });
34
+ }
35
+ // Build retrieved context — select tools that were chosen
36
+ const selectedMcpTools = ctx.mcpTools.filter((t) => ctx.activeTools.some((at) => at.name === t.name));
37
+ const recentActions = ctx.historyMemory && ctx.config.semanticHistoryEnabled
38
+ ? ctx.historyMemory.getRecent(ctx.sessionId, ctx.config.historyRecencyWindow ?? 3)
39
+ : undefined;
40
+ const retrieved = {
41
+ ragResults: ctx.ragResults,
42
+ tools: selectedMcpTools,
43
+ recentActions,
44
+ };
45
+ const result = await ctx.assembler.assemble(mainAction, retrieved, ctx.history, ctx.options);
46
+ if (!result.ok) {
47
+ ctx.error = new OrchestratorError(result.error.message, 'ASSEMBLER_ERROR');
48
+ return false;
49
+ }
50
+ ctx.assembledMessages = result.value;
51
+ // Inject skill content into system message (post-assembly)
52
+ if (ctx.skillContent) {
53
+ const sysMsg = ctx.assembledMessages.find((m) => m.role === 'system');
54
+ if (sysMsg) {
55
+ sysMsg.content += `\n\n## Active Skills\n${ctx.skillContent}`;
56
+ }
57
+ else {
58
+ ctx.assembledMessages.unshift({
59
+ role: 'system',
60
+ content: `## Active Skills\n${ctx.skillContent}`,
61
+ });
62
+ }
63
+ }
64
+ ctx.options?.sessionLogger?.logStep('final_context_assembled', {
65
+ messages: result.value,
66
+ tools: ctx.activeTools.map((t) => t.name),
67
+ });
68
+ span.setAttribute('message_count', result.value.length);
69
+ return true;
70
+ }
71
+ }
72
+ //# sourceMappingURL=assemble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assemble.js","sourceRoot":"","sources":["../../../src/pipeline/handlers/assemble.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * BuildToolQueryHandler — composes an enriched query text for tool/skill retrieval.
3
+ *
4
+ * Reads: `ctx.ragText`, `ctx.ragResults`, `ctx.selectedSkills`
5
+ * Writes: `ctx.toolQueryText`
6
+ *
7
+ * The resulting text combines the user-facing RAG query with top-K snippets
8
+ * already retrieved from non-tool RAG stores plus descriptions of skills
9
+ * selected for this request. Downstream stages configured with
10
+ * `queryText: 'toolQueryText'` use this to drive tool discovery, so consumers
11
+ * can steer tool selection by seeding domain knowledge into other RAG stores
12
+ * or skills.
13
+ *
14
+ * ## Config
15
+ *
16
+ * | Field | Type | Default | Description |
17
+ * |---------------------|---------|---------|------------------------------------------------------|
18
+ * | `topK` | number | 5 | Max RAG snippets (per store, top-scored) to include |
19
+ * | `maxChars` | number | 2000 | Hard cap on the composed text length |
20
+ * | `includeRagSnippets`| boolean | true | Append RAG snippets (excluding `tool:*` IDs) |
21
+ * | `includeSkills` | boolean | true | Append selected skill names + descriptions |
22
+ * | `skipStores` | string[]| [] | RAG store names to exclude from snippet source |
23
+ */
24
+ import type { ISpan } from '../../tracer/types.js';
25
+ import type { PipelineContext } from '../context.js';
26
+ import type { IStageHandler } from '../stage-handler.js';
27
+ export declare class BuildToolQueryHandler implements IStageHandler {
28
+ execute(ctx: PipelineContext, config: Record<string, unknown>, span: ISpan): Promise<boolean>;
29
+ }
30
+ //# sourceMappingURL=build-tool-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-tool-query.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/build-tool-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,qBAAsB,YAAW,aAAa;IACnD,OAAO,CACX,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE,KAAK,GACV,OAAO,CAAC,OAAO,CAAC;CA8DpB"}