@dexto/core 1.2.6 → 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 (515) hide show
  1. package/README.md +55 -13
  2. package/dist/agent/DextoAgent.cjs +627 -228
  3. package/dist/agent/DextoAgent.d.ts +157 -34
  4. package/dist/agent/DextoAgent.d.ts.map +1 -1
  5. package/dist/agent/DextoAgent.js +625 -227
  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 +4 -1
  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 +7 -3
  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 -11
  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 +20 -5
  36. package/dist/approval/schemas.d.ts +127 -52
  37. package/dist/approval/schemas.d.ts.map +1 -1
  38. package/dist/approval/schemas.js +21 -6
  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/factory.cjs → context/compression/overflow.cjs} +20 -21
  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 +287 -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 +287 -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 +185 -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.cjs +1 -0
  81. package/dist/errors/types.d.ts +4 -2
  82. package/dist/errors/types.d.ts.map +1 -1
  83. package/dist/errors/types.js +2 -1
  84. package/dist/events/index.cjs +22 -2
  85. package/dist/events/index.d.ts +170 -62
  86. package/dist/events/index.d.ts.map +1 -1
  87. package/dist/events/index.js +23 -3
  88. package/dist/filesystem/error-codes.js +1 -1
  89. package/dist/filesystem/errors.js +1 -1
  90. package/dist/filesystem/filesystem-service.js +1 -1
  91. package/dist/filesystem/index.js +1 -1
  92. package/dist/filesystem/path-validator.js +1 -1
  93. package/dist/index.browser.cjs +23 -8
  94. package/dist/index.browser.d.ts +4 -3
  95. package/dist/index.browser.d.ts.map +1 -1
  96. package/dist/index.browser.js +20 -3
  97. package/dist/index.js +1 -1
  98. package/dist/llm/error-codes.cjs +0 -1
  99. package/dist/llm/error-codes.d.ts +0 -1
  100. package/dist/llm/error-codes.d.ts.map +1 -1
  101. package/dist/llm/error-codes.js +1 -2
  102. package/dist/llm/errors.cjs +10 -10
  103. package/dist/llm/errors.d.ts +5 -6
  104. package/dist/llm/errors.d.ts.map +1 -1
  105. package/dist/llm/errors.js +12 -12
  106. package/dist/llm/executor/stream-processor.cjs +367 -0
  107. package/dist/llm/executor/stream-processor.d.ts +55 -0
  108. package/dist/llm/executor/stream-processor.d.ts.map +1 -0
  109. package/dist/llm/executor/stream-processor.js +344 -0
  110. package/dist/llm/executor/tool-output-truncator.cjs +75 -0
  111. package/dist/llm/executor/tool-output-truncator.d.ts +27 -0
  112. package/dist/llm/executor/tool-output-truncator.d.ts.map +1 -0
  113. package/dist/llm/executor/tool-output-truncator.js +48 -0
  114. package/dist/llm/executor/turn-executor.cjs +753 -0
  115. package/dist/llm/executor/turn-executor.d.ts +166 -0
  116. package/dist/llm/executor/turn-executor.d.ts.map +1 -0
  117. package/dist/llm/executor/turn-executor.js +684 -0
  118. package/dist/llm/executor/types.d.ts +27 -0
  119. package/dist/llm/executor/types.d.ts.map +1 -0
  120. package/dist/llm/formatters/vercel.cjs +20 -186
  121. package/dist/llm/formatters/vercel.d.ts +2 -14
  122. package/dist/llm/formatters/vercel.d.ts.map +1 -1
  123. package/dist/llm/formatters/vercel.js +19 -185
  124. package/dist/llm/registry.cjs +36 -45
  125. package/dist/llm/registry.d.ts +53 -39
  126. package/dist/llm/registry.d.ts.map +1 -1
  127. package/dist/llm/registry.js +34 -42
  128. package/dist/llm/resolver.cjs +1 -31
  129. package/dist/llm/resolver.d.ts.map +1 -1
  130. package/dist/llm/resolver.js +2 -34
  131. package/dist/llm/schemas.cjs +2 -17
  132. package/dist/llm/schemas.d.ts +10 -23
  133. package/dist/llm/schemas.d.ts.map +1 -1
  134. package/dist/llm/schemas.js +5 -22
  135. package/dist/llm/services/factory.cjs +3 -92
  136. package/dist/llm/services/factory.d.ts +14 -4
  137. package/dist/llm/services/factory.d.ts.map +1 -1
  138. package/dist/llm/services/factory.js +4 -83
  139. package/dist/llm/services/test-utils.integration.cjs +6 -8
  140. package/dist/llm/services/test-utils.integration.d.ts.map +1 -1
  141. package/dist/llm/services/test-utils.integration.js +7 -9
  142. package/dist/llm/services/types.d.ts +1 -28
  143. package/dist/llm/services/types.d.ts.map +1 -1
  144. package/dist/llm/services/vercel.cjs +54 -468
  145. package/dist/llm/services/vercel.d.ts +38 -21
  146. package/dist/llm/services/vercel.d.ts.map +1 -1
  147. package/dist/llm/services/vercel.js +56 -475
  148. package/dist/llm/types.cjs +0 -3
  149. package/dist/llm/types.d.ts +8 -8
  150. package/dist/llm/types.d.ts.map +1 -1
  151. package/dist/llm/types.js +1 -3
  152. package/dist/llm/validation.js +1 -1
  153. package/dist/logger/browser.js +1 -1
  154. package/dist/logger/factory.js +1 -1
  155. package/dist/logger/index.js +1 -1
  156. package/dist/logger/logger.js +1 -1
  157. package/dist/logger/v2/dexto-logger.cjs +34 -6
  158. package/dist/logger/v2/dexto-logger.d.ts +20 -2
  159. package/dist/logger/v2/dexto-logger.d.ts.map +1 -1
  160. package/dist/logger/v2/dexto-logger.js +35 -7
  161. package/dist/logger/v2/error-codes.js +1 -1
  162. package/dist/logger/v2/errors.js +1 -1
  163. package/dist/logger/v2/schemas.cjs +1 -1
  164. package/dist/logger/v2/schemas.js +2 -2
  165. package/dist/logger/v2/test-utils.cjs +70 -0
  166. package/dist/logger/v2/test-utils.d.ts +17 -0
  167. package/dist/logger/v2/test-utils.d.ts.map +1 -0
  168. package/dist/logger/v2/test-utils.js +46 -0
  169. package/dist/logger/v2/transport-factory.js +1 -1
  170. package/dist/logger/v2/transports/console-transport.js +1 -1
  171. package/dist/logger/v2/transports/file-transport.cjs +6 -0
  172. package/dist/logger/v2/transports/file-transport.d.ts +4 -0
  173. package/dist/logger/v2/transports/file-transport.d.ts.map +1 -1
  174. package/dist/logger/v2/transports/file-transport.js +7 -1
  175. package/dist/logger/v2/types.cjs +1 -0
  176. package/dist/logger/v2/types.d.ts +18 -2
  177. package/dist/logger/v2/types.d.ts.map +1 -1
  178. package/dist/logger/v2/types.js +2 -1
  179. package/dist/mcp/error-codes.cjs +1 -0
  180. package/dist/mcp/error-codes.d.ts +1 -0
  181. package/dist/mcp/error-codes.d.ts.map +1 -1
  182. package/dist/mcp/error-codes.js +2 -1
  183. package/dist/mcp/errors.cjs +13 -0
  184. package/dist/mcp/errors.d.ts +7 -0
  185. package/dist/mcp/errors.d.ts.map +1 -1
  186. package/dist/mcp/errors.js +14 -1
  187. package/dist/mcp/manager.cjs +4 -0
  188. package/dist/mcp/manager.d.ts.map +1 -1
  189. package/dist/mcp/manager.js +5 -1
  190. package/dist/mcp/mcp-client.js +1 -1
  191. package/dist/mcp/resolver.js +1 -1
  192. package/dist/mcp/schemas.cjs +6 -0
  193. package/dist/mcp/schemas.d.ts +52 -0
  194. package/dist/mcp/schemas.d.ts.map +1 -1
  195. package/dist/mcp/schemas.js +6 -1
  196. package/dist/memory/error-codes.js +1 -1
  197. package/dist/memory/errors.js +1 -1
  198. package/dist/memory/index.js +1 -1
  199. package/dist/memory/manager.js +1 -1
  200. package/dist/memory/schemas.d.ts +2 -2
  201. package/dist/memory/schemas.js +1 -1
  202. package/dist/plugins/builtins/content-policy.js +1 -1
  203. package/dist/plugins/builtins/response-sanitizer.js +1 -1
  204. package/dist/plugins/error-codes.cjs +1 -0
  205. package/dist/plugins/error-codes.d.ts +3 -1
  206. package/dist/plugins/error-codes.d.ts.map +1 -1
  207. package/dist/plugins/error-codes.js +2 -1
  208. package/dist/plugins/index.js +1 -1
  209. package/dist/plugins/loader.cjs +25 -5
  210. package/dist/plugins/loader.d.ts.map +1 -1
  211. package/dist/plugins/loader.js +26 -6
  212. package/dist/plugins/manager.js +1 -1
  213. package/dist/plugins/registrations/builtins.js +1 -1
  214. package/dist/plugins/schemas.d.ts +3 -3
  215. package/dist/plugins/schemas.js +1 -1
  216. package/dist/plugins/types.d.ts +0 -1
  217. package/dist/plugins/types.d.ts.map +1 -1
  218. package/dist/process/command-validator.js +1 -1
  219. package/dist/process/error-codes.js +1 -1
  220. package/dist/process/errors.js +1 -1
  221. package/dist/process/index.js +1 -1
  222. package/dist/process/process-service.cjs +78 -26
  223. package/dist/process/process-service.d.ts +6 -1
  224. package/dist/process/process-service.d.ts.map +1 -1
  225. package/dist/process/process-service.js +79 -27
  226. package/dist/process/types.d.ts +2 -2
  227. package/dist/process/types.d.ts.map +1 -1
  228. package/dist/prompts/error-codes.cjs +1 -0
  229. package/dist/prompts/error-codes.d.ts +2 -1
  230. package/dist/prompts/error-codes.d.ts.map +1 -1
  231. package/dist/prompts/error-codes.js +2 -1
  232. package/dist/prompts/errors.cjs +15 -0
  233. package/dist/prompts/errors.d.ts +4 -0
  234. package/dist/prompts/errors.d.ts.map +1 -1
  235. package/dist/prompts/errors.js +16 -1
  236. package/dist/prompts/index.js +1 -1
  237. package/dist/prompts/name-validation.js +1 -1
  238. package/dist/prompts/prompt-manager.cjs +13 -2
  239. package/dist/prompts/prompt-manager.d.ts +7 -0
  240. package/dist/prompts/prompt-manager.d.ts.map +1 -1
  241. package/dist/prompts/prompt-manager.js +14 -3
  242. package/dist/prompts/providers/config-prompt-provider.cjs +12 -3
  243. package/dist/prompts/providers/config-prompt-provider.d.ts +2 -1
  244. package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
  245. package/dist/prompts/providers/config-prompt-provider.js +13 -4
  246. package/dist/prompts/providers/custom-prompt-provider.cjs +2 -2
  247. package/dist/prompts/providers/custom-prompt-provider.d.ts +1 -1
  248. package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
  249. package/dist/prompts/providers/custom-prompt-provider.js +3 -3
  250. package/dist/prompts/providers/mcp-prompt-provider.js +1 -1
  251. package/dist/prompts/schemas.d.ts +12 -0
  252. package/dist/prompts/schemas.d.ts.map +1 -1
  253. package/dist/prompts/schemas.js +1 -1
  254. package/dist/prompts/types.d.ts +2 -0
  255. package/dist/prompts/types.d.ts.map +1 -1
  256. package/dist/prompts/utils.js +1 -1
  257. package/dist/resources/error-codes.js +1 -1
  258. package/dist/resources/errors.js +1 -1
  259. package/dist/resources/handlers/blob-handler.js +1 -1
  260. package/dist/resources/handlers/factory.js +1 -1
  261. package/dist/resources/handlers/filesystem-handler.js +1 -1
  262. package/dist/resources/index.js +1 -1
  263. package/dist/resources/internal-provider.js +1 -1
  264. package/dist/resources/manager.js +1 -1
  265. package/dist/resources/reference-parser.js +1 -1
  266. package/dist/resources/schemas.js +1 -1
  267. package/dist/search/index.js +1 -1
  268. package/dist/search/search-service.js +1 -1
  269. package/dist/session/chat-session.cjs +149 -51
  270. package/dist/session/chat-session.d.ts +69 -29
  271. package/dist/session/chat-session.d.ts.map +1 -1
  272. package/dist/session/chat-session.js +150 -52
  273. package/dist/session/error-codes.js +1 -1
  274. package/dist/session/errors.js +1 -1
  275. package/dist/session/history/database.cjs +134 -21
  276. package/dist/session/history/database.d.ts +37 -8
  277. package/dist/session/history/database.d.ts.map +1 -1
  278. package/dist/session/history/database.js +135 -22
  279. package/dist/session/history/factory.js +1 -1
  280. package/dist/session/history/memory.cjs +18 -0
  281. package/dist/session/history/memory.d.ts +8 -0
  282. package/dist/session/history/memory.d.ts.map +1 -1
  283. package/dist/session/history/memory.js +19 -1
  284. package/dist/session/history/types.d.ts +13 -1
  285. package/dist/session/history/types.d.ts.map +1 -1
  286. package/dist/session/index.cjs +3 -0
  287. package/dist/session/index.d.ts +3 -0
  288. package/dist/session/index.d.ts.map +1 -1
  289. package/dist/session/index.js +3 -1
  290. package/dist/session/message-queue.cjs +201 -0
  291. package/dist/session/message-queue.d.ts +114 -0
  292. package/dist/session/message-queue.d.ts.map +1 -0
  293. package/dist/session/message-queue.js +178 -0
  294. package/dist/session/schemas.js +1 -1
  295. package/dist/session/session-manager.cjs +57 -7
  296. package/dist/session/session-manager.d.ts +18 -0
  297. package/dist/session/session-manager.d.ts.map +1 -1
  298. package/dist/session/session-manager.js +58 -8
  299. package/dist/session/title-generator.cjs +4 -8
  300. package/dist/session/title-generator.d.ts +1 -2
  301. package/dist/session/title-generator.d.ts.map +1 -1
  302. package/dist/session/title-generator.js +5 -9
  303. package/dist/session/types.cjs +16 -0
  304. package/dist/session/types.d.ts +14 -0
  305. package/dist/session/types.d.ts.map +1 -0
  306. package/dist/session/types.js +0 -0
  307. package/dist/storage/blob/factory.js +1 -1
  308. package/dist/storage/blob/local-blob-store.js +1 -1
  309. package/dist/storage/blob/memory-blob-store.js +1 -1
  310. package/dist/storage/blob/schemas.js +1 -1
  311. package/dist/storage/cache/factory.cjs +6 -2
  312. package/dist/storage/cache/factory.d.ts +2 -1
  313. package/dist/storage/cache/factory.d.ts.map +1 -1
  314. package/dist/storage/cache/factory.js +7 -3
  315. package/dist/storage/cache/memory-cache-store.js +1 -1
  316. package/dist/storage/cache/redis-store.js +1 -1
  317. package/dist/storage/cache/schemas.js +1 -1
  318. package/dist/storage/database/factory.cjs +11 -17
  319. package/dist/storage/database/factory.d.ts +2 -1
  320. package/dist/storage/database/factory.d.ts.map +1 -1
  321. package/dist/storage/database/factory.js +12 -18
  322. package/dist/storage/database/memory-database-store.js +1 -1
  323. package/dist/storage/database/postgres-store.cjs +12 -0
  324. package/dist/storage/database/postgres-store.d.ts.map +1 -1
  325. package/dist/storage/database/postgres-store.js +13 -1
  326. package/dist/storage/database/schemas.js +1 -1
  327. package/dist/storage/database/sqlite-store.cjs +8 -0
  328. package/dist/storage/database/sqlite-store.d.ts.map +1 -1
  329. package/dist/storage/database/sqlite-store.js +9 -1
  330. package/dist/storage/error-codes.cjs +1 -0
  331. package/dist/storage/error-codes.d.ts +1 -0
  332. package/dist/storage/error-codes.d.ts.map +1 -1
  333. package/dist/storage/error-codes.js +2 -1
  334. package/dist/storage/errors.cjs +17 -0
  335. package/dist/storage/errors.d.ts +9 -0
  336. package/dist/storage/errors.d.ts.map +1 -1
  337. package/dist/storage/errors.js +18 -1
  338. package/dist/storage/index.js +1 -1
  339. package/dist/storage/schemas.js +1 -1
  340. package/dist/storage/storage-manager.js +1 -1
  341. package/dist/systemPrompt/contributors.js +1 -1
  342. package/dist/systemPrompt/error-codes.js +1 -1
  343. package/dist/systemPrompt/errors.js +1 -1
  344. package/dist/systemPrompt/in-built-prompts.js +1 -1
  345. package/dist/systemPrompt/index.js +1 -1
  346. package/dist/systemPrompt/manager.js +1 -1
  347. package/dist/systemPrompt/registry.js +1 -1
  348. package/dist/systemPrompt/schemas.d.ts +5 -5
  349. package/dist/systemPrompt/schemas.js +1 -1
  350. package/dist/telemetry/decorators.js +1 -1
  351. package/dist/{llm/tokenizer/default.cjs → telemetry/error-codes.cjs} +14 -19
  352. package/dist/telemetry/error-codes.d.ts +13 -0
  353. package/dist/telemetry/error-codes.d.ts.map +1 -0
  354. package/dist/telemetry/error-codes.js +13 -0
  355. package/dist/telemetry/errors.cjs +105 -0
  356. package/dist/telemetry/errors.d.ts +28 -0
  357. package/dist/telemetry/errors.d.ts.map +1 -0
  358. package/dist/telemetry/errors.js +82 -0
  359. package/dist/telemetry/exporters.js +1 -1
  360. package/dist/telemetry/index.js +1 -1
  361. package/dist/telemetry/schemas.js +1 -1
  362. package/dist/telemetry/telemetry.cjs +92 -26
  363. package/dist/telemetry/telemetry.d.ts +1 -1
  364. package/dist/telemetry/telemetry.d.ts.map +1 -1
  365. package/dist/telemetry/telemetry.js +75 -19
  366. package/dist/telemetry/utils.js +1 -1
  367. package/dist/tools/bash-pattern-utils.cjs +91 -0
  368. package/dist/tools/bash-pattern-utils.d.ts +58 -0
  369. package/dist/tools/bash-pattern-utils.d.ts.map +1 -0
  370. package/dist/tools/bash-pattern-utils.js +64 -0
  371. package/dist/tools/confirmation/allowed-tools-provider/factory.js +1 -1
  372. package/dist/tools/confirmation/allowed-tools-provider/in-memory.js +1 -1
  373. package/dist/tools/confirmation/allowed-tools-provider/storage.js +1 -1
  374. package/dist/tools/display-types.cjs +60 -0
  375. package/dist/tools/display-types.d.ts +133 -0
  376. package/dist/tools/display-types.d.ts.map +1 -0
  377. package/dist/tools/display-types.js +32 -0
  378. package/dist/tools/error-codes.cjs +2 -0
  379. package/dist/tools/error-codes.d.ts +3 -1
  380. package/dist/tools/error-codes.d.ts.map +1 -1
  381. package/dist/tools/error-codes.js +3 -1
  382. package/dist/tools/errors.cjs +30 -0
  383. package/dist/tools/errors.d.ts +16 -0
  384. package/dist/tools/errors.d.ts.map +1 -1
  385. package/dist/tools/errors.js +31 -1
  386. package/dist/tools/index.cjs +2 -0
  387. package/dist/tools/index.d.ts +1 -0
  388. package/dist/tools/index.d.ts.map +1 -1
  389. package/dist/tools/index.js +2 -1
  390. package/dist/tools/internal-tools/constants.js +1 -1
  391. package/dist/tools/internal-tools/implementations/ask-user-tool.cjs +1 -1
  392. package/dist/tools/internal-tools/implementations/ask-user-tool.js +2 -2
  393. package/dist/tools/internal-tools/implementations/bash-exec-tool.cjs +42 -18
  394. package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts +3 -3
  395. package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts.map +1 -1
  396. package/dist/tools/internal-tools/implementations/bash-exec-tool.js +43 -19
  397. package/dist/tools/internal-tools/implementations/bash-output-tool.js +1 -1
  398. package/dist/tools/internal-tools/implementations/delegate-to-url-tool.js +1 -1
  399. package/dist/tools/internal-tools/implementations/edit-file-tool.cjs +66 -1
  400. package/dist/tools/internal-tools/implementations/edit-file-tool.d.ts.map +1 -1
  401. package/dist/tools/internal-tools/implementations/edit-file-tool.js +67 -2
  402. package/dist/tools/internal-tools/implementations/glob-files-tool.cjs +14 -1
  403. package/dist/tools/internal-tools/implementations/glob-files-tool.d.ts.map +1 -1
  404. package/dist/tools/internal-tools/implementations/glob-files-tool.js +15 -2
  405. package/dist/tools/internal-tools/implementations/grep-content-tool.cjs +16 -1
  406. package/dist/tools/internal-tools/implementations/grep-content-tool.d.ts.map +1 -1
  407. package/dist/tools/internal-tools/implementations/grep-content-tool.js +17 -2
  408. package/dist/tools/internal-tools/implementations/kill-process-tool.js +1 -1
  409. package/dist/tools/internal-tools/implementations/read-file-tool.cjs +9 -1
  410. package/dist/tools/internal-tools/implementations/read-file-tool.d.ts.map +1 -1
  411. package/dist/tools/internal-tools/implementations/read-file-tool.js +10 -2
  412. package/dist/tools/internal-tools/implementations/search-history-tool.js +1 -1
  413. package/dist/tools/internal-tools/implementations/write-file-tool.cjs +69 -1
  414. package/dist/tools/internal-tools/implementations/write-file-tool.d.ts.map +1 -1
  415. package/dist/tools/internal-tools/implementations/write-file-tool.js +72 -2
  416. package/dist/tools/internal-tools/provider.cjs +27 -10
  417. package/dist/tools/internal-tools/provider.d.ts +8 -5
  418. package/dist/tools/internal-tools/provider.d.ts.map +1 -1
  419. package/dist/tools/internal-tools/provider.js +28 -11
  420. package/dist/tools/internal-tools/registry.cjs +4 -3
  421. package/dist/tools/internal-tools/registry.d.ts +28 -7
  422. package/dist/tools/internal-tools/registry.d.ts.map +1 -1
  423. package/dist/tools/internal-tools/registry.js +5 -4
  424. package/dist/tools/schemas.cjs +17 -7
  425. package/dist/tools/schemas.d.ts +31 -4
  426. package/dist/tools/schemas.d.ts.map +1 -1
  427. package/dist/tools/schemas.js +15 -7
  428. package/dist/tools/tool-manager.cjs +140 -18
  429. package/dist/tools/tool-manager.d.ts +23 -1
  430. package/dist/tools/tool-manager.d.ts.map +1 -1
  431. package/dist/tools/tool-manager.js +145 -19
  432. package/dist/tools/types.d.ts +20 -11
  433. package/dist/tools/types.d.ts.map +1 -1
  434. package/dist/utils/api-key-resolver.js +1 -1
  435. package/dist/utils/async-context.js +1 -1
  436. package/dist/utils/debug.js +1 -1
  437. package/dist/{llm/tokenizer/types.cjs → utils/defer.cjs} +19 -10
  438. package/dist/utils/defer.d.ts +63 -0
  439. package/dist/utils/defer.d.ts.map +1 -0
  440. package/dist/utils/defer.js +19 -0
  441. package/dist/utils/env-file.js +1 -1
  442. package/dist/utils/error-conversion.js +1 -1
  443. package/dist/utils/execution-context.js +1 -1
  444. package/dist/utils/fs-walk.js +1 -1
  445. package/dist/utils/index.cjs +3 -1
  446. package/dist/utils/index.d.ts +1 -0
  447. package/dist/utils/index.d.ts.map +1 -1
  448. package/dist/utils/index.js +1 -0
  449. package/dist/utils/path.js +1 -1
  450. package/dist/utils/redactor.js +1 -1
  451. package/dist/utils/result.js +1 -1
  452. package/dist/utils/safe-stringify.js +1 -1
  453. package/dist/utils/schema-metadata.js +1 -1
  454. package/dist/utils/schema.d.ts +6 -0
  455. package/dist/utils/schema.d.ts.map +1 -1
  456. package/dist/utils/schema.js +1 -1
  457. package/dist/utils/service-initializer.cjs +6 -2
  458. package/dist/utils/service-initializer.d.ts.map +1 -1
  459. package/dist/utils/service-initializer.js +7 -3
  460. package/dist/utils/user-info.js +1 -1
  461. package/dist/utils/zod-schema-converter.js +1 -1
  462. package/package.json +54 -17
  463. package/dist/context/compression/middle-removal.cjs +0 -95
  464. package/dist/context/compression/middle-removal.d.ts +0 -47
  465. package/dist/context/compression/middle-removal.d.ts.map +0 -1
  466. package/dist/context/compression/middle-removal.js +0 -72
  467. package/dist/context/compression/oldest-removal.cjs +0 -83
  468. package/dist/context/compression/oldest-removal.d.ts +0 -42
  469. package/dist/context/compression/oldest-removal.d.ts.map +0 -1
  470. package/dist/context/compression/oldest-removal.js +0 -60
  471. package/dist/llm/formatters/anthropic.cjs +0 -257
  472. package/dist/llm/formatters/anthropic.d.ts +0 -46
  473. package/dist/llm/formatters/anthropic.d.ts.map +0 -1
  474. package/dist/llm/formatters/anthropic.js +0 -239
  475. package/dist/llm/formatters/factory.cjs +0 -50
  476. package/dist/llm/formatters/factory.d.ts +0 -10
  477. package/dist/llm/formatters/factory.d.ts.map +0 -1
  478. package/dist/llm/formatters/factory.js +0 -27
  479. package/dist/llm/formatters/openai.cjs +0 -196
  480. package/dist/llm/formatters/openai.d.ts +0 -39
  481. package/dist/llm/formatters/openai.d.ts.map +0 -1
  482. package/dist/llm/formatters/openai.js +0 -177
  483. package/dist/llm/formatters/types.d.ts +0 -41
  484. package/dist/llm/formatters/types.d.ts.map +0 -1
  485. package/dist/llm/services/anthropic.cjs +0 -511
  486. package/dist/llm/services/anthropic.d.ts +0 -48
  487. package/dist/llm/services/anthropic.d.ts.map +0 -1
  488. package/dist/llm/services/anthropic.js +0 -447
  489. package/dist/llm/services/openai.cjs +0 -611
  490. package/dist/llm/services/openai.d.ts +0 -48
  491. package/dist/llm/services/openai.d.ts.map +0 -1
  492. package/dist/llm/services/openai.js +0 -547
  493. package/dist/llm/tokenizer/anthropic.cjs +0 -43
  494. package/dist/llm/tokenizer/anthropic.d.ts +0 -19
  495. package/dist/llm/tokenizer/anthropic.d.ts.map +0 -1
  496. package/dist/llm/tokenizer/anthropic.js +0 -20
  497. package/dist/llm/tokenizer/default.d.ts +0 -14
  498. package/dist/llm/tokenizer/default.d.ts.map +0 -1
  499. package/dist/llm/tokenizer/default.js +0 -18
  500. package/dist/llm/tokenizer/factory.d.ts +0 -12
  501. package/dist/llm/tokenizer/factory.d.ts.map +0 -1
  502. package/dist/llm/tokenizer/factory.js +0 -21
  503. package/dist/llm/tokenizer/google.cjs +0 -52
  504. package/dist/llm/tokenizer/google.d.ts +0 -29
  505. package/dist/llm/tokenizer/google.d.ts.map +0 -1
  506. package/dist/llm/tokenizer/google.js +0 -29
  507. package/dist/llm/tokenizer/openai.cjs +0 -115
  508. package/dist/llm/tokenizer/openai.d.ts +0 -33
  509. package/dist/llm/tokenizer/openai.d.ts.map +0 -1
  510. package/dist/llm/tokenizer/openai.js +0 -91
  511. package/dist/llm/tokenizer/types.d.ts +0 -18
  512. package/dist/llm/tokenizer/types.d.ts.map +0 -1
  513. package/dist/llm/tokenizer/types.js +0 -10
  514. /package/dist/llm/{formatters → executor}/types.cjs +0 -0
  515. /package/dist/llm/{formatters → executor}/types.js +0 -0
