@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,80 @@
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
+ export class BuildToolQueryHandler {
25
+ async execute(ctx, config, span) {
26
+ const topK = config.topK ?? 5;
27
+ const maxChars = config.maxChars ?? 2000;
28
+ const includeRagSnippets = config.includeRagSnippets !== false;
29
+ const includeSkills = config.includeSkills !== false;
30
+ const skipStores = new Set(config.skipStores ?? []);
31
+ const parts = [];
32
+ const base = ctx.ragText || ctx.inputText;
33
+ if (base)
34
+ parts.push(base);
35
+ if (includeRagSnippets) {
36
+ const snippets = [];
37
+ for (const [storeName, results] of Object.entries(ctx.ragResults)) {
38
+ if (skipStores.has(storeName))
39
+ continue;
40
+ const top = results
41
+ .filter((r) => {
42
+ const id = r.metadata?.id;
43
+ return !id?.startsWith('tool:');
44
+ })
45
+ .slice(0, topK);
46
+ for (const r of top) {
47
+ const text = r.text?.trim();
48
+ if (text)
49
+ snippets.push(text);
50
+ }
51
+ }
52
+ if (snippets.length > 0) {
53
+ parts.push(`Context:\n${snippets.join('\n')}`);
54
+ }
55
+ }
56
+ if (includeSkills && ctx.selectedSkills.length > 0) {
57
+ const lines = ctx.selectedSkills.map((s) => {
58
+ const desc = s.description?.trim();
59
+ return desc ? `${s.name}: ${desc}` : s.name;
60
+ });
61
+ parts.push(`Active skills:\n${lines.join('\n')}`);
62
+ }
63
+ let composed = parts.join('\n\n');
64
+ if (composed.length > maxChars) {
65
+ composed = `${composed.slice(0, maxChars)}…`;
66
+ }
67
+ ctx.toolQueryText = composed;
68
+ span.setAttribute('length', composed.length);
69
+ span.setAttribute('base_length', base.length);
70
+ span.setAttribute('snippets_included', includeRagSnippets ? 'true' : 'false');
71
+ span.setAttribute('skills_included', includeSkills ? 'true' : 'false');
72
+ ctx.options?.sessionLogger?.logStep('tool_query_built', {
73
+ length: composed.length,
74
+ preview: composed.slice(0, 300),
75
+ skillCount: ctx.selectedSkills.length,
76
+ });
77
+ return true;
78
+ }
79
+ }
80
+ //# sourceMappingURL=build-tool-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-tool-query.js","sourceRoot":"","sources":["../../../src/pipeline/handlers/build-tool-query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * ClassifyHandler — decomposes user input into typed subprompts.
3
+ *
4
+ * Reads: `ctx.inputText`
5
+ * Writes: `ctx.subprompts`, `ctx.isSapRequired`, `ctx.shouldRetrieve`
6
+ *
7
+ * When classification is disabled (`config.classificationEnabled === false`),
8
+ * the input is treated as a single action subprompt.
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 ClassifyHandler implements IStageHandler {
14
+ execute(ctx: PipelineContext, _config: Record<string, unknown>, span: ISpan): Promise<boolean>;
15
+ /**
16
+ * Update control flags based on classified subprompts.
17
+ * These flags are used by `when` conditions on downstream stages.
18
+ */
19
+ private _updateControlFlags;
20
+ }
21
+ //# sourceMappingURL=classify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/classify.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,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;IAmCnB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAmB5B"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * ClassifyHandler — decomposes user input into typed subprompts.
3
+ *
4
+ * Reads: `ctx.inputText`
5
+ * Writes: `ctx.subprompts`, `ctx.isSapRequired`, `ctx.shouldRetrieve`
6
+ *
7
+ * When classification is disabled (`config.classificationEnabled === false`),
8
+ * the input is treated as a single action subprompt.
9
+ */
10
+ import { OrchestratorError } from '../../agent.js';
11
+ export class ClassifyHandler {
12
+ async execute(ctx, _config, span) {
13
+ if (ctx.config.classificationEnabled === false) {
14
+ ctx.subprompts = [
15
+ { type: 'action', text: ctx.inputText, dependency: 'independent' },
16
+ ];
17
+ ctx.options?.sessionLogger?.logStep('classification_skipped', {
18
+ text: ctx.inputText,
19
+ });
20
+ span.setAttribute('skipped', true);
21
+ this._updateControlFlags(ctx);
22
+ return true;
23
+ }
24
+ const result = await ctx.classifier.classify(ctx.inputText, ctx.options);
25
+ if (!result.ok) {
26
+ ctx.error = new OrchestratorError(result.error.message, 'CLASSIFIER_ERROR');
27
+ return false;
28
+ }
29
+ ctx.subprompts = result.value;
30
+ ctx.options?.sessionLogger?.logStep('classifier_response', {
31
+ subprompts: result.value,
32
+ });
33
+ for (const sp of ctx.subprompts) {
34
+ ctx.metrics.classifierIntentCount.add(1, { intent: sp.type });
35
+ }
36
+ this._updateControlFlags(ctx);
37
+ return true;
38
+ }
39
+ /**
40
+ * Update control flags based on classified subprompts.
41
+ * These flags are used by `when` conditions on downstream stages.
42
+ */
43
+ _updateControlFlags(ctx) {
44
+ const actions = ctx.subprompts.filter((sp) => sp.type === 'action');
45
+ const mode = ctx.config.mode || 'smart';
46
+ const hasRagStores = Object.keys(ctx.ragStores).length > 0;
47
+ const hasMcpClients = ctx.mcpClients.length > 0;
48
+ ctx.isSapRequired =
49
+ actions.some((a) => a.context === 'sap-abap') || mode === 'hard';
50
+ // Populate ragText from action texts — downstream stages (translate, expand,
51
+ // rag-query) all read from ctx.ragText.
52
+ ctx.ragText = actions.map((a) => a.text).join(' ');
53
+ // Retrieve when there are actions and stores/tools to search,
54
+ // or when mode is 'hard' (always retrieve).
55
+ ctx.shouldRetrieve =
56
+ mode === 'hard' ||
57
+ (actions.length > 0 && (hasMcpClients || hasRagStores));
58
+ }
59
+ }
60
+ //# sourceMappingURL=classify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../src/pipeline/handlers/classify.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAKnD,MAAM,OAAO,eAAe;IAC1B,KAAK,CAAC,OAAO,CACX,GAAoB,EACpB,OAAgC,EAChC,IAAW;QAEX,IAAI,GAAG,CAAC,MAAM,CAAC,qBAAqB,KAAK,KAAK,EAAE,CAAC;YAC/C,GAAG,CAAC,UAAU,GAAG;gBACf,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE;aACnE,CAAC;YACF,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,wBAAwB,EAAE;gBAC5D,IAAI,EAAE,GAAG,CAAC,SAAS;aACpB,CAAC,CAAC;YACH,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACzE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,GAAG,IAAI,iBAAiB,CAC/B,MAAM,CAAC,KAAK,CAAC,OAAO,EACpB,kBAAkB,CACnB,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;QAC9B,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,qBAAqB,EAAE;YACzD,UAAU,EAAE,MAAM,CAAC,KAAK;SACzB,CAAC,CAAC;QAEH,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YAChC,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,mBAAmB,CAAC,GAAoB;QAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC;QACxC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAEhD,GAAG,CAAC,aAAa;YACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,IAAI,IAAI,KAAK,MAAM,CAAC;QAEnE,6EAA6E;QAC7E,wCAAwC;QACxC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEnD,8DAA8D;QAC9D,4CAA4C;QAC5C,GAAG,CAAC,cAAc;YAChB,IAAI,KAAK,MAAM;gBACf,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,YAAY,CAAC,CAAC,CAAC;IAC5D,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * ExpandHandler — expands RAG query with synonyms and related terms.
3
+ *
4
+ * Reads: `ctx.ragText`, `ctx.queryExpander`
5
+ * Writes: `ctx.ragText`
6
+ *
7
+ * Uses the injected IQueryExpander to broaden RAG queries.
8
+ * Skipped when `queryExpansionEnabled` is false.
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 ExpandHandler implements IStageHandler {
14
+ execute(ctx: PipelineContext, _config: Record<string, unknown>, span: ISpan): Promise<boolean>;
15
+ }
16
+ //# sourceMappingURL=expand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/expand.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;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,aAAc,YAAW,aAAa;IAC3C,OAAO,CACX,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,EAAE,KAAK,GACV,OAAO,CAAC,OAAO,CAAC;CAcpB"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * ExpandHandler — expands RAG query with synonyms and related terms.
3
+ *
4
+ * Reads: `ctx.ragText`, `ctx.queryExpander`
5
+ * Writes: `ctx.ragText`
6
+ *
7
+ * Uses the injected IQueryExpander to broaden RAG queries.
8
+ * Skipped when `queryExpansionEnabled` is false.
9
+ */
10
+ export class ExpandHandler {
11
+ async execute(ctx, _config, span) {
12
+ if (!ctx.config.queryExpansionEnabled) {
13
+ span.setAttribute('skipped', true);
14
+ return true;
15
+ }
16
+ const result = await ctx.queryExpander.expand(ctx.ragText, ctx.options);
17
+ if (result.ok) {
18
+ ctx.ragText = result.value;
19
+ span.setAttribute('expanded', true);
20
+ }
21
+ return true;
22
+ }
23
+ }
24
+ //# sourceMappingURL=expand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expand.js","sourceRoot":"","sources":["../../../src/pipeline/handlers/expand.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,OAAO,aAAa;IACxB,KAAK,CAAC,OAAO,CACX,GAAoB,EACpB,OAAgC,EAChC,IAAW;QAEX,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * HistoryUpsertHandler — post-tool-loop pipeline stage.
3
+ *
4
+ * After tool-loop completes, this stage:
5
+ * 1. Calls IHistorySummarizer to produce a compact turn summary.
6
+ * 2. Upserts the summary to the history RAG store.
7
+ * 3. Pushes the summary to the recency memory buffer.
8
+ *
9
+ * All operations are best-effort — failures are logged but never block the
10
+ * response. The `summarizeAndStore` helper is exported for unit testing.
11
+ */
12
+ import type { CallOptions, HistoryTurn, IHistoryMemory, IHistorySummarizer, IRag } from '@mcp-abap-adt/llm-agent';
13
+ import type { ISpan } from '../../tracer/types.js';
14
+ import type { PipelineContext } from '../context.js';
15
+ import type { IStageHandler } from '../stage-handler.js';
16
+ export interface SummarizeAndStoreArgs {
17
+ turn: HistoryTurn;
18
+ summarizer: IHistorySummarizer;
19
+ memory: IHistoryMemory;
20
+ rag: IRag;
21
+ sessionId: string;
22
+ options?: CallOptions;
23
+ log?: (msg: string, data?: unknown) => void;
24
+ }
25
+ export declare function summarizeAndStore(args: SummarizeAndStoreArgs): Promise<void>;
26
+ export declare class HistoryUpsertHandler implements IStageHandler {
27
+ execute(ctx: PipelineContext, _config: Record<string, unknown>, span: ISpan): Promise<boolean>;
28
+ }
29
+ //# sourceMappingURL=history-upsert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-upsert.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/history-upsert.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,IAAI,EACL,MAAM,yBAAyB,CAAC;AACjC,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,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,EAAE,IAAI,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED,qBAAa,oBAAqB,YAAW,aAAa;IAClD,OAAO,CACX,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,EAAE,KAAK,GACV,OAAO,CAAC,OAAO,CAAC;CAgDpB"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * HistoryUpsertHandler — post-tool-loop pipeline stage.
3
+ *
4
+ * After tool-loop completes, this stage:
5
+ * 1. Calls IHistorySummarizer to produce a compact turn summary.
6
+ * 2. Upserts the summary to the history RAG store.
7
+ * 3. Pushes the summary to the recency memory buffer.
8
+ *
9
+ * All operations are best-effort — failures are logged but never block the
10
+ * response. The `summarizeAndStore` helper is exported for unit testing.
11
+ */
12
+ export async function summarizeAndStore(args) {
13
+ const { turn, summarizer, memory, rag, sessionId, options, log } = args;
14
+ const result = await summarizer.summarize(turn, options);
15
+ const summary = result.ok
16
+ ? result.value
17
+ : `${turn.userText} → ${turn.assistantText}`;
18
+ if (!result.ok) {
19
+ log?.('history_summarize_failed', { error: result.error.message });
20
+ }
21
+ const ragWriter = rag.writer?.();
22
+ if (!ragWriter) {
23
+ log?.('history_upsert_failed', { error: 'RAG writer not available' });
24
+ }
25
+ else {
26
+ const upsertResult = await ragWriter.upsertRaw(`turn:${sessionId}:${turn.turnIndex}`, summary, {}, options);
27
+ if (!upsertResult.ok) {
28
+ log?.('history_upsert_failed', { error: upsertResult.error.message });
29
+ }
30
+ }
31
+ memory.pushRecent(sessionId, summary);
32
+ }
33
+ export class HistoryUpsertHandler {
34
+ async execute(ctx, _config, span) {
35
+ if (!ctx.historySummarizer || !ctx.historyMemory) {
36
+ span.setAttribute('skipped', true);
37
+ return true;
38
+ }
39
+ if (!ctx.config.semanticHistoryEnabled) {
40
+ span.setAttribute('skipped', true);
41
+ return true;
42
+ }
43
+ const historyRag = ctx.ragStores.history;
44
+ if (!historyRag) {
45
+ span.setAttribute('skipped', true);
46
+ return true;
47
+ }
48
+ try {
49
+ const turn = {
50
+ sessionId: ctx.sessionId,
51
+ turnIndex: Date.now(),
52
+ userText: ctx.inputText,
53
+ assistantText: '',
54
+ toolCalls: [],
55
+ toolResults: [],
56
+ timestamp: Date.now(),
57
+ };
58
+ await summarizeAndStore({
59
+ turn,
60
+ summarizer: ctx.historySummarizer,
61
+ memory: ctx.historyMemory,
62
+ rag: historyRag,
63
+ sessionId: ctx.sessionId,
64
+ options: ctx.options,
65
+ log: (msg, data) => ctx.options?.sessionLogger?.logStep(msg, data),
66
+ });
67
+ span.setStatus('ok');
68
+ }
69
+ catch {
70
+ span.setStatus('error', 'history upsert failed');
71
+ }
72
+ return true;
73
+ }
74
+ }
75
+ //# sourceMappingURL=history-upsert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-upsert.js","sourceRoot":"","sources":["../../../src/pipeline/handlers/history-upsert.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Default stage handler registry.
3
+ *
4
+ * Maps built-in stage type names to their handler implementations.
5
+ * Custom handlers can be registered by supplying a custom `IPipeline` implementation.
6
+ */
7
+ import type { IStageHandler } from '../stage-handler.js';
8
+ import { AssembleHandler } from './assemble.js';
9
+ import { BuildToolQueryHandler } from './build-tool-query.js';
10
+ import { ClassifyHandler } from './classify.js';
11
+ import { ExpandHandler } from './expand.js';
12
+ import { HistoryUpsertHandler } from './history-upsert.js';
13
+ import { RagQueryHandler } from './rag-query.js';
14
+ import { RerankHandler } from './rerank.js';
15
+ import { SkillSelectHandler } from './skill-select.js';
16
+ import { SummarizeHandler } from './summarize.js';
17
+ import { ToolLoopHandler } from './tool-loop.js';
18
+ import { ToolSelectHandler } from './tool-select.js';
19
+ import { TranslateHandler } from './translate.js';
20
+ export type StageHandlerRegistry = Map<string, IStageHandler>;
21
+ /**
22
+ * Build the default handler registry with all built-in stage handlers.
23
+ *
24
+ * The registry maps stage type names (as used in YAML) to their handler
25
+ * instances. All handlers are stateless — they read/write through the
26
+ * {@link PipelineContext}.
27
+ */
28
+ export declare function buildDefaultHandlerRegistry(): StageHandlerRegistry;
29
+ export { summarizeAndStore } from './history-upsert.js';
30
+ export { AssembleHandler, BuildToolQueryHandler, ClassifyHandler, ExpandHandler, HistoryUpsertHandler, RagQueryHandler, RerankHandler, SkillSelectHandler, SummarizeHandler, ToolLoopHandler, ToolSelectHandler, TranslateHandler, };
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,MAAM,oBAAoB,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAE9D;;;;;;GAMG;AACH,wBAAgB,2BAA2B,IAAI,oBAAoB,CAelE;AAED,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,GACjB,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Default stage handler registry.
3
+ *
4
+ * Maps built-in stage type names to their handler implementations.
5
+ * Custom handlers can be registered by supplying a custom `IPipeline` implementation.
6
+ */
7
+ import { AssembleHandler } from './assemble.js';
8
+ import { BuildToolQueryHandler } from './build-tool-query.js';
9
+ import { ClassifyHandler } from './classify.js';
10
+ import { ExpandHandler } from './expand.js';
11
+ import { HistoryUpsertHandler } from './history-upsert.js';
12
+ import { RagQueryHandler } from './rag-query.js';
13
+ import { RerankHandler } from './rerank.js';
14
+ import { SkillSelectHandler } from './skill-select.js';
15
+ import { SummarizeHandler } from './summarize.js';
16
+ import { ToolLoopHandler } from './tool-loop.js';
17
+ import { ToolSelectHandler } from './tool-select.js';
18
+ import { TranslateHandler } from './translate.js';
19
+ /**
20
+ * Build the default handler registry with all built-in stage handlers.
21
+ *
22
+ * The registry maps stage type names (as used in YAML) to their handler
23
+ * instances. All handlers are stateless — they read/write through the
24
+ * {@link PipelineContext}.
25
+ */
26
+ export function buildDefaultHandlerRegistry() {
27
+ return new Map([
28
+ ['classify', new ClassifyHandler()],
29
+ ['summarize', new SummarizeHandler()],
30
+ ['translate', new TranslateHandler()],
31
+ ['expand', new ExpandHandler()],
32
+ ['rag-query', new RagQueryHandler()],
33
+ ['rerank', new RerankHandler()],
34
+ ['skill-select', new SkillSelectHandler()],
35
+ ['build-tool-query', new BuildToolQueryHandler()],
36
+ ['tool-select', new ToolSelectHandler()],
37
+ ['assemble', new AssembleHandler()],
38
+ ['tool-loop', new ToolLoopHandler()],
39
+ ['history-upsert', new HistoryUpsertHandler()],
40
+ ]);
41
+ }
42
+ export { summarizeAndStore } from './history-upsert.js';
43
+ export { AssembleHandler, BuildToolQueryHandler, ClassifyHandler, ExpandHandler, HistoryUpsertHandler, RagQueryHandler, RerankHandler, SkillSelectHandler, SummarizeHandler, ToolLoopHandler, ToolSelectHandler, TranslateHandler, };
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pipeline/handlers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAIlD;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO,IAAI,GAAG,CAAwB;QACpC,CAAC,UAAU,EAAE,IAAI,eAAe,EAAE,CAAC;QACnC,CAAC,WAAW,EAAE,IAAI,gBAAgB,EAAE,CAAC;QACrC,CAAC,WAAW,EAAE,IAAI,gBAAgB,EAAE,CAAC;QACrC,CAAC,QAAQ,EAAE,IAAI,aAAa,EAAE,CAAC;QAC/B,CAAC,WAAW,EAAE,IAAI,eAAe,EAAE,CAAC;QACpC,CAAC,QAAQ,EAAE,IAAI,aAAa,EAAE,CAAC;QAC/B,CAAC,cAAc,EAAE,IAAI,kBAAkB,EAAE,CAAC;QAC1C,CAAC,kBAAkB,EAAE,IAAI,qBAAqB,EAAE,CAAC;QACjD,CAAC,aAAa,EAAE,IAAI,iBAAiB,EAAE,CAAC;QACxC,CAAC,UAAU,EAAE,IAAI,eAAe,EAAE,CAAC;QACnC,CAAC,WAAW,EAAE,IAAI,eAAe,EAAE,CAAC;QACpC,CAAC,gBAAgB,EAAE,IAAI,oBAAoB,EAAE,CAAC;KAC/C,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,GACjB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * RagQueryHandler — queries a single RAG store.
3
+ *
4
+ * Reads: `ctx.ragText`, `ctx.ragStores`
5
+ * Writes: `ctx.ragResults[store]` where `store` is from config
6
+ *
7
+ * ## Config
8
+ *
9
+ * | Field | Type | Default | Description |
10
+ * |---------|--------------------------------|----------|--------------------------------------|
11
+ * | `store` | string | required | Store key (must exist in `ctx.ragStores`) |
12
+ * | `k` | number | from ctx | Number of results to retrieve |
13
+ * | `scope` | `global` \| `user` \| `session` | — | Scope filter: `user` adds userId filter, `session` adds sessionId filter, `global` adds no filter |
14
+ * | `queryText` | `'toolQueryText'` \| string | — | Overrides the query text for this call. `'toolQueryText'` reads the enriched text from `ctx.toolQueryText` (falls back to `ragText`). Any other string is used literally. When set, a one-off embedding is built for this call without touching the cached `ctx.queryEmbedding`. |
15
+ *
16
+ * ## Parallel safety
17
+ *
18
+ * Each instance writes to a different slot in `ctx.ragResults`, so
19
+ * multiple rag-query stages can safely run in parallel.
20
+ */
21
+ import type { ISpan } from '../../tracer/types.js';
22
+ import type { PipelineContext } from '../context.js';
23
+ import type { IStageHandler } from '../stage-handler.js';
24
+ export declare class RagQueryHandler implements IStageHandler {
25
+ execute(ctx: PipelineContext, config: Record<string, unknown>, span: ISpan): Promise<boolean>;
26
+ }
27
+ //# sourceMappingURL=rag-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag-query.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/rag-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;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,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE,KAAK,GACV,OAAO,CAAC,OAAO,CAAC;CAyGpB"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * RagQueryHandler — queries a single RAG store.
3
+ *
4
+ * Reads: `ctx.ragText`, `ctx.ragStores`
5
+ * Writes: `ctx.ragResults[store]` where `store` is from config
6
+ *
7
+ * ## Config
8
+ *
9
+ * | Field | Type | Default | Description |
10
+ * |---------|--------------------------------|----------|--------------------------------------|
11
+ * | `store` | string | required | Store key (must exist in `ctx.ragStores`) |
12
+ * | `k` | number | from ctx | Number of results to retrieve |
13
+ * | `scope` | `global` \| `user` \| `session` | — | Scope filter: `user` adds userId filter, `session` adds sessionId filter, `global` adds no filter |
14
+ * | `queryText` | `'toolQueryText'` \| string | — | Overrides the query text for this call. `'toolQueryText'` reads the enriched text from `ctx.toolQueryText` (falls back to `ragText`). Any other string is used literally. When set, a one-off embedding is built for this call without touching the cached `ctx.queryEmbedding`. |
15
+ *
16
+ * ## Parallel safety
17
+ *
18
+ * Each instance writes to a different slot in `ctx.ragResults`, so
19
+ * multiple rag-query stages can safely run in parallel.
20
+ */
21
+ import { QueryEmbedding, TextOnlyEmbedding } from '@mcp-abap-adt/llm-agent';
22
+ export class RagQueryHandler {
23
+ async execute(ctx, config, span) {
24
+ const storeName = config.store;
25
+ if (!storeName || !ctx.ragStores[storeName]) {
26
+ span.setAttribute('error', `Invalid store: ${storeName}`);
27
+ return true; // non-fatal, skip
28
+ }
29
+ const k = config.k ?? ctx.config.ragQueryK ?? 10;
30
+ const store = ctx.ragStores[storeName];
31
+ span.setAttribute('store', storeName);
32
+ span.setAttribute('k', k);
33
+ // Resolve the query text for this call. Optional `queryText` override
34
+ // bypasses the shared cache so enriched-context searches don't pollute
35
+ // subsequent ragText-based queries.
36
+ const queryTextOverride = typeof config.queryText === 'string'
37
+ ? config.queryText === 'toolQueryText'
38
+ ? (ctx.toolQueryText ?? ctx.ragText)
39
+ : config.queryText
40
+ : undefined;
41
+ const queryText = queryTextOverride ?? ctx.ragText;
42
+ let embedding;
43
+ if (queryTextOverride !== undefined) {
44
+ embedding = ctx.embedder
45
+ ? new QueryEmbedding(queryText, ctx.embedder, ctx.options)
46
+ : new TextOnlyEmbedding(queryText);
47
+ span.setAttribute('query_text_override', true);
48
+ }
49
+ else {
50
+ // Lazily create and cache a shared query embedding for all rag-query stages
51
+ if (!ctx.queryEmbedding) {
52
+ ctx.queryEmbedding = ctx.embedder
53
+ ? new QueryEmbedding(ctx.ragText, ctx.embedder, ctx.options)
54
+ : new TextOnlyEmbedding(ctx.ragText);
55
+ }
56
+ embedding = ctx.queryEmbedding;
57
+ }
58
+ // Build scope filter based on config
59
+ const scope = config.scope;
60
+ const scopeFilter = {};
61
+ if (scope === 'user' && ctx.options?.userId) {
62
+ scopeFilter.userId = ctx.options.userId;
63
+ }
64
+ if (scope === 'session') {
65
+ scopeFilter.sessionId = ctx.sessionId;
66
+ }
67
+ const queryOptions = {
68
+ ...ctx.options,
69
+ ragFilter: { ...ctx.options?.ragFilter, ...scopeFilter },
70
+ };
71
+ const ragStart = Date.now();
72
+ const result = await store.query(embedding, k, queryOptions);
73
+ ctx.requestLogger.logRagQuery({
74
+ store: storeName,
75
+ query: queryText.slice(0, 200),
76
+ resultCount: result.ok ? result.value.length : 0,
77
+ durationMs: Date.now() - ragStart,
78
+ });
79
+ // Log embedding usage once (first rag-query stage that uses the embedding)
80
+ if (!ctx.embeddingUsageLogged && embedding?.getUsage) {
81
+ const usage = await embedding.getUsage();
82
+ if (usage) {
83
+ ctx.requestLogger.logLlmCall({
84
+ component: 'embedding',
85
+ model: 'embedder',
86
+ promptTokens: usage.promptTokens,
87
+ completionTokens: 0,
88
+ totalTokens: usage.totalTokens,
89
+ durationMs: 0, // embed completed before store.query(); not separately measurable here
90
+ scope: 'request',
91
+ });
92
+ ctx.embeddingUsageLogged = true;
93
+ }
94
+ }
95
+ ctx.metrics.ragQueryCount.add(1, {
96
+ store: storeName,
97
+ hit: String(result.ok && result.value.length > 0),
98
+ });
99
+ if (result.ok) {
100
+ ctx.ragResults[storeName] = result.value;
101
+ span.setAttribute('results', result.value.length);
102
+ // Log RAG results with scores for diagnostics
103
+ ctx.options?.sessionLogger?.logStep(`rag_query_${storeName}`, {
104
+ query: queryText.slice(0, 200),
105
+ k,
106
+ resultCount: result.value.length,
107
+ results: result.value.map((r) => ({
108
+ id: r.metadata.id,
109
+ score: r.score,
110
+ text: r.text.slice(0, 120),
111
+ })),
112
+ });
113
+ }
114
+ return true;
115
+ }
116
+ }
117
+ //# sourceMappingURL=rag-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag-query.js","sourceRoot":"","sources":["../../../src/pipeline/handlers/rag-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAK5E,MAAM,OAAO,eAAe;IAC1B,KAAK,CAAC,OAAO,CACX,GAAoB,EACpB,MAA+B,EAC/B,IAAW;QAEX,MAAM,SAAS,GAAG,MAAM,CAAC,KAAe,CAAC;QACzC,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,kBAAkB,SAAS,EAAE,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,CAAC,kBAAkB;QACjC,CAAC;QAED,MAAM,CAAC,GAAI,MAAM,CAAC,CAAY,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEvC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAE1B,sEAAsE;QACtE,uEAAuE;QACvE,oCAAoC;QACpC,MAAM,iBAAiB,GACrB,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;YAClC,CAAC,CAAC,MAAM,CAAC,SAAS,KAAK,eAAe;gBACpC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,OAAO,CAAC;gBACpC,CAAC,CAAC,MAAM,CAAC,SAAS;YACpB,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,SAAS,GAAG,iBAAiB,IAAI,GAAG,CAAC,OAAO,CAAC;QAEnD,IAAI,SAAoC,CAAC;QACzC,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACpC,SAAS,GAAG,GAAG,CAAC,QAAQ;gBACtB,CAAC,CAAC,IAAI,cAAc,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;gBAC1D,CAAC,CAAC,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,4EAA4E;YAC5E,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;gBACxB,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC,QAAQ;oBAC/B,CAAC,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;oBAC5D,CAAC,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzC,CAAC;YACD,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC;QACjC,CAAC;QAED,qCAAqC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAA6B,CAAC;QACnD,MAAM,WAAW,GAA4B,EAAE,CAAC;QAChD,IAAI,KAAK,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;YAC5C,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1C,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,WAAW,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QACxC,CAAC;QAED,MAAM,YAAY,GAAgB;YAChC,GAAG,GAAG,CAAC,OAAO;YACd,SAAS,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,WAAW,EAAE;SACzD,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;QAC7D,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC;YAC5B,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC9B,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChD,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ;SAClC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,IAAI,CAAC,GAAG,CAAC,oBAAoB,IAAI,SAAS,EAAE,QAAQ,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;YACzC,IAAI,KAAK,EAAE,CAAC;gBACV,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC;oBAC3B,SAAS,EAAE,WAAW;oBACtB,KAAK,EAAE,UAAU;oBACjB,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,gBAAgB,EAAE,CAAC;oBACnB,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,UAAU,EAAE,CAAC,EAAE,uEAAuE;oBACtF,KAAK,EAAE,SAAS;iBACjB,CAAC,CAAC;gBACH,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC;YAClC,CAAC;QACH,CAAC;QAED,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE;YAC/B,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;SAClD,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YACzC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAElD,8CAA8C;YAC9C,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,SAAS,EAAE,EAAE;gBAC5D,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBAC9B,CAAC;gBACD,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;gBAChC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAChC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE;oBACjB,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;iBAC3B,CAAC,CAAC;aACJ,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * RerankHandler — re-scores RAG results using the injected reranker.
3
+ *
4
+ * Reads: `ctx.ragText`, `ctx.ragResults`
5
+ * Writes: `ctx.ragResults` (replaces with re-scored versions)
6
+ *
7
+ * Runs reranking on all stores in parallel. Falls back to original
8
+ * results if reranking fails for a store.
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 RerankHandler implements IStageHandler {
14
+ execute(ctx: PipelineContext, _config: Record<string, unknown>, span: ISpan): Promise<boolean>;
15
+ }
16
+ //# sourceMappingURL=rerank.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rerank.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/rerank.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;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,aAAc,YAAW,aAAa;IAC3C,OAAO,CACX,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,EAAE,KAAK,GACV,OAAO,CAAC,OAAO,CAAC;CAwBpB"}