@dexto/core 1.3.0 → 1.4.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 (479) hide show
  1. package/README.md +17 -9
  2. package/dist/agent/DextoAgent.cjs +548 -207
  3. package/dist/agent/DextoAgent.d.ts +156 -33
  4. package/dist/agent/DextoAgent.d.ts.map +1 -1
  5. package/dist/agent/DextoAgent.js +545 -204
  6. package/dist/agent/agentCard.js +1 -1
  7. package/dist/agent/error-codes.cjs +1 -0
  8. package/dist/agent/error-codes.d.ts +2 -1
  9. package/dist/agent/error-codes.d.ts.map +1 -1
  10. package/dist/agent/error-codes.js +2 -1
  11. package/dist/agent/errors.cjs +13 -0
  12. package/dist/agent/errors.d.ts +4 -0
  13. package/dist/agent/errors.d.ts.map +1 -1
  14. package/dist/agent/errors.js +14 -1
  15. package/dist/agent/index.d.ts +1 -1
  16. package/dist/agent/index.d.ts.map +1 -1
  17. package/dist/agent/index.js +1 -1
  18. package/dist/agent/schemas.cjs +3 -0
  19. package/dist/agent/schemas.d.ts +92 -55
  20. package/dist/agent/schemas.d.ts.map +1 -1
  21. package/dist/agent/schemas.js +6 -2
  22. package/dist/agent/state-manager.cjs +5 -5
  23. package/dist/agent/state-manager.d.ts +4 -4
  24. package/dist/agent/state-manager.js +6 -6
  25. package/dist/agent/types.d.ts +24 -10
  26. package/dist/agent/types.d.ts.map +1 -1
  27. package/dist/approval/error-codes.js +1 -1
  28. package/dist/approval/errors.js +1 -1
  29. package/dist/approval/factory.js +1 -1
  30. package/dist/approval/index.js +1 -1
  31. package/dist/approval/manager.cjs +69 -3
  32. package/dist/approval/manager.d.ts +41 -3
  33. package/dist/approval/manager.d.ts.map +1 -1
  34. package/dist/approval/manager.js +70 -4
  35. package/dist/approval/schemas.cjs +18 -4
  36. package/dist/approval/schemas.d.ts +106 -32
  37. package/dist/approval/schemas.d.ts.map +1 -1
  38. package/dist/approval/schemas.js +19 -5
  39. package/dist/approval/types.d.ts +6 -0
  40. package/dist/approval/types.d.ts.map +1 -1
  41. package/dist/approval/types.js +1 -1
  42. package/dist/{chunk-C6A6W6XS.js → chunk-PTJYTZNU.js} +44 -1
  43. package/dist/{llm/tokenizer/default.cjs → context/compression/overflow.cjs} +20 -18
  44. package/dist/context/compression/overflow.d.ts +33 -0
  45. package/dist/context/compression/overflow.d.ts.map +1 -0
  46. package/dist/context/compression/overflow.js +19 -0
  47. package/dist/context/compression/reactive-overflow.cjs +201 -0
  48. package/dist/context/compression/reactive-overflow.d.ts +81 -0
  49. package/dist/context/compression/reactive-overflow.d.ts.map +1 -0
  50. package/dist/context/compression/reactive-overflow.js +178 -0
  51. package/dist/context/compression/types.d.ts +9 -7
  52. package/dist/context/compression/types.d.ts.map +1 -1
  53. package/dist/context/error-codes.cjs +3 -0
  54. package/dist/context/error-codes.d.ts +4 -1
  55. package/dist/context/error-codes.d.ts.map +1 -1
  56. package/dist/context/error-codes.js +4 -1
  57. package/dist/context/errors.cjs +28 -0
  58. package/dist/context/errors.d.ts +7 -0
  59. package/dist/context/errors.d.ts.map +1 -1
  60. package/dist/context/errors.js +29 -1
  61. package/dist/context/index.js +1 -1
  62. package/dist/context/manager.cjs +280 -323
  63. package/dist/context/manager.d.ts +65 -111
  64. package/dist/context/manager.d.ts.map +1 -1
  65. package/dist/context/manager.js +280 -328
  66. package/dist/context/media-helpers.js +1 -1
  67. package/dist/context/types.cjs +49 -0
  68. package/dist/context/types.d.ts +181 -72
  69. package/dist/context/types.d.ts.map +1 -1
  70. package/dist/context/types.js +35 -0
  71. package/dist/context/utils.cjs +266 -283
  72. package/dist/context/utils.d.ts +32 -18
  73. package/dist/context/utils.d.ts.map +1 -1
  74. package/dist/context/utils.js +266 -283
  75. package/dist/errors/DextoBaseError.js +1 -1
  76. package/dist/errors/DextoRuntimeError.js +1 -1
  77. package/dist/errors/DextoValidationError.js +1 -1
  78. package/dist/errors/index.js +1 -1
  79. package/dist/errors/result-bridge.js +1 -1
  80. package/dist/errors/types.js +1 -1
  81. package/dist/events/index.cjs +18 -1
  82. package/dist/events/index.d.ts +149 -12
  83. package/dist/events/index.d.ts.map +1 -1
  84. package/dist/events/index.js +19 -2
  85. package/dist/filesystem/error-codes.js +1 -1
  86. package/dist/filesystem/errors.js +1 -1
  87. package/dist/filesystem/filesystem-service.js +1 -1
  88. package/dist/filesystem/index.js +1 -1
  89. package/dist/filesystem/path-validator.js +1 -1
  90. package/dist/index.browser.cjs +23 -8
  91. package/dist/index.browser.d.ts +4 -3
  92. package/dist/index.browser.d.ts.map +1 -1
  93. package/dist/index.browser.js +20 -3
  94. package/dist/index.js +1 -1
  95. package/dist/llm/error-codes.cjs +0 -1
  96. package/dist/llm/error-codes.d.ts +0 -1
  97. package/dist/llm/error-codes.d.ts.map +1 -1
  98. package/dist/llm/error-codes.js +1 -2
  99. package/dist/llm/errors.cjs +10 -10
  100. package/dist/llm/errors.d.ts +5 -6
  101. package/dist/llm/errors.d.ts.map +1 -1
  102. package/dist/llm/errors.js +12 -12
  103. package/dist/llm/executor/stream-processor.cjs +367 -0
  104. package/dist/llm/executor/stream-processor.d.ts +55 -0
  105. package/dist/llm/executor/stream-processor.d.ts.map +1 -0
  106. package/dist/llm/executor/stream-processor.js +344 -0
  107. package/dist/llm/executor/tool-output-truncator.cjs +75 -0
  108. package/dist/llm/executor/tool-output-truncator.d.ts +27 -0
  109. package/dist/llm/executor/tool-output-truncator.d.ts.map +1 -0
  110. package/dist/llm/executor/tool-output-truncator.js +48 -0
  111. package/dist/llm/executor/turn-executor.cjs +753 -0
  112. package/dist/llm/executor/turn-executor.d.ts +166 -0
  113. package/dist/llm/executor/turn-executor.d.ts.map +1 -0
  114. package/dist/llm/executor/turn-executor.js +684 -0
  115. package/dist/llm/executor/types.d.ts +27 -0
  116. package/dist/llm/executor/types.d.ts.map +1 -0
  117. package/dist/llm/formatters/vercel.cjs +20 -186
  118. package/dist/llm/formatters/vercel.d.ts +2 -14
  119. package/dist/llm/formatters/vercel.d.ts.map +1 -1
  120. package/dist/llm/formatters/vercel.js +19 -185
  121. package/dist/llm/registry.cjs +36 -45
  122. package/dist/llm/registry.d.ts +53 -39
  123. package/dist/llm/registry.d.ts.map +1 -1
  124. package/dist/llm/registry.js +34 -42
  125. package/dist/llm/resolver.cjs +1 -31
  126. package/dist/llm/resolver.d.ts.map +1 -1
  127. package/dist/llm/resolver.js +2 -34
  128. package/dist/llm/schemas.cjs +2 -17
  129. package/dist/llm/schemas.d.ts +10 -23
  130. package/dist/llm/schemas.d.ts.map +1 -1
  131. package/dist/llm/schemas.js +5 -22
  132. package/dist/llm/services/factory.cjs +3 -92
  133. package/dist/llm/services/factory.d.ts +14 -4
  134. package/dist/llm/services/factory.d.ts.map +1 -1
  135. package/dist/llm/services/factory.js +4 -83
  136. package/dist/llm/services/test-utils.integration.cjs +6 -8
  137. package/dist/llm/services/test-utils.integration.d.ts.map +1 -1
  138. package/dist/llm/services/test-utils.integration.js +7 -9
  139. package/dist/llm/services/types.d.ts +1 -28
  140. package/dist/llm/services/types.d.ts.map +1 -1
  141. package/dist/llm/services/vercel.cjs +54 -468
  142. package/dist/llm/services/vercel.d.ts +38 -21
  143. package/dist/llm/services/vercel.d.ts.map +1 -1
  144. package/dist/llm/services/vercel.js +56 -475
  145. package/dist/llm/types.cjs +0 -3
  146. package/dist/llm/types.d.ts +8 -8
  147. package/dist/llm/types.d.ts.map +1 -1
  148. package/dist/llm/types.js +1 -3
  149. package/dist/llm/validation.js +1 -1
  150. package/dist/logger/browser.js +1 -1
  151. package/dist/logger/factory.js +1 -1
  152. package/dist/logger/index.js +1 -1
  153. package/dist/logger/logger.js +1 -1
  154. package/dist/logger/v2/dexto-logger.cjs +34 -6
  155. package/dist/logger/v2/dexto-logger.d.ts +20 -2
  156. package/dist/logger/v2/dexto-logger.d.ts.map +1 -1
  157. package/dist/logger/v2/dexto-logger.js +35 -7
  158. package/dist/logger/v2/error-codes.js +1 -1
  159. package/dist/logger/v2/errors.js +1 -1
  160. package/dist/logger/v2/schemas.js +1 -1
  161. package/dist/logger/v2/test-utils.cjs +70 -0
  162. package/dist/logger/v2/test-utils.d.ts +17 -0
  163. package/dist/logger/v2/test-utils.d.ts.map +1 -0
  164. package/dist/logger/v2/test-utils.js +46 -0
  165. package/dist/logger/v2/transport-factory.js +1 -1
  166. package/dist/logger/v2/transports/console-transport.js +1 -1
  167. package/dist/logger/v2/transports/file-transport.cjs +6 -0
  168. package/dist/logger/v2/transports/file-transport.d.ts +4 -0
  169. package/dist/logger/v2/transports/file-transport.d.ts.map +1 -1
  170. package/dist/logger/v2/transports/file-transport.js +7 -1
  171. package/dist/logger/v2/types.cjs +1 -0
  172. package/dist/logger/v2/types.d.ts +18 -2
  173. package/dist/logger/v2/types.d.ts.map +1 -1
  174. package/dist/logger/v2/types.js +2 -1
  175. package/dist/mcp/error-codes.cjs +1 -0
  176. package/dist/mcp/error-codes.d.ts +1 -0
  177. package/dist/mcp/error-codes.d.ts.map +1 -1
  178. package/dist/mcp/error-codes.js +2 -1
  179. package/dist/mcp/errors.cjs +13 -0
  180. package/dist/mcp/errors.d.ts +7 -0
  181. package/dist/mcp/errors.d.ts.map +1 -1
  182. package/dist/mcp/errors.js +14 -1
  183. package/dist/mcp/manager.cjs +4 -0
  184. package/dist/mcp/manager.d.ts.map +1 -1
  185. package/dist/mcp/manager.js +5 -1
  186. package/dist/mcp/mcp-client.js +1 -1
  187. package/dist/mcp/resolver.js +1 -1
  188. package/dist/mcp/schemas.cjs +6 -0
  189. package/dist/mcp/schemas.d.ts +52 -0
  190. package/dist/mcp/schemas.d.ts.map +1 -1
  191. package/dist/mcp/schemas.js +6 -1
  192. package/dist/memory/error-codes.js +1 -1
  193. package/dist/memory/errors.js +1 -1
  194. package/dist/memory/index.js +1 -1
  195. package/dist/memory/manager.js +1 -1
  196. package/dist/memory/schemas.d.ts +2 -2
  197. package/dist/memory/schemas.js +1 -1
  198. package/dist/plugins/builtins/content-policy.js +1 -1
  199. package/dist/plugins/builtins/response-sanitizer.js +1 -1
  200. package/dist/plugins/error-codes.js +1 -1
  201. package/dist/plugins/index.js +1 -1
  202. package/dist/plugins/loader.js +1 -1
  203. package/dist/plugins/manager.js +1 -1
  204. package/dist/plugins/registrations/builtins.js +1 -1
  205. package/dist/plugins/schemas.d.ts +3 -3
  206. package/dist/plugins/schemas.js +1 -1
  207. package/dist/plugins/types.d.ts +0 -1
  208. package/dist/plugins/types.d.ts.map +1 -1
  209. package/dist/process/command-validator.js +1 -1
  210. package/dist/process/error-codes.js +1 -1
  211. package/dist/process/errors.js +1 -1
  212. package/dist/process/index.js +1 -1
  213. package/dist/process/process-service.cjs +78 -26
  214. package/dist/process/process-service.d.ts +6 -1
  215. package/dist/process/process-service.d.ts.map +1 -1
  216. package/dist/process/process-service.js +79 -27
  217. package/dist/process/types.d.ts +2 -2
  218. package/dist/process/types.d.ts.map +1 -1
  219. package/dist/prompts/error-codes.cjs +1 -0
  220. package/dist/prompts/error-codes.d.ts +2 -1
  221. package/dist/prompts/error-codes.d.ts.map +1 -1
  222. package/dist/prompts/error-codes.js +2 -1
  223. package/dist/prompts/errors.cjs +15 -0
  224. package/dist/prompts/errors.d.ts +4 -0
  225. package/dist/prompts/errors.d.ts.map +1 -1
  226. package/dist/prompts/errors.js +16 -1
  227. package/dist/prompts/index.js +1 -1
  228. package/dist/prompts/name-validation.js +1 -1
  229. package/dist/prompts/prompt-manager.cjs +13 -2
  230. package/dist/prompts/prompt-manager.d.ts +7 -0
  231. package/dist/prompts/prompt-manager.d.ts.map +1 -1
  232. package/dist/prompts/prompt-manager.js +14 -3
  233. package/dist/prompts/providers/config-prompt-provider.cjs +12 -3
  234. package/dist/prompts/providers/config-prompt-provider.d.ts +2 -1
  235. package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
  236. package/dist/prompts/providers/config-prompt-provider.js +13 -4
  237. package/dist/prompts/providers/custom-prompt-provider.js +1 -1
  238. package/dist/prompts/providers/mcp-prompt-provider.js +1 -1
  239. package/dist/prompts/schemas.d.ts +12 -0
  240. package/dist/prompts/schemas.d.ts.map +1 -1
  241. package/dist/prompts/schemas.js +1 -1
  242. package/dist/prompts/types.d.ts +2 -0
  243. package/dist/prompts/types.d.ts.map +1 -1
  244. package/dist/prompts/utils.js +1 -1
  245. package/dist/resources/error-codes.js +1 -1
  246. package/dist/resources/errors.js +1 -1
  247. package/dist/resources/handlers/blob-handler.js +1 -1
  248. package/dist/resources/handlers/factory.js +1 -1
  249. package/dist/resources/handlers/filesystem-handler.js +1 -1
  250. package/dist/resources/index.js +1 -1
  251. package/dist/resources/internal-provider.js +1 -1
  252. package/dist/resources/manager.js +1 -1
  253. package/dist/resources/reference-parser.js +1 -1
  254. package/dist/resources/schemas.js +1 -1
  255. package/dist/search/index.js +1 -1
  256. package/dist/search/search-service.js +1 -1
  257. package/dist/session/chat-session.cjs +149 -51
  258. package/dist/session/chat-session.d.ts +69 -29
  259. package/dist/session/chat-session.d.ts.map +1 -1
  260. package/dist/session/chat-session.js +150 -52
  261. package/dist/session/error-codes.js +1 -1
  262. package/dist/session/errors.js +1 -1
  263. package/dist/session/history/database.cjs +134 -21
  264. package/dist/session/history/database.d.ts +37 -8
  265. package/dist/session/history/database.d.ts.map +1 -1
  266. package/dist/session/history/database.js +135 -22
  267. package/dist/session/history/factory.js +1 -1
  268. package/dist/session/history/memory.cjs +18 -0
  269. package/dist/session/history/memory.d.ts +8 -0
  270. package/dist/session/history/memory.d.ts.map +1 -1
  271. package/dist/session/history/memory.js +19 -1
  272. package/dist/session/history/types.d.ts +13 -1
  273. package/dist/session/history/types.d.ts.map +1 -1
  274. package/dist/session/index.cjs +3 -0
  275. package/dist/session/index.d.ts +3 -0
  276. package/dist/session/index.d.ts.map +1 -1
  277. package/dist/session/index.js +3 -1
  278. package/dist/session/message-queue.cjs +201 -0
  279. package/dist/session/message-queue.d.ts +114 -0
  280. package/dist/session/message-queue.d.ts.map +1 -0
  281. package/dist/session/message-queue.js +178 -0
  282. package/dist/session/schemas.js +1 -1
  283. package/dist/session/session-manager.cjs +57 -7
  284. package/dist/session/session-manager.d.ts +18 -0
  285. package/dist/session/session-manager.d.ts.map +1 -1
  286. package/dist/session/session-manager.js +58 -8
  287. package/dist/session/title-generator.cjs +4 -8
  288. package/dist/session/title-generator.d.ts +1 -2
  289. package/dist/session/title-generator.d.ts.map +1 -1
  290. package/dist/session/title-generator.js +5 -9
  291. package/dist/session/types.cjs +16 -0
  292. package/dist/session/types.d.ts +14 -0
  293. package/dist/session/types.d.ts.map +1 -0
  294. package/dist/session/types.js +0 -0
  295. package/dist/storage/blob/factory.js +1 -1
  296. package/dist/storage/blob/local-blob-store.js +1 -1
  297. package/dist/storage/blob/memory-blob-store.js +1 -1
  298. package/dist/storage/blob/schemas.js +1 -1
  299. package/dist/storage/cache/factory.js +1 -1
  300. package/dist/storage/cache/memory-cache-store.js +1 -1
  301. package/dist/storage/cache/redis-store.js +1 -1
  302. package/dist/storage/cache/schemas.js +1 -1
  303. package/dist/storage/database/factory.js +1 -1
  304. package/dist/storage/database/memory-database-store.js +1 -1
  305. package/dist/storage/database/postgres-store.cjs +12 -0
  306. package/dist/storage/database/postgres-store.d.ts.map +1 -1
  307. package/dist/storage/database/postgres-store.js +13 -1
  308. package/dist/storage/database/schemas.js +1 -1
  309. package/dist/storage/database/sqlite-store.js +1 -1
  310. package/dist/storage/error-codes.js +1 -1
  311. package/dist/storage/errors.js +1 -1
  312. package/dist/storage/index.js +1 -1
  313. package/dist/storage/schemas.js +1 -1
  314. package/dist/storage/storage-manager.js +1 -1
  315. package/dist/systemPrompt/contributors.js +1 -1
  316. package/dist/systemPrompt/error-codes.js +1 -1
  317. package/dist/systemPrompt/errors.js +1 -1
  318. package/dist/systemPrompt/in-built-prompts.js +1 -1
  319. package/dist/systemPrompt/index.js +1 -1
  320. package/dist/systemPrompt/manager.js +1 -1
  321. package/dist/systemPrompt/registry.js +1 -1
  322. package/dist/systemPrompt/schemas.d.ts +5 -5
  323. package/dist/systemPrompt/schemas.js +1 -1
  324. package/dist/telemetry/decorators.js +1 -1
  325. package/dist/telemetry/error-codes.js +1 -1
  326. package/dist/telemetry/errors.js +1 -1
  327. package/dist/telemetry/exporters.js +1 -1
  328. package/dist/telemetry/index.js +1 -1
  329. package/dist/telemetry/schemas.js +1 -1
  330. package/dist/telemetry/telemetry.js +1 -1
  331. package/dist/telemetry/utils.js +1 -1
  332. package/dist/tools/bash-pattern-utils.cjs +91 -0
  333. package/dist/tools/bash-pattern-utils.d.ts +58 -0
  334. package/dist/tools/bash-pattern-utils.d.ts.map +1 -0
  335. package/dist/tools/bash-pattern-utils.js +64 -0
  336. package/dist/tools/confirmation/allowed-tools-provider/factory.js +1 -1
  337. package/dist/tools/confirmation/allowed-tools-provider/in-memory.js +1 -1
  338. package/dist/tools/confirmation/allowed-tools-provider/storage.js +1 -1
  339. package/dist/tools/display-types.cjs +60 -0
  340. package/dist/tools/display-types.d.ts +133 -0
  341. package/dist/tools/display-types.d.ts.map +1 -0
  342. package/dist/tools/display-types.js +32 -0
  343. package/dist/tools/error-codes.cjs +2 -0
  344. package/dist/tools/error-codes.d.ts +3 -1
  345. package/dist/tools/error-codes.d.ts.map +1 -1
  346. package/dist/tools/error-codes.js +3 -1
  347. package/dist/tools/errors.cjs +30 -0
  348. package/dist/tools/errors.d.ts +16 -0
  349. package/dist/tools/errors.d.ts.map +1 -1
  350. package/dist/tools/errors.js +31 -1
  351. package/dist/tools/index.cjs +2 -0
  352. package/dist/tools/index.d.ts +1 -0
  353. package/dist/tools/index.d.ts.map +1 -1
  354. package/dist/tools/index.js +2 -1
  355. package/dist/tools/internal-tools/constants.js +1 -1
  356. package/dist/tools/internal-tools/implementations/ask-user-tool.cjs +1 -1
  357. package/dist/tools/internal-tools/implementations/ask-user-tool.js +2 -2
  358. package/dist/tools/internal-tools/implementations/bash-exec-tool.cjs +42 -18
  359. package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts +3 -3
  360. package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts.map +1 -1
  361. package/dist/tools/internal-tools/implementations/bash-exec-tool.js +43 -19
  362. package/dist/tools/internal-tools/implementations/bash-output-tool.js +1 -1
  363. package/dist/tools/internal-tools/implementations/delegate-to-url-tool.js +1 -1
  364. package/dist/tools/internal-tools/implementations/edit-file-tool.cjs +66 -1
  365. package/dist/tools/internal-tools/implementations/edit-file-tool.d.ts.map +1 -1
  366. package/dist/tools/internal-tools/implementations/edit-file-tool.js +67 -2
  367. package/dist/tools/internal-tools/implementations/glob-files-tool.cjs +14 -1
  368. package/dist/tools/internal-tools/implementations/glob-files-tool.d.ts.map +1 -1
  369. package/dist/tools/internal-tools/implementations/glob-files-tool.js +15 -2
  370. package/dist/tools/internal-tools/implementations/grep-content-tool.cjs +16 -1
  371. package/dist/tools/internal-tools/implementations/grep-content-tool.d.ts.map +1 -1
  372. package/dist/tools/internal-tools/implementations/grep-content-tool.js +17 -2
  373. package/dist/tools/internal-tools/implementations/kill-process-tool.js +1 -1
  374. package/dist/tools/internal-tools/implementations/read-file-tool.cjs +9 -1
  375. package/dist/tools/internal-tools/implementations/read-file-tool.d.ts.map +1 -1
  376. package/dist/tools/internal-tools/implementations/read-file-tool.js +10 -2
  377. package/dist/tools/internal-tools/implementations/search-history-tool.js +1 -1
  378. package/dist/tools/internal-tools/implementations/write-file-tool.cjs +69 -1
  379. package/dist/tools/internal-tools/implementations/write-file-tool.d.ts.map +1 -1
  380. package/dist/tools/internal-tools/implementations/write-file-tool.js +72 -2
  381. package/dist/tools/internal-tools/provider.cjs +27 -10
  382. package/dist/tools/internal-tools/provider.d.ts +8 -5
  383. package/dist/tools/internal-tools/provider.d.ts.map +1 -1
  384. package/dist/tools/internal-tools/provider.js +28 -11
  385. package/dist/tools/internal-tools/registry.cjs +4 -3
  386. package/dist/tools/internal-tools/registry.d.ts +28 -7
  387. package/dist/tools/internal-tools/registry.d.ts.map +1 -1
  388. package/dist/tools/internal-tools/registry.js +5 -4
  389. package/dist/tools/schemas.cjs +16 -6
  390. package/dist/tools/schemas.d.ts +31 -4
  391. package/dist/tools/schemas.d.ts.map +1 -1
  392. package/dist/tools/schemas.js +14 -6
  393. package/dist/tools/tool-manager.cjs +140 -18
  394. package/dist/tools/tool-manager.d.ts +23 -1
  395. package/dist/tools/tool-manager.d.ts.map +1 -1
  396. package/dist/tools/tool-manager.js +145 -19
  397. package/dist/tools/types.d.ts +20 -0
  398. package/dist/tools/types.d.ts.map +1 -1
  399. package/dist/utils/api-key-resolver.js +1 -1
  400. package/dist/utils/async-context.js +1 -1
  401. package/dist/utils/debug.js +1 -1
  402. package/dist/{llm/tokenizer/types.cjs → utils/defer.cjs} +19 -10
  403. package/dist/utils/defer.d.ts +63 -0
  404. package/dist/utils/defer.d.ts.map +1 -0
  405. package/dist/utils/defer.js +19 -0
  406. package/dist/utils/env-file.js +1 -1
  407. package/dist/utils/error-conversion.js +1 -1
  408. package/dist/utils/execution-context.js +1 -1
  409. package/dist/utils/fs-walk.js +1 -1
  410. package/dist/utils/index.cjs +3 -1
  411. package/dist/utils/index.d.ts +1 -0
  412. package/dist/utils/index.d.ts.map +1 -1
  413. package/dist/utils/index.js +1 -0
  414. package/dist/utils/path.js +1 -1
  415. package/dist/utils/redactor.js +1 -1
  416. package/dist/utils/result.js +1 -1
  417. package/dist/utils/safe-stringify.js +1 -1
  418. package/dist/utils/schema-metadata.js +1 -1
  419. package/dist/utils/schema.js +1 -1
  420. package/dist/utils/service-initializer.cjs +6 -2
  421. package/dist/utils/service-initializer.d.ts.map +1 -1
  422. package/dist/utils/service-initializer.js +7 -3
  423. package/dist/utils/user-info.js +1 -1
  424. package/dist/utils/zod-schema-converter.js +1 -1
  425. package/package.json +6 -7
  426. package/dist/context/compression/middle-removal.cjs +0 -95
  427. package/dist/context/compression/middle-removal.d.ts +0 -47
  428. package/dist/context/compression/middle-removal.d.ts.map +0 -1
  429. package/dist/context/compression/middle-removal.js +0 -72
  430. package/dist/context/compression/oldest-removal.cjs +0 -83
  431. package/dist/context/compression/oldest-removal.d.ts +0 -42
  432. package/dist/context/compression/oldest-removal.d.ts.map +0 -1
  433. package/dist/context/compression/oldest-removal.js +0 -60
  434. package/dist/llm/formatters/anthropic.cjs +0 -257
  435. package/dist/llm/formatters/anthropic.d.ts +0 -46
  436. package/dist/llm/formatters/anthropic.d.ts.map +0 -1
  437. package/dist/llm/formatters/anthropic.js +0 -239
  438. package/dist/llm/formatters/factory.cjs +0 -50
  439. package/dist/llm/formatters/factory.d.ts +0 -10
  440. package/dist/llm/formatters/factory.d.ts.map +0 -1
  441. package/dist/llm/formatters/factory.js +0 -27
  442. package/dist/llm/formatters/openai.cjs +0 -203
  443. package/dist/llm/formatters/openai.d.ts +0 -39
  444. package/dist/llm/formatters/openai.d.ts.map +0 -1
  445. package/dist/llm/formatters/openai.js +0 -184
  446. package/dist/llm/formatters/types.d.ts +0 -41
  447. package/dist/llm/formatters/types.d.ts.map +0 -1
  448. package/dist/llm/services/anthropic.cjs +0 -511
  449. package/dist/llm/services/anthropic.d.ts +0 -48
  450. package/dist/llm/services/anthropic.d.ts.map +0 -1
  451. package/dist/llm/services/anthropic.js +0 -447
  452. package/dist/llm/services/openai.cjs +0 -611
  453. package/dist/llm/services/openai.d.ts +0 -48
  454. package/dist/llm/services/openai.d.ts.map +0 -1
  455. package/dist/llm/services/openai.js +0 -547
  456. package/dist/llm/tokenizer/anthropic.cjs +0 -43
  457. package/dist/llm/tokenizer/anthropic.d.ts +0 -19
  458. package/dist/llm/tokenizer/anthropic.d.ts.map +0 -1
  459. package/dist/llm/tokenizer/anthropic.js +0 -20
  460. package/dist/llm/tokenizer/default.d.ts +0 -14
  461. package/dist/llm/tokenizer/default.d.ts.map +0 -1
  462. package/dist/llm/tokenizer/default.js +0 -18
  463. package/dist/llm/tokenizer/factory.cjs +0 -44
  464. package/dist/llm/tokenizer/factory.d.ts +0 -12
  465. package/dist/llm/tokenizer/factory.d.ts.map +0 -1
  466. package/dist/llm/tokenizer/factory.js +0 -21
  467. package/dist/llm/tokenizer/google.cjs +0 -52
  468. package/dist/llm/tokenizer/google.d.ts +0 -29
  469. package/dist/llm/tokenizer/google.d.ts.map +0 -1
  470. package/dist/llm/tokenizer/google.js +0 -29
  471. package/dist/llm/tokenizer/openai.cjs +0 -115
  472. package/dist/llm/tokenizer/openai.d.ts +0 -41
  473. package/dist/llm/tokenizer/openai.d.ts.map +0 -1
  474. package/dist/llm/tokenizer/openai.js +0 -91
  475. package/dist/llm/tokenizer/types.d.ts +0 -18
  476. package/dist/llm/tokenizer/types.d.ts.map +0 -1
  477. package/dist/llm/tokenizer/types.js +0 -10
  478. /package/dist/llm/{formatters → executor}/types.cjs +0 -0
  479. /package/dist/llm/{formatters → executor}/types.js +0 -0
