@dexto/core 1.3.0 → 1.5.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 (781) hide show
  1. package/README.md +53 -9
  2. package/dist/agent/DextoAgent.cjs +570 -210
  3. package/dist/agent/DextoAgent.d.ts +175 -35
  4. package/dist/agent/DextoAgent.d.ts.map +1 -1
  5. package/dist/agent/DextoAgent.js +568 -208
  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.cjs +4 -1
  16. package/dist/agent/index.d.ts +2 -2
  17. package/dist/agent/index.d.ts.map +1 -1
  18. package/dist/agent/index.js +6 -2
  19. package/dist/agent/schemas.cjs +90 -68
  20. package/dist/agent/schemas.d.ts +5998 -146
  21. package/dist/agent/schemas.d.ts.map +1 -1
  22. package/dist/agent/schemas.js +90 -65
  23. package/dist/agent/state-manager.cjs +5 -5
  24. package/dist/agent/state-manager.d.ts +4 -4
  25. package/dist/agent/state-manager.js +6 -6
  26. package/dist/agent/types.d.ts +24 -10
  27. package/dist/agent/types.d.ts.map +1 -1
  28. package/dist/approval/error-codes.js +1 -1
  29. package/dist/approval/errors.js +1 -1
  30. package/dist/approval/factory.js +1 -1
  31. package/dist/approval/index.js +1 -1
  32. package/dist/approval/manager.cjs +234 -4
  33. package/dist/approval/manager.d.ts +131 -4
  34. package/dist/approval/manager.d.ts.map +1 -1
  35. package/dist/approval/manager.js +225 -5
  36. package/dist/approval/schemas.cjs +57 -7
  37. package/dist/approval/schemas.d.ts +344 -33
  38. package/dist/approval/schemas.d.ts.map +1 -1
  39. package/dist/approval/schemas.js +54 -8
  40. package/dist/approval/types.cjs +1 -0
  41. package/dist/approval/types.d.ts +32 -1
  42. package/dist/approval/types.d.ts.map +1 -1
  43. package/dist/approval/types.js +2 -1
  44. package/dist/{chunk-C6A6W6XS.js → chunk-PTJYTZNU.js} +44 -1
  45. package/dist/context/compaction/factory.cjs +57 -0
  46. package/dist/context/compaction/factory.d.ts +17 -0
  47. package/dist/context/compaction/factory.d.ts.map +1 -0
  48. package/dist/context/compaction/factory.js +34 -0
  49. package/dist/context/compaction/index.cjs +49 -0
  50. package/dist/context/compaction/index.d.ts +11 -0
  51. package/dist/context/compaction/index.d.ts.map +1 -0
  52. package/dist/context/compaction/index.js +19 -0
  53. package/dist/context/compaction/overflow.cjs +43 -0
  54. package/dist/context/compaction/overflow.d.ts +33 -0
  55. package/dist/context/compaction/overflow.d.ts.map +1 -0
  56. package/dist/context/compaction/overflow.js +19 -0
  57. package/dist/context/compaction/provider.cjs +16 -0
  58. package/dist/context/compaction/provider.d.ts +48 -0
  59. package/dist/context/compaction/provider.d.ts.map +1 -0
  60. package/dist/context/compaction/providers/noop-provider.cjs +48 -0
  61. package/dist/context/compaction/providers/noop-provider.d.ts +24 -0
  62. package/dist/context/compaction/providers/noop-provider.d.ts.map +1 -0
  63. package/dist/context/compaction/providers/noop-provider.js +24 -0
  64. package/dist/context/compaction/providers/reactive-overflow-provider.cjs +61 -0
  65. package/dist/context/compaction/providers/reactive-overflow-provider.d.ts +36 -0
  66. package/dist/context/compaction/providers/reactive-overflow-provider.d.ts.map +1 -0
  67. package/dist/context/compaction/providers/reactive-overflow-provider.js +37 -0
  68. package/dist/{llm/tokenizer/factory.cjs → context/compaction/registry.cjs} +15 -20
  69. package/dist/context/compaction/registry.d.ts +19 -0
  70. package/dist/context/compaction/registry.d.ts.map +1 -0
  71. package/dist/context/compaction/registry.js +16 -0
  72. package/dist/context/compaction/schemas.cjs +38 -0
  73. package/dist/context/compaction/schemas.d.ts +24 -0
  74. package/dist/context/compaction/schemas.d.ts.map +1 -0
  75. package/dist/context/compaction/schemas.js +14 -0
  76. package/dist/{llm/tokenizer/types.cjs → context/compaction/strategies/noop.cjs} +12 -9
  77. package/dist/context/compaction/strategies/noop.d.ts +18 -0
  78. package/dist/context/compaction/strategies/noop.d.ts.map +1 -0
  79. package/dist/context/compaction/strategies/noop.js +13 -0
  80. package/dist/context/compaction/strategies/reactive-overflow.cjs +201 -0
  81. package/dist/context/compaction/strategies/reactive-overflow.d.ts +81 -0
  82. package/dist/context/compaction/strategies/reactive-overflow.d.ts.map +1 -0
  83. package/dist/context/compaction/strategies/reactive-overflow.js +178 -0
  84. package/dist/context/compaction/types.d.ts +20 -0
  85. package/dist/context/compaction/types.d.ts.map +1 -0
  86. package/dist/context/error-codes.cjs +7 -0
  87. package/dist/context/error-codes.d.ts +8 -1
  88. package/dist/context/error-codes.d.ts.map +1 -1
  89. package/dist/context/error-codes.js +8 -1
  90. package/dist/context/errors.cjs +68 -0
  91. package/dist/context/errors.d.ts +21 -0
  92. package/dist/context/errors.d.ts.map +1 -1
  93. package/dist/context/errors.js +69 -1
  94. package/dist/context/index.cjs +3 -1
  95. package/dist/context/index.d.ts +1 -0
  96. package/dist/context/index.d.ts.map +1 -1
  97. package/dist/context/index.js +2 -1
  98. package/dist/context/manager.cjs +280 -323
  99. package/dist/context/manager.d.ts +65 -111
  100. package/dist/context/manager.d.ts.map +1 -1
  101. package/dist/context/manager.js +280 -328
  102. package/dist/context/media-helpers.js +1 -1
  103. package/dist/context/types.cjs +49 -0
  104. package/dist/context/types.d.ts +187 -72
  105. package/dist/context/types.d.ts.map +1 -1
  106. package/dist/context/types.js +35 -0
  107. package/dist/context/utils.cjs +293 -290
  108. package/dist/context/utils.d.ts +32 -18
  109. package/dist/context/utils.d.ts.map +1 -1
  110. package/dist/context/utils.js +293 -290
  111. package/dist/errors/DextoBaseError.js +1 -1
  112. package/dist/errors/DextoRuntimeError.js +1 -1
  113. package/dist/errors/DextoValidationError.js +1 -1
  114. package/dist/errors/index.js +1 -1
  115. package/dist/errors/result-bridge.cjs +2 -3
  116. package/dist/errors/result-bridge.d.ts.map +1 -1
  117. package/dist/errors/result-bridge.js +3 -4
  118. package/dist/errors/types.js +1 -1
  119. package/dist/events/index.cjs +18 -1
  120. package/dist/events/index.d.ts +149 -12
  121. package/dist/events/index.d.ts.map +1 -1
  122. package/dist/events/index.js +19 -2
  123. package/dist/filesystem/error-codes.js +1 -1
  124. package/dist/filesystem/errors.js +1 -1
  125. package/dist/filesystem/filesystem-service.cjs +39 -0
  126. package/dist/filesystem/filesystem-service.d.ts +32 -0
  127. package/dist/filesystem/filesystem-service.d.ts.map +1 -1
  128. package/dist/filesystem/filesystem-service.js +40 -1
  129. package/dist/filesystem/index.d.ts +1 -1
  130. package/dist/filesystem/index.d.ts.map +1 -1
  131. package/dist/filesystem/index.js +1 -1
  132. package/dist/filesystem/path-validator.cjs +69 -1
  133. package/dist/filesystem/path-validator.d.ts +43 -2
  134. package/dist/filesystem/path-validator.d.ts.map +1 -1
  135. package/dist/filesystem/path-validator.js +70 -2
  136. package/dist/image/define-image.cjs +146 -0
  137. package/dist/image/define-image.d.ts +71 -0
  138. package/dist/image/define-image.d.ts.map +1 -0
  139. package/dist/image/define-image.js +121 -0
  140. package/dist/{llm/tokenizer/default.cjs → image/index.cjs} +10 -19
  141. package/dist/image/index.d.ts +53 -0
  142. package/dist/image/index.d.ts.map +1 -0
  143. package/dist/image/index.js +7 -0
  144. package/dist/image/types.d.ts +231 -0
  145. package/dist/image/types.d.ts.map +1 -0
  146. package/dist/image/types.js +0 -0
  147. package/dist/index.browser.cjs +23 -8
  148. package/dist/index.browser.d.ts +4 -3
  149. package/dist/index.browser.d.ts.map +1 -1
  150. package/dist/index.browser.js +20 -3
  151. package/dist/index.cjs +5 -1
  152. package/dist/index.d.ts +2 -0
  153. package/dist/index.d.ts.map +1 -1
  154. package/dist/index.js +3 -1
  155. package/dist/llm/error-codes.cjs +1 -1
  156. package/dist/llm/error-codes.d.ts +1 -1
  157. package/dist/llm/error-codes.d.ts.map +1 -1
  158. package/dist/llm/error-codes.js +2 -2
  159. package/dist/llm/errors.cjs +34 -10
  160. package/dist/llm/errors.d.ts +23 -11
  161. package/dist/llm/errors.d.ts.map +1 -1
  162. package/dist/llm/errors.js +36 -12
  163. package/dist/llm/executor/stream-processor.cjs +375 -0
  164. package/dist/llm/executor/stream-processor.d.ts +55 -0
  165. package/dist/llm/executor/stream-processor.d.ts.map +1 -0
  166. package/dist/llm/executor/stream-processor.js +352 -0
  167. package/dist/llm/executor/tool-output-truncator.cjs +75 -0
  168. package/dist/llm/executor/tool-output-truncator.d.ts +27 -0
  169. package/dist/llm/executor/tool-output-truncator.d.ts.map +1 -0
  170. package/dist/llm/executor/tool-output-truncator.js +48 -0
  171. package/dist/llm/executor/turn-executor.cjs +780 -0
  172. package/dist/llm/executor/turn-executor.d.ts +167 -0
  173. package/dist/llm/executor/turn-executor.d.ts.map +1 -0
  174. package/dist/llm/executor/turn-executor.js +711 -0
  175. package/dist/llm/executor/types.cjs +16 -0
  176. package/dist/llm/executor/types.d.ts +27 -0
  177. package/dist/llm/executor/types.d.ts.map +1 -0
  178. package/dist/llm/executor/types.js +0 -0
  179. package/dist/llm/formatters/vercel.cjs +26 -188
  180. package/dist/llm/formatters/vercel.d.ts +2 -14
  181. package/dist/llm/formatters/vercel.d.ts.map +1 -1
  182. package/dist/llm/formatters/vercel.js +25 -187
  183. package/dist/llm/index.cjs +18 -1
  184. package/dist/llm/index.d.ts +2 -0
  185. package/dist/llm/index.d.ts.map +1 -1
  186. package/dist/llm/index.js +14 -0
  187. package/dist/llm/providers/local/ai-sdk-adapter.cjs +308 -0
  188. package/dist/llm/providers/local/ai-sdk-adapter.d.ts +29 -0
  189. package/dist/llm/providers/local/ai-sdk-adapter.d.ts.map +1 -0
  190. package/dist/llm/providers/local/ai-sdk-adapter.js +278 -0
  191. package/dist/llm/providers/local/downloader.cjs +291 -0
  192. package/dist/llm/providers/local/downloader.d.ts +82 -0
  193. package/dist/llm/providers/local/downloader.d.ts.map +1 -0
  194. package/dist/llm/providers/local/downloader.js +251 -0
  195. package/dist/llm/providers/local/error-codes.cjs +57 -0
  196. package/dist/llm/providers/local/error-codes.d.ts +66 -0
  197. package/dist/llm/providers/local/error-codes.d.ts.map +1 -0
  198. package/dist/llm/providers/local/error-codes.js +34 -0
  199. package/dist/llm/providers/local/errors.cjs +240 -0
  200. package/dist/llm/providers/local/errors.d.ts +31 -0
  201. package/dist/llm/providers/local/errors.d.ts.map +1 -0
  202. package/dist/llm/providers/local/errors.js +217 -0
  203. package/dist/llm/providers/local/gpu-detector.cjs +214 -0
  204. package/dist/llm/providers/local/gpu-detector.d.ts +28 -0
  205. package/dist/llm/providers/local/gpu-detector.d.ts.map +1 -0
  206. package/dist/llm/providers/local/gpu-detector.js +178 -0
  207. package/dist/llm/providers/local/index.cjs +147 -0
  208. package/dist/llm/providers/local/index.d.ts +21 -0
  209. package/dist/llm/providers/local/index.d.ts.map +1 -0
  210. package/dist/llm/providers/local/index.js +126 -0
  211. package/dist/llm/providers/local/node-llama-provider.cjs +216 -0
  212. package/dist/llm/providers/local/node-llama-provider.d.ts +90 -0
  213. package/dist/llm/providers/local/node-llama-provider.d.ts.map +1 -0
  214. package/dist/llm/providers/local/node-llama-provider.js +176 -0
  215. package/dist/llm/providers/local/ollama-provider.cjs +230 -0
  216. package/dist/llm/providers/local/ollama-provider.d.ts +70 -0
  217. package/dist/llm/providers/local/ollama-provider.d.ts.map +1 -0
  218. package/dist/llm/providers/local/ollama-provider.js +198 -0
  219. package/dist/llm/providers/local/registry.cjs +343 -0
  220. package/dist/llm/providers/local/registry.d.ts +51 -0
  221. package/dist/llm/providers/local/registry.d.ts.map +1 -0
  222. package/dist/llm/providers/local/registry.js +312 -0
  223. package/dist/llm/providers/local/schemas.cjs +169 -0
  224. package/dist/llm/providers/local/schemas.d.ts +395 -0
  225. package/dist/llm/providers/local/schemas.d.ts.map +1 -0
  226. package/dist/llm/providers/local/schemas.js +133 -0
  227. package/dist/llm/providers/local/types.cjs +16 -0
  228. package/dist/llm/providers/local/types.d.ts +219 -0
  229. package/dist/llm/providers/local/types.d.ts.map +1 -0
  230. package/dist/llm/providers/local/types.js +0 -0
  231. package/dist/llm/providers/openrouter-model-registry.cjs +350 -0
  232. package/dist/llm/providers/openrouter-model-registry.d.ts +120 -0
  233. package/dist/llm/providers/openrouter-model-registry.d.ts.map +1 -0
  234. package/dist/llm/providers/openrouter-model-registry.js +309 -0
  235. package/dist/llm/registry.cjs +569 -52
  236. package/dist/llm/registry.d.ts +79 -39
  237. package/dist/llm/registry.d.ts.map +1 -1
  238. package/dist/llm/registry.js +564 -49
  239. package/dist/llm/resolver.cjs +62 -34
  240. package/dist/llm/resolver.d.ts +3 -3
  241. package/dist/llm/resolver.d.ts.map +1 -1
  242. package/dist/llm/resolver.js +69 -38
  243. package/dist/llm/schemas.cjs +92 -97
  244. package/dist/llm/schemas.d.ts +162 -39
  245. package/dist/llm/schemas.d.ts.map +1 -1
  246. package/dist/llm/schemas.js +93 -100
  247. package/dist/llm/services/factory.cjs +88 -103
  248. package/dist/llm/services/factory.d.ts +17 -4
  249. package/dist/llm/services/factory.d.ts.map +1 -1
  250. package/dist/llm/services/factory.js +87 -93
  251. package/dist/llm/services/test-utils.integration.cjs +28 -10
  252. package/dist/llm/services/test-utils.integration.d.ts +7 -1
  253. package/dist/llm/services/test-utils.integration.d.ts.map +1 -1
  254. package/dist/llm/services/test-utils.integration.js +33 -12
  255. package/dist/llm/services/types.d.ts +1 -28
  256. package/dist/llm/services/types.d.ts.map +1 -1
  257. package/dist/llm/services/vercel.cjs +58 -469
  258. package/dist/llm/services/vercel.d.ts +39 -21
  259. package/dist/llm/services/vercel.d.ts.map +1 -1
  260. package/dist/llm/services/vercel.js +60 -476
  261. package/dist/llm/types.cjs +11 -4
  262. package/dist/llm/types.d.ts +9 -9
  263. package/dist/llm/types.d.ts.map +1 -1
  264. package/dist/llm/types.js +12 -4
  265. package/dist/llm/validation.js +1 -1
  266. package/dist/logger/browser.js +1 -1
  267. package/dist/logger/factory.js +1 -1
  268. package/dist/logger/index.js +1 -1
  269. package/dist/logger/logger.js +1 -1
  270. package/dist/logger/v2/dexto-logger.cjs +34 -6
  271. package/dist/logger/v2/dexto-logger.d.ts +20 -2
  272. package/dist/logger/v2/dexto-logger.d.ts.map +1 -1
  273. package/dist/logger/v2/dexto-logger.js +35 -7
  274. package/dist/logger/v2/error-codes.js +1 -1
  275. package/dist/logger/v2/errors.js +1 -1
  276. package/dist/logger/v2/schemas.js +1 -1
  277. package/dist/logger/v2/test-utils.cjs +70 -0
  278. package/dist/logger/v2/test-utils.d.ts +17 -0
  279. package/dist/logger/v2/test-utils.d.ts.map +1 -0
  280. package/dist/logger/v2/test-utils.js +46 -0
  281. package/dist/logger/v2/transport-factory.js +1 -1
  282. package/dist/logger/v2/transports/console-transport.js +1 -1
  283. package/dist/logger/v2/transports/file-transport.cjs +6 -0
  284. package/dist/logger/v2/transports/file-transport.d.ts +4 -0
  285. package/dist/logger/v2/transports/file-transport.d.ts.map +1 -1
  286. package/dist/logger/v2/transports/file-transport.js +7 -1
  287. package/dist/logger/v2/types.cjs +1 -0
  288. package/dist/logger/v2/types.d.ts +18 -2
  289. package/dist/logger/v2/types.d.ts.map +1 -1
  290. package/dist/logger/v2/types.js +2 -1
  291. package/dist/mcp/error-codes.cjs +1 -0
  292. package/dist/mcp/error-codes.d.ts +1 -0
  293. package/dist/mcp/error-codes.d.ts.map +1 -1
  294. package/dist/mcp/error-codes.js +2 -1
  295. package/dist/mcp/errors.cjs +13 -0
  296. package/dist/mcp/errors.d.ts +7 -0
  297. package/dist/mcp/errors.d.ts.map +1 -1
  298. package/dist/mcp/errors.js +14 -1
  299. package/dist/mcp/manager.cjs +12 -0
  300. package/dist/mcp/manager.d.ts +17 -0
  301. package/dist/mcp/manager.d.ts.map +1 -1
  302. package/dist/mcp/manager.js +13 -1
  303. package/dist/mcp/mcp-client.cjs +0 -3
  304. package/dist/mcp/mcp-client.d.ts.map +1 -1
  305. package/dist/mcp/mcp-client.js +1 -4
  306. package/dist/mcp/resolver.js +1 -1
  307. package/dist/mcp/schemas.cjs +6 -0
  308. package/dist/mcp/schemas.d.ts +52 -0
  309. package/dist/mcp/schemas.d.ts.map +1 -1
  310. package/dist/mcp/schemas.js +6 -1
  311. package/dist/memory/error-codes.js +1 -1
  312. package/dist/memory/errors.js +1 -1
  313. package/dist/memory/index.js +1 -1
  314. package/dist/memory/manager.js +1 -1
  315. package/dist/memory/schemas.d.ts +3 -3
  316. package/dist/memory/schemas.js +1 -1
  317. package/dist/plugins/builtins/content-policy.js +1 -1
  318. package/dist/plugins/builtins/response-sanitizer.js +1 -1
  319. package/dist/plugins/error-codes.cjs +3 -0
  320. package/dist/plugins/error-codes.d.ts +7 -1
  321. package/dist/plugins/error-codes.d.ts.map +1 -1
  322. package/dist/plugins/error-codes.js +4 -1
  323. package/dist/plugins/index.cjs +7 -0
  324. package/dist/plugins/index.d.ts +4 -2
  325. package/dist/plugins/index.d.ts.map +1 -1
  326. package/dist/plugins/index.js +7 -2
  327. package/dist/plugins/loader.js +1 -1
  328. package/dist/plugins/manager.cjs +92 -7
  329. package/dist/plugins/manager.d.ts +10 -3
  330. package/dist/plugins/manager.d.ts.map +1 -1
  331. package/dist/plugins/manager.js +93 -8
  332. package/dist/plugins/registrations/builtins.js +1 -1
  333. package/dist/plugins/registry.cjs +63 -0
  334. package/dist/plugins/registry.d.ts +101 -0
  335. package/dist/plugins/registry.d.ts.map +1 -0
  336. package/dist/plugins/registry.js +39 -0
  337. package/dist/plugins/schemas.cjs +17 -5
  338. package/dist/plugins/schemas.d.ts +65 -8
  339. package/dist/plugins/schemas.d.ts.map +1 -1
  340. package/dist/plugins/schemas.js +16 -5
  341. package/dist/plugins/types.d.ts +0 -1
  342. package/dist/plugins/types.d.ts.map +1 -1
  343. package/dist/process/command-validator.js +1 -1
  344. package/dist/process/error-codes.js +1 -1
  345. package/dist/process/errors.js +1 -1
  346. package/dist/process/index.js +1 -1
  347. package/dist/process/process-service.cjs +78 -26
  348. package/dist/process/process-service.d.ts +6 -1
  349. package/dist/process/process-service.d.ts.map +1 -1
  350. package/dist/process/process-service.js +79 -27
  351. package/dist/process/types.d.ts +2 -2
  352. package/dist/process/types.d.ts.map +1 -1
  353. package/dist/prompts/error-codes.cjs +1 -0
  354. package/dist/prompts/error-codes.d.ts +2 -1
  355. package/dist/prompts/error-codes.d.ts.map +1 -1
  356. package/dist/prompts/error-codes.js +2 -1
  357. package/dist/prompts/errors.cjs +15 -0
  358. package/dist/prompts/errors.d.ts +4 -0
  359. package/dist/prompts/errors.d.ts.map +1 -1
  360. package/dist/prompts/errors.js +16 -1
  361. package/dist/prompts/index.js +1 -1
  362. package/dist/prompts/name-validation.js +1 -1
  363. package/dist/prompts/prompt-manager.cjs +13 -2
  364. package/dist/prompts/prompt-manager.d.ts +7 -0
  365. package/dist/prompts/prompt-manager.d.ts.map +1 -1
  366. package/dist/prompts/prompt-manager.js +14 -3
  367. package/dist/prompts/providers/config-prompt-provider.cjs +12 -3
  368. package/dist/prompts/providers/config-prompt-provider.d.ts +2 -1
  369. package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
  370. package/dist/prompts/providers/config-prompt-provider.js +13 -4
  371. package/dist/prompts/providers/custom-prompt-provider.js +1 -1
  372. package/dist/prompts/providers/mcp-prompt-provider.js +1 -1
  373. package/dist/prompts/schemas.d.ts +12 -0
  374. package/dist/prompts/schemas.d.ts.map +1 -1
  375. package/dist/prompts/schemas.js +1 -1
  376. package/dist/prompts/types.d.ts +2 -0
  377. package/dist/prompts/types.d.ts.map +1 -1
  378. package/dist/prompts/utils.js +1 -1
  379. package/dist/providers/base-registry.cjs +147 -0
  380. package/dist/providers/base-registry.d.ts +147 -0
  381. package/dist/providers/base-registry.d.ts.map +1 -0
  382. package/dist/providers/base-registry.js +123 -0
  383. package/dist/providers/discovery.cjs +95 -0
  384. package/dist/providers/discovery.d.ts +94 -0
  385. package/dist/providers/discovery.d.ts.map +1 -0
  386. package/dist/providers/discovery.js +70 -0
  387. package/dist/providers/index.cjs +24 -0
  388. package/dist/providers/index.d.ts +32 -0
  389. package/dist/providers/index.d.ts.map +1 -0
  390. package/dist/providers/index.js +2 -0
  391. package/dist/resources/error-codes.js +1 -1
  392. package/dist/resources/errors.js +1 -1
  393. package/dist/resources/handlers/blob-handler.js +1 -1
  394. package/dist/resources/handlers/factory.js +1 -1
  395. package/dist/resources/handlers/filesystem-handler.js +1 -1
  396. package/dist/resources/index.js +1 -1
  397. package/dist/resources/internal-provider.js +1 -1
  398. package/dist/resources/manager.js +1 -1
  399. package/dist/resources/reference-parser.cjs +3 -3
  400. package/dist/resources/reference-parser.d.ts.map +1 -1
  401. package/dist/resources/reference-parser.js +4 -4
  402. package/dist/resources/schemas.js +1 -1
  403. package/dist/search/index.js +1 -1
  404. package/dist/search/search-service.js +1 -1
  405. package/dist/session/chat-session.cjs +169 -54
  406. package/dist/session/chat-session.d.ts +69 -29
  407. package/dist/session/chat-session.d.ts.map +1 -1
  408. package/dist/session/chat-session.js +171 -56
  409. package/dist/session/error-codes.js +1 -1
  410. package/dist/session/errors.js +1 -1
  411. package/dist/session/history/database.cjs +134 -21
  412. package/dist/session/history/database.d.ts +37 -8
  413. package/dist/session/history/database.d.ts.map +1 -1
  414. package/dist/session/history/database.js +135 -22
  415. package/dist/session/history/factory.js +1 -1
  416. package/dist/session/history/memory.cjs +18 -0
  417. package/dist/session/history/memory.d.ts +8 -0
  418. package/dist/session/history/memory.d.ts.map +1 -1
  419. package/dist/session/history/memory.js +19 -1
  420. package/dist/session/history/types.d.ts +13 -1
  421. package/dist/session/history/types.d.ts.map +1 -1
  422. package/dist/session/index.cjs +3 -0
  423. package/dist/session/index.d.ts +3 -0
  424. package/dist/session/index.d.ts.map +1 -1
  425. package/dist/session/index.js +3 -1
  426. package/dist/session/message-queue.cjs +201 -0
  427. package/dist/session/message-queue.d.ts +114 -0
  428. package/dist/session/message-queue.d.ts.map +1 -0
  429. package/dist/session/message-queue.js +178 -0
  430. package/dist/session/schemas.js +1 -1
  431. package/dist/session/session-manager.cjs +57 -7
  432. package/dist/session/session-manager.d.ts +18 -0
  433. package/dist/session/session-manager.d.ts.map +1 -1
  434. package/dist/session/session-manager.js +58 -8
  435. package/dist/session/title-generator.cjs +4 -8
  436. package/dist/session/title-generator.d.ts +1 -2
  437. package/dist/session/title-generator.d.ts.map +1 -1
  438. package/dist/session/title-generator.js +5 -9
  439. package/dist/session/types.cjs +16 -0
  440. package/dist/session/types.d.ts +14 -0
  441. package/dist/session/types.d.ts.map +1 -0
  442. package/dist/session/types.js +0 -0
  443. package/dist/storage/blob/factory.cjs +8 -11
  444. package/dist/storage/blob/factory.d.ts +32 -6
  445. package/dist/storage/blob/factory.d.ts.map +1 -1
  446. package/dist/storage/blob/factory.js +9 -12
  447. package/dist/storage/blob/index.cjs +56 -0
  448. package/dist/storage/blob/index.d.ts +45 -0
  449. package/dist/storage/blob/index.d.ts.map +1 -0
  450. package/dist/storage/blob/index.js +30 -0
  451. package/dist/storage/blob/local-blob-store.js +1 -1
  452. package/dist/storage/blob/memory-blob-store.js +1 -1
  453. package/dist/storage/blob/provider.cjs +16 -0
  454. package/dist/storage/blob/provider.d.ts +50 -0
  455. package/dist/storage/blob/provider.d.ts.map +1 -0
  456. package/dist/storage/blob/provider.js +0 -0
  457. package/dist/storage/blob/providers/index.cjs +31 -0
  458. package/dist/storage/blob/providers/index.d.ts +8 -0
  459. package/dist/storage/blob/providers/index.d.ts.map +1 -0
  460. package/dist/storage/blob/providers/index.js +7 -0
  461. package/dist/storage/blob/providers/local.cjs +39 -0
  462. package/dist/storage/blob/providers/local.d.ts +17 -0
  463. package/dist/storage/blob/providers/local.d.ts.map +1 -0
  464. package/dist/storage/blob/providers/local.js +16 -0
  465. package/dist/storage/blob/providers/memory.cjs +39 -0
  466. package/dist/storage/blob/providers/memory.d.ts +17 -0
  467. package/dist/storage/blob/providers/memory.d.ts.map +1 -0
  468. package/dist/storage/blob/providers/memory.js +16 -0
  469. package/dist/storage/blob/registry.cjs +50 -0
  470. package/dist/storage/blob/registry.d.ts +42 -0
  471. package/dist/storage/blob/registry.d.ts.map +1 -0
  472. package/dist/storage/blob/registry.js +26 -0
  473. package/dist/storage/blob/schemas.cjs +9 -12
  474. package/dist/storage/blob/schemas.d.ts +39 -34
  475. package/dist/storage/blob/schemas.d.ts.map +1 -1
  476. package/dist/storage/blob/schemas.js +7 -12
  477. package/dist/storage/cache/factory.cjs +8 -36
  478. package/dist/storage/cache/factory.d.ts +32 -7
  479. package/dist/storage/cache/factory.d.ts.map +1 -1
  480. package/dist/storage/cache/factory.js +9 -27
  481. package/dist/storage/cache/index.cjs +53 -0
  482. package/dist/storage/cache/index.d.ts +44 -0
  483. package/dist/storage/cache/index.d.ts.map +1 -0
  484. package/dist/storage/cache/index.js +28 -0
  485. package/dist/storage/cache/memory-cache-store.js +1 -1
  486. package/dist/storage/cache/provider.cjs +16 -0
  487. package/dist/storage/cache/provider.d.ts +56 -0
  488. package/dist/storage/cache/provider.d.ts.map +1 -0
  489. package/dist/storage/cache/provider.js +0 -0
  490. package/dist/storage/cache/providers/index.cjs +31 -0
  491. package/dist/storage/cache/providers/index.d.ts +8 -0
  492. package/dist/storage/cache/providers/index.d.ts.map +1 -0
  493. package/dist/storage/cache/providers/index.js +7 -0
  494. package/dist/storage/cache/providers/memory.cjs +40 -0
  495. package/dist/storage/cache/providers/memory.d.ts +17 -0
  496. package/dist/storage/cache/providers/memory.d.ts.map +1 -0
  497. package/dist/storage/cache/providers/memory.js +17 -0
  498. package/dist/storage/cache/providers/redis.cjs +66 -0
  499. package/dist/storage/cache/providers/redis.d.ts +20 -0
  500. package/dist/storage/cache/providers/redis.d.ts.map +1 -0
  501. package/dist/storage/cache/providers/redis.js +33 -0
  502. package/dist/storage/cache/redis-store.js +1 -1
  503. package/dist/{llm/tokenizer/google.cjs → storage/cache/registry.cjs} +23 -25
  504. package/dist/storage/cache/registry.d.ts +42 -0
  505. package/dist/storage/cache/registry.d.ts.map +1 -0
  506. package/dist/storage/cache/registry.js +26 -0
  507. package/dist/storage/cache/schemas.cjs +6 -2
  508. package/dist/storage/cache/schemas.d.ts +2 -3
  509. package/dist/storage/cache/schemas.d.ts.map +1 -1
  510. package/dist/storage/cache/schemas.js +4 -2
  511. package/dist/storage/database/factory.cjs +8 -47
  512. package/dist/storage/database/factory.d.ts +34 -8
  513. package/dist/storage/database/factory.d.ts.map +1 -1
  514. package/dist/storage/database/factory.js +9 -38
  515. package/dist/storage/database/index.cjs +58 -0
  516. package/dist/storage/database/index.d.ts +45 -0
  517. package/dist/storage/database/index.d.ts.map +1 -0
  518. package/dist/storage/database/index.js +37 -0
  519. package/dist/storage/database/memory-database-store.js +1 -1
  520. package/dist/storage/database/postgres-store.cjs +12 -0
  521. package/dist/storage/database/postgres-store.d.ts.map +1 -1
  522. package/dist/storage/database/postgres-store.js +13 -1
  523. package/dist/storage/database/provider.cjs +16 -0
  524. package/dist/storage/database/provider.d.ts +56 -0
  525. package/dist/storage/database/provider.d.ts.map +1 -0
  526. package/dist/storage/database/provider.js +0 -0
  527. package/dist/storage/database/providers/index.cjs +34 -0
  528. package/dist/storage/database/providers/index.d.ts +9 -0
  529. package/dist/storage/database/providers/index.d.ts.map +1 -0
  530. package/dist/storage/database/providers/index.js +9 -0
  531. package/dist/storage/database/providers/memory.cjs +40 -0
  532. package/dist/storage/database/providers/memory.d.ts +16 -0
  533. package/dist/storage/database/providers/memory.d.ts.map +1 -0
  534. package/dist/storage/database/providers/memory.js +17 -0
  535. package/dist/storage/database/providers/postgres.cjs +62 -0
  536. package/dist/storage/database/providers/postgres.d.ts +19 -0
  537. package/dist/storage/database/providers/postgres.d.ts.map +1 -0
  538. package/dist/storage/database/providers/postgres.js +29 -0
  539. package/dist/storage/database/providers/sqlite.cjs +66 -0
  540. package/dist/storage/database/providers/sqlite.d.ts +20 -0
  541. package/dist/storage/database/providers/sqlite.d.ts.map +1 -0
  542. package/dist/storage/database/providers/sqlite.js +33 -0
  543. package/dist/storage/database/registry.cjs +50 -0
  544. package/dist/storage/database/registry.d.ts +42 -0
  545. package/dist/storage/database/registry.d.ts.map +1 -0
  546. package/dist/storage/database/registry.js +26 -0
  547. package/dist/storage/database/schemas.cjs +8 -2
  548. package/dist/storage/database/schemas.d.ts +3 -4
  549. package/dist/storage/database/schemas.d.ts.map +1 -1
  550. package/dist/storage/database/schemas.js +5 -2
  551. package/dist/storage/database/sqlite-store.js +1 -1
  552. package/dist/storage/error-codes.cjs +6 -0
  553. package/dist/storage/error-codes.d.ts +7 -1
  554. package/dist/storage/error-codes.d.ts.map +1 -1
  555. package/dist/storage/error-codes.js +7 -1
  556. package/dist/storage/errors.cjs +80 -0
  557. package/dist/storage/errors.d.ts +24 -0
  558. package/dist/storage/errors.d.ts.map +1 -1
  559. package/dist/storage/errors.js +81 -1
  560. package/dist/storage/index.cjs +47 -4
  561. package/dist/storage/index.d.ts +34 -8
  562. package/dist/storage/index.d.ts.map +1 -1
  563. package/dist/storage/index.js +33 -4
  564. package/dist/storage/schemas.cjs +4 -0
  565. package/dist/storage/schemas.d.ts +17 -50
  566. package/dist/storage/schemas.d.ts.map +1 -1
  567. package/dist/storage/schemas.js +6 -2
  568. package/dist/storage/storage-manager.cjs +6 -6
  569. package/dist/storage/storage-manager.d.ts.map +1 -1
  570. package/dist/storage/storage-manager.js +4 -4
  571. package/dist/systemPrompt/contributors.js +1 -1
  572. package/dist/systemPrompt/error-codes.js +1 -1
  573. package/dist/systemPrompt/errors.js +1 -1
  574. package/dist/systemPrompt/in-built-prompts.cjs +7 -6
  575. package/dist/systemPrompt/in-built-prompts.d.ts +2 -2
  576. package/dist/systemPrompt/in-built-prompts.d.ts.map +1 -1
  577. package/dist/systemPrompt/in-built-prompts.js +7 -6
  578. package/dist/systemPrompt/index.js +1 -1
  579. package/dist/systemPrompt/manager.js +1 -1
  580. package/dist/systemPrompt/registry.cjs +2 -2
  581. package/dist/systemPrompt/registry.d.ts +1 -1
  582. package/dist/systemPrompt/registry.d.ts.map +1 -1
  583. package/dist/systemPrompt/registry.js +3 -3
  584. package/dist/systemPrompt/schemas.cjs +2 -2
  585. package/dist/systemPrompt/schemas.d.ts +18 -18
  586. package/dist/systemPrompt/schemas.js +3 -3
  587. package/dist/telemetry/decorators.js +1 -1
  588. package/dist/telemetry/error-codes.js +1 -1
  589. package/dist/telemetry/errors.js +1 -1
  590. package/dist/telemetry/exporters.js +1 -1
  591. package/dist/telemetry/index.js +1 -1
  592. package/dist/telemetry/schemas.js +1 -1
  593. package/dist/telemetry/telemetry.js +1 -1
  594. package/dist/telemetry/utils.js +1 -1
  595. package/dist/tools/bash-pattern-utils.cjs +91 -0
  596. package/dist/tools/bash-pattern-utils.d.ts +58 -0
  597. package/dist/tools/bash-pattern-utils.d.ts.map +1 -0
  598. package/dist/tools/bash-pattern-utils.js +64 -0
  599. package/dist/tools/confirmation/allowed-tools-provider/factory.js +1 -1
  600. package/dist/tools/confirmation/allowed-tools-provider/in-memory.js +1 -1
  601. package/dist/tools/confirmation/allowed-tools-provider/storage.js +1 -1
  602. package/dist/tools/custom-tool-registry.cjs +64 -0
  603. package/dist/tools/custom-tool-registry.d.ts +120 -0
  604. package/dist/tools/custom-tool-registry.d.ts.map +1 -0
  605. package/dist/tools/custom-tool-registry.js +40 -0
  606. package/dist/tools/custom-tool-schema-registry.cjs +164 -0
  607. package/dist/tools/custom-tool-schema-registry.d.ts +86 -0
  608. package/dist/tools/custom-tool-schema-registry.d.ts.map +1 -0
  609. package/dist/tools/custom-tool-schema-registry.js +140 -0
  610. package/dist/tools/display-types.cjs +60 -0
  611. package/dist/tools/display-types.d.ts +133 -0
  612. package/dist/tools/display-types.d.ts.map +1 -0
  613. package/dist/tools/display-types.js +32 -0
  614. package/dist/tools/error-codes.cjs +5 -0
  615. package/dist/tools/error-codes.d.ts +6 -1
  616. package/dist/tools/error-codes.d.ts.map +1 -1
  617. package/dist/tools/error-codes.js +6 -1
  618. package/dist/tools/errors.cjs +71 -0
  619. package/dist/tools/errors.d.ts +33 -0
  620. package/dist/tools/errors.d.ts.map +1 -1
  621. package/dist/tools/errors.js +72 -1
  622. package/dist/tools/index.cjs +15 -1
  623. package/dist/tools/index.d.ts +5 -0
  624. package/dist/tools/index.d.ts.map +1 -1
  625. package/dist/tools/index.js +13 -2
  626. package/dist/tools/internal-tools/constants.cjs +3 -9
  627. package/dist/tools/internal-tools/constants.d.ts +1 -1
  628. package/dist/tools/internal-tools/constants.d.ts.map +1 -1
  629. package/dist/tools/internal-tools/constants.js +4 -10
  630. package/dist/tools/internal-tools/implementations/ask-user-tool.cjs +1 -1
  631. package/dist/tools/internal-tools/implementations/ask-user-tool.js +2 -2
  632. package/dist/tools/internal-tools/implementations/delegate-to-url-tool.js +1 -1
  633. package/dist/tools/internal-tools/implementations/get-resource-tool.cjs +113 -0
  634. package/dist/tools/internal-tools/implementations/get-resource-tool.d.ts +30 -0
  635. package/dist/tools/internal-tools/implementations/get-resource-tool.d.ts.map +1 -0
  636. package/dist/tools/internal-tools/implementations/get-resource-tool.js +90 -0
  637. package/dist/tools/internal-tools/implementations/list-resources-tool.cjs +91 -0
  638. package/dist/tools/internal-tools/implementations/list-resources-tool.d.ts +24 -0
  639. package/dist/tools/internal-tools/implementations/list-resources-tool.d.ts.map +1 -0
  640. package/dist/tools/internal-tools/implementations/list-resources-tool.js +68 -0
  641. package/dist/tools/internal-tools/implementations/search-history-tool.js +1 -1
  642. package/dist/tools/internal-tools/provider.cjs +175 -31
  643. package/dist/tools/internal-tools/provider.d.ts +62 -14
  644. package/dist/tools/internal-tools/provider.d.ts.map +1 -1
  645. package/dist/tools/internal-tools/provider.js +176 -32
  646. package/dist/tools/internal-tools/registry.cjs +19 -43
  647. package/dist/tools/internal-tools/registry.d.ts +32 -11
  648. package/dist/tools/internal-tools/registry.d.ts.map +1 -1
  649. package/dist/tools/internal-tools/registry.js +20 -44
  650. package/dist/tools/schemas.cjs +36 -6
  651. package/dist/tools/schemas.d.ts +74 -5
  652. package/dist/tools/schemas.d.ts.map +1 -1
  653. package/dist/tools/schemas.js +30 -6
  654. package/dist/tools/tool-manager.cjs +279 -30
  655. package/dist/tools/tool-manager.d.ts +45 -4
  656. package/dist/tools/tool-manager.d.ts.map +1 -1
  657. package/dist/tools/tool-manager.js +284 -31
  658. package/dist/tools/types.d.ts +63 -0
  659. package/dist/tools/types.d.ts.map +1 -1
  660. package/dist/utils/api-key-resolver.cjs +19 -1
  661. package/dist/utils/api-key-resolver.d.ts.map +1 -1
  662. package/dist/utils/api-key-resolver.js +20 -2
  663. package/dist/utils/async-context.js +1 -1
  664. package/dist/utils/debug.js +1 -1
  665. package/dist/{llm/tokenizer/anthropic.cjs → utils/defer.cjs} +19 -20
  666. package/dist/utils/defer.d.ts +63 -0
  667. package/dist/utils/defer.d.ts.map +1 -0
  668. package/dist/utils/defer.js +19 -0
  669. package/dist/utils/error-conversion.js +1 -1
  670. package/dist/utils/execution-context.js +1 -1
  671. package/dist/utils/fs-walk.js +1 -1
  672. package/dist/utils/index.cjs +3 -3
  673. package/dist/utils/index.d.ts +1 -1
  674. package/dist/utils/index.d.ts.map +1 -1
  675. package/dist/utils/index.js +1 -1
  676. package/dist/utils/path.js +1 -1
  677. package/dist/utils/redactor.cjs +18 -3
  678. package/dist/utils/redactor.d.ts +0 -7
  679. package/dist/utils/redactor.d.ts.map +1 -1
  680. package/dist/utils/redactor.js +19 -4
  681. package/dist/utils/result.js +1 -1
  682. package/dist/utils/safe-stringify.js +1 -1
  683. package/dist/utils/schema-metadata.js +1 -1
  684. package/dist/utils/schema.js +1 -1
  685. package/dist/utils/service-initializer.cjs +15 -37
  686. package/dist/utils/service-initializer.d.ts.map +1 -1
  687. package/dist/utils/service-initializer.js +16 -38
  688. package/dist/utils/user-info.js +1 -1
  689. package/dist/utils/zod-schema-converter.js +1 -1
  690. package/package.json +10 -8
  691. package/dist/context/compression/middle-removal.cjs +0 -95
  692. package/dist/context/compression/middle-removal.d.ts +0 -47
  693. package/dist/context/compression/middle-removal.d.ts.map +0 -1
  694. package/dist/context/compression/middle-removal.js +0 -72
  695. package/dist/context/compression/oldest-removal.cjs +0 -83
  696. package/dist/context/compression/oldest-removal.d.ts +0 -42
  697. package/dist/context/compression/oldest-removal.d.ts.map +0 -1
  698. package/dist/context/compression/oldest-removal.js +0 -60
  699. package/dist/context/compression/types.d.ts +0 -18
  700. package/dist/context/compression/types.d.ts.map +0 -1
  701. package/dist/llm/formatters/anthropic.cjs +0 -257
  702. package/dist/llm/formatters/anthropic.d.ts +0 -46
  703. package/dist/llm/formatters/anthropic.d.ts.map +0 -1
  704. package/dist/llm/formatters/anthropic.js +0 -239
  705. package/dist/llm/formatters/factory.cjs +0 -50
  706. package/dist/llm/formatters/factory.d.ts +0 -10
  707. package/dist/llm/formatters/factory.d.ts.map +0 -1
  708. package/dist/llm/formatters/factory.js +0 -27
  709. package/dist/llm/formatters/openai.cjs +0 -203
  710. package/dist/llm/formatters/openai.d.ts +0 -39
  711. package/dist/llm/formatters/openai.d.ts.map +0 -1
  712. package/dist/llm/formatters/openai.js +0 -184
  713. package/dist/llm/formatters/types.d.ts +0 -41
  714. package/dist/llm/formatters/types.d.ts.map +0 -1
  715. package/dist/llm/services/anthropic.cjs +0 -511
  716. package/dist/llm/services/anthropic.d.ts +0 -48
  717. package/dist/llm/services/anthropic.d.ts.map +0 -1
  718. package/dist/llm/services/anthropic.js +0 -447
  719. package/dist/llm/services/openai.cjs +0 -611
  720. package/dist/llm/services/openai.d.ts +0 -48
  721. package/dist/llm/services/openai.d.ts.map +0 -1
  722. package/dist/llm/services/openai.js +0 -547
  723. package/dist/llm/tokenizer/anthropic.d.ts +0 -19
  724. package/dist/llm/tokenizer/anthropic.d.ts.map +0 -1
  725. package/dist/llm/tokenizer/anthropic.js +0 -20
  726. package/dist/llm/tokenizer/default.d.ts +0 -14
  727. package/dist/llm/tokenizer/default.d.ts.map +0 -1
  728. package/dist/llm/tokenizer/default.js +0 -18
  729. package/dist/llm/tokenizer/factory.d.ts +0 -12
  730. package/dist/llm/tokenizer/factory.d.ts.map +0 -1
  731. package/dist/llm/tokenizer/factory.js +0 -21
  732. package/dist/llm/tokenizer/google.d.ts +0 -29
  733. package/dist/llm/tokenizer/google.d.ts.map +0 -1
  734. package/dist/llm/tokenizer/google.js +0 -29
  735. package/dist/llm/tokenizer/openai.cjs +0 -115
  736. package/dist/llm/tokenizer/openai.d.ts +0 -41
  737. package/dist/llm/tokenizer/openai.d.ts.map +0 -1
  738. package/dist/llm/tokenizer/openai.js +0 -91
  739. package/dist/llm/tokenizer/types.d.ts +0 -18
  740. package/dist/llm/tokenizer/types.d.ts.map +0 -1
  741. package/dist/llm/tokenizer/types.js +0 -10
  742. package/dist/tools/internal-tools/implementations/bash-exec-tool.cjs +0 -106
  743. package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts +0 -13
  744. package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts.map +0 -1
  745. package/dist/tools/internal-tools/implementations/bash-exec-tool.js +0 -73
  746. package/dist/tools/internal-tools/implementations/bash-output-tool.cjs +0 -49
  747. package/dist/tools/internal-tools/implementations/bash-output-tool.d.ts +0 -12
  748. package/dist/tools/internal-tools/implementations/bash-output-tool.d.ts.map +0 -1
  749. package/dist/tools/internal-tools/implementations/bash-output-tool.js +0 -26
  750. package/dist/tools/internal-tools/implementations/edit-file-tool.cjs +0 -62
  751. package/dist/tools/internal-tools/implementations/edit-file-tool.d.ts +0 -12
  752. package/dist/tools/internal-tools/implementations/edit-file-tool.d.ts.map +0 -1
  753. package/dist/tools/internal-tools/implementations/edit-file-tool.js +0 -39
  754. package/dist/tools/internal-tools/implementations/glob-files-tool.cjs +0 -57
  755. package/dist/tools/internal-tools/implementations/glob-files-tool.d.ts +0 -12
  756. package/dist/tools/internal-tools/implementations/glob-files-tool.d.ts.map +0 -1
  757. package/dist/tools/internal-tools/implementations/glob-files-tool.js +0 -34
  758. package/dist/tools/internal-tools/implementations/grep-content-tool.cjs +0 -71
  759. package/dist/tools/internal-tools/implementations/grep-content-tool.d.ts +0 -12
  760. package/dist/tools/internal-tools/implementations/grep-content-tool.d.ts.map +0 -1
  761. package/dist/tools/internal-tools/implementations/grep-content-tool.js +0 -48
  762. package/dist/tools/internal-tools/implementations/kill-process-tool.cjs +0 -47
  763. package/dist/tools/internal-tools/implementations/kill-process-tool.d.ts +0 -12
  764. package/dist/tools/internal-tools/implementations/kill-process-tool.d.ts.map +0 -1
  765. package/dist/tools/internal-tools/implementations/kill-process-tool.js +0 -24
  766. package/dist/tools/internal-tools/implementations/read-file-tool.cjs +0 -55
  767. package/dist/tools/internal-tools/implementations/read-file-tool.d.ts +0 -12
  768. package/dist/tools/internal-tools/implementations/read-file-tool.d.ts.map +0 -1
  769. package/dist/tools/internal-tools/implementations/read-file-tool.js +0 -32
  770. package/dist/tools/internal-tools/implementations/write-file-tool.cjs +0 -56
  771. package/dist/tools/internal-tools/implementations/write-file-tool.d.ts +0 -12
  772. package/dist/tools/internal-tools/implementations/write-file-tool.d.ts.map +0 -1
  773. package/dist/tools/internal-tools/implementations/write-file-tool.js +0 -33
  774. package/dist/utils/env-file.cjs +0 -118
  775. package/dist/utils/env-file.d.ts +0 -5
  776. package/dist/utils/env-file.d.ts.map +0 -1
  777. package/dist/utils/env-file.js +0 -85
  778. /package/dist/context/{compression/types.js → compaction/provider.js} +0 -0
  779. /package/dist/context/{compression → compaction}/types.cjs +0 -0
  780. /package/dist/{llm/formatters → context/compaction}/types.js +0 -0
  781. /package/dist/{llm/formatters → image}/types.cjs +0 -0
