@dexto/core 1.7.2 → 1.8.1

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 (616) hide show
  1. package/dist/agent/DextoAgent.cjs +163 -77
  2. package/dist/agent/DextoAgent.d.ts +73 -19
  3. package/dist/agent/DextoAgent.d.ts.map +1 -1
  4. package/dist/agent/DextoAgent.js +165 -67
  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/agent/types.d.ts +1 -1
  17. package/dist/agent/types.d.ts.map +1 -1
  18. package/dist/approval/error-codes.cjs +1 -1
  19. package/dist/approval/error-codes.d.ts +1 -1
  20. package/dist/approval/error-codes.d.ts.map +1 -1
  21. package/dist/approval/error-codes.js +2 -2
  22. package/dist/approval/errors.cjs +2 -5
  23. package/dist/approval/errors.d.ts.map +1 -1
  24. package/dist/approval/errors.js +3 -6
  25. package/dist/approval/factory.cjs +19 -4
  26. package/dist/approval/factory.d.ts +4 -1
  27. package/dist/approval/factory.d.ts.map +1 -1
  28. package/dist/approval/factory.js +19 -5
  29. package/dist/approval/index.d.ts +1 -1
  30. package/dist/approval/index.d.ts.map +1 -1
  31. package/dist/approval/index.js +1 -1
  32. package/dist/approval/manager.cjs +168 -26
  33. package/dist/approval/manager.d.ts +46 -12
  34. package/dist/approval/manager.d.ts.map +1 -1
  35. package/dist/approval/manager.js +177 -29
  36. package/dist/approval/schemas.cjs +26 -26
  37. package/dist/approval/schemas.d.ts +29 -29
  38. package/dist/approval/schemas.d.ts.map +1 -1
  39. package/dist/approval/schemas.js +23 -23
  40. package/dist/approval/types.cjs +5 -5
  41. package/dist/approval/types.d.ts +18 -18
  42. package/dist/approval/types.d.ts.map +1 -1
  43. package/dist/approval/types.js +6 -6
  44. package/dist/{chunk-PTJYTZNU.js → chunk-C6A6W6XS.js} +1 -44
  45. package/dist/config/index.cjs +75 -0
  46. package/dist/config/index.d.ts +15 -0
  47. package/dist/config/index.d.ts.map +1 -0
  48. package/dist/config/index.js +50 -0
  49. package/dist/context/compaction/overflow.d.ts +1 -1
  50. package/dist/context/compaction/overflow.d.ts.map +1 -1
  51. package/dist/context/compaction/overflow.js +1 -1
  52. package/dist/context/compaction/strategies/noop.js +1 -1
  53. package/dist/context/compaction/strategies/reactive-overflow-compaction.js +1 -1
  54. package/dist/context/content-clone.cjs +131 -0
  55. package/dist/context/content-clone.d.ts +7 -0
  56. package/dist/context/content-clone.d.ts.map +1 -0
  57. package/dist/context/content-clone.js +104 -0
  58. package/dist/context/error-codes.js +1 -1
  59. package/dist/context/errors.js +1 -1
  60. package/dist/context/index.cjs +2 -0
  61. package/dist/context/index.d.ts +1 -0
  62. package/dist/context/index.d.ts.map +1 -1
  63. package/dist/context/index.js +2 -1
  64. package/dist/context/manager.cjs +52 -41
  65. package/dist/context/manager.d.ts +8 -8
  66. package/dist/context/manager.d.ts.map +1 -1
  67. package/dist/context/manager.js +46 -35
  68. package/dist/context/media-helpers.js +1 -1
  69. package/dist/context/schemas.cjs +77 -0
  70. package/dist/context/schemas.d.ts +5 -0
  71. package/dist/context/schemas.d.ts.map +1 -0
  72. package/dist/context/schemas.js +53 -0
  73. package/dist/context/types.d.ts +1 -1
  74. package/dist/context/types.d.ts.map +1 -1
  75. package/dist/context/types.js +1 -1
  76. package/dist/context/utils.cjs +73 -72
  77. package/dist/context/utils.d.ts +4 -4
  78. package/dist/context/utils.d.ts.map +1 -1
  79. package/dist/context/utils.js +72 -71
  80. package/dist/errors/DextoBaseError.js +1 -1
  81. package/dist/errors/DextoRuntimeError.js +1 -1
  82. package/dist/errors/DextoValidationError.js +1 -1
  83. package/dist/errors/index.js +1 -1
  84. package/dist/errors/result-bridge.js +1 -1
  85. package/dist/errors/types.js +1 -1
  86. package/dist/events/index.cjs +9 -1
  87. package/dist/events/index.d.ts +22 -10
  88. package/dist/events/index.d.ts.map +1 -1
  89. package/dist/events/index.js +10 -2
  90. package/dist/hooks/builtins/content-policy.js +1 -1
  91. package/dist/hooks/builtins/response-sanitizer.js +1 -1
  92. package/dist/hooks/error-codes.js +1 -1
  93. package/dist/hooks/index.js +1 -1
  94. package/dist/hooks/manager.cjs +1 -1
  95. package/dist/hooks/manager.d.ts +2 -2
  96. package/dist/hooks/manager.d.ts.map +1 -1
  97. package/dist/hooks/manager.js +2 -2
  98. package/dist/hooks/types.d.ts +2 -2
  99. package/dist/hooks/types.d.ts.map +1 -1
  100. package/dist/index.browser.cjs +9 -9
  101. package/dist/index.browser.d.ts +4 -4
  102. package/dist/index.browser.d.ts.map +1 -1
  103. package/dist/index.browser.js +2 -2
  104. package/dist/index.cjs +2 -0
  105. package/dist/index.d.ts +1 -0
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +2 -1
  108. package/dist/llm/curation-config.cjs +3 -3
  109. package/dist/llm/curation-config.d.ts +1 -1
  110. package/dist/llm/curation-config.js +4 -4
  111. package/dist/llm/curation.cjs +2 -2
  112. package/dist/llm/curation.d.ts +2 -2
  113. package/dist/llm/curation.d.ts.map +1 -1
  114. package/dist/llm/curation.js +2 -2
  115. package/dist/llm/error-codes.js +1 -1
  116. package/dist/llm/errors.cjs +3 -3
  117. package/dist/llm/errors.d.ts +1 -1
  118. package/dist/llm/errors.d.ts.map +1 -1
  119. package/dist/llm/errors.js +2 -2
  120. package/dist/llm/{reasoning/anthropic-betas.cjs → executor/index.cjs} +10 -9
  121. package/dist/llm/executor/index.d.ts +2 -0
  122. package/dist/llm/executor/index.d.ts.map +1 -0
  123. package/dist/llm/executor/index.js +11 -0
  124. package/dist/llm/executor/provider-options.cjs +22 -25
  125. package/dist/llm/executor/provider-options.d.ts +1 -1
  126. package/dist/llm/executor/provider-options.d.ts.map +1 -1
  127. package/dist/llm/executor/provider-options.js +18 -17
  128. package/dist/llm/executor/stream-processor.cjs +28 -139
  129. package/dist/llm/executor/stream-processor.d.ts +3 -14
  130. package/dist/llm/executor/stream-processor.d.ts.map +1 -1
  131. package/dist/llm/executor/stream-processor.js +29 -140
  132. package/dist/llm/{reasoning/profiles/openai.cjs → executor/tool-definitions.cjs} +22 -18
  133. package/dist/llm/executor/tool-definitions.d.ts +4 -0
  134. package/dist/llm/executor/tool-definitions.d.ts.map +1 -0
  135. package/dist/llm/executor/tool-definitions.js +22 -0
  136. package/dist/llm/executor/tool-output-truncator.js +1 -1
  137. package/dist/llm/executor/turn-executor.cjs +1093 -458
  138. package/dist/llm/executor/turn-executor.d.ts +269 -43
  139. package/dist/llm/executor/turn-executor.d.ts.map +1 -1
  140. package/dist/llm/executor/turn-executor.js +1079 -405
  141. package/dist/llm/executor/types.d.ts +7 -1
  142. package/dist/llm/executor/types.d.ts.map +1 -1
  143. package/dist/llm/formatters/vercel.cjs +2 -2
  144. package/dist/llm/formatters/vercel.d.ts +1 -1
  145. package/dist/llm/formatters/vercel.d.ts.map +1 -1
  146. package/dist/llm/formatters/vercel.js +1 -1
  147. package/dist/llm/index.cjs +2 -4
  148. package/dist/llm/index.d.ts +1 -2
  149. package/dist/llm/index.d.ts.map +1 -1
  150. package/dist/llm/index.js +2 -3
  151. package/dist/llm/providers/codex-app-server.cjs +22 -2
  152. package/dist/llm/providers/codex-app-server.d.ts.map +1 -1
  153. package/dist/llm/providers/codex-app-server.js +23 -3
  154. package/dist/llm/providers/codex-base-url.js +1 -1
  155. package/dist/llm/providers/local/ai-sdk-adapter.js +1 -1
  156. package/dist/llm/providers/local/downloader.js +1 -1
  157. package/dist/llm/providers/local/error-codes.js +1 -1
  158. package/dist/llm/providers/local/errors.js +1 -1
  159. package/dist/llm/providers/local/gpu-detector.js +1 -1
  160. package/dist/llm/providers/local/index.js +1 -1
  161. package/dist/llm/providers/local/node-llama-provider.js +1 -1
  162. package/dist/llm/providers/local/ollama-provider.js +1 -1
  163. package/dist/llm/providers/local/registry.js +1 -1
  164. package/dist/llm/providers/local/schemas.js +1 -1
  165. package/dist/llm/providers/openrouter-model-registry.js +1 -1
  166. package/dist/llm/registry/auto-update.cjs +5 -5
  167. package/dist/llm/registry/auto-update.d.ts.map +1 -1
  168. package/dist/llm/registry/auto-update.js +3 -3
  169. package/dist/llm/registry/index.cjs +96 -789
  170. package/dist/llm/registry/index.d.ts +4 -323
  171. package/dist/llm/registry/index.d.ts.map +1 -1
  172. package/dist/llm/registry/index.js +100 -763
  173. package/dist/llm/registry/sync.d.ts +2 -2
  174. package/dist/llm/registry/sync.d.ts.map +1 -1
  175. package/dist/llm/registry/sync.js +1 -1
  176. package/dist/llm/resolver.cjs +7 -6
  177. package/dist/llm/resolver.d.ts +1 -1
  178. package/dist/llm/resolver.js +5 -5
  179. package/dist/llm/schemas.cjs +14 -14
  180. package/dist/llm/schemas.d.ts +1 -1
  181. package/dist/llm/schemas.d.ts.map +1 -1
  182. package/dist/llm/schemas.js +6 -5
  183. package/dist/llm/services/factory.cjs +13 -15
  184. package/dist/llm/services/factory.d.ts +3 -3
  185. package/dist/llm/services/factory.d.ts.map +1 -1
  186. package/dist/llm/services/factory.js +16 -16
  187. package/dist/llm/services/types.d.ts +11 -2
  188. package/dist/llm/services/types.d.ts.map +1 -1
  189. package/dist/llm/services/vercel.cjs +23 -8
  190. package/dist/llm/services/vercel.d.ts +11 -7
  191. package/dist/llm/services/vercel.d.ts.map +1 -1
  192. package/dist/llm/services/vercel.js +24 -9
  193. package/dist/llm/usage-metadata.cjs +23 -6
  194. package/dist/llm/usage-metadata.d.ts +3 -2
  195. package/dist/llm/usage-metadata.d.ts.map +1 -1
  196. package/dist/llm/usage-metadata.js +20 -7
  197. package/dist/llm/usage-scope.js +1 -1
  198. package/dist/llm/usage-summary.d.ts +1 -1
  199. package/dist/llm/usage-summary.js +1 -1
  200. package/dist/llm/validation.cjs +4 -4
  201. package/dist/llm/validation.d.ts +1 -1
  202. package/dist/llm/validation.js +2 -2
  203. package/dist/logger/browser.js +1 -1
  204. package/dist/logger/default-logger-factory.js +1 -1
  205. package/dist/logger/factory.js +1 -1
  206. package/dist/logger/index.js +1 -1
  207. package/dist/logger/logger.js +1 -1
  208. package/dist/logger/v2/dexto-logger.js +1 -1
  209. package/dist/logger/v2/error-codes.js +1 -1
  210. package/dist/logger/v2/errors.js +1 -1
  211. package/dist/logger/v2/schemas.js +1 -1
  212. package/dist/logger/v2/test-utils.js +1 -1
  213. package/dist/logger/v2/transport-factory.js +1 -1
  214. package/dist/logger/v2/transports/console-transport.js +1 -1
  215. package/dist/logger/v2/transports/file-transport.js +1 -1
  216. package/dist/logger/v2/transports/silent-transport.js +1 -1
  217. package/dist/logger/v2/types.js +1 -1
  218. package/dist/mcp/bundled-config.js +1 -1
  219. package/dist/mcp/error-codes.js +1 -1
  220. package/dist/mcp/errors.js +1 -1
  221. package/dist/mcp/index.js +1 -1
  222. package/dist/mcp/manager.js +1 -1
  223. package/dist/mcp/mcp-client.js +1 -1
  224. package/dist/mcp/resolver.js +1 -1
  225. package/dist/mcp/schemas.js +1 -1
  226. package/dist/memory/error-codes.js +1 -1
  227. package/dist/memory/errors.js +1 -1
  228. package/dist/memory/index.js +1 -1
  229. package/dist/memory/manager.cjs +7 -27
  230. package/dist/memory/manager.d.ts +4 -12
  231. package/dist/memory/manager.d.ts.map +1 -1
  232. package/dist/memory/manager.js +8 -28
  233. package/dist/memory/schemas.js +1 -1
  234. package/dist/prompts/error-codes.js +1 -1
  235. package/dist/prompts/errors.js +1 -1
  236. package/dist/prompts/index.js +1 -1
  237. package/dist/prompts/name-validation.js +1 -1
  238. package/dist/prompts/prompt-manager.cjs +9 -38
  239. package/dist/prompts/prompt-manager.d.ts +2 -10
  240. package/dist/prompts/prompt-manager.d.ts.map +1 -1
  241. package/dist/prompts/prompt-manager.js +10 -39
  242. package/dist/prompts/providers/config-prompt-provider.cjs +8 -87
  243. package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
  244. package/dist/prompts/providers/config-prompt-provider.js +9 -88
  245. package/dist/prompts/providers/custom-prompt-provider.cjs +21 -22
  246. package/dist/prompts/providers/custom-prompt-provider.d.ts +19 -4
  247. package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
  248. package/dist/prompts/providers/custom-prompt-provider.js +22 -23
  249. package/dist/prompts/providers/mcp-prompt-provider.js +1 -1
  250. package/dist/prompts/schemas.cjs +2 -24
  251. package/dist/prompts/schemas.d.ts +0 -52
  252. package/dist/prompts/schemas.d.ts.map +1 -1
  253. package/dist/prompts/schemas.js +3 -25
  254. package/dist/prompts/types.d.ts +5 -32
  255. package/dist/prompts/types.d.ts.map +1 -1
  256. package/dist/prompts/utils.js +1 -1
  257. package/dist/resources/agent-resources-provider.js +1 -1
  258. package/dist/resources/error-codes.js +1 -1
  259. package/dist/resources/errors.js +1 -1
  260. package/dist/resources/handlers/blob-handler.cjs +14 -11
  261. package/dist/resources/handlers/blob-handler.d.ts +4 -4
  262. package/dist/resources/handlers/blob-handler.d.ts.map +1 -1
  263. package/dist/resources/handlers/blob-handler.js +15 -12
  264. package/dist/resources/handlers/factory.cjs +3 -3
  265. package/dist/resources/handlers/factory.js +4 -4
  266. package/dist/resources/handlers/filesystem-handler.js +1 -1
  267. package/dist/resources/handlers/types.d.ts +2 -2
  268. package/dist/resources/handlers/types.d.ts.map +1 -1
  269. package/dist/resources/index.js +1 -1
  270. package/dist/resources/manager.cjs +10 -7
  271. package/dist/resources/manager.d.ts +4 -4
  272. package/dist/resources/manager.d.ts.map +1 -1
  273. package/dist/resources/manager.js +11 -8
  274. package/dist/resources/reference-parser.js +1 -1
  275. package/dist/resources/schemas.cjs +1 -1
  276. package/dist/resources/schemas.d.ts +2 -2
  277. package/dist/resources/schemas.js +2 -2
  278. package/dist/runtime/host-runtime.js +1 -1
  279. package/dist/runtime/index.cjs +3 -0
  280. package/dist/runtime/index.d.ts +2 -0
  281. package/dist/runtime/index.d.ts.map +1 -1
  282. package/dist/runtime/index.js +3 -1
  283. package/dist/runtime/run-context.js +1 -1
  284. package/dist/search/index.js +1 -1
  285. package/dist/search/search-service.cjs +6 -13
  286. package/dist/search/search-service.d.ts +5 -3
  287. package/dist/search/search-service.d.ts.map +1 -1
  288. package/dist/search/search-service.js +7 -14
  289. package/dist/session/chat-session.cjs +264 -108
  290. package/dist/session/chat-session.d.ts +75 -21
  291. package/dist/session/chat-session.d.ts.map +1 -1
  292. package/dist/session/chat-session.js +268 -108
  293. package/dist/session/error-codes.js +1 -1
  294. package/dist/session/errors.js +1 -1
  295. package/dist/session/index.cjs +19 -2
  296. package/dist/session/index.d.ts +4 -3
  297. package/dist/session/index.d.ts.map +1 -1
  298. package/dist/session/index.js +19 -3
  299. package/dist/session/message-queue.cjs +82 -51
  300. package/dist/session/message-queue.d.ts +13 -8
  301. package/dist/session/message-queue.d.ts.map +1 -1
  302. package/dist/session/message-queue.js +83 -52
  303. package/dist/session/queue-clone.cjs +50 -0
  304. package/dist/session/queue-clone.d.ts +5 -0
  305. package/dist/session/queue-clone.d.ts.map +1 -0
  306. package/dist/session/queue-clone.js +25 -0
  307. package/dist/session/schemas.cjs +74 -2
  308. package/dist/session/schemas.d.ts +94 -0
  309. package/dist/session/schemas.d.ts.map +1 -1
  310. package/dist/session/schemas.js +69 -2
  311. package/dist/session/session-manager.cjs +107 -123
  312. package/dist/session/session-manager.d.ts +8 -7
  313. package/dist/session/session-manager.d.ts.map +1 -1
  314. package/dist/session/session-manager.js +108 -124
  315. package/dist/session/title-generator.cjs +14 -26
  316. package/dist/session/title-generator.d.ts +4 -6
  317. package/dist/session/title-generator.d.ts.map +1 -1
  318. package/dist/session/title-generator.js +16 -28
  319. package/dist/session/types.cjs +28 -0
  320. package/dist/session/types.d.ts +5 -1
  321. package/dist/session/types.d.ts.map +1 -1
  322. package/dist/session/types.js +19 -0
  323. package/dist/{session/history/factory.cjs → skills/index.cjs} +9 -9
  324. package/dist/skills/index.d.ts +4 -0
  325. package/dist/skills/index.d.ts.map +1 -0
  326. package/dist/skills/index.js +7 -0
  327. package/dist/skills/skill-manager.cjs +76 -0
  328. package/dist/skills/skill-manager.d.ts +13 -0
  329. package/dist/skills/skill-manager.d.ts.map +1 -0
  330. package/dist/skills/skill-manager.js +53 -0
  331. package/dist/skills/types.d.ts +24 -0
  332. package/dist/skills/types.d.ts.map +1 -0
  333. package/dist/skills/workspace-skill-source.cjs +120 -0
  334. package/dist/skills/workspace-skill-source.d.ts +16 -0
  335. package/dist/skills/workspace-skill-source.d.ts.map +1 -0
  336. package/dist/skills/workspace-skill-source.js +97 -0
  337. package/dist/{llm → storage/approvals}/types.cjs +13 -30
  338. package/dist/storage/approvals/types.d.ts +54 -0
  339. package/dist/storage/approvals/types.d.ts.map +1 -0
  340. package/dist/storage/approvals/types.js +14 -0
  341. package/dist/storage/artifacts/types.d.ts +73 -0
  342. package/dist/storage/artifacts/types.d.ts.map +1 -0
  343. package/dist/storage/conversation/database.cjs +233 -0
  344. package/dist/storage/conversation/database.d.ts +38 -0
  345. package/dist/storage/conversation/database.d.ts.map +1 -0
  346. package/dist/storage/conversation/database.js +210 -0
  347. package/dist/storage/conversation/types.cjs +16 -0
  348. package/dist/storage/conversation/types.d.ts +21 -0
  349. package/dist/storage/conversation/types.d.ts.map +1 -0
  350. package/dist/storage/conversation/types.js +0 -0
  351. package/dist/storage/database/types.d.ts +4 -0
  352. package/dist/storage/database/types.d.ts.map +1 -1
  353. package/dist/storage/error-codes.js +1 -1
  354. package/dist/storage/errors.cjs +6 -6
  355. package/dist/storage/errors.d.ts +2 -2
  356. package/dist/storage/errors.js +7 -7
  357. package/dist/storage/index.cjs +42 -5
  358. package/dist/storage/index.d.ts +19 -8
  359. package/dist/storage/index.d.ts.map +1 -1
  360. package/dist/storage/index.js +39 -4
  361. package/dist/storage/memories/types.cjs +16 -0
  362. package/dist/storage/memories/types.d.ts +17 -0
  363. package/dist/storage/memories/types.d.ts.map +1 -0
  364. package/dist/storage/memories/types.js +0 -0
  365. package/dist/storage/message-queue/types.cjs +16 -0
  366. package/dist/storage/message-queue/types.d.ts +15 -0
  367. package/dist/storage/message-queue/types.d.ts.map +1 -0
  368. package/dist/storage/message-queue/types.js +0 -0
  369. package/dist/storage/prompts/types.cjs +16 -0
  370. package/dist/storage/prompts/types.d.ts +14 -0
  371. package/dist/storage/prompts/types.d.ts.map +1 -0
  372. package/dist/storage/prompts/types.js +0 -0
  373. package/dist/storage/runtime-events/types.cjs +16 -0
  374. package/dist/storage/runtime-events/types.d.ts +19 -0
  375. package/dist/storage/runtime-events/types.d.ts.map +1 -0
  376. package/dist/storage/runtime-events/types.js +0 -0
  377. package/dist/storage/sessions/types.cjs +16 -0
  378. package/dist/storage/sessions/types.d.ts +19 -0
  379. package/dist/storage/sessions/types.d.ts.map +1 -0
  380. package/dist/storage/sessions/types.js +0 -0
  381. package/dist/storage/stores/backend.cjs +702 -0
  382. package/dist/storage/stores/backend.d.ts +303 -0
  383. package/dist/storage/stores/backend.d.ts.map +1 -0
  384. package/dist/storage/stores/backend.js +677 -0
  385. package/dist/storage/stores/in-memory.cjs +510 -0
  386. package/dist/storage/stores/in-memory.d.ts +11 -0
  387. package/dist/storage/stores/in-memory.d.ts.map +1 -0
  388. package/dist/storage/stores/in-memory.js +487 -0
  389. package/dist/storage/stores/types.cjs +16 -0
  390. package/dist/storage/stores/types.d.ts +36 -0
  391. package/dist/storage/stores/types.d.ts.map +1 -0
  392. package/dist/storage/stores/types.js +0 -0
  393. package/dist/storage/tool-executions/types.cjs +127 -0
  394. package/dist/storage/tool-executions/types.d.ts +193 -0
  395. package/dist/storage/tool-executions/types.d.ts.map +1 -0
  396. package/dist/storage/tool-executions/types.js +96 -0
  397. package/dist/storage/tool-preferences/types.cjs +16 -0
  398. package/dist/storage/tool-preferences/types.d.ts +29 -0
  399. package/dist/storage/tool-preferences/types.d.ts.map +1 -0
  400. package/dist/storage/tool-preferences/types.js +0 -0
  401. package/dist/storage/tool-state/types.cjs +16 -0
  402. package/dist/storage/tool-state/types.d.ts +20 -0
  403. package/dist/storage/tool-state/types.d.ts.map +1 -0
  404. package/dist/storage/tool-state/types.js +0 -0
  405. package/dist/storage/workspaces/types.cjs +16 -0
  406. package/dist/storage/workspaces/types.d.ts +19 -0
  407. package/dist/storage/workspaces/types.d.ts.map +1 -0
  408. package/dist/storage/workspaces/types.js +0 -0
  409. package/dist/systemPrompt/contributors.cjs +10 -14
  410. package/dist/systemPrompt/contributors.d.ts +3 -3
  411. package/dist/systemPrompt/contributors.d.ts.map +1 -1
  412. package/dist/systemPrompt/contributors.js +11 -15
  413. package/dist/systemPrompt/error-codes.js +1 -1
  414. package/dist/systemPrompt/errors.js +1 -1
  415. package/dist/systemPrompt/in-built-prompts.js +1 -1
  416. package/dist/systemPrompt/index.js +1 -1
  417. package/dist/systemPrompt/manager.js +1 -1
  418. package/dist/systemPrompt/registry.js +1 -1
  419. package/dist/systemPrompt/schemas.js +1 -1
  420. package/dist/telemetry/decorators.js +1 -1
  421. package/dist/telemetry/error-codes.js +1 -1
  422. package/dist/telemetry/errors.js +1 -1
  423. package/dist/telemetry/exporters.js +1 -1
  424. package/dist/telemetry/index.js +1 -1
  425. package/dist/telemetry/schemas.js +1 -1
  426. package/dist/telemetry/telemetry.js +1 -1
  427. package/dist/telemetry/utils.js +1 -1
  428. package/dist/test-utils/in-memory-storage.cjs +9 -17
  429. package/dist/test-utils/in-memory-storage.js +9 -16
  430. package/dist/test-utils/session-state-stores.cjs +21 -24
  431. package/dist/test-utils/session-state-stores.js +22 -24
  432. package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.cjs +1 -1
  433. package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.d.ts +2 -2
  434. package/dist/tools/approval/allowed-tools-provider/factory.d.ts.map +1 -0
  435. package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.js +2 -2
  436. package/dist/tools/approval/allowed-tools-provider/in-memory.d.ts.map +1 -0
  437. package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.js +1 -1
  438. package/dist/tools/approval/allowed-tools-provider/storage.cjs +66 -0
  439. package/dist/tools/{confirmation → approval}/allowed-tools-provider/storage.d.ts +4 -10
  440. package/dist/tools/approval/allowed-tools-provider/storage.d.ts.map +1 -0
  441. package/dist/tools/approval/allowed-tools-provider/storage.js +43 -0
  442. package/dist/tools/approval/allowed-tools-provider/types.cjs +16 -0
  443. package/dist/tools/approval/allowed-tools-provider/types.d.ts.map +1 -0
  444. package/dist/tools/approval/allowed-tools-provider/types.js +0 -0
  445. package/dist/tools/approval/session-tool-policy.cjs +269 -0
  446. package/dist/tools/approval/session-tool-policy.d.ts +43 -0
  447. package/dist/tools/approval/session-tool-policy.d.ts.map +1 -0
  448. package/dist/tools/approval/session-tool-policy.js +245 -0
  449. package/dist/tools/define-tool.js +1 -1
  450. package/dist/tools/display-types.js +1 -1
  451. package/dist/tools/error-codes.cjs +3 -3
  452. package/dist/tools/error-codes.d.ts +4 -4
  453. package/dist/tools/error-codes.d.ts.map +1 -1
  454. package/dist/tools/error-codes.js +4 -4
  455. package/dist/tools/errors.cjs +12 -12
  456. package/dist/tools/errors.d.ts +6 -6
  457. package/dist/tools/errors.d.ts.map +1 -1
  458. package/dist/tools/errors.js +13 -13
  459. package/dist/tools/index.cjs +3 -0
  460. package/dist/tools/index.d.ts +3 -0
  461. package/dist/tools/index.d.ts.map +1 -1
  462. package/dist/tools/index.js +3 -1
  463. package/dist/tools/pattern-utils.js +1 -1
  464. package/dist/tools/presentation/tool-presentation.cjs +182 -0
  465. package/dist/tools/presentation/tool-presentation.d.ts +51 -0
  466. package/dist/tools/presentation/tool-presentation.d.ts.map +1 -0
  467. package/dist/tools/presentation/tool-presentation.js +159 -0
  468. package/dist/tools/presentation.js +1 -1
  469. package/dist/tools/schemas.cjs +5 -10
  470. package/dist/tools/schemas.d.ts +1 -4
  471. package/dist/tools/schemas.d.ts.map +1 -1
  472. package/dist/tools/schemas.js +6 -11
  473. package/dist/tools/session-tool-preferences-store.cjs +12 -28
  474. package/dist/tools/session-tool-preferences-store.d.ts +4 -7
  475. package/dist/tools/session-tool-preferences-store.d.ts.map +1 -1
  476. package/dist/tools/session-tool-preferences-store.js +12 -29
  477. package/dist/tools/tool-call-metadata.js +1 -1
  478. package/dist/tools/tool-manager.cjs +871 -834
  479. package/dist/tools/tool-manager.d.ts +94 -96
  480. package/dist/tools/tool-manager.d.ts.map +1 -1
  481. package/dist/tools/tool-manager.js +876 -833
  482. package/dist/tools/types.d.ts +10 -14
  483. package/dist/tools/types.d.ts.map +1 -1
  484. package/dist/utils/api-key-resolver.d.ts +1 -1
  485. package/dist/utils/api-key-resolver.d.ts.map +1 -1
  486. package/dist/utils/api-key-resolver.js +1 -1
  487. package/dist/utils/async-context.js +1 -1
  488. package/dist/utils/debug.js +1 -1
  489. package/dist/utils/defer.js +1 -1
  490. package/dist/utils/env.js +1 -1
  491. package/dist/utils/error-conversion.js +1 -1
  492. package/dist/utils/execution-context.js +1 -1
  493. package/dist/utils/fs-walk.js +1 -1
  494. package/dist/utils/path.js +1 -1
  495. package/dist/utils/redactor.js +1 -1
  496. package/dist/utils/result.js +1 -1
  497. package/dist/utils/safe-stringify.js +1 -1
  498. package/dist/utils/schema.js +1 -1
  499. package/dist/utils/service-initializer.cjs +37 -33
  500. package/dist/utils/service-initializer.d.ts +9 -5
  501. package/dist/utils/service-initializer.d.ts.map +1 -1
  502. package/dist/utils/service-initializer.js +38 -34
  503. package/dist/utils/zod-schema-converter.js +1 -1
  504. package/dist/workspace/error-codes.cjs +5 -1
  505. package/dist/workspace/error-codes.d.ts +4 -0
  506. package/dist/workspace/error-codes.d.ts.map +1 -1
  507. package/dist/workspace/error-codes.js +6 -2
  508. package/dist/workspace/errors.cjs +43 -0
  509. package/dist/workspace/errors.d.ts +9 -0
  510. package/dist/workspace/errors.d.ts.map +1 -1
  511. package/dist/workspace/errors.js +44 -1
  512. package/dist/workspace/index.d.ts +1 -1
  513. package/dist/workspace/index.d.ts.map +1 -1
  514. package/dist/workspace/index.js +1 -1
  515. package/dist/workspace/manager.cjs +21 -29
  516. package/dist/workspace/manager.d.ts +6 -6
  517. package/dist/workspace/manager.d.ts.map +1 -1
  518. package/dist/workspace/manager.js +22 -30
  519. package/dist/workspace/types.d.ts +47 -0
  520. package/dist/workspace/types.d.ts.map +1 -1
  521. package/package.json +116 -3
  522. package/dist/approval/session-approval-store.cjs +0 -91
  523. package/dist/approval/session-approval-store.d.ts +0 -37
  524. package/dist/approval/session-approval-store.d.ts.map +0 -1
  525. package/dist/approval/session-approval-store.js +0 -68
  526. package/dist/llm/reasoning/anthropic-betas.d.ts +0 -3
  527. package/dist/llm/reasoning/anthropic-betas.d.ts.map +0 -1
  528. package/dist/llm/reasoning/anthropic-betas.js +0 -7
  529. package/dist/llm/reasoning/anthropic-thinking.cjs +0 -79
  530. package/dist/llm/reasoning/anthropic-thinking.d.ts +0 -15
  531. package/dist/llm/reasoning/anthropic-thinking.d.ts.map +0 -1
  532. package/dist/llm/reasoning/anthropic-thinking.js +0 -52
  533. package/dist/llm/reasoning/openai-reasoning-effort.cjs +0 -86
  534. package/dist/llm/reasoning/openai-reasoning-effort.d.ts +0 -5
  535. package/dist/llm/reasoning/openai-reasoning-effort.d.ts.map +0 -1
  536. package/dist/llm/reasoning/openai-reasoning-effort.js +0 -61
  537. package/dist/llm/reasoning/profile.cjs +0 -113
  538. package/dist/llm/reasoning/profile.d.ts +0 -13
  539. package/dist/llm/reasoning/profile.d.ts.map +0 -1
  540. package/dist/llm/reasoning/profile.js +0 -92
  541. package/dist/llm/reasoning/profiles/anthropic.cjs +0 -61
  542. package/dist/llm/reasoning/profiles/anthropic.d.ts +0 -8
  543. package/dist/llm/reasoning/profiles/anthropic.d.ts.map +0 -1
  544. package/dist/llm/reasoning/profiles/anthropic.js +0 -45
  545. package/dist/llm/reasoning/profiles/bedrock.cjs +0 -54
  546. package/dist/llm/reasoning/profiles/bedrock.d.ts +0 -3
  547. package/dist/llm/reasoning/profiles/bedrock.d.ts.map +0 -1
  548. package/dist/llm/reasoning/profiles/bedrock.js +0 -36
  549. package/dist/llm/reasoning/profiles/google.cjs +0 -45
  550. package/dist/llm/reasoning/profiles/google.d.ts +0 -9
  551. package/dist/llm/reasoning/profiles/google.d.ts.map +0 -1
  552. package/dist/llm/reasoning/profiles/google.js +0 -21
  553. package/dist/llm/reasoning/profiles/openai-compatible.cjs +0 -39
  554. package/dist/llm/reasoning/profiles/openai-compatible.d.ts +0 -3
  555. package/dist/llm/reasoning/profiles/openai-compatible.d.ts.map +0 -1
  556. package/dist/llm/reasoning/profiles/openai-compatible.js +0 -16
  557. package/dist/llm/reasoning/profiles/openai.d.ts +0 -3
  558. package/dist/llm/reasoning/profiles/openai.d.ts.map +0 -1
  559. package/dist/llm/reasoning/profiles/openai.js +0 -18
  560. package/dist/llm/reasoning/profiles/openrouter.cjs +0 -83
  561. package/dist/llm/reasoning/profiles/openrouter.d.ts +0 -10
  562. package/dist/llm/reasoning/profiles/openrouter.d.ts.map +0 -1
  563. package/dist/llm/reasoning/profiles/openrouter.js +0 -59
  564. package/dist/llm/reasoning/profiles/shared.cjs +0 -80
  565. package/dist/llm/reasoning/profiles/shared.d.ts +0 -25
  566. package/dist/llm/reasoning/profiles/shared.d.ts.map +0 -1
  567. package/dist/llm/reasoning/profiles/shared.js +0 -53
  568. package/dist/llm/reasoning/profiles/vertex.cjs +0 -46
  569. package/dist/llm/reasoning/profiles/vertex.d.ts +0 -3
  570. package/dist/llm/reasoning/profiles/vertex.d.ts.map +0 -1
  571. package/dist/llm/reasoning/profiles/vertex.js +0 -23
  572. package/dist/llm/registry/models.generated.cjs +0 -10741
  573. package/dist/llm/registry/models.generated.d.ts +0 -2945
  574. package/dist/llm/registry/models.generated.d.ts.map +0 -1
  575. package/dist/llm/registry/models.generated.js +0 -10717
  576. package/dist/llm/registry/models.manual.cjs +0 -44
  577. package/dist/llm/registry/models.manual.d.ts +0 -22
  578. package/dist/llm/registry/models.manual.d.ts.map +0 -1
  579. package/dist/llm/registry/models.manual.js +0 -21
  580. package/dist/llm/types.d.ts +0 -39
  581. package/dist/llm/types.d.ts.map +0 -1
  582. package/dist/llm/types.js +0 -30
  583. package/dist/session/history/database.cjs +0 -232
  584. package/dist/session/history/database.d.ts +0 -41
  585. package/dist/session/history/database.d.ts.map +0 -1
  586. package/dist/session/history/database.js +0 -209
  587. package/dist/session/history/factory.d.ts +0 -11
  588. package/dist/session/history/factory.d.ts.map +0 -1
  589. package/dist/session/history/factory.js +0 -8
  590. package/dist/session/history/memory.cjs +0 -57
  591. package/dist/session/history/memory.d.ts +0 -22
  592. package/dist/session/history/memory.d.ts.map +0 -1
  593. package/dist/session/history/memory.js +0 -34
  594. package/dist/session/history/types.d.ts +0 -26
  595. package/dist/session/history/types.d.ts.map +0 -1
  596. package/dist/session/message-queue-store.cjs +0 -75
  597. package/dist/session/message-queue-store.d.ts +0 -16
  598. package/dist/session/message-queue-store.d.ts.map +0 -1
  599. package/dist/session/message-queue-store.js +0 -52
  600. package/dist/storage/storage-manager.cjs +0 -209
  601. package/dist/storage/storage-manager.d.ts +0 -77
  602. package/dist/storage/storage-manager.d.ts.map +0 -1
  603. package/dist/storage/storage-manager.js +0 -186
  604. package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts.map +0 -1
  605. package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts.map +0 -1
  606. package/dist/tools/confirmation/allowed-tools-provider/storage.cjs +0 -69
  607. package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts.map +0 -1
  608. package/dist/tools/confirmation/allowed-tools-provider/storage.js +0 -46
  609. package/dist/tools/confirmation/allowed-tools-provider/types.d.ts.map +0 -1
  610. /package/dist/{session/history → skills}/types.cjs +0 -0
  611. /package/dist/{session/history → skills}/types.js +0 -0
  612. /package/dist/{tools/confirmation/allowed-tools-provider → storage/artifacts}/types.cjs +0 -0
  613. /package/dist/{tools/confirmation/allowed-tools-provider → storage/artifacts}/types.js +0 -0
  614. /package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.cjs +0 -0
  615. /package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.d.ts +0 -0
  616. /package/dist/tools/{confirmation → approval}/allowed-tools-provider/types.d.ts +0 -0
