@mcp-abap-adt/llm-agent 2.2.1 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/dist/index.d.ts +25 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +24 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/smart-agent/agent.d.ts +27 -1
  6. package/dist/smart-agent/agent.d.ts.map +1 -1
  7. package/dist/smart-agent/agent.js +236 -35
  8. package/dist/smart-agent/agent.js.map +1 -1
  9. package/dist/smart-agent/builder.d.ts +48 -4
  10. package/dist/smart-agent/builder.d.ts.map +1 -1
  11. package/dist/smart-agent/builder.js +120 -11
  12. package/dist/smart-agent/builder.js.map +1 -1
  13. package/dist/smart-agent/cache/index.d.ts +4 -0
  14. package/dist/smart-agent/cache/index.d.ts.map +1 -0
  15. package/dist/smart-agent/cache/index.js +3 -0
  16. package/dist/smart-agent/cache/index.js.map +1 -0
  17. package/dist/smart-agent/cache/noop-tool-cache.d.ts +7 -0
  18. package/dist/smart-agent/cache/noop-tool-cache.d.ts.map +1 -0
  19. package/dist/smart-agent/cache/noop-tool-cache.js +8 -0
  20. package/dist/smart-agent/cache/noop-tool-cache.js.map +1 -0
  21. package/dist/smart-agent/cache/tool-cache.d.ts +14 -0
  22. package/dist/smart-agent/cache/tool-cache.d.ts.map +1 -0
  23. package/dist/smart-agent/cache/tool-cache.js +32 -0
  24. package/dist/smart-agent/cache/tool-cache.js.map +1 -0
  25. package/dist/smart-agent/cache/types.d.ts +7 -0
  26. package/dist/smart-agent/cache/types.d.ts.map +1 -0
  27. package/dist/smart-agent/cache/types.js +2 -0
  28. package/dist/smart-agent/cache/types.js.map +1 -0
  29. package/dist/smart-agent/classifier/llm-classifier.d.ts +1 -1
  30. package/dist/smart-agent/classifier/llm-classifier.d.ts.map +1 -1
  31. package/dist/smart-agent/classifier/llm-classifier.js +8 -6
  32. package/dist/smart-agent/classifier/llm-classifier.js.map +1 -1
  33. package/dist/smart-agent/cli.d.ts +2 -0
  34. package/dist/smart-agent/cli.d.ts.map +1 -1
  35. package/dist/smart-agent/cli.js +4 -0
  36. package/dist/smart-agent/cli.js.map +1 -1
  37. package/dist/smart-agent/config/config-watcher.d.ts +53 -0
  38. package/dist/smart-agent/config/config-watcher.d.ts.map +1 -0
  39. package/dist/smart-agent/config/config-watcher.js +105 -0
  40. package/dist/smart-agent/config/config-watcher.js.map +1 -0
  41. package/dist/smart-agent/config/index.d.ts +2 -0
  42. package/dist/smart-agent/config/index.d.ts.map +1 -0
  43. package/dist/smart-agent/config/index.js +2 -0
  44. package/dist/smart-agent/config/index.js.map +1 -0
  45. package/dist/smart-agent/config.d.ts +5 -1
  46. package/dist/smart-agent/config.d.ts.map +1 -1
  47. package/dist/smart-agent/config.js +11 -3
  48. package/dist/smart-agent/config.js.map +1 -1
  49. package/dist/smart-agent/health/health-checker.d.ts +21 -0
  50. package/dist/smart-agent/health/health-checker.d.ts.map +1 -0
  51. package/dist/smart-agent/health/health-checker.js +52 -0
  52. package/dist/smart-agent/health/health-checker.js.map +1 -0
  53. package/dist/smart-agent/health/index.d.ts +3 -0
  54. package/dist/smart-agent/health/index.d.ts.map +1 -0
  55. package/dist/smart-agent/health/index.js +2 -0
  56. package/dist/smart-agent/health/index.js.map +1 -0
  57. package/dist/smart-agent/health/types.d.ts +25 -0
  58. package/dist/smart-agent/health/types.d.ts.map +1 -0
  59. package/dist/smart-agent/health/types.js +2 -0
  60. package/dist/smart-agent/health/types.js.map +1 -0
  61. package/dist/smart-agent/interfaces/index.d.ts +7 -0
  62. package/dist/smart-agent/interfaces/index.d.ts.map +1 -1
  63. package/dist/smart-agent/interfaces/index.js.map +1 -1
  64. package/dist/smart-agent/interfaces/types.d.ts +2 -2
  65. package/dist/smart-agent/interfaces/types.d.ts.map +1 -1
  66. package/dist/smart-agent/metrics/in-memory-metrics.d.ts +58 -0
  67. package/dist/smart-agent/metrics/in-memory-metrics.d.ts.map +1 -0
  68. package/dist/smart-agent/metrics/in-memory-metrics.js +78 -0
  69. package/dist/smart-agent/metrics/in-memory-metrics.js.map +1 -0
  70. package/dist/smart-agent/metrics/index.d.ts +4 -0
  71. package/dist/smart-agent/metrics/index.d.ts.map +1 -0
  72. package/dist/smart-agent/metrics/index.js +3 -0
  73. package/dist/smart-agent/metrics/index.js.map +1 -0
  74. package/dist/smart-agent/metrics/noop-metrics.d.ts +17 -0
  75. package/dist/smart-agent/metrics/noop-metrics.d.ts.map +1 -0
  76. package/dist/smart-agent/metrics/noop-metrics.js +22 -0
  77. package/dist/smart-agent/metrics/noop-metrics.js.map +1 -0
  78. package/dist/smart-agent/metrics/types.d.ts +36 -0
  79. package/dist/smart-agent/metrics/types.d.ts.map +1 -0
  80. package/dist/smart-agent/metrics/types.js +9 -0
  81. package/dist/smart-agent/metrics/types.js.map +1 -0
  82. package/dist/smart-agent/otel/index.d.ts +2 -0
  83. package/dist/smart-agent/otel/index.d.ts.map +1 -0
  84. package/dist/smart-agent/otel/index.js +2 -0
  85. package/dist/smart-agent/otel/index.js.map +1 -0
  86. package/dist/smart-agent/otel/otel-tracer-adapter.d.ts +15 -0
  87. package/dist/smart-agent/otel/otel-tracer-adapter.d.ts.map +1 -0
  88. package/dist/smart-agent/otel/otel-tracer-adapter.js +62 -0
  89. package/dist/smart-agent/otel/otel-tracer-adapter.js.map +1 -0
  90. package/dist/smart-agent/pipeline.d.ts +8 -4
  91. package/dist/smart-agent/pipeline.d.ts.map +1 -1
  92. package/dist/smart-agent/pipeline.js +28 -0
  93. package/dist/smart-agent/pipeline.js.map +1 -1
  94. package/dist/smart-agent/rag/inverted-index.d.ts +26 -0
  95. package/dist/smart-agent/rag/inverted-index.d.ts.map +1 -0
  96. package/dist/smart-agent/rag/inverted-index.js +61 -0
  97. package/dist/smart-agent/rag/inverted-index.js.map +1 -0
  98. package/dist/smart-agent/rag/ollama-rag.d.ts +3 -0
  99. package/dist/smart-agent/rag/ollama-rag.d.ts.map +1 -1
  100. package/dist/smart-agent/rag/ollama-rag.js +9 -2
  101. package/dist/smart-agent/rag/ollama-rag.js.map +1 -1
  102. package/dist/smart-agent/rag/openai-embedder.d.ts +3 -0
  103. package/dist/smart-agent/rag/openai-embedder.d.ts.map +1 -1
  104. package/dist/smart-agent/rag/openai-embedder.js +7 -1
  105. package/dist/smart-agent/rag/openai-embedder.js.map +1 -1
  106. package/dist/smart-agent/rag/qdrant-rag.d.ts +26 -0
  107. package/dist/smart-agent/rag/qdrant-rag.d.ts.map +1 -0
  108. package/dist/smart-agent/rag/qdrant-rag.js +175 -0
  109. package/dist/smart-agent/rag/qdrant-rag.js.map +1 -0
  110. package/dist/smart-agent/rag/query-expander.d.ts +14 -0
  111. package/dist/smart-agent/rag/query-expander.d.ts.map +1 -0
  112. package/dist/smart-agent/rag/query-expander.js +40 -0
  113. package/dist/smart-agent/rag/query-expander.js.map +1 -0
  114. package/dist/smart-agent/rag/vector-rag.d.ts +10 -3
  115. package/dist/smart-agent/rag/vector-rag.d.ts.map +1 -1
  116. package/dist/smart-agent/rag/vector-rag.js +29 -16
  117. package/dist/smart-agent/rag/vector-rag.js.map +1 -1
  118. package/dist/smart-agent/reranker/index.d.ts +4 -0
  119. package/dist/smart-agent/reranker/index.d.ts.map +1 -0
  120. package/dist/smart-agent/reranker/index.js +3 -0
  121. package/dist/smart-agent/reranker/index.js.map +1 -0
  122. package/dist/smart-agent/reranker/llm-reranker.d.ts +10 -0
  123. package/dist/smart-agent/reranker/llm-reranker.d.ts.map +1 -0
  124. package/dist/smart-agent/reranker/llm-reranker.js +55 -0
  125. package/dist/smart-agent/reranker/llm-reranker.js.map +1 -0
  126. package/dist/smart-agent/reranker/noop-reranker.d.ts +6 -0
  127. package/dist/smart-agent/reranker/noop-reranker.d.ts.map +1 -0
  128. package/dist/smart-agent/reranker/noop-reranker.js +6 -0
  129. package/dist/smart-agent/reranker/noop-reranker.js.map +1 -0
  130. package/dist/smart-agent/reranker/types.d.ts +5 -0
  131. package/dist/smart-agent/reranker/types.d.ts.map +1 -0
  132. package/dist/smart-agent/reranker/types.js +2 -0
  133. package/dist/smart-agent/reranker/types.js.map +1 -0
  134. package/dist/smart-agent/resilience/circuit-breaker-embedder.d.ts +16 -0
  135. package/dist/smart-agent/resilience/circuit-breaker-embedder.d.ts.map +1 -0
  136. package/dist/smart-agent/resilience/circuit-breaker-embedder.js +30 -0
  137. package/dist/smart-agent/resilience/circuit-breaker-embedder.js.map +1 -0
  138. package/dist/smart-agent/resilience/circuit-breaker-llm.d.ts +18 -0
  139. package/dist/smart-agent/resilience/circuit-breaker-llm.d.ts.map +1 -0
  140. package/dist/smart-agent/resilience/circuit-breaker-llm.js +65 -0
  141. package/dist/smart-agent/resilience/circuit-breaker-llm.js.map +1 -0
  142. package/dist/smart-agent/resilience/circuit-breaker.d.ts +36 -0
  143. package/dist/smart-agent/resilience/circuit-breaker.d.ts.map +1 -0
  144. package/dist/smart-agent/resilience/circuit-breaker.js +60 -0
  145. package/dist/smart-agent/resilience/circuit-breaker.js.map +1 -0
  146. package/dist/smart-agent/resilience/fallback-rag.d.ts +21 -0
  147. package/dist/smart-agent/resilience/fallback-rag.d.ts.map +1 -0
  148. package/dist/smart-agent/resilience/fallback-rag.js +35 -0
  149. package/dist/smart-agent/resilience/fallback-rag.js.map +1 -0
  150. package/dist/smart-agent/resilience/index.d.ts +5 -0
  151. package/dist/smart-agent/resilience/index.d.ts.map +1 -0
  152. package/dist/smart-agent/resilience/index.js +5 -0
  153. package/dist/smart-agent/resilience/index.js.map +1 -0
  154. package/dist/smart-agent/session/index.d.ts +4 -0
  155. package/dist/smart-agent/session/index.d.ts.map +1 -0
  156. package/dist/smart-agent/session/index.js +3 -0
  157. package/dist/smart-agent/session/index.js.map +1 -0
  158. package/dist/smart-agent/session/noop-session-manager.d.ts +8 -0
  159. package/dist/smart-agent/session/noop-session-manager.d.ts.map +1 -0
  160. package/dist/smart-agent/session/noop-session-manager.js +11 -0
  161. package/dist/smart-agent/session/noop-session-manager.js.map +1 -0
  162. package/dist/smart-agent/session/session-manager.d.ts +13 -0
  163. package/dist/smart-agent/session/session-manager.d.ts.map +1 -0
  164. package/dist/smart-agent/session/session-manager.js +20 -0
  165. package/dist/smart-agent/session/session-manager.js.map +1 -0
  166. package/dist/smart-agent/session/types.d.ts +7 -0
  167. package/dist/smart-agent/session/types.d.ts.map +1 -0
  168. package/dist/smart-agent/session/types.js +2 -0
  169. package/dist/smart-agent/session/types.js.map +1 -0
  170. package/dist/smart-agent/smart-server.d.ts +15 -1
  171. package/dist/smart-agent/smart-server.d.ts.map +1 -1
  172. package/dist/smart-agent/smart-server.js +73 -4
  173. package/dist/smart-agent/smart-server.js.map +1 -1
  174. package/dist/smart-agent/testing/index.d.ts +51 -0
  175. package/dist/smart-agent/testing/index.d.ts.map +1 -1
  176. package/dist/smart-agent/testing/index.js +107 -0
  177. package/dist/smart-agent/testing/index.js.map +1 -1
  178. package/dist/smart-agent/tracer/index.d.ts +3 -0
  179. package/dist/smart-agent/tracer/index.d.ts.map +1 -0
  180. package/dist/smart-agent/tracer/index.js +2 -0
  181. package/dist/smart-agent/tracer/index.js.map +1 -0
  182. package/dist/smart-agent/tracer/noop-tracer.d.ts +5 -0
  183. package/dist/smart-agent/tracer/noop-tracer.d.ts.map +1 -0
  184. package/dist/smart-agent/tracer/noop-tracer.js +16 -0
  185. package/dist/smart-agent/tracer/noop-tracer.js.map +1 -0
  186. package/dist/smart-agent/tracer/types.d.ts +17 -0
  187. package/dist/smart-agent/tracer/types.d.ts.map +1 -0
  188. package/dist/smart-agent/tracer/types.js +2 -0
  189. package/dist/smart-agent/tracer/types.js.map +1 -0
  190. package/dist/smart-agent/validator/index.d.ts +3 -0
  191. package/dist/smart-agent/validator/index.d.ts.map +1 -0
  192. package/dist/smart-agent/validator/index.js +2 -0
  193. package/dist/smart-agent/validator/index.js.map +1 -0
  194. package/dist/smart-agent/validator/noop-validator.d.ts +6 -0
  195. package/dist/smart-agent/validator/noop-validator.d.ts.map +1 -0
  196. package/dist/smart-agent/validator/noop-validator.js +6 -0
  197. package/dist/smart-agent/validator/noop-validator.js.map +1 -0
  198. package/dist/smart-agent/validator/types.d.ts +18 -0
  199. package/dist/smart-agent/validator/types.d.ts.map +1 -0
  200. package/dist/smart-agent/validator/types.js +8 -0
  201. package/dist/smart-agent/validator/types.js.map +1 -0
  202. package/package.json +29 -2
package/dist/index.d.ts CHANGED
@@ -14,5 +14,30 @@ export { type DeepSeekConfig, DeepSeekProvider, } from './llm-providers/deepseek
14
14
  export { type OpenAIConfig, OpenAIProvider } from './llm-providers/openai.js';
15
15
  export { type SapCoreAIConfig, SapCoreAIProvider, } from './llm-providers/sap-core-ai.js';
16
16
  export { type MCPClientConfig, MCPClientWrapper, type TransportType, } from './mcp/client.js';
17
+ export { NoopToolCache } from './smart-agent/cache/noop-tool-cache.js';
18
+ export { ToolCache } from './smart-agent/cache/tool-cache.js';
19
+ export type { IToolCache } from './smart-agent/cache/types.js';
20
+ export { ConfigWatcher, type ConfigWatcherOptions, type HotReloadableConfig, } from './smart-agent/config/config-watcher.js';
21
+ export { HealthChecker, type HealthCheckerDeps, } from './smart-agent/health/health-checker.js';
22
+ export type { CircuitBreakerStatus, HealthComponentStatus, HealthStatus, } from './smart-agent/health/types.js';
23
+ export { type CounterSnapshot, type HistogramSnapshot, InMemoryMetrics, type MetricsSnapshot, } from './smart-agent/metrics/in-memory-metrics.js';
24
+ export { NoopMetrics } from './smart-agent/metrics/noop-metrics.js';
25
+ export type { ICounter, IHistogram, IMetrics, } from './smart-agent/metrics/types.js';
26
+ export { QdrantRag, type QdrantRagConfig, } from './smart-agent/rag/qdrant-rag.js';
27
+ export { type IQueryExpander, LlmQueryExpander, NoopQueryExpander, } from './smart-agent/rag/query-expander.js';
28
+ export { LlmReranker } from './smart-agent/reranker/llm-reranker.js';
29
+ export { NoopReranker } from './smart-agent/reranker/noop-reranker.js';
30
+ export type { IReranker } from './smart-agent/reranker/types.js';
31
+ export { CircuitBreaker, type CircuitBreakerConfig, type CircuitState, } from './smart-agent/resilience/circuit-breaker.js';
32
+ export { CircuitBreakerEmbedder } from './smart-agent/resilience/circuit-breaker-embedder.js';
33
+ export { CircuitBreakerLlm } from './smart-agent/resilience/circuit-breaker-llm.js';
34
+ export { FallbackRag } from './smart-agent/resilience/fallback-rag.js';
35
+ export { NoopSessionManager } from './smart-agent/session/noop-session-manager.js';
36
+ export { SessionManager } from './smart-agent/session/session-manager.js';
37
+ export type { ISessionManager } from './smart-agent/session/types.js';
38
+ export { NoopTracer } from './smart-agent/tracer/noop-tracer.js';
39
+ export type { ISpan, ITracer, SpanOptions, SpanStatus, } from './smart-agent/tracer/types.js';
40
+ export { NoopValidator } from './smart-agent/validator/noop-validator.js';
41
+ export type { IOutputValidator, ValidationResult, } from './smart-agent/validator/types.js';
17
42
  export type { AgentResponse, LLMProviderConfig, LLMResponse, Message, ToolCall, ToolResult, } from './types.js';
18
43
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,GAC1B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,GACzB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EACL,gBAAgB,EAChB,KAAK,sBAAsB,GAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,GAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,eAAe,EACpB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EACL,KAAK,cAAc,EACnB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG9E,OAAO,EACL,KAAK,eAAe,EACpB,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,KAAK,eAAe,EACpB,gBAAgB,EAChB,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,OAAO,EACP,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -21,4 +21,28 @@ export { OpenAIProvider } from './llm-providers/openai.js';
21
21
  export { SapCoreAIProvider, } from './llm-providers/sap-core-ai.js';
22
22
  // MCP Client
23
23
  export { MCPClientWrapper, } from './mcp/client.js';
24
+ export { NoopToolCache } from './smart-agent/cache/noop-tool-cache.js';
25
+ export { ToolCache } from './smart-agent/cache/tool-cache.js';
26
+ // Config
27
+ export { ConfigWatcher, } from './smart-agent/config/config-watcher.js';
28
+ export { HealthChecker, } from './smart-agent/health/health-checker.js';
29
+ export { InMemoryMetrics, } from './smart-agent/metrics/in-memory-metrics.js';
30
+ export { NoopMetrics } from './smart-agent/metrics/noop-metrics.js';
31
+ // Qdrant RAG
32
+ export { QdrantRag, } from './smart-agent/rag/qdrant-rag.js';
33
+ // Query Expander
34
+ export { LlmQueryExpander, NoopQueryExpander, } from './smart-agent/rag/query-expander.js';
35
+ // Reranker
36
+ export { LlmReranker } from './smart-agent/reranker/llm-reranker.js';
37
+ export { NoopReranker } from './smart-agent/reranker/noop-reranker.js';
38
+ // Resilience
39
+ export { CircuitBreaker, } from './smart-agent/resilience/circuit-breaker.js';
40
+ export { CircuitBreakerEmbedder } from './smart-agent/resilience/circuit-breaker-embedder.js';
41
+ export { CircuitBreakerLlm } from './smart-agent/resilience/circuit-breaker-llm.js';
42
+ export { FallbackRag } from './smart-agent/resilience/fallback-rag.js';
43
+ export { NoopSessionManager } from './smart-agent/session/noop-session-manager.js';
44
+ export { SessionManager } from './smart-agent/session/session-manager.js';
45
+ // Tracer
46
+ export { NoopTracer } from './smart-agent/tracer/noop-tracer.js';
47
+ export { NoopValidator } from './smart-agent/validator/noop-validator.js';
24
48
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iEAAiE;AACjE,OAAO,EAAE,KAAK,EAAoB,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,cAAc,GAEf,MAAM,6BAA6B,CAAC;AACrC,0CAA0C;AAC1C,OAAO,EAAE,SAAS,EAAwB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACL,aAAa,GAEd,MAAM,4BAA4B,CAAC;AACpC,8DAA8D;AAC9D,mFAAmF;AACnF,OAAO,EAAE,WAAW,EAA0B,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EACL,gBAAgB,GAEjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,cAAc,GAEf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAoB,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAEL,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAqB,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC9E,gBAAgB;AAChB,2DAA2D;AAC3D,OAAO,EAEL,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AAExC,aAAa;AACb,OAAO,EAEL,gBAAgB,GAEjB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iEAAiE;AACjE,OAAO,EAAE,KAAK,EAAoB,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,cAAc,GAEf,MAAM,6BAA6B,CAAC;AACrC,0CAA0C;AAC1C,OAAO,EAAE,SAAS,EAAwB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACL,aAAa,GAEd,MAAM,4BAA4B,CAAC;AACpC,8DAA8D;AAC9D,mFAAmF;AACnF,OAAO,EAAE,WAAW,EAA0B,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EACL,gBAAgB,GAEjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,cAAc,GAEf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAoB,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAEL,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAqB,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC9E,gBAAgB;AAChB,2DAA2D;AAC3D,OAAO,EAEL,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AAExC,aAAa;AACb,OAAO,EAEL,gBAAgB,GAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAG9D,SAAS;AACT,OAAO,EACL,aAAa,GAGd,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,aAAa,GAEd,MAAM,wCAAwC,CAAC;AAOhD,OAAO,EAGL,eAAe,GAEhB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAOpE,aAAa;AACb,OAAO,EACL,SAAS,GAEV,MAAM,iCAAiC,CAAC;AACzC,iBAAiB;AACjB,OAAO,EAEL,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,qCAAqC,CAAC;AAC7C,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAEvE,aAAa;AACb,OAAO,EACL,cAAc,GAGf,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAG1E,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAOjE,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { Message } from '../types.js';
2
+ import type { IToolCache } from './cache/types.js';
2
3
  import type { IContextAssembler } from './interfaces/assembler.js';
