@dexto/core 1.1.4 → 1.1.6

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 (597) hide show
  1. package/README.md +125 -0
  2. package/dist/agent/DextoAgent.cjs +793 -0
  3. package/dist/agent/DextoAgent.d.cts +473 -0
  4. package/dist/agent/DextoAgent.d.ts +473 -0
  5. package/dist/agent/DextoAgent.js +774 -0
  6. package/dist/agent/agentCard.cjs +44 -0
  7. package/dist/agent/agentCard.d.cts +20 -0
  8. package/dist/agent/agentCard.d.ts +20 -0
  9. package/dist/agent/agentCard.js +20 -0
  10. package/dist/agent/error-codes.cjs +35 -0
  11. package/dist/agent/error-codes.d.cts +14 -0
  12. package/dist/agent/error-codes.d.ts +14 -0
  13. package/dist/agent/error-codes.js +11 -0
  14. package/dist/agent/errors.cjs +84 -0
  15. package/dist/agent/errors.d.cts +40 -0
  16. package/dist/agent/errors.d.ts +40 -0
  17. package/dist/agent/errors.js +60 -0
  18. package/dist/agent/index.cjs +44 -0
  19. package/dist/agent/index.d.cts +60 -0
  20. package/dist/agent/index.d.ts +60 -0
  21. package/dist/agent/index.js +13 -0
  22. package/dist/agent/registry/error-codes.cjs +42 -0
  23. package/dist/agent/registry/error-codes.d.cts +20 -0
  24. package/dist/agent/registry/error-codes.d.ts +20 -0
  25. package/dist/agent/registry/error-codes.js +18 -0
  26. package/dist/agent/registry/errors.cjs +158 -0
  27. package/dist/agent/registry/errors.d.cts +67 -0
  28. package/dist/agent/registry/errors.d.ts +67 -0
  29. package/dist/{chunk-PI6XFMEW.js → agent/registry/errors.js} +43 -50
  30. package/dist/agent/registry/registry.cjs +291 -0
  31. package/dist/agent/registry/registry.d.cts +67 -0
  32. package/dist/agent/registry/registry.d.ts +67 -0
  33. package/dist/agent/registry/registry.js +256 -0
  34. package/dist/agent/registry/types.cjs +41 -0
  35. package/dist/agent/registry/types.d.cts +100 -0
  36. package/dist/agent/registry/types.d.ts +100 -0
  37. package/dist/agent/registry/types.js +16 -0
  38. package/dist/agent/schemas.cjs +113 -0
  39. package/dist/agent/schemas.d.cts +1502 -0
  40. package/dist/agent/schemas.d.ts +1502 -0
  41. package/dist/agent/schemas.js +88 -0
  42. package/dist/agent/state-manager.cjs +214 -0
  43. package/dist/agent/state-manager.d.cts +97 -0
  44. package/dist/agent/state-manager.d.ts +97 -0
  45. package/dist/agent/state-manager.js +190 -0
  46. package/dist/config/agent-resolver.cjs +153 -0
  47. package/dist/config/agent-resolver.d.cts +15 -0
  48. package/dist/config/agent-resolver.d.ts +15 -0
  49. package/dist/config/agent-resolver.js +122 -0
  50. package/dist/config/error-codes.cjs +39 -0
  51. package/dist/config/error-codes.d.cts +17 -0
  52. package/dist/config/error-codes.d.ts +17 -0
  53. package/dist/config/error-codes.js +15 -0
  54. package/dist/config/errors.cjs +126 -0
  55. package/dist/config/errors.d.cts +49 -0
  56. package/dist/config/errors.d.ts +49 -0
  57. package/dist/config/errors.js +102 -0
  58. package/dist/config/index.cjs +26 -0
  59. package/dist/config/index.d.cts +7 -0
  60. package/dist/config/index.d.ts +7 -0
  61. package/dist/config/index.js +3 -0
  62. package/dist/config/loader.cjs +119 -0
  63. package/dist/config/loader.d.cts +19 -0
  64. package/dist/config/loader.d.ts +19 -0
  65. package/dist/config/loader.js +85 -0
  66. package/dist/config/writer.cjs +182 -0
  67. package/dist/config/writer.d.cts +38 -0
  68. package/dist/config/writer.d.ts +38 -0
  69. package/dist/config/writer.js +146 -0
  70. package/dist/context/compression/middle-removal.cjs +95 -0
  71. package/dist/context/compression/middle-removal.d.cts +48 -0
  72. package/dist/context/compression/middle-removal.d.ts +48 -0
  73. package/dist/context/compression/middle-removal.js +71 -0
  74. package/dist/context/compression/oldest-removal.cjs +70 -0
  75. package/dist/context/compression/oldest-removal.d.cts +43 -0
  76. package/dist/context/compression/oldest-removal.d.ts +43 -0
  77. package/dist/context/compression/oldest-removal.js +46 -0
  78. package/dist/context/compression/types.cjs +16 -0
  79. package/dist/context/compression/types.d.cts +21 -0
  80. package/dist/context/compression/types.d.ts +21 -0
  81. package/dist/context/compression/types.js +0 -0
  82. package/dist/context/error-codes.cjs +41 -0
  83. package/dist/context/error-codes.d.cts +19 -0
  84. package/dist/context/error-codes.d.ts +19 -0
  85. package/dist/context/error-codes.js +17 -0
  86. package/dist/context/errors.cjs +146 -0
  87. package/dist/context/errors.d.cts +36 -0
  88. package/dist/context/errors.d.ts +36 -0
  89. package/dist/context/errors.js +122 -0
  90. package/dist/context/index.cjs +24 -0
  91. package/dist/context/index.d.cts +19 -0
  92. package/dist/context/index.d.ts +19 -0
  93. package/dist/context/index.js +2 -0
  94. package/dist/context/manager.cjs +516 -0
  95. package/dist/context/manager.d.cts +254 -0
  96. package/dist/context/manager.d.ts +254 -0
  97. package/dist/context/manager.js +492 -0
  98. package/dist/context/types.cjs +16 -0
  99. package/dist/context/types.d.cts +113 -0
  100. package/dist/context/types.d.ts +113 -0
  101. package/dist/context/types.js +0 -0
  102. package/dist/context/utils.cjs +406 -0
  103. package/dist/context/utils.d.cts +79 -0
  104. package/dist/context/utils.d.ts +79 -0
  105. package/dist/context/utils.js +374 -0
  106. package/dist/errors/DextoBaseError.cjs +36 -0
  107. package/dist/errors/DextoBaseError.d.cts +15 -0
  108. package/dist/errors/DextoBaseError.d.ts +15 -0
  109. package/dist/errors/DextoBaseError.js +12 -0
  110. package/dist/errors/DextoRuntimeError.cjs +50 -0
  111. package/dist/errors/DextoRuntimeError.d.cts +37 -0
  112. package/dist/errors/DextoRuntimeError.d.ts +37 -0
  113. package/dist/errors/DextoRuntimeError.js +26 -0
  114. package/dist/errors/DextoValidationError.cjs +118 -0
  115. package/dist/errors/DextoValidationError.d.cts +65 -0
  116. package/dist/errors/DextoValidationError.d.ts +65 -0
  117. package/dist/{chunk-XFQLRBHE.js → errors/DextoValidationError.js} +4 -32
  118. package/dist/errors/index.cjs +42 -0
  119. package/dist/errors/index.d.cts +18 -0
  120. package/dist/errors/index.d.ts +18 -0
  121. package/dist/errors/index.js +13 -0
  122. package/dist/errors/result-bridge.cjs +38 -0
  123. package/dist/errors/result-bridge.d.cts +39 -0
  124. package/dist/errors/result-bridge.d.ts +39 -0
  125. package/dist/errors/result-bridge.js +14 -0
  126. package/dist/errors/types.cjs +54 -0
  127. package/dist/errors/types.d.cts +62 -0
  128. package/dist/errors/types.d.ts +62 -0
  129. package/dist/errors/types.js +29 -0
  130. package/dist/events/index.cjs +169 -0
  131. package/dist/events/index.d.cts +272 -0
  132. package/dist/events/index.d.ts +272 -0
  133. package/dist/events/index.js +136 -0
  134. package/dist/index.browser.cjs +9 -220
  135. package/dist/index.browser.d.cts +53 -379
  136. package/dist/index.browser.d.ts +53 -379
  137. package/dist/index.browser.js +4 -210
  138. package/dist/index.cjs +31 -15266
  139. package/dist/index.d.cts +89 -6842
  140. package/dist/index.d.ts +89 -6842
  141. package/dist/index.js +14 -9914
  142. package/dist/llm/error-codes.cjs +48 -0
  143. package/dist/llm/error-codes.d.cts +26 -0
  144. package/dist/llm/error-codes.d.ts +26 -0
  145. package/dist/llm/error-codes.js +24 -0
  146. package/dist/llm/errors.cjs +108 -0
  147. package/dist/llm/errors.d.cts +58 -0
  148. package/dist/llm/errors.d.ts +58 -0
  149. package/dist/llm/errors.js +84 -0
  150. package/dist/llm/formatters/anthropic.cjs +246 -0
  151. package/dist/llm/formatters/anthropic.d.cts +45 -0
  152. package/dist/llm/formatters/anthropic.d.ts +45 -0
  153. package/dist/llm/formatters/anthropic.js +227 -0
  154. package/dist/llm/formatters/factory.cjs +51 -0
  155. package/dist/llm/formatters/factory.d.cts +12 -0
  156. package/dist/llm/formatters/factory.d.ts +12 -0
  157. package/dist/llm/formatters/factory.js +27 -0
  158. package/dist/llm/formatters/openai.cjs +167 -0
  159. package/dist/llm/formatters/openai.d.cts +38 -0
  160. package/dist/llm/formatters/openai.d.ts +38 -0
  161. package/dist/llm/formatters/openai.js +147 -0
  162. package/dist/llm/formatters/types.cjs +16 -0
  163. package/dist/llm/formatters/types.d.cts +43 -0
  164. package/dist/llm/formatters/types.d.ts +43 -0
  165. package/dist/llm/formatters/types.js +0 -0
  166. package/dist/llm/formatters/vercel.cjs +411 -0
  167. package/dist/llm/formatters/vercel.d.cts +48 -0
  168. package/dist/llm/formatters/vercel.d.ts +48 -0
  169. package/dist/llm/formatters/vercel.js +387 -0
  170. package/dist/llm/index.cjs +34 -0
  171. package/dist/llm/index.d.cts +39 -0
  172. package/dist/llm/index.d.ts +39 -0
  173. package/dist/llm/index.js +7 -0
  174. package/dist/llm/registry.cjs +881 -0
  175. package/dist/llm/registry.d.cts +176 -0
  176. package/dist/llm/registry.d.ts +176 -0
  177. package/dist/{chunk-J6AXCN3H.js → llm/registry.js} +25 -455
  178. package/dist/llm/resolver.cjs +154 -0
  179. package/dist/llm/resolver.d.cts +34 -0
  180. package/dist/llm/resolver.d.ts +34 -0
  181. package/dist/llm/resolver.js +136 -0
  182. package/dist/llm/schemas.cjs +188 -0
  183. package/dist/llm/schemas.d.cts +111 -0
  184. package/dist/llm/schemas.d.ts +111 -0
  185. package/dist/llm/schemas.js +172 -0
  186. package/dist/llm/services/anthropic.cjs +398 -0
  187. package/dist/llm/services/anthropic.d.cts +65 -0
  188. package/dist/llm/services/anthropic.d.ts +65 -0
  189. package/dist/llm/services/anthropic.js +374 -0
  190. package/dist/llm/services/factory.cjs +164 -0
  191. package/dist/llm/services/factory.d.cts +39 -0
  192. package/dist/llm/services/factory.d.ts +39 -0
  193. package/dist/llm/services/factory.js +130 -0
  194. package/dist/llm/services/index.cjs +22 -0
  195. package/dist/llm/services/index.d.cts +21 -0
  196. package/dist/llm/services/index.d.ts +21 -0
  197. package/dist/llm/services/index.js +1 -0
  198. package/dist/llm/services/openai.cjs +470 -0
  199. package/dist/llm/services/openai.d.cts +65 -0
  200. package/dist/llm/services/openai.d.ts +65 -0
  201. package/dist/llm/services/openai.js +446 -0
  202. package/dist/llm/services/test-utils.integration.cjs +169 -0
  203. package/dist/llm/services/test-utils.integration.d.cts +83 -0
  204. package/dist/llm/services/test-utils.integration.d.ts +83 -0
  205. package/dist/llm/services/test-utils.integration.js +142 -0
  206. package/dist/llm/services/types.cjs +16 -0
  207. package/dist/llm/services/types.d.cts +56 -0
  208. package/dist/llm/services/types.d.ts +56 -0
  209. package/dist/llm/services/types.js +0 -0
  210. package/dist/llm/services/vercel.cjs +525 -0
  211. package/dist/llm/services/vercel.d.cts +72 -0
  212. package/dist/llm/services/vercel.d.ts +72 -0
  213. package/dist/llm/services/vercel.js +506 -0
  214. package/dist/llm/tokenizer/anthropic.cjs +43 -0
  215. package/dist/llm/tokenizer/anthropic.d.cts +21 -0
  216. package/dist/llm/tokenizer/anthropic.d.ts +21 -0
  217. package/dist/llm/tokenizer/anthropic.js +19 -0
  218. package/dist/llm/tokenizer/default.cjs +41 -0
  219. package/dist/llm/tokenizer/default.d.cts +16 -0
  220. package/dist/llm/tokenizer/default.d.ts +16 -0
  221. package/dist/llm/tokenizer/default.js +17 -0
  222. package/dist/llm/tokenizer/factory.cjs +44 -0
  223. package/dist/llm/tokenizer/factory.d.cts +12 -0
  224. package/dist/llm/tokenizer/factory.d.ts +12 -0
  225. package/dist/llm/tokenizer/factory.js +20 -0
  226. package/dist/llm/tokenizer/google.cjs +52 -0
  227. package/dist/llm/tokenizer/google.d.cts +31 -0
  228. package/dist/llm/tokenizer/google.d.ts +31 -0
  229. package/dist/llm/tokenizer/google.js +28 -0
  230. package/dist/llm/tokenizer/openai.cjs +108 -0
  231. package/dist/llm/tokenizer/openai.d.cts +32 -0
  232. package/dist/llm/tokenizer/openai.d.ts +32 -0
  233. package/dist/llm/tokenizer/openai.js +83 -0
  234. package/dist/llm/tokenizer/types.cjs +33 -0
  235. package/dist/llm/tokenizer/types.d.cts +19 -0
  236. package/dist/llm/tokenizer/types.d.ts +19 -0
  237. package/dist/llm/tokenizer/types.js +9 -0
  238. package/dist/llm/types.cjs +42 -0
  239. package/dist/llm/types.d.cts +29 -0
  240. package/dist/llm/types.d.ts +29 -0
  241. package/dist/llm/types.js +16 -0
  242. package/dist/llm/validation.cjs +162 -0
  243. package/dist/llm/validation.d.cts +60 -0
  244. package/dist/llm/validation.d.ts +60 -0
  245. package/dist/llm/validation.js +138 -0
  246. package/dist/logger/browser.cjs +86 -0
  247. package/dist/logger/browser.d.cts +29 -0
  248. package/dist/logger/browser.d.ts +29 -0
  249. package/dist/logger/browser.js +61 -0
  250. package/dist/logger/index.cjs +22 -0
  251. package/dist/logger/index.d.cts +1 -0
  252. package/dist/logger/index.d.ts +1 -0
  253. package/dist/logger/index.js +1 -0
  254. package/dist/logger/logger.cjs +362 -0
  255. package/dist/logger/logger.d.cts +52 -0
  256. package/dist/logger/logger.d.ts +52 -0
  257. package/dist/logger/logger.js +327 -0
  258. package/dist/mcp/error-codes.cjs +38 -0
  259. package/dist/mcp/error-codes.d.cts +16 -0
  260. package/dist/mcp/error-codes.d.ts +16 -0
  261. package/dist/mcp/error-codes.js +14 -0
  262. package/dist/mcp/errors.cjs +131 -0
  263. package/dist/mcp/errors.d.cts +72 -0
  264. package/dist/mcp/errors.d.ts +72 -0
  265. package/dist/mcp/errors.js +107 -0
  266. package/dist/mcp/index.cjs +34 -0
  267. package/dist/mcp/index.d.cts +26 -0
  268. package/dist/mcp/index.d.ts +26 -0
  269. package/dist/mcp/index.js +7 -0
  270. package/dist/mcp/manager.cjs +473 -0
  271. package/dist/mcp/manager.d.cts +163 -0
  272. package/dist/mcp/manager.d.ts +163 -0
  273. package/dist/mcp/manager.js +449 -0
  274. package/dist/mcp/mcp-client.cjs +420 -0
  275. package/dist/mcp/mcp-client.d.cts +108 -0
  276. package/dist/mcp/mcp-client.d.ts +108 -0
  277. package/dist/mcp/mcp-client.js +396 -0
  278. package/dist/mcp/resolver.cjs +78 -0
  279. package/dist/mcp/resolver.d.cts +22 -0
  280. package/dist/mcp/resolver.d.ts +22 -0
  281. package/dist/mcp/resolver.js +56 -0
  282. package/dist/mcp/schemas.cjs +82 -0
  283. package/dist/mcp/schemas.d.cts +266 -0
  284. package/dist/mcp/schemas.d.ts +266 -0
  285. package/dist/mcp/schemas.js +54 -0
  286. package/dist/mcp/types.cjs +16 -0
  287. package/dist/mcp/types.d.cts +21 -0
  288. package/dist/mcp/types.d.ts +21 -0
  289. package/dist/mcp/types.js +0 -0
  290. package/dist/preferences/constants.cjs +28 -0
  291. package/dist/preferences/constants.d.cts +3 -0
  292. package/dist/preferences/constants.d.ts +3 -0
  293. package/dist/preferences/constants.js +4 -0
  294. package/dist/preferences/error-codes.cjs +35 -0
  295. package/dist/preferences/error-codes.d.cts +9 -0
  296. package/dist/preferences/error-codes.d.ts +9 -0
  297. package/dist/preferences/error-codes.js +11 -0
  298. package/dist/preferences/errors.cjs +75 -0
  299. package/dist/preferences/errors.d.cts +33 -0
  300. package/dist/preferences/errors.d.ts +33 -0
  301. package/dist/preferences/errors.js +50 -0
  302. package/dist/preferences/index.cjs +55 -0
  303. package/dist/preferences/index.d.cts +21 -0
  304. package/dist/preferences/index.d.ts +21 -0
  305. package/dist/preferences/index.js +31 -0
  306. package/dist/preferences/loader.cjs +136 -0
  307. package/dist/preferences/loader.d.cts +45 -0
  308. package/dist/preferences/loader.d.ts +45 -0
  309. package/dist/preferences/loader.js +107 -0
  310. package/dist/preferences/schemas.cjs +74 -0
  311. package/dist/preferences/schemas.d.cts +104 -0
  312. package/dist/preferences/schemas.d.ts +104 -0
  313. package/dist/preferences/schemas.js +47 -0
  314. package/dist/search/index.cjs +28 -0
  315. package/dist/search/index.d.cts +5 -0
  316. package/dist/search/index.d.ts +5 -0
  317. package/dist/search/index.js +4 -0
  318. package/dist/search/search-service.cjs +245 -0
  319. package/dist/search/search-service.d.cts +47 -0
  320. package/dist/search/search-service.d.ts +47 -0
  321. package/dist/search/search-service.js +221 -0
  322. package/dist/search/types.cjs +16 -0
  323. package/dist/search/types.d.cts +78 -0
  324. package/dist/search/types.d.ts +78 -0
  325. package/dist/search/types.js +0 -0
  326. package/dist/session/chat-session.cjs +354 -0
  327. package/dist/session/chat-session.d.cts +284 -0
  328. package/dist/session/chat-session.d.ts +284 -0
  329. package/dist/session/chat-session.js +333 -0
  330. package/dist/session/error-codes.cjs +35 -0
  331. package/dist/session/error-codes.d.cts +13 -0
  332. package/dist/session/error-codes.d.ts +13 -0
  333. package/dist/session/error-codes.js +11 -0
  334. package/dist/session/errors.cjs +93 -0
  335. package/dist/session/errors.d.cts +58 -0
  336. package/dist/session/errors.d.ts +58 -0
  337. package/dist/session/errors.js +69 -0
  338. package/dist/session/history/database.cjs +95 -0
  339. package/dist/session/history/database.d.cts +28 -0
  340. package/dist/session/history/database.d.ts +28 -0
  341. package/dist/session/history/database.js +71 -0
  342. package/dist/session/history/factory.cjs +31 -0
  343. package/dist/session/history/factory.d.cts +11 -0
  344. package/dist/session/history/factory.d.ts +11 -0
  345. package/dist/session/history/factory.js +7 -0
  346. package/dist/session/history/types.cjs +16 -0
  347. package/dist/session/history/types.d.cts +17 -0
  348. package/dist/session/history/types.d.ts +17 -0
  349. package/dist/session/history/types.js +0 -0
  350. package/dist/session/index.cjs +37 -0
  351. package/dist/session/index.d.cts +53 -0
  352. package/dist/session/index.d.ts +53 -0
  353. package/dist/session/index.js +10 -0
  354. package/dist/session/schemas.cjs +32 -0
  355. package/dist/session/schemas.d.cts +16 -0
  356. package/dist/session/schemas.d.ts +16 -0
  357. package/dist/session/schemas.js +8 -0
  358. package/dist/session/session-manager.cjs +481 -0
  359. package/dist/session/session-manager.d.cts +219 -0
  360. package/dist/session/session-manager.d.ts +219 -0
  361. package/dist/session/session-manager.js +457 -0
  362. package/dist/storage/backend/cache-backend.cjs +16 -0
  363. package/dist/storage/backend/cache-backend.d.cts +15 -0
  364. package/dist/storage/backend/cache-backend.d.ts +15 -0
  365. package/dist/storage/backend/cache-backend.js +0 -0
  366. package/dist/storage/backend/database-backend.cjs +16 -0
  367. package/dist/storage/backend/database-backend.d.cts +19 -0
  368. package/dist/storage/backend/database-backend.d.ts +19 -0
  369. package/dist/storage/backend/database-backend.js +0 -0
  370. package/dist/storage/backend/memory-backend.cjs +140 -0
  371. package/dist/storage/backend/memory-backend.d.cts +34 -0
  372. package/dist/storage/backend/memory-backend.d.ts +34 -0
  373. package/dist/storage/backend/memory-backend.js +116 -0
  374. package/dist/storage/backend/postgres-backend.cjs +231 -0
  375. package/dist/storage/backend/postgres-backend.d.cts +37 -0
  376. package/dist/storage/backend/postgres-backend.d.ts +37 -0
  377. package/dist/{postgres-backend-WMWS7RAT.js → storage/backend/postgres-backend.js} +3 -12
  378. package/dist/storage/backend/redis-backend.cjs +184 -0
  379. package/dist/storage/backend/redis-backend.d.cts +36 -0
  380. package/dist/storage/backend/redis-backend.d.ts +36 -0
  381. package/dist/{redis-backend-BNLN3XHX.js → storage/backend/redis-backend.js} +3 -12
  382. package/dist/storage/backend/sqlite-backend.cjs +271 -0
  383. package/dist/storage/backend/sqlite-backend.d.cts +35 -0
  384. package/dist/storage/backend/sqlite-backend.d.ts +35 -0
  385. package/dist/{sqlite-backend-AR6XNK2Q.js → storage/backend/sqlite-backend.js} +6 -17
  386. package/dist/storage/backend/types.cjs +16 -0
  387. package/dist/storage/backend/types.d.cts +14 -0
  388. package/dist/storage/backend/types.d.ts +14 -0
  389. package/dist/storage/backend/types.js +0 -0
  390. package/dist/storage/error-codes.cjs +36 -0
  391. package/dist/storage/error-codes.d.cts +14 -0
  392. package/dist/storage/error-codes.d.ts +14 -0
  393. package/dist/storage/error-codes.js +12 -0
  394. package/dist/storage/errors.cjs +104 -0
  395. package/dist/storage/errors.d.cts +63 -0
  396. package/dist/storage/errors.d.ts +63 -0
  397. package/dist/{chunk-F2QFAECT.js → storage/errors.js} +23 -30
  398. package/dist/storage/index.cjs +33 -0
  399. package/dist/storage/index.d.cts +7 -0
  400. package/dist/storage/index.d.ts +7 -0
  401. package/dist/storage/index.js +7 -0
  402. package/dist/storage/schemas.cjs +113 -0
  403. package/dist/storage/schemas.d.cts +856 -0
  404. package/dist/storage/schemas.d.ts +856 -0
  405. package/dist/storage/schemas.js +89 -0
  406. package/dist/storage/storage-manager.cjs +208 -0
  407. package/dist/storage/storage-manager.d.cts +52 -0
  408. package/dist/storage/storage-manager.d.ts +52 -0
  409. package/dist/storage/storage-manager.js +173 -0
  410. package/dist/storage/types.cjs +16 -0
  411. package/dist/storage/types.d.cts +5 -0
  412. package/dist/storage/types.d.ts +5 -0
  413. package/dist/storage/types.js +0 -0
  414. package/dist/systemPrompt/contributors.cjs +146 -0
  415. package/dist/systemPrompt/contributors.d.cts +44 -0
  416. package/dist/systemPrompt/contributors.d.ts +44 -0
  417. package/dist/systemPrompt/contributors.js +120 -0
  418. package/dist/systemPrompt/error-codes.cjs +35 -0
  419. package/dist/systemPrompt/error-codes.d.cts +13 -0
  420. package/dist/systemPrompt/error-codes.d.ts +13 -0
  421. package/dist/systemPrompt/error-codes.js +11 -0
  422. package/dist/systemPrompt/errors.cjs +93 -0
  423. package/dist/systemPrompt/errors.d.cts +55 -0
  424. package/dist/systemPrompt/errors.d.ts +55 -0
  425. package/dist/systemPrompt/errors.js +69 -0
  426. package/dist/systemPrompt/in-built-prompts.cjs +68 -0
  427. package/dist/systemPrompt/in-built-prompts.d.cts +28 -0
  428. package/dist/systemPrompt/in-built-prompts.d.ts +28 -0
  429. package/dist/systemPrompt/in-built-prompts.js +42 -0
  430. package/dist/systemPrompt/index.cjs +30 -0
  431. package/dist/systemPrompt/index.d.cts +14 -0
  432. package/dist/systemPrompt/index.d.ts +14 -0
  433. package/dist/systemPrompt/index.js +5 -0
  434. package/dist/systemPrompt/manager.cjs +93 -0
  435. package/dist/systemPrompt/manager.d.cts +31 -0
  436. package/dist/systemPrompt/manager.d.ts +31 -0
  437. package/dist/systemPrompt/manager.js +69 -0
  438. package/dist/systemPrompt/registry.cjs +51 -0
  439. package/dist/systemPrompt/registry.d.cts +20 -0
  440. package/dist/systemPrompt/registry.d.ts +20 -0
  441. package/dist/systemPrompt/registry.js +15 -0
  442. package/dist/systemPrompt/schemas.cjs +107 -0
  443. package/dist/systemPrompt/schemas.d.cts +401 -0
  444. package/dist/systemPrompt/schemas.d.ts +401 -0
  445. package/dist/systemPrompt/schemas.js +81 -0
  446. package/dist/systemPrompt/types.cjs +16 -0
  447. package/dist/systemPrompt/types.d.cts +19 -0
  448. package/dist/systemPrompt/types.d.ts +19 -0
  449. package/dist/systemPrompt/types.js +0 -0
  450. package/dist/tools/confirmation/allowed-tools-provider/factory.cjs +44 -0
  451. package/dist/tools/confirmation/allowed-tools-provider/factory.d.cts +19 -0
  452. package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts +19 -0
  453. package/dist/tools/confirmation/allowed-tools-provider/factory.js +20 -0
  454. package/dist/tools/confirmation/allowed-tools-provider/in-memory.cjs +62 -0
  455. package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.cts +17 -0
  456. package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts +17 -0
  457. package/dist/tools/confirmation/allowed-tools-provider/in-memory.js +38 -0
  458. package/dist/tools/confirmation/allowed-tools-provider/storage.cjs +68 -0
  459. package/dist/tools/confirmation/allowed-tools-provider/storage.d.cts +26 -0
  460. package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts +26 -0
  461. package/dist/tools/confirmation/allowed-tools-provider/storage.js +44 -0
  462. package/dist/tools/confirmation/allowed-tools-provider/types.cjs +16 -0
  463. package/dist/tools/confirmation/allowed-tools-provider/types.d.cts +35 -0
  464. package/dist/tools/confirmation/allowed-tools-provider/types.d.ts +35 -0
  465. package/dist/tools/confirmation/allowed-tools-provider/types.js +0 -0
  466. package/dist/tools/confirmation/event-based-confirmation-provider.cjs +158 -0
  467. package/dist/tools/confirmation/event-based-confirmation-provider.d.cts +41 -0
  468. package/dist/tools/confirmation/event-based-confirmation-provider.d.ts +41 -0
  469. package/dist/tools/confirmation/event-based-confirmation-provider.js +134 -0
  470. package/dist/tools/confirmation/factory.cjs +52 -0
  471. package/dist/tools/confirmation/factory.d.cts +37 -0
  472. package/dist/tools/confirmation/factory.d.ts +37 -0
  473. package/dist/tools/confirmation/factory.js +28 -0
  474. package/dist/tools/confirmation/noop-confirmation-provider.cjs +49 -0
  475. package/dist/tools/confirmation/noop-confirmation-provider.d.cts +22 -0
  476. package/dist/tools/confirmation/noop-confirmation-provider.d.ts +22 -0
  477. package/dist/tools/confirmation/noop-confirmation-provider.js +25 -0
  478. package/dist/tools/confirmation/types.cjs +16 -0
  479. package/dist/tools/confirmation/types.d.cts +46 -0
  480. package/dist/tools/confirmation/types.d.ts +46 -0
  481. package/dist/tools/confirmation/types.js +0 -0
  482. package/dist/tools/error-codes.cjs +40 -0
  483. package/dist/tools/error-codes.d.cts +18 -0
  484. package/dist/tools/error-codes.d.ts +18 -0
  485. package/dist/tools/error-codes.js +16 -0
  486. package/dist/tools/errors.cjs +164 -0
  487. package/dist/tools/errors.d.cts +97 -0
  488. package/dist/tools/errors.d.ts +97 -0
  489. package/dist/tools/errors.js +140 -0
  490. package/dist/tools/index.cjs +37 -0
  491. package/dist/tools/index.d.cts +19 -0
  492. package/dist/tools/index.d.ts +19 -0
  493. package/dist/tools/index.js +8 -0
  494. package/dist/tools/internal-tools/implementations/search-history-tool.cjs +61 -0
  495. package/dist/tools/internal-tools/implementations/search-history-tool.d.cts +15 -0
  496. package/dist/tools/internal-tools/implementations/search-history-tool.d.ts +15 -0
  497. package/dist/tools/internal-tools/implementations/search-history-tool.js +37 -0
  498. package/dist/tools/internal-tools/index.cjs +24 -0
  499. package/dist/tools/internal-tools/index.d.cts +13 -0
  500. package/dist/tools/internal-tools/index.d.ts +13 -0
  501. package/dist/tools/internal-tools/index.js +2 -0
  502. package/dist/tools/internal-tools/provider.cjs +159 -0
  503. package/dist/tools/internal-tools/provider.d.cts +66 -0
  504. package/dist/tools/internal-tools/provider.d.ts +66 -0
  505. package/dist/tools/internal-tools/provider.js +135 -0
  506. package/dist/tools/internal-tools/registry.cjs +43 -0
  507. package/dist/tools/internal-tools/registry.d.cts +45 -0
  508. package/dist/tools/internal-tools/registry.d.ts +45 -0
  509. package/dist/tools/internal-tools/registry.js +17 -0
  510. package/dist/tools/schemas.cjs +45 -0
  511. package/dist/tools/schemas.d.cts +21 -0
  512. package/dist/tools/schemas.d.ts +21 -0
  513. package/dist/tools/schemas.js +20 -0
  514. package/dist/tools/tool-manager.cjs +275 -0
  515. package/dist/tools/tool-manager.d.cts +106 -0
  516. package/dist/tools/tool-manager.d.ts +106 -0
  517. package/dist/tools/tool-manager.js +251 -0
  518. package/dist/tools/types.cjs +16 -0
  519. package/dist/tools/types.d.cts +66 -0
  520. package/dist/tools/types.d.ts +66 -0
  521. package/dist/tools/types.js +0 -0
  522. package/dist/utils/api-key-resolver.cjs +62 -0
  523. package/dist/utils/api-key-resolver.d.cts +23 -0
  524. package/dist/utils/api-key-resolver.d.ts +23 -0
  525. package/dist/utils/api-key-resolver.js +36 -0
  526. package/dist/utils/api-key-store.cjs +56 -0
  527. package/dist/utils/api-key-store.d.cts +26 -0
  528. package/dist/utils/api-key-store.d.ts +26 -0
  529. package/dist/utils/api-key-store.js +30 -0
  530. package/dist/utils/env.cjs +154 -0
  531. package/dist/utils/env.d.cts +29 -0
  532. package/dist/utils/env.d.ts +29 -0
  533. package/dist/utils/env.js +118 -0
  534. package/dist/utils/error-conversion.cjs +53 -0
  535. package/dist/utils/error-conversion.d.cts +13 -0
  536. package/dist/utils/error-conversion.d.ts +13 -0
  537. package/dist/utils/error-conversion.js +29 -0
  538. package/dist/utils/execution-context.cjs +85 -0
  539. package/dist/utils/execution-context.d.cts +21 -0
  540. package/dist/utils/execution-context.d.ts +21 -0
  541. package/dist/utils/execution-context.js +49 -0
  542. package/dist/{chunk-MVKLS3LM.js → utils/fs-walk.cjs} +27 -18
  543. package/dist/utils/fs-walk.d.cts +9 -0
  544. package/dist/utils/fs-walk.d.ts +9 -0
  545. package/dist/utils/fs-walk.js +18 -0
  546. package/dist/utils/index.cjs +44 -0
  547. package/dist/utils/index.d.cts +63 -0
  548. package/dist/utils/index.d.ts +63 -0
  549. package/dist/utils/index.js +12 -0
  550. package/dist/utils/path.cjs +197 -0
  551. package/dist/utils/path.d.cts +54 -0
  552. package/dist/utils/path.d.ts +54 -0
  553. package/dist/utils/path.js +159 -0
  554. package/dist/utils/port-utils.cjs +37 -0
  555. package/dist/utils/port-utils.d.cts +11 -0
  556. package/dist/utils/port-utils.d.ts +11 -0
  557. package/dist/utils/port-utils.js +13 -0
  558. package/dist/utils/port-utils.spec.cjs +26 -0
  559. package/dist/utils/port-utils.spec.d.cts +2 -0
  560. package/dist/utils/port-utils.spec.d.ts +2 -0
  561. package/dist/utils/port-utils.spec.js +25 -0
  562. package/dist/utils/redactor.cjs +105 -0
  563. package/dist/utils/redactor.d.cts +18 -0
  564. package/dist/utils/redactor.d.ts +18 -0
  565. package/dist/utils/redactor.js +81 -0
  566. package/dist/utils/result.cjs +115 -0
  567. package/dist/utils/result.d.cts +180 -0
  568. package/dist/utils/result.d.ts +180 -0
  569. package/dist/utils/result.js +82 -0
  570. package/dist/utils/safe-stringify.cjs +57 -0
  571. package/dist/utils/safe-stringify.d.cts +7 -0
  572. package/dist/utils/safe-stringify.d.ts +7 -0
  573. package/dist/utils/safe-stringify.js +33 -0
  574. package/dist/utils/schema.cjs +42 -0
  575. package/dist/utils/schema.d.cts +6 -0
  576. package/dist/utils/schema.d.ts +6 -0
  577. package/dist/utils/schema.js +18 -0
  578. package/dist/utils/service-initializer.cjs +119 -0
  579. package/dist/utils/service-initializer.d.cts +63 -0
  580. package/dist/utils/service-initializer.d.ts +63 -0
  581. package/dist/utils/service-initializer.js +95 -0
  582. package/dist/utils/user-info.cjs +30 -0
  583. package/dist/utils/user-info.d.cts +3 -0
  584. package/dist/utils/user-info.d.ts +3 -0
  585. package/dist/utils/user-info.js +6 -0
  586. package/dist/utils/zod-schema-converter.cjs +112 -0
  587. package/dist/utils/zod-schema-converter.d.cts +13 -0
  588. package/dist/utils/zod-schema-converter.d.ts +13 -0
  589. package/dist/utils/zod-schema-converter.js +87 -0
  590. package/package.json +2 -2
  591. package/dist/chunk-D62MHQBE.js +0 -2203
  592. package/dist/chunk-FCJVTIBV.js +0 -535
  593. package/dist/chunk-TPERKLLN.js +0 -75
  594. package/dist/errors-ZZ4Z3FKB.js +0 -10
  595. package/dist/loader-HBNEYPQZ.js +0 -20
  596. package/dist/path-TP7WBDED.js +0 -21
  597. package/dist/registry-Z4DFXODW.js +0 -14
