@dexto/core 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/README.md +17 -9
  2. package/dist/agent/DextoAgent.cjs +548 -207
  3. package/dist/agent/DextoAgent.d.ts +156 -33
  4. package/dist/agent/DextoAgent.d.ts.map +1 -1
  5. package/dist/agent/DextoAgent.js +545 -204
  6. package/dist/agent/agentCard.js +1 -1
  7. package/dist/agent/error-codes.cjs +1 -0
  8. package/dist/agent/error-codes.d.ts +2 -1
  9. package/dist/agent/error-codes.d.ts.map +1 -1
  10. package/dist/agent/error-codes.js +2 -1
  11. package/dist/agent/errors.cjs +13 -0
  12. package/dist/agent/errors.d.ts +4 -0
  13. package/dist/agent/errors.d.ts.map +1 -1
  14. package/dist/agent/errors.js +14 -1
  15. package/dist/agent/index.d.ts +1 -1
  16. package/dist/agent/index.d.ts.map +1 -1
  17. package/dist/agent/index.js +1 -1
  18. package/dist/agent/schemas.cjs +3 -0
  19. package/dist/agent/schemas.d.ts +92 -55
  20. package/dist/agent/schemas.d.ts.map +1 -1
  21. package/dist/agent/schemas.js +6 -2
  22. package/dist/agent/state-manager.cjs +5 -5
  23. package/dist/agent/state-manager.d.ts +4 -4
  24. package/dist/agent/state-manager.js +6 -6
  25. package/dist/agent/types.d.ts +24 -10
  26. package/dist/agent/types.d.ts.map +1 -1
  27. package/dist/approval/error-codes.js +1 -1
  28. package/dist/approval/errors.js +1 -1
  29. package/dist/approval/factory.js +1 -1
  30. package/dist/approval/index.js +1 -1
  31. package/dist/approval/manager.cjs +69 -3
  32. package/dist/approval/manager.d.ts +41 -3
  33. package/dist/approval/manager.d.ts.map +1 -1
  34. package/dist/approval/manager.js +70 -4
  35. package/dist/approval/schemas.cjs +18 -4
  36. package/dist/approval/schemas.d.ts +106 -32
  37. package/dist/approval/schemas.d.ts.map +1 -1
  38. package/dist/approval/schemas.js +19 -5
  39. package/dist/approval/types.d.ts +6 -0
  40. package/dist/approval/types.d.ts.map +1 -1
  41. package/dist/approval/types.js +1 -1
  42. package/dist/{chunk-C6A6W6XS.js → chunk-PTJYTZNU.js} +44 -1
  43. package/dist/{llm/tokenizer/default.cjs → context/compression/overflow.cjs} +20 -18
  44. package/dist/context/compression/overflow.d.ts +33 -0
  45. package/dist/context/compression/overflow.d.ts.map +1 -0
  46. package/dist/context/compression/overflow.js +19 -0
  47. package/dist/context/compression/reactive-overflow.cjs +201 -0
  48. package/dist/context/compression/reactive-overflow.d.ts +81 -0
  49. package/dist/context/compression/reactive-overflow.d.ts.map +1 -0
  50. package/dist/context/compression/reactive-overflow.js +178 -0
  51. package/dist/context/compression/types.d.ts +9 -7
  52. package/dist/context/compression/types.d.ts.map +1 -1
  53. package/dist/context/error-codes.cjs +3 -0
  54. package/dist/context/error-codes.d.ts +4 -1
  55. package/dist/context/error-codes.d.ts.map +1 -1
  56. package/dist/context/error-codes.js +4 -1
  57. package/dist/context/errors.cjs +28 -0
  58. package/dist/context/errors.d.ts +7 -0
  59. package/dist/context/errors.d.ts.map +1 -1
  60. package/dist/context/errors.js +29 -1
  61. package/dist/context/index.js +1 -1
  62. package/dist/context/manager.cjs +280 -323
  63. package/dist/context/manager.d.ts +65 -111
  64. package/dist/context/manager.d.ts.map +1 -1
  65. package/dist/context/manager.js +280 -328
  66. package/dist/context/media-helpers.js +1 -1
  67. package/dist/context/types.cjs +49 -0
  68. package/dist/context/types.d.ts +181 -72
  69. package/dist/context/types.d.ts.map +1 -1
  70. package/dist/context/types.js +35 -0
  71. package/dist/context/utils.cjs +266 -283
  72. package/dist/context/utils.d.ts +32 -18
  73. package/dist/context/utils.d.ts.map +1 -1
  74. package/dist/context/utils.js +266 -283
  75. package/dist/errors/DextoBaseError.js +1 -1
  76. package/dist/errors/DextoRuntimeError.js +1 -1
  77. package/dist/errors/DextoValidationError.js +1 -1
  78. package/dist/errors/index.js +1 -1
  79. package/dist/errors/result-bridge.js +1 -1
  80. package/dist/errors/types.js +1 -1
  81. package/dist/events/index.cjs +18 -1
  82. package/dist/events/index.d.ts +149 -12
  83. package/dist/events/index.d.ts.map +1 -1
  84. package/dist/events/index.js +19 -2
  85. package/dist/filesystem/error-codes.js +1 -1
  86. package/dist/filesystem/errors.js +1 -1
  87. package/dist/filesystem/filesystem-service.js +1 -1
  88. package/dist/filesystem/index.js +1 -1
  89. package/dist/filesystem/path-validator.js +1 -1
  90. package/dist/index.browser.cjs +23 -8
  91. package/dist/index.browser.d.ts +4 -3
  92. package/dist/index.browser.d.ts.map +1 -1
  93. package/dist/index.browser.js +20 -3
  94. package/dist/index.js +1 -1
  95. package/dist/llm/error-codes.cjs +0 -1
  96. package/dist/llm/error-codes.d.ts +0 -1
  97. package/dist/llm/error-codes.d.ts.map +1 -1
  98. package/dist/llm/error-codes.js +1 -2
  99. package/dist/llm/errors.cjs +10 -10
  100. package/dist/llm/errors.d.ts +5 -6
  101. package/dist/llm/errors.d.ts.map +1 -1
  102. package/dist/llm/errors.js +12 -12
  103. package/dist/llm/executor/stream-processor.cjs +367 -0
  104. package/dist/llm/executor/stream-processor.d.ts +55 -0
  105. package/dist/llm/executor/stream-processor.d.ts.map +1 -0
  106. package/dist/llm/executor/stream-processor.js +344 -0
  107. package/dist/llm/executor/tool-output-truncator.cjs +75 -0
  108. package/dist/llm/executor/tool-output-truncator.d.ts +27 -0
  109. package/dist/llm/executor/tool-output-truncator.d.ts.map +1 -0
  110. package/dist/llm/executor/tool-output-truncator.js +48 -0
  111. package/dist/llm/executor/turn-executor.cjs +753 -0
  112. package/dist/llm/executor/turn-executor.d.ts +166 -0
  113. package/dist/llm/executor/turn-executor.d.ts.map +1 -0
  114. package/dist/llm/executor/turn-executor.js +684 -0
  115. package/dist/llm/executor/types.d.ts +27 -0
  116. package/dist/llm/executor/types.d.ts.map +1 -0
  117. package/dist/llm/formatters/vercel.cjs +20 -186
  118. package/dist/llm/formatters/vercel.d.ts +2 -14
  119. package/dist/llm/formatters/vercel.d.ts.map +1 -1
  120. package/dist/llm/formatters/vercel.js +19 -185
  121. package/dist/llm/registry.cjs +36 -45
  122. package/dist/llm/registry.d.ts +53 -39
  123. package/dist/llm/registry.d.ts.map +1 -1
  124. package/dist/llm/registry.js +34 -42
  125. package/dist/llm/resolver.cjs +1 -31
  126. package/dist/llm/resolver.d.ts.map +1 -1
  127. package/dist/llm/resolver.js +2 -34
  128. package/dist/llm/schemas.cjs +2 -17
  129. package/dist/llm/schemas.d.ts +10 -23
  130. package/dist/llm/schemas.d.ts.map +1 -1
  131. package/dist/llm/schemas.js +5 -22
  132. package/dist/llm/services/factory.cjs +3 -92
  133. package/dist/llm/services/factory.d.ts +14 -4
  134. package/dist/llm/services/factory.d.ts.map +1 -1
  135. package/dist/llm/services/factory.js +4 -83
  136. package/dist/llm/services/test-utils.integration.cjs +6 -8
  137. package/dist/llm/services/test-utils.integration.d.ts.map +1 -1
  138. package/dist/llm/services/test-utils.integration.js +7 -9
  139. package/dist/llm/services/types.d.ts +1 -28
  140. package/dist/llm/services/types.d.ts.map +1 -1
  141. package/dist/llm/services/vercel.cjs +54 -468
  142. package/dist/llm/services/vercel.d.ts +38 -21
  143. package/dist/llm/services/vercel.d.ts.map +1 -1
  144. package/dist/llm/services/vercel.js +56 -475
  145. package/dist/llm/types.cjs +0 -3
  146. package/dist/llm/types.d.ts +8 -8
  147. package/dist/llm/types.d.ts.map +1 -1
  148. package/dist/llm/types.js +1 -3
  149. package/dist/llm/validation.js +1 -1
  150. package/dist/logger/browser.js +1 -1
  151. package/dist/logger/factory.js +1 -1
  152. package/dist/logger/index.js +1 -1
  153. package/dist/logger/logger.js +1 -1
  154. package/dist/logger/v2/dexto-logger.cjs +34 -6
  155. package/dist/logger/v2/dexto-logger.d.ts +20 -2
  156. package/dist/logger/v2/dexto-logger.d.ts.map +1 -1
  157. package/dist/logger/v2/dexto-logger.js +35 -7
  158. package/dist/logger/v2/error-codes.js +1 -1
  159. package/dist/logger/v2/errors.js +1 -1
  160. package/dist/logger/v2/schemas.js +1 -1
  161. package/dist/logger/v2/test-utils.cjs +70 -0
  162. package/dist/logger/v2/test-utils.d.ts +17 -0
  163. package/dist/logger/v2/test-utils.d.ts.map +1 -0
  164. package/dist/logger/v2/test-utils.js +46 -0
  165. package/dist/logger/v2/transport-factory.js +1 -1
  166. package/dist/logger/v2/transports/console-transport.js +1 -1
  167. package/dist/logger/v2/transports/file-transport.cjs +6 -0
  168. package/dist/logger/v2/transports/file-transport.d.ts +4 -0
  169. package/dist/logger/v2/transports/file-transport.d.ts.map +1 -1
  170. package/dist/logger/v2/transports/file-transport.js +7 -1
  171. package/dist/logger/v2/types.cjs +1 -0
  172. package/dist/logger/v2/types.d.ts +18 -2
  173. package/dist/logger/v2/types.d.ts.map +1 -1
  174. package/dist/logger/v2/types.js +2 -1
  175. package/dist/mcp/error-codes.cjs +1 -0
  176. package/dist/mcp/error-codes.d.ts +1 -0
  177. package/dist/mcp/error-codes.d.ts.map +1 -1
  178. package/dist/mcp/error-codes.js +2 -1
  179. package/dist/mcp/errors.cjs +13 -0
  180. package/dist/mcp/errors.d.ts +7 -0
  181. package/dist/mcp/errors.d.ts.map +1 -1
  182. package/dist/mcp/errors.js +14 -1
  183. package/dist/mcp/manager.cjs +4 -0
  184. package/dist/mcp/manager.d.ts.map +1 -1
  185. package/dist/mcp/manager.js +5 -1
  186. package/dist/mcp/mcp-client.js +1 -1
  187. package/dist/mcp/resolver.js +1 -1
  188. package/dist/mcp/schemas.cjs +6 -0
  189. package/dist/mcp/schemas.d.ts +52 -0
  190. package/dist/mcp/schemas.d.ts.map +1 -1
  191. package/dist/mcp/schemas.js +6 -1
  192. package/dist/memory/error-codes.js +1 -1
  193. package/dist/memory/errors.js +1 -1
  194. package/dist/memory/index.js +1 -1
  195. package/dist/memory/manager.js +1 -1
  196. package/dist/memory/schemas.d.ts +2 -2
  197. package/dist/memory/schemas.js +1 -1
  198. package/dist/plugins/builtins/content-policy.js +1 -1
  199. package/dist/plugins/builtins/response-sanitizer.js +1 -1
  200. package/dist/plugins/error-codes.js +1 -1
  201. package/dist/plugins/index.js +1 -1
  202. package/dist/plugins/loader.js +1 -1
  203. package/dist/plugins/manager.js +1 -1
  204. package/dist/plugins/registrations/builtins.js +1 -1
  205. package/dist/plugins/schemas.d.ts +3 -3
  206. package/dist/plugins/schemas.js +1 -1
  207. package/dist/plugins/types.d.ts +0 -1
  208. package/dist/plugins/types.d.ts.map +1 -1
  209. package/dist/process/command-validator.js +1 -1
  210. package/dist/process/error-codes.js +1 -1
  211. package/dist/process/errors.js +1 -1
  212. package/dist/process/index.js +1 -1
  213. package/dist/process/process-service.cjs +78 -26
  214. package/dist/process/process-service.d.ts +6 -1
  215. package/dist/process/process-service.d.ts.map +1 -1
  216. package/dist/process/process-service.js +79 -27
  217. package/dist/process/types.d.ts +2 -2
  218. package/dist/process/types.d.ts.map +1 -1
  219. package/dist/prompts/error-codes.cjs +1 -0
  220. package/dist/prompts/error-codes.d.ts +2 -1
  221. package/dist/prompts/error-codes.d.ts.map +1 -1
  222. package/dist/prompts/error-codes.js +2 -1
  223. package/dist/prompts/errors.cjs +15 -0
  224. package/dist/prompts/errors.d.ts +4 -0
  225. package/dist/prompts/errors.d.ts.map +1 -1
  226. package/dist/prompts/errors.js +16 -1
  227. package/dist/prompts/index.js +1 -1
  228. package/dist/prompts/name-validation.js +1 -1
  229. package/dist/prompts/prompt-manager.cjs +13 -2
  230. package/dist/prompts/prompt-manager.d.ts +7 -0
  231. package/dist/prompts/prompt-manager.d.ts.map +1 -1
  232. package/dist/prompts/prompt-manager.js +14 -3
  233. package/dist/prompts/providers/config-prompt-provider.cjs +12 -3
  234. package/dist/prompts/providers/config-prompt-provider.d.ts +2 -1
  235. package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
  236. package/dist/prompts/providers/config-prompt-provider.js +13 -4
  237. package/dist/prompts/providers/custom-prompt-provider.js +1 -1
  238. package/dist/prompts/providers/mcp-prompt-provider.js +1 -1
  239. package/dist/prompts/schemas.d.ts +12 -0
  240. package/dist/prompts/schemas.d.ts.map +1 -1
  241. package/dist/prompts/schemas.js +1 -1
  242. package/dist/prompts/types.d.ts +2 -0
  243. package/dist/prompts/types.d.ts.map +1 -1
  244. package/dist/prompts/utils.js +1 -1
  245. package/dist/resources/error-codes.js +1 -1
  246. package/dist/resources/errors.js +1 -1
  247. package/dist/resources/handlers/blob-handler.js +1 -1
  248. package/dist/resources/handlers/factory.js +1 -1
  249. package/dist/resources/handlers/filesystem-handler.js +1 -1
  250. package/dist/resources/index.js +1 -1
  251. package/dist/resources/internal-provider.js +1 -1
  252. package/dist/resources/manager.js +1 -1
  253. package/dist/resources/reference-parser.js +1 -1
  254. package/dist/resources/schemas.js +1 -1
  255. package/dist/search/index.js +1 -1
  256. package/dist/search/search-service.js +1 -1
  257. package/dist/session/chat-session.cjs +149 -51
  258. package/dist/session/chat-session.d.ts +69 -29
  259. package/dist/session/chat-session.d.ts.map +1 -1
  260. package/dist/session/chat-session.js +150 -52
  261. package/dist/session/error-codes.js +1 -1
  262. package/dist/session/errors.js +1 -1
  263. package/dist/session/history/database.cjs +134 -21
  264. package/dist/session/history/database.d.ts +37 -8
  265. package/dist/session/history/database.d.ts.map +1 -1
  266. package/dist/session/history/database.js +135 -22
  267. package/dist/session/history/factory.js +1 -1
  268. package/dist/session/history/memory.cjs +18 -0
  269. package/dist/session/history/memory.d.ts +8 -0
  270. package/dist/session/history/memory.d.ts.map +1 -1
  271. package/dist/session/history/memory.js +19 -1
  272. package/dist/session/history/types.d.ts +13 -1
  273. package/dist/session/history/types.d.ts.map +1 -1
  274. package/dist/session/index.cjs +3 -0
  275. package/dist/session/index.d.ts +3 -0
  276. package/dist/session/index.d.ts.map +1 -1
  277. package/dist/session/index.js +3 -1
  278. package/dist/session/message-queue.cjs +201 -0
  279. package/dist/session/message-queue.d.ts +114 -0
  280. package/dist/session/message-queue.d.ts.map +1 -0
  281. package/dist/session/message-queue.js +178 -0
  282. package/dist/session/schemas.js +1 -1
  283. package/dist/session/session-manager.cjs +57 -7
  284. package/dist/session/session-manager.d.ts +18 -0
  285. package/dist/session/session-manager.d.ts.map +1 -1
  286. package/dist/session/session-manager.js +58 -8
  287. package/dist/session/title-generator.cjs +4 -8
  288. package/dist/session/title-generator.d.ts +1 -2
  289. package/dist/session/title-generator.d.ts.map +1 -1
  290. package/dist/session/title-generator.js +5 -9
  291. package/dist/session/types.cjs +16 -0
  292. package/dist/session/types.d.ts +14 -0
  293. package/dist/session/types.d.ts.map +1 -0
  294. package/dist/session/types.js +0 -0
  295. package/dist/storage/blob/factory.js +1 -1
  296. package/dist/storage/blob/local-blob-store.js +1 -1
  297. package/dist/storage/blob/memory-blob-store.js +1 -1
  298. package/dist/storage/blob/schemas.js +1 -1
  299. package/dist/storage/cache/factory.js +1 -1
  300. package/dist/storage/cache/memory-cache-store.js +1 -1
  301. package/dist/storage/cache/redis-store.js +1 -1
  302. package/dist/storage/cache/schemas.js +1 -1
  303. package/dist/storage/database/factory.js +1 -1
  304. package/dist/storage/database/memory-database-store.js +1 -1
  305. package/dist/storage/database/postgres-store.cjs +12 -0
  306. package/dist/storage/database/postgres-store.d.ts.map +1 -1
  307. package/dist/storage/database/postgres-store.js +13 -1
  308. package/dist/storage/database/schemas.js +1 -1
  309. package/dist/storage/database/sqlite-store.js +1 -1
  310. package/dist/storage/error-codes.js +1 -1
  311. package/dist/storage/errors.js +1 -1
  312. package/dist/storage/index.js +1 -1
  313. package/dist/storage/schemas.js +1 -1
  314. package/dist/storage/storage-manager.js +1 -1
  315. package/dist/systemPrompt/contributors.js +1 -1
  316. package/dist/systemPrompt/error-codes.js +1 -1
  317. package/dist/systemPrompt/errors.js +1 -1
  318. package/dist/systemPrompt/in-built-prompts.js +1 -1
  319. package/dist/systemPrompt/index.js +1 -1
  320. package/dist/systemPrompt/manager.js +1 -1
  321. package/dist/systemPrompt/registry.js +1 -1
  322. package/dist/systemPrompt/schemas.d.ts +5 -5
  323. package/dist/systemPrompt/schemas.js +1 -1
  324. package/dist/telemetry/decorators.js +1 -1
  325. package/dist/telemetry/error-codes.js +1 -1
  326. package/dist/telemetry/errors.js +1 -1
  327. package/dist/telemetry/exporters.js +1 -1
  328. package/dist/telemetry/index.js +1 -1
  329. package/dist/telemetry/schemas.js +1 -1
  330. package/dist/telemetry/telemetry.js +1 -1
  331. package/dist/telemetry/utils.js +1 -1
  332. package/dist/tools/bash-pattern-utils.cjs +91 -0
  333. package/dist/tools/bash-pattern-utils.d.ts +58 -0
  334. package/dist/tools/bash-pattern-utils.d.ts.map +1 -0
  335. package/dist/tools/bash-pattern-utils.js +64 -0
  336. package/dist/tools/confirmation/allowed-tools-provider/factory.js +1 -1
  337. package/dist/tools/confirmation/allowed-tools-provider/in-memory.js +1 -1
  338. package/dist/tools/confirmation/allowed-tools-provider/storage.js +1 -1
  339. package/dist/tools/display-types.cjs +60 -0
  340. package/dist/tools/display-types.d.ts +133 -0
  341. package/dist/tools/display-types.d.ts.map +1 -0
  342. package/dist/tools/display-types.js +32 -0
  343. package/dist/tools/error-codes.cjs +2 -0
  344. package/dist/tools/error-codes.d.ts +3 -1
  345. package/dist/tools/error-codes.d.ts.map +1 -1
  346. package/dist/tools/error-codes.js +3 -1
  347. package/dist/tools/errors.cjs +30 -0
  348. package/dist/tools/errors.d.ts +16 -0
  349. package/dist/tools/errors.d.ts.map +1 -1
  350. package/dist/tools/errors.js +31 -1
  351. package/dist/tools/index.cjs +2 -0
  352. package/dist/tools/index.d.ts +1 -0
  353. package/dist/tools/index.d.ts.map +1 -1
  354. package/dist/tools/index.js +2 -1
  355. package/dist/tools/internal-tools/constants.js +1 -1
  356. package/dist/tools/internal-tools/implementations/ask-user-tool.cjs +1 -1
  357. package/dist/tools/internal-tools/implementations/ask-user-tool.js +2 -2
  358. package/dist/tools/internal-tools/implementations/bash-exec-tool.cjs +42 -18
  359. package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts +3 -3
  360. package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts.map +1 -1
  361. package/dist/tools/internal-tools/implementations/bash-exec-tool.js +43 -19
  362. package/dist/tools/internal-tools/implementations/bash-output-tool.js +1 -1
  363. package/dist/tools/internal-tools/implementations/delegate-to-url-tool.js +1 -1
  364. package/dist/tools/internal-tools/implementations/edit-file-tool.cjs +66 -1
  365. package/dist/tools/internal-tools/implementations/edit-file-tool.d.ts.map +1 -1
  366. package/dist/tools/internal-tools/implementations/edit-file-tool.js +67 -2
  367. package/dist/tools/internal-tools/implementations/glob-files-tool.cjs +14 -1
  368. package/dist/tools/internal-tools/implementations/glob-files-tool.d.ts.map +1 -1
  369. package/dist/tools/internal-tools/implementations/glob-files-tool.js +15 -2
  370. package/dist/tools/internal-tools/implementations/grep-content-tool.cjs +16 -1
  371. package/dist/tools/internal-tools/implementations/grep-content-tool.d.ts.map +1 -1
  372. package/dist/tools/internal-tools/implementations/grep-content-tool.js +17 -2
  373. package/dist/tools/internal-tools/implementations/kill-process-tool.js +1 -1
  374. package/dist/tools/internal-tools/implementations/read-file-tool.cjs +9 -1
  375. package/dist/tools/internal-tools/implementations/read-file-tool.d.ts.map +1 -1
  376. package/dist/tools/internal-tools/implementations/read-file-tool.js +10 -2
  377. package/dist/tools/internal-tools/implementations/search-history-tool.js +1 -1
  378. package/dist/tools/internal-tools/implementations/write-file-tool.cjs +69 -1
  379. package/dist/tools/internal-tools/implementations/write-file-tool.d.ts.map +1 -1
  380. package/dist/tools/internal-tools/implementations/write-file-tool.js +72 -2
  381. package/dist/tools/internal-tools/provider.cjs +27 -10
  382. package/dist/tools/internal-tools/provider.d.ts +8 -5
  383. package/dist/tools/internal-tools/provider.d.ts.map +1 -1
  384. package/dist/tools/internal-tools/provider.js +28 -11
  385. package/dist/tools/internal-tools/registry.cjs +4 -3
  386. package/dist/tools/internal-tools/registry.d.ts +28 -7
  387. package/dist/tools/internal-tools/registry.d.ts.map +1 -1
  388. package/dist/tools/internal-tools/registry.js +5 -4
  389. package/dist/tools/schemas.cjs +16 -6
  390. package/dist/tools/schemas.d.ts +31 -4
  391. package/dist/tools/schemas.d.ts.map +1 -1
  392. package/dist/tools/schemas.js +14 -6
  393. package/dist/tools/tool-manager.cjs +140 -18
  394. package/dist/tools/tool-manager.d.ts +23 -1
  395. package/dist/tools/tool-manager.d.ts.map +1 -1
  396. package/dist/tools/tool-manager.js +145 -19
  397. package/dist/tools/types.d.ts +20 -0
  398. package/dist/tools/types.d.ts.map +1 -1
  399. package/dist/utils/api-key-resolver.js +1 -1
  400. package/dist/utils/async-context.js +1 -1
  401. package/dist/utils/debug.js +1 -1
  402. package/dist/{llm/tokenizer/types.cjs → utils/defer.cjs} +19 -10
  403. package/dist/utils/defer.d.ts +63 -0
  404. package/dist/utils/defer.d.ts.map +1 -0
  405. package/dist/utils/defer.js +19 -0
  406. package/dist/utils/env-file.js +1 -1
  407. package/dist/utils/error-conversion.js +1 -1
  408. package/dist/utils/execution-context.js +1 -1
  409. package/dist/utils/fs-walk.js +1 -1
  410. package/dist/utils/index.cjs +3 -1
  411. package/dist/utils/index.d.ts +1 -0
  412. package/dist/utils/index.d.ts.map +1 -1
  413. package/dist/utils/index.js +1 -0
  414. package/dist/utils/path.js +1 -1
  415. package/dist/utils/redactor.js +1 -1
  416. package/dist/utils/result.js +1 -1
  417. package/dist/utils/safe-stringify.js +1 -1
  418. package/dist/utils/schema-metadata.js +1 -1
  419. package/dist/utils/schema.js +1 -1
  420. package/dist/utils/service-initializer.cjs +6 -2
  421. package/dist/utils/service-initializer.d.ts.map +1 -1
  422. package/dist/utils/service-initializer.js +7 -3
  423. package/dist/utils/user-info.js +1 -1
  424. package/dist/utils/zod-schema-converter.js +1 -1
  425. package/package.json +6 -7
  426. package/dist/context/compression/middle-removal.cjs +0 -95
  427. package/dist/context/compression/middle-removal.d.ts +0 -47
  428. package/dist/context/compression/middle-removal.d.ts.map +0 -1
  429. package/dist/context/compression/middle-removal.js +0 -72
  430. package/dist/context/compression/oldest-removal.cjs +0 -83
  431. package/dist/context/compression/oldest-removal.d.ts +0 -42
  432. package/dist/context/compression/oldest-removal.d.ts.map +0 -1
  433. package/dist/context/compression/oldest-removal.js +0 -60
  434. package/dist/llm/formatters/anthropic.cjs +0 -257
  435. package/dist/llm/formatters/anthropic.d.ts +0 -46
  436. package/dist/llm/formatters/anthropic.d.ts.map +0 -1
  437. package/dist/llm/formatters/anthropic.js +0 -239
  438. package/dist/llm/formatters/factory.cjs +0 -50
  439. package/dist/llm/formatters/factory.d.ts +0 -10
  440. package/dist/llm/formatters/factory.d.ts.map +0 -1
  441. package/dist/llm/formatters/factory.js +0 -27
  442. package/dist/llm/formatters/openai.cjs +0 -203
  443. package/dist/llm/formatters/openai.d.ts +0 -39
  444. package/dist/llm/formatters/openai.d.ts.map +0 -1
  445. package/dist/llm/formatters/openai.js +0 -184
  446. package/dist/llm/formatters/types.d.ts +0 -41
  447. package/dist/llm/formatters/types.d.ts.map +0 -1
  448. package/dist/llm/services/anthropic.cjs +0 -511
  449. package/dist/llm/services/anthropic.d.ts +0 -48
  450. package/dist/llm/services/anthropic.d.ts.map +0 -1
  451. package/dist/llm/services/anthropic.js +0 -447
  452. package/dist/llm/services/openai.cjs +0 -611
  453. package/dist/llm/services/openai.d.ts +0 -48
  454. package/dist/llm/services/openai.d.ts.map +0 -1
  455. package/dist/llm/services/openai.js +0 -547
  456. package/dist/llm/tokenizer/anthropic.cjs +0 -43
  457. package/dist/llm/tokenizer/anthropic.d.ts +0 -19
  458. package/dist/llm/tokenizer/anthropic.d.ts.map +0 -1
  459. package/dist/llm/tokenizer/anthropic.js +0 -20
  460. package/dist/llm/tokenizer/default.d.ts +0 -14
  461. package/dist/llm/tokenizer/default.d.ts.map +0 -1
  462. package/dist/llm/tokenizer/default.js +0 -18
  463. package/dist/llm/tokenizer/factory.cjs +0 -44
  464. package/dist/llm/tokenizer/factory.d.ts +0 -12
  465. package/dist/llm/tokenizer/factory.d.ts.map +0 -1
  466. package/dist/llm/tokenizer/factory.js +0 -21
  467. package/dist/llm/tokenizer/google.cjs +0 -52
  468. package/dist/llm/tokenizer/google.d.ts +0 -29
  469. package/dist/llm/tokenizer/google.d.ts.map +0 -1
  470. package/dist/llm/tokenizer/google.js +0 -29
  471. package/dist/llm/tokenizer/openai.cjs +0 -115
  472. package/dist/llm/tokenizer/openai.d.ts +0 -41
  473. package/dist/llm/tokenizer/openai.d.ts.map +0 -1
  474. package/dist/llm/tokenizer/openai.js +0 -91
  475. package/dist/llm/tokenizer/types.d.ts +0 -18
  476. package/dist/llm/tokenizer/types.d.ts.map +0 -1
  477. package/dist/llm/tokenizer/types.js +0 -10
  478. /package/dist/llm/{formatters → executor}/types.cjs +0 -0
  479. /package/dist/llm/{formatters → executor}/types.js +0 -0
