@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,219 @@
1
+ import { ChatSession } from './chat-session.js';
2
+ import { PromptManager } from '../systemPrompt/manager.js';
3
+ import { ToolManager } from '../tools/tool-manager.js';
4
+ import { AgentEventBus } from '../events/index.js';
5
+ import { AgentStateManager } from '../agent/state-manager.js';
6
+ import { ValidatedLLMConfig } from '../llm/schemas.js';
7
+ import { StorageBackends } from '../storage/backend/types.js';
8
+ import '../context/manager.js';
9
+ import '../llm/formatters/types.js';
10
+ import '../context/types.js';
11
+ import '../llm/types.js';
12
+ import '../llm/tokenizer/types.js';
13
+ import '../context/compression/types.js';
14
+ import '../systemPrompt/types.js';
15
+ import '../mcp/manager.js';
16
+ import '../mcp/schemas.js';
17
+ import 'zod';
18
+ import '../mcp/types.js';
19
+ import '@modelcontextprotocol/sdk/client/index.js';
20
+ import '../tools/types.js';
21
+ import 'json-schema';
22
+ import '@modelcontextprotocol/sdk/types.js';
23
+ import './history/types.js';
24
+ import '../llm/services/types.js';
25
+ import 'ai';
26
+ import '../systemPrompt/schemas.js';
27
+ import '../tools/internal-tools/registry.js';
28
+ import '../search/search-service.js';
29
+ import '../storage/backend/database-backend.js';
30
+ import '../search/types.js';
31
+ import '../tools/schemas.js';
32
+ import '../tools/confirmation/types.js';
33
+ import '../tools/confirmation/allowed-tools-provider/types.js';
34
+ import 'events';
35
+ import '../agent/schemas.js';
36
+ import '../storage/backend/cache-backend.js';
37
+ import '../storage/schemas.js';
38
+
39
+ interface SessionMetadata {
40
+ createdAt: number;
41
+ lastActivity: number;
42
+ messageCount: number;
43
+ }
44
+ interface SessionManagerConfig {
45
+ maxSessions?: number;
46
+ sessionTTL?: number;
47
+ }
48
+ interface SessionData {
49
+ id: string;
50
+ userId?: string;
51
+ createdAt: number;
52
+ lastActivity: number;
53
+ messageCount: number;
54
+ metadata?: Record<string, any>;
55
+ }
56
+ /**
57
+ * Manages multiple chat sessions within a Dexto agent.
58
+ *
59
+ * The SessionManager is responsible for:
60
+ * - Creating and managing multiple isolated chat sessions
61
+ * - Enforcing session limits and TTL policies
62
+ * - Cleaning up expired sessions
63
+ * - Providing session lifecycle management
64
+ * - Persisting session data using the simplified storage backends
65
+ */
66
+ declare class SessionManager {
67
+ private services;
68
+ private sessions;
69
+ private readonly maxSessions;
70
+ private readonly sessionTTL;
71
+ private initialized;
72
+ private cleanupInterval?;
73
+ private initializationPromise;
74
+ private readonly pendingCreations;
75
+ constructor(services: {
76
+ stateManager: AgentStateManager;
77
+ promptManager: PromptManager;
78
+ toolManager: ToolManager;
79
+ agentEventBus: AgentEventBus;
80
+ storage: StorageBackends;
81
+ }, config?: SessionManagerConfig);
82
+ /**
83
+ * Initialize the SessionManager with persistent storage.
84
+ * This must be called before using any session operations.
85
+ */
86
+ init(): Promise<void>;
87
+ /**
88
+ * Restore sessions from persistent storage on startup.
89
+ * This allows sessions to survive application restarts.
90
+ */
91
+ private restoreSessionsFromStorage;
92
+ /**
93
+ * Ensures the SessionManager is initialized before operations.
94
+ */
95
+ private ensureInitialized;
96
+ /**
97
+ * Creates a new chat session or returns an existing one.
98
+ *
99
+ * @param sessionId Optional session ID. If not provided, a UUID will be generated.
100
+ * @returns The created or existing ChatSession
101
+ * @throws Error if maximum sessions limit is reached
102
+ */
103
+ createSession(sessionId?: string): Promise<ChatSession>;
104
+ /**
105
+ * Internal method that handles the actual session creation logic.
106
+ * This method implements atomic session creation to prevent race conditions.
107
+ */
108
+ private createSessionInternal;
109
+ /**
110
+ * Gets or creates the default session.
111
+ * This is used for backward compatibility with single-session operations.
112
+ *
113
+ * @returns The default ChatSession (creates one if it doesn't exist)
114
+ */
115
+ getDefaultSession(): Promise<ChatSession>;
116
+ /**
117
+ * Retrieves an existing session by ID.
118
+ *
119
+ * @param sessionId The session ID to retrieve
120
+ * @param restoreFromStorage Whether to restore from storage if not in memory (default: true)
121
+ * @returns The ChatSession if found, undefined otherwise
122
+ */
123
+ getSession(sessionId: string, restoreFromStorage?: boolean): Promise<ChatSession | undefined>;
124
+ /**
125
+ * Ends a session by removing it from memory without deleting conversation history.
126
+ * Used for cleanup, agent shutdown, and session expiry.
127
+ *
128
+ * @param sessionId The session ID to end
129
+ */
130
+ endSession(sessionId: string): Promise<void>;
131
+ /**
132
+ * Deletes a session and its conversation history, removing everything from memory and storage.
133
+ * Used for user-initiated permanent deletion.
134
+ *
135
+ * @param sessionId The session ID to delete
136
+ */
137
+ deleteSession(sessionId: string): Promise<void>;
138
+ /**
139
+ * Resets the conversation history for a session while keeping the session alive.
140
+ *
141
+ * @param sessionId The session ID to reset
142
+ * @throws Error if session doesn't exist
143
+ */
144
+ resetSession(sessionId: string): Promise<void>;
145
+ /**
146
+ * Lists all active session IDs.
147
+ *
148
+ * @returns Array of active session IDs
149
+ */
150
+ listSessions(): Promise<string[]>;
151
+ /**
152
+ * Gets metadata for a specific session.
153
+ *
154
+ * @param sessionId The session ID
155
+ * @returns Session metadata if found, undefined otherwise
156
+ */
157
+ getSessionMetadata(sessionId: string): Promise<SessionMetadata | undefined>;
158
+ /**
159
+ * Get the global session manager configuration.
160
+ */
161
+ getConfig(): SessionManagerConfig;
162
+ /**
163
+ * Updates the last activity timestamp for a session.
164
+ */
165
+ private updateSessionActivity;
166
+ /**
167
+ * Increments the message count for a session.
168
+ */
169
+ incrementMessageCount(sessionId: string): Promise<void>;
170
+ /**
171
+ * Cleans up expired sessions from memory only, preserving chat history in storage.
172
+ * This allows inactive sessions to be garbage collected while keeping conversations restorable.
173
+ */
174
+ private cleanupExpiredSessions;
175
+ /**
176
+ * Switch LLM for all sessions.
177
+ * @param newLLMConfig The new LLM configuration to apply
178
+ * @returns Result object with success message and any warnings
179
+ */
180
+ switchLLMForAllSessions(newLLMConfig: ValidatedLLMConfig): Promise<{
181
+ message: string;
182
+ warnings: string[];
183
+ }>;
184
+ /**
185
+ * Switch LLM for a specific session.
186
+ * @param newLLMConfig The new LLM configuration to apply
187
+ * @param sessionId The session ID to switch LLM for
188
+ * @returns Result object with success message and any warnings
189
+ */
190
+ switchLLMForSpecificSession(newLLMConfig: ValidatedLLMConfig, sessionId: string): Promise<{
191
+ message: string;
192
+ warnings: string[];
193
+ }>;
194
+ /**
195
+ * Switch LLM for the default session.
196
+ * @param newLLMConfig The new LLM configuration to apply
197
+ * @returns Result object with success message and any warnings
198
+ */
199
+ switchLLMForDefaultSession(newLLMConfig: ValidatedLLMConfig): Promise<{
200
+ message: string;
201
+ warnings: string[];
202
+ }>;
203
+ /**
204
+ * Get session statistics for monitoring and debugging.
205
+ */
206
+ getSessionStats(): Promise<{
207
+ totalSessions: number;
208
+ inMemorySessions: number;
209
+ maxSessions: number;
210
+ sessionTTL: number;
211
+ }>;
212
+ /**
213
+ * Cleanup all sessions and resources.
214
+ * This should be called when shutting down the application.
215
+ */
216
+ cleanup(): Promise<void>;
217
+ }
218
+
219
+ export { type SessionData, SessionManager, type SessionManagerConfig, type SessionMetadata };
@@ -0,0 +1,457 @@
1
+ import { randomUUID } from "crypto";
2
+ import { ChatSession } from "./chat-session.js";
3
+ import { logger } from "../logger/index.js";
4
+ import { SessionError } from "./errors.js";
5
+ class SessionManager {
6
+ constructor(services, config = {}) {
7
+ this.services = services;
8
+ this.maxSessions = config.maxSessions ?? 100;
9
+ this.sessionTTL = config.sessionTTL ?? 36e5;
10
+ }
11
+ sessions = /* @__PURE__ */ new Map();
12
+ maxSessions;
13
+ sessionTTL;
14
+ initialized = false;
15
+ cleanupInterval;
16
+ initializationPromise;
17
+ // Add a Map to track ongoing session creation operations to prevent race conditions
18
+ pendingCreations = /* @__PURE__ */ new Map();
19
+ /**
20
+ * Initialize the SessionManager with persistent storage.
21
+ * This must be called before using any session operations.
22
+ */
23
+ async init() {
24
+ if (this.initialized) {
25
+ return;
26
+ }
27
+ await this.restoreSessionsFromStorage();
28
+ const cleanupIntervalMs = Math.min(this.sessionTTL / 4, 15 * 60 * 1e3);
29
+ this.cleanupInterval = setInterval(
30
+ () => this.cleanupExpiredSessions().catch(
31
+ (err) => logger.error(`Periodic session cleanup failed: ${err}`)
32
+ ),
33
+ cleanupIntervalMs
34
+ );
35
+ this.initialized = true;
36
+ logger.debug(
37
+ `SessionManager initialized with periodic cleanup every ${Math.round(cleanupIntervalMs / 1e3 / 60)} minutes`
38
+ );
39
+ }
40
+ /**
41
+ * Restore sessions from persistent storage on startup.
42
+ * This allows sessions to survive application restarts.
43
+ */
44
+ async restoreSessionsFromStorage() {
45
+ try {
46
+ const sessionKeys = await this.services.storage.database.list("session:");
47
+ logger.debug(`Found ${sessionKeys.length} persisted sessions to restore`);
48
+ for (const sessionKey of sessionKeys) {
49
+ const sessionId = sessionKey.replace("session:", "");
50
+ const sessionData = await this.services.storage.database.get(sessionKey);
51
+ if (sessionData) {
52
+ const now = Date.now();
53
+ const lastActivity = sessionData.lastActivity;
54
+ if (now - lastActivity <= this.sessionTTL) {
55
+ logger.debug(`Session ${sessionId} restored from storage`);
56
+ } else {
57
+ await this.services.storage.database.delete(sessionKey);
58
+ logger.debug(`Expired session ${sessionId} cleaned up during restore`);
59
+ }
60
+ }
61
+ }
62
+ } catch (error) {
63
+ logger.error(
64
+ `Failed to restore sessions from storage: ${error instanceof Error ? error.message : String(error)}`
65
+ );
66
+ }
67
+ }
68
+ /**
69
+ * Ensures the SessionManager is initialized before operations.
70
+ */
71
+ async ensureInitialized() {
72
+ if (!this.initialized) {
73
+ if (!this.initializationPromise) {
74
+ this.initializationPromise = this.init();
75
+ }
76
+ await this.initializationPromise;
77
+ }
78
+ }
79
+ /**
80
+ * Creates a new chat session or returns an existing one.
81
+ *
82
+ * @param sessionId Optional session ID. If not provided, a UUID will be generated.
83
+ * @returns The created or existing ChatSession
84
+ * @throws Error if maximum sessions limit is reached
85
+ */
86
+ async createSession(sessionId) {
87
+ await this.ensureInitialized();
88
+ const id = sessionId ?? randomUUID();
89
+ if (this.pendingCreations.has(id)) {
90
+ return await this.pendingCreations.get(id);
91
+ }
92
+ if (this.sessions.has(id)) {
93
+ await this.updateSessionActivity(id);
94
+ return this.sessions.get(id);
95
+ }
96
+ const creationPromise = this.createSessionInternal(id);
97
+ this.pendingCreations.set(id, creationPromise);
98
+ try {
99
+ const session = await creationPromise;
100
+ return session;
101
+ } finally {
102
+ this.pendingCreations.delete(id);
103
+ }
104
+ }
105
+ /**
106
+ * Internal method that handles the actual session creation logic.
107
+ * This method implements atomic session creation to prevent race conditions.
108
+ */
109
+ async createSessionInternal(id) {
110
+ await this.cleanupExpiredSessions();
111
+ const sessionKey = `session:${id}`;
112
+ const existingMetadata = await this.services.storage.database.get(sessionKey);
113
+ if (existingMetadata) {
114
+ await this.updateSessionActivity(id);
115
+ const session2 = new ChatSession(this.services, id);
116
+ await session2.init();
117
+ this.sessions.set(id, session2);
118
+ logger.info(`Restored session from storage: ${id}`, null, "cyan");
119
+ return session2;
120
+ }
121
+ const activeSessionKeys = await this.services.storage.database.list("session:");
122
+ if (activeSessionKeys.length >= this.maxSessions) {
123
+ throw SessionError.maxSessionsExceeded(activeSessionKeys.length, this.maxSessions);
124
+ }
125
+ const sessionData = {
126
+ id,
127
+ createdAt: Date.now(),
128
+ lastActivity: Date.now(),
129
+ messageCount: 0
130
+ };
131
+ try {
132
+ await this.services.storage.database.set(sessionKey, sessionData);
133
+ } catch (error) {
134
+ logger.error(`Failed to store session metadata for ${id}:`, error);
135
+ throw error;
136
+ }
137
+ let session;
138
+ try {
139
+ session = new ChatSession(this.services, id);
140
+ await session.init();
141
+ this.sessions.set(id, session);
142
+ await this.services.storage.cache.set(sessionKey, sessionData, this.sessionTTL / 1e3);
143
+ logger.info(`Created new session: ${id}`, null, "green");
144
+ return session;
145
+ } catch (error) {
146
+ logger.error(
147
+ `Failed to initialize session ${id}: ${error instanceof Error ? error.message : String(error)}`
148
+ );
149
+ await this.services.storage.database.delete(sessionKey);
150
+ await this.services.storage.cache.delete(sessionKey);
151
+ const reason = error instanceof Error ? error.message : "unknown error";
152
+ throw SessionError.initializationFailed(id, reason);
153
+ }
154
+ }
155
+ /**
156
+ * Gets or creates the default session.
157
+ * This is used for backward compatibility with single-session operations.
158
+ *
159
+ * @returns The default ChatSession (creates one if it doesn't exist)
160
+ */
161
+ async getDefaultSession() {
162
+ const defaultSessionId = "default";
163
+ return await this.createSession(defaultSessionId);
164
+ }
165
+ /**
166
+ * Retrieves an existing session by ID.
167
+ *
168
+ * @param sessionId The session ID to retrieve
169
+ * @param restoreFromStorage Whether to restore from storage if not in memory (default: true)
170
+ * @returns The ChatSession if found, undefined otherwise
171
+ */
172
+ async getSession(sessionId, restoreFromStorage = true) {
173
+ await this.ensureInitialized();
174
+ if (this.pendingCreations.has(sessionId)) {
175
+ return await this.pendingCreations.get(sessionId);
176
+ }
177
+ if (this.sessions.has(sessionId)) {
178
+ return this.sessions.get(sessionId);
179
+ }
180
+ if (restoreFromStorage) {
181
+ const sessionKey = `session:${sessionId}`;
182
+ const sessionData = await this.services.storage.database.get(sessionKey);
183
+ if (sessionData) {
184
+ const session = new ChatSession(this.services, sessionId);
185
+ await session.init();
186
+ this.sessions.set(sessionId, session);
187
+ return session;
188
+ }
189
+ }
190
+ return void 0;
191
+ }
192
+ /**
193
+ * Ends a session by removing it from memory without deleting conversation history.
194
+ * Used for cleanup, agent shutdown, and session expiry.
195
+ *
196
+ * @param sessionId The session ID to end
197
+ */
198
+ async endSession(sessionId) {
199
+ await this.ensureInitialized();
200
+ const session = this.sessions.get(sessionId);
201
+ if (session) {
202
+ await session.cleanup();
203
+ this.sessions.delete(sessionId);
204
+ }
205
+ const sessionKey = `session:${sessionId}`;
206
+ await this.services.storage.cache.delete(sessionKey);
207
+ logger.debug(`Ended session (removed from memory, chat history preserved): ${sessionId}`);
208
+ }
209
+ /**
210
+ * Deletes a session and its conversation history, removing everything from memory and storage.
211
+ * Used for user-initiated permanent deletion.
212
+ *
213
+ * @param sessionId The session ID to delete
214
+ */
215
+ async deleteSession(sessionId) {
216
+ await this.ensureInitialized();
217
+ const session = await this.getSession(sessionId);
218
+ if (session) {
219
+ await session.reset();
220
+ await session.cleanup();
221
+ this.sessions.delete(sessionId);
222
+ }
223
+ const sessionKey = `session:${sessionId}`;
224
+ await this.services.storage.database.delete(sessionKey);
225
+ await this.services.storage.cache.delete(sessionKey);
226
+ logger.debug(`Deleted session and conversation history: ${sessionId}`);
227
+ }
228
+ /**
229
+ * Resets the conversation history for a session while keeping the session alive.
230
+ *
231
+ * @param sessionId The session ID to reset
232
+ * @throws Error if session doesn't exist
233
+ */
234
+ async resetSession(sessionId) {
235
+ await this.ensureInitialized();
236
+ const session = await this.getSession(sessionId);
237
+ if (!session) {
238
+ throw SessionError.notFound(sessionId);
239
+ }
240
+ await session.reset();
241
+ const sessionKey = `session:${sessionId}`;
242
+ const sessionData = await this.services.storage.database.get(sessionKey);
243
+ if (sessionData) {
244
+ sessionData.messageCount = 0;
245
+ sessionData.lastActivity = Date.now();
246
+ await this.services.storage.database.set(sessionKey, sessionData);
247
+ await this.services.storage.cache.set(sessionKey, sessionData, this.sessionTTL / 1e3);
248
+ }
249
+ logger.debug(`Reset session conversation: ${sessionId}`);
250
+ }
251
+ /**
252
+ * Lists all active session IDs.
253
+ *
254
+ * @returns Array of active session IDs
255
+ */
256
+ async listSessions() {
257
+ await this.ensureInitialized();
258
+ const sessionKeys = await this.services.storage.database.list("session:");
259
+ return sessionKeys.map((key) => key.replace("session:", ""));
260
+ }
261
+ /**
262
+ * Gets metadata for a specific session.
263
+ *
264
+ * @param sessionId The session ID
265
+ * @returns Session metadata if found, undefined otherwise
266
+ */
267
+ async getSessionMetadata(sessionId) {
268
+ await this.ensureInitialized();
269
+ const sessionKey = `session:${sessionId}`;
270
+ const sessionData = await this.services.storage.database.get(sessionKey);
271
+ return sessionData ? {
272
+ createdAt: sessionData.createdAt,
273
+ lastActivity: sessionData.lastActivity,
274
+ messageCount: sessionData.messageCount
275
+ } : void 0;
276
+ }
277
+ /**
278
+ * Get the global session manager configuration.
279
+ */
280
+ getConfig() {
281
+ return {
282
+ maxSessions: this.maxSessions,
283
+ sessionTTL: this.sessionTTL
284
+ };
285
+ }
286
+ /**
287
+ * Updates the last activity timestamp for a session.
288
+ */
289
+ async updateSessionActivity(sessionId) {
290
+ const sessionKey = `session:${sessionId}`;
291
+ const sessionData = await this.services.storage.database.get(sessionKey);
292
+ if (sessionData) {
293
+ sessionData.lastActivity = Date.now();
294
+ await this.services.storage.database.set(sessionKey, sessionData);
295
+ await this.services.storage.cache.set(sessionKey, sessionData, this.sessionTTL / 1e3);
296
+ }
297
+ }
298
+ /**
299
+ * Increments the message count for a session.
300
+ */
301
+ async incrementMessageCount(sessionId) {
302
+ await this.ensureInitialized();
303
+ const sessionKey = `session:${sessionId}`;
304
+ const sessionData = await this.services.storage.database.get(sessionKey);
305
+ if (sessionData) {
306
+ sessionData.messageCount++;
307
+ sessionData.lastActivity = Date.now();
308
+ await this.services.storage.database.set(sessionKey, sessionData);
309
+ await this.services.storage.cache.set(sessionKey, sessionData, this.sessionTTL / 1e3);
310
+ }
311
+ }
312
+ /**
313
+ * Cleans up expired sessions from memory only, preserving chat history in storage.
314
+ * This allows inactive sessions to be garbage collected while keeping conversations restorable.
315
+ */
316
+ async cleanupExpiredSessions() {
317
+ const now = Date.now();
318
+ const expiredSessions = [];
319
+ for (const [sessionId, _session] of this.sessions.entries()) {
320
+ const sessionKey = `session:${sessionId}`;
321
+ const sessionData = await this.services.storage.database.get(sessionKey);
322
+ if (sessionData && now - sessionData.lastActivity > this.sessionTTL) {
323
+ expiredSessions.push(sessionId);
324
+ }
325
+ }
326
+ for (const sessionId of expiredSessions) {
327
+ const session = this.sessions.get(sessionId);
328
+ if (session) {
329
+ session.dispose();
330
+ this.sessions.delete(sessionId);
331
+ logger.debug(
332
+ `Removed expired session from memory: ${sessionId} (chat history preserved)`
333
+ );
334
+ }
335
+ }
336
+ if (expiredSessions.length > 0) {
337
+ logger.debug(
338
+ `Memory cleanup: removed ${expiredSessions.length} inactive sessions, chat history preserved`
339
+ );
340
+ }
341
+ }
342
+ /**
343
+ * Switch LLM for all sessions.
344
+ * @param newLLMConfig The new LLM configuration to apply
345
+ * @returns Result object with success message and any warnings
346
+ */
347
+ async switchLLMForAllSessions(newLLMConfig) {
348
+ await this.ensureInitialized();
349
+ const sessionIds = await this.listSessions();
350
+ const failedSessions = [];
351
+ for (const sId of sessionIds) {
352
+ const session = await this.getSession(sId);
353
+ if (session) {
354
+ try {
355
+ this.services.stateManager.updateLLM(newLLMConfig, sId);
356
+ await session.switchLLM(newLLMConfig);
357
+ } catch (error) {
358
+ failedSessions.push(sId);
359
+ logger.warn(
360
+ `Error switching LLM for session ${sId}: ${error instanceof Error ? error.message : String(error)}`
361
+ );
362
+ }
363
+ }
364
+ }
365
+ this.services.agentEventBus.emit("dexto:llmSwitched", {
366
+ newConfig: newLLMConfig,
367
+ router: newLLMConfig.router,
368
+ historyRetained: true,
369
+ sessionIds: sessionIds.filter((id) => !failedSessions.includes(id))
370
+ });
371
+ const message = failedSessions.length > 0 ? `Successfully switched to ${newLLMConfig.provider}/${newLLMConfig.model} using ${newLLMConfig.router} router (${failedSessions.length} sessions failed)` : `Successfully switched to ${newLLMConfig.provider}/${newLLMConfig.model} using ${newLLMConfig.router} router for all sessions`;
372
+ const warnings = failedSessions.length > 0 ? [`Failed to switch LLM for sessions: ${failedSessions.join(", ")}`] : [];
373
+ return { message, warnings };
374
+ }
375
+ /**
376
+ * Switch LLM for a specific session.
377
+ * @param newLLMConfig The new LLM configuration to apply
378
+ * @param sessionId The session ID to switch LLM for
379
+ * @returns Result object with success message and any warnings
380
+ */
381
+ async switchLLMForSpecificSession(newLLMConfig, sessionId) {
382
+ const session = await this.getSession(sessionId);
383
+ if (!session) {
384
+ throw SessionError.notFound(sessionId);
385
+ }
386
+ await session.switchLLM(newLLMConfig);
387
+ this.services.agentEventBus.emit("dexto:llmSwitched", {
388
+ newConfig: newLLMConfig,
389
+ router: newLLMConfig.router,
390
+ historyRetained: true,
391
+ sessionIds: [sessionId]
392
+ });
393
+ const message = `Successfully switched to ${newLLMConfig.provider}/${newLLMConfig.model} using ${newLLMConfig.router} router for session ${sessionId}`;
394
+ return { message, warnings: [] };
395
+ }
396
+ /**
397
+ * Switch LLM for the default session.
398
+ * @param newLLMConfig The new LLM configuration to apply
399
+ * @returns Result object with success message and any warnings
400
+ */
401
+ async switchLLMForDefaultSession(newLLMConfig) {
402
+ const defaultSession = await this.getDefaultSession();
403
+ await defaultSession.switchLLM(newLLMConfig);
404
+ this.services.agentEventBus.emit("dexto:llmSwitched", {
405
+ newConfig: newLLMConfig,
406
+ router: newLLMConfig.router,
407
+ historyRetained: true,
408
+ sessionIds: [defaultSession.id]
409
+ });
410
+ const message = `Successfully switched to ${newLLMConfig.provider}/${newLLMConfig.model} using ${newLLMConfig.router} router`;
411
+ return { message, warnings: [] };
412
+ }
413
+ /**
414
+ * Get session statistics for monitoring and debugging.
415
+ */
416
+ async getSessionStats() {
417
+ await this.ensureInitialized();
418
+ const totalSessions = (await this.listSessions()).length;
419
+ const inMemorySessions = this.sessions.size;
420
+ return {
421
+ totalSessions,
422
+ inMemorySessions,
423
+ maxSessions: this.maxSessions,
424
+ sessionTTL: this.sessionTTL
425
+ };
426
+ }
427
+ /**
428
+ * Cleanup all sessions and resources.
429
+ * This should be called when shutting down the application.
430
+ */
431
+ async cleanup() {
432
+ if (!this.initialized) {
433
+ return;
434
+ }
435
+ if (this.cleanupInterval) {
436
+ clearInterval(this.cleanupInterval);
437
+ delete this.cleanupInterval;
438
+ logger.debug("Periodic session cleanup stopped");
439
+ }
440
+ const sessionIds = Array.from(this.sessions.keys());
441
+ for (const sessionId of sessionIds) {
442
+ try {
443
+ await this.endSession(sessionId);
444
+ } catch (error) {
445
+ logger.error(
446
+ `Failed to cleanup session ${sessionId}: ${error instanceof Error ? error.message : String(error)}`
447
+ );
448
+ }
449
+ }
450
+ this.sessions.clear();
451
+ this.initialized = false;
452
+ logger.debug("SessionManager cleanup completed");
453
+ }
454
+ }
455
+ export {
456
+ SessionManager
457
+ };
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var cache_backend_exports = {};
16
+ module.exports = __toCommonJS(cache_backend_exports);