@cuylabs/agent-core 4.8.1 → 4.10.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 (667) hide show
  1. package/README.md +11 -12
  2. package/dist/agent/chat-loop/commit-batch.d.ts +10 -0
  3. package/dist/agent/chat-loop/commit-batch.d.ts.map +1 -0
  4. package/dist/agent/chat-loop/context-recovery.d.ts +29 -0
  5. package/dist/agent/chat-loop/context-recovery.d.ts.map +1 -0
  6. package/dist/agent/chat-loop/finalize-turn.d.ts +19 -0
  7. package/dist/agent/chat-loop/finalize-turn.d.ts.map +1 -0
  8. package/dist/agent/chat-loop/index.d.ts +7 -0
  9. package/dist/agent/chat-loop/index.d.ts.map +1 -0
  10. package/dist/agent/chat-loop/loop.d.ts +8 -0
  11. package/dist/agent/chat-loop/loop.d.ts.map +1 -0
  12. package/dist/agent/chat-loop/model-step-runner.d.ts +26 -0
  13. package/dist/agent/chat-loop/model-step-runner.d.ts.map +1 -0
  14. package/dist/agent/chat-loop/model-step-snapshot.d.ts +49 -0
  15. package/dist/agent/chat-loop/model-step-snapshot.d.ts.map +1 -0
  16. package/dist/agent/chat-loop/turn-tools.d.ts +19 -0
  17. package/dist/agent/chat-loop/turn-tools.d.ts.map +1 -0
  18. package/dist/agent/chat-loop/types.d.ts +60 -0
  19. package/dist/agent/chat-loop/types.d.ts.map +1 -0
  20. package/dist/agent/defaults.d.ts +69 -0
  21. package/dist/agent/defaults.d.ts.map +1 -0
  22. package/dist/agent/event-printer.d.ts +94 -0
  23. package/dist/agent/event-printer.d.ts.map +1 -0
  24. package/dist/agent/fork.d.ts +59 -0
  25. package/dist/agent/fork.d.ts.map +1 -0
  26. package/dist/agent/index.d.ts +17 -0
  27. package/dist/agent/index.d.ts.map +1 -0
  28. package/dist/agent/instance/context-management.d.ts +29 -0
  29. package/dist/agent/instance/context-management.d.ts.map +1 -0
  30. package/dist/agent/instance/forking.d.ts +26 -0
  31. package/dist/agent/instance/forking.d.ts.map +1 -0
  32. package/dist/agent/instance/index.d.ts +170 -0
  33. package/dist/agent/instance/index.d.ts.map +1 -0
  34. package/dist/agent/instance/interventions.d.ts +10 -0
  35. package/dist/agent/instance/interventions.d.ts.map +1 -0
  36. package/dist/agent/instance/mcp.d.ts +21 -0
  37. package/dist/agent/instance/mcp.d.ts.map +1 -0
  38. package/dist/agent/instance/sessions.d.ts +8 -0
  39. package/dist/agent/instance/sessions.d.ts.map +1 -0
  40. package/dist/agent/instance/tools.d.ts +16 -0
  41. package/dist/agent/instance/tools.d.ts.map +1 -0
  42. package/dist/agent/instance/turn-lifecycle.d.ts +61 -0
  43. package/dist/agent/instance/turn-lifecycle.d.ts.map +1 -0
  44. package/dist/agent/session.d.ts +16 -0
  45. package/dist/agent/session.d.ts.map +1 -0
  46. package/dist/agent/setup/config.d.ts +8 -0
  47. package/dist/agent/setup/config.d.ts.map +1 -0
  48. package/dist/agent/setup/context-window.d.ts +4 -0
  49. package/dist/agent/setup/context-window.d.ts.map +1 -0
  50. package/dist/agent/setup/environment.d.ts +5 -0
  51. package/dist/agent/setup/environment.d.ts.map +1 -0
  52. package/dist/agent/setup/middleware.d.ts +9 -0
  53. package/dist/agent/setup/middleware.d.ts.map +1 -0
  54. package/dist/agent/setup/runtime-config.d.ts +9 -0
  55. package/dist/agent/setup/runtime-config.d.ts.map +1 -0
  56. package/dist/agent/setup/state.d.ts +4 -0
  57. package/dist/agent/setup/state.d.ts.map +1 -0
  58. package/dist/agent/setup/tools.d.ts +8 -0
  59. package/dist/agent/setup/tools.d.ts.map +1 -0
  60. package/dist/agent/setup.d.ts +47 -0
  61. package/dist/agent/setup.d.ts.map +1 -0
  62. package/dist/agent/stream-provider.d.ts +27 -0
  63. package/dist/agent/stream-provider.d.ts.map +1 -0
  64. package/dist/agent/turn-context/compaction/agent-context.d.ts +53 -0
  65. package/dist/agent/turn-context/compaction/agent-context.d.ts.map +1 -0
  66. package/dist/agent/turn-context/compaction/budget.d.ts +4 -0
  67. package/dist/agent/turn-context/compaction/budget.d.ts.map +1 -0
  68. package/dist/agent/turn-context/compaction/check.d.ts +39 -0
  69. package/dist/agent/turn-context/compaction/check.d.ts.map +1 -0
  70. package/dist/agent/turn-context/compaction/fragments.d.ts +4 -0
  71. package/dist/agent/turn-context/compaction/fragments.d.ts.map +1 -0
  72. package/dist/agent/turn-context/compaction/index.d.ts +5 -0
  73. package/dist/agent/turn-context/compaction/index.d.ts.map +1 -0
  74. package/dist/agent/turn-context/compaction/memory.d.ts +17 -0
  75. package/dist/agent/turn-context/compaction/memory.d.ts.map +1 -0
  76. package/dist/agent/turn-context/compaction/results.d.ts +19 -0
  77. package/dist/agent/turn-context/compaction/results.d.ts.map +1 -0
  78. package/dist/agent/turn-context/compaction/summary.d.ts +3 -0
  79. package/dist/agent/turn-context/compaction/summary.d.ts.map +1 -0
  80. package/dist/agent/turn-context/compaction/types.d.ts +24 -0
  81. package/dist/agent/turn-context/compaction/types.d.ts.map +1 -0
  82. package/dist/agent/turn-context/fit-model-context.d.ts +29 -0
  83. package/dist/agent/turn-context/fit-model-context.d.ts.map +1 -0
  84. package/dist/agent/turn-context/index.d.ts +5 -0
  85. package/dist/agent/turn-context/index.d.ts.map +1 -0
  86. package/dist/agent/turn-context/system-prompts.d.ts +12 -0
  87. package/dist/agent/turn-context/system-prompts.d.ts.map +1 -0
  88. package/dist/agent/types/config.d.ts +199 -0
  89. package/dist/agent/types/config.d.ts.map +1 -0
  90. package/dist/agent/types/index.d.ts +11 -0
  91. package/dist/agent/types/index.d.ts.map +1 -0
  92. package/dist/agent/types/state.d.ts +16 -0
  93. package/dist/agent/types/state.d.ts.map +1 -0
  94. package/dist/agent/types/tracing.d.ts +12 -0
  95. package/dist/agent/types/tracing.d.ts.map +1 -0
  96. package/dist/{chunk-KYLPMBHD.js → chunk-336EDIBL.js} +1 -1
  97. package/dist/chunk-AAGKWUXR.js +539 -0
  98. package/dist/chunk-AHDCR7SX.js +83 -0
  99. package/dist/{chunk-CSR75JVC.js → chunk-ASXF5AC6.js} +1 -1
  100. package/dist/{chunk-2TTOLHBT.js → chunk-CFBSQLP5.js} +1 -1
  101. package/dist/{chunk-GJFP5L2V.js → chunk-CNM6OROH.js} +15 -3
  102. package/dist/chunk-E66PKKDL.js +772 -0
  103. package/dist/{chunk-HSUPTXNV.js → chunk-EBVSPHXA.js} +13 -10
  104. package/dist/chunk-EEAGM5MS.js +257 -0
  105. package/dist/chunk-IQA64CAO.js +84 -0
  106. package/dist/chunk-JFH6HBUG.js +227 -0
  107. package/dist/{chunk-MWPU2EVV.js → chunk-JUIL2NJC.js} +4 -81
  108. package/dist/{chunk-NS7D7JJU.js → chunk-K453AFTL.js} +35 -16
  109. package/dist/chunk-LX4AHGI3.js +960 -0
  110. package/dist/chunk-MJRZ2ZRI.js +498 -0
  111. package/dist/chunk-NMJNN6LS.js +1155 -0
  112. package/dist/{chunk-UMIVJDEJ.js → chunk-SAWRDGBE.js} +30 -7
  113. package/dist/{chunk-GEBFHREI.js → chunk-TU5KDFWI.js} +30 -5
  114. package/dist/{chunk-QJV5XPPS.js → chunk-UEEHZ4QH.js} +1 -1
  115. package/dist/chunk-UG5PVNZV.js +53 -0
  116. package/dist/{chunk-BGG2HVIR.js → chunk-V4MIDL5B.js} +9 -0
  117. package/dist/{chunk-BJC46FIF.js → chunk-V4YQ6MBK.js} +2 -2
  118. package/dist/{chunk-H3GRHFFG.js → chunk-VMGZKIFT.js} +30 -9
  119. package/dist/chunk-W6LWIMIX.js +8 -0
  120. package/dist/context/assembly/index.d.ts +3 -0
  121. package/dist/context/assembly/index.d.ts.map +1 -0
  122. package/dist/context/assembly/prepare.d.ts +11 -0
  123. package/dist/context/assembly/prepare.d.ts.map +1 -0
  124. package/dist/context/assembly/types.d.ts +60 -0
  125. package/dist/context/assembly/types.d.ts.map +1 -0
  126. package/dist/context/config.d.ts +11 -0
  127. package/dist/context/config.d.ts.map +1 -0
  128. package/dist/context/fragments/index.d.ts +4 -0
  129. package/dist/context/fragments/index.d.ts.map +1 -0
  130. package/dist/context/fragments/messages.d.ts +10 -0
  131. package/dist/context/fragments/messages.d.ts.map +1 -0
  132. package/dist/context/fragments/render.d.ts +16 -0
  133. package/dist/context/fragments/render.d.ts.map +1 -0
  134. package/dist/context/fragments/types.d.ts +87 -0
  135. package/dist/context/fragments/types.d.ts.map +1 -0
  136. package/dist/context/index.d.ts +13 -0
  137. package/dist/context/index.d.ts.map +1 -0
  138. package/dist/context/index.js +90 -0
  139. package/dist/context/text/truncation.d.ts +13 -0
  140. package/dist/context/text/truncation.d.ts.map +1 -0
  141. package/dist/context/window/budget.d.ts +108 -0
  142. package/dist/context/window/budget.d.ts.map +1 -0
  143. package/dist/context/window/compactor.d.ts +74 -0
  144. package/dist/context/window/compactor.d.ts.map +1 -0
  145. package/dist/context/window/cut-planner.d.ts +64 -0
  146. package/dist/context/window/cut-planner.d.ts.map +1 -0
  147. package/dist/context/window/decision.d.ts +41 -0
  148. package/dist/context/window/decision.d.ts.map +1 -0
  149. package/dist/context/window/estimation.d.ts +45 -0
  150. package/dist/context/window/estimation.d.ts.map +1 -0
  151. package/dist/context/window/index.d.ts +26 -0
  152. package/dist/context/window/index.d.ts.map +1 -0
  153. package/dist/context/window/manager.d.ts +80 -0
  154. package/dist/context/window/manager.d.ts.map +1 -0
  155. package/dist/context/window/summary-policy.d.ts +50 -0
  156. package/dist/context/window/summary-policy.d.ts.map +1 -0
  157. package/dist/context/window/summary.d.ts +56 -0
  158. package/dist/context/window/summary.d.ts.map +1 -0
  159. package/dist/context/window/tool-pruning.d.ts +62 -0
  160. package/dist/context/window/tool-pruning.d.ts.map +1 -0
  161. package/dist/dispatch/executor.d.ts +56 -0
  162. package/dist/dispatch/executor.d.ts.map +1 -0
  163. package/dist/dispatch/index.d.ts +7 -95
  164. package/dist/dispatch/index.d.ts.map +1 -0
  165. package/dist/dispatch/index.js +4 -3
  166. package/dist/dispatch/results.d.ts +9 -0
  167. package/dist/dispatch/results.d.ts.map +1 -0
  168. package/dist/dispatch/runtime.d.ts +19 -0
  169. package/dist/dispatch/runtime.d.ts.map +1 -0
  170. package/dist/dispatch/tool-factories.d.ts +8 -0
  171. package/dist/dispatch/tool-factories.d.ts.map +1 -0
  172. package/dist/dispatch/tools.d.ts +10 -0
  173. package/dist/dispatch/tools.d.ts.map +1 -0
  174. package/dist/dispatch/types.d.ts +131 -0
  175. package/dist/dispatch/types.d.ts.map +1 -0
  176. package/dist/events/event-bus/index.d.ts +13 -0
  177. package/dist/events/event-bus/index.d.ts.map +1 -0
  178. package/dist/events/event-bus/index.js +6 -0
  179. package/dist/events/event-bus/local.d.ts +14 -0
  180. package/dist/events/event-bus/local.d.ts.map +1 -0
  181. package/dist/events/event-bus/types.d.ts +78 -0
  182. package/dist/events/event-bus/types.d.ts.map +1 -0
  183. package/dist/events/index.d.ts +10 -89
  184. package/dist/events/index.d.ts.map +1 -0
  185. package/dist/events/index.js +6 -1
  186. package/dist/events/signal/index.d.ts +18 -0
  187. package/dist/events/signal/index.d.ts.map +1 -0
  188. package/dist/events/signal/index.js +6 -0
  189. package/dist/events/signal/local.d.ts +22 -0
  190. package/dist/events/signal/local.d.ts.map +1 -0
  191. package/dist/events/signal/types.d.ts +69 -0
  192. package/dist/events/signal/types.d.ts.map +1 -0
  193. package/dist/execution/index.d.ts +33 -481
  194. package/dist/execution/index.d.ts.map +1 -0
  195. package/dist/execution/index.js +45 -19
  196. package/dist/execution/scope/index.d.ts +10 -0
  197. package/dist/execution/scope/index.d.ts.map +1 -0
  198. package/dist/execution/scope/index.js +12 -0
  199. package/dist/execution/scope/run.d.ts +8 -0
  200. package/dist/execution/scope/run.d.ts.map +1 -0
  201. package/dist/execution/scope/store.d.ts +6 -0
  202. package/dist/execution/scope/store.d.ts.map +1 -0
  203. package/dist/execution/scope/types.d.ts +28 -0
  204. package/dist/execution/scope/types.d.ts.map +1 -0
  205. package/dist/execution/shared/usage.d.ts +9 -0
  206. package/dist/execution/shared/usage.d.ts.map +1 -0
  207. package/dist/execution/task/index.d.ts +6 -0
  208. package/dist/execution/task/index.d.ts.map +1 -0
  209. package/dist/execution/task/observer.d.ts +80 -0
  210. package/dist/execution/task/observer.d.ts.map +1 -0
  211. package/dist/execution/task/runner.d.ts +39 -0
  212. package/dist/execution/task/runner.d.ts.map +1 -0
  213. package/dist/execution/task/types.d.ts +85 -0
  214. package/dist/execution/task/types.d.ts.map +1 -0
  215. package/dist/execution/turn/engine/commit-batch.d.ts +16 -0
  216. package/dist/execution/turn/engine/commit-batch.d.ts.map +1 -0
  217. package/dist/execution/turn/engine/engine.d.ts +32 -0
  218. package/dist/execution/turn/engine/engine.d.ts.map +1 -0
  219. package/dist/execution/turn/engine/index.d.ts +12 -0
  220. package/dist/execution/turn/engine/index.d.ts.map +1 -0
  221. package/dist/execution/turn/engine/types.d.ts +67 -0
  222. package/dist/execution/turn/engine/types.d.ts.map +1 -0
  223. package/dist/execution/turn/index.d.ts +18 -0
  224. package/dist/execution/turn/index.d.ts.map +1 -0
  225. package/dist/execution/turn/index.js +52 -0
  226. package/dist/execution/turn/runner/commit.d.ts +11 -0
  227. package/dist/execution/turn/runner/commit.d.ts.map +1 -0
  228. package/dist/execution/turn/runner/index.d.ts +16 -0
  229. package/dist/execution/turn/runner/index.d.ts.map +1 -0
  230. package/dist/execution/turn/runner/prepare.d.ts +6 -0
  231. package/dist/execution/turn/runner/prepare.d.ts.map +1 -0
  232. package/dist/execution/turn/runner/stream-step.d.ts +8 -0
  233. package/dist/execution/turn/runner/stream-step.d.ts.map +1 -0
  234. package/dist/execution/turn/runner/tool-batch.d.ts +13 -0
  235. package/dist/execution/turn/runner/tool-batch.d.ts.map +1 -0
  236. package/dist/execution/turn/runner/types.d.ts +111 -0
  237. package/dist/execution/turn/runner/types.d.ts.map +1 -0
  238. package/dist/execution/turn/state.d.ts +110 -0
  239. package/dist/execution/turn/state.d.ts.map +1 -0
  240. package/dist/execution/turn/step-ledger.d.ts +89 -0
  241. package/dist/execution/turn/step-ledger.d.ts.map +1 -0
  242. package/dist/execution/turn/step-processing/doom-loop.d.ts +28 -0
  243. package/dist/execution/turn/step-processing/doom-loop.d.ts.map +1 -0
  244. package/dist/execution/turn/step-processing/index.d.ts +14 -0
  245. package/dist/execution/turn/step-processing/index.d.ts.map +1 -0
  246. package/dist/execution/turn/step-processing/overflow.d.ts +17 -0
  247. package/dist/execution/turn/step-processing/overflow.d.ts.map +1 -0
  248. package/dist/execution/turn/step-processing/process.d.ts +7 -0
  249. package/dist/execution/turn/step-processing/process.d.ts.map +1 -0
  250. package/dist/execution/turn/step-processing/types.d.ts +65 -0
  251. package/dist/execution/turn/step-processing/types.d.ts.map +1 -0
  252. package/dist/execution/workflow/index.d.ts +12 -0
  253. package/dist/execution/workflow/index.d.ts.map +1 -0
  254. package/dist/execution/workflow/index.js +39 -0
  255. package/dist/execution/workflow/planner/apply.d.ts +30 -0
  256. package/dist/execution/workflow/planner/apply.d.ts.map +1 -0
  257. package/dist/execution/workflow/planner/helpers.d.ts +6 -0
  258. package/dist/execution/workflow/planner/helpers.d.ts.map +1 -0
  259. package/dist/execution/workflow/planner/index.d.ts +13 -0
  260. package/dist/execution/workflow/planner/index.d.ts.map +1 -0
  261. package/dist/execution/workflow/planner/plan.d.ts +7 -0
  262. package/dist/execution/workflow/planner/plan.d.ts.map +1 -0
  263. package/dist/execution/workflow/planner/types.d.ts +49 -0
  264. package/dist/execution/workflow/planner/types.d.ts.map +1 -0
  265. package/dist/execution/workflow/snapshot.d.ts +11 -0
  266. package/dist/execution/workflow/snapshot.d.ts.map +1 -0
  267. package/dist/execution/workflow/state.d.ts +161 -0
  268. package/dist/execution/workflow/state.d.ts.map +1 -0
  269. package/dist/human/controller.d.ts +24 -0
  270. package/dist/human/controller.d.ts.map +1 -0
  271. package/dist/human/handler.d.ts +15 -0
  272. package/dist/human/handler.d.ts.map +1 -0
  273. package/dist/human/index.d.ts +5 -0
  274. package/dist/human/index.d.ts.map +1 -0
  275. package/dist/human/tool.d.ts +17 -0
  276. package/dist/human/tool.d.ts.map +1 -0
  277. package/dist/human/types.d.ts +62 -0
  278. package/dist/human/types.d.ts.map +1 -0
  279. package/dist/index.d.ts +66 -567
  280. package/dist/index.d.ts.map +1 -0
  281. package/dist/index.js +2482 -1846
  282. package/dist/inference/defaults.d.ts +8 -0
  283. package/dist/inference/defaults.d.ts.map +1 -0
  284. package/dist/inference/errors/classify.d.ts +5 -0
  285. package/dist/inference/errors/classify.d.ts.map +1 -0
  286. package/dist/inference/errors/extract.d.ts +3 -0
  287. package/dist/inference/errors/extract.d.ts.map +1 -0
  288. package/dist/inference/errors/index.d.ts +8 -11
  289. package/dist/inference/errors/index.d.ts.map +1 -0
  290. package/dist/inference/errors/llm-error.d.ts +14 -0
  291. package/dist/inference/errors/llm-error.d.ts.map +1 -0
  292. package/dist/inference/errors/types.d.ts +18 -0
  293. package/dist/inference/errors/types.d.ts.map +1 -0
  294. package/dist/inference/errors/utils.d.ts +5 -0
  295. package/dist/inference/errors/utils.d.ts.map +1 -0
  296. package/dist/inference/index.d.ts +17 -49
  297. package/dist/inference/index.d.ts.map +1 -0
  298. package/dist/inference/index.js +7 -7
  299. package/dist/inference/middleware-support.d.ts +14 -0
  300. package/dist/inference/middleware-support.d.ts.map +1 -0
  301. package/dist/{model-messages-n_ZMZwIm.d.ts → inference/model-messages.d.ts} +4 -6
  302. package/dist/inference/model-messages.d.ts.map +1 -0
  303. package/dist/inference/retry.d.ts +73 -0
  304. package/dist/inference/retry.d.ts.map +1 -0
  305. package/dist/inference/stream.d.ts +16 -0
  306. package/dist/inference/stream.d.ts.map +1 -0
  307. package/dist/inference/toolset.d.ts +26 -0
  308. package/dist/inference/toolset.d.ts.map +1 -0
  309. package/dist/inference/types.d.ts +129 -0
  310. package/dist/inference/types.d.ts.map +1 -0
  311. package/dist/intervention/follow-up-policy.d.ts +41 -0
  312. package/dist/intervention/follow-up-policy.d.ts.map +1 -0
  313. package/dist/intervention/index.d.ts +5 -0
  314. package/dist/intervention/index.d.ts.map +1 -0
  315. package/dist/intervention/intervention.d.ts +130 -0
  316. package/dist/intervention/intervention.d.ts.map +1 -0
  317. package/dist/intervention/types.d.ts +74 -0
  318. package/dist/intervention/types.d.ts.map +1 -0
  319. package/dist/logger/index.d.ts +5 -47
  320. package/dist/logger/index.d.ts.map +1 -0
  321. package/dist/logger/logger.d.ts +46 -0
  322. package/dist/logger/logger.d.ts.map +1 -0
  323. package/dist/{types-RSCv7nQ4.d.ts → logger/types.d.ts} +6 -7
  324. package/dist/logger/types.d.ts.map +1 -0
  325. package/dist/mcp/auth.d.ts +109 -0
  326. package/dist/mcp/auth.d.ts.map +1 -0
  327. package/dist/mcp/diagnostics.d.ts +23 -0
  328. package/dist/mcp/diagnostics.d.ts.map +1 -0
  329. package/dist/mcp/factories.d.ts +47 -0
  330. package/dist/mcp/factories.d.ts.map +1 -0
  331. package/dist/mcp/index.d.ts +14 -175
  332. package/dist/mcp/index.d.ts.map +1 -0
  333. package/dist/mcp/index.js +1 -1
  334. package/dist/mcp/manager.d.ts +45 -0
  335. package/dist/mcp/manager.d.ts.map +1 -0
  336. package/dist/mcp/modules.d.ts +6 -0
  337. package/dist/mcp/modules.d.ts.map +1 -0
  338. package/dist/{types-DMjoFKKv.d.ts → mcp/types.d.ts} +18 -19
  339. package/dist/mcp/types.d.ts.map +1 -0
  340. package/dist/memory/config.d.ts +4 -0
  341. package/dist/memory/config.d.ts.map +1 -0
  342. package/dist/memory/format.d.ts +8 -0
  343. package/dist/memory/format.d.ts.map +1 -0
  344. package/dist/memory/index.d.ts +5 -0
  345. package/dist/memory/index.d.ts.map +1 -0
  346. package/dist/memory/index.js +14 -0
  347. package/dist/memory/middleware.d.ts +14 -0
  348. package/dist/memory/middleware.d.ts.map +1 -0
  349. package/dist/memory/types.d.ts +232 -0
  350. package/dist/memory/types.d.ts.map +1 -0
  351. package/dist/middleware/approval.d.ts +70 -0
  352. package/dist/middleware/approval.d.ts.map +1 -0
  353. package/dist/middleware/index.d.ts +24 -110
  354. package/dist/middleware/index.d.ts.map +1 -0
  355. package/dist/middleware/index.js +2 -2
  356. package/dist/middleware/prompt-cache/cache.d.ts +44 -0
  357. package/dist/middleware/prompt-cache/cache.d.ts.map +1 -0
  358. package/dist/middleware/prompt-cache/index.d.ts +14 -0
  359. package/dist/middleware/prompt-cache/index.d.ts.map +1 -0
  360. package/dist/middleware/prompt-cache/types.d.ts +50 -0
  361. package/dist/middleware/prompt-cache/types.d.ts.map +1 -0
  362. package/dist/middleware/runner.d.ts +100 -0
  363. package/dist/middleware/runner.d.ts.map +1 -0
  364. package/dist/middleware/telemetry/index.d.ts +12 -0
  365. package/dist/middleware/telemetry/index.d.ts.map +1 -0
  366. package/dist/middleware/telemetry/otel.d.ts +4 -0
  367. package/dist/middleware/telemetry/otel.d.ts.map +1 -0
  368. package/dist/middleware/telemetry/provider.d.ts +3 -0
  369. package/dist/middleware/telemetry/provider.d.ts.map +1 -0
  370. package/dist/middleware/telemetry/types.d.ts +150 -0
  371. package/dist/middleware/telemetry/types.d.ts.map +1 -0
  372. package/dist/middleware/types.d.ts +371 -0
  373. package/dist/middleware/types.d.ts.map +1 -0
  374. package/dist/models/cache/adapters.d.ts +4 -0
  375. package/dist/models/cache/adapters.d.ts.map +1 -0
  376. package/dist/models/cache/index.d.ts +5 -0
  377. package/dist/models/cache/index.d.ts.map +1 -0
  378. package/dist/models/cache/manager.d.ts +32 -0
  379. package/dist/models/cache/manager.d.ts.map +1 -0
  380. package/dist/models/cache/types.d.ts +17 -0
  381. package/dist/models/cache/types.d.ts.map +1 -0
  382. package/dist/models/capability-resolver.d.ts +104 -0
  383. package/dist/models/capability-resolver.d.ts.map +1 -0
  384. package/dist/models/identifiers.d.ts +23 -0
  385. package/dist/models/identifiers.d.ts.map +1 -0
  386. package/dist/models/index.d.ts +35 -256
  387. package/dist/models/index.d.ts.map +1 -0
  388. package/dist/models/index.js +1 -1
  389. package/dist/models/overrides.d.ts +10 -0
  390. package/dist/models/overrides.d.ts.map +1 -0
  391. package/dist/models/profiles.d.ts +38 -0
  392. package/dist/models/profiles.d.ts.map +1 -0
  393. package/dist/models/reasoning/config.d.ts +49 -0
  394. package/dist/models/reasoning/config.d.ts.map +1 -0
  395. package/dist/models/reasoning/index.d.ts +12 -4
  396. package/dist/models/reasoning/index.d.ts.map +1 -0
  397. package/dist/models/reasoning/index.js +1 -1
  398. package/dist/models/reasoning/providers.d.ts +63 -0
  399. package/dist/models/reasoning/providers.d.ts.map +1 -0
  400. package/dist/{types-CQaXbRsS.d.ts → models/reasoning/types.d.ts} +7 -8
  401. package/dist/models/reasoning/types.d.ts.map +1 -0
  402. package/dist/models/remote/fetcher.d.ts +13 -0
  403. package/dist/models/remote/fetcher.d.ts.map +1 -0
  404. package/dist/models/remote/index.d.ts +8 -0
  405. package/dist/models/remote/index.d.ts.map +1 -0
  406. package/dist/models/remote/network.d.ts +6 -0
  407. package/dist/models/remote/network.d.ts.map +1 -0
  408. package/dist/models/remote/source.d.ts +16 -0
  409. package/dist/models/remote/source.d.ts.map +1 -0
  410. package/dist/models/remote/transform.d.ts +4 -0
  411. package/dist/models/remote/transform.d.ts.map +1 -0
  412. package/dist/models/remote/types.d.ts +28 -0
  413. package/dist/models/remote/types.d.ts.map +1 -0
  414. package/dist/models/resolver.d.ts +26 -0
  415. package/dist/models/resolver.d.ts.map +1 -0
  416. package/dist/models/types.d.ts +137 -0
  417. package/dist/models/types.d.ts.map +1 -0
  418. package/dist/plugin/compatibility.d.ts +11 -0
  419. package/dist/plugin/compatibility.d.ts.map +1 -0
  420. package/dist/plugin/define.d.ts +77 -0
  421. package/dist/plugin/define.d.ts.map +1 -0
  422. package/dist/plugin/event-bus.d.ts +31 -0
  423. package/dist/plugin/event-bus.d.ts.map +1 -0
  424. package/dist/plugin/index.d.ts +9 -458
  425. package/dist/plugin/index.d.ts.map +1 -0
  426. package/dist/plugin/loader.d.ts +63 -0
  427. package/dist/plugin/loader.d.ts.map +1 -0
  428. package/dist/plugin/registry.d.ts +81 -0
  429. package/dist/plugin/registry.d.ts.map +1 -0
  430. package/dist/plugin/settings.d.ts +36 -0
  431. package/dist/plugin/settings.d.ts.map +1 -0
  432. package/dist/plugin/types.d.ts +168 -0
  433. package/dist/plugin/types.d.ts.map +1 -0
  434. package/dist/profiles/apply.d.ts +17 -0
  435. package/dist/profiles/apply.d.ts.map +1 -0
  436. package/dist/profiles/builtins.d.ts +18 -0
  437. package/dist/profiles/builtins.d.ts.map +1 -0
  438. package/dist/profiles/index.d.ts +12 -55
  439. package/dist/profiles/index.d.ts.map +1 -0
  440. package/dist/profiles/patterns.d.ts +12 -0
  441. package/dist/profiles/patterns.d.ts.map +1 -0
  442. package/dist/profiles/types.d.ts +48 -0
  443. package/dist/profiles/types.d.ts.map +1 -0
  444. package/dist/prompt/builder/builder.d.ts +27 -0
  445. package/dist/prompt/builder/builder.d.ts.map +1 -0
  446. package/dist/prompt/builder/index.d.ts +11 -0
  447. package/dist/prompt/builder/index.d.ts.map +1 -0
  448. package/dist/prompt/builder/priorities.d.ts +13 -0
  449. package/dist/prompt/builder/priorities.d.ts.map +1 -0
  450. package/dist/prompt/builder/sections.d.ts +30 -0
  451. package/dist/prompt/builder/sections.d.ts.map +1 -0
  452. package/dist/prompt/environment.d.ts +46 -0
  453. package/dist/prompt/environment.d.ts.map +1 -0
  454. package/dist/prompt/index.d.ts +31 -220
  455. package/dist/prompt/index.d.ts.map +1 -0
  456. package/dist/prompt/index.js +3 -1
  457. package/dist/prompt/instructions.d.ts +104 -0
  458. package/dist/prompt/instructions.d.ts.map +1 -0
  459. package/dist/prompt/templates.d.ts +56 -0
  460. package/dist/prompt/templates.d.ts.map +1 -0
  461. package/dist/prompt/types.d.ts +218 -0
  462. package/dist/prompt/types.d.ts.map +1 -0
  463. package/dist/safety/errors.d.ts +18 -0
  464. package/dist/safety/errors.d.ts.map +1 -0
  465. package/dist/safety/handler.d.ts +16 -0
  466. package/dist/safety/handler.d.ts.map +1 -0
  467. package/dist/safety/index.d.ts +11 -133
  468. package/dist/safety/index.d.ts.map +1 -0
  469. package/dist/safety/patterns.d.ts +17 -0
  470. package/dist/safety/patterns.d.ts.map +1 -0
  471. package/dist/safety/policy.d.ts +31 -0
  472. package/dist/safety/policy.d.ts.map +1 -0
  473. package/dist/safety/presets.d.ts +43 -0
  474. package/dist/safety/presets.d.ts.map +1 -0
  475. package/dist/safety/risk.d.ts +14 -0
  476. package/dist/safety/risk.d.ts.map +1 -0
  477. package/dist/safety/types.d.ts +165 -0
  478. package/dist/safety/types.d.ts.map +1 -0
  479. package/dist/sandbox/index.d.ts +2 -81
  480. package/dist/sandbox/index.d.ts.map +1 -0
  481. package/dist/sandbox/types.d.ts +79 -0
  482. package/dist/sandbox/types.d.ts.map +1 -0
  483. package/dist/skill/discovery/constants.d.ts +6 -0
  484. package/dist/skill/discovery/constants.d.ts.map +1 -0
  485. package/dist/skill/discovery/dedupe.d.ts +3 -0
  486. package/dist/skill/discovery/dedupe.d.ts.map +1 -0
  487. package/dist/skill/discovery/discover.d.ts +3 -0
  488. package/dist/skill/discovery/discover.d.ts.map +1 -0
  489. package/dist/skill/discovery/fs.d.ts +4 -0
  490. package/dist/skill/discovery/fs.d.ts.map +1 -0
  491. package/dist/skill/discovery/index.d.ts +6 -0
  492. package/dist/skill/discovery/index.d.ts.map +1 -0
  493. package/dist/skill/discovery/scan.d.ts +3 -0
  494. package/dist/skill/discovery/scan.d.ts.map +1 -0
  495. package/dist/skill/discovery/types.d.ts +15 -0
  496. package/dist/skill/discovery/types.d.ts.map +1 -0
  497. package/dist/skill/index.d.ts +67 -89
  498. package/dist/skill/index.d.ts.map +1 -0
  499. package/dist/skill/index.js +2 -2
  500. package/dist/skill/loader/constants.d.ts +5 -0
  501. package/dist/skill/loader/constants.d.ts.map +1 -0
  502. package/dist/skill/loader/frontmatter.d.ts +5 -0
  503. package/dist/skill/loader/frontmatter.d.ts.map +1 -0
  504. package/dist/skill/loader/index.d.ts +8 -0
  505. package/dist/skill/loader/index.d.ts.map +1 -0
  506. package/dist/skill/loader/metadata.d.ts +3 -0
  507. package/dist/skill/loader/metadata.d.ts.map +1 -0
  508. package/dist/skill/loader/resources.d.ts +5 -0
  509. package/dist/skill/loader/resources.d.ts.map +1 -0
  510. package/dist/skill/registry.d.ts +177 -0
  511. package/dist/skill/registry.d.ts.map +1 -0
  512. package/dist/skill/tools.d.ts +77 -0
  513. package/dist/skill/tools.d.ts.map +1 -0
  514. package/dist/skill/types.d.ts +291 -0
  515. package/dist/skill/types.d.ts.map +1 -0
  516. package/dist/storage/file/helpers.d.ts +16 -0
  517. package/dist/storage/file/helpers.d.ts.map +1 -0
  518. package/dist/storage/file/index.d.ts +6 -0
  519. package/dist/storage/file/index.d.ts.map +1 -0
  520. package/dist/storage/file/storage.d.ts +29 -0
  521. package/dist/storage/file/storage.d.ts.map +1 -0
  522. package/dist/storage/file/types.d.ts +6 -0
  523. package/dist/storage/file/types.d.ts.map +1 -0
  524. package/dist/storage/index.d.ts +11 -188
  525. package/dist/storage/index.d.ts.map +1 -0
  526. package/dist/storage/index.js +2 -1
  527. package/dist/storage/lock.d.ts +18 -0
  528. package/dist/storage/lock.d.ts.map +1 -0
  529. package/dist/storage/manager/default.d.ts +11 -0
  530. package/dist/storage/manager/default.d.ts.map +1 -0
  531. package/dist/storage/manager/index.d.ts +12 -0
  532. package/dist/storage/manager/index.d.ts.map +1 -0
  533. package/dist/storage/manager/session-manager.d.ts +57 -0
  534. package/dist/storage/manager/session-manager.d.ts.map +1 -0
  535. package/dist/storage/manager/types.d.ts +42 -0
  536. package/dist/storage/manager/types.d.ts.map +1 -0
  537. package/dist/storage/memory.d.ts +22 -0
  538. package/dist/storage/memory.d.ts.map +1 -0
  539. package/dist/storage/paths.d.ts +37 -0
  540. package/dist/storage/paths.d.ts.map +1 -0
  541. package/dist/storage/types.d.ts +205 -0
  542. package/dist/storage/types.d.ts.map +1 -0
  543. package/dist/storage/utils.d.ts +77 -0
  544. package/dist/storage/utils.d.ts.map +1 -0
  545. package/dist/subagents/index.d.ts +8 -179
  546. package/dist/subagents/index.d.ts.map +1 -0
  547. package/dist/subagents/index.js +5 -4
  548. package/dist/subagents/installation.d.ts +23 -0
  549. package/dist/subagents/installation.d.ts.map +1 -0
  550. package/dist/subagents/results.d.ts +15 -0
  551. package/dist/subagents/results.d.ts.map +1 -0
  552. package/dist/subagents/roles/discovery.d.ts +38 -0
  553. package/dist/subagents/roles/discovery.d.ts.map +1 -0
  554. package/dist/subagents/roles/index.d.ts +5 -0
  555. package/dist/subagents/roles/index.d.ts.map +1 -0
  556. package/dist/subagents/roles/markdown-profile.d.ts +61 -0
  557. package/dist/subagents/roles/markdown-profile.d.ts.map +1 -0
  558. package/dist/subagents/tool-factories.d.ts +11 -0
  559. package/dist/subagents/tool-factories.d.ts.map +1 -0
  560. package/dist/subagents/tools.d.ts +13 -0
  561. package/dist/subagents/tools.d.ts.map +1 -0
  562. package/dist/subagents/types.d.ts +21 -0
  563. package/dist/subagents/types.d.ts.map +1 -0
  564. package/dist/team/coordinator/coordinator.d.ts +342 -0
  565. package/dist/team/coordinator/coordinator.d.ts.map +1 -0
  566. package/dist/team/coordinator/inbox.d.ts +99 -0
  567. package/dist/team/coordinator/inbox.d.ts.map +1 -0
  568. package/dist/team/coordinator/index.d.ts +19 -0
  569. package/dist/team/coordinator/index.d.ts.map +1 -0
  570. package/dist/team/coordinator/planning.d.ts +33 -0
  571. package/dist/team/coordinator/planning.d.ts.map +1 -0
  572. package/dist/team/coordinator/policy.d.ts +31 -0
  573. package/dist/team/coordinator/policy.d.ts.map +1 -0
  574. package/dist/team/coordinator/round-engine.d.ts +25 -0
  575. package/dist/team/coordinator/round-engine.d.ts.map +1 -0
  576. package/dist/team/coordinator/synthesis.d.ts +20 -0
  577. package/dist/team/coordinator/synthesis.d.ts.map +1 -0
  578. package/dist/team/coordinator/turn.d.ts +107 -0
  579. package/dist/team/coordinator/turn.d.ts.map +1 -0
  580. package/dist/team/coordinator/types.d.ts +344 -0
  581. package/dist/team/coordinator/types.d.ts.map +1 -0
  582. package/dist/team/events.d.ts +148 -0
  583. package/dist/team/events.d.ts.map +1 -0
  584. package/dist/team/execution.d.ts +51 -0
  585. package/dist/team/execution.d.ts.map +1 -0
  586. package/dist/team/index.d.ts +23 -545
  587. package/dist/team/index.d.ts.map +1 -0
  588. package/dist/team/index.js +2 -2
  589. package/dist/team/mailbox.d.ts +91 -0
  590. package/dist/team/mailbox.d.ts.map +1 -0
  591. package/dist/team/notifications.d.ts +23 -0
  592. package/dist/team/notifications.d.ts.map +1 -0
  593. package/dist/team/permissions.d.ts +88 -0
  594. package/dist/team/permissions.d.ts.map +1 -0
  595. package/dist/team/shutdown.d.ts +38 -0
  596. package/dist/team/shutdown.d.ts.map +1 -0
  597. package/dist/team/task-board.d.ts +161 -0
  598. package/dist/team/task-board.d.ts.map +1 -0
  599. package/dist/team/types.d.ts +233 -0
  600. package/dist/team/types.d.ts.map +1 -0
  601. package/dist/team/work-loop.d.ts +30 -0
  602. package/dist/team/work-loop.d.ts.map +1 -0
  603. package/dist/tool/executor.d.ts +59 -0
  604. package/dist/tool/executor.d.ts.map +1 -0
  605. package/dist/tool/host/index.d.ts +7 -38
  606. package/dist/tool/host/index.d.ts.map +1 -0
  607. package/dist/tool/host/local.d.ts +15 -0
  608. package/dist/tool/host/local.d.ts.map +1 -0
  609. package/dist/tool/host/registry.d.ts +17 -0
  610. package/dist/tool/host/registry.d.ts.map +1 -0
  611. package/dist/{types-C_LCeYNg.d.ts → tool/host/types.d.ts} +6 -7
  612. package/dist/tool/host/types.d.ts.map +1 -0
  613. package/dist/tool/index.d.ts +21 -285
  614. package/dist/tool/index.d.ts.map +1 -0
  615. package/dist/tool/index.js +4 -3
  616. package/dist/tool/registry.d.ts +130 -0
  617. package/dist/tool/registry.d.ts.map +1 -0
  618. package/dist/tool/replay.d.ts +11 -0
  619. package/dist/tool/replay.d.ts.map +1 -0
  620. package/dist/tool/tool-search.d.ts +50 -0
  621. package/dist/tool/tool-search.d.ts.map +1 -0
  622. package/dist/tool/tool.d.ts +308 -0
  623. package/dist/tool/tool.d.ts.map +1 -0
  624. package/dist/tool/truncation.d.ts +34 -0
  625. package/dist/tool/truncation.d.ts.map +1 -0
  626. package/dist/tool/turn-tools.d.ts +71 -0
  627. package/dist/tool/turn-tools.d.ts.map +1 -0
  628. package/dist/tracking/file-tracking.d.ts +25 -0
  629. package/dist/tracking/file-tracking.d.ts.map +1 -0
  630. package/dist/tracking/index.d.ts +9 -0
  631. package/dist/tracking/index.d.ts.map +1 -0
  632. package/dist/tracking/turn-tracker/diff.d.ts +11 -0
  633. package/dist/tracking/turn-tracker/diff.d.ts.map +1 -0
  634. package/dist/tracking/turn-tracker/index.d.ts +11 -0
  635. package/dist/tracking/turn-tracker/index.d.ts.map +1 -0
  636. package/dist/tracking/turn-tracker/tracker.d.ts +31 -0
  637. package/dist/tracking/turn-tracker/tracker.d.ts.map +1 -0
  638. package/dist/tracking/turn-tracker/types.d.ts +66 -0
  639. package/dist/tracking/turn-tracker/types.d.ts.map +1 -0
  640. package/dist/types/compaction.d.ts +142 -0
  641. package/dist/types/compaction.d.ts.map +1 -0
  642. package/dist/types/doom-loop.d.ts +25 -0
  643. package/dist/types/doom-loop.d.ts.map +1 -0
  644. package/dist/types/events.d.ts +194 -0
  645. package/dist/types/events.d.ts.map +1 -0
  646. package/dist/types/index.d.ts +17 -0
  647. package/dist/types/index.d.ts.map +1 -0
  648. package/dist/types/messages.d.ts +119 -0
  649. package/dist/types/messages.d.ts.map +1 -0
  650. package/dist/types/stream.d.ts +172 -0
  651. package/dist/types/stream.d.ts.map +1 -0
  652. package/dist/types/tool.d.ts +309 -0
  653. package/dist/types/tool.d.ts.map +1 -0
  654. package/dist/types/turn-source.d.ts +36 -0
  655. package/dist/types/turn-source.d.ts.map +1 -0
  656. package/dist/utils/sleep.d.ts +7 -0
  657. package/dist/utils/sleep.d.ts.map +1 -0
  658. package/package.json +45 -8
  659. package/dist/chunk-CJI7PVS2.js +0 -58
  660. package/dist/chunk-V6ETEYST.js +0 -2091
  661. package/dist/index-BCqEGzBj.d.ts +0 -251
  662. package/dist/instance-Bg61WSyz.d.ts +0 -6004
  663. package/dist/llm-error-D93FNNLY.d.ts +0 -32
  664. package/dist/turn-tools/index.d.ts +0 -12
  665. package/dist/turn-tools/index.js +0 -1
  666. package/dist/{chunk-O2WCYSXQ.js → chunk-3NBTQHVV.js} +0 -0
  667. package/dist/{chunk-Q742PSH3.js → chunk-MJML3A2F.js} +36 -36