@@ -45,9 +45,52 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use
45
45
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
46
46
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
47
47
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
48
+ var __using = (stack, value, async) => {
49
+ if (value != null) {
50
+ if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
51
+ var dispose, inner;
52
+ if (async) dispose = value[__knownSymbol("asyncDispose")];
53
+ if (dispose === void 0) {
54
+ dispose = value[__knownSymbol("dispose")];
55
+ if (async) inner = dispose;
56
+ }
57
+ if (typeof dispose !== "function") __typeError("Object not disposable");
58
+ if (inner) dispose = function() {
59
+ try {
60
+ inner.call(this);
61
+ } catch (e) {
62
+ return Promise.reject(e);
63
+ }
64
+ };
65
+ stack.push([async, dispose, value]);
66
+ } else if (async) {
67
+ stack.push([async]);
68
+ }
69
+ return value;
70
+ };
71
+ var __callDispose = (stack, error, hasError) => {
72
+ var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
73
+ return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
74
+ };
75
+ var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
76
+ var next = (it) => {
77
+ while (it = stack.pop()) {
78
+ try {
79
+ var result = it[1] && it[1].call(it[2]);
80
+ if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
81
+ } catch (e) {
82
+ fail(e);
83
+ }
84
+ }
85
+ if (hasError) throw error;
86
+ };
87
+ return next();
88
+ };
48
89
 