@@ -22,8 +22,7 @@ __export(chat_session_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(chat_session_exports);
24
24
  var import_crypto = require("crypto");
25
- var import_factory = require("./history/factory.js");
26
- var import_factory2 = require("../llm/services/factory.js");
25
+ var import_factory = require("../llm/services/factory.js");
27
26
  var import_events = require("../events/index.js");
28
27
  var import_types = require("../logger/v2/types.js");
29
28
  var import_errors = require("../errors/index.js");
@@ -37,7 +36,7 @@ class ChatSession {
37
36
  * Creates a new ChatSession instance.
38
37
  *
39
38
  * Each session creates its own isolated services:
40
- * - ConversationHistoryProvider (with session-specific storage, shared across LLM switches)
39
+ * - ConversationStore (with session-specific storage, shared across LLM switches)
41
40
  * - LLM service (creates its own properly-typed ContextManager internally)
42
41
  * - SessionEventBus (session-local event handling)
43
42
  *
@@ -50,11 +49,19 @@ class ChatSession {
50
49
  this.id = id;
51
50
  this.logger = logger.createChild(import_types.DextoLogComponent.SESSION);
52
51
  this.eventBus = new import_events.SessionEventBus();
53
- this.messageQueue = new import_message_queue.MessageQueueService(
52
+ this.steerQueue = new import_message_queue.MessageQueueService(
54
53
  this.eventBus,
55
54
  this.logger,
56
55
  this.id,
57
- this.services.messageQueueStore
56
+ this.services.steerQueueStore,
57
+ "steer"
58
+ );
59
+ this.followUpQueue = new import_message_queue.MessageQueueService(
60
+ this.eventBus,
61
+ this.logger,
62
+ this.id,
63
+ this.services.followUpQueueStore,
64
+ "follow-up"
58
65
  );
59
66
  this.setupTokenAccumulation();
60
67
  this.logger.debug(`ChatSession ${this.id}: Created, awaiting initialization`);
@@ -72,10 +79,10 @@ class ChatSession {
72
79
  */
73
80
  eventBus;
74
81
  /**
75
- * History provider that persists conversation messages.
82
+ * Store that persists conversation messages.
76
83
  * Shared across LLM switches to maintain conversation continuity.
77
84
  */
78
- historyProvider;
85
+ conversationStore;
79
86
  /**
80
87
  * Handles AI model interactions, tool execution, and response generation for this session.
81
88
  *
@@ -84,10 +91,11 @@ class ChatSession {
84
91
  */
85
92
  llmService;
86
93
  /**
87
- * Durable queued follow-up messages for this session.
88
- * Reused across LLM switches so mid-task follow-ups survive service recreation.
94
+ * Durable queued user input for this session.
95
+ * Reused across LLM switches so mid-task steer/follow-up input survives service recreation.
89
96
  */
90
- messageQueue;
97
+ steerQueue;
98
+ followUpQueue;
91
99
  activeForwarderCleanup = null;
92
100
  /**
93
101
  * Token accumulator listener for cleanup.
@@ -128,9 +136,10 @@ class ChatSession {
128
136
  setupTokenAccumulation() {
129
137
  this.tokenAccumulatorListener = (payload) => {
130
138
  if (payload.tokenUsage) {
139
+ const tokenUsage = (0, import_usage_metadata.normalizeTokenUsageForAccounting)(payload.tokenUsage);
131
140
  const llmConfig = this.services.stateManager.getLLMConfig(this.id);
132
141
  const isChatGPTLogin = llmConfig.provider === "openai-compatible" && (0, import_codex_base_url.parseCodexBaseURL)(llmConfig.baseURL)?.authMode === "chatgpt";
133
- const hasMeaningfulUsage = (0, import_usage_metadata.hasMeaningfulTokenUsage)(payload.tokenUsage);
142
+ const hasMeaningfulUsage = (0, import_usage_metadata.hasMeaningfulTokenUsage)(tokenUsage);
134
143
  if (isChatGPTLogin && !hasMeaningfulUsage) {
135
144
  this.services.sessionManager.markUntrackedChatGPTLoginUsage(this.id).catch((err) => {
136
145
  this.logger.warn(
@@ -146,11 +155,11 @@ class ChatSession {
146
155
  const pricingMetadata = (0, import_usage_metadata.getUsagePricingMetadata)({
147
156
  provider: modelInfo.provider,
148
157
  model: modelInfo.model,
149
- tokenUsage: payload.tokenUsage
158
+ tokenUsage
150
159
  });
151
160
  this.services.sessionManager.accumulateTokenUsage(
152
161
  this.id,
153
- payload.tokenUsage,
162
+ tokenUsage,
154
163
  payload.estimatedCost ?? pricingMetadata.estimatedCost,
155
164
  modelInfo
156
165
  ).catch((err) => {
@@ -168,12 +177,9 @@ class ChatSession {
168
177
  async initializeServices() {
169
178
  const runtimeConfig = this.services.stateManager.getRuntimeConfig(this.id);
170
179
  const llmConfig = runtimeConfig.llm;
171
- await this.messageQueue.initialize();
172
- this.historyProvider = (0, import_factory.createDatabaseHistoryProvider)(
173
- this.services.storageManager.getDatabase(),
174
- this.id,
175
- this.logger
176
- );
180
+ await this.steerQueue.initialize();
181
+ await this.followUpQueue.initialize();
182
+ this.conversationStore = this.services.conversationStore;
177
183
  this.llmService = await this.createSessionLLMService(llmConfig, runtimeConfig.usageScopeId);
178
184
  this.logger.debug(`ChatSession ${this.id}: Services initialized with storage`);
179
185
  }
@@ -183,13 +189,14 @@ class ChatSession {
183
189
  usageScopeId,
184
190
  compactionStrategy: this.services.compactionStrategy,
185
191
  ...workspace?.path !== void 0 && { cwd: workspace.path },
186
- messageQueue: this.messageQueue
192
+ steerQueue: this.steerQueue,
193
+ followUpQueue: this.followUpQueue
187
194
  };
188
- return (0, import_factory2.createLLMService)(
195
+ return (0, import_factory.createLLMService)(
189
196
  llmConfig,
190
197
  this.services.toolManager,
191
198
  this.services.systemPromptManager,
192
- this.historyProvider,
199
+ this.conversationStore,
193
200
  this.eventBus,
194
201
  this.id,
195
202
  this.services.resourceManager,
@@ -224,8 +231,8 @@ class ChatSession {
224
231
  timestamp: timestamp + 1,
225
232
  content: [{ type: "text", text: errorContent }]
226
233
  };
227
- await this.historyProvider.saveMessage(userMessage);
228
- await this.historyProvider.saveMessage(assistantMessage);
234
+ await this.conversationStore.saveMessage({ sessionId: this.id, message: userMessage });
235
+ await this.conversationStore.saveMessage({ sessionId: this.id, message: assistantMessage });
229
236
  const llmConfig = this.services.stateManager.getLLMConfig(this.id);
230
237
  this.eventBus.emit("llm:response", {
231
238
  content: errorContent,
@@ -234,6 +241,83 @@ class ChatSession {
234
241
  ...assistantMessage.id && { messageId: assistantMessage.id }
235
242
  });
236
243
  }
244
+ normalizeContent(content) {
245
+ return typeof content === "string" ? [{ type: "text", text: content }] : content;
246
+ }
247
+ async prepareTurnInput(content, signal, runContext) {
248
+ const parts = this.normalizeContent(content);
249
+ const textParts = parts.filter(
250
+ (p) => p.type === "text"
251
+ );
252
+ const imageParts = parts.filter((p) => p.type === "image");
253
+ const fileParts = parts.filter((p) => p.type === "file");
254
+ this.logger.debug(
255
+ `Streaming session ${this.id} | textParts=${textParts.length} | images=${imageParts.length} | files=${fileParts.length}`
256
+ );
257
+ const textContent = textParts.map((p) => p.text).join("\n");
258
+ const firstImage = imageParts[0];
259
+ const firstFile = fileParts[0];
260
+ const beforeLLMPayload = {
261
+ text: textContent,
262
+ ...firstImage && {
263
+ imageData: {
264
+ image: typeof firstImage.image === "string" ? firstImage.image : "[binary]",
265
+ mimeType: firstImage.mimeType || "image/jpeg"
266
+ }
267
+ },
268
+ ...firstFile && {
269
+ fileData: {
270
+ data: typeof firstFile.data === "string" ? firstFile.data : "[binary]",
271
+ mimeType: firstFile.mimeType,
272
+ ...firstFile.filename && { filename: firstFile.filename }
273
+ }
274
+ },
275
+ sessionId: this.id
276
+ };
277
+ const modifiedBeforePayload = await this.services.hookManager.executeHooks(
278
+ "beforeLLMRequest",
279
+ beforeLLMPayload,
280
+ {
281
+ sessionManager: this.services.sessionManager,
282
+ mcpManager: this.services.mcpManager,
283
+ toolManager: this.services.toolManager,
284
+ stateManager: this.services.stateManager,
285
+ ...runContext !== void 0 && { runContext },
286
+ sessionId: this.id,
287
+ abortSignal: signal
288
+ }
289
+ );
290
+ if (modifiedBeforePayload.text === textContent || textParts.length === 0) {
291
+ return parts;
292
+ }
293
+ return [
294
+ { type: "text", text: modifiedBeforePayload.text },
295
+ ...parts.filter((p) => p.type !== "text")
296
+ ];
297
+ }
298
+ async applyBeforeResponseHooks(content, signal, runContext) {
299
+ const llmConfig = this.services.stateManager.getLLMConfig(this.id);
300
+ const beforeResponsePayload = {
301
+ content,
302
+ provider: llmConfig.provider,
303
+ model: llmConfig.model,
304
+ sessionId: this.id
305
+ };
306
+ const modifiedResponsePayload = await this.services.hookManager.executeHooks(
307
+ "beforeResponse",
308
+ beforeResponsePayload,
309
+ {
310
+ sessionManager: this.services.sessionManager,
311
+ mcpManager: this.services.mcpManager,
312
+ toolManager: this.services.toolManager,
313
+ stateManager: this.services.stateManager,
314
+ ...runContext !== void 0 && { runContext },
315
+ sessionId: this.id,
316
+ abortSignal: signal
317
+ }
318
+ );
319
+ return modifiedResponsePayload.content;
320
+ }
237
321
  /**
238
322
  * Stream a response for the given content.
239
323
  * Primary method for running conversations with multi-image support.
@@ -256,15 +340,7 @@ class ChatSession {
256
340
  * ```
257
341
  */
258
342
  async stream(content, options) {
259
- const parts = typeof content === "string" ? [{ type: "text", text: content }] : content;
260
- const textParts = parts.filter(
261
- (p) => p.type === "text"
262
- );
263
- const imageParts = parts.filter((p) => p.type === "image");
264
- const fileParts = parts.filter((p) => p.type === "file");
265
- this.logger.debug(
266
- `Streaming session ${this.id} | textParts=${textParts.length} | images=${imageParts.length} | files=${fileParts.length}`
267
- );
343
+ const parts = this.normalizeContent(content);
268
344
  if (this.isBusy()) {
269
345
  throw import_errors2.SessionError.busy(this.id);
270
346
  }
@@ -272,70 +348,17 @@ class ChatSession {
272
348
  const signal = options?.signal ? this.combineSignals(options.signal, this.currentRunController.signal) : this.currentRunController.signal;
273
349
  const detachForwarders = this.attachRunEventForwarders(options?.runContext);
274
350
  try {
275
- const textContent = textParts.map((p) => p.text).join("\n");
276
- const firstImage = imageParts[0];
277
- const firstFile = fileParts[0];
278
- const beforeLLMPayload = {
279
- text: textContent,
280
- ...firstImage && {
281
- imageData: {
282
- image: typeof firstImage.image === "string" ? firstImage.image : "[binary]",
283
- mimeType: firstImage.mimeType || "image/jpeg"
284
- }
285
- },
286
- ...firstFile && {
287
- fileData: {
288
- data: typeof firstFile.data === "string" ? firstFile.data : "[binary]",
289
- mimeType: firstFile.mimeType,
290
- ...firstFile.filename && { filename: firstFile.filename }
291
- }
292
- },
293
- sessionId: this.id
294
- };
295
- const modifiedBeforePayload = await this.services.hookManager.executeHooks(
296
- "beforeLLMRequest",
297
- beforeLLMPayload,
298
- {
299
- sessionManager: this.services.sessionManager,
300
- mcpManager: this.services.mcpManager,
301
- toolManager: this.services.toolManager,
302
- stateManager: this.services.stateManager,
303
- ...options?.runContext !== void 0 && { runContext: options.runContext },
304
- sessionId: this.id,
305
- abortSignal: signal
306
- }
307
- );
308
- let modifiedParts = [...parts];
309
- if (modifiedBeforePayload.text !== textContent && textParts.length > 0) {
310
- modifiedParts = modifiedParts.filter((p) => p.type !== "text");
311
- modifiedParts.unshift({ type: "text", text: modifiedBeforePayload.text });
312
- }
351
+ const modifiedParts = await this.prepareTurnInput(content, signal, options?.runContext);
313
352
  const streamResult = await this.llmService.stream(modifiedParts, {
314
353
  signal,
315
354
  ...options?.runContext !== void 0 && { runContext: options.runContext }
316
355
  });
317
- const llmConfig = this.services.stateManager.getLLMConfig(this.id);
318
- const beforeResponsePayload = {
319
- content: streamResult.text,
320
- provider: llmConfig.provider,
321
- model: llmConfig.model,
322
- sessionId: this.id
323
- };
324
- const modifiedResponsePayload = await this.services.hookManager.executeHooks(
325
- "beforeResponse",
326
- beforeResponsePayload,
327
- {
328
- sessionManager: this.services.sessionManager,
329
- mcpManager: this.services.mcpManager,
330
- toolManager: this.services.toolManager,
331
- stateManager: this.services.stateManager,
332
- ...options?.runContext !== void 0 && { runContext: options.runContext },
333
- sessionId: this.id,
334
- abortSignal: signal
335
- }
336
- );
337
356
  return {
338
- text: modifiedResponsePayload.content
357
+ text: await this.applyBeforeResponseHooks(
358
+ streamResult.text,
359
+ signal,
360
+ options?.runContext
361
+ )
339
362
  };
340
363
  } catch (error) {
341
364
  const aborted = error instanceof Error && error.name === "AbortError" || typeof error === "object" && error !== null && error.aborted === true;
@@ -389,6 +412,94 @@ class ChatSession {
389
412
  this.currentRunController = null;
390
413
  }
391
414
  }
415
+ async createTurnDriver(input) {
416
+ if (this.isBusy()) {
417
+ throw import_errors2.SessionError.busy(this.id);
418
+ }
419
+ this.currentRunController = new AbortController();
420
+ const signal = input.signal ? this.combineSignals(input.signal, this.currentRunController.signal) : this.currentRunController.signal;
421
+ const detachForwarders = this.attachRunEventForwarders(input.runContext);
422
+ try {
423
+ if (input.kind === "start") {
424
+ const modifiedParts = await this.prepareTurnInput(
425
+ input.content,
426
+ signal,
427
+ input.runContext
428
+ );
429
+ await this.llmService.getContextManager().addUserMessage(modifiedParts);
430
+ }
431
+ const driver = await this.llmService.createTurnDriver({
432
+ signal,
433
+ streaming: input.streaming ?? true,
434
+ ...input.runContext !== void 0 && { runContext: input.runContext },
435
+ ...input.kind === "resume" ? { state: input.state } : {}
436
+ });
437
+ return this.wrapTurnDriver(driver, signal, input.runContext, detachForwarders);
438
+ } catch (error) {
439
+ if (input.kind === "start" && error instanceof import_errors.DextoRuntimeError && error.code === import_error_codes.HookErrorCode.HOOK_BLOCKED_EXECUTION && error.scope === import_errors.ErrorScope.HOOK && error.type === import_errors.ErrorType.FORBIDDEN) {
440
+ const textContent = this.normalizeContent(input.content).filter((p) => p.type === "text").map((p) => p.text).join("\n");
441
+ await this.saveBlockedInteraction(textContent, error.message);
442
+ }
443
+ detachForwarders();
444
+ this.currentRunController = null;
445
+ throw error;
446
+ }
447
+ }
448
+ wrapTurnDriver(driver, signal, runContext, detachForwarders) {
449
+ let closed = false;
450
+ const close = () => {
451
+ if (closed) {
452
+ return;
453
+ }
454
+ closed = true;
455
+ detachForwarders();
456
+ this.currentRunController = null;
457
+ };
458
+ return {
459
+ prepareNextModelStep: () => driver.prepareNextModelStep(),
460
+ runNextModelStep: () => driver.runNextModelStep(),
461
+ executeToolCalls: () => driver.executeToolCalls(),
462
+ decideNextStep: () => driver.decideNextStep(),
463
+ finish: async () => {
464
+ try {
465
+ const result = await driver.finish();
466
+ return {
467
+ ...result,
468
+ text: await this.applyBeforeResponseHooks(result.text, signal, runContext)
469
+ };
470
+ } finally {
471
+ driver.dispose();
472
+ close();
473
+ }
474
+ },
475
+ fail: async (error) => {
476
+ try {
477
+ return await driver.fail(error);
478
+ } finally {
479
+ driver.dispose();
480
+ close();
481
+ }
482
+ },
483
+ getState: () => driver.getState(),
484
+ checkpoint: () => {
485
+ try {
486
+ return driver.checkpoint();
487
+ } finally {
488
+ close();
489
+ }
490
+ },
491
+ dispose: () => {
492
+ if (closed) {
493
+ return;
494
+ }
495
+ try {
496
+ driver.dispose();
497
+ } finally {
498
+ close();
499
+ }
500
+ }
501
+ };
502
+ }
392
503
  /**
393
504
  * Combine multiple abort signals into one.
394
505
  */
@@ -424,7 +535,7 @@ class ChatSession {
424
535
  * ```
425
536
  */
426
537
  async getHistory() {
427
- return await this.historyProvider.getHistory();
538
+ return await this.conversationStore.listMessages({ sessionId: this.id });
428
539
  }
429
540
  /**
430
541
  * Reset the conversation history for this session.
@@ -552,40 +663,85 @@ class ChatSession {
552
663
  return this.currentRunController !== null && !this.currentRunController.signal.aborted;
553
664
  }
554
665
  /**
555
- * Queue a message for processing when the session is busy.
556
- * The message will be injected into the conversation when the current turn completes.
666
+ * Queue a message as active-turn steer input.
667
+ * The message is injected at the next executor boundary while the current turn is active.
668
+ *
669
+ * @param message The user message to use as steer input
670
+ * @returns Queue position and message ID
671
+ */
672
+ async steer(message) {
673
+ return await this.llmService.getSteerQueue().enqueue(message);
674
+ }
675
+ /**
676
+ * Queue a follow-up message for processing after the current turn naturally completes.
557
677
  *
558
- * @param message The user message to queue
678
+ * @param message The user message to queue as follow-up work
559
679
  * @returns Queue position and message ID
560
680
  */
561
- async queueMessage(message) {
562
- return await this.llmService.getMessageQueue().enqueue(message);
681
+ async followUp(message) {
682
+ return await this.llmService.getFollowUpQueue().enqueue(message);
683
+ }
684
+ /**
685
+ * Get all steer messages currently queued.
686
+ * @returns Array of steer messages
687
+ */
688
+ getSteerMessages() {
689
+ return this.llmService.getSteerQueue().getAll();
690
+ }
691
+ /**
692
+ * Get all follow-up messages currently queued.
693
+ * @returns Array of follow-up messages
694
+ */
695
+ getFollowUpMessages() {
696
+ return this.llmService.getFollowUpQueue().getAll();
563
697
  }
564
698
  /**
565
- * Get all messages currently in the queue.
566
- * @returns Array of queued messages
699
+ * Remove a steer message.
700
+ * @param id Message ID to remove
701
+ * @returns true if message was found and removed; false otherwise
567
702
  */
568
- getQueuedMessages() {
569
- return this.llmService.getMessageQueue().getAll();
703
+ async removeSteerMessage(id) {
704
+ return await this.llmService.getSteerQueue().remove(id);
570
705
  }
571
706
  /**
572
- * Remove a queued message.
707
+ * Remove a follow-up message.
573
708
  * @param id Message ID to remove
574
709
  * @returns true if message was found and removed; false otherwise
575
710
  */
576
- async removeQueuedMessage(id) {
577
- return await this.llmService.getMessageQueue().remove(id);
711
+ async removeFollowUpMessage(id) {
712
+ return await this.llmService.getFollowUpQueue().remove(id);
578
713
  }
579
714
  /**
580
- * Clear all queued messages.
715
+ * Clear all steer messages.
581
716
  * @returns Number of messages that were cleared
582
717
  */
583
- async clearMessageQueue() {
584
- const queue = this.llmService.getMessageQueue();
718
+ async clearSteerQueue() {
719
+ const queue = this.llmService.getSteerQueue();
585
720
  const count = queue.pendingCount();
586
721
  await queue.clear();
587
722
  return count;
588
723
  }
724
+ /**
725
+ * Clear all follow-up messages.
726
+ * @returns Number of messages that were cleared
727
+ */
728
+ async clearFollowUpQueue() {
729
+ const queue = this.llmService.getFollowUpQueue();
730
+ const count = queue.pendingCount();
731
+ await queue.clear();
732
+ return count;
733
+ }
734
+ /**
735
+ * Clear all pending steer and follow-up input for this session.
736
+ * @returns Number of messages that were cleared
737
+ */
738
+ async clearPendingInput() {
739
+ const [steerCount, followUpCount] = await Promise.all([
740
+ this.clearSteerQueue(),
741
+ this.clearFollowUpQueue()
742
+ ]);
743
+ return steerCount + followUpCount;
744
+ }
589
745
  /**
590
746
  * Cancel the currently running turn for this session, if any.
591
747
  * Returns true if a run was in progress and was signaled to abort.