@@ -0,0 +1,1155 @@
1
+ import {
2
+ estimateConversationTokens,
3
+ estimateMessageTokens,
4
+ estimateTokens,
5
+ isAgentContextFragmentMessage,
6
+ truncateTextMiddle,
7
+ truncateTextPrefix
8
+ } from "./chunk-AAGKWUXR.js";
9
+
10
+ // src/context/window/budget.ts
11
+ var DEFAULT_CONTEXT_LIMITS = {
12
+ contextWindow: 128e3,
13
+ reserveTokens: 16e3,
14
+ protectedTokens: 4e4,
15
+ pruneMinimum: 2e4
16
+ };
17
+ var DEFAULT_SUMMARY_MAX_OUTPUT_TOKENS = 2e3;
18
+ var DEFAULT_SUMMARY_MAX_INPUT_TOKENS = 24e3;
19
+ var DEFAULT_COMPACTION_EFFECTIVE_MIN_SAVINGS_RATIO = 0.02;
20
+ function getUsableTokenLimit(limits) {
21
+ return limits.contextWindow - limits.reserveTokens;
22
+ }
23
+ function isContextOverflowing(tokens, limits = DEFAULT_CONTEXT_LIMITS) {
24
+ return tokens > getUsableTokenLimit(limits);
25
+ }
26
+ function shouldPruneContext(tokens, limits = DEFAULT_CONTEXT_LIMITS) {
27
+ if (tokens < limits.pruneMinimum) return false;
28
+ return isContextOverflowing(tokens, limits);
29
+ }
30
+ function finiteNonNegativeInteger(value) {
31
+ if (!Number.isFinite(value)) return 0;
32
+ return Math.max(0, Math.floor(value));
33
+ }
34
+ function createCompactionEffectiveness(tokensBefore, tokensAfter, minSavingsRatio = DEFAULT_COMPACTION_EFFECTIVE_MIN_SAVINGS_RATIO) {
35
+ const before = finiteNonNegativeInteger(tokensBefore);
36
+ const after = finiteNonNegativeInteger(tokensAfter);
37
+ const removed = Math.max(0, before - after);
38
+ const savingsRatio = before > 0 ? removed / before : 0;
39
+ const effective = removed > 0 && savingsRatio >= Math.max(0, Number.isFinite(minSavingsRatio) ? minSavingsRatio : 0);
40
+ return {
41
+ tokensBefore: before,
42
+ tokensAfter: after,
43
+ tokensRemoved: removed,
44
+ savingsRatio,
45
+ effective
46
+ };
47
+ }
48
+ function finitePositiveInteger(value) {
49
+ if (typeof value !== "number" || !Number.isFinite(value)) return void 0;
50
+ const normalized = Math.floor(value);
51
+ return normalized > 0 ? normalized : void 0;
52
+ }
53
+ function clampRatio(value) {
54
+ if (typeof value !== "number" || !Number.isFinite(value)) return void 0;
55
+ if (value <= 0) return void 0;
56
+ return Math.min(1, value);
57
+ }
58
+ function resolveSummaryOutputTokens(options) {
59
+ const limits = options.limits ?? DEFAULT_CONTEXT_LIMITS;
60
+ const configuredCap = finitePositiveInteger(options.summaryMaxOutputTokens) ?? DEFAULT_SUMMARY_MAX_OUTPUT_TOKENS;
61
+ const reserveCap = Math.max(1, Math.floor(limits.reserveTokens * 0.8));
62
+ const cap = Math.max(1, Math.min(configuredCap, reserveCap));
63
+ const ratio = clampRatio(options.summaryTargetRatio);
64
+ if (ratio === void 0) {
65
+ return cap;
66
+ }
67
+ const inputTokens = finitePositiveInteger(options.inputTokens) ?? 0;
68
+ const target = Math.max(1, Math.ceil(inputTokens * ratio));
69
+ return Math.min(cap, target);
70
+ }
71
+
72
+ // src/context/window/cut-planner.ts
73
+ function hasToolCalls(message) {
74
+ return message.role === "assistant" && Array.isArray(message.toolCalls) && message.toolCalls.length > 0;
75
+ }
76
+ function getToolCallIds(message) {
77
+ if (!hasToolCalls(message)) return [];
78
+ return message.toolCalls.map((toolCall) => toolCall.toolCallId).filter((id) => id.length > 0);
79
+ }
80
+ function hasValidToolResultShape(messages) {
81
+ const pendingToolCallIds = /* @__PURE__ */ new Set();
82
+ for (const message of messages) {
83
+ if (message.role === "tool") {
84
+ if (!pendingToolCallIds.has(message.toolCallId)) {
85
+ return false;
86
+ }
87
+ pendingToolCallIds.delete(message.toolCallId);
88
+ continue;
89
+ }
90
+ if (pendingToolCallIds.size > 0) {
91
+ return false;
92
+ }
93
+ for (const toolCallId of getToolCallIds(message)) {
94
+ pendingToolCallIds.add(toolCallId);
95
+ }
96
+ }
97
+ return pendingToolCallIds.size === 0;
98
+ }
99
+ function isLocallySafeCutBoundary(messages, index) {
100
+ if (index <= 0 || index >= messages.length) return false;
101
+ const firstKept = messages[index];
102
+ if (!firstKept || firstKept.role === "tool") return false;
103
+ if (hasToolCalls(firstKept)) {
104
+ const next = messages[index + 1];
105
+ return next?.role === "tool";
106
+ }
107
+ return true;
108
+ }
109
+ function isSafeCutBoundary(messages, index) {
110
+ return isLocallySafeCutBoundary(messages, index) && hasValidToolResultShape(messages.slice(index));
111
+ }
112
+ function isPreferredCutBoundary(messages, index) {
113
+ const firstKept = messages[index];
114
+ if (!firstKept) return false;
115
+ if (firstKept.role === "system") return true;
116
+ return firstKept.role === "user" && !isAgentContextFragmentMessage(firstKept);
117
+ }
118
+ function findLatestUserMessageIndex(messages) {
119
+ for (let i = messages.length - 1; i >= 0; i--) {
120
+ const message = messages[i];
121
+ if (message.role === "user" && !isAgentContextFragmentMessage(message)) {
122
+ return i;
123
+ }
124
+ }
125
+ return void 0;
126
+ }
127
+ function getAdjustedCutReason(options) {
128
+ if (options.cutIndex === options.targetCutIndex) {
129
+ return "protected-window";
130
+ }
131
+ if (options.latestUserIndex !== void 0 && options.targetCutIndex > options.latestUserIndex && options.cutIndex <= options.latestUserIndex) {
132
+ return "latest-user";
133
+ }
134
+ return options.targetBoundaryWasSafe ? "turn-boundary" : "tool-boundary";
135
+ }
136
+ function buildCutPlan(messages, cutIndex, protectedTokens, reason) {
137
+ if (cutIndex === 0) {
138
+ return {
139
+ kind: "conversation",
140
+ cutIndex: 0,
141
+ removedMessages: [],
142
+ keptMessages: [...messages],
143
+ tokensRemoved: 0,
144
+ tokensKept: estimateConversationTokens(messages),
145
+ protectedTokens,
146
+ reason,
147
+ historyMessages: [],
148
+ currentTurnPrefixMessages: []
149
+ };
150
+ }
151
+ const removedMessages = messages.slice(0, cutIndex);
152
+ const keptMessages = messages.slice(cutIndex);
153
+ return {
154
+ kind: "conversation",
155
+ cutIndex,
156
+ removedMessages,
157
+ keptMessages,
158
+ tokensRemoved: estimateConversationTokens(removedMessages),
159
+ tokensKept: estimateConversationTokens(keptMessages),
160
+ protectedTokens,
161
+ reason,
162
+ historyMessages: removedMessages,
163
+ currentTurnPrefixMessages: []
164
+ };
165
+ }
166
+ function buildSplitTurnPrefixPlan(messages, cutIndex, protectedTokens, currentTurnStartIndex) {
167
+ const removedMessages = messages.slice(0, cutIndex);
168
+ const keptMessages = messages.slice(cutIndex);
169
+ const historyMessages = messages.slice(0, currentTurnStartIndex);
170
+ const currentTurnPrefixMessages = messages.slice(
171
+ currentTurnStartIndex,
172
+ cutIndex
173
+ );
174
+ return {
175
+ kind: "split-turn-prefix",
176
+ cutIndex,
177
+ removedMessages,
178
+ keptMessages,
179
+ tokensRemoved: estimateConversationTokens(removedMessages),
180
+ tokensKept: estimateConversationTokens(keptMessages),
181
+ protectedTokens,
182
+ reason: "split-turn-prefix",
183
+ historyMessages,
184
+ currentTurnPrefixMessages,
185
+ currentTurnStartIndex
186
+ };
187
+ }
188
+ function getProtectedWindowStart(messages, protectedTokens) {
189
+ let tokensFromEnd = 0;
190
+ for (let i = messages.length - 1; i >= 0; i--) {
191
+ tokensFromEnd += estimateMessageTokens(messages[i]);
192
+ if (tokensFromEnd >= protectedTokens) {
193
+ return i;
194
+ }
195
+ }
196
+ return messages.length;
197
+ }
198
+ function findSplitTurnPrefixPlan(messages, protectedTokens, maxKeptTokens, normalPlan) {
199
+ const currentTurnStartIndex = findLatestUserMessageIndex(messages);
200
+ if (currentTurnStartIndex === void 0 || currentTurnStartIndex >= messages.length - 1) {
201
+ return void 0;
202
+ }
203
+ const targetStart = Math.max(
204
+ getProtectedWindowStart(messages, protectedTokens),
205
+ currentTurnStartIndex + 1
206
+ );
207
+ let bestPlan;
208
+ const consider = (index) => {
209
+ if (!isSafeCutBoundary(messages, index)) return false;
210
+ const plan = buildSplitTurnPrefixPlan(
211
+ messages,
212
+ index,
213
+ protectedTokens,
214
+ currentTurnStartIndex
215
+ );
216
+ if (plan.tokensKept >= normalPlan.tokensKept) return false;
217
+ if (maxKeptTokens === void 0 || plan.tokensKept <= maxKeptTokens) {
218
+ bestPlan = plan;
219
+ return true;
220
+ }
221
+ if (!bestPlan || plan.tokensKept < bestPlan.tokensKept) {
222
+ bestPlan = plan;
223
+ }
224
+ return false;
225
+ };
226
+ for (let i = targetStart; i >= currentTurnStartIndex + 1; i--) {
227
+ if (consider(i)) return bestPlan;
228
+ }
229
+ for (let i = targetStart + 1; i < messages.length; i++) {
230
+ if (consider(i)) return bestPlan;
231
+ }
232
+ return bestPlan;
233
+ }
234
+ function planCompactionCut(messages, protectedTokens = DEFAULT_CONTEXT_LIMITS.protectedTokens, options = {}) {
235
+ if (messages.length === 0) {
236
+ return buildCutPlan(messages, 0, protectedTokens, "no-safe-cut");
237
+ }
238
+ const targetCutIndex = getProtectedWindowStart(messages, protectedTokens);
239
+ if (targetCutIndex <= 1) {
240
+ const noSafePlan2 = buildCutPlan(
241
+ messages,
242
+ 0,
243
+ protectedTokens,
244
+ "no-safe-cut"
245
+ );
246
+ if (options.allowSplitTurn) {
247
+ return findSplitTurnPrefixPlan(
248
+ messages,
249
+ protectedTokens,
250
+ options.maxKeptTokens,
251
+ noSafePlan2
252
+ ) ?? noSafePlan2;
253
+ }
254
+ return noSafePlan2;
255
+ }
256
+ const latestUserIndex = findLatestUserMessageIndex(messages);
257
+ const rawStartIndex = targetCutIndex >= messages.length ? messages.length - 1 : targetCutIndex;
258
+ const startIndex = latestUserIndex === void 0 ? rawStartIndex : Math.min(rawStartIndex, latestUserIndex);
259
+ const targetBoundaryWasSafe = targetCutIndex <= startIndex && isSafeCutBoundary(messages, targetCutIndex);
260
+ if (startIndex <= 0) {
261
+ const noSafePlan2 = buildCutPlan(
262
+ messages,
263
+ 0,
264
+ protectedTokens,
265
+ "no-safe-cut"
266
+ );
267
+ if (options.allowSplitTurn) {
268
+ return findSplitTurnPrefixPlan(
269
+ messages,
270
+ protectedTokens,
271
+ options.maxKeptTokens,
272
+ noSafePlan2
273
+ ) ?? noSafePlan2;
274
+ }
275
+ return noSafePlan2;
276
+ }
277
+ for (let i = startIndex; i >= 1; i--) {
278
+ if (isPreferredCutBoundary(messages, i) && isSafeCutBoundary(messages, i)) {
279
+ const plan = buildCutPlan(
280
+ messages,
281
+ i,
282
+ protectedTokens,
283
+ getAdjustedCutReason({
284
+ cutIndex: i,
285
+ targetCutIndex,
286
+ latestUserIndex,
287
+ targetBoundaryWasSafe
288
+ })
289
+ );
290
+ if (options.allowSplitTurn && options.maxKeptTokens !== void 0 && plan.tokensKept > options.maxKeptTokens) {
291
+ return findSplitTurnPrefixPlan(
292
+ messages,
293
+ protectedTokens,
294
+ options.maxKeptTokens,
295
+ plan
296
+ ) ?? plan;
297
+ }
298
+ return plan;
299
+ }
300
+ }
301
+ for (let i = startIndex; i >= 1; i--) {
302
+ if (isSafeCutBoundary(messages, i)) {
303
+ const plan = buildCutPlan(
304
+ messages,
305
+ i,
306
+ protectedTokens,
307
+ getAdjustedCutReason({
308
+ cutIndex: i,
309
+ targetCutIndex,
310
+ latestUserIndex,
311
+ targetBoundaryWasSafe
312
+ })
313
+ );
314
+ if (options.allowSplitTurn && options.maxKeptTokens !== void 0 && plan.tokensKept > options.maxKeptTokens) {
315
+ return findSplitTurnPrefixPlan(
316
+ messages,
317
+ protectedTokens,
318
+ options.maxKeptTokens,
319
+ plan
320
+ ) ?? plan;
321
+ }
322
+ return plan;
323
+ }
324
+ }
325
+ const noSafePlan = buildCutPlan(messages, 0, protectedTokens, "no-safe-cut");
326
+ if (options.allowSplitTurn) {
327
+ return findSplitTurnPrefixPlan(
328
+ messages,
329
+ protectedTokens,
330
+ options.maxKeptTokens,
331
+ noSafePlan
332
+ ) ?? noSafePlan;
333
+ }
334
+ return noSafePlan;
335
+ }
336
+
337
+ // src/context/window/decision.ts
338
+ function decideContextCompaction(messages, options = {}) {
339
+ const limits = options.limits ?? DEFAULT_CONTEXT_LIMITS;
340
+ const inputTokens = options.inputTokens ?? estimateConversationTokens(messages);
341
+ const limit = getUsableTokenLimit(limits);
342
+ const overflowTokens = Math.max(0, inputTokens - limit);
343
+ const forced = options.force === true;
344
+ const canSummarize = options.canSummarize === true;
345
+ if (forced) {
346
+ return {
347
+ needed: true,
348
+ reason: "forced-recovery",
349
+ strategy: "tool-context-first",
350
+ forced,
351
+ canSummarize,
352
+ inputTokens,
353
+ limit,
354
+ overflowTokens,
355
+ protectedTokens: limits.protectedTokens,
356
+ pruneMinimum: limits.pruneMinimum
357
+ };
358
+ }
359
+ if (inputTokens < limits.pruneMinimum) {
360
+ return {
361
+ needed: false,
362
+ reason: "below-prune-minimum",
363
+ strategy: "none",
364
+ forced,
365
+ canSummarize,
366
+ inputTokens,
367
+ limit,
368
+ overflowTokens,
369
+ protectedTokens: limits.protectedTokens,
370
+ pruneMinimum: limits.pruneMinimum
371
+ };
372
+ }
373
+ if (!shouldPruneContext(inputTokens, limits)) {
374
+ return {
375
+ needed: false,
376
+ reason: "under-limit",
377
+ strategy: "none",
378
+ forced,
379
+ canSummarize,
380
+ inputTokens,
381
+ limit,
382
+ overflowTokens,
383
+ protectedTokens: limits.protectedTokens,
384
+ pruneMinimum: limits.pruneMinimum
385
+ };
386
+ }
387
+ return {
388
+ needed: true,
389
+ reason: "overflow",
390
+ strategy: "tool-context-first",
391
+ forced,
392
+ canSummarize,
393
+ inputTokens,
394
+ limit,
395
+ overflowTokens,
396
+ protectedTokens: limits.protectedTokens,
397
+ pruneMinimum: limits.pruneMinimum
398
+ };
399
+ }
400
+
401
+ // src/types/compaction.ts
402
+ var PRUNE_PROTECTED_TOOLS = ["skill"];
403
+
404
+ // src/context/window/summary.ts
405
+ import { generateText } from "ai";
406
+ var CHARS_PER_TOKEN = 4;
407
+ var DEFAULT_MESSAGE_INPUT_TOKENS = 1500;
408
+ var SUMMARY_HEADING = "## Previous Conversation Summary";
409
+ var SUMMARY_PREFIX = `${SUMMARY_HEADING}
410
+
411
+ `;
412
+ var DEFAULT_SUMMARY_PROMPT = `You are summarizing a conversation to continue it with context.
413
+
414
+ Create a structured summary that captures:
415
+ 1. **Goal**: What the user is trying to accomplish
416
+ 2. **Progress**: What has been done so far
417
+ 3. **Decisions**: Key decisions made during the conversation
418
+ 4. **Current State**: Where we left off
419
+ 5. **Next Steps**: What should happen next
420
+
421
+ Be concise but comprehensive. Include specific file paths, function names, and technical details that would be lost otherwise.
422
+
423
+ Format as a clear summary that could be given to another assistant to continue the work.`;
424
+ var UPDATE_SUMMARY_PROMPT = `You are updating an existing conversation handoff summary.
425
+
426
+ Preserve durable facts from the existing summary, incorporate the new conversation material, and remove only details that are clearly obsolete. Keep the result concise but specific enough for another assistant to continue the work without the removed messages.`;
427
+ var SPLIT_TURN_SUMMARY_PROMPT = `You are creating a context checkpoint for a conversation where the active turn became too large to keep as one contiguous block.
428
+
429
+ The later suffix of the active turn remains verbatim after this summary. Summarize only the removed material. The summary is reference context, not a new user instruction.
430
+
431
+ Preserve:
432
+ 1. The user's original active-turn request, if it appears in the removed prefix
433
+ 2. Early progress, decisions, file paths, commands, and tool results needed to understand the kept suffix
434
+ 3. Relevant older conversation state that still matters
435
+ 4. Open issues or blockers that the kept suffix depends on
436
+
437
+ Do not invent next steps. Do not ask or answer questions from the removed material. Return only the handoff summary body.`;
438
+ function createCompactionSummaryContent(summary) {
439
+ return `${SUMMARY_PREFIX}${summary.trim()}`;
440
+ }
441
+ function extractCompactionSummaryText(message) {
442
+ if (message.role !== "system") return void 0;
443
+ if (!message.content.startsWith(SUMMARY_PREFIX)) return void 0;
444
+ return message.content.slice(SUMMARY_PREFIX.length).trim();
445
+ }
446
+ function estimateCharsFromTokens(tokens, fallback) {
447
+ if (tokens === void 0 || !Number.isFinite(tokens) || tokens <= 0) {
448
+ return fallback * CHARS_PER_TOKEN;
449
+ }
450
+ return Math.max(1, Math.floor(tokens) * CHARS_PER_TOKEN);
451
+ }
452
+ function stringifyForSummary(value) {
453
+ if (typeof value === "string") return value;
454
+ if (value === void 0) return "";
455
+ try {
456
+ return JSON.stringify(value);
457
+ } catch {
458
+ return String(value);
459
+ }
460
+ }
461
+ function redactSummaryText(text) {
462
+ return text.replace(/\bsk-[A-Za-z0-9_-]{12,}\b/g, "[REDACTED]").replace(/\bBearer\s+[A-Za-z0-9._~+/=-]{8,}/gi, "Bearer [REDACTED]").replace(
463
+ /((?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password|secret|token)\s*[:=]\s*["']?)[^"',\s}]{8,}/gi,
464
+ "$1[REDACTED]"
465
+ );
466
+ }
467
+ function compactText(text, maxChars) {
468
+ const redacted = redactSummaryText(text);
469
+ return truncateTextMiddle(redacted, maxChars, {
470
+ headRatio: 0.7,
471
+ marker: (omitted) => `
472
+
473
+ [...${omitted} characters omitted for compaction...]
474
+
475
+ `
476
+ });
477
+ }
478
+ function renderToolCalls(message, maxChars) {
479
+ if (message.role !== "assistant" || !message.toolCalls?.length) return "";
480
+ const lines = message.toolCalls.map((toolCall) => {
481
+ const args = compactText(stringifyForSummary(toolCall.args), maxChars);
482
+ return `- ${toolCall.toolName} (${toolCall.toolCallId}): ${args}`;
483
+ });
484
+ return `[TOOL CALLS]
485
+ ${lines.join("\n")}`;
486
+ }
487
+ function serializeMessageForSummary(message, maxChars) {
488
+ const role = message.role.toUpperCase();
489
+ if (message.role === "tool") {
490
+ const content2 = compactText(message.content, maxChars);
491
+ return `[TOOL RESULT: ${message.toolName} ${message.toolCallId}]
492
+ ${content2}`;
493
+ }
494
+ const content = compactText(message.content, maxChars);
495
+ const toolCalls = renderToolCalls(
496
+ message,
497
+ Math.max(512, Math.floor(maxChars / 2))
498
+ );
499
+ const parts = [`[${role}]
500
+ ${content}`];
501
+ if (toolCalls) parts.push(toolCalls);
502
+ return parts.join("\n\n");
503
+ }
504
+ function serializeMessagesForSummary(messages, options = {}) {
505
+ const maxChars = estimateCharsFromTokens(
506
+ options.maxInputTokens,
507
+ DEFAULT_SUMMARY_MAX_INPUT_TOKENS
508
+ );
509
+ const maxMessageChars = estimateCharsFromTokens(
510
+ options.maxMessageTokens,
511
+ DEFAULT_MESSAGE_INPUT_TOKENS
512
+ );
513
+ const parts = [];
514
+ let usedChars = 0;
515
+ for (const message of messages) {
516
+ const serialized = serializeMessageForSummary(message, maxMessageChars);
517
+ const separator = parts.length > 0 ? "\n\n" : "";
518
+ const remaining = maxChars - usedChars - separator.length;
519
+ if (remaining <= 0) break;
520
+ if (serialized.length > remaining) {
521
+ parts.push(`${separator}${compactText(serialized, remaining)}`);
522
+ usedChars = maxChars;
523
+ break;
524
+ }
525
+ parts.push(`${separator}${serialized}`);
526
+ usedChars += separator.length + serialized.length;
527
+ }
528
+ const transcript = parts.join("");
529
+ if (messages.length > 0 && transcript.length >= maxChars) {
530
+ return `${transcript}
531
+
532
+ [Summary input reached its configured compaction cap.]`;
533
+ }
534
+ return transcript || "[No message content was available for summarization.]";
535
+ }
536
+ async function generateSummary(messages, options) {
537
+ const conversationText = serializeMessagesForSummary(messages, {
538
+ maxInputTokens: options.maxInputTokens
539
+ });
540
+ const previousSummary = options.previousSummary ? redactSummaryText(options.previousSummary) : void 0;
541
+ const systemPrompt = options.customPrompt ?? (previousSummary ? UPDATE_SUMMARY_PROMPT : DEFAULT_SUMMARY_PROMPT);
542
+ const prompt = previousSummary ? `Existing handoff summary:
543
+
544
+ ${previousSummary}
545
+
546
+ New conversation material to incorporate:
547
+
548
+ ${conversationText}
549
+
550
+ Return the updated handoff summary only.` : `Conversation material to summarize:
551
+
552
+ ${conversationText}
553
+
554
+ Return the handoff summary only.`;
555
+ const { text } = await generateText({
556
+ model: options.model,
557
+ maxOutputTokens: options.maxTokens ?? 2e3,
558
+ system: systemPrompt,
559
+ prompt
560
+ });
561
+ return redactSummaryText(text);
562
+ }
563
+ async function generateSplitTurnSummary(options) {
564
+ const historyText = serializeMessagesForSummary(options.historyMessages, {
565
+ maxInputTokens: options.maxInputTokens
566
+ });
567
+ const currentTurnPrefixText = serializeMessagesForSummary(
568
+ options.currentTurnPrefixMessages,
569
+ {
570
+ maxInputTokens: options.maxInputTokens
571
+ }
572
+ );
573
+ const previousSummary = options.previousSummary ? redactSummaryText(options.previousSummary) : void 0;
574
+ const systemPrompt = options.customPrompt ?? SPLIT_TURN_SUMMARY_PROMPT;
575
+ const promptParts = [
576
+ previousSummary ? `Existing handoff summary:
577
+
578
+ ${previousSummary}` : void 0,
579
+ options.historyMessages.length > 0 ? `Removed earlier conversation material:
580
+
581
+ ${historyText}` : void 0,
582
+ `Removed early active-turn material:
583
+
584
+ ${currentTurnPrefixText}`,
585
+ `Return a compact handoff summary with sections for prior conversation context and "Earlier In This Turn".`
586
+ ].filter((part) => part !== void 0);
587
+ const { text } = await generateText({
588
+ model: options.model,
589
+ maxOutputTokens: options.maxTokens ?? 2e3,
590
+ system: systemPrompt,
591
+ prompt: promptParts.join("\n\n---\n\n")
592
+ });
593
+ return redactSummaryText(text);
594
+ }
595
+
596
+ // src/context/window/tool-pruning.ts
597
+ var TOOL_OUTPUT_PRUNE_THRESHOLD = 500;
598
+ var TOOL_ARGUMENT_PRUNE_THRESHOLD = 500;
599
+ var TOOL_ARGUMENT_PREVIEW_CHARS = 240;
600
+ var TOOL_ARGUMENT_MAX_STRING_CHARS = 1800;
601
+ var TOOL_ARGUMENT_STRING_HEAD_CHARS = 1200;
602
+ var TOOL_ARGUMENT_STRING_TAIL_CHARS = 400;
603
+ var TOOL_ARGUMENT_ARRAY_HEAD_ITEMS = 24;
604
+ var TOOL_ARGUMENT_ARRAY_TAIL_ITEMS = 8;
605
+ var TOOL_ARGUMENT_OBJECT_MAX_KEYS = 80;
606
+ var TOOL_ARGUMENT_MAX_DEPTH = 8;
607
+ function stringifyToolValue(value) {
608
+ if (typeof value === "string") return value;
609
+ if (value === void 0) return "";
610
+ try {
611
+ return JSON.stringify(value);
612
+ } catch {
613
+ return String(value);
614
+ }
615
+ }
616
+ function compactPreview(value, maxChars) {
617
+ const text = redactSummaryText(
618
+ stringifyToolValue(value).replace(/\s+/g, " ").trim()
619
+ );
620
+ return truncateTextPrefix(text, maxChars, {
621
+ boundary: "word",
622
+ marker: "...",
623
+ separator: ""
624
+ });
625
+ }
626
+ function compactLongArgumentString(value) {
627
+ if (value.length <= TOOL_ARGUMENT_MAX_STRING_CHARS) return value;
628
+ const totalKeptArgumentChars = TOOL_ARGUMENT_STRING_HEAD_CHARS + TOOL_ARGUMENT_STRING_TAIL_CHARS;
629
+ return truncateTextMiddle(value, TOOL_ARGUMENT_MAX_STRING_CHARS, {
630
+ headRatio: TOOL_ARGUMENT_STRING_HEAD_CHARS / totalKeptArgumentChars,
631
+ marker: (omitted) => `
632
+ [${omitted} characters omitted by context compaction]
633
+ `
634
+ });
635
+ }
636
+ function compactToolArgumentValue(value, depth, seen) {
637
+ if (typeof value === "string") return compactLongArgumentString(value);
638
+ if (value === null || typeof value !== "object") return value;
639
+ if (depth >= TOOL_ARGUMENT_MAX_DEPTH) {
640
+ return {
641
+ __contextWindowCompaction: {
642
+ reason: "max-depth",
643
+ preview: compactPreview(value, TOOL_ARGUMENT_PREVIEW_CHARS)
644
+ }
645
+ };
646
+ }
647
+ if (seen.has(value)) {
648
+ return {
649
+ __contextWindowCompaction: {
650
+ reason: "circular-reference"
651
+ }
652
+ };
653
+ }
654
+ seen.add(value);
655
+ if (Array.isArray(value)) {
656
+ const shouldSlice = value.length > TOOL_ARGUMENT_ARRAY_HEAD_ITEMS + TOOL_ARGUMENT_ARRAY_TAIL_ITEMS;
657
+ const head = shouldSlice ? value.slice(0, TOOL_ARGUMENT_ARRAY_HEAD_ITEMS) : value;
658
+ const tail = shouldSlice ? value.slice(-TOOL_ARGUMENT_ARRAY_TAIL_ITEMS) : [];
659
+ const compacted2 = head.map(
660
+ (item) => compactToolArgumentValue(item, depth + 1, seen)
661
+ );
662
+ if (shouldSlice) {
663
+ compacted2.push({
664
+ __contextWindowCompaction: {
665
+ reason: "array-length",
666
+ omittedItems: value.length - TOOL_ARGUMENT_ARRAY_HEAD_ITEMS - TOOL_ARGUMENT_ARRAY_TAIL_ITEMS
667
+ }
668
+ });
669
+ compacted2.push(
670
+ ...tail.map((item) => compactToolArgumentValue(item, depth + 1, seen))
671
+ );
672
+ }
673
+ seen.delete(value);
674
+ return compacted2;
675
+ }
676
+ const entries = Object.entries(value);
677
+ const compacted = {};
678
+ const keptEntries = entries.slice(0, TOOL_ARGUMENT_OBJECT_MAX_KEYS);
679
+ for (const [key, entryValue] of keptEntries) {
680
+ compacted[key] = compactToolArgumentValue(entryValue, depth + 1, seen);
681
+ }
682
+ if (entries.length > keptEntries.length) {
683
+ compacted.__contextWindowCompaction = {
684
+ reason: "object-size",
685
+ omittedKeys: entries.length - keptEntries.length
686
+ };
687
+ }
688
+ seen.delete(value);
689
+ return compacted;
690
+ }
691
+ function compactToolCallArgs(args) {
692
+ const beforeText = stringifyToolValue(args);
693
+ if (estimateTokens(beforeText) < TOOL_ARGUMENT_PRUNE_THRESHOLD) {
694
+ return { args, compacted: false };
695
+ }
696
+ const compactedArgs = compactToolArgumentValue(args, 0, /* @__PURE__ */ new WeakSet());
697
+ const afterText = stringifyToolValue(compactedArgs);
698
+ if (afterText.length < beforeText.length) {
699
+ return { args: compactedArgs, compacted: true };
700
+ }
701
+ return {
702
+ args: {
703
+ __contextWindowCompaction: {
704
+ reason: "argument-size",
705
+ originalEstimatedTokens: estimateTokens(beforeText),
706
+ preview: compactPreview(args, TOOL_ARGUMENT_MAX_STRING_CHARS)
707
+ }
708
+ },
709
+ compacted: true
710
+ };
711
+ }
712
+ function collectToolCallArgs(messages) {
713
+ const argsByCallId = /* @__PURE__ */ new Map();
714
+ for (const message of messages) {
715
+ if (message.role !== "assistant" || !message.toolCalls) continue;
716
+ for (const toolCall of message.toolCalls) {
717
+ argsByCallId.set(toolCall.toolCallId, toolCall.args);
718
+ }
719
+ }
720
+ return argsByCallId;
721
+ }
722
+ function summarizeToolOutput(options) {
723
+ const { tool, args, currentTokens, duplicateOf } = options;
724
+ if (duplicateOf) {
725
+ return `[Tool output compacted] ${tool.toolName} produced duplicate output already retained in call ${duplicateOf}. Original output was ${currentTokens} estimated tokens.`;
726
+ }
727
+ const lines = tool.content.split(/\r?\n/).filter((line) => line.trim());
728
+ const lineCount = lines.length;
729
+ const argsPreview = compactPreview(args, TOOL_ARGUMENT_PREVIEW_CHARS);
730
+ const rawFirstLine = lines[0] ?? "";
731
+ const firstLine = rawFirstLine.length > 0 && rawFirstLine.length <= 160 ? compactPreview(rawFirstLine, 160) : "";
732
+ const details = [
733
+ `tool=${tool.toolName}`,
734
+ `call=${tool.toolCallId}`,
735
+ `estimatedTokens=${currentTokens}`,
736
+ `lines=${lineCount}`
737
+ ];
738
+ if (argsPreview) {
739
+ details.push(`args=${argsPreview}`);
740
+ }
741
+ if (firstLine) {
742
+ details.push(`preview=${firstLine}`);
743
+ }
744
+ return `[Tool output compacted] ${details.join("; ")}`;
745
+ }
746
+ function maybeCompactAssistantToolCalls(message, protectedToolSet) {
747
+ if (!message.toolCalls || message.toolCalls.length === 0) {
748
+ return { message, compactedCount: 0 };
749
+ }
750
+ let compactedCount = 0;
751
+ const toolCalls = message.toolCalls.map((toolCall) => {
752
+ if (protectedToolSet.has(toolCall.toolName)) return toolCall;
753
+ const result = compactToolCallArgs(toolCall.args);
754
+ if (!result.compacted) return toolCall;
755
+ compactedCount++;
756
+ return {
757
+ ...toolCall,
758
+ args: result.args
759
+ };
760
+ });
761
+ if (compactedCount === 0) return { message, compactedCount };
762
+ return {
763
+ message: {
764
+ ...message,
765
+ toolCalls
766
+ },
767
+ compactedCount
768
+ };
769
+ }
770
+ function pruneToolContextWithReport(messages, protectedTokens = DEFAULT_CONTEXT_LIMITS.protectedTokens, options) {
771
+ const protectedToolSet = /* @__PURE__ */ new Set([
772
+ ...PRUNE_PROTECTED_TOOLS,
773
+ ...options?.protectedTools ?? []
774
+ ]);
775
+ const argsByCallId = collectToolCallArgs(messages);
776
+ const newestFullOutputByContent = /* @__PURE__ */ new Map();
777
+ const tokensBefore = messages.reduce(
778
+ (total, message) => total + estimateMessageTokens(message),
779
+ 0
780
+ );
781
+ let tokensFromEnd = 0;
782
+ const tokenPositions = [];
783
+ for (let i = messages.length - 1; i >= 0; i--) {
784
+ tokensFromEnd += estimateMessageTokens(messages[i]);
785
+ tokenPositions[i] = tokensFromEnd;
786
+ }
787
+ for (let i = messages.length - 1; i >= 0; i--) {
788
+ const message = messages[i];
789
+ if (message.role !== "tool") continue;
790
+ if (typeof message.content !== "string" || message.content.length < 200) {
791
+ continue;
792
+ }
793
+ const isRetained = tokenPositions[i] < protectedTokens || Boolean(message.compactedAt) || message.toolName !== void 0 && protectedToolSet.has(message.toolName) || estimateTokens(message.content) < TOOL_OUTPUT_PRUNE_THRESHOLD;
794
+ if (!isRetained) continue;
795
+ if (!newestFullOutputByContent.has(message.content)) {
796
+ newestFullOutputByContent.set(message.content, message.toolCallId);
797
+ }
798
+ }
799
+ let outputCompactedCount = 0;
800
+ let argumentCompactedCount = 0;
801
+ const nextMessages = messages.map((msg, i) => {
802
+ if (tokenPositions[i] < protectedTokens) return msg;
803
+ if (!("role" in msg)) return msg;
804
+ if (msg.role === "assistant") {
805
+ const result = maybeCompactAssistantToolCalls(msg, protectedToolSet);
806
+ argumentCompactedCount += result.compactedCount;
807
+ return result.message;
808
+ }
809
+ if (msg.role !== "tool") return msg;
810
+ const toolMsg = msg;
811
+ if ("compactedAt" in toolMsg && toolMsg.compactedAt) return msg;
812
+ if (toolMsg.toolName && protectedToolSet.has(toolMsg.toolName)) return msg;
813
+ const currentTokens = estimateTokens(toolMsg.content);
814
+ if (currentTokens < TOOL_OUTPUT_PRUNE_THRESHOLD) return msg;
815
+ const duplicateOf = newestFullOutputByContent.get(toolMsg.content);
816
+ const compactedContent = summarizeToolOutput({
817
+ tool: toolMsg,
818
+ args: argsByCallId.get(toolMsg.toolCallId),
819
+ currentTokens,
820
+ duplicateOf: duplicateOf && duplicateOf !== toolMsg.toolCallId ? duplicateOf : void 0
821
+ });
822
+ outputCompactedCount++;
823
+ return {
824
+ ...toolMsg,
825
+ content: compactedContent,
826
+ result: compactedContent,
827
+ compactedAt: Date.now()
828
+ };
829
+ });
830
+ const tokensAfter = nextMessages.reduce(
831
+ (total, message) => total + estimateMessageTokens(message),
832
+ 0
833
+ );
834
+ return {
835
+ messages: nextMessages,
836
+ report: {
837
+ outputCompactedCount,
838
+ argumentCompactedCount,
839
+ tokensBefore,
840
+ tokensAfter,
841
+ tokensRemoved: Math.max(0, tokensBefore - tokensAfter)
842
+ }
843
+ };
844
+ }
845
+ function pruneToolContext(messages, protectedTokens = DEFAULT_CONTEXT_LIMITS.protectedTokens, options) {
846
+ return pruneToolContextWithReport(messages, protectedTokens, options).messages;
847
+ }
848
+
849
+ // src/context/window/summary-policy.ts
850
+ var ContextSummaryModelRequiredError = class extends Error {
851
+ constructor() {
852
+ super(
853
+ "Context compaction removed conversation history, but no summary model is configured."
854
+ );
855
+ this.name = "ContextSummaryModelRequiredError";
856
+ }
857
+ };
858
+ function resolveContextSummaryPolicy(policy, activeModel) {
859
+ const mode = policy?.mode ?? "required";
860
+ const model = mode === "disabled" ? void 0 : policy?.model ?? activeModel;
861
+ return {
862
+ mode,
863
+ model,
864
+ prompt: policy?.prompt,
865
+ maxInputTokens: policy?.maxInputTokens,
866
+ maxOutputTokens: policy?.maxOutputTokens,
867
+ targetRatio: policy?.targetRatio
868
+ };
869
+ }
870
+ function canGenerateCompactionSummary(policy) {
871
+ return policy.mode !== "disabled" && policy.model !== void 0;
872
+ }
873
+ function shouldFallbackOnSummaryFailure(options) {
874
+ return options.force === true || options.policy.mode === "best-effort";
875
+ }
876
+
877
+ // src/context/window/compactor.ts
878
+ function prepareSummarySource(messages) {
879
+ let previousSummary;
880
+ const messagesToSummarize = [];
881
+ for (const message of messages) {
882
+ const summary = extractCompactionSummaryText(message);
883
+ if (summary !== void 0) {
884
+ previousSummary = summary;
885
+ continue;
886
+ }
887
+ messagesToSummarize.push(message);
888
+ }
889
+ return { previousSummary, messagesToSummarize };
890
+ }
891
+ async function pruneContext(messages, options = {}) {
892
+ const limits = options.limits ?? DEFAULT_CONTEXT_LIMITS;
893
+ let currentMessages = [...messages];
894
+ let tokensRemoved = 0;
895
+ let removedCount = 0;
896
+ let summarized = false;
897
+ let summary;
898
+ let summaryOutputTokens;
899
+ const summaryPolicy = resolveContextSummaryPolicy(options.summary);
900
+ const initialTokens = estimateConversationTokens(currentMessages);
901
+ const decision = decideContextCompaction(currentMessages, {
902
+ limits,
903
+ force: options.force,
904
+ canSummarize: canGenerateCompactionSummary(summaryPolicy),
905
+ inputTokens: initialTokens
906
+ });
907
+ if (!decision.needed) {
908
+ return {
909
+ messages: currentMessages,
910
+ decision,
911
+ effectiveness: createCompactionEffectiveness(
912
+ initialTokens,
913
+ initialTokens
914
+ ),
915
+ removedCount: 0,
916
+ tokensRemoved: 0,
917
+ summarized: false,
918
+ summaryPolicy,
919
+ cutIndex: 0,
920
+ cutReason: "no-safe-cut"
921
+ };
922
+ }
923
+ const toolContextResult = pruneToolContextWithReport(
924
+ currentMessages,
925
+ limits.protectedTokens
926
+ );
927
+ const toolContext = toolContextResult.report;
928
+ const prunedMessages = toolContextResult.messages;
929
+ const afterPruneTokens = estimateConversationTokens(prunedMessages);
930
+ tokensRemoved = Math.max(0, initialTokens - afterPruneTokens);
931
+ currentMessages = prunedMessages;
932
+ if (!isContextOverflowing(afterPruneTokens, limits)) {
933
+ return {
934
+ messages: currentMessages,
935
+ decision,
936
+ effectiveness: createCompactionEffectiveness(
937
+ initialTokens,
938
+ afterPruneTokens
939
+ ),
940
+ removedCount: 0,
941
+ tokensRemoved,
942
+ summarized: false,
943
+ summaryPolicy,
944
+ cutIndex: 0,
945
+ cutReason: "no-safe-cut",
946
+ toolContext
947
+ };
948
+ }
949
+ const cutPlan = planCompactionCut(currentMessages, limits.protectedTokens, {
950
+ allowSplitTurn: summaryPolicy.mode !== "disabled",
951
+ maxKeptTokens: getUsableTokenLimit(limits)
952
+ });
953
+ if (cutPlan.cutIndex === 0) {
954
+ return {
955
+ messages: currentMessages,
956
+ decision,
957
+ effectiveness: createCompactionEffectiveness(
958
+ initialTokens,
959
+ afterPruneTokens
960
+ ),
961
+ removedCount: 0,
962
+ tokensRemoved,
963
+ summarized: false,
964
+ summaryPolicy,
965
+ cutIndex: 0,
966
+ cutReason: cutPlan.reason,
967
+ toolContext
968
+ };
969
+ }
970
+ const removedMessages = cutPlan.removedMessages;
971
+ const toKeep = cutPlan.keptMessages;
972
+ const { previousSummary, messagesToSummarize } = prepareSummarySource(
973
+ cutPlan.historyMessages
974
+ );
975
+ const currentTurnPrefixMessages = cutPlan.currentTurnPrefixMessages;
976
+ removedCount = removedMessages.length;
977
+ tokensRemoved += cutPlan.tokensRemoved;
978
+ if (summaryPolicy.mode === "disabled") {
979
+ currentMessages = toKeep;
980
+ } else {
981
+ if (!summaryPolicy.model) {
982
+ throw new ContextSummaryModelRequiredError();
983
+ }
984
+ const summaryInputMessages = [
985
+ ...messagesToSummarize,
986
+ ...currentTurnPrefixMessages
987
+ ];
988
+ const summaryInputTokens = summaryInputMessages.length > 0 ? estimateConversationTokens(summaryInputMessages) : cutPlan.tokensRemoved;
989
+ summaryOutputTokens = resolveSummaryOutputTokens({
990
+ inputTokens: summaryInputTokens,
991
+ limits,
992
+ summaryMaxOutputTokens: summaryPolicy.maxOutputTokens,
993
+ summaryTargetRatio: summaryPolicy.targetRatio
994
+ });
995
+ if (cutPlan.kind === "split-turn-prefix") {
996
+ summary = await generateSplitTurnSummary({
997
+ model: summaryPolicy.model,
998
+ historyMessages: messagesToSummarize,
999
+ currentTurnPrefixMessages,
1000
+ maxInputTokens: summaryPolicy.maxInputTokens,
1001
+ maxTokens: summaryOutputTokens,
1002
+ customPrompt: summaryPolicy.prompt,
1003
+ previousSummary
1004
+ });
1005
+ summarized = true;
1006
+ } else if (messagesToSummarize.length > 0 || previousSummary !== void 0) {
1007
+ summary = await generateSummary(messagesToSummarize, {
1008
+ model: summaryPolicy.model,
1009
+ maxInputTokens: summaryPolicy.maxInputTokens,
1010
+ maxTokens: summaryOutputTokens,
1011
+ customPrompt: summaryPolicy.prompt,
1012
+ previousSummary
1013
+ });
1014
+ summarized = true;
1015
+ }
1016
+ const summaryMessage = {
1017
+ id: crypto.randomUUID(),
1018
+ role: "system",
1019
+ content: createCompactionSummaryContent(
1020
+ summary ?? previousSummary ?? "Earlier conversation context was compacted."
1021
+ ),
1022
+ createdAt: /* @__PURE__ */ new Date()
1023
+ };
1024
+ currentMessages = [summaryMessage, ...toKeep];
1025
+ }
1026
+ return {
1027
+ messages: currentMessages,
1028
+ decision,
1029
+ effectiveness: createCompactionEffectiveness(
1030
+ initialTokens,
1031
+ estimateConversationTokens(currentMessages)
1032
+ ),
1033
+ removedCount,
1034
+ tokensRemoved,
1035
+ summarized,
1036
+ summary,
1037
+ summaryPolicy,
1038
+ removedMessages,
1039
+ keptMessages: toKeep,
1040
+ summaryOutputTokens,
1041
+ cutIndex: cutPlan.cutIndex,
1042
+ cutReason: cutPlan.reason,
1043
+ toolContext
1044
+ };
1045
+ }
1046
+
1047
+ // src/context/window/manager.ts
1048
+ var ContextWindowManager = class {
1049
+ limits;
1050
+ activeModel;
1051
+ summaryPolicy;
1052
+ constructor(options) {
1053
+ this.limits = { ...DEFAULT_CONTEXT_LIMITS, ...options?.limits };
1054
+ this.activeModel = options?.model;
1055
+ this.summaryPolicy = options?.summary;
1056
+ }
1057
+ /** Get a copy of the current context limits. */
1058
+ getLimits() {
1059
+ return { ...this.limits };
1060
+ }
1061
+ /** Update context limits (e.g. when switching models). */
1062
+ setLimits(limits) {
1063
+ this.limits = { ...this.limits, ...limits };
1064
+ }
1065
+ /** Set the active agent model used for summaries unless overridden. */
1066
+ setModel(model) {
1067
+ this.activeModel = model;
1068
+ }
1069
+ /** Set the summary policy used when conversation history must be cut. */
1070
+ setSummaryPolicy(policy) {
1071
+ this.summaryPolicy = policy;
1072
+ }
1073
+ /** Resolve summary policy against the active agent model. */
1074
+ getSummaryPolicy() {
1075
+ return resolveContextSummaryPolicy(this.summaryPolicy, this.activeModel);
1076
+ }
1077
+ /** Estimate total tokens for a message array. */
1078
+ estimateTokens(messages) {
1079
+ return estimateConversationTokens(messages);
1080
+ }
1081
+ /** Check whether the context is overflowing. */
1082
+ isOverflowing(messages) {
1083
+ const tokens = this.estimateTokens(messages);
1084
+ return isContextOverflowing(tokens, this.limits);
1085
+ }
1086
+ /** Check whether pruning should be triggered. */
1087
+ shouldPrune(messages) {
1088
+ const tokens = this.estimateTokens(messages);
1089
+ return shouldPruneContext(tokens, this.limits);
1090
+ }
1091
+ /** Explain whether context compaction should run. */
1092
+ decide(messages, options) {
1093
+ const summaryPolicy = this.getSummaryPolicy();
1094
+ return decideContextCompaction(messages, {
1095
+ limits: this.limits,
1096
+ force: options?.force,
1097
+ inputTokens: options?.inputTokens,
1098
+ canSummarize: canGenerateCompactionSummary(summaryPolicy)
1099
+ });
1100
+ }
1101
+ /** Prune context to fit within limits. */
1102
+ async prune(messages, options) {
1103
+ return pruneContext(messages, {
1104
+ limits: this.limits,
1105
+ summary: this.getSummaryPolicy(),
1106
+ force: options?.force
1107
+ });
1108
+ }
1109
+ /**
1110
+ * Get a snapshot of token statistics.
1111
+ *
1112
+ * Useful for dashboards, logging, or deciding whether to prune.
1113
+ */
1114
+ getStats(messages) {
1115
+ const tokens = this.estimateTokens(messages);
1116
+ const limit = getUsableTokenLimit(this.limits);
1117
+ return {
1118
+ tokens,
1119
+ limit,
1120
+ available: Math.max(0, limit - tokens),
1121
+ utilizationPercent: Math.round(tokens / limit * 100),
1122
+ isOverflowing: isContextOverflowing(tokens, this.limits),
1123
+ shouldPrune: shouldPruneContext(tokens, this.limits)
1124
+ };
1125
+ }
1126
+ };
1127
+
1128
+ export {
1129
+ DEFAULT_CONTEXT_LIMITS,
1130
+ DEFAULT_SUMMARY_MAX_OUTPUT_TOKENS,
1131
+ DEFAULT_SUMMARY_MAX_INPUT_TOKENS,
1132
+ DEFAULT_COMPACTION_EFFECTIVE_MIN_SAVINGS_RATIO,
1133
+ getUsableTokenLimit,
1134
+ isContextOverflowing,
1135
+ shouldPruneContext,
1136
+ createCompactionEffectiveness,
1137
+ resolveSummaryOutputTokens,
1138
+ planCompactionCut,
1139
+ decideContextCompaction,
1140
+ PRUNE_PROTECTED_TOOLS,
1141
+ createCompactionSummaryContent,
1142
+ extractCompactionSummaryText,
1143
+ redactSummaryText,
1144
+ serializeMessagesForSummary,
1145
+ generateSummary,
1146
+ generateSplitTurnSummary,
1147
+ pruneToolContextWithReport,
1148
+ pruneToolContext,
1149
+ ContextSummaryModelRequiredError,
1150
+ resolveContextSummaryPolicy,
1151
+ canGenerateCompactionSummary,
1152
+ shouldFallbackOnSummaryFailure,
1153
+ pruneContext,
1154
+ ContextWindowManager
1155
+ };