49
90
  export {
50
91
  __decoratorStart,
51
92
  __runInitializers,
52
- __decorateElement
93
+ __decorateElement,
94
+ __using,
95
+ __callDispose
53
96
  };
@@ -16,26 +16,28 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var default_exports = {};
20
- __export(default_exports, {
21
- DefaultTokenizer: () => DefaultTokenizer
19
+ var overflow_exports = {};
20
+ __export(overflow_exports, {
21
+ getCompressionTarget: () => getCompressionTarget,
22
+ isOverflow: () => isOverflow
22
23
  });
23
- module.exports = __toCommonJS(default_exports);
24
- class DefaultTokenizer {
25
- /**
26
- * Assumes roughly 4 characters per token.
27
- * @param text Text content to count tokens for
28
- * @returns Approximate number of tokens
29
- */
30
- countTokens(text) {
31
- if (!text) return 0;
32
- return Math.ceil(text.length / 4);
33
- }
34
- getProviderName() {
35
- return "default";
36
- }
24
+ module.exports = __toCommonJS(overflow_exports);
25
+ const DEFAULT_OUTPUT_BUFFER = 16e3;
26
+ function isOverflow(tokens, modelLimits) {
27
+ const { contextWindow, maxOutput } = modelLimits;
28
+ const outputBuffer = Math.min(maxOutput, DEFAULT_OUTPUT_BUFFER);
29
+ const usableTokens = contextWindow - outputBuffer;
30
+ const inputTokens = tokens.inputTokens ?? 0;
31
+ return inputTokens > usableTokens;
32
+ }
33
+ function getCompressionTarget(modelLimits, targetPercentage = 0.7) {
34
+ const { contextWindow, maxOutput } = modelLimits;
35
+ const outputBuffer = Math.min(maxOutput, DEFAULT_OUTPUT_BUFFER);
36
+ const usableTokens = contextWindow - outputBuffer;
37
+ return Math.floor(usableTokens * targetPercentage);
37
38
  }
38
39
  // Annotate the CommonJS export names for ESM import in node:
39
40
  0 && (module.exports = {
40
- DefaultTokenizer
41
+ getCompressionTarget,
42
+ isOverflow
41
43
  });
@@ -0,0 +1,33 @@
1
+ import type { TokenUsage } from '../../llm/types.js';
2
+ /**
3
+ * Model limits configuration for overflow detection.
4
+ * These limits define the context window boundaries.
5
+ */
6
+ export interface ModelLimits {
7
+ /** Maximum context window size in tokens */
8
+ contextWindow: number;
9
+ /** Maximum output tokens the model can generate */
10
+ maxOutput: number;
11
+ }
12
+ /**
13
+ * Determines if the context has overflowed based on actual token usage from the API.
14
+ *
15
+ * Overflow is detected when:
16
+ * used tokens > (contextWindow - outputBuffer)
17
+ *
18
+ * The outputBuffer ensures we always have room for the model's response.
19
+ *
20
+ * @param tokens The actual token usage from the last LLM API call
21
+ * @param modelLimits The model's context window and output limits
22
+ * @returns true if context has overflowed and compression is needed
23
+ */
24
+ export declare function isOverflow(tokens: TokenUsage, modelLimits: ModelLimits): boolean;
25
+ /**
26
+ * Calculate the compression target - how many tokens we need to reduce to.
27
+ *
28
+ * @param modelLimits The model's context window and output limits
29
+ * @param targetPercentage What percentage of usable context to target (default 70%)
30
+ * @returns The target token count after compression
31
+ */
32
+ export declare function getCompressionTarget(modelLimits: ModelLimits, targetPercentage?: number): number;
33
+ //# sourceMappingURL=overflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overflow.d.ts","sourceRoot":"","sources":["../../../src/context/compression/overflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,WAAW;IACxB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;CACrB;AAQD;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAYhF;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAChC,WAAW,EAAE,WAAW,EACxB,gBAAgB,GAAE,MAAY,GAC/B,MAAM,CAMR"}
@@ -0,0 +1,19 @@
1
+ import "../../chunk-PTJYTZNU.js";
2
+ const DEFAULT_OUTPUT_BUFFER = 16e3;
3
+ function isOverflow(tokens, modelLimits) {
4
+ const { contextWindow, maxOutput } = modelLimits;
5
+ const outputBuffer = Math.min(maxOutput, DEFAULT_OUTPUT_BUFFER);
6
+ const usableTokens = contextWindow - outputBuffer;
7
+ const inputTokens = tokens.inputTokens ?? 0;
8
+ return inputTokens > usableTokens;
9
+ }
10
+ function getCompressionTarget(modelLimits, targetPercentage = 0.7) {
11
+ const { contextWindow, maxOutput } = modelLimits;
12
+ const outputBuffer = Math.min(maxOutput, DEFAULT_OUTPUT_BUFFER);
13
+ const usableTokens = contextWindow - outputBuffer;
14
+ return Math.floor(usableTokens * targetPercentage);
15
+ }
16
+ export {
17
+ getCompressionTarget,
18
+ isOverflow
19
+ };
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var reactive_overflow_exports = {};
20
+ __export(reactive_overflow_exports, {
21
+ ReactiveOverflowStrategy: () => ReactiveOverflowStrategy
22
+ });
23
+ module.exports = __toCommonJS(reactive_overflow_exports);
24
+ var import_ai = require("ai");
25
+ var import_types = require("../types.js");
26
+ const DEFAULT_OPTIONS = {
27
+ preserveLastNTurns: 2,
28
+ maxSummaryTokens: 2e3,
29
+ summaryPrompt: `You are a conversation summarizer. Summarize the following conversation history concisely, focusing on:
30
+ - What tasks were attempted and their outcomes
31
+ - Current state and context the assistant needs to remember
32
+ - Any important decisions or information discovered
33
+ - What the user was trying to accomplish
34
+
35
+ Be concise but preserve essential context. Output only the summary, no preamble.
36
+
37
+ Conversation:
38
+ {conversation}`
39
+ };
40
+ class ReactiveOverflowStrategy {
41
+ name = "reactive-overflow";
42
+ model;
43
+ options;
44
+ logger;
45
+ constructor(model, options = {}, logger) {
46
+ this.model = model;
47
+ this.options = { ...DEFAULT_OPTIONS, ...options };
48
+ this.logger = logger;
49
+ }
50
+ /**
51
+ * Generate a summary message for the old portion of history.
52
+ *
53
+ * IMPORTANT: This does NOT replace history. It returns a summary message
54
+ * that the caller should ADD to history via contextManager.addMessage().
55
+ * Read-time filtering (filterCompacted) will then exclude pre-summary
56
+ * messages when formatting for LLM.
57
+ *
58
+ * @param history The full conversation history
59
+ * @returns Array with single summary message to add, or empty if nothing to summarize
60
+ */
61
+ async compress(history) {
62
+ if (history.length <= 2) {
63
+ this.logger.debug("ReactiveOverflowStrategy: History too short, skipping compression");
64
+ return [];
65
+ }
66
+ const { toSummarize, toKeep } = this.splitHistory(history);
67
+ if (toSummarize.length === 0) {
68
+ this.logger.debug("ReactiveOverflowStrategy: No messages to summarize");
69
+ return [];
70
+ }
71
+ this.logger.info(
72
+ `ReactiveOverflowStrategy: Summarizing ${toSummarize.length} messages, keeping ${toKeep.length}`
73
+ );
74
+ const summary = await this.generateSummary(toSummarize);
75
+ const summaryMessage = {
76
+ role: "assistant",
77
+ content: [{ type: "text", text: summary }],
78
+ timestamp: Date.now(),
79
+ metadata: {
80
+ isSummary: true,
81
+ summarizedAt: Date.now(),
82
+ summarizedMessageCount: toSummarize.length,
83
+ originalFirstTimestamp: toSummarize[0]?.timestamp,
84
+ originalLastTimestamp: toSummarize[toSummarize.length - 1]?.timestamp
85
+ }
86
+ };
87
+ return [summaryMessage];
88
+ }
89
+ /**
90
+ * Split history into messages to summarize and messages to keep.
91
+ * Keeps the last N turns (user + assistant pairs) intact.
92
+ */
93
+ splitHistory(history) {
94
+ const turnsToKeep = this.options.preserveLastNTurns;
95
+ const userMessageIndices = [];
96
+ for (let i = history.length - 1; i >= 0; i--) {
97
+ if (history[i]?.role === "user") {
98
+ userMessageIndices.unshift(i);
99
+ if (userMessageIndices.length >= turnsToKeep) {
100
+ break;
101
+ }
102
+ }
103
+ }
104
+ if (userMessageIndices.length > 0) {
105
+ const splitIndex = userMessageIndices[0];
106
+ if (splitIndex !== void 0) {
107
+ if (splitIndex === 0) {
108
+ return {
109
+ toSummarize: [],
110
+ toKeep: history
111
+ };
112
+ }
113
+ return {
114
+ toSummarize: history.slice(0, splitIndex),
115
+ toKeep: history.slice(splitIndex)
116
+ };
117
+ }
118
+ }
119
+ const keepCount = Math.min(4, history.length);
120
+ return {
121
+ toSummarize: history.slice(0, -keepCount),
122
+ toKeep: history.slice(-keepCount)
123
+ };
124
+ }
125
+ /**
126
+ * Generate an LLM summary of the messages.
127
+ */
128
+ async generateSummary(messages) {
129
+ const formattedConversation = this.formatMessagesForSummary(messages);
130
+ const prompt = this.options.summaryPrompt.replace("{conversation}", formattedConversation);
131
+ try {
132
+ const result = await (0, import_ai.generateText)({
133
+ model: this.model,
134
+ prompt,
135
+ maxOutputTokens: this.options.maxSummaryTokens
136
+ });
137
+ return `[Previous conversation summary]
138
+ ${result.text}`;
139
+ } catch (error) {
140
+ this.logger.error("ReactiveOverflowStrategy: Failed to generate summary", { error });
141
+ return this.createFallbackSummary(messages);
142
+ }
143
+ }
144
+ /**
145
+ * Format messages for the summary prompt.
146
+ */
147
+ formatMessagesForSummary(messages) {
148
+ return messages.map((msg) => {
149
+ const role = msg.role.toUpperCase();
150
+ let content;
151
+ if (typeof msg.content === "string") {
152
+ content = msg.content;
153
+ } else if (Array.isArray(msg.content)) {
154
+ content = msg.content.filter(
155
+ (part) => part.type === "text"
156
+ ).map((part) => part.text).join("\n");
157
+ } else {
158
+ content = "[no content]";
159
+ }
160
+ if (content.length > 2e3) {
161
+ content = content.slice(0, 2e3) + "... [truncated]";
162
+ }
163
+ if ((0, import_types.isAssistantMessage)(msg) && msg.toolCalls && msg.toolCalls.length > 0) {
164
+ const toolNames = msg.toolCalls.map((tc) => tc.function.name).join(", ");
165
+ content += `
166
+ [Used tools: ${toolNames}]`;
167
+ }
168
+ if ((0, import_types.isToolMessage)(msg)) {
169
+ return `TOOL (${msg.name}): ${content.slice(0, 500)}${content.length > 500 ? "..." : ""}`;
170
+ }
171
+ return `${role}: ${content}`;
172
+ }).join("\n\n");
173
+ }
174
+ /**
175
+ * Create a fallback summary if LLM call fails.
176
+ */
177
+ createFallbackSummary(messages) {
178
+ const userMessages = messages.filter((m) => m.role === "user");
179
+ const assistantWithTools = messages.filter(
180
+ (m) => (0, import_types.isAssistantMessage)(m) && !!m.toolCalls && m.toolCalls.length > 0
181
+ );
182
+ const userTopics = userMessages.slice(-3).map((m) => {
183
+ const text = typeof m.content === "string" ? m.content : Array.isArray(m.content) ? m.content.filter(
184
+ (p) => p.type === "text"
185
+ ).map((p) => p.text).join(" ") : "";
186
+ return text.slice(0, 100);
187
+ }).join("; ");
188
+ const toolsUsed = [
189
+ ...new Set(
190
+ assistantWithTools.flatMap((m) => m.toolCalls.map((tc) => tc.function.name))
191
+ )
192
+ ].join(", ");
193
+ return `[Previous conversation summary - fallback]
194
+ User discussed: ${userTopics || "various topics"}
195
+ Tools used: ${toolsUsed || "none"}`;
196
+ }
197
+ }
198
+ // Annotate the CommonJS export names for ESM import in node:
199
+ 0 && (module.exports = {
200
+ ReactiveOverflowStrategy
201
+ });
@@ -0,0 +1,81 @@
1
+ import { type LanguageModel } from 'ai';
2
+ import type { ICompressionStrategy } from './types.js';
3
+ import type { InternalMessage } from '../types.js';
4
+ import type { IDextoLogger } from '../../logger/v2/types.js';
5
+ /**
6
+ * Configuration options for ReactiveOverflowStrategy.
7
+ */
8
+ export interface ReactiveOverflowOptions {
9
+ /**
10
+ * Number of recent turns to preserve (not summarize).
11
+ * A "turn" is a user message + assistant response pair.
12
+ * Default: 2
13
+ */
14
+ preserveLastNTurns?: number;
15
+ /**
16
+ * Maximum tokens for the summary output.
17
+ * Default: 2000
18
+ */
19
+ maxSummaryTokens?: number;
20
+ /**
21
+ * Custom summary prompt template.
22
+ * Use {conversation} as placeholder for formatted messages.
23
+ */
24
+ summaryPrompt?: string;
25
+ }
26
+ /**
27
+ * ReactiveOverflowStrategy implements reactive compression.
28
+ *
29
+ * Key behaviors:
30
+ * - Triggers on overflow (after actual tokens exceed context limit)
31
+ * - Uses LLM to generate intelligent summary of older messages
32
+ * - Returns summary message to ADD to history (not replace)
33
+ * - Read-time filtering via filterCompacted() excludes pre-summary messages
34
+ *
35
+ * This strategy is designed to work with TurnExecutor's main loop:
36
+ * 1. After each step, check if overflow occurred
37
+ * 2. If yes, generate summary and ADD it to history
38
+ * 3. filterCompacted() in getFormattedMessages() excludes old messages
39
+ * 4. Continue with fresh context (summary + recent messages)
40
+ *
41
+ * NOTE: This does NOT replace history. The summary message is ADDED,
42
+ * and filterCompacted() handles excluding old messages at read-time.
43
+ * This preserves full history for audit/recovery purposes.
44
+ */
45
+ export declare class ReactiveOverflowStrategy implements ICompressionStrategy {
46
+ readonly name = "reactive-overflow";
47
+ private readonly model;
48
+ private readonly options;
49
+ private readonly logger;
50
+ constructor(model: LanguageModel, options: ReactiveOverflowOptions | undefined, logger: IDextoLogger);
51
+ /**
52
+ * Generate a summary message for the old portion of history.
53
+ *
54
+ * IMPORTANT: This does NOT replace history. It returns a summary message
55
+ * that the caller should ADD to history via contextManager.addMessage().
56
+ * Read-time filtering (filterCompacted) will then exclude pre-summary
57
+ * messages when formatting for LLM.
58
+ *
59
+ * @param history The full conversation history
60
+ * @returns Array with single summary message to add, or empty if nothing to summarize
61
+ */
62
+ compress(history: readonly InternalMessage[]): Promise<InternalMessage[]>;
63
+ /**
64
+ * Split history into messages to summarize and messages to keep.
65
+ * Keeps the last N turns (user + assistant pairs) intact.
66
+ */
67
+ private splitHistory;
68
+ /**
69
+ * Generate an LLM summary of the messages.
70
+ */
71
+ private generateSummary;
72
+ /**
73
+ * Format messages for the summary prompt.
74
+ */
75
+ private formatMessagesForSummary;
76
+ /**
77
+ * Create a fallback summary if LLM call fails.
78
+ */
79
+ private createFallbackSummary;
80
+ }
81
+ //# sourceMappingURL=reactive-overflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive-overflow.d.ts","sourceRoot":"","sources":["../../../src/context/compression/reactive-overflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,IAAI,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,aAAa,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAiBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,wBAAyB,YAAW,oBAAoB;IACjE,QAAQ,CAAC,IAAI,uBAAuB;IAEpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;gBAE1B,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,uBAAuB,YAAK,EAAE,MAAM,EAAE,YAAY;IAM7F;;;;;;;;;;OAUG;IACG,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA0C/E;;;OAGG;IACH,OAAO,CAAC,YAAY;IA2CpB;;OAEG;YACW,eAAe;IAmB7B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA2ChC;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAiChC"}
@@ -0,0 +1,178 @@
1
+ import "../../chunk-PTJYTZNU.js";
2
+ import { generateText } from "ai";
3
+ import { isAssistantMessage, isToolMessage } from "../types.js";
4
+ const DEFAULT_OPTIONS = {
5
+ preserveLastNTurns: 2,
6
+ maxSummaryTokens: 2e3,
7
+ summaryPrompt: `You are a conversation summarizer. Summarize the following conversation history concisely, focusing on:
8
+ - What tasks were attempted and their outcomes
9
+ - Current state and context the assistant needs to remember
10
+ - Any important decisions or information discovered
11
+ - What the user was trying to accomplish
12
+
13
+ Be concise but preserve essential context. Output only the summary, no preamble.
14
+
15
+ Conversation:
16
+ {conversation}`
17
+ };
18
+ class ReactiveOverflowStrategy {
19
+ name = "reactive-overflow";
20
+ model;
21
+ options;
22
+ logger;
23
+ constructor(model, options = {}, logger) {
24
+ this.model = model;
25
+ this.options = { ...DEFAULT_OPTIONS, ...options };
26
+ this.logger = logger;
27
+ }
28
+ /**
29
+ * Generate a summary message for the old portion of history.
30
+ *
31
+ * IMPORTANT: This does NOT replace history. It returns a summary message
32
+ * that the caller should ADD to history via contextManager.addMessage().
33
+ * Read-time filtering (filterCompacted) will then exclude pre-summary
34
+ * messages when formatting for LLM.
35
+ *
36
+ * @param history The full conversation history
37
+ * @returns Array with single summary message to add, or empty if nothing to summarize
38
+ */
39
+ async compress(history) {
40
+ if (history.length <= 2) {
41
+ this.logger.debug("ReactiveOverflowStrategy: History too short, skipping compression");
42
+ return [];
43
+ }
44
+ const { toSummarize, toKeep } = this.splitHistory(history);
45
+ if (toSummarize.length === 0) {
46
+ this.logger.debug("ReactiveOverflowStrategy: No messages to summarize");
47
+ return [];
48
+ }
49
+ this.logger.info(
50
+ `ReactiveOverflowStrategy: Summarizing ${toSummarize.length} messages, keeping ${toKeep.length}`
51
+ );
52
+ const summary = await this.generateSummary(toSummarize);
53
+ const summaryMessage = {
54
+ role: "assistant",
55
+ content: [{ type: "text", text: summary }],
56
+ timestamp: Date.now(),
57
+ metadata: {
58
+ isSummary: true,
59
+ summarizedAt: Date.now(),
60
+ summarizedMessageCount: toSummarize.length,
61
+ originalFirstTimestamp: toSummarize[0]?.timestamp,
62
+ originalLastTimestamp: toSummarize[toSummarize.length - 1]?.timestamp
63
+ }
64
+ };
65
+ return [summaryMessage];
66
+ }
67
+ /**
68
+ * Split history into messages to summarize and messages to keep.
69
+ * Keeps the last N turns (user + assistant pairs) intact.
70
+ */
71
+ splitHistory(history) {
72
+ const turnsToKeep = this.options.preserveLastNTurns;
73
+ const userMessageIndices = [];
74
+ for (let i = history.length - 1; i >= 0; i--) {
75
+ if (history[i]?.role === "user") {
76
+ userMessageIndices.unshift(i);
77
+ if (userMessageIndices.length >= turnsToKeep) {
78
+ break;
79
+ }
80
+ }
81
+ }
82
+ if (userMessageIndices.length > 0) {
83
+ const splitIndex = userMessageIndices[0];
84
+ if (splitIndex !== void 0) {
85
+ if (splitIndex === 0) {
86
+ return {
87
+ toSummarize: [],
88
+ toKeep: history
89
+ };
90
+ }
91
+ return {
92
+ toSummarize: history.slice(0, splitIndex),
93
+ toKeep: history.slice(splitIndex)
94
+ };
95
+ }
96
+ }
97
+ const keepCount = Math.min(4, history.length);
98
+ return {
99
+ toSummarize: history.slice(0, -keepCount),
100
+ toKeep: history.slice(-keepCount)
101
+ };
102
+ }
103
+ /**
104
+ * Generate an LLM summary of the messages.
105
+ */
106
+ async generateSummary(messages) {
107
+ const formattedConversation = this.formatMessagesForSummary(messages);
108
+ const prompt = this.options.summaryPrompt.replace("{conversation}", formattedConversation);
109
+ try {
110
+ const result = await generateText({
111
+ model: this.model,
112
+ prompt,
113
+ maxOutputTokens: this.options.maxSummaryTokens
114
+ });
115
+ return `[Previous conversation summary]
116
+ ${result.text}`;
117
+ } catch (error) {
118
+ this.logger.error("ReactiveOverflowStrategy: Failed to generate summary", { error });
119
+ return this.createFallbackSummary(messages);
120
+ }
121
+ }
122
+ /**
123
+ * Format messages for the summary prompt.
124
+ */
125
+ formatMessagesForSummary(messages) {
126
+ return messages.map((msg) => {
127
+ const role = msg.role.toUpperCase();
128
+ let content;
129
+ if (typeof msg.content === "string") {
130
+ content = msg.content;
131
+ } else if (Array.isArray(msg.content)) {
132
+ content = msg.content.filter(
133
+ (part) => part.type === "text"
134
+ ).map((part) => part.text).join("\n");
135
+ } else {
136
+ content = "[no content]";
137
+ }
138
+ if (content.length > 2e3) {
139
+ content = content.slice(0, 2e3) + "... [truncated]";
140
+ }
141
+ if (isAssistantMessage(msg) && msg.toolCalls && msg.toolCalls.length > 0) {
142
+ const toolNames = msg.toolCalls.map((tc) => tc.function.name).join(", ");
143
+ content += `
144
+ [Used tools: ${toolNames}]`;
145
+ }
146
+ if (isToolMessage(msg)) {
147
+ return `TOOL (${msg.name}): ${content.slice(0, 500)}${content.length > 500 ? "..." : ""}`;
148
+ }
149
+ return `${role}: ${content}`;
150
+ }).join("\n\n");
151
+ }
152
+ /**
153
+ * Create a fallback summary if LLM call fails.
154
+ */
155
+ createFallbackSummary(messages) {
156
+ const userMessages = messages.filter((m) => m.role === "user");
157
+ const assistantWithTools = messages.filter(
158
+ (m) => isAssistantMessage(m) && !!m.toolCalls && m.toolCalls.length > 0
159
+ );
160
+ const userTopics = userMessages.slice(-3).map((m) => {
161
+ const text = typeof m.content === "string" ? m.content : Array.isArray(m.content) ? m.content.filter(
162
+ (p) => p.type === "text"
163
+ ).map((p) => p.text).join(" ") : "";
164
+ return text.slice(0, 100);
165
+ }).join("; ");
166
+ const toolsUsed = [
167
+ ...new Set(
168
+ assistantWithTools.flatMap((m) => m.toolCalls.map((tc) => tc.function.name))
169
+ )
170
+ ].join(", ");
171
+ return `[Previous conversation summary - fallback]
172
+ User discussed: ${userTopics || "various topics"}
173
+ Tools used: ${toolsUsed || "none"}`;
174
+ }
175
+ }
176
+ export {
177
+ ReactiveOverflowStrategy
178
+ };
@@ -1,18 +1,20 @@
1
1
  import { InternalMessage } from '../types.js';
2
- import { ITokenizer } from '../../llm/tokenizer/types.js';
3
2
  /**
4
- * Defines the contract for a strategy used to compress a conversation history
5
- * to fit within a maximum token limit.
3
+ * Compression strategy interface.
4
+ *
5
+ * Strategies are responsible for reducing conversation history size
6
+ * when context limits are exceeded. The strategy is called by TurnExecutor
7
+ * after detecting overflow via actual token usage from the API.
6
8
  */
7
9
  export interface ICompressionStrategy {
10
+ /** Human-readable name for logging/UI */
11
+ readonly name: string;
8
12
  /**
9
13
  * Compresses the provided message history.
10
14
  *
11
15
  * @param history The current conversation history.
12
- * @param tokenizer The tokenizer used to calculate message tokens.
13
- * @param maxInputTokens The maximum number of tokens allowed in the history.
14
- * @returns The potentially compressed message history.
16
+ * @returns Summary messages to add to history (filterCompacted handles the rest).
15
17
  */
16
- compress(history: InternalMessage[], tokenizer: ITokenizer, maxInputTokens: number): InternalMessage[];
18
+ compress(history: readonly InternalMessage[]): Promise<InternalMessage[]> | InternalMessage[];
17
19
  }
18
20
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/context/compression/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACjC;;;;;;;OAOG;IACH,QAAQ,CACJ,OAAO,EAAE,eAAe,EAAE,EAC1B,SAAS,EAAE,UAAU,EACrB,cAAc,EAAE,MAAM,GACvB,eAAe,EAAE,CAAC;CACxB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/context/compression/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACjC,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC;CACjG"}
@@ -33,6 +33,9 @@ var ContextErrorCode = /* @__PURE__ */ ((ContextErrorCode2) => {
33
33
  ContextErrorCode2["TOKEN_COUNT_FAILED"] = "context_token_count_failed";
34
34
  ContextErrorCode2["PRESERVE_VALUES_NEGATIVE"] = "context_preserve_values_negative";
35
35
  ContextErrorCode2["MIN_MESSAGES_NEGATIVE"] = "context_min_messages_negative";
36
+ ContextErrorCode2["MESSAGE_NOT_FOUND"] = "context_message_not_found";
37
+ ContextErrorCode2["MESSAGE_NOT_ASSISTANT"] = "context_message_not_assistant";
38
+ ContextErrorCode2["ASSISTANT_CONTENT_NOT_STRING"] = "context_assistant_content_not_string";
36
39
  return ContextErrorCode2;
37
40
  })(ContextErrorCode || {});
38
41
  // Annotate the CommonJS export names for ESM import in node: