@dexto/core 1.7.1 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/dist/agent/DextoAgent.cjs +157 -62
  2. package/dist/agent/DextoAgent.d.ts +71 -17
  3. package/dist/agent/DextoAgent.d.ts.map +1 -1
  4. package/dist/agent/DextoAgent.js +161 -63
  5. package/dist/agent/agent-options.d.ts +6 -10
  6. package/dist/agent/agent-options.d.ts.map +1 -1
  7. package/dist/agent/agentCard.js +1 -1
  8. package/dist/agent/error-codes.js +1 -1
  9. package/dist/agent/errors.js +1 -1
  10. package/dist/agent/index.d.ts +1 -0
  11. package/dist/agent/index.d.ts.map +1 -1
  12. package/dist/agent/index.js +1 -1
  13. package/dist/agent/schemas.d.ts +2 -2
  14. package/dist/agent/schemas.js +1 -1
  15. package/dist/agent/state-manager.js +1 -1
  16. package/dist/approval/error-codes.cjs +1 -1
  17. package/dist/approval/error-codes.d.ts +1 -1
  18. package/dist/approval/error-codes.d.ts.map +1 -1
  19. package/dist/approval/error-codes.js +2 -2
  20. package/dist/approval/errors.cjs +2 -5
  21. package/dist/approval/errors.d.ts.map +1 -1
  22. package/dist/approval/errors.js +3 -6
  23. package/dist/approval/factory.cjs +19 -4
  24. package/dist/approval/factory.d.ts +4 -1
  25. package/dist/approval/factory.d.ts.map +1 -1
  26. package/dist/approval/factory.js +19 -5
  27. package/dist/approval/index.d.ts +1 -1
  28. package/dist/approval/index.d.ts.map +1 -1
  29. package/dist/approval/index.js +1 -1
  30. package/dist/approval/manager.cjs +168 -26
  31. package/dist/approval/manager.d.ts +46 -12
  32. package/dist/approval/manager.d.ts.map +1 -1
  33. package/dist/approval/manager.js +177 -29
  34. package/dist/approval/schemas.cjs +26 -26
  35. package/dist/approval/schemas.d.ts +29 -29
  36. package/dist/approval/schemas.d.ts.map +1 -1
  37. package/dist/approval/schemas.js +23 -23
  38. package/dist/approval/types.cjs +5 -5
  39. package/dist/approval/types.d.ts +18 -18
  40. package/dist/approval/types.d.ts.map +1 -1
  41. package/dist/approval/types.js +6 -6
  42. package/dist/{chunk-PTJYTZNU.js → chunk-C6A6W6XS.js} +1 -44
  43. package/dist/config/index.cjs +75 -0
  44. package/dist/config/index.d.ts +15 -0
  45. package/dist/config/index.d.ts.map +1 -0
  46. package/dist/config/index.js +50 -0
  47. package/dist/context/compaction/overflow.js +1 -1
  48. package/dist/context/compaction/strategies/noop.js +1 -1
  49. package/dist/context/compaction/strategies/reactive-overflow-compaction.js +1 -1
  50. package/dist/context/content-clone.cjs +131 -0
  51. package/dist/context/content-clone.d.ts +7 -0
  52. package/dist/context/content-clone.d.ts.map +1 -0
  53. package/dist/context/content-clone.js +104 -0
  54. package/dist/context/error-codes.js +1 -1
  55. package/dist/context/errors.js +1 -1
  56. package/dist/context/index.cjs +2 -0
  57. package/dist/context/index.d.ts +1 -0
  58. package/dist/context/index.d.ts.map +1 -1
  59. package/dist/context/index.js +2 -1
  60. package/dist/context/manager.cjs +47 -35
  61. package/dist/context/manager.d.ts +7 -7
  62. package/dist/context/manager.d.ts.map +1 -1
  63. package/dist/context/manager.js +48 -36
  64. package/dist/context/media-helpers.js +1 -1
  65. package/dist/context/schemas.cjs +77 -0
  66. package/dist/context/schemas.d.ts +5 -0
  67. package/dist/context/schemas.d.ts.map +1 -0
  68. package/dist/context/schemas.js +53 -0
  69. package/dist/context/types.js +1 -1
  70. package/dist/context/utils.cjs +70 -69
  71. package/dist/context/utils.d.ts +3 -3
  72. package/dist/context/utils.d.ts.map +1 -1
  73. package/dist/context/utils.js +71 -70
  74. package/dist/errors/DextoBaseError.js +1 -1
  75. package/dist/errors/DextoRuntimeError.js +1 -1
  76. package/dist/errors/DextoValidationError.js +1 -1
  77. package/dist/errors/index.js +1 -1
  78. package/dist/errors/result-bridge.js +1 -1
  79. package/dist/errors/types.js +1 -1
  80. package/dist/events/index.cjs +9 -1
  81. package/dist/events/index.d.ts +20 -8
  82. package/dist/events/index.d.ts.map +1 -1
  83. package/dist/events/index.js +10 -2
  84. package/dist/hooks/builtins/content-policy.js +1 -1
  85. package/dist/hooks/builtins/response-sanitizer.js +1 -1
  86. package/dist/hooks/error-codes.js +1 -1
  87. package/dist/hooks/index.js +1 -1
  88. package/dist/hooks/manager.cjs +1 -1
  89. package/dist/hooks/manager.d.ts +2 -2
  90. package/dist/hooks/manager.d.ts.map +1 -1
  91. package/dist/hooks/manager.js +2 -2
  92. package/dist/hooks/types.d.ts +2 -2
  93. package/dist/hooks/types.d.ts.map +1 -1
  94. package/dist/index.browser.js +1 -1
  95. package/dist/index.cjs +2 -0
  96. package/dist/index.d.ts +1 -0
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +2 -1
  99. package/dist/llm/curation-config.js +1 -1
  100. package/dist/llm/curation.js +1 -1
  101. package/dist/llm/error-codes.js +1 -1
  102. package/dist/llm/errors.js +1 -1
  103. package/dist/llm/executor/index.cjs +32 -0
  104. package/dist/llm/executor/index.d.ts +2 -0
  105. package/dist/llm/executor/index.d.ts.map +1 -0
  106. package/dist/llm/executor/index.js +11 -0
  107. package/dist/llm/executor/provider-options.js +1 -1
  108. package/dist/llm/executor/stream-processor.cjs +28 -139
  109. package/dist/llm/executor/stream-processor.d.ts +2 -13
  110. package/dist/llm/executor/stream-processor.d.ts.map +1 -1
  111. package/dist/llm/executor/stream-processor.js +29 -140
  112. package/dist/{session/history/memory.cjs → llm/executor/tool-definitions.cjs} +21 -33
  113. package/dist/llm/executor/tool-definitions.d.ts +4 -0
  114. package/dist/llm/executor/tool-definitions.d.ts.map +1 -0
  115. package/dist/llm/executor/tool-definitions.js +22 -0
  116. package/dist/llm/executor/tool-output-truncator.js +1 -1
  117. package/dist/llm/executor/turn-executor.cjs +1093 -458
  118. package/dist/llm/executor/turn-executor.d.ts +269 -43
  119. package/dist/llm/executor/turn-executor.d.ts.map +1 -1
  120. package/dist/llm/executor/turn-executor.js +1079 -405
  121. package/dist/llm/executor/types.d.ts +6 -0
  122. package/dist/llm/executor/types.d.ts.map +1 -1
  123. package/dist/llm/formatters/vercel.js +1 -1
  124. package/dist/llm/index.cjs +2 -0
  125. package/dist/llm/index.d.ts +1 -0
  126. package/dist/llm/index.d.ts.map +1 -1
  127. package/dist/llm/index.js +2 -1
  128. package/dist/llm/providers/codex-app-server.cjs +22 -2
  129. package/dist/llm/providers/codex-app-server.d.ts.map +1 -1
  130. package/dist/llm/providers/codex-app-server.js +23 -3
  131. package/dist/llm/providers/codex-base-url.js +1 -1
  132. package/dist/llm/providers/local/ai-sdk-adapter.js +1 -1
  133. package/dist/llm/providers/local/downloader.js +1 -1
  134. package/dist/llm/providers/local/error-codes.js +1 -1
  135. package/dist/llm/providers/local/errors.js +1 -1
  136. package/dist/llm/providers/local/gpu-detector.js +1 -1
  137. package/dist/llm/providers/local/index.js +1 -1
  138. package/dist/llm/providers/local/node-llama-provider.js +1 -1
  139. package/dist/llm/providers/local/ollama-provider.js +1 -1
  140. package/dist/llm/providers/local/registry.js +1 -1
  141. package/dist/llm/providers/local/schemas.js +1 -1
  142. package/dist/llm/providers/openrouter-model-registry.js +1 -1
  143. package/dist/llm/reasoning/anthropic-betas.js +1 -1
  144. package/dist/llm/reasoning/anthropic-thinking.js +1 -1
  145. package/dist/llm/reasoning/openai-reasoning-effort.js +1 -1
  146. package/dist/llm/reasoning/profile.js +1 -1
  147. package/dist/llm/reasoning/profiles/anthropic.js +1 -1
  148. package/dist/llm/reasoning/profiles/bedrock.js +1 -1
  149. package/dist/llm/reasoning/profiles/google.js +1 -1
  150. package/dist/llm/reasoning/profiles/openai-compatible.js +1 -1
  151. package/dist/llm/reasoning/profiles/openai.js +1 -1
  152. package/dist/llm/reasoning/profiles/openrouter.js +1 -1
  153. package/dist/llm/reasoning/profiles/shared.js +1 -1
  154. package/dist/llm/reasoning/profiles/vertex.js +1 -1
  155. package/dist/llm/registry/auto-update.js +1 -1
  156. package/dist/llm/registry/index.js +1 -1
  157. package/dist/llm/registry/models.generated.js +1 -1
  158. package/dist/llm/registry/models.manual.js +1 -1
  159. package/dist/llm/registry/sync.js +1 -1
  160. package/dist/llm/resolver.js +1 -1
  161. package/dist/llm/schemas.js +1 -1
  162. package/dist/llm/services/factory.cjs +5 -4
  163. package/dist/llm/services/factory.d.ts +3 -3
  164. package/dist/llm/services/factory.d.ts.map +1 -1
  165. package/dist/llm/services/factory.js +6 -5
  166. package/dist/llm/services/types.d.ts +10 -1
  167. package/dist/llm/services/types.d.ts.map +1 -1
  168. package/dist/llm/services/vercel.cjs +23 -8
  169. package/dist/llm/services/vercel.d.ts +11 -7
  170. package/dist/llm/services/vercel.d.ts.map +1 -1
  171. package/dist/llm/services/vercel.js +24 -9
  172. package/dist/llm/types.js +1 -1
  173. package/dist/llm/usage-metadata.cjs +20 -3
  174. package/dist/llm/usage-metadata.d.ts +1 -0
  175. package/dist/llm/usage-metadata.d.ts.map +1 -1
  176. package/dist/llm/usage-metadata.js +19 -3
  177. package/dist/llm/usage-scope.js +1 -1
  178. package/dist/llm/usage-summary.js +1 -1
  179. package/dist/llm/validation.js +1 -1
  180. package/dist/logger/browser.js +1 -1
  181. package/dist/logger/default-logger-factory.js +1 -1
  182. package/dist/logger/factory.js +1 -1
  183. package/dist/logger/index.js +1 -1
  184. package/dist/logger/logger.js +1 -1
  185. package/dist/logger/v2/dexto-logger.js +1 -1
  186. package/dist/logger/v2/error-codes.js +1 -1
  187. package/dist/logger/v2/errors.js +1 -1
  188. package/dist/logger/v2/schemas.js +1 -1
  189. package/dist/logger/v2/test-utils.js +1 -1
  190. package/dist/logger/v2/transport-factory.js +1 -1
  191. package/dist/logger/v2/transports/console-transport.js +1 -1
  192. package/dist/logger/v2/transports/file-transport.js +1 -1
  193. package/dist/logger/v2/transports/silent-transport.js +1 -1
  194. package/dist/logger/v2/types.js +1 -1
  195. package/dist/mcp/bundled-config.js +1 -1
  196. package/dist/mcp/error-codes.js +1 -1
  197. package/dist/mcp/errors.js +1 -1
  198. package/dist/mcp/index.js +1 -1
  199. package/dist/mcp/manager.js +1 -1
  200. package/dist/mcp/mcp-client.js +1 -1
  201. package/dist/mcp/resolver.js +1 -1
  202. package/dist/mcp/schemas.js +1 -1
  203. package/dist/memory/error-codes.js +1 -1
  204. package/dist/memory/errors.js +1 -1
  205. package/dist/memory/index.js +1 -1
  206. package/dist/memory/manager.cjs +7 -27
  207. package/dist/memory/manager.d.ts +4 -12
  208. package/dist/memory/manager.d.ts.map +1 -1
  209. package/dist/memory/manager.js +8 -28
  210. package/dist/memory/schemas.js +1 -1
  211. package/dist/prompts/error-codes.js +1 -1
  212. package/dist/prompts/errors.js +1 -1
  213. package/dist/prompts/index.js +1 -1
  214. package/dist/prompts/name-validation.js +1 -1
  215. package/dist/prompts/prompt-manager.cjs +9 -38
  216. package/dist/prompts/prompt-manager.d.ts +2 -10
  217. package/dist/prompts/prompt-manager.d.ts.map +1 -1
  218. package/dist/prompts/prompt-manager.js +10 -39
  219. package/dist/prompts/providers/config-prompt-provider.cjs +8 -87
  220. package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
  221. package/dist/prompts/providers/config-prompt-provider.js +9 -88
  222. package/dist/prompts/providers/custom-prompt-provider.cjs +21 -22
  223. package/dist/prompts/providers/custom-prompt-provider.d.ts +19 -4
  224. package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
  225. package/dist/prompts/providers/custom-prompt-provider.js +22 -23
  226. package/dist/prompts/providers/mcp-prompt-provider.js +1 -1
  227. package/dist/prompts/schemas.cjs +2 -24
  228. package/dist/prompts/schemas.d.ts +0 -52
  229. package/dist/prompts/schemas.d.ts.map +1 -1
  230. package/dist/prompts/schemas.js +3 -25
  231. package/dist/prompts/types.d.ts +5 -32
  232. package/dist/prompts/types.d.ts.map +1 -1
  233. package/dist/prompts/utils.js +1 -1
  234. package/dist/resources/agent-resources-provider.js +1 -1
  235. package/dist/resources/error-codes.js +1 -1
  236. package/dist/resources/errors.js +1 -1
  237. package/dist/resources/handlers/blob-handler.cjs +14 -11
  238. package/dist/resources/handlers/blob-handler.d.ts +4 -4
  239. package/dist/resources/handlers/blob-handler.d.ts.map +1 -1
  240. package/dist/resources/handlers/blob-handler.js +15 -12
  241. package/dist/resources/handlers/factory.cjs +3 -3
  242. package/dist/resources/handlers/factory.js +4 -4
  243. package/dist/resources/handlers/filesystem-handler.js +1 -1
  244. package/dist/resources/handlers/types.d.ts +2 -2
  245. package/dist/resources/handlers/types.d.ts.map +1 -1
  246. package/dist/resources/index.js +1 -1
  247. package/dist/resources/manager.cjs +10 -7
  248. package/dist/resources/manager.d.ts +4 -4
  249. package/dist/resources/manager.d.ts.map +1 -1
  250. package/dist/resources/manager.js +11 -8
  251. package/dist/resources/reference-parser.js +1 -1
  252. package/dist/resources/schemas.cjs +1 -1
  253. package/dist/resources/schemas.d.ts +2 -2
  254. package/dist/resources/schemas.js +2 -2
  255. package/dist/runtime/host-runtime.js +1 -1
  256. package/dist/runtime/index.cjs +3 -0
  257. package/dist/runtime/index.d.ts +2 -0
  258. package/dist/runtime/index.d.ts.map +1 -1
  259. package/dist/runtime/index.js +3 -1
  260. package/dist/runtime/run-context.js +1 -1
  261. package/dist/search/index.js +1 -1
  262. package/dist/search/search-service.cjs +6 -13
  263. package/dist/search/search-service.d.ts +5 -3
  264. package/dist/search/search-service.d.ts.map +1 -1
  265. package/dist/search/search-service.js +7 -14
  266. package/dist/session/chat-session.cjs +264 -108
  267. package/dist/session/chat-session.d.ts +75 -21
  268. package/dist/session/chat-session.d.ts.map +1 -1
  269. package/dist/session/chat-session.js +268 -108
  270. package/dist/session/error-codes.js +1 -1
  271. package/dist/session/errors.js +1 -1
  272. package/dist/session/index.cjs +19 -2
  273. package/dist/session/index.d.ts +4 -3
  274. package/dist/session/index.d.ts.map +1 -1
  275. package/dist/session/index.js +19 -3
  276. package/dist/session/message-queue.cjs +82 -51
  277. package/dist/session/message-queue.d.ts +13 -8
  278. package/dist/session/message-queue.d.ts.map +1 -1
  279. package/dist/session/message-queue.js +83 -52
  280. package/dist/session/queue-clone.cjs +50 -0
  281. package/dist/session/queue-clone.d.ts +5 -0
  282. package/dist/session/queue-clone.d.ts.map +1 -0
  283. package/dist/session/queue-clone.js +25 -0
  284. package/dist/session/schemas.cjs +74 -2
  285. package/dist/session/schemas.d.ts +94 -0
  286. package/dist/session/schemas.d.ts.map +1 -1
  287. package/dist/session/schemas.js +69 -2
  288. package/dist/session/session-manager.cjs +107 -123
  289. package/dist/session/session-manager.d.ts +7 -6
  290. package/dist/session/session-manager.d.ts.map +1 -1
  291. package/dist/session/session-manager.js +108 -124
  292. package/dist/session/title-generator.cjs +14 -26
  293. package/dist/session/title-generator.d.ts +4 -6
  294. package/dist/session/title-generator.d.ts.map +1 -1
  295. package/dist/session/title-generator.js +16 -28
  296. package/dist/session/types.cjs +28 -0
  297. package/dist/session/types.d.ts +5 -1
  298. package/dist/session/types.d.ts.map +1 -1
  299. package/dist/session/types.js +19 -0
  300. package/dist/{session/history/factory.cjs → skills/index.cjs} +9 -9
  301. package/dist/skills/index.d.ts +4 -0
  302. package/dist/skills/index.d.ts.map +1 -0
  303. package/dist/skills/index.js +7 -0
  304. package/dist/skills/skill-manager.cjs +76 -0
  305. package/dist/skills/skill-manager.d.ts +13 -0
  306. package/dist/skills/skill-manager.d.ts.map +1 -0
  307. package/dist/skills/skill-manager.js +53 -0
  308. package/dist/skills/types.d.ts +24 -0
  309. package/dist/skills/types.d.ts.map +1 -0
  310. package/dist/skills/workspace-skill-source.cjs +120 -0
  311. package/dist/skills/workspace-skill-source.d.ts +16 -0
  312. package/dist/skills/workspace-skill-source.d.ts.map +1 -0
  313. package/dist/skills/workspace-skill-source.js +97 -0
  314. package/dist/storage/approvals/types.cjs +38 -0
  315. package/dist/storage/approvals/types.d.ts +54 -0
  316. package/dist/storage/approvals/types.d.ts.map +1 -0
  317. package/dist/storage/approvals/types.js +14 -0
  318. package/dist/storage/artifacts/types.d.ts +73 -0
  319. package/dist/storage/artifacts/types.d.ts.map +1 -0
  320. package/dist/storage/conversation/database.cjs +233 -0
  321. package/dist/storage/conversation/database.d.ts +38 -0
  322. package/dist/storage/conversation/database.d.ts.map +1 -0
  323. package/dist/storage/conversation/database.js +210 -0
  324. package/dist/storage/conversation/types.cjs +16 -0
  325. package/dist/storage/conversation/types.d.ts +21 -0
  326. package/dist/storage/conversation/types.d.ts.map +1 -0
  327. package/dist/storage/conversation/types.js +0 -0
  328. package/dist/storage/database/types.d.ts +4 -0
  329. package/dist/storage/database/types.d.ts.map +1 -1
  330. package/dist/storage/error-codes.js +1 -1
  331. package/dist/storage/errors.cjs +6 -6
  332. package/dist/storage/errors.d.ts +2 -2
  333. package/dist/storage/errors.js +7 -7
  334. package/dist/storage/index.cjs +42 -5
  335. package/dist/storage/index.d.ts +19 -8
  336. package/dist/storage/index.d.ts.map +1 -1
  337. package/dist/storage/index.js +39 -4
  338. package/dist/storage/memories/types.cjs +16 -0
  339. package/dist/storage/memories/types.d.ts +17 -0
  340. package/dist/storage/memories/types.d.ts.map +1 -0
  341. package/dist/storage/memories/types.js +0 -0
  342. package/dist/storage/message-queue/types.cjs +16 -0
  343. package/dist/storage/message-queue/types.d.ts +15 -0
  344. package/dist/storage/message-queue/types.d.ts.map +1 -0
  345. package/dist/storage/message-queue/types.js +0 -0
  346. package/dist/storage/prompts/types.cjs +16 -0
  347. package/dist/storage/prompts/types.d.ts +14 -0
  348. package/dist/storage/prompts/types.d.ts.map +1 -0
  349. package/dist/storage/prompts/types.js +0 -0
  350. package/dist/storage/runtime-events/types.cjs +16 -0
  351. package/dist/storage/runtime-events/types.d.ts +19 -0
  352. package/dist/storage/runtime-events/types.d.ts.map +1 -0
  353. package/dist/storage/runtime-events/types.js +0 -0
  354. package/dist/storage/sessions/types.cjs +16 -0
  355. package/dist/storage/sessions/types.d.ts +19 -0
  356. package/dist/storage/sessions/types.d.ts.map +1 -0
  357. package/dist/storage/sessions/types.js +0 -0
  358. package/dist/storage/stores/backend.cjs +702 -0
  359. package/dist/storage/stores/backend.d.ts +303 -0
  360. package/dist/storage/stores/backend.d.ts.map +1 -0
  361. package/dist/storage/stores/backend.js +677 -0
  362. package/dist/storage/stores/in-memory.cjs +510 -0
  363. package/dist/storage/stores/in-memory.d.ts +11 -0
  364. package/dist/storage/stores/in-memory.d.ts.map +1 -0
  365. package/dist/storage/stores/in-memory.js +487 -0
  366. package/dist/storage/stores/types.cjs +16 -0
  367. package/dist/storage/stores/types.d.ts +36 -0
  368. package/dist/storage/stores/types.d.ts.map +1 -0
  369. package/dist/storage/stores/types.js +0 -0
  370. package/dist/storage/tool-executions/types.cjs +127 -0
  371. package/dist/storage/tool-executions/types.d.ts +193 -0
  372. package/dist/storage/tool-executions/types.d.ts.map +1 -0
  373. package/dist/storage/tool-executions/types.js +96 -0
  374. package/dist/storage/tool-preferences/types.cjs +16 -0
  375. package/dist/storage/tool-preferences/types.d.ts +29 -0
  376. package/dist/storage/tool-preferences/types.d.ts.map +1 -0
  377. package/dist/storage/tool-preferences/types.js +0 -0
  378. package/dist/storage/tool-state/types.cjs +16 -0
  379. package/dist/storage/tool-state/types.d.ts +20 -0
  380. package/dist/storage/tool-state/types.d.ts.map +1 -0
  381. package/dist/storage/tool-state/types.js +0 -0
  382. package/dist/storage/workspaces/types.cjs +16 -0
  383. package/dist/storage/workspaces/types.d.ts +19 -0
  384. package/dist/storage/workspaces/types.d.ts.map +1 -0
  385. package/dist/storage/workspaces/types.js +0 -0
  386. package/dist/systemPrompt/contributors.cjs +10 -14
  387. package/dist/systemPrompt/contributors.d.ts +3 -3
  388. package/dist/systemPrompt/contributors.d.ts.map +1 -1
  389. package/dist/systemPrompt/contributors.js +11 -15
  390. package/dist/systemPrompt/error-codes.js +1 -1
  391. package/dist/systemPrompt/errors.js +1 -1
  392. package/dist/systemPrompt/in-built-prompts.js +1 -1
  393. package/dist/systemPrompt/index.js +1 -1
  394. package/dist/systemPrompt/manager.js +1 -1
  395. package/dist/systemPrompt/registry.js +1 -1
  396. package/dist/systemPrompt/schemas.js +1 -1
  397. package/dist/telemetry/decorators.js +1 -1
  398. package/dist/telemetry/error-codes.js +1 -1
  399. package/dist/telemetry/errors.js +1 -1
  400. package/dist/telemetry/exporters.js +1 -1
  401. package/dist/telemetry/index.js +1 -1
  402. package/dist/telemetry/schemas.js +1 -1
  403. package/dist/telemetry/telemetry.js +1 -1
  404. package/dist/telemetry/utils.js +1 -1
  405. package/dist/test-utils/in-memory-storage.cjs +9 -17
  406. package/dist/test-utils/in-memory-storage.js +9 -16
  407. package/dist/test-utils/session-state-stores.cjs +21 -24
  408. package/dist/test-utils/session-state-stores.js +22 -24
  409. package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.cjs +1 -1
  410. package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.d.ts +2 -2
  411. package/dist/tools/approval/allowed-tools-provider/factory.d.ts.map +1 -0
  412. package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.js +2 -2
  413. package/dist/tools/approval/allowed-tools-provider/in-memory.d.ts.map +1 -0
  414. package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.js +1 -1
  415. package/dist/tools/approval/allowed-tools-provider/storage.cjs +66 -0
  416. package/dist/tools/{confirmation → approval}/allowed-tools-provider/storage.d.ts +4 -10
  417. package/dist/tools/approval/allowed-tools-provider/storage.d.ts.map +1 -0
  418. package/dist/tools/approval/allowed-tools-provider/storage.js +43 -0
  419. package/dist/tools/approval/allowed-tools-provider/types.cjs +16 -0
  420. package/dist/tools/approval/allowed-tools-provider/types.d.ts.map +1 -0
  421. package/dist/tools/approval/allowed-tools-provider/types.js +0 -0
  422. package/dist/tools/approval/session-tool-policy.cjs +269 -0
  423. package/dist/tools/approval/session-tool-policy.d.ts +43 -0
  424. package/dist/tools/approval/session-tool-policy.d.ts.map +1 -0
  425. package/dist/tools/approval/session-tool-policy.js +245 -0
  426. package/dist/tools/define-tool.js +1 -1
  427. package/dist/tools/display-types.js +1 -1
  428. package/dist/tools/error-codes.cjs +3 -3
  429. package/dist/tools/error-codes.d.ts +4 -4
  430. package/dist/tools/error-codes.d.ts.map +1 -1
  431. package/dist/tools/error-codes.js +4 -4
  432. package/dist/tools/errors.cjs +12 -12
  433. package/dist/tools/errors.d.ts +6 -6
  434. package/dist/tools/errors.d.ts.map +1 -1
  435. package/dist/tools/errors.js +13 -13
  436. package/dist/tools/index.cjs +3 -0
  437. package/dist/tools/index.d.ts +3 -0
  438. package/dist/tools/index.d.ts.map +1 -1
  439. package/dist/tools/index.js +3 -1
  440. package/dist/tools/pattern-utils.js +1 -1
  441. package/dist/tools/presentation/tool-presentation.cjs +182 -0
  442. package/dist/tools/presentation/tool-presentation.d.ts +51 -0
  443. package/dist/tools/presentation/tool-presentation.d.ts.map +1 -0
  444. package/dist/tools/presentation/tool-presentation.js +159 -0
  445. package/dist/tools/presentation.js +1 -1
  446. package/dist/tools/schemas.cjs +5 -10
  447. package/dist/tools/schemas.d.ts +1 -4
  448. package/dist/tools/schemas.d.ts.map +1 -1
  449. package/dist/tools/schemas.js +6 -11
  450. package/dist/tools/session-tool-preferences-store.cjs +12 -28
  451. package/dist/tools/session-tool-preferences-store.d.ts +4 -7
  452. package/dist/tools/session-tool-preferences-store.d.ts.map +1 -1
  453. package/dist/tools/session-tool-preferences-store.js +12 -29
  454. package/dist/tools/tool-call-metadata.js +1 -1
  455. package/dist/tools/tool-manager.cjs +871 -834
  456. package/dist/tools/tool-manager.d.ts +94 -96
  457. package/dist/tools/tool-manager.d.ts.map +1 -1
  458. package/dist/tools/tool-manager.js +876 -833
  459. package/dist/tools/types.d.ts +10 -14
  460. package/dist/tools/types.d.ts.map +1 -1
  461. package/dist/utils/api-key-resolver.js +1 -1
  462. package/dist/utils/async-context.js +1 -1
  463. package/dist/utils/debug.js +1 -1
  464. package/dist/utils/defer.js +1 -1
  465. package/dist/utils/env.js +1 -1
  466. package/dist/utils/error-conversion.js +1 -1
  467. package/dist/utils/execution-context.js +1 -1
  468. package/dist/utils/fs-walk.js +1 -1
  469. package/dist/utils/path.js +1 -1
  470. package/dist/utils/redactor.js +1 -1
  471. package/dist/utils/result.js +1 -1
  472. package/dist/utils/safe-stringify.js +1 -1
  473. package/dist/utils/schema.js +1 -1
  474. package/dist/utils/service-initializer.cjs +37 -33
  475. package/dist/utils/service-initializer.d.ts +9 -5
  476. package/dist/utils/service-initializer.d.ts.map +1 -1
  477. package/dist/utils/service-initializer.js +38 -34
  478. package/dist/utils/zod-schema-converter.js +1 -1
  479. package/dist/workspace/error-codes.cjs +5 -1
  480. package/dist/workspace/error-codes.d.ts +4 -0
  481. package/dist/workspace/error-codes.d.ts.map +1 -1
  482. package/dist/workspace/error-codes.js +6 -2
  483. package/dist/workspace/errors.cjs +43 -0
  484. package/dist/workspace/errors.d.ts +9 -0
  485. package/dist/workspace/errors.d.ts.map +1 -1
  486. package/dist/workspace/errors.js +44 -1
  487. package/dist/workspace/index.d.ts +1 -1
  488. package/dist/workspace/index.d.ts.map +1 -1
  489. package/dist/workspace/index.js +1 -1
  490. package/dist/workspace/manager.cjs +21 -29
  491. package/dist/workspace/manager.d.ts +6 -6
  492. package/dist/workspace/manager.d.ts.map +1 -1
  493. package/dist/workspace/manager.js +22 -30
  494. package/dist/workspace/types.d.ts +47 -0
  495. package/dist/workspace/types.d.ts.map +1 -1
  496. package/package.json +114 -2
  497. package/dist/approval/session-approval-store.cjs +0 -91
  498. package/dist/approval/session-approval-store.d.ts +0 -37
  499. package/dist/approval/session-approval-store.d.ts.map +0 -1
  500. package/dist/approval/session-approval-store.js +0 -68
  501. package/dist/session/history/database.cjs +0 -232
  502. package/dist/session/history/database.d.ts +0 -41
  503. package/dist/session/history/database.d.ts.map +0 -1
  504. package/dist/session/history/database.js +0 -209
  505. package/dist/session/history/factory.d.ts +0 -11
  506. package/dist/session/history/factory.d.ts.map +0 -1
  507. package/dist/session/history/factory.js +0 -8
  508. package/dist/session/history/memory.d.ts +0 -22
  509. package/dist/session/history/memory.d.ts.map +0 -1
  510. package/dist/session/history/memory.js +0 -34
  511. package/dist/session/history/types.d.ts +0 -26
  512. package/dist/session/history/types.d.ts.map +0 -1
  513. package/dist/session/message-queue-store.cjs +0 -75
  514. package/dist/session/message-queue-store.d.ts +0 -16
  515. package/dist/session/message-queue-store.d.ts.map +0 -1
  516. package/dist/session/message-queue-store.js +0 -52
  517. package/dist/storage/storage-manager.cjs +0 -209
  518. package/dist/storage/storage-manager.d.ts +0 -77
  519. package/dist/storage/storage-manager.d.ts.map +0 -1
  520. package/dist/storage/storage-manager.js +0 -186
  521. package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts.map +0 -1
  522. package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts.map +0 -1
  523. package/dist/tools/confirmation/allowed-tools-provider/storage.cjs +0 -69
  524. package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts.map +0 -1
  525. package/dist/tools/confirmation/allowed-tools-provider/storage.js +0 -46
  526. package/dist/tools/confirmation/allowed-tools-provider/types.d.ts.map +0 -1
  527. /package/dist/{session/history → skills}/types.cjs +0 -0
  528. /package/dist/{session/history → skills}/types.js +0 -0
  529. /package/dist/{tools/confirmation/allowed-tools-provider → storage/artifacts}/types.cjs +0 -0
  530. /package/dist/{tools/confirmation/allowed-tools-provider → storage/artifacts}/types.js +0 -0
  531. /package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.cjs +0 -0
  532. /package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.d.ts +0 -0
  533. /package/dist/tools/{confirmation → approval}/allowed-tools-provider/types.d.ts +0 -0