3
4
  import type { ISubpromptClassifier } from './interfaces/classifier.js';
4
5
  import type { ILlm } from './interfaces/llm.js';
@@ -6,7 +7,13 @@ import type { IMcpClient } from './interfaces/mcp-client.js';
6
7
  import type { IRag } from './interfaces/rag.js';
7
8
  import { type CallOptions, type LlmStreamChunk, type Result, SmartAgentError } from './interfaces/types.js';
8
9
  import type { ILogger } from './logger/index.js';
10
+ import type { IMetrics } from './metrics/types.js';
9
11
  import type { IPromptInjectionDetector, IToolPolicy, SessionPolicy } from './policy/types.js';
12
+ import { type IQueryExpander } from './rag/query-expander.js';
13
+ import type { IReranker } from './reranker/types.js';
14
+ import type { ISessionManager } from './session/types.js';
15
+ import type { ITracer } from './tracer/types.js';
16
+ import type { IOutputValidator } from './validator/types.js';
10
17
  export declare class OrchestratorError extends SmartAgentError {
11
18
  constructor(message: string, code?: string);
12
19
  }
@@ -22,9 +29,16 @@ export interface SmartAgentDeps {
22
29
  ragStores: SmartAgentRagStores;
23
30
  classifier: ISubpromptClassifier;
24
31
  assembler: IContextAssembler;
32
+ reranker?: IReranker;
33
+ queryExpander?: IQueryExpander;
25
34
  logger?: ILogger;
26
35
  toolPolicy?: IToolPolicy;
27
36
  injectionDetector?: IPromptInjectionDetector;
37
+ tracer?: ITracer;
38
+ metrics?: IMetrics;
39
+ toolCache?: IToolCache;
40
+ outputValidator?: IOutputValidator;
41
+ sessionManager?: ISessionManager;
28
42
  }