@@ -0,0 +1,27 @@
1
+ import { TokenUsage } from '../types.js';
2
+ import { LLMFinishReason } from '../../events/index.js';
3
+ export interface ExecutorResult {
4
+ /**
5
+ * The accumulated text from assistant responses.
6
+ * TODO: Some LLMs are multimodal and can generate non-text content (images, audio, etc.).
7
+ * Consider extending this to support multimodal output in the future.
8
+ */
9
+ text: string;
10
+ /** Number of steps executed */
11
+ stepCount: number;
12
+ /** Token usage from the last step */
13
+ usage: TokenUsage | null;
14
+ /** Reason the execution finished */
15
+ finishReason: LLMFinishReason;
16
+ }
17
+ export interface StreamProcessorResult {
18
+ /**
19
+ * The accumulated text from text-delta events.
20
+ * TODO: Some LLMs are multimodal and can generate non-text content (images, audio, etc.).
21
+ * Consider extending this to support multimodal output in the future.
22
+ */
23
+ text: string;
24
+ finishReason: LLMFinishReason;
25
+ usage: TokenUsage;
26
+ }
27
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/llm/executor/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,cAAc;IAC3B;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,oCAAoC;IACpC,YAAY,EAAE,eAAe,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IAClC;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,eAAe,CAAC;IAC9B,KAAK,EAAE,UAAU,CAAC;CACrB"}
@@ -22,11 +22,21 @@ __export(vercel_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(vercel_exports);
24
24
  var import_utils = require("../../context/utils.cjs");
25
- var import_types4 = require("../../logger/v2/types.cjs");
25
+ var import_types2 = require("../../logger/v2/types.cjs");
26
+ function toUrlIfString(value) {
27
+ if (typeof value === "string" && /^https?:\/\//i.test(value)) {
28
+ try {
29
+ return new URL(value);
30
+ } catch {
31
+ return value;
32
+ }
33
+ }
34
+ return value;
35
+ }
26
36
  class VercelMessageFormatter {
27
37
  logger;
28
38
  constructor(logger) {
29
- this.logger = logger.createChild(import_types4.DextoLogComponent.LLM);
39
+ this.logger = logger.createChild(import_types2.DextoLogComponent.LLM);
30
40
  }
31
41
  /**
32
42
  * Formats internal messages into Vercel AI SDK format
@@ -59,11 +69,11 @@ class VercelMessageFormatter {
59
69
  switch (msg.role) {
60
70
  case "user":
61
71
  if (msg.content !== null) {
62
- const content = typeof msg.content === "string" ? msg.content : msg.content.map((part) => {
72
+ const content = typeof msg.content === "string" ? msg.content : msg.content.filter((part) => part.type !== "ui-resource").map((part) => {
63
73
  if (part.type === "file") {
64
74
  return {
65
75
  type: "file",
66
- data: part.data,
76
+ data: toUrlIfString(part.data),
67
77
  mediaType: part.mimeType,
68
78
  // Convert mimeType -> mediaType
69
79
  ...part.filename && { filename: part.filename }
@@ -71,8 +81,10 @@ class VercelMessageFormatter {
71
81
  } else if (part.type === "image") {
72
82
  return {
73
83
  type: "image",
74
- image: part.image,
75
- ...part.mimeType && { mediaType: part.mimeType }
84
+ image: toUrlIfString(part.image),
85
+ ...part.mimeType && {
86
+ mediaType: part.mimeType
87
+ }
76
88
  // Convert mimeType -> mediaType
77
89
  };
78
90
  }
@@ -146,189 +158,11 @@ class VercelMessageFormatter {
146
158
  formatSystemPrompt() {
147
159
  return null;
148
160
  }
149
- /**
150
- * Parses raw Vercel SDK stream response into internal message objects.
151
- * This handles StreamTextResult which has different structure than GenerateTextResult
152
- */
153
- async parseStreamResponse(response) {
154
- const resolvedResponse = await response.response;
155
- const adaptedResponse = {
156
- response: {
157
- messages: resolvedResponse?.messages || []
158
- }
159
- };
160
- const internal = this.parseResponse(
161
- adaptedResponse
162
- );
163
- const lastAssistant = [...internal].reverse().find((m) => m.role === "assistant");
164
- if (lastAssistant) {
165
- const usage = await response.totalUsage;
166
- const reasoningText = await response.reasoningText;
167
- if (reasoningText) {
168
- lastAssistant.reasoning = reasoningText;
169
- }
170
- if (usage) {
171
- lastAssistant.tokenUsage = {
172
- ...usage.inputTokens !== void 0 && { inputTokens: usage.inputTokens },
173
- ...usage.outputTokens !== void 0 && { outputTokens: usage.outputTokens },
174
- ...usage.reasoningTokens !== void 0 && {
175
- reasoningTokens: usage.reasoningTokens
176
- },
177
- ...usage.totalTokens !== void 0 && { totalTokens: usage.totalTokens }
178
- };
179
- }
180
- }
181
- return internal;
182
- }
183
- /**
184
- * Parses raw Vercel SDK response into internal message objects.
185
- * TODO: Break this into smaller functions
186
- */
187
- parseResponse(response) {
188
- const internal = [];
189
- if (!response.response.messages) return internal;
190
- for (const msg of response.response.messages) {
191
- const role = msg.role;
192
- switch (role) {
193
- case "user":
194
- if (typeof msg.content === "string") {
195
- internal.push({
196
- role: "user",
197
- content: [{ type: "text", text: msg.content }]
198
- });
199
- } else if (Array.isArray(msg.content)) {
200
- const srcParts = msg.content;
201
- const parts = srcParts.map((p) => {
202
- if (p.type === "text") return { type: "text", text: p.text };
203
- if (p.type === "image")
204
- return {
205
- type: "image",
206
- image: p.image,
207
- mimeType: p.mediaType ?? "image/jpeg"
208
- };
209
- if (p.type === "file")
210
- return {
211
- type: "file",
212
- data: p.data,
213
- mimeType: p.mediaType,
214
- filename: p.filename
215
- };
216
- return { type: "text", text: JSON.stringify(p) };
217
- });
218
- internal.push({
219
- role: "user",
220
- content: parts
221
- });
222
- }
223
- break;
224
- case "assistant": {
225
- let text = null;
226
- const calls = [];
227
- if (typeof msg.content === "string") {
228
- text = msg.content;
229
- } else if (Array.isArray(msg.content)) {
230
- let combined = "";
231
- for (const part of msg.content) {
232
- if (part.type === "text") {
233
- combined += part.text;
234
- } else if (part.type === "tool-call") {
235
- calls.push({
236
- id: part.toolCallId,
237
- type: "function",
238
- function: {
239
- name: part.toolName,
240
- arguments: typeof part.input === "string" ? part.input : JSON.stringify(part.input)
241
- }
242
- });
243
- }
244
- }
245
- text = combined || null;
246
- }
247
- const assistantMessage = {
248
- role: "assistant",
249
- content: text
250
- };
251
- if (calls.length > 0) {
252
- assistantMessage.toolCalls = calls;
253
- }
254
- internal.push(assistantMessage);
255
- break;
256
- }
257
- case "tool":
258
- if (Array.isArray(msg.content)) {
259
- for (const part of msg.content) {
260
- if (part.type === "tool-result") {
261
- let content;
262
- const output = part.output;
263
- if (output.type === "content") {
264
- content = output.value.map((item) => {
265
- if (item.type === "media") {
266
- return {
267
- type: "image",
268
- image: item.data,
269
- mimeType: item.mediaType
270
- };
271
- } else {
272
- return {
273
- type: "text",
274
- text: item.text
275
- };
276
- }
277
- });
278
- } else if (output.type === "text" || output.type === "error-text") {
279
- content = output.value;
280
- } else if (output.type === "json" || output.type === "error-json") {
281
- content = JSON.stringify(output.value);
282
- } else {
283
- content = JSON.stringify(output);
284
- }
285
- internal.push({
286
- role: "tool",
287
- content,
288
- toolCallId: part.toolCallId,
289
- name: part.toolName
290
- });
291
- }
292
- }
293
- }
294
- break;
295
- default:
296
- break;
297
- }
298
- }
299
- const lastAssistant = [...internal].reverse().find((m) => m.role === "assistant");
300
- const anyResp = response;
301
- const usage = anyResp.totalUsage;
302
- const reasoningText = anyResp.reasoningText;
303
- const modelId = response.response?.modelId;
304
- if (lastAssistant) {
305
- if (typeof reasoningText === "string" && reasoningText.length > 0) {
306
- lastAssistant.reasoning = reasoningText;
307
- }
308
- if (usage) {
309
- lastAssistant.tokenUsage = {
310
- ...usage.inputTokens !== void 0 && { inputTokens: usage.inputTokens },
311
- ...usage.outputTokens !== void 0 && { outputTokens: usage.outputTokens },
312
- ...usage.reasoningTokens !== void 0 && {
313
- reasoningTokens: usage.reasoningTokens
314
- },
315
- ...usage.totalTokens !== void 0 && { totalTokens: usage.totalTokens }
316
- };
317
- }
318
- if (modelId) {
319
- lastAssistant.model = modelId;
320
- }
321
- }
322
- return internal;
323
- }
324
161
  // Helper to format Assistant messages (with optional tool calls)
325
- // TODO: improve typing when InternalMessage type is updated
326
162
  formatAssistantMessage(msg) {
327
163
  if (msg.toolCalls && msg.toolCalls.length > 0) {
328
164
  const contentParts = [];
329
- if (typeof msg.content === "string" && msg.content.length > 0) {
330
- contentParts.push({ type: "text", text: msg.content });
331
- } else if (Array.isArray(msg.content)) {
165
+ if (Array.isArray(msg.content)) {
332
166
  const combined = msg.content.map((part) => part.type === "text" ? part.text : "").filter(Boolean).join("\n");
333
167
  if (combined) {
334
168
  contentParts.push({ type: "text", text: combined });
@@ -377,7 +211,7 @@ class VercelMessageFormatter {
377
211
  }
378
212
  }
379
213
  return {
380
- content: typeof msg.content === "string" ? [{ type: "text", text: msg.content }] : msg.content
214
+ content: typeof msg.content === "string" ? [{ type: "text", text: msg.content }] : msg.content === null ? [] : msg.content
381
215
  };
382
216
  }
383
217
  // Helper to format Tool result messages
@@ -1,8 +1,6 @@
1
1
  import type { ModelMessage } from 'ai';
2
- import { IMessageFormatter } from './types.js';
3
2
  import { LLMContext } from '../types.js';
4
- import { InternalMessage } from '../../context/types.js';
5
- import type { GenerateTextResult, StreamTextResult, ToolSet as VercelToolSet } from 'ai';
3
+ import type { InternalMessage } from '../../context/types.js';
6
4
  import type { IDextoLogger } from '../../logger/v2/types.js';
7
5
  /**
8
6
  * Message formatter for Vercel AI SDK.
@@ -15,7 +13,7 @@ import type { IDextoLogger } from '../../logger/v2/types.js';
15
13
  * Note: Vercel's implementation is different from OpenAI's standard,
16
14
  * particularly in its handling of function calls and responses.
17
15
  */
18
- export declare class VercelMessageFormatter implements IMessageFormatter {
16
+ export declare class VercelMessageFormatter {
19
17
  private logger;
20
18
  constructor(logger: IDextoLogger);
21
19
  /**
@@ -34,16 +32,6 @@ export declare class VercelMessageFormatter implements IMessageFormatter {
34
32
  * @returns null as Vercel doesn't need a separate system prompt
35
33
  */
36
34
  formatSystemPrompt(): null;
37
- /**
38
- * Parses raw Vercel SDK stream response into internal message objects.
39
- * This handles StreamTextResult which has different structure than GenerateTextResult
40
- */
41
- parseStreamResponse(response: StreamTextResult<VercelToolSet, unknown>): Promise<InternalMessage[]>;
42
- /**
43
- * Parses raw Vercel SDK response into internal message objects.
44
- * TODO: Break this into smaller functions
45
- */
46
- parseResponse(response: GenerateTextResult<VercelToolSet, unknown>): InternalMessage[];
47
35
  private formatAssistantMessage;
48
36
  private formatToolMessage;
49
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/llm/formatters/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,YAAY,EAOf,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,IAAI,CAAC;AAEzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D;;;;;;;;;;GAUG;AACH,qBAAa,sBAAuB,YAAW,iBAAiB;IAC5D,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAGhC;;;;;;OAMG;IACH,MAAM,CACF,OAAO,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,EACpC,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,MAAM,GAAG,IAAI,GAC5B,YAAY,EAAE;IAmIjB;;;;;;OAMG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;;OAGG;IACG,mBAAmB,CACrB,QAAQ,EAAE,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC,GACnD,OAAO,CAAC,eAAe,EAAE,CAAC;IAwC7B;;;OAGG;IACH,aAAa,CAAC,QAAQ,EAAE,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,eAAe,EAAE;IAsJtF,OAAO,CAAC,sBAAsB;IAuE9B,OAAO,CAAC,iBAAiB;CAoE5B"}
1
+ {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/llm/formatters/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAiD,MAAM,IAAI,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAiC,MAAM,wBAAwB,CAAC;AAE7F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAmB7D;;;;;;;;;;GAUG;AACH,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAGhC;;;;;;OAMG;IACH,MAAM,CACF,OAAO,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,EACpC,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,MAAM,GAAG,IAAI,GAC5B,YAAY,EAAE;IAwIjB;;;;;;OAMG;IACH,kBAAkB,IAAI,IAAI;IAK1B,OAAO,CAAC,sBAAsB;IAuE9B,OAAO,CAAC,iBAAiB;CAoE5B"}
@@ -1,6 +1,16 @@
1
- import "../../chunk-C6A6W6XS.js";
1
+ import "../../chunk-PTJYTZNU.js";
2
2
  import { getImageData, getFileData, filterMessagesByLLMCapabilities } from "../../context/utils.js";
3
3
  import { DextoLogComponent } from "../../logger/v2/types.js";
4
+ function toUrlIfString(value) {
5
+ if (typeof value === "string" && /^https?:\/\//i.test(value)) {
6
+ try {
7
+ return new URL(value);
8
+ } catch {
9
+ return value;
10
+ }
11
+ }
12
+ return value;
13
+ }
4
14
  class VercelMessageFormatter {
5
15
  logger;
6
16
  constructor(logger) {
@@ -37,11 +47,11 @@ class VercelMessageFormatter {
37
47
  switch (msg.role) {
38
48
  case "user":
39
49
  if (msg.content !== null) {
40
- const content = typeof msg.content === "string" ? msg.content : msg.content.map((part) => {
50
+ const content = typeof msg.content === "string" ? msg.content : msg.content.filter((part) => part.type !== "ui-resource").map((part) => {
41
51
  if (part.type === "file") {
42
52
  return {
43
53
  type: "file",
44
- data: part.data,
54
+ data: toUrlIfString(part.data),
45
55
  mediaType: part.mimeType,
46
56
  // Convert mimeType -> mediaType
47
57
  ...part.filename && { filename: part.filename }
@@ -49,8 +59,10 @@ class VercelMessageFormatter {
49
59
  } else if (part.type === "image") {
50
60
  return {
51
61
  type: "image",
52
- image: part.image,
53
- ...part.mimeType && { mediaType: part.mimeType }
62
+ image: toUrlIfString(part.image),
63
+ ...part.mimeType && {
64
+ mediaType: part.mimeType
65
+ }
54
66
  // Convert mimeType -> mediaType
55
67
  };
56
68
  }
@@ -124,189 +136,11 @@ class VercelMessageFormatter {
124
136
  formatSystemPrompt() {
125
137
  return null;
126
138
  }
127
- /**
128
- * Parses raw Vercel SDK stream response into internal message objects.
129
- * This handles StreamTextResult which has different structure than GenerateTextResult
130
- */
131
- async parseStreamResponse(response) {
132
- const resolvedResponse = await response.response;
133
- const adaptedResponse = {
134
- response: {
135
- messages: resolvedResponse?.messages || []
136
- }
137
- };
138
- const internal = this.parseResponse(
139
- adaptedResponse
140
- );
141
- const lastAssistant = [...internal].reverse().find((m) => m.role === "assistant");
142
- if (lastAssistant) {
143
- const usage = await response.totalUsage;
144
- const reasoningText = await response.reasoningText;
145
- if (reasoningText) {
146
- lastAssistant.reasoning = reasoningText;
147
- }
148
- if (usage) {
149
- lastAssistant.tokenUsage = {
150
- ...usage.inputTokens !== void 0 && { inputTokens: usage.inputTokens },
151
- ...usage.outputTokens !== void 0 && { outputTokens: usage.outputTokens },
152
- ...usage.reasoningTokens !== void 0 && {
153
- reasoningTokens: usage.reasoningTokens
154
- },
155
- ...usage.totalTokens !== void 0 && { totalTokens: usage.totalTokens }
156
- };
157
- }
158
- }
159
- return internal;
160
- }
161
- /**
162
- * Parses raw Vercel SDK response into internal message objects.
163
- * TODO: Break this into smaller functions
164
- */
165
- parseResponse(response) {
166
- const internal = [];
167
- if (!response.response.messages) return internal;
168
- for (const msg of response.response.messages) {
169
- const role = msg.role;
170
- switch (role) {
171
- case "user":
172
- if (typeof msg.content === "string") {
173
- internal.push({
174
- role: "user",
175
- content: [{ type: "text", text: msg.content }]
176
- });
177
- } else if (Array.isArray(msg.content)) {
178
- const srcParts = msg.content;
179
- const parts = srcParts.map((p) => {
180
- if (p.type === "text") return { type: "text", text: p.text };
181
- if (p.type === "image")
182
- return {
183
- type: "image",
184
- image: p.image,
185
- mimeType: p.mediaType ?? "image/jpeg"
186
- };
187
- if (p.type === "file")
188
- return {
189
- type: "file",
190
- data: p.data,
191
- mimeType: p.mediaType,
192
- filename: p.filename
193
- };
194
- return { type: "text", text: JSON.stringify(p) };
195
- });
196
- internal.push({
197
- role: "user",
198
- content: parts
199
- });
200
- }
201
- break;
202
- case "assistant": {
203
- let text = null;
204
- const calls = [];
205
- if (typeof msg.content === "string") {
206
- text = msg.content;
207
- } else if (Array.isArray(msg.content)) {
208
- let combined = "";
209
- for (const part of msg.content) {
210
- if (part.type === "text") {
211
- combined += part.text;
212
- } else if (part.type === "tool-call") {
213
- calls.push({
214
- id: part.toolCallId,
215
- type: "function",
216
- function: {
217
- name: part.toolName,
218
- arguments: typeof part.input === "string" ? part.input : JSON.stringify(part.input)
219
- }
220
- });
221
- }
222
- }
223
- text = combined || null;
224
- }
225
- const assistantMessage = {
226
- role: "assistant",
227
- content: text
228
- };
229
- if (calls.length > 0) {
230
- assistantMessage.toolCalls = calls;
231
- }
232
- internal.push(assistantMessage);
233
- break;
234
- }
235
- case "tool":
236
- if (Array.isArray(msg.content)) {
237
- for (const part of msg.content) {
238
- if (part.type === "tool-result") {
239
- let content;
240
- const output = part.output;
241
- if (output.type === "content") {
242
- content = output.value.map((item) => {
243
- if (item.type === "media") {
244
- return {
245
- type: "image",
246
- image: item.data,
247
- mimeType: item.mediaType
248
- };
249
- } else {
250
- return {
251
- type: "text",
252
- text: item.text
253
- };
254
- }
255
- });
256
- } else if (output.type === "text" || output.type === "error-text") {
257
- content = output.value;
258
- } else if (output.type === "json" || output.type === "error-json") {
259
- content = JSON.stringify(output.value);
260
- } else {
261
- content = JSON.stringify(output);
262
- }
263
- internal.push({
264
- role: "tool",
265
- content,
266
- toolCallId: part.toolCallId,
267
- name: part.toolName
268
- });
269
- }
270
- }
271
- }
272
- break;
273
- default:
274
- break;
275
- }
276
- }
277
- const lastAssistant = [...internal].reverse().find((m) => m.role === "assistant");
278
- const anyResp = response;
279
- const usage = anyResp.totalUsage;
280
- const reasoningText = anyResp.reasoningText;
281
- const modelId = response.response?.modelId;
282
- if (lastAssistant) {
283
- if (typeof reasoningText === "string" && reasoningText.length > 0) {
284
- lastAssistant.reasoning = reasoningText;
285
- }
286
- if (usage) {
287
- lastAssistant.tokenUsage = {
288
- ...usage.inputTokens !== void 0 && { inputTokens: usage.inputTokens },
289
- ...usage.outputTokens !== void 0 && { outputTokens: usage.outputTokens },
290
- ...usage.reasoningTokens !== void 0 && {
291
- reasoningTokens: usage.reasoningTokens
292
- },
293
- ...usage.totalTokens !== void 0 && { totalTokens: usage.totalTokens }
294
- };
295
- }
296
- if (modelId) {
297
- lastAssistant.model = modelId;
298
- }
299
- }
300
- return internal;
301
- }
302
139
  // Helper to format Assistant messages (with optional tool calls)
303
- // TODO: improve typing when InternalMessage type is updated
304
140
  formatAssistantMessage(msg) {
305
141
  if (msg.toolCalls && msg.toolCalls.length > 0) {
306
142
  const contentParts = [];
307
- if (typeof msg.content === "string" && msg.content.length > 0) {
308
- contentParts.push({ type: "text", text: msg.content });
309
- } else if (Array.isArray(msg.content)) {
143
+ if (Array.isArray(msg.content)) {
310
144
  const combined = msg.content.map((part) => part.type === "text" ? part.text : "").filter(Boolean).join("\n");
311
145
  if (combined) {
312
146
  contentParts.push({ type: "text", text: combined });
@@ -355,7 +189,7 @@ class VercelMessageFormatter {
355
189
  }
356
190
  }
357
191
  return {
358
- content: typeof msg.content === "string" ? [{ type: "text", text: msg.content }] : msg.content
192
+ content: typeof msg.content === "string" ? [{ type: "text", text: msg.content }] : msg.content === null ? [] : msg.content
359
193
  };
360
194
  }
361
195
  // Helper to format Tool result messages