@@ -1,8 +1,9 @@
1
- import "../chunk-PTJYTZNU.js";
1
+ import "../chunk-C6A6W6XS.js";
2
2
  import { randomUUID } from "crypto";
3
3
  import { ChatSession } from "./chat-session.js";
4
4
  import { DextoLogComponent } from "../logger/v2/types.js";
5
5
  import { SessionError } from "./errors.js";
6
+ import { normalizeTokenUsageForAccounting } from "../llm/usage-metadata.js";
6
7
  import { ZodError } from "zod";
7
8
  import {
8
9
  SessionPromptContributorSchema
@@ -22,7 +23,6 @@ class SessionManager {
22
23
  sessions = /* @__PURE__ */ new Map();
23
24
  maxSessions;
24
25
  sessionTTL;
25
- static MESSAGE_QUEUE_KEY_PREFIX = "session-message-queue:";
26
26
  initialized = false;
27
27
  cleanupInterval;
28
28
  initializationPromise;
@@ -31,7 +31,6 @@ class SessionManager {
31
31
  // Per-session mutex for any SessionData read-modify-write path.
32
32
  sessionDataLocks = /* @__PURE__ */ new Map();
33
33
  logger;
34
- static FORK_HISTORY_BATCH_SIZE = 500;
35
34
  static FORK_ID_GENERATION_MAX_ATTEMPTS = 5;
36
35
  static FORK_TITLE_PREFIX = "Fork: ";
37
36
  static FORK_PARENT_ID_PREVIEW_LENGTH = 8;
@@ -74,23 +73,21 @@ class SessionManager {
74
73
  */
75
74
  async restoreSessionsFromStorage() {
76
75
  try {
77
- const sessionKeys = await this.services.storageManager.getDatabase().list("session:");
78
- this.logger.debug(`Found ${sessionKeys.length} persisted sessions to restore`);
79
- for (const sessionKey of sessionKeys) {
80
- const sessionId = sessionKey.replace("session:", "");
81
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
76
+ const sessionIds = await this.services.sessionStore.listSessionIds();
77
+ this.logger.debug(`Found ${sessionIds.length} persisted sessions to restore`);
78
+ for (const sessionId of sessionIds) {
79
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
82
80
  if (sessionData) {
83
81
  const now = Date.now();
84
82
  const lastActivity = sessionData.lastActivity;
85
83
  if (now - lastActivity <= this.sessionTTL) {
86
84
  this.logger.debug(`Session ${sessionId} restored from storage`);
87
85
  } else {
88
- await Promise.all([
89
- this.services.storageManager.getDatabase().delete(sessionKey),
90
- this.services.storageManager.getCache().delete(sessionKey),
91
- this.deleteSessionInteractionState(sessionId)
92
- ]);
93
- this.logger.debug(`Expired session ${sessionId} cleaned up during restore`);
86
+ await this.services.sessionStore.evictSession({ sessionId });
87
+ this.evictSessionInteractionState(sessionId);
88
+ this.logger.debug(
89
+ `Expired session ${sessionId} evicted during restore; durable history preserved`
90
+ );
94
91
  }
95
92
  }
96
93
  }
@@ -102,18 +99,19 @@ class SessionManager {
102
99
  }
103
100
  async clearPersistedQueuedMessages(reason) {
104
101
  try {
105
- const queueKeys = await this.services.storageManager.getDatabase().list(SessionManager.MESSAGE_QUEUE_KEY_PREFIX);
106
- if (queueKeys.length === 0) {
102
+ const steerSessionIds = await this.services.steerQueueStore.listSessionIds();
103
+ const followUpSessionIds = await this.services.followUpQueueStore.listSessionIds();
104
+ const sessionIds = Array.from(/* @__PURE__ */ new Set([...steerSessionIds, ...followUpSessionIds]));
105
+ if (sessionIds.length === 0) {
107
106
  return;
108
107
  }
109
108
  await Promise.all(
110
- queueKeys.map(
111
- (key) => this.services.messageQueueStore.delete(
112
- key.slice(SessionManager.MESSAGE_QUEUE_KEY_PREFIX.length)
113
- )
114
- )
109
+ sessionIds.flatMap((sessionId) => [
110
+ this.services.steerQueueStore.delete({ sessionId }),
111
+ this.services.followUpQueueStore.delete({ sessionId })
112
+ ])
115
113
  );
116
- const message = `${reason === "startup" ? "Cleared stale queued follow-up state from previous agent run" : "Cleared queued follow-up state during agent shutdown"} (${queueKeys.length} session bucket(s))`;
114
+ const message = `${reason === "startup" ? "Cleared stale pending input state from previous agent run" : "Cleared pending input state during agent shutdown"} (${sessionIds.length} session bucket(s))`;
117
115
  if (reason === "startup") {
118
116
  this.logger.info(message);
119
117
  } else {
@@ -174,21 +172,17 @@ class SessionManager {
174
172
  */
175
173
  async forkSession(parentSessionId) {
176
174
  await this.ensureInitialized();
177
- const database = this.services.storageManager.getDatabase();
178
- const cache = this.services.storageManager.getCache();
179
- const parentSessionKey = `session:${parentSessionId}`;
180
- const parentMessagesKey = `messages:${parentSessionId}`;
181
- const parentSessionData = await database.get(parentSessionKey);
175
+ const parentSessionData = await this.services.sessionStore.getSession({
176
+ sessionId: parentSessionId
177
+ });
182
178
  if (!parentSessionData) {
183
179
  throw SessionError.notFound(parentSessionId);
184
180
  }
185
- const activeSessionKeys = await database.list("session:");
186
- if (activeSessionKeys.length >= this.maxSessions) {
187
- throw SessionError.maxSessionsExceeded(activeSessionKeys.length, this.maxSessions);
181
+ const activeSessionIds = await this.services.sessionStore.listSessionIds();
182
+ if (activeSessionIds.length >= this.maxSessions) {
183
+ throw SessionError.maxSessionsExceeded(activeSessionIds.length, this.maxSessions);
188
184
  }
189
185
  const childSessionId = await this.generateForkSessionId();
190
- const childSessionKey = `session:${childSessionId}`;
191
- const childMessagesKey = `messages:${childSessionId}`;
192
186
  const now = Date.now();
193
187
  const childTitle = this.buildForkTitle(parentSessionData, parentSessionId);
194
188
  const childSessionData = {
@@ -215,16 +209,19 @@ class SessionManager {
215
209
  }
216
210
  };
217
211
  try {
218
- await database.set(childSessionKey, childSessionData);
219
- await this.copySessionHistory(parentMessagesKey, childMessagesKey);
212
+ await this.services.sessionStore.saveSession({
213
+ sessionId: childSessionId,
214
+ session: childSessionData,
215
+ ttlSeconds: this.sessionTTL / 1e3
216
+ });
217
+ await this.copySessionHistory(parentSessionId, childSessionId);
220
218
  const childSession = await this.createSession(childSessionId);
221
219
  this.logger.info(`Forked session '${parentSessionId}' into child '${childSessionId}'`);
222
220
  return childSession;
223
221
  } catch (error) {
224
222
  await Promise.allSettled([
225
- database.delete(childSessionKey),
226
- database.delete(childMessagesKey),
227
- cache.delete(childSessionKey)
223
+ this.services.sessionStore.deleteSession({ sessionId: childSessionId }),
224
+ this.services.conversationStore.clearMessages({ sessionId: childSessionId })
228
225
  ]);
229
226
  const inMemorySession = this.sessions.get(childSessionId);
230
227
  if (inMemorySession) {
@@ -245,13 +242,14 @@ class SessionManager {
245
242
  return `${prefix}${baseTitle}`;
246
243
  }
247
244
  async generateForkSessionId() {
248
- const database = this.services.storageManager.getDatabase();
249
245
  for (let attempt = 0; attempt < SessionManager.FORK_ID_GENERATION_MAX_ATTEMPTS; attempt++) {
250
246
  const candidateId = randomUUID();
251
247
  if (this.sessions.has(candidateId) || this.pendingCreations.has(candidateId)) {
252
248
  continue;
253
249
  }
254
- const existing = await database.get(`session:${candidateId}`);
250
+ const existing = await this.services.sessionStore.getSession({
251
+ sessionId: candidateId
252
+ });
255
253
  if (!existing) {
256
254
  return candidateId;
257
255
  }
@@ -261,25 +259,15 @@ class SessionManager {
261
259
  "failed to generate unique child session ID"
262
260
  );
263
261
  }
264
- async copySessionHistory(parentMessagesKey, childMessagesKey) {
265
- const database = this.services.storageManager.getDatabase();
266
- let offset = 0;
267
- while (true) {
268
- const batch = await database.getRange(
269
- parentMessagesKey,
270
- offset,
271
- SessionManager.FORK_HISTORY_BATCH_SIZE
272
- );
273
- if (batch.length === 0) {
274
- return;
275
- }
276
- for (const message of batch) {
277
- await database.append(childMessagesKey, message);
278
- }
279
- offset += batch.length;
280
- if (batch.length < SessionManager.FORK_HISTORY_BATCH_SIZE) {
281
- return;
282
- }
262
+ async copySessionHistory(parentSessionId, childSessionId) {
263
+ const messages = await this.services.conversationStore.listMessages({
264
+ sessionId: parentSessionId
265
+ });
266
+ for (const message of messages) {
267
+ await this.services.conversationStore.saveMessage({
268
+ sessionId: childSessionId,
269
+ message
270
+ });
283
271
  }
284
272
  }
285
273
  /**
@@ -288,8 +276,7 @@ class SessionManager {
288
276
  */
289
277
  async createSessionInternal(id) {
290
278
  await this.cleanupExpiredSessions();
291
- const sessionKey = `session:${id}`;
292
- const existingMetadata = await this.services.storageManager.getDatabase().get(sessionKey);
279
+ const existingMetadata = await this.services.sessionStore.getSession({ sessionId: id });
293
280
  if (existingMetadata) {
294
281
  await this.updateSessionActivity(id);
295
282
  const runtimeConfig = this.services.stateManager.getRuntimeConfig();
@@ -299,7 +286,7 @@ class SessionManager {
299
286
  agentId,
300
287
  sessionId: id
301
288
  });
302
- const sessionData2 = await this.services.storageManager.getDatabase().get(sessionKey);
289
+ const sessionData2 = await this.services.sessionStore.getSession({ sessionId: id });
303
290
  if (sessionData2?.llmOverride) {
304
291
  const { resolveApiKeyForProvider } = await import("../utils/api-key-resolver.js");
305
292
  const apiKey = resolveApiKeyForProvider(sessionData2.llmOverride.provider);
@@ -324,7 +311,7 @@ class SessionManager {
324
311
  this.logger.info(`Restored session from storage: ${id}`);
325
312
  return session2;
326
313
  }
327
- const activeSessionKeys = await this.services.storageManager.getDatabase().list("session:");
314
+ const activeSessionKeys = await this.services.sessionStore.listSessionIds();
328
315
  if (activeSessionKeys.length >= this.maxSessions) {
329
316
  throw SessionError.maxSessionsExceeded(activeSessionKeys.length, this.maxSessions);
330
317
  }
@@ -338,7 +325,11 @@ class SessionManager {
338
325
  ...workspace?.id !== void 0 && { workspaceId: workspace.id }
339
326
  };
340
327
  try {
341
- await this.services.storageManager.getDatabase().set(sessionKey, sessionData);
328
+ await this.services.sessionStore.saveSession({
329
+ sessionId: id,
330
+ session: sessionData,
331
+ ttlSeconds: this.sessionTTL / 1e3
332
+ });
342
333
  } catch (error) {
343
334
  this.logger.error(`Failed to store session metadata for ${id}:`, {
344
335
  error: error instanceof Error ? error.message : String(error)
@@ -357,15 +348,13 @@ class SessionManager {
357
348
  session = new ChatSession(this.getChatSessionServices(), id, sessionLogger);
358
349
  await session.init();
359
350
  this.sessions.set(id, session);
360
- await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
361
351
  this.logger.info(`Created new session: ${id}`);
362
352
  return session;
363
353
  } catch (error) {
364
354
  this.logger.error(
365
355
  `Failed to initialize session ${id}: ${error instanceof Error ? error.message : String(error)}`
366
356
  );
367
- await this.services.storageManager.getDatabase().delete(sessionKey);
368
- await this.services.storageManager.getCache().delete(sessionKey);
357
+ await this.services.sessionStore.deleteSession({ sessionId: id });
369
358
  const reason = error instanceof Error ? error.message : "unknown error";
370
359
  throw SessionError.initializationFailed(id, reason);
371
360
  }
@@ -386,8 +375,7 @@ class SessionManager {
386
375
  return this.sessions.get(sessionId);
387
376
  }
388
377
  if (restoreFromStorage) {
389
- const sessionKey = `session:${sessionId}`;
390
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
378
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
391
379
  if (sessionData) {
392
380
  const runtimeConfig = this.services.stateManager.getRuntimeConfig();
393
381
  const agentId = runtimeConfig.agentCard?.name ?? runtimeConfig.agentId;
@@ -439,8 +427,7 @@ class SessionManager {
439
427
  await session.cleanup();
440
428
  this.sessions.delete(sessionId);
441
429
  }
442
- const sessionKey = `session:${sessionId}`;
443
- await this.services.storageManager.getCache().delete(sessionKey);
430
+ await this.services.sessionStore.evictSession({ sessionId });
444
431
  this.evictSessionInteractionState(sessionId);
445
432
  this.logger.debug(
446
433
  `Ended session (removed from memory, chat history preserved): ${sessionId}`
@@ -459,12 +446,9 @@ class SessionManager {
459
446
  await session.cleanup();
460
447
  this.sessions.delete(sessionId);
461
448
  }
462
- const sessionKey = `session:${sessionId}`;
463
- await this.services.storageManager.getDatabase().delete(sessionKey);
464
- await this.services.storageManager.getCache().delete(sessionKey);
449
+ await this.services.sessionStore.deleteSession({ sessionId });
465
450
  await this.deleteSessionInteractionState(sessionId);
466
- const messagesKey = `messages:${sessionId}`;
467
- await this.services.storageManager.getDatabase().delete(messagesKey);
451
+ await this.services.conversationStore.clearMessages({ sessionId });
468
452
  this.logger.debug(`Deleted session and conversation history: ${sessionId}`);
469
453
  }
470
454
  /**
@@ -480,7 +464,7 @@ class SessionManager {
480
464
  throw SessionError.notFound(sessionId);
481
465
  }
482
466
  await session.reset();
483
- await session.clearMessageQueue();
467
+ await session.clearPendingInput();
484
468
  await Promise.all([
485
469
  this.services.toolManager.deleteSessionState(sessionId),
486
470
  this.services.approvalManager.deleteSessionState(sessionId)
@@ -489,15 +473,15 @@ class SessionManager {
489
473
  this.services.stateManager.clearSessionOverride(sessionId);
490
474
  await session.switchLLM(this.services.stateManager.getRuntimeConfig().llm);
491
475
  }
492
- await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
493
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
476
+ await this.runWithSessionDataLock(sessionId, async () => {
477
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
494
478
  if (!sessionData) {
495
479
  return;
496
480
  }
497
481
  sessionData.messageCount = 0;
498
482
  sessionData.lastActivity = Date.now();
499
483
  delete sessionData.llmOverride;
500
- await this.persistSessionData(sessionKey, sessionData);
484
+ await this.persistSessionData(sessionId, sessionData);
501
485
  });
502
486
  this.logger.debug(`Reset session conversation: ${sessionId}`);
503
487
  }
@@ -508,8 +492,7 @@ class SessionManager {
508
492
  */
509
493
  async listSessions() {
510
494
  await this.ensureInitialized();
511
- const sessionKeys = await this.services.storageManager.getDatabase().list("session:");
512
- return sessionKeys.map((key) => key.replace("session:", ""));
495
+ return await this.services.sessionStore.listSessionIds();
513
496
  }
514
497
  /**
515
498
  * Gets metadata for a specific session.
@@ -519,8 +502,7 @@ class SessionManager {
519
502
  */
520
503
  async getSessionMetadata(sessionId) {
521
504
  await this.ensureInitialized();
522
- const sessionKey = `session:${sessionId}`;
523
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
505
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
524
506
  if (!sessionData) return void 0;
525
507
  return {
526
508
  createdAt: sessionData.createdAt,
@@ -541,8 +523,7 @@ class SessionManager {
541
523
  }
542
524
  async getSessionSystemPromptContributors(sessionId) {
543
525
  await this.ensureInitialized();
544
- const sessionKey = `session:${sessionId}`;
545
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
526
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
546
527
  if (!sessionData) {
547
528
  throw SessionError.notFound(sessionId);
548
529
  }
@@ -550,8 +531,8 @@ class SessionManager {
550
531
  }
551
532
  async upsertSessionSystemPromptContributor(sessionId, contributor) {
552
533
  await this.ensureInitialized();
553
- return await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
554
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
534
+ return await this.runWithSessionDataLock(sessionId, async () => {
535
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
555
536
  if (!sessionData) {
556
537
  throw SessionError.notFound(sessionId);
557
538
  }
@@ -563,14 +544,14 @@ class SessionManager {
563
544
  sessionData.metadata = sessionData.metadata || {};
564
545
  sessionData.metadata.systemPromptContributors = next;
565
546
  sessionData.lastActivity = Date.now();
566
- await this.persistSessionData(sessionKey, sessionData);
547
+ await this.persistSessionData(sessionId, sessionData);
567
548
  return replaced;
568
549
  });
569
550
  }
570
551
  async removeSessionSystemPromptContributor(sessionId, contributorId) {
571
552
  await this.ensureInitialized();
572
- return await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
573
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
553
+ return await this.runWithSessionDataLock(sessionId, async () => {
554
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
574
555
  if (!sessionData) {
575
556
  throw SessionError.notFound(sessionId);
576
557
  }
@@ -583,7 +564,7 @@ class SessionManager {
583
564
  sessionData.metadata = sessionData.metadata || {};
584
565
  sessionData.metadata.systemPromptContributors = next;
585
566
  sessionData.lastActivity = Date.now();
586
- await this.persistSessionData(sessionKey, sessionData);
567
+ await this.persistSessionData(sessionId, sessionData);
587
568
  return true;
588
569
  });
589
570
  }
@@ -601,8 +582,8 @@ class SessionManager {
601
582
  }
602
583
  async markUntrackedChatGPTLoginUsage(sessionId) {
603
584
  await this.ensureInitialized();
604
- await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
605
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
585
+ await this.runWithSessionDataLock(sessionId, async () => {
586
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
606
587
  if (!sessionData || sessionData.usageTracking?.hasUntrackedChatGPTLoginUsage) {
607
588
  return;
608
589
  }
@@ -610,7 +591,7 @@ class SessionManager {
610
591
  ...sessionData.usageTracking ?? {},
611
592
  hasUntrackedChatGPTLoginUsage: true
612
593
  };
613
- await this.persistSessionData(sessionKey, sessionData);
594
+ await this.persistSessionData(sessionId, sessionData);
614
595
  });
615
596
  }
616
597
  /**
@@ -626,13 +607,13 @@ class SessionManager {
626
607
  * Updates the last activity timestamp for a session.
627
608
  */
628
609
  async updateSessionActivity(sessionId) {
629
- await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
630
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
610
+ await this.runWithSessionDataLock(sessionId, async () => {
611
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
631
612
  if (!sessionData) {
632
613
  return;
633
614
  }
634
615
  sessionData.lastActivity = Date.now();
635
- await this.persistSessionData(sessionKey, sessionData);
616
+ await this.persistSessionData(sessionId, sessionData);
636
617
  });
637
618
  }
638
619
  /**
@@ -640,14 +621,14 @@ class SessionManager {
640
621
  */
641
622
  async incrementMessageCount(sessionId) {
642
623
  await this.ensureInitialized();
643
- await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
644
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
624
+ await this.runWithSessionDataLock(sessionId, async () => {
625
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
645
626
  if (!sessionData) {
646
627
  return;
647
628
  }
648
629
  sessionData.messageCount++;
649
630
  sessionData.lastActivity = Date.now();
650
- await this.persistSessionData(sessionKey, sessionData);
631
+ await this.persistSessionData(sessionId, sessionData);
651
632
  });
652
633
  }
653
634
  /**
@@ -663,11 +644,13 @@ class SessionManager {
663
644
  */
664
645
  async accumulateTokenUsage(sessionId, usage, cost, modelInfo) {
665
646
  await this.ensureInitialized();
666
- await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
667
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
647
+ await this.runWithSessionDataLock(sessionId, async () => {
648
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
649
+ const normalizedUsage = normalizeTokenUsageForAccounting(usage);
650
+ const finiteCost = typeof cost === "number" && Number.isFinite(cost) ? cost : void 0;
668
651
  if (!sessionData) return;
669
652
  if (modelInfo) {
670
- this.updateModelStats(sessionData, usage, cost, modelInfo);
653
+ this.updateModelStats(sessionData, normalizedUsage, finiteCost, modelInfo);
671
654
  }
672
655
  if (!sessionData.tokenUsage) {
673
656
  sessionData.tokenUsage = {
@@ -679,12 +662,12 @@ class SessionManager {
679
662
  totalTokens: 0
680
663
  };
681
664
  }
682
- this.accumulateTokensInto(sessionData.tokenUsage, usage);
683
- if (cost !== void 0) {
684
- sessionData.estimatedCost = (sessionData.estimatedCost ?? 0) + cost;
665
+ this.accumulateTokensInto(sessionData.tokenUsage, normalizedUsage);
666
+ if (finiteCost !== void 0) {
667
+ sessionData.estimatedCost = (sessionData.estimatedCost ?? 0) + finiteCost;
685
668
  }
686
669
  sessionData.lastActivity = Date.now();
687
- await this.persistSessionData(sessionKey, sessionData);
670
+ await this.persistSessionData(sessionId, sessionData);
688
671
  });
689
672
  }
690
673
  /**
@@ -745,8 +728,8 @@ class SessionManager {
745
728
  async setSessionTitle(sessionId, title, opts = {}) {
746
729
  await this.ensureInitialized();
747
730
  const normalized = title.trim().slice(0, 80);
748
- await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
749
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
731
+ await this.runWithSessionDataLock(sessionId, async () => {
732
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
750
733
  if (!sessionData) {
751
734
  throw SessionError.notFound(sessionId);
752
735
  }
@@ -756,7 +739,7 @@ class SessionManager {
756
739
  sessionData.metadata = sessionData.metadata || {};
757
740
  sessionData.metadata.title = normalized;
758
741
  sessionData.lastActivity = Date.now();
759
- await this.persistSessionData(sessionKey, sessionData);
742
+ await this.persistSessionData(sessionId, sessionData);
760
743
  });
761
744
  }
762
745
  /**
@@ -764,8 +747,7 @@ class SessionManager {
764
747
  */
765
748
  async getSessionTitle(sessionId) {
766
749
  await this.ensureInitialized();
767
- const sessionKey = `session:${sessionId}`;
768
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
750
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
769
751
  return sessionData?.metadata?.title;
770
752
  }
771
753
  /**
@@ -776,8 +758,7 @@ class SessionManager {
776
758
  const now = Date.now();
777
759
  const expiredSessions = [];
778
760
  for (const [sessionId, _session] of this.sessions.entries()) {
779
- const sessionKey = `session:${sessionId}`;
780
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
761
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
781
762
  if (sessionData && now - sessionData.lastActivity > this.sessionTTL) {
782
763
  expiredSessions.push(sessionId);
783
764
  }
@@ -887,8 +868,8 @@ class SessionManager {
887
868
  return configWithoutApiKey;
888
869
  }
889
870
  async setPersistedSessionLLMOverride(sessionId, llmOverride) {
890
- await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
891
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
871
+ await this.runWithSessionDataLock(sessionId, async () => {
872
+ const sessionData = await this.services.sessionStore.getSession({ sessionId });
892
873
  if (!sessionData) {
893
874
  return;
894
875
  }
@@ -897,7 +878,7 @@ class SessionManager {
897
878
  } else {
898
879
  delete sessionData.llmOverride;
899
880
  }
900
- await this.persistSessionData(sessionKey, sessionData);
881
+ await this.persistSessionData(sessionId, sessionData);
901
882
  });
902
883
  }
903
884
  async deleteSessionInteractionState(sessionId) {
@@ -905,7 +886,8 @@ class SessionManager {
905
886
  await Promise.all([
906
887
  this.services.toolManager.deleteSessionState(sessionId),
907
888
  this.services.approvalManager.deleteSessionState(sessionId),
908
- this.services.messageQueueStore.delete(sessionId)
889
+ this.services.steerQueueStore.delete({ sessionId }),
890
+ this.services.followUpQueueStore.delete({ sessionId })
909
891
  ]);
910
892
  }
911
893
  evictSessionInteractionState(sessionId) {
@@ -916,7 +898,7 @@ class SessionManager {
916
898
  const sessionKey = `session:${sessionId}`;
917
899
  const previousLock = this.sessionDataLocks.get(sessionKey) ?? Promise.resolve();
918
900
  const currentResult = previousLock.catch(() => {
919
- }).then(() => fn(sessionKey));
901
+ }).then(() => fn());
920
902
  const currentLock = currentResult.then(
921
903
  () => void 0,
922
904
  () => void 0
@@ -930,9 +912,12 @@ class SessionManager {
930
912
  }
931
913
  }
932
914
  }
933
- async persistSessionData(sessionKey, sessionData) {
934
- await this.services.storageManager.getDatabase().set(sessionKey, sessionData);
935
- await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
915
+ async persistSessionData(sessionId, sessionData) {
916
+ await this.services.sessionStore.saveSession({
917
+ sessionId,
918
+ session: sessionData,
919
+ ttlSeconds: this.sessionTTL / 1e3
920
+ });
936
921
  }
937
922
  /**
938
923
  * Get session statistics for monitoring and debugging.
@@ -956,8 +941,7 @@ class SessionManager {
956
941
  */
957
942
  async getSessionData(sessionId) {
958
943
  await this.ensureInitialized();
959
- const sessionKey = `session:${sessionId}`;
960
- return await this.services.storageManager.getDatabase().get(sessionKey);
944
+ return await this.services.sessionStore.getSession({ sessionId });
961
945
  }
962
946
  /**
963
947
  * Cleanup all sessions and resources.
@@ -23,10 +23,8 @@ __export(title_generator_exports, {
23
23
  });
24
24
  module.exports = __toCommonJS(title_generator_exports);
25
25
  var import_factory = require("../llm/services/factory.js");
26
- var import_events = require("../events/index.js");
27
- var import_memory = require("./history/memory.js");
28
- var import_message_queue = require("./message-queue.js");
29
- async function generateSessionTitle(config, toolManager, systemPromptManager, resourceManager, userText, logger, opts = {}) {
26
+ var import_ai = require("ai");
27
+ async function generateSessionTitle(config, userText, logger, opts = {}) {
30
28
  const timeoutMs = opts.timeoutMs;
31
29
  const controller = timeoutMs !== void 0 ? new AbortController() : void 0;
32
30
  let timer;
@@ -34,24 +32,12 @@ async function generateSessionTitle(config, toolManager, systemPromptManager, re
34
32
  timer = setTimeout(() => controller.abort(), timeoutMs);
35
33
  }
36
34
  try {
37
- const history = new import_memory.MemoryHistoryProvider(logger);
38
- const bus = new import_events.SessionEventBus();
39
- const sessionId = `titlegen-${Math.random().toString(36).slice(2)}`;
40
- const options = {
41
- messageQueue: import_message_queue.MessageQueueService.createEphemeral(bus, logger, sessionId)
42
- };
43
- const tempService = (0, import_factory.createLLMService)(
35
+ const providerContext = opts.providerContext ?? {};
36
+ const model = opts.languageModelFactory?.({
44
37
  config,
45
- toolManager,
46
- systemPromptManager,
47
- history,
48
- bus,
49
- sessionId,
50
- resourceManager,
51
- logger,
52
- options,
53
- opts.languageModelFactory
54
- );
38
+ context: providerContext,
39
+ createDefaultLanguageModel: () => (0, import_factory.createVercelModel)(config, providerContext)
40
+ }) ?? (0, import_factory.createVercelModel)(config, providerContext);
55
41
  const instruction = [
56
42
  "Generate a short conversation title from the following user message.",
57
43
  "Rules: 3\u20138 words; no surrounding punctuation, emojis, or PII; return only the title.",
@@ -59,11 +45,13 @@ async function generateSessionTitle(config, toolManager, systemPromptManager, re
59
45
  "Message:",
60
46
  sanitizeUserText(userText, 512)
61
47
  ].join("\n");
62
- const streamResult = await tempService.stream(
63
- instruction,
64
- controller ? { signal: controller.signal } : void 0
65
- );
66
- const processed = postProcessTitle(streamResult.text);
48
+ const result = await (0, import_ai.generateText)({
49
+ model,
50
+ prompt: instruction,
51
+ maxOutputTokens: 32,
52
+ ...controller ? { abortSignal: controller.signal } : {}
53
+ });
54
+ const processed = postProcessTitle(result.text);
67
55
  if (!processed) {
68
56
  return { error: "LLM returned empty title" };
69
57
  }
@@ -1,9 +1,6 @@
1
1
  import type { ValidatedLLMConfig } from '../llm/schemas.js';
2
- import type { ToolManager } from '../tools/tool-manager.js';
3
- import type { SystemPromptManager } from '../systemPrompt/manager.js';
4
- import type { ResourceManager } from '../resources/index.js';
5
2
  import type { Logger } from '../logger/v2/types.js';
6
- import type { LanguageModelFactory } from '../llm/services/types.js';
3
+ import type { DextoProviderContext, LanguageModelFactory } from '../llm/services/types.js';
7
4
  export interface GenerateSessionTitleResult {
8
5
  title?: string;
9
6
  error?: string;
@@ -13,9 +10,10 @@ export interface GenerateSessionTitleResult {
13
10
  * Generate a concise title for a chat based on the first user message.
14
11
  * Runs a lightweight, isolated LLM completion that does not touch real history.
15
12
  */
16
- export declare function generateSessionTitle(config: ValidatedLLMConfig, toolManager: ToolManager, systemPromptManager: SystemPromptManager, resourceManager: ResourceManager, userText: string, logger: Logger, opts?: {
17
- timeoutMs?: number;
13
+ export declare function generateSessionTitle(config: ValidatedLLMConfig, userText: string, logger: Logger, opts?: {
18
14
  languageModelFactory?: LanguageModelFactory;
15
+ providerContext?: DextoProviderContext;
16
+ timeoutMs?: number;
19
17
  }): Promise<GenerateSessionTitleResult>;
20
18
  /**
21
19
  * Heuristic fallback when the LLM-based title fails.
@@ -1 +1 @@
1
- {"version":3,"file":"title-generator.d.ts","sourceRoot":"","sources":["../../src/session/title-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAA2B,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAM9F,MAAM,WAAW,0BAA0B;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACtC,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;CAAO,GAC/E,OAAO,CAAC,0BAA0B,CAAC,CAyDrC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA8BzE"}
1
+ {"version":3,"file":"title-generator.d.ts","sourceRoot":"","sources":["../../src/session/title-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAI3F,MAAM,WAAW,0BAA0B;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACtC,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IACF,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACjB,GACP,OAAO,CAAC,0BAA0B,CAAC,CAgDrC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA8BzE"}