29
43
  export interface SmartAgentConfig {
30
44
  maxIterations: number;
@@ -40,6 +54,9 @@ export interface SmartAgentConfig {
40
54
  historySummaryPrompt?: string;
41
55
  historyAutoSummarizeLimit?: number;
42
56
  mode?: 'hard' | 'pass' | 'smart';
57
+ queryExpansionEnabled?: boolean;
58
+ toolResultCacheTtlMs?: number;
59
+ sessionTokenBudget?: number;
43
60
  }
44
61
  export type StopReason = 'stop' | 'iteration_limit' | 'tool_call_limit';
45
62
  export interface SmartAgentResponse {
@@ -55,9 +72,18 @@ export interface SmartAgentResponse {
55
72
  }
56
73
  export declare class SmartAgent {
57
74
  private readonly deps;
58
- private readonly config;
75
+ private config;
59
76
  private readonly toolAvailabilityRegistry;
77
+ private readonly tracer;
78
+ private readonly metrics;
79
+ private readonly reranker;
80
+ private readonly queryExpander;
81
+ private readonly toolCache;
82
+ private readonly outputValidator;
83
+ private readonly sessionManager;
60
84
  constructor(deps: SmartAgentDeps, config: SmartAgentConfig);
85
+ /** Apply a partial config update at runtime (hot-reload). */
86
+ applyConfigUpdate(update: Partial<SmartAgentConfig>): void;
61
87
  healthCheck(options?: CallOptions): Promise<Result<{
62
88
  llm: boolean;
63
89
  rag: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/smart-agent/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/smart-agent/agent.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,15 @@
1
1
  import { randomUUID } from 'node:crypto';
2
+ import { NoopToolCache } from './cache/noop-tool-cache.js';
2
3
  import { SmartAgentError, } from './interfaces/types.js';
4
+ import { NoopMetrics } from './metrics/noop-metrics.js';
3
5
  import { isToolContextUnavailableError, ToolAvailabilityRegistry, } from './policy/tool-availability-registry.js';
6
+ import { NoopQueryExpander, } from './rag/query-expander.js';
7
+ import { NoopReranker } from './reranker/noop-reranker.js';
8
+ import { NoopSessionManager } from './session/noop-session-manager.js';
9
+ import { NoopTracer } from './tracer/noop-tracer.js';
4
10
  import { normalizeExternalTools } from './utils/external-tools-normalizer.js';
5
11
  import { getStreamToolCallName, toToolCallDelta, } from './utils/tool-call-deltas.js';
12
+ import { NoopValidator } from './validator/noop-validator.js';
6
13
  export class OrchestratorError extends SmartAgentError {
7
14
  constructor(message, code = 'ORCHESTRATOR_ERROR') {
8
15
  super(message, code);
@@ -31,10 +38,28 @@ export class SmartAgent {
31
38
  deps;
32
39
  config;
33
40
  toolAvailabilityRegistry;
41
+ tracer;
42
+ metrics;
43
+ reranker;
44
+ queryExpander;
45
+ toolCache;
46
+ outputValidator;
47
+ sessionManager;
34
48
  constructor(deps, config) {
35
49
  this.deps = deps;
36
50
  this.config = config;
37
51
  this.toolAvailabilityRegistry = new ToolAvailabilityRegistry(this.config.toolUnavailableTtlMs);
52
+ this.tracer = deps.tracer ?? new NoopTracer();
53
+ this.metrics = deps.metrics ?? new NoopMetrics();
54
+ this.reranker = deps.reranker ?? new NoopReranker();
55
+ this.queryExpander = deps.queryExpander ?? new NoopQueryExpander();
56
+ this.toolCache = deps.toolCache ?? new NoopToolCache();
57
+ this.outputValidator = deps.outputValidator ?? new NoopValidator();
58
+ this.sessionManager = deps.sessionManager ?? new NoopSessionManager();
59
+ }
60
+ /** Apply a partial config update at runtime (hot-reload). */
61
+ applyConfigUpdate(update) {
62
+ this.config = { ...this.config, ...update };
38
63
  }
39
64
  async healthCheck(options) {
40
65
  const results = {
@@ -99,8 +124,13 @@ export class SmartAgent {
99
124
  };
100
125
  return;
101
126
  }
127
+ this.metrics.requestCount.add();
128
+ const requestStart = Date.now();
102
129
  const traceId = options?.trace?.traceId ?? randomUUID();
103
- const pipelineT0 = Date.now();
130
+ const rootSpan = this.tracer.startSpan('smart_agent.process', {
131
+ traceId,
132
+ attributes: { 'smart_agent.mode': this.config.mode || 'smart' },
133
+ });
104
134
  let timeoutCleanup;
105
135
  let opts = options;
106
136
  if (this.config.timeoutMs) {
@@ -127,15 +157,27 @@ export class SmartAgent {
127
157
  const stream = this.deps.mainLlm.streamChat(messages, externalTools, opts);
128
158
  for await (const chunk of stream)
129
159
  yield chunk;
160
+ rootSpan.setStatus('ok');
161
+ rootSpan.end();
130
162
  return;
131
163
  }
132
164
  // 1. Unified Preparation
133
- const initResult = await this._preparePipeline(textOrMessages, opts, traceId, pipelineT0);
165
+ const initResult = await this._preparePipeline(textOrMessages, opts, rootSpan);
134
166
  if (!initResult.ok) {
167
+ rootSpan.setStatus('error', initResult.error.message);
168
+ rootSpan.end();
135
169
  yield initResult;
136
170
  return;
137
171
  }
138
- const { subprompts, processedHistory, toolClientMap } = initResult.value;
172
+ let { processedHistory } = initResult.value;
173
+ const { subprompts, toolClientMap } = initResult.value;
174
+ // Token budget check — summarize if over budget
175
+ if (this.sessionManager.isOverBudget()) {
176
+ const sumResult = await this._summarizeHistory(processedHistory, opts);
177
+ if (sumResult.ok)
178
+ processedHistory = sumResult.value;
179
+ this.sessionManager.reset();
180
+ }
139
181
  // 2. Decide context and tools for the WHOLE request
140
182
  const actions = subprompts.filter((sp) => sp.type === 'action');
141
183
  const isSapRequired = actions.some((a) => a.context === 'sap-abap') || mode === 'hard';
@@ -149,15 +191,49 @@ export class SmartAgent {
149
191
  if (isSapRequired) {
150
192
  // Collect all action texts for RAG
151
193
  const combinedActionText = actions.map((a) => a.text).join(' ');
152
- const ragText = await this._toEnglishForRag(combinedActionText, opts);
194
+ let ragText = await this._toEnglishForRag(combinedActionText, opts);
195
+ if (this.config.queryExpansionEnabled) {
196
+ const expandResult = await this.queryExpander.expand(ragText, opts);
197
+ if (expandResult.ok)
198
+ ragText = expandResult.value;
199
+ }
153
200
  const k = this.config.ragQueryK ?? 10;
201
+ const ragSpan = this.tracer.startSpan('smart_agent.rag_query', {
202
+ parent: rootSpan,
203
+ attributes: { 'rag.k': k },
204
+ });
154
205
  const [fR, fbR, sR] = await Promise.all([
155
206
  this.deps.ragStores.facts.query(ragText, k, opts),
156
207
  this.deps.ragStores.feedback.query(ragText, k, opts),
157
208
  this.deps.ragStores.state.query(ragText, k, opts),
158
209
  ]);
210
+ ragSpan.end();
211
+ this.metrics.ragQueryCount.add(1, {
212
+ store: 'facts',
213
+ hit: String(fR.ok && fR.value.length > 0),
214
+ });
215
+ this.metrics.ragQueryCount.add(1, {
216
+ store: 'feedback',
217
+ hit: String(fbR.ok && fbR.value.length > 0),
218
+ });
219
+ this.metrics.ragQueryCount.add(1, {
220
+ store: 'state',
221
+ hit: String(sR.ok && sR.value.length > 0),
222
+ });
223
+ // Rerank results
224
+ const [rerankedFacts, rerankedFeedback, rerankedState] = await Promise.all([
225
+ fR.ok
226
+ ? this.reranker.rerank(ragText, fR.value, opts)
227
+ : Promise.resolve(fR),
228
+ fbR.ok
229
+ ? this.reranker.rerank(ragText, fbR.value, opts)
230
+ : Promise.resolve(fbR),
231
+ sR.ok
232
+ ? this.reranker.rerank(ragText, sR.value, opts)
233
+ : Promise.resolve(sR),
234
+ ]);
159
235
  const { tools: mcpTools } = await this._listAllTools(opts);
160
- const facts = fR.ok ? fR.value : [];
236
+ const facts = rerankedFacts.ok ? rerankedFacts.value : [];
161
237
  const ragToolNames = new Set(facts
162
238
  .map((r) => r.metadata.id)
163
239
  .filter((id) => id?.startsWith('tool:'))
@@ -169,8 +245,8 @@ export class SmartAgent {
169
245
  : [];
170
246
  retrieved = {
171
247
  facts,
172
- feedback: fbR.ok ? fbR.value : [],
173
- state: sR.ok ? sR.value : [],
248
+ feedback: rerankedFeedback.ok ? rerankedFeedback.value : [],
249
+ state: rerankedState.ok ? rerankedState.value : [],
174
250
  tools: selectedMcpTools,
175
251
  };
176
252
  finalTools =
@@ -190,31 +266,59 @@ export class SmartAgent {
190
266
  });
191
267
  }
192
268
  // 3. Assemble Context once
193
- const mainAction = actions.length > 0
194
- ? actions[0]
195
- : subprompts.find((sp) => sp.type === 'chat') || subprompts[0];
269
+ const mainAction = actions.length > 1
270
+ ? {
271
+ type: 'action',
272
+ text: actions.map((a) => a.text).join('\n'),
273
+ context: actions.find((a) => a.context)?.context,
274
+ dependency: 'independent',
275
+ }
276
+ : actions.length === 1
277
+ ? actions[0]
278
+ : subprompts.find((sp) => sp.type === 'chat') || subprompts[0];
279
+ if (actions.length > 1) {
280
+ opts?.sessionLogger?.logStep('actions_merged', {
281
+ count: actions.length,
282
+ actions: actions.map((a) => ({
283
+ text: a.text,
284
+ dependency: a.dependency,
285
+ })),
286
+ });
287
+ }
288
+ const assembleSpan = this.tracer.startSpan('smart_agent.assemble', {
289
+ parent: rootSpan,
290
+ });
196
291
  const assembleResult = await this.deps.assembler.assemble(mainAction, retrieved, processedHistory, opts);
197
292
  if (!assembleResult.ok) {
293
+ assembleSpan.setStatus('error', assembleResult.error.message);
294
+ assembleSpan.end();
295
+ rootSpan.setStatus('error', assembleResult.error.message);
296
+ rootSpan.end();
198
297
  yield {
199
298
  ok: false,
200
299
  error: new OrchestratorError(assembleResult.error.message, 'ASSEMBLER_ERROR'),
201
300
  };
202
301
  return;
203
302
  }
303
+ assembleSpan.setStatus('ok');
304
+ assembleSpan.end();
204
305
  opts?.sessionLogger?.logStep(`final_context_assembled`, {
205
306
  messages: assembleResult.value,
206
307
  tools: finalTools.map((t) => t.name),
207
308
  });
208
309
  // 4. Single Streaming Loop
209
- const stream = this._runStreamingToolLoop(mainAction, retrieved, assembleResult.value, toolClientMap, opts, traceId, sessionId, mode === 'hard' ? [] : externalTools, finalTools);
310
+ const stream = this._runStreamingToolLoop(mainAction, retrieved, assembleResult.value, toolClientMap, opts, rootSpan, sessionId, mode === 'hard' ? [] : externalTools, finalTools);
210
311
  for await (const chunk of stream)
211
312
  yield chunk;
313
+ rootSpan.setStatus('ok');
212
314
  }
213
315
  finally {
316
+ rootSpan.end();
214
317
  timeoutCleanup?.();
318
+ this.metrics.requestLatency.record(Date.now() - requestStart);
215
319
  }
216
320
  }
217
- async _preparePipeline(textOrMessages, opts, _traceId, _pipelineT0) {
321
+ async _preparePipeline(textOrMessages, opts, parentSpan) {
218
322
  opts?.sessionLogger?.logStep('client_request', { textOrMessages });
219
323
  const text = typeof textOrMessages === 'string'
220
324
  ? textOrMessages
@@ -228,31 +332,52 @@ export class SmartAgent {
228
332
  if (res.ok)
229
333
  processedHistory = res.value;
230
334
  }
335
+ const classifySpan = this.tracer.startSpan('smart_agent.classify', {
336
+ parent: parentSpan,
337
+ });
231
338
  const classifyResult = await this.deps.classifier.classify(text, opts);
232
- if (!classifyResult.ok)
339
+ if (!classifyResult.ok) {
340
+ classifySpan.setStatus('error', classifyResult.error.message);
341
+ classifySpan.end();
233
342
  return {
234
343
  ok: false,
235
344
  error: new OrchestratorError(classifyResult.error.message, 'CLASSIFIER_ERROR'),
236
345
  };
346
+ }
347
+ classifySpan.setStatus('ok');
348
+ classifySpan.end();
237
349
  opts?.sessionLogger?.logStep('classifier_response', {
238
350
  subprompts: classifyResult.value,
239
351
  });
240
352
  const subprompts = classifyResult.value;
353
+ for (const sp of subprompts) {
354
+ this.metrics.classifierIntentCount.add(1, { intent: sp.type });
355
+ }
241
356
  const others = subprompts.filter((sp) => sp.type === 'fact' || sp.type === 'state' || sp.type === 'feedback');
242
357
  const ragStoreMap = new Map([
243
358
  ['fact', this.deps.ragStores.facts],
244
359
  ['feedback', this.deps.ragStores.feedback],
245
360
  ['state', this.deps.ragStores.state],
246
361
  ]);
247
- await Promise.allSettled(others.map(async (sp) => {
248
- const s = ragStoreMap.get(sp.type);
249
- if (s)
250
- await s.upsert(sp.text, this._buildRagMetadata(), opts);
251
- }));
362
+ if (others.length > 0) {
363
+ const upsertSpan = this.tracer.startSpan('smart_agent.rag_upsert', {
364
+ parent: parentSpan,
365
+ attributes: { 'rag.upsert_count': others.length },
366
+ });
367
+ await Promise.allSettled(others.map(async (sp) => {
368
+ const s = ragStoreMap.get(sp.type);
369
+ if (s)
370
+ await s.upsert(sp.text, this._buildRagMetadata(), opts);
371
+ }));
372
+ upsertSpan.end();
373
+ }
252
374
  const { toolClientMap } = await this._listAllTools(opts);
253
375
  return { ok: true, value: { subprompts, processedHistory, toolClientMap } };
254
376
  }
255
- async *_runStreamingToolLoop(_action, _retrieved, initialMessages, toolClientMap, opts, _traceId, sessionId, externalTools, activeTools) {
377
+ async *_runStreamingToolLoop(_action, _retrieved, initialMessages, toolClientMap, opts, parentSpan, sessionId, externalTools, activeTools) {
378
+ const toolLoopSpan = this.tracer.startSpan('smart_agent.tool_loop', {
379
+ parent: parentSpan,
380
+ });
256
381
  let toolCallCount = 0;
257
382
  let messages = initialMessages;
258
383
  const usage = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };
@@ -260,10 +385,14 @@ export class SmartAgent {
260
385
  let currentTools = activeTools;
261
386
  for (let iteration = 0;; iteration++) {
262
387
  if (opts?.signal?.aborted) {
388
+ toolLoopSpan.setStatus('error', 'Aborted');
389
+ toolLoopSpan.end();
263
390
  yield { ok: false, error: new OrchestratorError('Aborted', 'ABORTED') };
264
391
  return;
265
392
  }
266
393
  if (iteration >= this.config.maxIterations) {
394
+ toolLoopSpan.addEvent('iteration_limit_reached');
395
+ toolLoopSpan.end();
267
396
  yield {
268
397
  ok: true,
269
398
  value: { content: '', finishReason: 'length', usage },
@@ -282,12 +411,22 @@ export class SmartAgent {
282
411
  messages,
283
412
  tools: currentTools,
284
413
  });
414
+ const llmSpan = this.tracer.startSpan('smart_agent.llm_call', {
415
+ parent: toolLoopSpan,
416
+ attributes: { 'llm.iteration': iteration + 1 },
417
+ });
418
+ this.metrics.llmCallCount.add();
419
+ const llmCallStart = Date.now();
285
420
  const stream = this.deps.mainLlm.streamChat(messages, currentTools, opts);
286
421
  let content = '';
287
422
  let finishReason;
288
423
  const toolCallsMap = new Map();
289
424
  for await (const chunkResult of stream) {
290
425
  if (!chunkResult.ok) {
426
+ llmSpan.setStatus('error', chunkResult.error.message);
427
+ llmSpan.end();
428
+ toolLoopSpan.setStatus('error', chunkResult.error.message);
429
+ toolLoopSpan.end();
291
430
  yield {
292
431
  ok: false,
293
432
  error: new OrchestratorError(chunkResult.error.message, 'LLM_ERROR'),
@@ -335,8 +474,12 @@ export class SmartAgent {
335
474
  usage.promptTokens += chunk.usage.promptTokens;
336
475
  usage.completionTokens += chunk.usage.completionTokens;
337
476
  usage.totalTokens += chunk.usage.totalTokens;
477
+ this.sessionManager.addTokens(chunk.usage.totalTokens);
338
478
  }
339
479
  }
480
+ llmSpan.setStatus('ok');
481
+ llmSpan.end();
482
+ this.metrics.llmCallLatency.record(Date.now() - llmCallStart);
340
483
  const toolCalls = Array.from(toolCallsMap.values()).map((tc) => {
341
484
  let args = {};
342
485
  try {
@@ -353,7 +496,23 @@ export class SmartAgent {
353
496
  finishReason,
354
497
  });
355
498
  if (finishReason !== 'tool_calls' || toolCalls.length === 0) {
499
+ // Output validation
500
+ const valResult = await this.outputValidator.validate(content, { messages, tools: currentTools }, opts);
501
+ if (valResult.ok && !valResult.value.valid) {
502
+ const correction = valResult.value.correctedContent ?? valResult.value.reason;
503
+ messages = [
504
+ ...messages,
505
+ { role: 'assistant', content },
506
+ {
507
+ role: 'user',
508
+ content: `Your previous response was rejected by validation: ${correction}. Please try again.`,
509
+ },
510
+ ];
511
+ continue;
512
+ }
356
513
  opts?.sessionLogger?.logStep('final_response', { content, usage });
514
+ toolLoopSpan.setStatus('ok');
515
+ toolLoopSpan.end();
357
516
  yield {
358
517
  ok: true,
359
518
  value: { content: '', finishReason: finishReason || 'stop', usage },
@@ -427,6 +586,8 @@ export class SmartAgent {
427
586
  continue;
428
587
  }
429
588
  if (validExternalCalls.length > 0) {
589
+ toolLoopSpan.setStatus('ok');
590
+ toolLoopSpan.end();
430
591
  yield {
431
592
  ok: true,
432
593
  value: { content: '', finishReason: 'tool_calls', usage },
@@ -449,31 +610,66 @@ export class SmartAgent {
449
610
  })),
450
611
  },
451
612
  ];
452
- for (const tc of internalCalls) {
453
- if (this.config.maxToolCalls !== undefined &&
454
- toolCallCount >= this.config.maxToolCalls) {
455
- yield {
456
- ok: true,
457
- value: { content: '', finishReason: 'length', usage },
458
- };
459
- return;
460
- }
613
+ // Truncate batch to remaining budget
614
+ const remaining = this.config.maxToolCalls !== undefined
615
+ ? this.config.maxToolCalls - toolCallCount
616
+ : internalCalls.length;
617
+ if (remaining <= 0) {
618
+ toolLoopSpan.addEvent('tool_call_limit_reached');
619
+ toolLoopSpan.end();
620
+ yield {
621
+ ok: true,
622
+ value: { content: '', finishReason: 'length', usage },
623
+ };
624
+ return;
625
+ }
626
+ const batch = internalCalls.slice(0, remaining);
627
+ // Yield all progress messages before execution
628
+ for (const tc of batch) {
461
629
  yield {
462
630
  ok: true,
463
631
  value: { content: `\n\n[SmartAgent: Executing ${tc.name}...]\n` },
464
632
  };
633
+ }
634
+ // Execute all tool calls concurrently
635
+ const results = await Promise.all(batch.map(async (tc) => {
465
636
  opts?.sessionLogger?.logStep(`mcp_call_${tc.name}`, {
466
637
  arguments: tc.arguments,
467
638
  });
468
639
  const client = toolClientMap.get(tc.name);
469
640
  if (!client)
470
- continue;
471
- const res = await client.callTool(tc.name, tc.arguments, opts);
641
+ return { tc, text: '', res: null };
642
+ const toolSpan = this.tracer.startSpan('smart_agent.tool_call', {
643
+ parent: toolLoopSpan,
644
+ attributes: { 'tool.name': tc.name },
645
+ });
646
+ const cached = this.toolCache.get(tc.name, tc.arguments);
647
+ const res = cached
648
+ ? (() => {
649
+ this.metrics.toolCacheHitCount.add();
650
+ toolSpan.setAttribute('cache', 'hit');
651
+ return { ok: true, value: cached };
652
+ })()
653
+ : await (async () => {
654
+ const r = await client.callTool(tc.name, tc.arguments, opts);
655
+ if (r.ok)
656
+ this.toolCache.set(tc.name, tc.arguments, r.value);
657
+ return r;
658
+ })();
472
659
  const text = !res.ok
473
660
  ? res.error.message
474
661
  : typeof res.value.content === 'string'
475
662
  ? res.value.content
476
663
  : JSON.stringify(res.value.content);
664
+ toolSpan.setStatus(res.ok ? 'ok' : 'error', res.ok ? undefined : text);
665
+ toolSpan.end();
666
+ return { tc, text, res };
667
+ }));
668
+ // Process results: update availability, metrics, messages
669
+ const toolMessages = [];
670
+ for (const { tc, text, res } of results) {
671
+ if (!res)
672
+ continue;
477
673
  if (!res.ok && isToolContextUnavailableError(text)) {
478
674
  const entry = this.toolAvailabilityRegistry.block(sessionId, tc.name, text);
479
675
  currentTools = currentTools.filter((t) => t.name !== tc.name);
@@ -482,13 +678,18 @@ export class SmartAgent {
482
678
  blockedUntil: entry.blockedUntil,
483
679
  });
484
680
  }
485
- opts?.sessionLogger?.logStep(`mcp_result_${tc.name}`, { result: text });
681
+ opts?.sessionLogger?.logStep(`mcp_result_${tc.name}`, {
682
+ result: text,
683
+ });
486
684
  toolCallCount++;
487
- messages = [
488
- ...messages,
489
- { role: 'tool', content: text, tool_call_id: tc.id },
490
- ];
685
+ this.metrics.toolCallCount.add();
686
+ toolMessages.push({
687
+ role: 'tool',
688
+ content: text,
689
+ tool_call_id: tc.id,
690
+ });
491
691
  }
692
+ messages = [...messages, ...toolMessages];
492
693
  }
493
694
  }
494
695
  async _listAllTools(opts) {