@@ -0,0 +1,774 @@
1
+ import { SessionError } from "../session/index.js";
2
+ import { logger } from "../logger/index.js";
3
+ import { LLMUpdatesSchema } from "../llm/schemas.js";
4
+ import { resolveAndValidateLLMConfig } from "../llm/resolver.js";
5
+ import { validateInputForLLM } from "../llm/validation.js";
6
+ import { AgentError } from "./errors.js";
7
+ import { MCPError } from "../mcp/errors.js";
8
+ import { ensureOk } from "../errors/result-bridge.js";
9
+ import { fail, zodToIssues } from "../utils/result.js";
10
+ import { resolveAndValidateMcpServerConfig } from "../mcp/resolver.js";
11
+ import {
12
+ getSupportedProviders,
13
+ getDefaultModelForProvider,
14
+ getProviderFromModel,
15
+ LLM_REGISTRY
16
+ } from "../llm/registry.js";
17
+ import { createAgentServices } from "../utils/service-initializer.js";
18
+ import { AgentConfigSchema } from "./schemas.js";
19
+ import { getDextoPath } from "../utils/path.js";
20
+ import { safeStringify } from "../utils/safe-stringify.js";
21
+ const requiredServices = [
22
+ "mcpManager",
23
+ "toolManager",
24
+ "promptManager",
25
+ "agentEventBus",
26
+ "stateManager",
27
+ "sessionManager",
28
+ "searchService"
29
+ ];
30
+ class DextoAgent {
31
+ constructor(config, configPath) {
32
+ this.configPath = configPath;
33
+ this.config = AgentConfigSchema.parse(config);
34
+ logger.info("DextoAgent created.");
35
+ }
36
+ /**
37
+ * These services are public for use by the outside world
38
+ * This gives users the option to use methods of the services directly if they know what they are doing
39
+ * But the main recommended entry points/functions would still be the wrapper methods we define below
40
+ */
41
+ mcpManager;
42
+ promptManager;
43
+ agentEventBus;
44
+ stateManager;
45
+ sessionManager;
46
+ toolManager;
47
+ services;
48
+ // Search service for conversation search
49
+ searchService;
50
+ // Default session for backward compatibility
51
+ defaultSession = null;
52
+ // Current default session ID for loadSession functionality
53
+ currentDefaultSessionId = "default";
54
+ // Track initialization state
55
+ _isStarted = false;
56
+ _isStopped = false;
57
+ // Store config for async initialization
58
+ config;
59
+ /**
60
+ * Starts the agent by initializing all async services.
61
+ * This method handles storage backends, MCP connections, session manager initialization, and other async operations.
62
+ * Must be called before using any agent functionality.
63
+ *
64
+ * @throws Error if agent is already started or initialization fails
65
+ */
66
+ async start() {
67
+ if (this._isStarted) {
68
+ throw AgentError.alreadyStarted();
69
+ }
70
+ try {
71
+ logger.info("Starting DextoAgent...");
72
+ const services = await createAgentServices(this.config, this.configPath);
73
+ for (const service of requiredServices) {
74
+ if (!services[service]) {
75
+ throw AgentError.initializationFailed(
76
+ `Required service ${service} is missing during agent start`
77
+ );
78
+ }
79
+ }
80
+ Object.assign(this, {
81
+ mcpManager: services.mcpManager,
82
+ toolManager: services.toolManager,
83
+ promptManager: services.promptManager,
84
+ agentEventBus: services.agentEventBus,
85
+ stateManager: services.stateManager,
86
+ sessionManager: services.sessionManager,
87
+ services
88
+ });
89
+ this.searchService = services.searchService;
90
+ this._isStarted = true;
91
+ logger.info("DextoAgent started successfully.");
92
+ const logPath = getDextoPath("logs", "dexto.log");
93
+ console.log(`\u{1F4CB} Logs available at: ${logPath}`);
94
+ } catch (error) {
95
+ logger.error("Failed to start DextoAgent", error);
96
+ throw error;
97
+ }
98
+ }
99
+ /**
100
+ * Stops the agent and gracefully shuts down all services.
101
+ * This method handles disconnecting MCP clients, cleaning up sessions, closing storage connections,
102
+ * and releasing all resources. The agent cannot be restarted after being stopped.
103
+ *
104
+ * @throws Error if agent has not been started or shutdown fails
105
+ */
106
+ async stop() {
107
+ if (this._isStopped) {
108
+ logger.warn("Agent is already stopped");
109
+ return;
110
+ }
111
+ if (!this._isStarted) {
112
+ throw AgentError.notStarted();
113
+ }
114
+ try {
115
+ logger.info("Stopping DextoAgent...");
116
+ const shutdownErrors = [];
117
+ try {
118
+ if (this.sessionManager) {
119
+ await this.sessionManager.cleanup();
120
+ logger.debug("SessionManager cleaned up successfully");
121
+ }
122
+ } catch (error) {
123
+ const err = error instanceof Error ? error : new Error(String(error));
124
+ shutdownErrors.push(new Error(`SessionManager cleanup failed: ${err.message}`));
125
+ }
126
+ try {
127
+ if (this.mcpManager) {
128
+ await this.mcpManager.disconnectAll();
129
+ logger.debug("MCPManager disconnected all clients successfully");
130
+ }
131
+ } catch (error) {
132
+ const err = error instanceof Error ? error : new Error(String(error));
133
+ shutdownErrors.push(new Error(`MCPManager disconnect failed: ${err.message}`));
134
+ }
135
+ try {
136
+ if (this.services?.storageManager) {
137
+ await this.services.storageManager.disconnect();
138
+ logger.debug("Storage manager disconnected successfully");
139
+ }
140
+ } catch (error) {
141
+ const err = error instanceof Error ? error : new Error(String(error));
142
+ shutdownErrors.push(new Error(`Storage disconnect failed: ${err.message}`));
143
+ }
144
+ this._isStopped = true;
145
+ this._isStarted = false;
146
+ if (shutdownErrors.length > 0) {
147
+ const errorMessages = shutdownErrors.map((e) => e.message).join("; ");
148
+ logger.warn(`DextoAgent stopped with some errors: ${errorMessages}`);
149
+ } else {
150
+ logger.info("DextoAgent stopped successfully.");
151
+ }
152
+ } catch (error) {
153
+ logger.error("Failed to stop DextoAgent", error);
154
+ throw error;
155
+ }
156
+ }
157
+ /**
158
+ * Checks if the agent has been started.
159
+ * @returns true if agent is started, false otherwise
160
+ */
161
+ isStarted() {
162
+ return this._isStarted;
163
+ }
164
+ /**
165
+ * Checks if the agent has been stopped.
166
+ * @returns true if agent is stopped, false otherwise
167
+ */
168
+ isStopped() {
169
+ return this._isStopped;
170
+ }
171
+ /**
172
+ * Ensures the agent is started before executing operations.
173
+ * @throws Error if agent is not started or has been stopped
174
+ */
175
+ ensureStarted() {
176
+ if (this._isStopped) {
177
+ logger.warn("Agent is stopped");
178
+ throw AgentError.stopped();
179
+ }
180
+ if (!this._isStarted) {
181
+ logger.warn("Agent is not started");
182
+ throw AgentError.notStarted();
183
+ }
184
+ }
185
+ // ============= CORE AGENT FUNCTIONALITY =============
186
+ /**
187
+ * Main method for processing user input.
188
+ * Processes user input through the agent's LLM service and returns the response.
189
+ *
190
+ * @param textInput - The user's text message or query to process
191
+ * @param imageDataInput - Optional image data and MIME type for multimodal input
192
+ * @param fileDataInput - Optional file data and MIME type for file input
193
+ * @param sessionId - Optional session ID for multi-session scenarios
194
+ * @returns Promise that resolves to the AI's response text, or null if no significant response
195
+ * @throws Error if processing fails
196
+ */
197
+ async run(textInput, imageDataInput, fileDataInput, sessionId, stream = false) {
198
+ this.ensureStarted();
199
+ try {
200
+ const targetSessionId = sessionId || this.currentDefaultSessionId;
201
+ const llmConfig = this.stateManager.getLLMConfig(targetSessionId);
202
+ const validation = validateInputForLLM(
203
+ {
204
+ text: textInput,
205
+ ...imageDataInput && { imageData: imageDataInput },
206
+ ...fileDataInput && { fileData: fileDataInput }
207
+ },
208
+ {
209
+ provider: llmConfig.provider,
210
+ model: llmConfig.model
211
+ }
212
+ );
213
+ ensureOk(validation);
214
+ const existingSession = await this.sessionManager.getSession(targetSessionId);
215
+ const session = existingSession || await this.sessionManager.createSession(targetSessionId);
216
+ logger.debug(
217
+ `DextoAgent.run: sessionId=${targetSessionId}, textLength=${textInput?.length ?? 0}, hasImage=${Boolean(
218
+ imageDataInput
219
+ )}, hasFile=${Boolean(fileDataInput)}`
220
+ );
221
+ const response = await session.run(textInput, imageDataInput, fileDataInput, stream);
222
+ this.sessionManager.incrementMessageCount(session.id).catch(
223
+ (error) => logger.warn(
224
+ `Failed to increment message count: ${error instanceof Error ? error.message : String(error)}`
225
+ )
226
+ );
227
+ return response;
228
+ } catch (error) {
229
+ logger.error(
230
+ `Error during DextoAgent.run: ${error instanceof Error ? error.message : JSON.stringify(error)}`
231
+ );
232
+ throw error;
233
+ }
234
+ }
235
+ /**
236
+ * Cancels the currently running turn for a session (or the default session).
237
+ * Safe to call even if no run is in progress.
238
+ * @param sessionId Optional session id; defaults to current default session
239
+ * @returns true if a run was in progress and was signaled to abort; false otherwise
240
+ */
241
+ async cancel(sessionId) {
242
+ this.ensureStarted();
243
+ const targetSessionId = sessionId || this.currentDefaultSessionId;
244
+ if (!sessionId && this.defaultSession && this.defaultSession.id === targetSessionId) {
245
+ return this.defaultSession.cancel();
246
+ }
247
+ const existing = await this.sessionManager.getSession(targetSessionId, false);
248
+ if (existing) {
249
+ return existing.cancel();
250
+ }
251
+ return false;
252
+ }
253
+ // ============= SESSION MANAGEMENT =============
254
+ /**
255
+ * Creates a new chat session or returns an existing one.
256
+ * @param sessionId Optional session ID. If not provided, a UUID will be generated.
257
+ * @returns The created or existing ChatSession
258
+ */
259
+ async createSession(sessionId) {
260
+ this.ensureStarted();
261
+ return await this.sessionManager.createSession(sessionId);
262
+ }
263
+ /**
264
+ * Retrieves an existing session by ID.
265
+ * @param sessionId The session ID to retrieve
266
+ * @returns The ChatSession if found, undefined otherwise
267
+ */
268
+ async getSession(sessionId) {
269
+ this.ensureStarted();
270
+ return await this.sessionManager.getSession(sessionId);
271
+ }
272
+ /**
273
+ * Lists all active session IDs.
274
+ * @returns Array of session IDs
275
+ */
276
+ async listSessions() {
277
+ this.ensureStarted();
278
+ return await this.sessionManager.listSessions();
279
+ }
280
+ /**
281
+ * Ends a session by removing it from memory without deleting conversation history.
282
+ * Used for cleanup, agent shutdown, and session expiry.
283
+ * @param sessionId The session ID to end
284
+ */
285
+ async endSession(sessionId) {
286
+ this.ensureStarted();
287
+ if (sessionId === this.currentDefaultSessionId) {
288
+ this.defaultSession = null;
289
+ }
290
+ return this.sessionManager.endSession(sessionId);
291
+ }
292
+ /**
293
+ * Deletes a session and its conversation history permanently.
294
+ * Used for user-initiated permanent deletion.
295
+ * @param sessionId The session ID to delete
296
+ */
297
+ async deleteSession(sessionId) {
298
+ this.ensureStarted();
299
+ if (sessionId === this.currentDefaultSessionId) {
300
+ this.defaultSession = null;
301
+ }
302
+ return this.sessionManager.deleteSession(sessionId);
303
+ }
304
+ /**
305
+ * Gets metadata for a specific session.
306
+ * @param sessionId The session ID
307
+ * @returns The session metadata if found, undefined otherwise
308
+ */
309
+ async getSessionMetadata(sessionId) {
310
+ this.ensureStarted();
311
+ return await this.sessionManager.getSessionMetadata(sessionId);
312
+ }
313
+ /**
314
+ * Gets the conversation history for a specific session.
315
+ * @param sessionId The session ID
316
+ * @returns Promise that resolves to the session's conversation history
317
+ * @throws Error if session doesn't exist
318
+ */
319
+ async getSessionHistory(sessionId) {
320
+ this.ensureStarted();
321
+ const session = await this.sessionManager.getSession(sessionId);
322
+ if (!session) {
323
+ throw SessionError.notFound(sessionId);
324
+ }
325
+ return await session.getHistory();
326
+ }
327
+ /**
328
+ * Search for messages across all sessions or within a specific session
329
+ *
330
+ * @param query The search query string
331
+ * @param options Search options including session filter, role filter, and pagination
332
+ * @returns Promise that resolves to search results
333
+ */
334
+ async searchMessages(query, options = {}) {
335
+ this.ensureStarted();
336
+ return await this.searchService.searchMessages(query, options);
337
+ }
338
+ /**
339
+ * Search for sessions that contain the specified query
340
+ *
341
+ * @param query The search query string
342
+ * @returns Promise that resolves to session search results
343
+ */
344
+ async searchSessions(query) {
345
+ this.ensureStarted();
346
+ return await this.searchService.searchSessions(query);
347
+ }
348
+ /**
349
+ * Loads a session as the new "default" session for this agent.
350
+ * All subsequent operations that don't specify a session ID will use this session.
351
+ * This provides a clean "current working session" pattern for API users.
352
+ *
353
+ * @param sessionId The session ID to load as default, or null to reset to original default
354
+ * @throws Error if session doesn't exist
355
+ *
356
+ * @example
357
+ * ```typescript
358
+ * // Load a specific session as default
359
+ * await agent.loadSessionAsDefault('project-alpha');
360
+ * await agent.run("What's the status?"); // Uses project-alpha session
361
+ *
362
+ * // Reset to original default
363
+ * await agent.loadSessionAsDefault(null);
364
+ * await agent.run("Hello"); // Uses 'default' session
365
+ * ```
366
+ */
367
+ async loadSessionAsDefault(sessionId = null) {
368
+ this.ensureStarted();
369
+ if (sessionId === null) {
370
+ this.currentDefaultSessionId = "default";
371
+ this.defaultSession = null;
372
+ logger.debug("Agent default session reset to original default");
373
+ return;
374
+ }
375
+ const session = await this.sessionManager.getSession(sessionId);
376
+ if (!session) {
377
+ throw SessionError.notFound(sessionId);
378
+ }
379
+ this.currentDefaultSessionId = sessionId;
380
+ this.defaultSession = null;
381
+ logger.info(`Agent default session changed to: ${sessionId}`);
382
+ }
383
+ /**
384
+ * Gets the currently loaded default session ID.
385
+ * This reflects the session loaded via loadSession().
386
+ *
387
+ * @returns The current default session ID
388
+ */
389
+ getCurrentSessionId() {
390
+ this.ensureStarted();
391
+ return this.currentDefaultSessionId;
392
+ }
393
+ /**
394
+ * Gets the currently loaded default session.
395
+ * This respects the session loaded via loadSession().
396
+ *
397
+ * @returns The current default ChatSession
398
+ */
399
+ async getDefaultSession() {
400
+ this.ensureStarted();
401
+ if (!this.defaultSession || this.defaultSession.id !== this.currentDefaultSessionId) {
402
+ this.defaultSession = await this.sessionManager.createSession(
403
+ this.currentDefaultSessionId
404
+ );
405
+ }
406
+ return this.defaultSession;
407
+ }
408
+ /**
409
+ * Resets the conversation history for a specific session or the default session.
410
+ * Keeps the session alive but the conversation history is cleared.
411
+ * @param sessionId Optional session ID. If not provided, resets the currently loaded default session.
412
+ */
413
+ async resetConversation(sessionId) {
414
+ this.ensureStarted();
415
+ try {
416
+ const targetSessionId = sessionId || this.currentDefaultSessionId;
417
+ if (!sessionId) {
418
+ if (!this.defaultSession || this.defaultSession.id !== this.currentDefaultSessionId) {
419
+ this.defaultSession = await this.sessionManager.createSession(
420
+ this.currentDefaultSessionId
421
+ );
422
+ }
423
+ }
424
+ await this.sessionManager.resetSession(targetSessionId);
425
+ logger.info(`DextoAgent conversation reset for session: ${targetSessionId}`);
426
+ this.agentEventBus.emit("dexto:conversationReset", {
427
+ sessionId: targetSessionId
428
+ });
429
+ } catch (error) {
430
+ logger.error(
431
+ `Error during DextoAgent.resetConversation: ${error instanceof Error ? error.message : String(error)}`
432
+ );
433
+ throw error;
434
+ }
435
+ }
436
+ // ============= LLM MANAGEMENT =============
437
+ /**
438
+ * Gets the current LLM configuration with all defaults applied.
439
+ * @returns Current LLM configuration
440
+ */
441
+ getCurrentLLMConfig() {
442
+ this.ensureStarted();
443
+ return structuredClone(this.stateManager.getLLMConfig());
444
+ }
445
+ /**
446
+ * Switches the LLM service while preserving conversation history.
447
+ * This is a comprehensive method that handles ALL validation, configuration building, and switching internally.
448
+ *
449
+ * Design:
450
+ * - Input: Partial<LLMConfig> (allows optional fields like maxIterations?, router?)
451
+ * - Output: LLMConfig (user-friendly type with all defaults applied)
452
+ *
453
+ * Key features:
454
+ * - Accepts partial LLM configuration object
455
+ * - Extracts and validates parameters internally
456
+ * - Infers provider from model if not provided
457
+ * - Automatically resolves API keys from environment variables
458
+ * - Uses LLMConfigSchema for comprehensive validation
459
+ * - Prevents inconsistent partial updates
460
+ * - Smart defaults for missing configuration values
461
+ *
462
+ * @param llmUpdates Partial LLM configuration object containing the updates to apply
463
+ * @param sessionId Session ID to switch LLM for. If not provided, switches for default session. Use '*' for all sessions
464
+ * @returns Promise that resolves with the validated LLM configuration
465
+ * @throws DextoLLMError if validation fails or switching fails
466
+ *
467
+ * @example
468
+ * ```typescript
469
+ * // Switch to a different model (provider will be inferred, API key auto-resolved)
470
+ * await agent.switchLLM({ model: 'gpt-4o' });
471
+ *
472
+ * // Switch to a different provider with explicit API key
473
+ * await agent.switchLLM({ provider: 'anthropic', model: 'claude-4-sonnet-20250514', apiKey: 'sk-ant-...' });
474
+ *
475
+ * // Switch with router and session options
476
+ * await agent.switchLLM({ provider: 'anthropic', model: 'claude-4-sonnet-20250514', router: 'in-built' }, 'user-123');
477
+ *
478
+ * // Switch for all sessions
479
+ * await agent.switchLLM({ model: 'gpt-4o' }, '*');
480
+ * ```
481
+ */
482
+ async switchLLM(llmUpdates, sessionId) {
483
+ this.ensureStarted();
484
+ logger.debug(`DextoAgent.switchLLM: llmUpdates: ${safeStringify(llmUpdates)}`);
485
+ const parseResult = LLMUpdatesSchema.safeParse(llmUpdates);
486
+ if (!parseResult.success) {
487
+ const validation = fail(zodToIssues(parseResult.error, "error"));
488
+ ensureOk(validation);
489
+ throw new Error("Unreachable");
490
+ }
491
+ const validatedUpdates = parseResult.data;
492
+ const currentLLMConfig = sessionId ? this.stateManager.getRuntimeConfig(sessionId).llm : this.stateManager.getRuntimeConfig().llm;
493
+ const result = resolveAndValidateLLMConfig(currentLLMConfig, validatedUpdates);
494
+ const validatedConfig = ensureOk(result);
495
+ await this.performLLMSwitch(validatedConfig, sessionId);
496
+ logger.info(`DextoAgent.switchLLM: LLM switched to: ${safeStringify(validatedConfig)}`);
497
+ const warnings = result.issues.filter((issue) => issue.severity === "warning");
498
+ if (warnings.length > 0) {
499
+ logger.warn(
500
+ `LLM switch completed with warnings: ${warnings.map((w) => w.message).join(", ")}`
501
+ );
502
+ }
503
+ return validatedConfig;
504
+ }
505
+ /**
506
+ * Performs the actual LLM switch with a validated configuration.
507
+ * This is a helper method that handles state management and session switching.
508
+ *
509
+ * @param validatedConfig - The validated LLM configuration to apply
510
+ * @param sessionScope - Session ID, '*' for all sessions, or undefined for default session
511
+ */
512
+ async performLLMSwitch(validatedConfig, sessionScope) {
513
+ this.stateManager.updateLLM(validatedConfig, sessionScope);
514
+ if (sessionScope === "*") {
515
+ await this.sessionManager.switchLLMForAllSessions(validatedConfig);
516
+ } else if (sessionScope) {
517
+ const session = await this.sessionManager.getSession(sessionScope);
518
+ if (!session) {
519
+ throw SessionError.notFound(sessionScope);
520
+ }
521
+ await this.sessionManager.switchLLMForSpecificSession(validatedConfig, sessionScope);
522
+ } else {
523
+ await this.sessionManager.switchLLMForDefaultSession(validatedConfig);
524
+ }
525
+ }
526
+ /**
527
+ * Gets all supported LLM providers.
528
+ * Returns a strongly-typed array of valid provider names that can be used with the agent.
529
+ *
530
+ * @returns Array of supported provider names
531
+ *
532
+ * @example
533
+ * ```typescript
534
+ * const providers = agent.getSupportedProviders();
535
+ * console.log(providers); // ['openai', 'anthropic', 'google', 'groq']
536
+ * ```
537
+ */
538
+ getSupportedProviders() {
539
+ return getSupportedProviders();
540
+ }
541
+ /**
542
+ * Gets all supported models grouped by provider with detailed information.
543
+ * Returns a strongly-typed object mapping each provider to its available models,
544
+ * including model metadata such as token limits and default status.
545
+ *
546
+ * @returns Object mapping provider names to their model information
547
+ *
548
+ * @example
549
+ * ```typescript
550
+ * const models = agent.getSupportedModels();
551
+ * console.log(models.openai); // Array of OpenAI models with metadata
552
+ * console.log(models.anthropic[0].maxInputTokens); // Token limit for first Anthropic model
553
+ *
554
+ * // Check if a model is the default for its provider
555
+ * const hasDefault = models.google.some(model => model.isDefault);
556
+ * ```
557
+ */
558
+ getSupportedModels() {
559
+ const result = {};
560
+ const providers = getSupportedProviders();
561
+ for (const provider of providers) {
562
+ const defaultModel = getDefaultModelForProvider(provider);
563
+ const providerInfo = LLM_REGISTRY[provider];
564
+ result[provider] = providerInfo.models.map((model) => ({
565
+ ...model,
566
+ isDefault: model.name === defaultModel
567
+ }));
568
+ }
569
+ return result;
570
+ }
571
+ /**
572
+ * Gets supported models for a specific provider.
573
+ * Returns model information including metadata for the specified provider only.
574
+ *
575
+ * @param provider The provider to get models for
576
+ * @returns Array of model information for the specified provider
577
+ * @throws Error if provider is not supported
578
+ *
579
+ * @example
580
+ * ```typescript
581
+ * try {
582
+ * const openaiModels = agent.getSupportedModelsForProvider('openai');
583
+ * const defaultModel = openaiModels.find(model => model.isDefault);
584
+ * console.log(`Default OpenAI model: ${defaultModel?.name}`);
585
+ * } catch (error) {
586
+ * console.error('Unsupported provider');
587
+ * }
588
+ * ```
589
+ */
590
+ getSupportedModelsForProvider(provider) {
591
+ const defaultModel = getDefaultModelForProvider(provider);
592
+ const providerInfo = LLM_REGISTRY[provider];
593
+ return providerInfo.models.map((model) => ({
594
+ ...model,
595
+ isDefault: model.name === defaultModel
596
+ }));
597
+ }
598
+ /**
599
+ * Infers the provider from a model name.
600
+ * Searches through all supported providers to find which one supports the given model.
601
+ *
602
+ * @param modelName The model name to search for
603
+ * @returns The provider name if found, null if the model is not supported
604
+ *
605
+ * @example
606
+ * ```typescript
607
+ * const provider = agent.inferProviderFromModel('gpt-4o');
608
+ * console.log(provider); // 'openai'
609
+ *
610
+ * const provider2 = agent.inferProviderFromModel('claude-4-sonnet-20250514');
611
+ * console.log(provider2); // 'anthropic'
612
+ *
613
+ * const provider3 = agent.inferProviderFromModel('unknown-model');
614
+ * console.log(provider3); // null
615
+ * ```
616
+ */
617
+ inferProviderFromModel(modelName) {
618
+ try {
619
+ return getProviderFromModel(modelName);
620
+ } catch {
621
+ return null;
622
+ }
623
+ }
624
+ // ============= MCP SERVER MANAGEMENT =============
625
+ /**
626
+ * Connects a new MCP server and adds it to the runtime configuration.
627
+ * This method handles validation, state management, and establishing the connection.
628
+ *
629
+ * @param name The name of the server to connect.
630
+ * @param config The configuration object for the server.
631
+ * @throws DextoError if validation fails or connection fails
632
+ */
633
+ async connectMcpServer(name, config) {
634
+ this.ensureStarted();
635
+ const existingServerNames = Object.keys(this.stateManager.getRuntimeConfig().mcpServers);
636
+ const validation = resolveAndValidateMcpServerConfig(name, config, existingServerNames);
637
+ const validatedConfig = ensureOk(validation);
638
+ this.stateManager.addMcpServer(name, validatedConfig);
639
+ try {
640
+ await this.mcpManager.connectServer(name, validatedConfig);
641
+ this.agentEventBus.emit("dexto:mcpServerConnected", {
642
+ name,
643
+ success: true
644
+ });
645
+ this.agentEventBus.emit("dexto:availableToolsUpdated", {
646
+ tools: Object.keys(await this.toolManager.getAllTools()),
647
+ source: "mcp"
648
+ });
649
+ logger.info(`DextoAgent: Successfully added and connected to MCP server '${name}'.`);
650
+ const warnings = validation.issues.filter((i) => i.severity === "warning");
651
+ if (warnings.length > 0) {
652
+ logger.warn(
653
+ `MCP server connected with warnings: ${warnings.map((w) => w.message).join(", ")}`
654
+ );
655
+ }
656
+ } catch (error) {
657
+ const errorMessage = error instanceof Error ? error.message : String(error);
658
+ logger.error(`DextoAgent: Failed to connect to MCP server '${name}': ${errorMessage}`);
659
+ this.stateManager.removeMcpServer(name);
660
+ this.agentEventBus.emit("dexto:mcpServerConnected", {
661
+ name,
662
+ success: false,
663
+ error: errorMessage
664
+ });
665
+ throw MCPError.connectionFailed(name, errorMessage);
666
+ }
667
+ }
668
+ /**
669
+ * Removes and disconnects an MCP server.
670
+ * @param name The name of the server to remove.
671
+ */
672
+ async removeMcpServer(name) {
673
+ this.ensureStarted();
674
+ await this.mcpManager.removeClient(name);
675
+ this.stateManager.removeMcpServer(name);
676
+ }
677
+ /**
678
+ * Executes a tool from any source (MCP servers, custom tools, or internal tools).
679
+ * This is the unified interface for tool execution that can handle all tool types.
680
+ * @param toolName The name of the tool to execute
681
+ * @param args The arguments to pass to the tool
682
+ * @returns The result of the tool execution
683
+ */
684
+ async executeTool(toolName, args) {
685
+ this.ensureStarted();
686
+ return await this.toolManager.executeTool(toolName, args);
687
+ }
688
+ /**
689
+ * Gets all available tools from all connected MCP servers.
690
+ * Useful for users to discover what tools are available.
691
+ * @returns Promise resolving to a map of tool names to tool definitions
692
+ */
693
+ async getAllMcpTools() {
694
+ this.ensureStarted();
695
+ return await this.mcpManager.getAllTools();
696
+ }
697
+ /**
698
+ * Gets all available tools from all sources (MCP servers and custom tools).
699
+ * This is the unified interface for tool discovery that includes both MCP and custom tools.
700
+ * @returns Promise resolving to a map of tool names to tool definitions
701
+ */
702
+ async getAllTools() {
703
+ this.ensureStarted();
704
+ return await this.toolManager.getAllTools();
705
+ }
706
+ /**
707
+ * Gets all connected MCP clients.
708
+ * Used by the API layer to inspect client status.
709
+ * @returns Map of client names to client instances
710
+ */
711
+ getMcpClients() {
712
+ this.ensureStarted();
713
+ return this.mcpManager.getClients();
714
+ }
715
+ /**
716
+ * Gets all failed MCP connections.
717
+ * Used by the API layer to report connection errors.
718
+ * @returns Record of failed connection names to error messages
719
+ */
720
+ getMcpFailedConnections() {
721
+ this.ensureStarted();
722
+ return this.mcpManager.getFailedConnections();
723
+ }
724
+ // ============= PROMPT MANAGEMENT =============
725
+ /**
726
+ * Gets the current system prompt with all dynamic content resolved.
727
+ * This method builds the complete prompt by invoking all configured prompt contributors
728
+ * (static content, dynamic placeholders, MCP resources, etc.) and returns the final
729
+ * prompt string that will be sent to the LLM.
730
+ *
731
+ * Useful for debugging prompt issues, inspecting what context the AI receives,
732
+ * and understanding how dynamic content is being incorporated.
733
+ *
734
+ * @returns Promise resolving to the complete system prompt string
735
+ *
736
+ * @example
737
+ * ```typescript
738
+ * // Get the current system prompt for inspection
739
+ * const prompt = await agent.getSystemPrompt();
740
+ * console.log('Current system prompt:', prompt);
741
+ *
742
+ * // Useful for debugging prompt-related issues
743
+ * if (response.quality === 'poor') {
744
+ * const prompt = await agent.getSystemPrompt();
745
+ * console.log('Check if prompt includes expected context:', prompt);
746
+ * }
747
+ * ```
748
+ */
749
+ async getSystemPrompt() {
750
+ this.ensureStarted();
751
+ const context = {
752
+ mcpManager: this.mcpManager
753
+ };
754
+ return await this.promptManager.build(context);
755
+ }
756
+ // ============= CONFIGURATION ACCESS =============
757
+ /**
758
+ * Gets the effective configuration for a session or the default configuration.
759
+ * @param sessionId Optional session ID. If not provided, returns default config.
760
+ * @returns The effective configuration object
761
+ */
762
+ getEffectiveConfig(sessionId) {
763
+ this.ensureStarted();
764
+ return sessionId ? this.stateManager.getRuntimeConfig(sessionId) : this.stateManager.getRuntimeConfig();
765
+ }
766
+ // Future methods could encapsulate more complex agent behaviors:
767
+ // - Multi-step task execution with progress tracking
768
+ // - Memory and context management across sessions
769
+ // - Tool chaining and workflow automation
770
+ // - Agent collaboration and delegation
771
+ }
772
+ export {
773
+ DextoAgent
774
+ };