kagent-ts 0.1.3 → 0.1.5

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 (349) hide show
  1. package/LICENSE +68 -21
  2. package/README.md +27 -371
  3. package/dist/compression/progressive-compressor.d.ts +66 -0
  4. package/dist/compression/progressive-compressor.d.ts.map +1 -0
  5. package/dist/compression/progressive-compressor.js +367 -0
  6. package/dist/compression/progressive-compressor.js.map +1 -0
  7. package/dist/compression/types.d.ts +1 -5
  8. package/dist/compression/types.d.ts.map +1 -1
  9. package/dist/context/context-manager.d.ts +34 -15
  10. package/dist/context/context-manager.d.ts.map +1 -1
  11. package/dist/context/context-manager.js +78 -28
  12. package/dist/context/context-manager.js.map +1 -1
  13. package/dist/context/types.d.ts +20 -4
  14. package/dist/context/types.d.ts.map +1 -1
  15. package/dist/core/agent.d.ts +407 -35
  16. package/dist/core/agent.d.ts.map +1 -1
  17. package/dist/core/agent.js +685 -70
  18. package/dist/core/agent.js.map +1 -1
  19. package/dist/core/fusion-agent.d.ts +207 -0
  20. package/dist/core/fusion-agent.d.ts.map +1 -0
  21. package/dist/core/fusion-agent.js +769 -0
  22. package/dist/core/fusion-agent.js.map +1 -0
  23. package/dist/core/hooks.d.ts +19 -7
  24. package/dist/core/hooks.d.ts.map +1 -1
  25. package/dist/core/plan-solve-agent.d.ts +1 -15
  26. package/dist/core/plan-solve-agent.d.ts.map +1 -1
  27. package/dist/core/plan-solve-agent.js +144 -117
  28. package/dist/core/plan-solve-agent.js.map +1 -1
  29. package/dist/core/react-agent.d.ts +0 -13
  30. package/dist/core/react-agent.d.ts.map +1 -1
  31. package/dist/core/react-agent.js +128 -101
  32. package/dist/core/react-agent.js.map +1 -1
  33. package/dist/core/response-schema.d.ts +65 -0
  34. package/dist/core/response-schema.d.ts.map +1 -1
  35. package/dist/core/response-schema.js +174 -1
  36. package/dist/core/response-schema.js.map +1 -1
  37. package/dist/core/system-prompts.d.ts +27 -0
  38. package/dist/core/system-prompts.d.ts.map +1 -0
  39. package/dist/core/system-prompts.js +112 -0
  40. package/dist/core/system-prompts.js.map +1 -0
  41. package/dist/eval/benchmark.d.ts +81 -0
  42. package/dist/eval/benchmark.d.ts.map +1 -0
  43. package/dist/eval/benchmark.js +292 -0
  44. package/dist/eval/benchmark.js.map +1 -0
  45. package/dist/eval/eval-runner.d.ts +79 -0
  46. package/dist/eval/eval-runner.d.ts.map +1 -0
  47. package/dist/eval/eval-runner.js +252 -0
  48. package/dist/eval/eval-runner.js.map +1 -0
  49. package/dist/eval/index.d.ts +7 -0
  50. package/dist/eval/index.d.ts.map +1 -0
  51. package/dist/eval/index.js +13 -0
  52. package/dist/eval/index.js.map +1 -0
  53. package/dist/eval/tool-call-evaluator.d.ts +72 -0
  54. package/dist/eval/tool-call-evaluator.d.ts.map +1 -0
  55. package/dist/eval/tool-call-evaluator.js +265 -0
  56. package/dist/eval/tool-call-evaluator.js.map +1 -0
  57. package/dist/eval/types.d.ts +219 -0
  58. package/dist/eval/types.d.ts.map +1 -0
  59. package/dist/eval/types.js +3 -0
  60. package/dist/eval/types.js.map +1 -0
  61. package/dist/index.d.ts +61 -14
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +121 -8
  64. package/dist/index.js.map +1 -1
  65. package/dist/llm/anthropic-provider.d.ts +141 -0
  66. package/dist/llm/anthropic-provider.d.ts.map +1 -0
  67. package/dist/llm/anthropic-provider.js +486 -0
  68. package/dist/llm/anthropic-provider.js.map +1 -0
  69. package/dist/llm/errors.d.ts +26 -0
  70. package/dist/llm/errors.d.ts.map +1 -0
  71. package/dist/llm/errors.js +19 -0
  72. package/dist/llm/errors.js.map +1 -0
  73. package/dist/llm/factory.d.ts +73 -0
  74. package/dist/llm/factory.d.ts.map +1 -0
  75. package/dist/llm/factory.js +77 -0
  76. package/dist/llm/factory.js.map +1 -0
  77. package/dist/llm/fallback-provider.d.ts +47 -0
  78. package/dist/llm/fallback-provider.d.ts.map +1 -0
  79. package/dist/llm/fallback-provider.js +91 -0
  80. package/dist/llm/fallback-provider.js.map +1 -0
  81. package/dist/llm/interface.d.ts +54 -11
  82. package/dist/llm/interface.d.ts.map +1 -1
  83. package/dist/llm/interface.js +34 -0
  84. package/dist/llm/interface.js.map +1 -1
  85. package/dist/llm/model-router.d.ts +126 -0
  86. package/dist/llm/model-router.d.ts.map +1 -0
  87. package/dist/llm/model-router.js +178 -0
  88. package/dist/llm/model-router.js.map +1 -0
  89. package/dist/llm/openai-provider.d.ts +8 -32
  90. package/dist/llm/openai-provider.d.ts.map +1 -1
  91. package/dist/llm/openai-provider.js +27 -60
  92. package/dist/llm/openai-provider.js.map +1 -1
  93. package/dist/llm/rate-limiter.d.ts +41 -0
  94. package/dist/llm/rate-limiter.d.ts.map +1 -0
  95. package/dist/llm/rate-limiter.js +93 -0
  96. package/dist/llm/rate-limiter.js.map +1 -0
  97. package/dist/llm/retry.d.ts +26 -0
  98. package/dist/llm/retry.d.ts.map +1 -0
  99. package/dist/llm/retry.js +44 -0
  100. package/dist/llm/retry.js.map +1 -0
  101. package/dist/llm/token-budget.d.ts +97 -0
  102. package/dist/llm/token-budget.d.ts.map +1 -0
  103. package/dist/llm/token-budget.js +115 -0
  104. package/dist/llm/token-budget.js.map +1 -0
  105. package/dist/logging/index.d.ts +2 -0
  106. package/dist/logging/index.d.ts.map +1 -0
  107. package/dist/logging/index.js +7 -0
  108. package/dist/logging/index.js.map +1 -0
  109. package/dist/logging/logger.d.ts +38 -0
  110. package/dist/logging/logger.d.ts.map +1 -0
  111. package/dist/logging/logger.js +34 -0
  112. package/dist/logging/logger.js.map +1 -0
  113. package/dist/mcp/index.d.ts +4 -0
  114. package/dist/mcp/index.d.ts.map +1 -0
  115. package/dist/mcp/index.js +8 -0
  116. package/dist/mcp/index.js.map +1 -0
  117. package/dist/mcp/mcp-client-manager.d.ts +72 -0
  118. package/dist/mcp/mcp-client-manager.d.ts.map +1 -0
  119. package/dist/mcp/mcp-client-manager.js +235 -0
  120. package/dist/mcp/mcp-client-manager.js.map +1 -0
  121. package/dist/mcp/mcp-types.d.ts +58 -0
  122. package/dist/mcp/mcp-types.d.ts.map +1 -0
  123. package/dist/mcp/mcp-types.js +20 -0
  124. package/dist/mcp/mcp-types.js.map +1 -0
  125. package/dist/memory/index.d.ts +3 -0
  126. package/dist/memory/index.d.ts.map +1 -0
  127. package/dist/memory/index.js +6 -0
  128. package/dist/memory/index.js.map +1 -0
  129. package/dist/memory/memory-manager.d.ts +119 -0
  130. package/dist/memory/memory-manager.d.ts.map +1 -0
  131. package/dist/memory/memory-manager.js +334 -0
  132. package/dist/memory/memory-manager.js.map +1 -0
  133. package/dist/messages/types.d.ts +2 -0
  134. package/dist/messages/types.d.ts.map +1 -1
  135. package/dist/orchestrator/index.d.ts +5 -0
  136. package/dist/orchestrator/index.d.ts.map +1 -0
  137. package/dist/orchestrator/index.js +13 -0
  138. package/dist/orchestrator/index.js.map +1 -0
  139. package/dist/orchestrator/json-extractor.d.ts +18 -0
  140. package/dist/orchestrator/json-extractor.d.ts.map +1 -0
  141. package/dist/orchestrator/json-extractor.js +111 -0
  142. package/dist/orchestrator/json-extractor.js.map +1 -0
  143. package/dist/orchestrator/orchestrator-agent.d.ts +152 -0
  144. package/dist/orchestrator/orchestrator-agent.d.ts.map +1 -0
  145. package/dist/orchestrator/orchestrator-agent.js +675 -0
  146. package/dist/orchestrator/orchestrator-agent.js.map +1 -0
  147. package/dist/orchestrator/orchestrator-response.d.ts +40 -0
  148. package/dist/orchestrator/orchestrator-response.d.ts.map +1 -0
  149. package/dist/orchestrator/orchestrator-response.js +275 -0
  150. package/dist/orchestrator/orchestrator-response.js.map +1 -0
  151. package/dist/orchestrator/orchestrator-types.d.ts +116 -0
  152. package/dist/orchestrator/orchestrator-types.d.ts.map +1 -0
  153. package/dist/orchestrator/orchestrator-types.js +3 -0
  154. package/dist/orchestrator/orchestrator-types.js.map +1 -0
  155. package/dist/preferences/preference-manager.d.ts +8 -3
  156. package/dist/preferences/preference-manager.d.ts.map +1 -1
  157. package/dist/preferences/preference-manager.js +17 -4
  158. package/dist/preferences/preference-manager.js.map +1 -1
  159. package/dist/rag/chroma-store.d.ts +52 -0
  160. package/dist/rag/chroma-store.d.ts.map +1 -0
  161. package/dist/rag/chroma-store.js +110 -0
  162. package/dist/rag/chroma-store.js.map +1 -0
  163. package/dist/rag/document-loader.d.ts +21 -0
  164. package/dist/rag/document-loader.d.ts.map +1 -0
  165. package/dist/rag/document-loader.js +129 -0
  166. package/dist/rag/document-loader.js.map +1 -0
  167. package/dist/rag/embedding-provider.d.ts +36 -0
  168. package/dist/rag/embedding-provider.d.ts.map +1 -0
  169. package/dist/rag/embedding-provider.js +74 -0
  170. package/dist/rag/embedding-provider.js.map +1 -0
  171. package/dist/rag/index.d.ts +17 -0
  172. package/dist/rag/index.d.ts.map +1 -0
  173. package/dist/rag/index.js +27 -0
  174. package/dist/rag/index.js.map +1 -0
  175. package/dist/rag/keyword-index.d.ts +53 -0
  176. package/dist/rag/keyword-index.d.ts.map +1 -0
  177. package/dist/rag/keyword-index.js +161 -0
  178. package/dist/rag/keyword-index.js.map +1 -0
  179. package/dist/rag/llm-reranker.d.ts +36 -0
  180. package/dist/rag/llm-reranker.d.ts.map +1 -0
  181. package/dist/rag/llm-reranker.js +95 -0
  182. package/dist/rag/llm-reranker.js.map +1 -0
  183. package/dist/rag/rag-manager.d.ts +54 -0
  184. package/dist/rag/rag-manager.d.ts.map +1 -0
  185. package/dist/rag/rag-manager.js +179 -0
  186. package/dist/rag/rag-manager.js.map +1 -0
  187. package/dist/rag/rag-types.d.ts +143 -0
  188. package/dist/rag/rag-types.d.ts.map +1 -0
  189. package/dist/rag/rag-types.js +9 -0
  190. package/dist/rag/rag-types.js.map +1 -0
  191. package/dist/rag/rrf.d.ts +47 -0
  192. package/dist/rag/rrf.d.ts.map +1 -0
  193. package/dist/rag/rrf.js +70 -0
  194. package/dist/rag/rrf.js.map +1 -0
  195. package/dist/rag/search-knowledge.d.ts +24 -0
  196. package/dist/rag/search-knowledge.d.ts.map +1 -0
  197. package/dist/rag/search-knowledge.js +86 -0
  198. package/dist/rag/search-knowledge.js.map +1 -0
  199. package/dist/rag/text-splitter.d.ts +25 -0
  200. package/dist/rag/text-splitter.d.ts.map +1 -0
  201. package/dist/rag/text-splitter.js +136 -0
  202. package/dist/rag/text-splitter.js.map +1 -0
  203. package/dist/rag/vector-store.d.ts +34 -0
  204. package/dist/rag/vector-store.d.ts.map +1 -0
  205. package/dist/rag/vector-store.js +73 -0
  206. package/dist/rag/vector-store.js.map +1 -0
  207. package/dist/reflection/error-notebook.d.ts +125 -0
  208. package/dist/reflection/error-notebook.d.ts.map +1 -0
  209. package/dist/reflection/error-notebook.js +368 -0
  210. package/dist/reflection/error-notebook.js.map +1 -0
  211. package/dist/reflection/index.d.ts +8 -0
  212. package/dist/reflection/index.d.ts.map +1 -0
  213. package/dist/reflection/index.js +12 -0
  214. package/dist/reflection/index.js.map +1 -0
  215. package/dist/reflection/memory-reflector.d.ts +97 -0
  216. package/dist/reflection/memory-reflector.d.ts.map +1 -0
  217. package/dist/reflection/memory-reflector.js +215 -0
  218. package/dist/reflection/memory-reflector.js.map +1 -0
  219. package/dist/reflection/reflection-agent.d.ts +105 -0
  220. package/dist/reflection/reflection-agent.d.ts.map +1 -0
  221. package/dist/reflection/reflection-agent.js +234 -0
  222. package/dist/reflection/reflection-agent.js.map +1 -0
  223. package/dist/reflection/reflection-hook.d.ts +50 -0
  224. package/dist/reflection/reflection-hook.d.ts.map +1 -0
  225. package/dist/reflection/reflection-hook.js +108 -0
  226. package/dist/reflection/reflection-hook.js.map +1 -0
  227. package/dist/rules/project-rules.d.ts +47 -0
  228. package/dist/rules/project-rules.d.ts.map +1 -0
  229. package/dist/rules/project-rules.js +166 -0
  230. package/dist/rules/project-rules.js.map +1 -0
  231. package/dist/security/boundaries.d.ts +81 -0
  232. package/dist/security/boundaries.d.ts.map +1 -0
  233. package/dist/security/boundaries.js +158 -0
  234. package/dist/security/boundaries.js.map +1 -0
  235. package/dist/security/index.d.ts +2 -0
  236. package/dist/security/index.d.ts.map +1 -0
  237. package/dist/security/index.js +11 -0
  238. package/dist/security/index.js.map +1 -0
  239. package/dist/session/session-types.d.ts +25 -4
  240. package/dist/session/session-types.d.ts.map +1 -1
  241. package/dist/skills/file-skill-loader.d.ts +9 -20
  242. package/dist/skills/file-skill-loader.d.ts.map +1 -1
  243. package/dist/skills/file-skill-loader.js +35 -164
  244. package/dist/skills/file-skill-loader.js.map +1 -1
  245. package/dist/skills/index.d.ts +1 -1
  246. package/dist/skills/index.d.ts.map +1 -1
  247. package/dist/skills/index.js +1 -2
  248. package/dist/skills/index.js.map +1 -1
  249. package/dist/skills/skill-manager.d.ts +22 -29
  250. package/dist/skills/skill-manager.d.ts.map +1 -1
  251. package/dist/skills/skill-manager.js +63 -85
  252. package/dist/skills/skill-manager.js.map +1 -1
  253. package/dist/skills/types.d.ts +4 -16
  254. package/dist/skills/types.d.ts.map +1 -1
  255. package/dist/subagent/index.d.ts +4 -0
  256. package/dist/subagent/index.d.ts.map +1 -0
  257. package/dist/subagent/index.js +8 -0
  258. package/dist/subagent/index.js.map +1 -0
  259. package/dist/subagent/subagent-loader.d.ts +53 -0
  260. package/dist/subagent/subagent-loader.d.ts.map +1 -0
  261. package/dist/subagent/subagent-loader.js +155 -0
  262. package/dist/subagent/subagent-loader.js.map +1 -0
  263. package/dist/subagent/subagent-manager.d.ts +161 -0
  264. package/dist/subagent/subagent-manager.d.ts.map +1 -0
  265. package/dist/subagent/subagent-manager.js +468 -0
  266. package/dist/subagent/subagent-manager.js.map +1 -0
  267. package/dist/subagent/subagent-types.d.ts +77 -0
  268. package/dist/subagent/subagent-types.d.ts.map +1 -0
  269. package/dist/subagent/subagent-types.js +3 -0
  270. package/dist/subagent/subagent-types.js.map +1 -0
  271. package/dist/tools/builtin/bash.d.ts +3 -0
  272. package/dist/tools/builtin/bash.d.ts.map +1 -0
  273. package/dist/tools/builtin/bash.js +87 -0
  274. package/dist/tools/builtin/bash.js.map +1 -0
  275. package/dist/tools/builtin/edit-file.d.ts.map +1 -1
  276. package/dist/tools/builtin/edit-file.js +1 -0
  277. package/dist/tools/builtin/edit-file.js.map +1 -1
  278. package/dist/tools/builtin/index.d.ts +14 -0
  279. package/dist/tools/builtin/index.d.ts.map +1 -1
  280. package/dist/tools/builtin/index.js +45 -1
  281. package/dist/tools/builtin/index.js.map +1 -1
  282. package/dist/tools/builtin/list-errors.d.ts +7 -0
  283. package/dist/tools/builtin/list-errors.d.ts.map +1 -0
  284. package/dist/tools/builtin/list-errors.js +64 -0
  285. package/dist/tools/builtin/list-errors.js.map +1 -0
  286. package/dist/tools/builtin/list-subagents.d.ts +7 -0
  287. package/dist/tools/builtin/list-subagents.d.ts.map +1 -0
  288. package/dist/tools/builtin/list-subagents.js +21 -0
  289. package/dist/tools/builtin/list-subagents.js.map +1 -0
  290. package/dist/tools/builtin/recall.d.ts +11 -0
  291. package/dist/tools/builtin/recall.d.ts.map +1 -0
  292. package/dist/tools/builtin/recall.js +60 -0
  293. package/dist/tools/builtin/recall.js.map +1 -0
  294. package/dist/tools/builtin/remember.d.ts +12 -0
  295. package/dist/tools/builtin/remember.d.ts.map +1 -0
  296. package/dist/tools/builtin/remember.js +72 -0
  297. package/dist/tools/builtin/remember.js.map +1 -0
  298. package/dist/tools/builtin/skill.d.ts +14 -0
  299. package/dist/tools/builtin/skill.d.ts.map +1 -0
  300. package/dist/tools/builtin/skill.js +71 -0
  301. package/dist/tools/builtin/skill.js.map +1 -0
  302. package/dist/tools/builtin/spawn-subagent.d.ts +7 -0
  303. package/dist/tools/builtin/spawn-subagent.d.ts.map +1 -0
  304. package/dist/tools/builtin/spawn-subagent.js +43 -0
  305. package/dist/tools/builtin/spawn-subagent.js.map +1 -0
  306. package/dist/tools/builtin/web-fetch.d.ts +3 -0
  307. package/dist/tools/builtin/web-fetch.d.ts.map +1 -0
  308. package/dist/tools/builtin/web-fetch.js +101 -0
  309. package/dist/tools/builtin/web-fetch.js.map +1 -0
  310. package/dist/tools/builtin/write-file.d.ts.map +1 -1
  311. package/dist/tools/builtin/write-file.js +1 -0
  312. package/dist/tools/builtin/write-file.js.map +1 -1
  313. package/dist/tools/circuit-breaker.d.ts +19 -10
  314. package/dist/tools/circuit-breaker.d.ts.map +1 -1
  315. package/dist/tools/circuit-breaker.js +22 -11
  316. package/dist/tools/circuit-breaker.js.map +1 -1
  317. package/dist/tools/error-tracker.d.ts +28 -44
  318. package/dist/tools/error-tracker.d.ts.map +1 -1
  319. package/dist/tools/error-tracker.js +39 -156
  320. package/dist/tools/error-tracker.js.map +1 -1
  321. package/dist/tools/tool-filter.d.ts +70 -0
  322. package/dist/tools/tool-filter.d.ts.map +1 -0
  323. package/dist/tools/tool-filter.js +92 -0
  324. package/dist/tools/tool-filter.js.map +1 -0
  325. package/dist/tools/tool-output-truncator.d.ts +36 -0
  326. package/dist/tools/tool-output-truncator.d.ts.map +1 -0
  327. package/dist/tools/tool-output-truncator.js +117 -0
  328. package/dist/tools/tool-output-truncator.js.map +1 -0
  329. package/dist/tools/tool-registry.d.ts +25 -9
  330. package/dist/tools/tool-registry.d.ts.map +1 -1
  331. package/dist/tools/tool-registry.js +77 -28
  332. package/dist/tools/tool-registry.js.map +1 -1
  333. package/dist/tools/tool-validator.d.ts +13 -0
  334. package/dist/tools/tool-validator.d.ts.map +1 -0
  335. package/dist/tools/tool-validator.js +116 -0
  336. package/dist/tools/tool-validator.js.map +1 -0
  337. package/dist/tools/types.d.ts +86 -3
  338. package/dist/tools/types.d.ts.map +1 -1
  339. package/dist/tools/types.js +51 -2
  340. package/dist/tools/types.js.map +1 -1
  341. package/dist/trace/trace-logger.d.ts +30 -4
  342. package/dist/trace/trace-logger.d.ts.map +1 -1
  343. package/dist/trace/trace-logger.js +83 -7
  344. package/dist/trace/trace-logger.js.map +1 -1
  345. package/package.json +14 -4
  346. package/dist/compression/sliding-window.d.ts +0 -21
  347. package/dist/compression/sliding-window.d.ts.map +0 -1
  348. package/dist/compression/sliding-window.js +0 -44
  349. package/dist/compression/sliding-window.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/llm/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,iBAAiB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAI3E;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IACzC,oEAAoE;IACpE,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,iBAAiB,CAAC;CACtD;AAID;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EACrC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC7B,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,CAAC,CAAC,CA+BZ"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withRetry = withRetry;
4
+ const errors_1 = require("./errors");
5
+ // ─── withRetry ──────────────────────────────────────────────────────────────
6
+ /**
7
+ * Wrap an async operation with network-error retry logic.
8
+ *
9
+ * Retry strategy:
10
+ * - The `callbacks.isRetryable` predicate decides which errors are retried.
11
+ * - Uses exponential backoff with full jitter: delay = base * 2^attempt * random(0.5, 1.0).
12
+ * - Non-retryable errors propagate immediately.
13
+ * - After all retries are exhausted, throws an `LLMNetworkError`.
14
+ *
15
+ * @param fn The async operation to retry.
16
+ * @param config Retry configuration (maxRetries, baseDelayMs, maxDelayMs).
17
+ * @param callbacks Provider-specific error classification callbacks.
18
+ */
19
+ async function withRetry(fn, config, callbacks) {
20
+ const { maxRetries, baseDelayMs, maxDelayMs } = config;
21
+ let lastError;
22
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
23
+ try {
24
+ return await fn();
25
+ }
26
+ catch (error) {
27
+ lastError = error;
28
+ // Non-network errors propagate immediately (e.g., invalid API key, bad request)
29
+ if (!callbacks.isRetryable(error))
30
+ throw error;
31
+ if (attempt >= maxRetries)
32
+ break; // all retries exhausted
33
+ // Exponential backoff with full jitter
34
+ const delay = Math.min(baseDelayMs * Math.pow(2, attempt) * (0.5 + Math.random() * 0.5), maxDelayMs);
35
+ // eslint-disable-next-line @typescript-eslint/no-loop-func
36
+ await new Promise((resolve) => setTimeout(resolve, delay));
37
+ }
38
+ }
39
+ // All retries exhausted — wrap the final error
40
+ const cause = callbacks.classifyError(lastError);
41
+ const message = lastError instanceof Error ? lastError.message : String(lastError);
42
+ throw new errors_1.LLMNetworkError(message, cause);
43
+ }
44
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/llm/retry.ts"],"names":[],"mappings":";;AA8BA,8BAmCC;AAjED,qCAA2E;AAe3E,+EAA+E;AAE/E;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,SAAS,CAC7B,EAAqC,EACrC,MAA6B,EAC7B,SAAyB;IAEzB,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IACvD,IAAI,SAAkB,CAAC;IAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,SAAS,GAAG,KAAK,CAAC;YAElB,gFAAgF;YAChF,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YAE/C,IAAI,OAAO,IAAI,UAAU;gBAAE,MAAM,CAAC,wBAAwB;YAE1D,uCAAuC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAChE,UAAU,CACX,CAAC;YAEF,2DAA2D;YAC3D,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,OAAO,GACX,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrE,MAAM,IAAI,wBAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Token Budget — session-level circuit breaker that stops LLM calls when
3
+ * a cumulative token limit is exceeded.
4
+ *
5
+ * The check runs in the agent loop BEFORE each LLM call (with an estimated
6
+ * input size) and usage is recorded AFTER each successful response (using
7
+ * the actual token counts from the LLM provider).
8
+ */
9
+ export interface TokenBudgetConfig {
10
+ /** Maximum total tokens allowed across all LLM calls in a session (input + output). */
11
+ maxTotalTokens: number;
12
+ /**
13
+ * Warn via the logger when usage exceeds this fraction of the budget.
14
+ * Default: 0.8 (80 %).
15
+ */
16
+ warnThreshold?: number;
17
+ /**
18
+ * Pricing model for cost estimation.
19
+ * Prices are per 1,000 tokens (standard LLM pricing unit).
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * // GPT-4o
24
+ * pricing: { inputPricePer1K: 0.0025, outputPricePer1K: 0.01 }
25
+ * ```
26
+ */
27
+ pricing?: {
28
+ inputPricePer1K: number;
29
+ outputPricePer1K: number;
30
+ };
31
+ }
32
+ export interface TokenBudgetStatus {
33
+ /** Total tokens consumed so far (input + output). */
34
+ totalTokensUsed: number;
35
+ /** Budget ceiling. */
36
+ maxTotalTokens: number;
37
+ /** Tokens remaining before exhaustion. */
38
+ remainingTokens: number;
39
+ /** Whether the budget has been fully exhausted. */
40
+ isExhausted: boolean;
41
+ /** Number of LLM calls tracked. */
42
+ callCount: number;
43
+ }
44
+ /** Cumulative cost breakdown for the current session. */
45
+ export interface TokenBudgetCost {
46
+ inputTokens: number;
47
+ outputTokens: number;
48
+ totalTokens: number;
49
+ inputCost: number;
50
+ outputCost: number;
51
+ totalCost: number;
52
+ }
53
+ export declare class TokenBudget {
54
+ private maxTotalTokens;
55
+ private warnThreshold;
56
+ private pricing?;
57
+ private totalTokensUsed;
58
+ private inputTokensUsed;
59
+ private outputTokensUsed;
60
+ private callCount;
61
+ private warned;
62
+ constructor(config: TokenBudgetConfig);
63
+ /**
64
+ * Record token usage from a completed LLM call.
65
+ * Called after the LLM response is received.
66
+ */
67
+ recordUsage(promptTokens: number, completionTokens: number): void;
68
+ /**
69
+ * Check whether the budget allows another LLM call.
70
+ *
71
+ * @param estimatedInputTokens Estimated tokens in the upcoming request
72
+ * (system prompt + context messages).
73
+ * @returns Status snapshot. Callers should check `isExhausted` before
74
+ * making the LLM call.
75
+ */
76
+ checkBeforeCall(estimatedInputTokens: number): TokenBudgetStatus;
77
+ /**
78
+ * Whether the budget has been warned about (passed `warnThreshold`).
79
+ * Returns true exactly once per threshold crossing — the flag resets
80
+ * after this call so the warning fires only once.
81
+ */
82
+ shouldWarn(): boolean;
83
+ /**
84
+ * Get the cumulative cost of the current session.
85
+ * Returns all zeros if no pricing model was configured.
86
+ */
87
+ getSessionCost(): TokenBudgetCost;
88
+ /**
89
+ * Reset the budget for a new conversation.
90
+ */
91
+ reset(): void;
92
+ /**
93
+ * Get a read-only snapshot of the current budget.
94
+ */
95
+ getStatus(): TokenBudgetStatus;
96
+ }
97
+ //# sourceMappingURL=token-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-budget.d.ts","sourceRoot":"","sources":["../../src/llm/token-budget.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,iBAAiB;IAChC,uFAAuF;IACvF,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE;QACR,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,eAAe,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,WAAW,EAAE,OAAO,CAAC;IACrB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,qBAAa,WAAW;IACtB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAwD;IACxE,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,iBAAiB;IAQrC;;;OAGG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAOjE;;;;;;;OAOG;IACH,eAAe,CAAC,oBAAoB,EAAE,MAAM,GAAG,iBAAiB;IAWhE;;;;OAIG;IACH,UAAU,IAAI,OAAO;IAUrB;;;OAGG;IACH,cAAc,IAAI,eAAe;IAkBjC;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,SAAS,IAAI,iBAAiB;CAS/B"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ /**
3
+ * Token Budget — session-level circuit breaker that stops LLM calls when
4
+ * a cumulative token limit is exceeded.
5
+ *
6
+ * The check runs in the agent loop BEFORE each LLM call (with an estimated
7
+ * input size) and usage is recorded AFTER each successful response (using
8
+ * the actual token counts from the LLM provider).
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.TokenBudget = void 0;
12
+ // ─── TokenBudget ─────────────────────────────────────────────────────────────
13
+ class TokenBudget {
14
+ maxTotalTokens;
15
+ warnThreshold;
16
+ pricing;
17
+ totalTokensUsed = 0;
18
+ inputTokensUsed = 0;
19
+ outputTokensUsed = 0;
20
+ callCount = 0;
21
+ warned = false;
22
+ constructor(config) {
23
+ this.maxTotalTokens = config.maxTotalTokens;
24
+ this.warnThreshold = config.warnThreshold ?? 0.8;
25
+ this.pricing = config.pricing;
26
+ }
27
+ // ─── Public API ──────────────────────────────────────────────────────────
28
+ /**
29
+ * Record token usage from a completed LLM call.
30
+ * Called after the LLM response is received.
31
+ */
32
+ recordUsage(promptTokens, completionTokens) {
33
+ this.totalTokensUsed += promptTokens + completionTokens;
34
+ this.inputTokensUsed += promptTokens;
35
+ this.outputTokensUsed += completionTokens;
36
+ this.callCount++;
37
+ }
38
+ /**
39
+ * Check whether the budget allows another LLM call.
40
+ *
41
+ * @param estimatedInputTokens Estimated tokens in the upcoming request
42
+ * (system prompt + context messages).
43
+ * @returns Status snapshot. Callers should check `isExhausted` before
44
+ * making the LLM call.
45
+ */
46
+ checkBeforeCall(estimatedInputTokens) {
47
+ const projected = this.totalTokensUsed + estimatedInputTokens;
48
+ return {
49
+ totalTokensUsed: this.totalTokensUsed,
50
+ maxTotalTokens: this.maxTotalTokens,
51
+ remainingTokens: Math.max(0, this.maxTotalTokens - projected),
52
+ isExhausted: projected >= this.maxTotalTokens,
53
+ callCount: this.callCount,
54
+ };
55
+ }
56
+ /**
57
+ * Whether the budget has been warned about (passed `warnThreshold`).
58
+ * Returns true exactly once per threshold crossing — the flag resets
59
+ * after this call so the warning fires only once.
60
+ */
61
+ shouldWarn() {
62
+ if (this.warned)
63
+ return false;
64
+ const ratio = this.totalTokensUsed / this.maxTotalTokens;
65
+ if (ratio >= this.warnThreshold) {
66
+ this.warned = true;
67
+ return true;
68
+ }
69
+ return false;
70
+ }
71
+ /**
72
+ * Get the cumulative cost of the current session.
73
+ * Returns all zeros if no pricing model was configured.
74
+ */
75
+ getSessionCost() {
76
+ const inputCost = this.pricing
77
+ ? Math.round(this.inputTokensUsed / 1000 * this.pricing.inputPricePer1K * 10000) / 10000
78
+ : 0;
79
+ const outputCost = this.pricing
80
+ ? Math.round(this.outputTokensUsed / 1000 * this.pricing.outputPricePer1K * 10000) / 10000
81
+ : 0;
82
+ return {
83
+ inputTokens: this.inputTokensUsed,
84
+ outputTokens: this.outputTokensUsed,
85
+ totalTokens: this.totalTokensUsed,
86
+ inputCost,
87
+ outputCost,
88
+ totalCost: Math.round((inputCost + outputCost) * 10000) / 10000,
89
+ };
90
+ }
91
+ /**
92
+ * Reset the budget for a new conversation.
93
+ */
94
+ reset() {
95
+ this.totalTokensUsed = 0;
96
+ this.inputTokensUsed = 0;
97
+ this.outputTokensUsed = 0;
98
+ this.callCount = 0;
99
+ this.warned = false;
100
+ }
101
+ /**
102
+ * Get a read-only snapshot of the current budget.
103
+ */
104
+ getStatus() {
105
+ return {
106
+ totalTokensUsed: this.totalTokensUsed,
107
+ maxTotalTokens: this.maxTotalTokens,
108
+ remainingTokens: Math.max(0, this.maxTotalTokens - this.totalTokensUsed),
109
+ isExhausted: this.totalTokensUsed >= this.maxTotalTokens,
110
+ callCount: this.callCount,
111
+ };
112
+ }
113
+ }
114
+ exports.TokenBudget = TokenBudget;
115
+ //# sourceMappingURL=token-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-budget.js","sourceRoot":"","sources":["../../src/llm/token-budget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { Logger, ConsoleLogger, SilentLogger } from "./logger";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SilentLogger = exports.ConsoleLogger = void 0;
4
+ var logger_1 = require("./logger");
5
+ Object.defineProperty(exports, "ConsoleLogger", { enumerable: true, get: function () { return logger_1.ConsoleLogger; } });
6
+ Object.defineProperty(exports, "SilentLogger", { enumerable: true, get: function () { return logger_1.SilentLogger; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":";;;AAAA,mCAA+D;AAA9C,uGAAA,aAAa,OAAA;AAAE,sGAAA,YAAY,OAAA"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Structured logger interface for the agent framework.
3
+ *
4
+ * All framework-internal logging goes through this interface so consumers
5
+ * can plug in their own logger (winston, pino, etc.) or silence output
6
+ * entirely for test environments.
7
+ */
8
+ export interface Logger {
9
+ /** Debug-level diagnostic messages (verbose, typically disabled in production). */
10
+ debug(tag: string, message: string, context?: Record<string, unknown>): void;
11
+ /** Informational messages about agent lifecycle and progress. */
12
+ info(tag: string, message: string, context?: Record<string, unknown>): void;
13
+ /** Warnings — non-fatal issues the operator should know about. */
14
+ warn(tag: string, message: string, context?: Record<string, unknown>): void;
15
+ /** Errors — fatal or near-fatal issues requiring attention. */
16
+ error(tag: string, message: string, context?: Record<string, unknown>): void;
17
+ }
18
+ /**
19
+ * Default logger that writes to `console` with the existing `[Tag]` prefix
20
+ * convention. Preserves the exact output format of the pre-logger codebase.
21
+ */
22
+ export declare class ConsoleLogger implements Logger {
23
+ debug(tag: string, message: string, _context?: Record<string, unknown>): void;
24
+ info(tag: string, message: string, _context?: Record<string, unknown>): void;
25
+ warn(tag: string, message: string, _context?: Record<string, unknown>): void;
26
+ error(tag: string, message: string, _context?: Record<string, unknown>): void;
27
+ }
28
+ /**
29
+ * Logger that discards all messages. Use in tests or when you want to
30
+ * suppress all framework output.
31
+ */
32
+ export declare class SilentLogger implements Logger {
33
+ debug(_tag: string, _message: string, _context?: Record<string, unknown>): void;
34
+ info(_tag: string, _message: string, _context?: Record<string, unknown>): void;
35
+ warn(_tag: string, _message: string, _context?: Record<string, unknown>): void;
36
+ error(_tag: string, _message: string, _context?: Record<string, unknown>): void;
37
+ }
38
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACrB,mFAAmF;IACnF,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAE7E,iEAAiE;IACjE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAE5E,kEAAkE;IAClE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAE5E,+DAA+D;IAC/D,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9E;AAED;;;GAGG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI7E,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5E,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5E,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAG9E;AAED;;;GAGG;AACH,qBAAa,YAAa,YAAW,MAAM;IACzC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAC/E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAC9E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAC9E,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAChF"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SilentLogger = exports.ConsoleLogger = void 0;
4
+ /**
5
+ * Default logger that writes to `console` with the existing `[Tag]` prefix
6
+ * convention. Preserves the exact output format of the pre-logger codebase.
7
+ */
8
+ class ConsoleLogger {
9
+ debug(tag, message, _context) {
10
+ console.debug(`[${tag}] ${message}`);
11
+ }
12
+ info(tag, message, _context) {
13
+ console.log(`[${tag}] ${message}`);
14
+ }
15
+ warn(tag, message, _context) {
16
+ console.warn(`[${tag}] ${message}`);
17
+ }
18
+ error(tag, message, _context) {
19
+ console.error(`[${tag}] ${message}`);
20
+ }
21
+ }
22
+ exports.ConsoleLogger = ConsoleLogger;
23
+ /**
24
+ * Logger that discards all messages. Use in tests or when you want to
25
+ * suppress all framework output.
26
+ */
27
+ class SilentLogger {
28
+ debug(_tag, _message, _context) { }
29
+ info(_tag, _message, _context) { }
30
+ warn(_tag, _message, _context) { }
31
+ error(_tag, _message, _context) { }
32
+ }
33
+ exports.SilentLogger = SilentLogger;
34
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":";;;AAqBA;;;GAGG;AACH,MAAa,aAAa;IACxB,KAAK,CAAC,GAAW,EAAE,OAAe,EAAE,QAAkC;QACpE,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,OAAe,EAAE,QAAkC;QACnE,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,OAAe,EAAE,QAAkC;QACnE,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,OAAe,EAAE,QAAkC;QACpE,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC;CACF;AAhBD,sCAgBC;AAED;;;GAGG;AACH,MAAa,YAAY;IACvB,KAAK,CAAC,IAAY,EAAE,QAAgB,EAAE,QAAkC,IAAS,CAAC;IAClF,IAAI,CAAC,IAAY,EAAE,QAAgB,EAAE,QAAkC,IAAS,CAAC;IACjF,IAAI,CAAC,IAAY,EAAE,QAAgB,EAAE,QAAkC,IAAS,CAAC;IACjF,KAAK,CAAC,IAAY,EAAE,QAAgB,EAAE,QAAkC,IAAS,CAAC;CACnF;AALD,oCAKC"}
@@ -0,0 +1,4 @@
1
+ export { McpClientManager } from "./mcp-client-manager";
2
+ export { McpConnectionError } from "./mcp-types";
3
+ export type { McpServerConfig, McpConnectionStatus, McpConnectionErrorReport, } from "./mcp-types";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.McpConnectionError = exports.McpClientManager = void 0;
4
+ var mcp_client_manager_1 = require("./mcp-client-manager");
5
+ Object.defineProperty(exports, "McpClientManager", { enumerable: true, get: function () { return mcp_client_manager_1.McpClientManager; } });
6
+ var mcp_types_1 = require("./mcp-types");
7
+ Object.defineProperty(exports, "McpConnectionError", { enumerable: true, get: function () { return mcp_types_1.McpConnectionError; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";;;AAAA,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,yCAAiD;AAAxC,+GAAA,kBAAkB,OAAA"}
@@ -0,0 +1,72 @@
1
+ import { ToolRegistry } from "../tools/tool-registry";
2
+ import { McpServerConfig, McpConnectionStatus, McpConnectionErrorReport } from "./mcp-types";
3
+ import { Logger } from "../logging/logger";
4
+ /**
5
+ * Manages connections to MCP (Model Context Protocol) servers.
6
+ *
7
+ * Lifecycle:
8
+ * 1. `connectToServer()` / `connectAll()` — connect, discover tools,
9
+ * register adapted tools in ToolRegistry
10
+ * 2. Tools execute via the adapted `Tool` wrapper (delegates to MCP client)
11
+ * 3. `disconnect()` / `disconnectAll()` — unregister tools, close connections
12
+ */
13
+ export declare class McpClientManager {
14
+ /** Active connections keyed by server name. */
15
+ private connections;
16
+ /** The ToolRegistry where adapted tools are registered. */
17
+ private toolRegistry;
18
+ private logger;
19
+ constructor(toolRegistry: ToolRegistry, logger?: Logger);
20
+ /**
21
+ * Connect to a single MCP server, discover its tools, and register them
22
+ * in the ToolRegistry with a `{serverName}_` prefix.
23
+ *
24
+ * Idempotent — if the server is already connected, this is a no-op.
25
+ *
26
+ * @throws McpConnectionError if the config is invalid or the
27
+ * connection/tool-discovery fails (only for new connections).
28
+ */
29
+ connectToServer(serverName: string, config: McpServerConfig): Promise<void>;
30
+ /**
31
+ * Connect to multiple MCP servers. Failures for individual servers are
32
+ * collected and logged; other servers still connect.
33
+ *
34
+ * @returns An array of connection error reports (empty if all succeeded).
35
+ */
36
+ connectAll(servers: Record<string, McpServerConfig>): Promise<McpConnectionErrorReport[]>;
37
+ /**
38
+ * Disconnect from a single server and unregister its tools.
39
+ */
40
+ disconnect(serverName: string): Promise<void>;
41
+ /**
42
+ * Disconnect from all MCP servers and unregister all MCP-provided tools.
43
+ */
44
+ disconnectAll(): Promise<void>;
45
+ /**
46
+ * Check if a specific server is currently connected.
47
+ */
48
+ hasServer(serverName: string): boolean;
49
+ /**
50
+ * Get connection status for all servers.
51
+ */
52
+ getStatus(): McpConnectionStatus[];
53
+ /**
54
+ * Whether at least one server is connected.
55
+ */
56
+ get isConnected(): boolean;
57
+ /**
58
+ * Get the number of connected servers.
59
+ */
60
+ get connectedCount(): number;
61
+ /**
62
+ * Adapt an MCP SDK tool descriptor into the framework's Tool interface.
63
+ *
64
+ * The adapted tool's name is `{serverName}_{mcpToolName}` to avoid
65
+ * collisions between servers and with locally-registered tools.
66
+ *
67
+ * The `execute` function closes over the client instance and handles
68
+ * result content parsing (extracting text from MCP's Content[] array).
69
+ */
70
+ private adaptTool;
71
+ }
72
+ //# sourceMappingURL=mcp-client-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client-manager.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp-client-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAiB,MAAM,mBAAmB,CAAC;AAmC1D;;;;;;;;GAQG;AACH,qBAAa,gBAAgB;IAC3B,+CAA+C;IAC/C,OAAO,CAAC,WAAW,CAA+C;IAElE,2DAA2D;IAC3D,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAS;gBAEX,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM;IAOvD;;;;;;;;OAQG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA0EjF;;;;;OAKG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAkB/F;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBnD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAItC;;OAEG;IACH,SAAS,IAAI,mBAAmB,EAAE;IAQlC;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,MAAM,CAE3B;IAID;;;;;;;;OAQG;IACH,OAAO,CAAC,SAAS;CAgDlB"}