@@ -18,10 +18,12 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var utils_exports = {};
20
20
  __export(utils_exports, {
21
- countMessagesTokens: () => countMessagesTokens,
21
+ estimateMessagesTokens: () => estimateMessagesTokens,
22
22
  expandBlobReferences: () => expandBlobReferences,
23
23
  fileTypesToMimePatterns: () => fileTypesToMimePatterns,
24
+ filterCompacted: () => filterCompacted,
24
25
  filterMessagesByLLMCapabilities: () => filterMessagesByLLMCapabilities,
26
+ formatToolOutputForDisplay: () => formatToolOutputForDisplay,
25
27
  getFileData: () => getFileData,
26
28
  getFileDataWithBlobSupport: () => getFileDataWithBlobSupport,
27
29
  getFileMediaKind: () => import_media_helpers.getFileMediaKind,
@@ -40,11 +42,11 @@ __export(utils_exports, {
40
42
  toTextForToolMessage: () => toTextForToolMessage
41
43
  });
42
44
  module.exports = __toCommonJS(utils_exports);
45
+ var import_types = require("./types.js");
46
+ var import_display_types = require("../tools/display-types.js");
43
47
  var import_registry = require("../llm/registry.cjs");
44
- var import_errors = require("./errors.js");
45
48
  var import_safe_stringify = require("../utils/safe-stringify.cjs");
46
49
  var import_media_helpers = require("./media-helpers.js");
47
- const DEFAULT_OVERHEAD_PER_MESSAGE = 4;
48
50
  const MIN_BASE64_HEURISTIC_LENGTH = 512;
49
51
  const MAX_TOOL_TEXT_CHARS = 8e3;
50
52
  const MIN_TOOL_INLINE_MEDIA_BYTES = 1024;
@@ -92,60 +94,38 @@ function clonePart(part) {
92
94
  return cloned;
93
95
  }
94
96
  function coerceContentToParts(content) {
95
- if (Array.isArray(content)) {
96
- const normalized = [];
97
- for (const item of content) {
98
- if (item == null) continue;
99
- if (typeof item === "string") {
100
- normalized.push({ type: "text", text: item });
101
- continue;
97
+ if (content == null) {
98
+ return [];
99
+ }
100
+ const normalized = [];
101
+ for (const item of content) {
102
+ if (item.type === "ui-resource") {
103
+ continue;
104
+ }
105
+ if (item.type === "text") {
106
+ normalized.push({ type: "text", text: item.text });
107
+ } else if (item.type === "image") {
108
+ const cloned = {
109
+ type: "image",
110
+ image: item.image
111
+ };
112
+ if (item.mimeType) {
113
+ cloned.mimeType = item.mimeType;
102
114
  }
103
- if (typeof item === "object" && "type" in item) {
104
- const type = item.type;
105
- if (type === "text") {
106
- const textPart = item;
107
- normalized.push({ type: "text", text: textPart.text });
108
- continue;
109
- }
110
- if (type === "image") {
111
- const imagePart = item;
112
- const cloned = {
113
- type: "image",
114
- image: imagePart.image
115
- };
116
- if (imagePart.mimeType) {
117
- cloned.mimeType = imagePart.mimeType;
118
- }
119
- normalized.push(cloned);
120
- continue;
121
- }
122
- if (type === "file") {
123
- const filePart = item;
124
- const cloned = {
125
- type: "file",
126
- data: filePart.data,
127
- mimeType: filePart.mimeType ?? "application/octet-stream"
128
- };
129
- if (filePart.filename) {
130
- cloned.filename = filePart.filename;
131
- }
132
- normalized.push(cloned);
133
- continue;
134
- }
115
+ normalized.push(cloned);
116
+ } else if (item.type === "file") {
117
+ const cloned = {
118
+ type: "file",
119
+ data: item.data,
120
+ mimeType: item.mimeType ?? "application/octet-stream"
121
+ };
122
+ if (item.filename) {
123
+ cloned.filename = item.filename;
135
124
  }
125
+ normalized.push(cloned);
136
126
  }
137
- return normalized;
138
- }
139
- if (typeof content === "string") {
140
- if (content.length === 0) {
141
- return [];
142
- }
143
- return [{ type: "text", text: content }];
144
127
  }
145
- if (content == null) {
146
- return [];
147
- }
148
- return [{ type: "text", text: (0, import_safe_stringify.safeStringify)(content) }];
128
+ return normalized;
149
129
  }
150
130
  function detectInlineMedia(part, index) {
151
131
  if (part.type === "text") {
@@ -311,10 +291,9 @@ async function resolveBlobReferenceToParts(resourceUri, resourceManager, logger,
311
291
  }
312
292
  const resolvedMime = mimeType ?? "application/octet-stream";
313
293
  if (resolvedMime.startsWith("image/")) {
314
- const dataUri = `data:${resolvedMime};base64,${base64Data}`;
315
294
  const imagePart = {
316
295
  type: "image",
317
- image: dataUri,
296
+ image: base64Data,
318
297
  mimeType: resolvedMime
319
298
  };
320
299
  parts.push(imagePart);
@@ -322,7 +301,7 @@ async function resolveBlobReferenceToParts(resourceUri, resourceManager, logger,
322
301
  }
323
302
  const filePart = {
324
303
  type: "file",
325
- data: resolvedMime.startsWith("audio/") ? `data:${resolvedMime};base64,${base64Data}` : base64Data,
304
+ data: base64Data,
326
305
  mimeType: resolvedMime
327
306
  };
328
307
  if (typeof item.filename === "string" && item.filename.length > 0) {
@@ -342,67 +321,17 @@ async function resolveBlobReferenceToParts(resourceUri, resourceManager, logger,
342
321
  return [{ type: "text", text: `[Attachment unavailable: ${resourceUri}]` }];
343
322
  }
344
323
  }
345
- function countMessagesTokens(history, tokenizer, overheadPerMessage = DEFAULT_OVERHEAD_PER_MESSAGE, logger) {
346
- let total = 0;
347
- logger.debug(`Counting tokens for ${history.length} messages`);
348
- try {
349
- for (const message of history) {
350
- if (message.content) {
351
- if (typeof message.content === "string") {
352
- total += tokenizer.countTokens(message.content);
353
- } else if (Array.isArray(message.content)) {
354
- message.content.forEach((part) => {
355
- if (part.type === "text" && typeof part.text === "string") {
356
- total += tokenizer.countTokens(part.text);
357
- } else if (part.type === "image") {
358
- if (typeof part.image === "string") {
359
- if (isDataUri(part.image)) {
360
- const base64Payload = extractBase64FromDataUri(part.image);
361
- const byteLength = base64LengthToBytes(base64Payload.length);
362
- total += Math.ceil(byteLength / 1024);
363
- } else {
364
- total += estimateTextTokens(part.image);
365
- }
366
- } else if (part.image instanceof Uint8Array || part.image instanceof Buffer || part.image instanceof ArrayBuffer) {
367
- const bytes = part.image instanceof ArrayBuffer ? part.image.byteLength : part.image.length;
368
- total += Math.ceil(bytes / 1024);
369
- }
370
- } else if (part.type === "file") {
371
- if (typeof part.data === "string") {
372
- if (isDataUri(part.data)) {
373
- const base64Payload = extractBase64FromDataUri(part.data);
374
- const byteLength = base64LengthToBytes(base64Payload.length);
375
- total += Math.ceil(byteLength / 1024);
376
- } else {
377
- total += estimateTextTokens(part.data);
378
- }
379
- } else if (part.data instanceof Uint8Array || part.data instanceof Buffer || part.data instanceof ArrayBuffer) {
380
- const bytes = part.data instanceof ArrayBuffer ? part.data.byteLength : part.data.length;
381
- total += Math.ceil(bytes / 1024);
382
- }
383
- }
384
- });
385
- }
386
- }
387
- if (message.toolCalls) {
388
- for (const call of message.toolCalls) {
389
- if (call.function?.name) {
390
- total += tokenizer.countTokens(call.function.name);
391
- }
392
- if (call.function?.arguments) {
393
- total += tokenizer.countTokens(call.function.arguments);
394
- }
395
- }
396
- }
397
- total += overheadPerMessage;
324
+ function estimateMessagesTokens(messages) {
325
+ return messages.reduce((sum, msg) => {
326
+ if (Array.isArray(msg.content)) {
327
+ return sum + msg.content.reduce((partSum, part) => {
328
+ if (part.type === "text") return partSum + Math.ceil(part.text.length / 4);
329
+ if (part.type === "image" || part.type === "file") return partSum + 1e3;
330
+ return partSum;
331
+ }, 0);
398
332
  }
399
- } catch (error) {
400
- logger.error(
401
- `countMessagesTokens failed: ${error instanceof Error ? error.message : String(error)}`
402
- );
403
- throw import_errors.ContextError.tokenCountFailed(error instanceof Error ? error.message : String(error));
404
- }
405
- return total;
333
+ return sum;
334
+ }, 0);
406
335
  }
407
336
  function getImageData(imagePart, logger) {
408
337
  const { image } = imagePart;
@@ -470,122 +399,119 @@ async function getFileDataWithBlobSupport(filePart, resourceManager, logger) {
470
399
  }
471
400
  return getFileData(filePart, logger);
472
401
  }
473
- async function expandBlobReferences(content, resourceManager, logger, allowedMediaTypes) {
474
- if (typeof content === "string") {
475
- const blobRefPattern = /@blob:[a-f0-9]+/g;
476
- const matches = [...content.matchAll(blobRefPattern)];
477
- if (matches.length === 0) {
478
- return content;
479
- }
480
- const resolvedCache = /* @__PURE__ */ new Map();
481
- const parts = [];
482
- let lastIndex = 0;
483
- for (const match of matches) {
484
- const matchIndex = match.index ?? 0;
485
- const token = match[0];
486
- if (matchIndex > lastIndex) {
487
- const segment = content.slice(lastIndex, matchIndex);
488
- if (segment.length > 0) {
489
- parts.push({ type: "text", text: segment });
490
- }
491
- }
492
- const uri = token.substring(1);
493
- const resourceUri = uri.startsWith("blob:") ? uri : `blob:${uri}`;
494
- let resolvedParts = resolvedCache.get(resourceUri);
495
- if (!resolvedParts) {
496
- resolvedParts = await resolveBlobReferenceToParts(
497
- resourceUri,
498
- resourceManager,
499
- logger,
500
- allowedMediaTypes
501
- );
502
- resolvedCache.set(resourceUri, resolvedParts);
503
- }
504
- if (resolvedParts.length > 0) {
505
- parts.push(...resolvedParts.map((part) => ({ ...part })));
506
- } else {
507
- parts.push({ type: "text", text: token });
402
+ async function expandBlobsInText(text, resourceManager, logger, allowedMediaTypes) {
403
+ if (!text.includes("@blob:")) {
404
+ return [{ type: "text", text }];
405
+ }
406
+ const blobRefPattern = /@blob:[a-f0-9]+/g;
407
+ const matches = [...text.matchAll(blobRefPattern)];
408
+ if (matches.length === 0) {
409
+ return [{ type: "text", text }];
410
+ }
411
+ const resolvedCache = /* @__PURE__ */ new Map();
412
+ const parts = [];
413
+ let lastIndex = 0;
414
+ for (const match of matches) {
415
+ const matchIndex = match.index ?? 0;
416
+ const token = match[0];
417
+ if (matchIndex > lastIndex) {
418
+ const segment = text.slice(lastIndex, matchIndex);
419
+ if (segment.length > 0) {
420
+ parts.push({ type: "text", text: segment });
508
421
  }
509
- lastIndex = matchIndex + token.length;
510
422
  }
511
- if (lastIndex < content.length) {
512
- const trailing = content.slice(lastIndex);
513
- if (trailing.length > 0) {
514
- parts.push({ type: "text", text: trailing });
515
- }
423
+ const uri = token.substring(1);
424
+ const resourceUri = uri.startsWith("blob:") ? uri : `blob:${uri}`;
425
+ let resolvedParts = resolvedCache.get(resourceUri);
426
+ if (!resolvedParts) {
427
+ resolvedParts = await resolveBlobReferenceToParts(
428
+ resourceUri,
429
+ resourceManager,
430
+ logger,
431
+ allowedMediaTypes
432
+ );
433
+ resolvedCache.set(resourceUri, resolvedParts);
516
434
  }
517
- const normalized = parts.filter((part) => part.type !== "text" || part.text.length > 0);
518
- if (normalized.length === 1 && normalized[0]?.type === "text") {
519
- return normalized[0].text;
435
+ if (resolvedParts.length > 0) {
436
+ parts.push(...resolvedParts.map((p) => ({ ...p })));
437
+ } else {
438
+ parts.push({ type: "text", text: token });
520
439
  }
521
- return normalized;
440
+ lastIndex = matchIndex + token.length;
522
441
  }
523
- if (Array.isArray(content)) {
524
- const expandedParts = [];
525
- for (const part of content) {
526
- if (part.type === "image" && typeof part.image === "string" && part.image.startsWith("@blob:")) {
527
- const uri = part.image.substring(1);
528
- const resourceUri = uri.startsWith("blob:") ? uri : `blob:${uri}`;
529
- const resolved = await resolveBlobReferenceToParts(
530
- resourceUri,
531
- resourceManager,
532
- logger,
533
- allowedMediaTypes
534
- );
535
- if (resolved.length > 0) {
536
- expandedParts.push(...resolved.map((part2) => ({ ...part2 })));
537
- } else {
538
- expandedParts.push(part);
539
- }
540
- continue;
541
- }
542
- if (part.type === "file" && typeof part.data === "string" && part.data.startsWith("@blob:")) {
543
- const uri = part.data.substring(1);
544
- const resourceUri = uri.startsWith("blob:") ? uri : `blob:${uri}`;
545
- const resolved = await resolveBlobReferenceToParts(
546
- resourceUri,
547
- resourceManager,
548
- logger,
549
- allowedMediaTypes
550
- );
551
- if (resolved.length > 0) {
552
- expandedParts.push(...resolved.map((part2) => ({ ...part2 })));
553
- } else {
554
- try {
555
- const resolvedData = await getFileDataWithBlobSupport(
556
- part,
557
- resourceManager,
558
- logger
559
- );
560
- expandedParts.push({ ...part, data: resolvedData });
561
- } catch (error) {
562
- logger.warn(`Failed to resolve file blob reference: ${String(error)}`);
563
- expandedParts.push(part);
564
- }
565
- }
566
- continue;
442
+ if (lastIndex < text.length) {
443
+ const trailing = text.slice(lastIndex);
444
+ if (trailing.length > 0) {
445
+ parts.push({ type: "text", text: trailing });
446
+ }
447
+ }
448
+ return parts.filter((p) => p.type !== "text" || p.text.length > 0);
449
+ }
450
+ async function expandBlobReferences(content, resourceManager, logger, allowedMediaTypes) {
451
+ if (content == null || !Array.isArray(content)) {
452
+ return [];
453
+ }
454
+ const expandedParts = [];
455
+ for (const part of content) {
456
+ if (part.type === "ui-resource") {
457
+ expandedParts.push(part);
458
+ continue;
459
+ }
460
+ if (part.type === "image" && typeof part.image === "string" && part.image.startsWith("@blob:")) {
461
+ const uri = part.image.substring(1);
462
+ const resourceUri = uri.startsWith("blob:") ? uri : `blob:${uri}`;
463
+ const resolved = await resolveBlobReferenceToParts(
464
+ resourceUri,
465
+ resourceManager,
466
+ logger,
467
+ allowedMediaTypes
468
+ );
469
+ if (resolved.length > 0) {
470
+ expandedParts.push(...resolved.map((p) => ({ ...p })));
471
+ } else {
472
+ expandedParts.push(part);
567
473
  }
568
- if (part.type === "text" && part.text.includes("@blob:")) {
569
- const expanded = await expandBlobReferences(
570
- part.text,
571
- resourceManager,
572
- logger,
573
- allowedMediaTypes
574
- );
575
- if (typeof expanded === "string") {
576
- expandedParts.push({ ...part, text: expanded });
577
- } else if (Array.isArray(expanded)) {
578
- expandedParts.push(...expanded.map((part2) => ({ ...part2 })));
579
- } else {
474
+ continue;
475
+ }
476
+ if (part.type === "file" && typeof part.data === "string" && part.data.startsWith("@blob:")) {
477
+ const uri = part.data.substring(1);
478
+ const resourceUri = uri.startsWith("blob:") ? uri : `blob:${uri}`;
479
+ const resolved = await resolveBlobReferenceToParts(
480
+ resourceUri,
481
+ resourceManager,
482
+ logger,
483
+ allowedMediaTypes
484
+ );
485
+ if (resolved.length > 0) {
486
+ expandedParts.push(...resolved.map((p) => ({ ...p })));
487
+ } else {
488
+ try {
489
+ const resolvedData = await getFileDataWithBlobSupport(
490
+ part,
491
+ resourceManager,
492
+ logger
493
+ );
494
+ expandedParts.push({ ...part, data: resolvedData });
495
+ } catch (error) {
496
+ logger.warn(`Failed to resolve file blob reference: ${String(error)}`);
580
497
  expandedParts.push(part);
581
498
  }
582
- continue;
583
499
  }
584
- expandedParts.push(part);
500
+ continue;
501
+ }
502
+ if (part.type === "text" && part.text.includes("@blob:")) {
503
+ const expanded = await expandBlobsInText(
504
+ part.text,
505
+ resourceManager,
506
+ logger,
507
+ allowedMediaTypes
508
+ );
509
+ expandedParts.push(...expanded);
510
+ continue;
585
511
  }
586
- return expandedParts;
512
+ expandedParts.push(part);
587
513
  }
588
- return content;
514
+ return expandedParts;
589
515
  }
590
516
  function filterMessagesByLLMCapabilities(messages, config, logger) {
591
517
  try {
@@ -729,7 +655,25 @@ async function normalizeToolResult(result, logger) {
729
655
  void 0,
730
656
  void 0
731
657
  );
732
- const parts = coerceContentToParts(content);
658
+ const uiResources = [];
659
+ const otherContent = [];
660
+ if (Array.isArray(content)) {
661
+ for (const item of content) {
662
+ if (item && typeof item === "object" && "type" in item && item.type === "ui-resource") {
663
+ uiResources.push(item);
664
+ } else {
665
+ otherContent.push(item);
666
+ }
667
+ }
668
+ } else {
669
+ otherContent.push(content);
670
+ }
671
+ if (uiResources.length > 0) {
672
+ logger.debug(
673
+ `normalizeToolResult: extracted ${uiResources.length} UI resource(s): ${uiResources.map((r) => r.uri).join(", ")}`
674
+ );
675
+ }
676
+ const parts = coerceContentToParts(otherContent);
733
677
  const inlineMedia = [];
734
678
  parts.forEach((part, index) => {
735
679
  const hint = detectInlineMedia(part, index);
@@ -739,6 +683,7 @@ async function normalizeToolResult(result, logger) {
739
683
  });
740
684
  return {
741
685
  parts,
686
+ uiResources,
742
687
  inlineMedia
743
688
  };
744
689
  }
@@ -790,6 +735,7 @@ async function persistToolMedia(normalized, options, logger) {
790
735
  const resources = extractResourceDescriptors(parts);
791
736
  return {
792
737
  parts,
738
+ uiResources: normalized.uiResources,
793
739
  ...resources ? { resources } : {}
794
740
  };
795
741
  }
@@ -836,53 +782,22 @@ async function sanitizeToolResultToContentWithBlobs(result, logger, blobStore, n
836
782
  }
837
783
  ];
838
784
  }
839
- if (isLikelyBase64String(result)) {
840
- logger.debug("sanitizeToolResultToContentWithBlobs: detected base64-like string");
841
- const approxSize = Math.floor(result.length * 3 / 4);
842
- const shouldStoreAsBlob = blobStore && approxSize > 1024;
843
- if (shouldStoreAsBlob) {
844
- try {
845
- const blobRef = await blobStore.store(result, {
846
- mimeType: "application/octet-stream",
847
- source: "tool",
848
- originalName: buildToolBlobName("output", void 0, namingOptions)
849
- });
850
- logger.debug(
851
- `Stored tool result as blob: ${blobRef.uri} (${approxSize} bytes)`
852
- );
853
- return [
854
- createBlobFilePart(
855
- blobRef.uri,
856
- "application/octet-stream",
857
- "tool-output.bin"
858
- )
859
- ];
860
- } catch (error) {
861
- logger.warn(
862
- `Failed to store blob, falling back to inline: ${String(error)}`
863
- );
864
- }
865
- }
866
- return [
867
- {
868
- type: "file",
869
- data: result,
870
- mimeType: "application/octet-stream",
871
- filename: "tool-output.bin"
872
- }
873
- ];
874
- }
875
785
  if (result.length > MAX_TOOL_TEXT_CHARS) {
876
786
  const head = result.slice(0, 4e3);
877
787
  const tail = result.slice(-1e3);
878
788
  logger.debug(
879
789
  `sanitizeToolResultToContentWithBlobs: truncating long text tool output (len=${result.length})`
880
790
  );
881
- return `${head}
791
+ return [
792
+ {
793
+ type: "text",
794
+ text: `${head}
882
795
  ... [${result.length - 5e3} chars omitted] ...
883
- ${tail}`;
796
+ ${tail}`
797
+ }
798
+ ];
884
799
  }
885
- return result;
800
+ return [{ type: "text", text: result }];
886
801
  }
887
802
  if (Array.isArray(result)) {
888
803
  const parts = [];
@@ -894,10 +809,10 @@ ${tail}`;
894
809
  blobStore,
895
810
  namingOptions
896
811
  );
897
- if (typeof processedItem === "string") {
898
- parts.push({ type: "text", text: processedItem });
899
- } else if (Array.isArray(processedItem)) {
900
- parts.push(...processedItem);
812
+ if (Array.isArray(processedItem)) {
813
+ parts.push(
814
+ ...processedItem
815
+ );
901
816
  }
902
817
  }
903
818
  return parts;
@@ -911,6 +826,34 @@ ${tail}`;
911
826
  const processedContent = [];
912
827
  for (const item of anyObj.content) {
913
828
  if (item && typeof item === "object") {
829
+ if (item.type === "resource" && item.resource) {
830
+ const resource = item.resource;
831
+ const resourceUri = resource.uri;
832
+ if (resourceUri && resourceUri.startsWith("ui://")) {
833
+ logger.debug(
834
+ `Detected MCP-UI resource: ${resourceUri} (${resource.mimeType})`
835
+ );
836
+ const resourceMeta = resource._meta || {};
837
+ const title = resourceMeta.title || resource.title;
838
+ const preferredSize = resourceMeta.preferredSize || resource.preferredSize;
839
+ const uiPart = {
840
+ type: "ui-resource",
841
+ uri: resourceUri,
842
+ mimeType: resource.mimeType || "text/html",
843
+ content: resource.text,
844
+ blob: resource.blob,
845
+ metadata: {
846
+ title,
847
+ preferredSize
848
+ }
849
+ };
850
+ if (!uiPart.metadata?.title && !uiPart.metadata?.preferredSize) {
851
+ delete uiPart.metadata;
852
+ }
853
+ processedContent.push(uiPart);
854
+ continue;
855
+ }
856
+ }
914
857
  if (item.type === "resource" && item.resource) {
915
858
  const resource = item.resource;
916
859
  if (resource.text && resource.mimeType) {
@@ -1107,17 +1050,17 @@ ${tail}`;
1107
1050
  ];
1108
1051
  }
1109
1052
  const cleaned = sanitizeDeepObject(anyObj, logger);
1110
- return (0, import_safe_stringify.safeStringify)(cleaned);
1053
+ return [{ type: "text", text: (0, import_safe_stringify.safeStringify)(cleaned) }];
1111
1054
  }
1112
- return (0, import_safe_stringify.safeStringify)(result ?? "");
1055
+ return [{ type: "text", text: (0, import_safe_stringify.safeStringify)(result ?? "") }];
1113
1056
  } catch (err) {
1114
1057
  logger.warn(
1115
1058
  `sanitizeToolResultToContentWithBlobs failed, falling back to string: ${String(err)}`
1116
1059
  );
1117
1060
  try {
1118
- return (0, import_safe_stringify.safeStringify)(result ?? "");
1061
+ return [{ type: "text", text: (0, import_safe_stringify.safeStringify)(result ?? "") }];
1119
1062
  } catch {
1120
- return String(result ?? "");
1063
+ return [{ type: "text", text: String(result ?? "") }];
1121
1064
  }
1122
1065
  }
1123
1066
  }
@@ -1161,7 +1104,19 @@ function extractResourceDescriptors(parts) {
1161
1104
  return resources.length > 0 ? resources : void 0;
1162
1105
  }
1163
1106
  async function sanitizeToolResult(result, options, logger) {
1164
- const normalized = await normalizeToolResult(result, logger);
1107
+ let display;
1108
+ let resultForNormalization = result;
1109
+ if (result && typeof result === "object" && "_display" in result) {
1110
+ const { _display: rawDisplay, ...rest } = result;
1111
+ if ((0, import_display_types.isValidDisplayData)(rawDisplay)) {
1112
+ display = rawDisplay;
1113
+ logger.debug(
1114
+ `sanitizeToolResult: extracted display data (type=${display.type}) for ${options.toolName}`
1115
+ );
1116
+ }
1117
+ resultForNormalization = rest;
1118
+ }
1119
+ const normalized = await normalizeToolResult(resultForNormalization, logger);
1165
1120
  const persisted = await persistToolMedia(
1166
1121
  normalized,
1167
1122
  {
@@ -1172,14 +1127,24 @@ async function sanitizeToolResult(result, options, logger) {
1172
1127
  logger
1173
1128
  );
1174
1129
  const fallbackContent = [{ type: "text", text: "" }];
1175
- const content = persisted.parts.length > 0 ? persisted.parts : fallbackContent;
1130
+ const allContent = [
1131
+ ...persisted.parts,
1132
+ ...persisted.uiResources
1133
+ ];
1134
+ const content = allContent.length > 0 ? allContent : fallbackContent;
1135
+ if (persisted.uiResources.length > 0) {
1136
+ logger.debug(
1137
+ `sanitizeToolResult: including ${persisted.uiResources.length} UI resource(s) in final content for ${options.toolName}`
1138
+ );
1139
+ }
1176
1140
  return {
1177
1141
  content,
1178
1142
  ...persisted.resources ? { resources: persisted.resources } : {},
1179
1143
  meta: {
1180
1144
  toolName: options.toolName,
1181
1145
  toolCallId: options.toolCallId,
1182
- ...typeof options.success === "boolean" ? { success: options.success } : {}
1146
+ success: options.success,
1147
+ ...display ? { display } : {}
1183
1148
  }
1184
1149
  };
1185
1150
  }
@@ -1212,16 +1177,6 @@ function summarizeToolContentForText(content) {
1212
1177
  function base64LengthToBytes(charLength) {
1213
1178
  return Math.floor(charLength * 3 / 4);
1214
1179
  }
1215
- function isDataUri(str) {
1216
- return str.startsWith("data:") && str.includes(";base64,");
1217
- }
1218
- function extractBase64FromDataUri(dataUri) {
1219
- const commaIndex = dataUri.indexOf(",");
1220
- return commaIndex !== -1 ? dataUri.substring(commaIndex + 1) : "";
1221
- }
1222
- function estimateTextTokens(text) {
1223
- return Math.ceil(text.length / 4);
1224
- }
1225
1180
  function toTextForToolMessage(content) {
1226
1181
  if (Array.isArray(content)) {
1227
1182
  return summarizeToolContentForText(content);
@@ -1231,12 +1186,40 @@ function toTextForToolMessage(content) {
1231
1186
  }
1232
1187
  return String(content ?? "");
1233
1188
  }
1189
+ function filterCompacted(history) {
1190
+ let summaryIndex = -1;
1191
+ for (let i = history.length - 1; i >= 0; i--) {
1192
+ const msg = history[i];
1193
+ if (msg?.metadata?.isSummary === true) {
1194
+ summaryIndex = i;
1195
+ break;
1196
+ }
1197
+ }
1198
+ if (summaryIndex === -1) {
1199
+ return history.slice();
1200
+ }
1201
+ return history.slice(summaryIndex);
1202
+ }
1203
+ function formatToolOutputForDisplay(message) {
1204
+ if ((0, import_types.isToolMessage)(message) && message.compactedAt) {
1205
+ return "[Old tool result content cleared]";
1206
+ }
1207
+ if (typeof message.content === "string") {
1208
+ return message.content;
1209
+ }
1210
+ if (Array.isArray(message.content)) {
1211
+ return message.content.filter((part) => part.type === "text").map((part) => part.text).join("\n");
1212
+ }
1213
+ return "[no content]";
1214
+ }
1234
1215
  // Annotate the CommonJS export names for ESM import in node:
1235
1216
  0 && (module.exports = {
1236
- countMessagesTokens,
1217
+ estimateMessagesTokens,
1237
1218
  expandBlobReferences,
1238
1219
  fileTypesToMimePatterns,
1220
+ filterCompacted,
1239
1221
  filterMessagesByLLMCapabilities,
1222
+ formatToolOutputForDisplay,
1240
1223
  getFileData,
1241
1224
  getFileDataWithBlobSupport,
1242
1225
  getFileMediaKind,