@@ -1,15 +1,9 @@
1
- import "../chunk-C6A6W6XS.js";
1
+ import "../chunk-PTJYTZNU.js";
2
2
  import { randomUUID } from "crypto";
3
- import { MiddleRemovalStrategy } from "./compression/middle-removal.js";
4
- import { OldestRemovalStrategy } from "./compression/oldest-removal.js";
3
+ import { isSystemMessage, isUserMessage, isAssistantMessage, isToolMessage } from "./types.js";
5
4
  import { DextoLogComponent } from "../logger/v2/types.js";
6
5
  import { eventBus } from "../events/index.js";
7
- import {
8
- countMessagesTokens,
9
- sanitizeToolResult,
10
- expandBlobReferences,
11
- isLikelyBase64String
12
- } from "./utils.js";
6
+ import { expandBlobReferences, isLikelyBase64String, filterCompacted } from "./utils.js";
13
7
  import { ContextError } from "./errors.js";
14
8
  class ContextManager {
15
9
  /**
@@ -28,27 +22,6 @@ class ContextManager {
28
22
  * Maximum number of tokens allowed in the conversation (if specified)
29
23
  */
30
24
  maxInputTokens;
31
- /**
32
- * Actual token count from the last LLM response.
33
- * Used for more accurate token estimation in hybrid approach.
34
- */
35
- lastActualTokenCount = 0;
36
- /**
37
- * Compression threshold as a percentage of maxInputTokens.
38
- * When estimated tokens exceed (maxInputTokens * threshold), compression is triggered.
39
- */
40
- compressionThreshold = 0.8;
41
- // 80% threshold
42
- /**
43
- * Tokenizer used for counting tokens and enabling compression (if specified)
44
- */
45
- tokenizer;
46
- /**
47
- * The sequence of compression strategies to apply when maxInputTokens is exceeded.
48
- * The order in this array matters, as strategies are applied sequentially until
49
- * the token count is within the limit.
50
- */
51
- compressionStrategies;
52
25
  historyProvider;
53
26
  sessionId;
54
27
  /**
@@ -63,26 +36,19 @@ class ContextManager {
63
36
  * @param llmConfig The validated LLM configuration.
64
37
  * @param formatter Formatter implementation for the target LLM provider
65
38
  * @param systemPromptManager SystemPromptManager instance for the conversation
66
- * @param maxInputTokens Maximum token limit for the conversation history. Triggers compression if exceeded and a tokenizer is provided.
67
- * @param tokenizer Tokenizer implementation used for counting tokens and enabling compression.
39
+ * @param maxInputTokens Maximum token limit for the conversation history.
68
40
  * @param historyProvider Session-scoped ConversationHistoryProvider instance for managing conversation history
69
41
  * @param sessionId Unique identifier for the conversation session (readonly, for debugging)
70
- * @param compressionStrategies Optional array of compression strategies to apply when token limits are exceeded
71
- * @param resourceManager Optional ResourceManager for resolving blob references in messages
42
+ * @param resourceManager ResourceManager for resolving blob references in messages
72
43
  * @param logger Logger instance for logging
73
44
  */
74
- constructor(llmConfig, formatter, systemPromptManager, maxInputTokens, tokenizer, historyProvider, sessionId, resourceManager, logger, compressionStrategies = [
75
- new MiddleRemovalStrategy({}, logger),
76
- new OldestRemovalStrategy({}, logger)
77
- ]) {
45
+ constructor(llmConfig, formatter, systemPromptManager, maxInputTokens, historyProvider, sessionId, resourceManager, logger) {
78
46
  this.llmConfig = llmConfig;
79
47
  this.formatter = formatter;
80
48
  this.systemPromptManager = systemPromptManager;
81
49
  this.maxInputTokens = maxInputTokens;
82
- this.tokenizer = tokenizer;
83
50
  this.historyProvider = historyProvider;
84
51
  this.sessionId = sessionId;
85
- this.compressionStrategies = compressionStrategies;
86
52
  this.resourceManager = resourceManager;
87
53
  this.logger = logger.createChild(DextoLogComponent.CONTEXT);
88
54
  this.logger.debug(
@@ -149,117 +115,177 @@ class ContextManager {
149
115
  return data;
150
116
  }
151
117
  /**
152
- * Returns the current token count of the conversation history.
153
- * @returns Promise that resolves to the number of tokens in the current history
118
+ * Returns the configured maximum number of input tokens for the conversation.
154
119
  */
155
- async getTokenCount() {
156
- const history = await this.historyProvider.getHistory();
157
- return countMessagesTokens(history, this.tokenizer, void 0, this.logger);
120
+ getMaxInputTokens() {
121
+ return this.maxInputTokens;
122
+ }
123
+ /**
124
+ * Assembles and returns the current system prompt by invoking the SystemPromptManager.
125
+ */
126
+ async getSystemPrompt(context) {
127
+ const prompt = await this.systemPromptManager.build(context);
128
+ this.logger.debug(`[SystemPrompt] Built system prompt:
129
+ ${prompt}`);
130
+ return prompt;
158
131
  }
159
132
  /**
160
- * Returns the total token count that will be sent to the LLM provider,
161
- * including system prompt, formatted messages, and provider-specific overhead.
162
- * This provides a more accurate estimate than getTokenCount() alone.
133
+ * Gets the raw conversation history
134
+ * Returns a defensive copy to prevent modification
163
135
  *
164
- * @param context The DynamicContributorContext for system prompt contributors
165
- * @returns Promise that resolves to the total number of tokens that will be sent to the provider
136
+ * @returns Promise that resolves to a read-only copy of the conversation history
166
137
  */
167
- async getTotalTokenCount(context) {
168
- try {
169
- const systemPrompt = await this.getSystemPrompt(context);
170
- let history = await this.historyProvider.getHistory();
171
- const systemPromptTokens = this.tokenizer.countTokens(systemPrompt);
172
- history = await this.compressHistoryIfNeeded(history, systemPromptTokens);
173
- const historyTokens = countMessagesTokens(
174
- history,
175
- this.tokenizer,
176
- void 0,
177
- this.logger
178
- );
179
- const formattingOverhead = Math.ceil((systemPromptTokens + historyTokens) * 0.05);
180
- const totalTokens = systemPromptTokens + historyTokens + formattingOverhead;
181
- this.logger.debug(
182
- `Token breakdown - System: ${systemPromptTokens}, History: ${historyTokens}, Overhead: ${formattingOverhead}, Total: ${totalTokens}`
183
- );
184
- return totalTokens;
185
- } catch (error) {
186
- this.logger.error(
187
- `Error calculating total token count: ${error instanceof Error ? error.message : String(error)}`,
188
- { error }
189
- );
190
- return this.getTokenCount();
191
- }
138
+ async getHistory() {
139
+ const history = await this.historyProvider.getHistory();
140
+ return [...history];
192
141
  }
193
142
  /**
194
- * Returns the configured maximum number of input tokens for the conversation.
143
+ * Flush any pending history updates to durable storage.
144
+ * Should be called at turn boundaries (after streaming completes, on cancel, on error).
145
+ * This ensures all message updates are persisted before returning control to the caller.
195
146
  */
196
- getMaxInputTokens() {
197
- return this.maxInputTokens;
147
+ async flush() {
148
+ await this.historyProvider.flush();
198
149
  }
199
150
  /**
200
- * Updates the ContextManager configuration when LLM config changes.
201
- * This is called when DextoAgent.switchLLM() updates the LLM configuration.
151
+ * Clears the context window without deleting history.
202
152
  *
203
- * @param newMaxInputTokens New maximum token limit
204
- * @param newTokenizer Optional new tokenizer if provider changed
205
- * @param newFormatter Optional new formatter if provider/router changed
153
+ * This adds a "context clear" marker to the conversation history. When the
154
+ * context is loaded for LLM via getFormattedMessagesWithCompression(),
155
+ * filterCompacted() excludes all messages before this marker.
156
+ *
157
+ * The full history remains in the database for review via /resume or session history.
206
158
  */
207
- updateConfig(newMaxInputTokens, newTokenizer, newFormatter) {
208
- const oldMaxInputTokens = this.maxInputTokens;
209
- this.maxInputTokens = newMaxInputTokens;
210
- if (newTokenizer) {
211
- this.tokenizer = newTokenizer;
212
- }
213
- if (newFormatter) {
214
- this.formatter = newFormatter;
215
- }
216
- this.logger.debug(
217
- `ContextManager config updated: maxInputTokens ${oldMaxInputTokens} -> ${newMaxInputTokens}`
218
- );
159
+ async clearContext() {
160
+ const clearMarker = {
161
+ id: `clear-${Date.now()}`,
162
+ role: "assistant",
163
+ content: [{ type: "text", text: "[Context cleared]" }],
164
+ timestamp: Date.now(),
165
+ metadata: {
166
+ isSummary: true,
167
+ clearedAt: Date.now()
168
+ }
169
+ };
170
+ await this.addMessage(clearMarker);
171
+ this.logger.debug(`Context cleared for session: ${this.sessionId}`);
219
172
  }
220
173
  /**
221
- * Updates the actual token count from the last LLM response.
222
- * This enables hybrid token counting for more accurate estimates.
223
- *
224
- * @param actualTokens The actual token count reported by the LLM provider
174
+ * Appends text to an existing assistant message.
175
+ * Used for streaming responses.
225
176
  */
226
- updateActualTokenCount(actualTokens) {
227
- this.lastActualTokenCount = actualTokens;
228
- this.logger.debug(`Updated actual token count to: ${actualTokens}`);
177
+ async appendAssistantText(messageId, text) {
178
+ const history = await this.historyProvider.getHistory();
179
+ const messageIndex = history.findIndex((m) => m.id === messageId);
180
+ if (messageIndex === -1) {
181
+ throw ContextError.messageNotFound(messageId);
182
+ }
183
+ const message = history[messageIndex];
184
+ if (!message) {
185
+ throw ContextError.messageNotFound(messageId);
186
+ }
187
+ if (message.role !== "assistant") {
188
+ throw ContextError.messageNotAssistant(messageId);
189
+ }
190
+ if (message.content === null) {
191
+ message.content = [{ type: "text", text }];
192
+ } else if (Array.isArray(message.content)) {
193
+ const lastPart = message.content[message.content.length - 1];
194
+ if (lastPart && lastPart.type === "text") {
195
+ lastPart.text += text;
196
+ } else {
197
+ message.content.push({ type: "text", text });
198
+ }
199
+ }
200
+ await this.historyProvider.updateMessage(message);
229
201
  }
230
202
  /**
231
- * Estimates if new input would trigger compression using hybrid approach.
232
- * Combines actual tokens from last response with estimated tokens for new input.
233
- *
234
- * @param newInputTokens Estimated tokens for the new user input
235
- * @returns True if compression should be triggered
203
+ * Adds a tool call to an existing assistant message.
204
+ * Used for streaming responses.
236
205
  */
237
- shouldCompress(newInputTokens) {
238
- const estimatedTotal = this.lastActualTokenCount + newInputTokens;
239
- const compressionTrigger = this.maxInputTokens * this.compressionThreshold;
240
- this.logger.debug(
241
- `Compression check: actual=${this.lastActualTokenCount}, newInput=${newInputTokens}, total=${estimatedTotal}, trigger=${compressionTrigger}`
242
- );
243
- return estimatedTotal > compressionTrigger;
206
+ async addToolCall(messageId, toolCall) {
207
+ const history = await this.historyProvider.getHistory();
208
+ const messageIndex = history.findIndex((m) => m.id === messageId);
209
+ if (messageIndex === -1) {
210
+ throw ContextError.messageNotFound(messageId);
211
+ }
212
+ const message = history[messageIndex];
213
+ if (!message) {
214
+ throw ContextError.messageNotFound(messageId);
215
+ }
216
+ if (message.role !== "assistant") {
217
+ throw ContextError.messageNotAssistant(messageId);
218
+ }
219
+ if (!message.toolCalls) {
220
+ message.toolCalls = [];
221
+ }
222
+ message.toolCalls.push(toolCall);
223
+ await this.historyProvider.updateMessage(message);
244
224
  }
245
225
  /**
246
- * Assembles and returns the current system prompt by invoking the SystemPromptManager.
226
+ * Updates an existing assistant message with new properties.
227
+ * Used for finalizing streaming responses (e.g. adding token usage).
247
228
  */
248
- async getSystemPrompt(context) {
249
- const prompt = await this.systemPromptManager.build(context);
250
- this.logger.debug(`[SystemPrompt] Built system prompt:
251
- ${prompt}`);
252
- return prompt;
229
+ async updateAssistantMessage(messageId, updates) {
230
+ const history = await this.historyProvider.getHistory();
231
+ const messageIndex = history.findIndex((m) => m.id === messageId);
232
+ if (messageIndex === -1) {
233
+ throw ContextError.messageNotFound(messageId);
234
+ }
235
+ const message = history[messageIndex];
236
+ if (!message) {
237
+ throw ContextError.messageNotFound(messageId);
238
+ }
239
+ if (message.role !== "assistant") {
240
+ throw ContextError.messageNotAssistant(messageId);
241
+ }
242
+ Object.assign(message, updates);
243
+ await this.historyProvider.updateMessage(message);
253
244
  }
254
245
  /**
255
- * Gets the raw conversation history
256
- * Returns a defensive copy to prevent modification
246
+ * Marks tool messages as compacted (pruned).
247
+ * Sets the compactedAt timestamp - content transformation happens at format time
248
+ * in getFormattedMessagesWithCompression(). Original content is preserved in
249
+ * storage for debugging/audit.
257
250
  *
258
- * @returns Promise that resolves to a read-only copy of the conversation history
251
+ * Used by TurnExecutor's pruneOldToolOutputs() to reclaim token space
252
+ * by marking old tool outputs that are no longer needed for context.
253
+ *
254
+ * @param messageIds Array of message IDs to mark as compacted
255
+ * @returns Number of messages successfully marked
259
256
  */
260
- async getHistory() {
257
+ async markMessagesAsCompacted(messageIds) {
258
+ if (messageIds.length === 0) {
259
+ return 0;
260
+ }
261
261
  const history = await this.historyProvider.getHistory();
262
- return [...history];
262
+ const timestamp = Date.now();
263
+ let markedCount = 0;
264
+ for (const messageId of messageIds) {
265
+ const message = history.find((m) => m.id === messageId);
266
+ if (!message) {
267
+ this.logger.warn(`markMessagesAsCompacted: Message ${messageId} not found`);
268
+ continue;
269
+ }
270
+ if (message.role !== "tool") {
271
+ this.logger.warn(
272
+ `markMessagesAsCompacted: Message ${messageId} is not a tool message (role=${message.role})`
273
+ );
274
+ continue;
275
+ }
276
+ if (message.compactedAt) {
277
+ continue;
278
+ }
279
+ message.compactedAt = timestamp;
280
+ await this.historyProvider.updateMessage(message);
281
+ markedCount++;
282
+ }
283
+ if (markedCount > 0) {
284
+ this.logger.debug(
285
+ `markMessagesAsCompacted: Marked ${markedCount} messages as compacted`
286
+ );
287
+ }
288
+ return markedCount;
263
289
  }
264
290
  /**
265
291
  * Adds a message to the conversation history.
@@ -272,10 +298,7 @@ ${prompt}`);
272
298
  async addMessage(message) {
273
299
  switch (message.role) {
274
300
  case "user":
275
- if (
276
- // Allow array content for user messages
277
- !(Array.isArray(message.content) && message.content.length > 0) && (typeof message.content !== "string" || message.content.trim() === "")
278
- ) {
301
+ if (!Array.isArray(message.content) || message.content.length === 0) {
279
302
  throw ContextError.userMessageContentInvalid();
280
303
  }
281
304
  break;
@@ -291,7 +314,6 @@ ${prompt}`);
291
314
  }
292
315
  }
293
316
  message.provider = this.llmConfig.provider;
294
- message.router = this.llmConfig.router;
295
317
  message.model = this.llmConfig.model;
296
318
  break;
297
319
  case "tool":
@@ -299,14 +321,16 @@ ${prompt}`);
299
321
  throw ContextError.toolMessageFieldsMissing();
300
322
  }
301
323
  break;
302
- case "system":
324
+ case "system": {
303
325
  this.logger.warn(
304
- "ContextManager: Adding system message directly to history. Use setSystemPrompt instead."
326
+ "ContextManager: Adding system message directly to history. Use SystemPromptManager instead."
305
327
  );
306
- if (typeof message.content !== "string" || message.content.trim() === "") {
328
+ const textContent = message.content?.filter((p) => p.type === "text").map((p) => p.text).join("");
329
+ if (!textContent || textContent.trim() === "") {
307
330
  throw ContextError.systemMessageContentInvalid();
308
331
  }
309
332
  break;
333
+ }
310
334
  }
311
335
  if (!message.id) {
312
336
  message.id = randomUUID();
@@ -322,57 +346,64 @@ ${prompt}`);
322
346
  this.logger.debug(`ContextManager: History now contains ${history.length} messages`);
323
347
  }
324
348
  /**
325
- * Adds a user message to the conversation
326
- * Can include image data for multimodal input
349
+ * Adds a user message to the conversation.
350
+ * Supports multiple images and files via ContentPart[].
327
351
  *
328
- * @param textContent The user message content
329
- * @param imageData Optional image data for multimodal input
330
- * @param fileData Optional file data for file input
331
- * @throws Error if content is empty or not a string
352
+ * @param content Array of content parts (text, images, files)
353
+ * @throws Error if content is empty or invalid
332
354
  */
333
- async addUserMessage(textContent, imageData, fileData) {
334
- if (typeof textContent !== "string" || textContent.trim() === "" && !imageData && !fileData) {
355
+ async addUserMessage(content) {
356
+ if (!Array.isArray(content) || content.length === 0) {
335
357
  throw ContextError.userMessageContentEmpty();
336
358
  }
337
- const finalTextContent = textContent.trim() || (imageData || fileData ? "" : textContent);
338
- const messageParts = [];
339
- if (finalTextContent) {
340
- messageParts.push({ type: "text", text: finalTextContent });
341
- }
342
- if (imageData) {
343
- const processedImage = await this.processUserInput(imageData.image, {
344
- mimeType: imageData.mimeType || "image/jpeg",
345
- source: "user"
346
- });
347
- messageParts.push({
348
- type: "image",
349
- image: processedImage,
350
- mimeType: imageData.mimeType || "image/jpeg"
351
- });
359
+ const hasText = content.some((p) => p.type === "text" && p.text.trim() !== "");
360
+ const hasAttachment = content.some((p) => p.type === "image" || p.type === "file");
361
+ if (!hasText && !hasAttachment) {
362
+ throw ContextError.userMessageContentEmpty();
352
363
  }
353
- if (fileData) {
354
- const metadata = {
355
- mimeType: fileData.mimeType,
356
- source: "user"
357
- };
358
- if (fileData.filename) {
359
- metadata.originalName = fileData.filename;
364
+ const processedParts = [];
365
+ for (const part of content) {
366
+ if (part.type === "text") {
367
+ if (part.text.trim()) {
368
+ processedParts.push({ type: "text", text: part.text });
369
+ }
370
+ } else if (part.type === "image") {
371
+ const processedImage = await this.processUserInput(part.image, {
372
+ mimeType: part.mimeType || "image/jpeg",
373
+ source: "user"
374
+ });
375
+ processedParts.push({
376
+ type: "image",
377
+ image: processedImage,
378
+ mimeType: part.mimeType || "image/jpeg"
379
+ });
380
+ } else if (part.type === "file") {
381
+ const metadata = {
382
+ mimeType: part.mimeType,
383
+ source: "user"
384
+ };
385
+ if (part.filename) {
386
+ metadata.originalName = part.filename;
387
+ }
388
+ const processedData = await this.processUserInput(part.data, metadata);
389
+ processedParts.push({
390
+ type: "file",
391
+ data: processedData,
392
+ mimeType: part.mimeType,
393
+ ...part.filename && { filename: part.filename }
394
+ });
360
395
  }
361
- const processedData = await this.processUserInput(fileData.data, metadata);
362
- messageParts.push({
363
- type: "file",
364
- data: processedData,
365
- mimeType: fileData.mimeType,
366
- ...fileData.filename && { filename: fileData.filename }
367
- });
368
- }
369
- if (messageParts.length === 0) {
370
- messageParts.push({ type: "text", text: finalTextContent });
371
396
  }
372
- this.logger.debug(
373
- `ContextManager: Adding user message: ${JSON.stringify(messageParts, null, 2)}`
374
- );
375
- await this.addMessage({ role: "user", content: messageParts });
397
+ const textParts = processedParts.filter((p) => p.type === "text");
398
+ const imageParts = processedParts.filter((p) => p.type === "image");
399
+ const fileParts = processedParts.filter((p) => p.type === "file");
400
+ this.logger.info("User message received", {
401
+ textParts: textParts.length,
402
+ imageParts: imageParts.length,
403
+ fileParts: fileParts.length,
404
+ totalParts: processedParts.length
405
+ });
406
+ await this.addMessage({ role: "user", content: processedParts });
376
407
  }
377
408
  /**
378
409
  * Adds an assistant message to the conversation
@@ -387,54 +418,50 @@ ${prompt}`);
387
418
  if (content === null && (!toolCalls || toolCalls.length === 0)) {
388
419
  throw ContextError.assistantMessageContentOrToolsRequired();
389
420
  }
421
+ const contentArray = content !== null ? [{ type: "text", text: content }] : null;
390
422
  await this.addMessage({
391
423
  role: "assistant",
392
- content,
424
+ content: contentArray,
393
425
  ...toolCalls && toolCalls.length > 0 && { toolCalls },
394
426
  ...metadata?.tokenUsage && { tokenUsage: metadata.tokenUsage },
395
427
  ...metadata?.reasoning && { reasoning: metadata.reasoning }
396
428
  });
397
429
  }
398
430
  /**
399
- * Adds a tool result message to the conversation
431
+ * Adds a tool result message to the conversation.
432
+ * The result must already be sanitized - this method only persists it.
433
+ *
434
+ * Success status is read from sanitizedResult.meta.success (single source of truth).
400
435
  *
401
436
  * @param toolCallId ID of the tool call this result is responding to
402
437
  * @param name Name of the tool that executed
403
- * @param result The result returned by the tool
438
+ * @param sanitizedResult The already-sanitized result to store (includes success in meta)
439
+ * @param metadata Optional approval-related metadata
404
440
  * @throws Error if required parameters are missing
405
441
  */
406
- async addToolResult(toolCallId, name, result, options) {
442
+ async addToolResult(toolCallId, name, sanitizedResult, metadata) {
407
443
  if (!toolCallId || !name) {
408
444
  throw ContextError.toolCallIdNameRequired();
409
445
  }
410
- const blobService = this.resourceManager.getBlobStore();
411
- const sanitizeOptions = {
412
- blobStore: blobService,
413
- toolName: name,
414
- toolCallId
415
- };
416
- if (options?.success !== void 0) {
417
- sanitizeOptions.success = options.success;
418
- }
419
- const sanitized = await sanitizeToolResult(result, sanitizeOptions, this.logger);
420
- const summary = sanitized.content.map(
421
- (p) => p.type === "text" ? `text(${p.text.length})` : p.type === "image" ? `image(${p.mimeType || "image"})` : `file(${p.mimeType || "file"})`
446
+ const summary = sanitizedResult.content.map(
447
+ (p) => p.type === "text" ? `text(${p.text.length})` : p.type === "image" ? `image(${p.mimeType || "image"})` : p.type === "ui-resource" ? `ui-resource(${p.uri})` : `file(${p.mimeType || "file"})`
422
448
  ).join(", ");
423
449
  this.logger.debug(`ContextManager: Storing tool result (parts) for ${name}: [${summary}]`);
424
450
  await this.addMessage({
425
451
  role: "tool",
426
- content: sanitized.content,
452
+ content: sanitizedResult.content,
427
453
  toolCallId,
428
- name
454
+ name,
455
+ // Success status comes from sanitizedResult.meta (single source of truth)
456
+ success: sanitizedResult.meta.success,
457
+ // Persist approval metadata for frontend display after reload
458
+ ...metadata?.requireApproval !== void 0 && {
459
+ requireApproval: metadata.requireApproval
460
+ },
461
+ ...metadata?.approvalStatus !== void 0 && {
462
+ approvalStatus: metadata.approvalStatus
463
+ }
429
464
  });
430
- return sanitized;
431
- }
432
- /**
433
- * Sets the system prompt for the conversation
434
- *
435
- * @param prompt The system prompt text
436
- */
437
- setSystemPrompt(_prompt) {
438
465
  }
439
466
  /**
440
467
  * Gets the conversation history formatted for the target LLM provider.
@@ -478,13 +505,28 @@ ${prompt}`);
478
505
  this.logger.debug("Resolving blob references in message history before formatting");
479
506
  messageHistory = await Promise.all(
480
507
  messageHistory.map(async (message) => {
481
- const expandedContent = await expandBlobReferences(
482
- message.content,
483
- this.resourceManager,
484
- this.logger,
485
- allowedMediaTypes
486
- );
487
- return { ...message, content: expandedContent };
508
+ if (isSystemMessage(message) || isAssistantMessage(message)) {
509
+ return message;
510
+ }
511
+ if (isUserMessage(message)) {
512
+ const expandedContent = await expandBlobReferences(
513
+ message.content,
514
+ this.resourceManager,
515
+ this.logger,
516
+ allowedMediaTypes
517
+ );
518
+ return { ...message, content: expandedContent };
519
+ }
520
+ if (isToolMessage(message)) {
521
+ const expandedContent = await expandBlobReferences(
522
+ message.content,
523
+ this.resourceManager,
524
+ this.logger,
525
+ allowedMediaTypes
526
+ );
527
+ return { ...message, content: expandedContent };
528
+ }
529
+ return message;
488
530
  })
489
531
  );
490
532
  const prompt = systemPrompt ?? await this.getSystemPrompt(contributorContext);
@@ -493,7 +535,7 @@ ${prompt}`);
493
535
  /**
494
536
  * Gets the conversation ready for LLM consumption with proper flow:
495
537
  * 1. Get system prompt
496
- * 2. Get history and compress if needed
538
+ * 2. Get history and filter (exclude pre-summary messages)
497
539
  * 3. Format messages
498
540
  * This method implements the correct ordering to avoid circular dependencies.
499
541
  *
@@ -503,25 +545,39 @@ ${prompt}`);
503
545
  */
504
546
  async getFormattedMessagesWithCompression(contributorContext, llmContext) {
505
547
  const systemPrompt = await this.getSystemPrompt(contributorContext);
506
- const systemPromptTokens = this.tokenizer.countTokens(systemPrompt);
507
- let history = await this.historyProvider.getHistory();
508
- history = await this.compressHistoryIfNeeded(history, systemPromptTokens);
548
+ const fullHistory = await this.historyProvider.getHistory();
549
+ let history = filterCompacted(fullHistory);
550
+ if (history.length < fullHistory.length) {
551
+ this.logger.debug(
552
+ `filterCompacted: Reduced history from ${fullHistory.length} to ${history.length} messages (summary present)`
553
+ );
554
+ }
555
+ const compactedCount = history.filter((m) => m.role === "tool" && m.compactedAt).length;
556
+ if (compactedCount > 0) {
557
+ history = history.map((msg) => {
558
+ if (msg.role === "tool" && msg.compactedAt) {
559
+ return {
560
+ ...msg,
561
+ content: [
562
+ { type: "text", text: "[Old tool result content cleared]" }
563
+ ]
564
+ };
565
+ }
566
+ return msg;
567
+ });
568
+ this.logger.debug(
569
+ `Transformed ${compactedCount} compacted tool messages to placeholders`
570
+ );
571
+ }
509
572
  const formattedMessages = await this.getFormattedMessages(
510
573
  contributorContext,
511
574
  llmContext,
512
575
  systemPrompt,
513
576
  history
514
577
  );
515
- const historyTokens = countMessagesTokens(history, this.tokenizer, void 0, this.logger);
516
- const formattingOverhead = Math.ceil((systemPromptTokens + historyTokens) * 0.05);
517
- const tokensUsed = systemPromptTokens + historyTokens + formattingOverhead;
518
- this.logger.debug(
519
- `Final token breakdown - System: ${systemPromptTokens}, History: ${historyTokens}, Overhead: ${formattingOverhead}, Total: ${tokensUsed}`
520
- );
521
578
  return {
522
579
  formattedMessages,
523
- systemPrompt,
524
- tokensUsed
580
+ systemPrompt
525
581
  };
526
582
  }
527
583
  /**
@@ -531,9 +587,8 @@ ${prompt}`);
531
587
  * @returns Formatted system prompt or null/undefined based on formatter implementation
532
588
  * @throws Error if formatting fails
533
589
  */
534
- async getFormattedSystemPrompt(context) {
535
- const systemPrompt = await this.getSystemPrompt(context);
536
- return this.formatter.formatSystemPrompt?.(systemPrompt);
590
+ async getFormattedSystemPrompt(_context) {
591
+ return this.formatter.formatSystemPrompt?.();
537
592
  }
538
593
  /**
539
594
  * Resets the conversation history
@@ -545,109 +600,6 @@ ${prompt}`);
545
600
  `ContextManager: Conversation history cleared for session ${this.sessionId}`
546
601
  );
547
602
  }
548
- /**
549
- * Checks if history compression is needed based on token count and applies strategies.
550
- *
551
- * @param history The conversation history to potentially compress
552
- * @param systemPromptTokens The actual token count of the system prompt
553
- * @returns The potentially compressed history
554
- */
555
- async compressHistoryIfNeeded(history, systemPromptTokens) {
556
- let currentTotalTokens = countMessagesTokens(
557
- history,
558
- this.tokenizer,
559
- void 0,
560
- this.logger
561
- );
562
- currentTotalTokens += systemPromptTokens;
563
- this.logger.debug(`ContextManager: Checking if history compression is needed.`);
564
- this.logger.debug(
565
- `History tokens: ${countMessagesTokens(history, this.tokenizer, void 0, this.logger)}, System prompt tokens: ${systemPromptTokens}, Total: ${currentTotalTokens}`
566
- );
567
- if (currentTotalTokens <= this.maxInputTokens) {
568
- this.logger.debug(
569
- `ContextManager: History compression not needed. Total token count: ${currentTotalTokens}, Max tokens: ${this.maxInputTokens}`
570
- );
571
- return history;
572
- }
573
- this.logger.info(
574
- `ContextManager: History exceeds token limit (${currentTotalTokens} > ${this.maxInputTokens}). Applying compression strategies sequentially.`
575
- );
576
- const initialLength = history.length;
577
- let workingHistory = [...history];
578
- const targetHistoryTokens = this.maxInputTokens - systemPromptTokens;
579
- for (const strategy of this.compressionStrategies) {
580
- const strategyName = strategy.constructor.name;
581
- this.logger.debug(`ContextManager: Applying ${strategyName}...`);
582
- try {
583
- workingHistory = strategy.compress(
584
- [...workingHistory],
585
- this.tokenizer,
586
- targetHistoryTokens
587
- // Use target tokens that account for system prompt
588
- );
589
- } catch (error) {
590
- this.logger.error(
591
- `ContextManager: Error applying ${strategyName}: ${error instanceof Error ? error.message : String(error)}`,
592
- { error }
593
- );
594
- break;
595
- }
596
- const historyTokens = countMessagesTokens(
597
- workingHistory,
598
- this.tokenizer,
599
- void 0,
600
- this.logger
601
- );
602
- currentTotalTokens = historyTokens + systemPromptTokens;
603
- const messagesRemoved = initialLength - workingHistory.length;
604
- if (currentTotalTokens <= this.maxInputTokens) {
605
- this.logger.debug(
606
- `ContextManager: Compression successful after ${strategyName}. New total count: ${currentTotalTokens}, messages removed: ${messagesRemoved}`
607
- );
608
- break;
609
- }
610
- }
611
- return workingHistory;
612
- }
613
- /**
614
- * Parses a raw LLM stream response, converts it into internal messages and adds them to the history.
615
- *
616
- * @param response The stream response from the LLM provider
617
- */
618
- async processLLMStreamResponse(response) {
619
- if (this.formatter.parseStreamResponse) {
620
- const msgs = await this.formatter.parseStreamResponse(response) ?? [];
621
- for (const msg of msgs) {
622
- try {
623
- await this.addMessage(msg);
624
- } catch (error) {
625
- this.logger.error(
626
- `ContextManager: Failed to process LLM stream response message for session ${this.sessionId}: ${error instanceof Error ? error.message : String(error)}`
627
- );
628
- }
629
- }
630
- } else {
631
- await this.processLLMResponse(response);
632
- }
633
- }
634
- /**
635
- * Parses a raw LLM response, converts it into internal messages and adds them to the history.
636
- *
637
- * @param response The response from the LLM provider
638
- */
639
- async processLLMResponse(response) {
640
- const msgs = this.formatter.parseResponse(response) ?? [];
641
- for (const msg of msgs) {
642
- try {
643
- await this.addMessage(msg);
644
- } catch (error) {
645
- this.logger.error(
646
- `ContextManager: Failed to process LLM response message for session ${this.sessionId}: ${error instanceof Error ? error.message : String(error)}`
647
- );
648
- }
649
- }
650
- }
651
603
  }
652
604
  export {
653
605
  ContextManager