@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,6 +1,5 @@
1
- import "../chunk-PTJYTZNU.js";
1
+ import "../chunk-C6A6W6XS.js";
2
2
  import { randomUUID } from "crypto";
3
- import { createDatabaseHistoryProvider } from "./history/factory.js";
4
3
  import { createLLMService } from "../llm/services/factory.js";
5
4
  import {
6
5
  SessionEventBus,
@@ -10,7 +9,11 @@ import { DextoLogComponent } from "../logger/v2/types.js";
10
9
  import { DextoRuntimeError, ErrorScope, ErrorType } from "../errors/index.js";
11
10
  import { HookErrorCode } from "../hooks/error-codes.js";
12
11
  import { MessageQueueService } from "./message-queue.js";
13
- import { getUsagePricingMetadata, hasMeaningfulTokenUsage } from "../llm/usage-metadata.js";
12
+ import {
13
+ getUsagePricingMetadata,
14
+ hasMeaningfulTokenUsage,
15
+ normalizeTokenUsageForAccounting
16
+ } from "../llm/usage-metadata.js";
14
17
  import { parseCodexBaseURL } from "../llm/providers/codex-base-url.js";
15
18
  import { SessionError } from "./errors.js";
16
19
  class ChatSession {
@@ -18,7 +21,7 @@ class ChatSession {
18
21
  * Creates a new ChatSession instance.
19
22
  *
20
23
  * Each session creates its own isolated services:
21
- * - ConversationHistoryProvider (with session-specific storage, shared across LLM switches)
24
+ * - ConversationStore (with session-specific storage, shared across LLM switches)
22
25
  * - LLM service (creates its own properly-typed ContextManager internally)
23
26
  * - SessionEventBus (session-local event handling)
24
27
  *
@@ -31,11 +34,19 @@ class ChatSession {
31
34
  this.id = id;
32
35
  this.logger = logger.createChild(DextoLogComponent.SESSION);
33
36
  this.eventBus = new SessionEventBus();
34
- this.messageQueue = new MessageQueueService(
37
+ this.steerQueue = new MessageQueueService(
35
38
  this.eventBus,
36
39
  this.logger,
37
40
  this.id,
38
- this.services.messageQueueStore
41
+ this.services.steerQueueStore,
42
+ "steer"
43
+ );
44
+ this.followUpQueue = new MessageQueueService(
45
+ this.eventBus,
46
+ this.logger,
47
+ this.id,
48
+ this.services.followUpQueueStore,
49
+ "follow-up"
39
50
  );
40
51
  this.setupTokenAccumulation();
41
52
  this.logger.debug(`ChatSession ${this.id}: Created, awaiting initialization`);
@@ -53,10 +64,10 @@ class ChatSession {
53
64
  */
54
65
  eventBus;
55
66
  /**
56
- * History provider that persists conversation messages.
67
+ * Store that persists conversation messages.
57
68
  * Shared across LLM switches to maintain conversation continuity.
58
69
  */
59
- historyProvider;
70
+ conversationStore;
60
71
  /**
61
72
  * Handles AI model interactions, tool execution, and response generation for this session.
62
73
  *
@@ -65,10 +76,11 @@ class ChatSession {
65
76
  */
66
77
  llmService;
67
78
  /**
68
- * Durable queued follow-up messages for this session.
69
- * Reused across LLM switches so mid-task follow-ups survive service recreation.
79
+ * Durable queued user input for this session.
80
+ * Reused across LLM switches so mid-task steer/follow-up input survives service recreation.
70
81
  */
71
- messageQueue;
82
+ steerQueue;
83
+ followUpQueue;
72
84
  activeForwarderCleanup = null;
73
85
  /**
74
86
  * Token accumulator listener for cleanup.
@@ -109,9 +121,10 @@ class ChatSession {
109
121
  setupTokenAccumulation() {
110
122
  this.tokenAccumulatorListener = (payload) => {
111
123
  if (payload.tokenUsage) {
124
+ const tokenUsage = normalizeTokenUsageForAccounting(payload.tokenUsage);
112
125
  const llmConfig = this.services.stateManager.getLLMConfig(this.id);
113
126
  const isChatGPTLogin = llmConfig.provider === "openai-compatible" && parseCodexBaseURL(llmConfig.baseURL)?.authMode === "chatgpt";
114
- const hasMeaningfulUsage = hasMeaningfulTokenUsage(payload.tokenUsage);
127
+ const hasMeaningfulUsage = hasMeaningfulTokenUsage(tokenUsage);
115
128
  if (isChatGPTLogin && !hasMeaningfulUsage) {
116
129
  this.services.sessionManager.markUntrackedChatGPTLoginUsage(this.id).catch((err) => {
117
130
  this.logger.warn(
@@ -127,11 +140,11 @@ class ChatSession {
127
140
  const pricingMetadata = getUsagePricingMetadata({
128
141
  provider: modelInfo.provider,
129
142
  model: modelInfo.model,
130
- tokenUsage: payload.tokenUsage
143
+ tokenUsage
131
144
  });
132
145
  this.services.sessionManager.accumulateTokenUsage(
133
146
  this.id,
134
- payload.tokenUsage,
147
+ tokenUsage,
135
148
  payload.estimatedCost ?? pricingMetadata.estimatedCost,
136
149
  modelInfo
137
150
  ).catch((err) => {
@@ -149,12 +162,9 @@ class ChatSession {
149
162
  async initializeServices() {
150
163
  const runtimeConfig = this.services.stateManager.getRuntimeConfig(this.id);
151
164
  const llmConfig = runtimeConfig.llm;
152
- await this.messageQueue.initialize();
153
- this.historyProvider = createDatabaseHistoryProvider(
154
- this.services.storageManager.getDatabase(),
155
- this.id,
156
- this.logger
157
- );
165
+ await this.steerQueue.initialize();
166
+ await this.followUpQueue.initialize();
167
+ this.conversationStore = this.services.conversationStore;
158
168
  this.llmService = await this.createSessionLLMService(llmConfig, runtimeConfig.usageScopeId);
159
169
  this.logger.debug(`ChatSession ${this.id}: Services initialized with storage`);
160
170
  }
@@ -164,13 +174,14 @@ class ChatSession {
164
174
  usageScopeId,
165
175
  compactionStrategy: this.services.compactionStrategy,
166
176
  ...workspace?.path !== void 0 && { cwd: workspace.path },
167
- messageQueue: this.messageQueue
177
+ steerQueue: this.steerQueue,
178
+ followUpQueue: this.followUpQueue
168
179
  };
169
180
  return createLLMService(
170
181
  llmConfig,
171
182
  this.services.toolManager,
172
183
  this.services.systemPromptManager,
173
- this.historyProvider,
184
+ this.conversationStore,
174
185
  this.eventBus,
175
186
  this.id,
176
187
  this.services.resourceManager,
@@ -205,8 +216,8 @@ class ChatSession {
205
216
  timestamp: timestamp + 1,
206
217
  content: [{ type: "text", text: errorContent }]
207
218
  };
208
- await this.historyProvider.saveMessage(userMessage);
209
- await this.historyProvider.saveMessage(assistantMessage);
219
+ await this.conversationStore.saveMessage({ sessionId: this.id, message: userMessage });
220
+ await this.conversationStore.saveMessage({ sessionId: this.id, message: assistantMessage });
210
221
  const llmConfig = this.services.stateManager.getLLMConfig(this.id);
211
222
  this.eventBus.emit("llm:response", {
212
223
  content: errorContent,
@@ -215,6 +226,83 @@ class ChatSession {
215
226
  ...assistantMessage.id && { messageId: assistantMessage.id }
216
227
  });
217
228
  }
229
+ normalizeContent(content) {
230
+ return typeof content === "string" ? [{ type: "text", text: content }] : content;
231
+ }
232
+ async prepareTurnInput(content, signal, runContext) {
233
+ const parts = this.normalizeContent(content);
234
+ const textParts = parts.filter(
235
+ (p) => p.type === "text"
236
+ );
237
+ const imageParts = parts.filter((p) => p.type === "image");
238
+ const fileParts = parts.filter((p) => p.type === "file");
239
+ this.logger.debug(
240
+ `Streaming session ${this.id} | textParts=${textParts.length} | images=${imageParts.length} | files=${fileParts.length}`
241
+ );
242
+ const textContent = textParts.map((p) => p.text).join("\n");
243
+ const firstImage = imageParts[0];
244
+ const firstFile = fileParts[0];
245
+ const beforeLLMPayload = {
246
+ text: textContent,
247
+ ...firstImage && {
248
+ imageData: {
249
+ image: typeof firstImage.image === "string" ? firstImage.image : "[binary]",
250
+ mimeType: firstImage.mimeType || "image/jpeg"
251
+ }
252
+ },
253
+ ...firstFile && {
254
+ fileData: {
255
+ data: typeof firstFile.data === "string" ? firstFile.data : "[binary]",
256
+ mimeType: firstFile.mimeType,
257
+ ...firstFile.filename && { filename: firstFile.filename }
258
+ }
259
+ },
260
+ sessionId: this.id
261
+ };
262
+ const modifiedBeforePayload = await this.services.hookManager.executeHooks(
263
+ "beforeLLMRequest",
264
+ beforeLLMPayload,
265
+ {
266
+ sessionManager: this.services.sessionManager,
267
+ mcpManager: this.services.mcpManager,
268
+ toolManager: this.services.toolManager,
269
+ stateManager: this.services.stateManager,
270
+ ...runContext !== void 0 && { runContext },
271
+ sessionId: this.id,
272
+ abortSignal: signal
273
+ }
274
+ );
275
+ if (modifiedBeforePayload.text === textContent || textParts.length === 0) {
276
+ return parts;
277
+ }
278
+ return [
279
+ { type: "text", text: modifiedBeforePayload.text },
280
+ ...parts.filter((p) => p.type !== "text")
281
+ ];
282
+ }
283
+ async applyBeforeResponseHooks(content, signal, runContext) {
284
+ const llmConfig = this.services.stateManager.getLLMConfig(this.id);
285
+ const beforeResponsePayload = {
286
+ content,
287
+ provider: llmConfig.provider,
288
+ model: llmConfig.model,
289
+ sessionId: this.id
290
+ };
291
+ const modifiedResponsePayload = await this.services.hookManager.executeHooks(
292
+ "beforeResponse",
293
+ beforeResponsePayload,
294
+ {
295
+ sessionManager: this.services.sessionManager,
296
+ mcpManager: this.services.mcpManager,
297
+ toolManager: this.services.toolManager,
298
+ stateManager: this.services.stateManager,
299
+ ...runContext !== void 0 && { runContext },
300
+ sessionId: this.id,
301
+ abortSignal: signal
302
+ }
303
+ );
304
+ return modifiedResponsePayload.content;
305
+ }
218
306
  /**
219
307
  * Stream a response for the given content.
220
308
  * Primary method for running conversations with multi-image support.
@@ -237,15 +325,7 @@ class ChatSession {
237
325
  * ```
238
326
  */
239
327
  async stream(content, options) {
240
- const parts = typeof content === "string" ? [{ type: "text", text: content }] : content;
241
- const textParts = parts.filter(
242
- (p) => p.type === "text"
243
- );
244
- const imageParts = parts.filter((p) => p.type === "image");
245
- const fileParts = parts.filter((p) => p.type === "file");
246
- this.logger.debug(
247
- `Streaming session ${this.id} | textParts=${textParts.length} | images=${imageParts.length} | files=${fileParts.length}`
248
- );
328
+ const parts = this.normalizeContent(content);
249
329
  if (this.isBusy()) {
250
330
  throw SessionError.busy(this.id);
251
331
  }
@@ -253,70 +333,17 @@ class ChatSession {
253
333
  const signal = options?.signal ? this.combineSignals(options.signal, this.currentRunController.signal) : this.currentRunController.signal;
254
334
  const detachForwarders = this.attachRunEventForwarders(options?.runContext);
255
335
  try {
256
- const textContent = textParts.map((p) => p.text).join("\n");
257
- const firstImage = imageParts[0];
258
- const firstFile = fileParts[0];
259
- const beforeLLMPayload = {
260
- text: textContent,
261
- ...firstImage && {
262
- imageData: {
263
- image: typeof firstImage.image === "string" ? firstImage.image : "[binary]",
264
- mimeType: firstImage.mimeType || "image/jpeg"
265
- }
266
- },
267
- ...firstFile && {
268
- fileData: {
269
- data: typeof firstFile.data === "string" ? firstFile.data : "[binary]",
270
- mimeType: firstFile.mimeType,
271
- ...firstFile.filename && { filename: firstFile.filename }
272
- }
273
- },
274
- sessionId: this.id
275
- };
276
- const modifiedBeforePayload = await this.services.hookManager.executeHooks(
277
- "beforeLLMRequest",
278
- beforeLLMPayload,
279
- {
280
- sessionManager: this.services.sessionManager,
281
- mcpManager: this.services.mcpManager,
282
- toolManager: this.services.toolManager,
283
- stateManager: this.services.stateManager,
284
- ...options?.runContext !== void 0 && { runContext: options.runContext },
285
- sessionId: this.id,
286
- abortSignal: signal
287
- }
288
- );
289
- let modifiedParts = [...parts];
290
- if (modifiedBeforePayload.text !== textContent && textParts.length > 0) {
291
- modifiedParts = modifiedParts.filter((p) => p.type !== "text");
292
- modifiedParts.unshift({ type: "text", text: modifiedBeforePayload.text });
293
- }
336
+ const modifiedParts = await this.prepareTurnInput(content, signal, options?.runContext);
294
337
  const streamResult = await this.llmService.stream(modifiedParts, {
295
338
  signal,
296
339
  ...options?.runContext !== void 0 && { runContext: options.runContext }
297
340
  });
298
- const llmConfig = this.services.stateManager.getLLMConfig(this.id);
299
- const beforeResponsePayload = {
300
- content: streamResult.text,
301
- provider: llmConfig.provider,
302
- model: llmConfig.model,
303
- sessionId: this.id
304
- };
305
- const modifiedResponsePayload = await this.services.hookManager.executeHooks(
306
- "beforeResponse",
307
- beforeResponsePayload,
308
- {
309
- sessionManager: this.services.sessionManager,
310
- mcpManager: this.services.mcpManager,
311
- toolManager: this.services.toolManager,
312
- stateManager: this.services.stateManager,
313
- ...options?.runContext !== void 0 && { runContext: options.runContext },
314
- sessionId: this.id,
315
- abortSignal: signal
316
- }
317
- );
318
341
  return {
319
- text: modifiedResponsePayload.content
342
+ text: await this.applyBeforeResponseHooks(
343
+ streamResult.text,
344
+ signal,
345
+ options?.runContext
346
+ )
320
347
  };
321
348
  } catch (error) {
322
349
  const aborted = error instanceof Error && error.name === "AbortError" || typeof error === "object" && error !== null && error.aborted === true;
@@ -370,6 +397,94 @@ class ChatSession {
370
397
  this.currentRunController = null;
371
398
  }
372
399
  }
400
+ async createTurnDriver(input) {
401
+ if (this.isBusy()) {
402
+ throw SessionError.busy(this.id);
403
+ }
404
+ this.currentRunController = new AbortController();
405
+ const signal = input.signal ? this.combineSignals(input.signal, this.currentRunController.signal) : this.currentRunController.signal;
406
+ const detachForwarders = this.attachRunEventForwarders(input.runContext);
407
+ try {
408
+ if (input.kind === "start") {
409
+ const modifiedParts = await this.prepareTurnInput(
410
+ input.content,
411
+ signal,
412
+ input.runContext
413
+ );
414
+ await this.llmService.getContextManager().addUserMessage(modifiedParts);
415
+ }
416
+ const driver = await this.llmService.createTurnDriver({
417
+ signal,
418
+ streaming: input.streaming ?? true,
419
+ ...input.runContext !== void 0 && { runContext: input.runContext },
420
+ ...input.kind === "resume" ? { state: input.state } : {}
421
+ });
422
+ return this.wrapTurnDriver(driver, signal, input.runContext, detachForwarders);
423
+ } catch (error) {
424
+ if (input.kind === "start" && error instanceof DextoRuntimeError && error.code === HookErrorCode.HOOK_BLOCKED_EXECUTION && error.scope === ErrorScope.HOOK && error.type === ErrorType.FORBIDDEN) {
425
+ const textContent = this.normalizeContent(input.content).filter((p) => p.type === "text").map((p) => p.text).join("\n");
426
+ await this.saveBlockedInteraction(textContent, error.message);
427
+ }
428
+ detachForwarders();
429
+ this.currentRunController = null;
430
+ throw error;
431
+ }
432
+ }
433
+ wrapTurnDriver(driver, signal, runContext, detachForwarders) {
434
+ let closed = false;
435
+ const close = () => {
436
+ if (closed) {
437
+ return;
438
+ }
439
+ closed = true;
440
+ detachForwarders();
441
+ this.currentRunController = null;
442
+ };
443
+ return {
444
+ prepareNextModelStep: () => driver.prepareNextModelStep(),
445
+ runNextModelStep: () => driver.runNextModelStep(),
446
+ executeToolCalls: () => driver.executeToolCalls(),
447
+ decideNextStep: () => driver.decideNextStep(),
448
+ finish: async () => {
449
+ try {
450
+ const result = await driver.finish();
451
+ return {
452
+ ...result,
453
+ text: await this.applyBeforeResponseHooks(result.text, signal, runContext)
454
+ };
455
+ } finally {
456
+ driver.dispose();
457
+ close();
458
+ }
459
+ },
460
+ fail: async (error) => {
461
+ try {
462
+ return await driver.fail(error);
463
+ } finally {
464
+ driver.dispose();
465
+ close();
466
+ }
467
+ },
468
+ getState: () => driver.getState(),
469
+ checkpoint: () => {
470
+ try {
471
+ return driver.checkpoint();
472
+ } finally {
473
+ close();
474
+ }
475
+ },
476
+ dispose: () => {
477
+ if (closed) {
478
+ return;
479
+ }
480
+ try {
481
+ driver.dispose();
482
+ } finally {
483
+ close();
484
+ }
485
+ }
486
+ };
487
+ }
373
488
  /**
374
489
  * Combine multiple abort signals into one.
375
490
  */
@@ -405,7 +520,7 @@ class ChatSession {
405
520
  * ```
406
521
  */
407
522
  async getHistory() {
408
- return await this.historyProvider.getHistory();
523
+ return await this.conversationStore.listMessages({ sessionId: this.id });
409
524
  }
410
525
  /**
411
526
  * Reset the conversation history for this session.
@@ -533,40 +648,85 @@ class ChatSession {
533
648
  return this.currentRunController !== null && !this.currentRunController.signal.aborted;
534
649
  }
535
650
  /**
536
- * Queue a message for processing when the session is busy.
537
- * The message will be injected into the conversation when the current turn completes.
651
+ * Queue a message as active-turn steer input.
652
+ * The message is injected at the next executor boundary while the current turn is active.
653
+ *
654
+ * @param message The user message to use as steer input
655
+ * @returns Queue position and message ID
656
+ */
657
+ async steer(message) {
658
+ return await this.llmService.getSteerQueue().enqueue(message);
659
+ }
660
+ /**
661
+ * Queue a follow-up message for processing after the current turn naturally completes.
538
662
  *
539
- * @param message The user message to queue
663
+ * @param message The user message to queue as follow-up work
540
664
  * @returns Queue position and message ID
541
665
  */
542
- async queueMessage(message) {
543
- return await this.llmService.getMessageQueue().enqueue(message);
666
+ async followUp(message) {
667
+ return await this.llmService.getFollowUpQueue().enqueue(message);
668
+ }
669
+ /**
670
+ * Get all steer messages currently queued.
671
+ * @returns Array of steer messages
672
+ */
673
+ getSteerMessages() {
674
+ return this.llmService.getSteerQueue().getAll();
675
+ }
676
+ /**
677
+ * Get all follow-up messages currently queued.
678
+ * @returns Array of follow-up messages
679
+ */
680
+ getFollowUpMessages() {
681
+ return this.llmService.getFollowUpQueue().getAll();
544
682
  }
545
683
  /**
546
- * Get all messages currently in the queue.
547
- * @returns Array of queued messages
684
+ * Remove a steer message.
685
+ * @param id Message ID to remove
686
+ * @returns true if message was found and removed; false otherwise
548
687
  */
549
- getQueuedMessages() {
550
- return this.llmService.getMessageQueue().getAll();
688
+ async removeSteerMessage(id) {
689
+ return await this.llmService.getSteerQueue().remove(id);
551
690
  }
552
691
  /**
553
- * Remove a queued message.
692
+ * Remove a follow-up message.
554
693
  * @param id Message ID to remove
555
694
  * @returns true if message was found and removed; false otherwise
556
695
  */
557
- async removeQueuedMessage(id) {
558
- return await this.llmService.getMessageQueue().remove(id);
696
+ async removeFollowUpMessage(id) {
697
+ return await this.llmService.getFollowUpQueue().remove(id);
559
698
  }
560
699
  /**
561
- * Clear all queued messages.
700
+ * Clear all steer messages.
562
701
  * @returns Number of messages that were cleared
563
702
  */
564
- async clearMessageQueue() {
565
- const queue = this.llmService.getMessageQueue();
703
+ async clearSteerQueue() {
704
+ const queue = this.llmService.getSteerQueue();
566
705
  const count = queue.pendingCount();
567
706
  await queue.clear();
568
707
  return count;
569
708
  }
709
+ /**
710
+ * Clear all follow-up messages.
711
+ * @returns Number of messages that were cleared
712
+ */
713
+ async clearFollowUpQueue() {
714
+ const queue = this.llmService.getFollowUpQueue();
715
+ const count = queue.pendingCount();
716
+ await queue.clear();
717
+ return count;
718
+ }
719
+ /**
720
+ * Clear all pending steer and follow-up input for this session.
721
+ * @returns Number of messages that were cleared
722
+ */
723
+ async clearPendingInput() {
724
+ const [steerCount, followUpCount] = await Promise.all([
725
+ this.clearSteerQueue(),
726
+ this.clearFollowUpQueue()
727
+ ]);
728
+ return steerCount + followUpCount;
729
+ }
570
730
  /**
571
731
  * Cancel the currently running turn for this session, if any.
572
732
  * Returns true if a run was in progress and was signaled to abort.
@@ -1,4 +1,4 @@
1
- import "../chunk-PTJYTZNU.js";
1
+ import "../chunk-C6A6W6XS.js";
2
2
  var SessionErrorCode = /* @__PURE__ */ ((SessionErrorCode2) => {
3
3
  SessionErrorCode2["SESSION_NOT_FOUND"] = "session_not_found";
4
4
  SessionErrorCode2["SESSION_INITIALIZATION_FAILED"] = "session_initialization_failed";
@@ -1,4 +1,4 @@
1
- import "../chunk-PTJYTZNU.js";
1
+ import "../chunk-C6A6W6XS.js";
2
2
  import { DextoRuntimeError } from "../errors/DextoRuntimeError.js";
3
3
  import { ErrorScope, ErrorType } from "../errors/types.js";
4
4
  import { SessionErrorCode } from "./error-codes.js";
@@ -19,11 +19,19 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var session_exports = {};
20
20
  __export(session_exports, {
21
21
  ChatSession: () => import_chat_session.ChatSession,
22
+ CoalescedMessageSchema: () => import_types.CoalescedMessageSchema,
22
23
  MessageQueueService: () => import_message_queue.MessageQueueService,
24
+ ModelStatisticsSchema: () => import_schemas.ModelStatisticsSchema,
25
+ QueuedMessageSchema: () => import_types.QueuedMessageSchema,
26
+ QueuedMessagesSchema: () => import_types.QueuedMessagesSchema,
23
27
  SessionConfigSchema: () => import_schemas.SessionConfigSchema,
28
+ SessionDataSchema: () => import_schemas.SessionDataSchema,
24
29
  SessionError: () => import_errors.SessionError,
25
30
  SessionErrorCode: () => import_error_codes.SessionErrorCode,
26
- SessionManager: () => import_session_manager.SessionManager
31
+ SessionManager: () => import_session_manager.SessionManager,
32
+ SessionTokenUsageSchema: () => import_schemas.SessionTokenUsageSchema,
33
+ SessionUsageTrackingSchema: () => import_schemas.SessionUsageTrackingSchema,
34
+ parseSessionData: () => import_schemas.parseSessionData
27
35
  });
28
36
  module.exports = __toCommonJS(session_exports);
29
37
  var import_chat_session = require("./chat-session.js");
@@ -31,13 +39,22 @@ var import_session_manager = require("./session-manager.js");
31
39
  var import_error_codes = require("./error-codes.js");
32
40
  var import_errors = require("./errors.js");
33
41
  var import_message_queue = require("./message-queue.js");
42
+ var import_types = require("./types.js");
34
43
  var import_schemas = require("./schemas.js");
35
44
  // Annotate the CommonJS export names for ESM import in node:
36
45
  0 && (module.exports = {
37
46
  ChatSession,
47
+ CoalescedMessageSchema,
38
48
  MessageQueueService,
49
+ ModelStatisticsSchema,
50
+ QueuedMessageSchema,
51
+ QueuedMessagesSchema,
39
52
  SessionConfigSchema,
53
+ SessionDataSchema,
40
54
  SessionError,
41
55
  SessionErrorCode,
42
- SessionManager
56
+ SessionManager,
57
+ SessionTokenUsageSchema,
58
+ SessionUsageTrackingSchema,
59
+ parseSessionData
43
60
  });
@@ -1,11 +1,12 @@
1
- export { ChatSession } from './chat-session.js';
1
+ export { ChatSession, type ChatSessionTurnDriverInput } from './chat-session.js';
2
2
  export { SessionManager } from './session-manager.js';
3
- export type { SessionMetadata, SessionLoggerFactory } from './session-manager.js';
3
+ export type { ModelStatistics, SessionData, SessionLoggerFactory, SessionMetadata, SessionTokenUsage, SessionUsageTracking, } from './session-manager.js';
4
4
  export { SessionErrorCode } from './error-codes.js';
5
5
  export { SessionError } from './errors.js';
6
6
  export { MessageQueueService } from './message-queue.js';
7
7
  export type { UserMessageInput } from './message-queue.js';
8
+ export { CoalescedMessageSchema, QueuedMessageSchema, QueuedMessagesSchema } from './types.js';
8
9
  export type { QueuedMessage, CoalescedMessage } from './types.js';
9
- export { SessionConfigSchema } from './schemas.js';
10
+ export { ModelStatisticsSchema, SessionConfigSchema, SessionDataSchema, SessionTokenUsageSchema, SessionUsageTrackingSchema, parseSessionData, } from './schemas.js';
10
11
  export type { SessionConfig, ValidatedSessionConfig } from './schemas.js';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EACR,eAAe,EACf,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC/F,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EACH,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,0BAA0B,EAC1B,gBAAgB,GACnB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
@@ -1,15 +1,31 @@
1
- import "../chunk-PTJYTZNU.js";
1
+ import "../chunk-C6A6W6XS.js";
2
2
  import { ChatSession } from "./chat-session.js";
3
3
  import { SessionManager } from "./session-manager.js";
4
4
  import { SessionErrorCode } from "./error-codes.js";
5
5
  import { SessionError } from "./errors.js";
6
6
  import { MessageQueueService } from "./message-queue.js";
7
- import { SessionConfigSchema } from "./schemas.js";
7
+ import { CoalescedMessageSchema, QueuedMessageSchema, QueuedMessagesSchema } from "./types.js";
8
+ import {
9
+ ModelStatisticsSchema,
10
+ SessionConfigSchema,
11
+ SessionDataSchema,
12
+ SessionTokenUsageSchema,
13
+ SessionUsageTrackingSchema,
14
+ parseSessionData
15
+ } from "./schemas.js";
8
16
  export {
9
17
  ChatSession,
18
+ CoalescedMessageSchema,
10
19
  MessageQueueService,
20
+ ModelStatisticsSchema,
21
+ QueuedMessageSchema,
22
+ QueuedMessagesSchema,
11
23
  SessionConfigSchema,
24
+ SessionDataSchema,
12
25
  SessionError,
13
26
  SessionErrorCode,
14
- SessionManager
27
+ SessionManager,
28
+ SessionTokenUsageSchema,
29
+ SessionUsageTrackingSchema,
30
+ parseSessionData
15
31
  };