@code-yeongyu/senpi 2026.8.28 → 2026.8.30-2

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 (380) hide show
  1. package/CHANGELOG.md +196 -0
  2. package/dist/cli/args.d.ts +2 -0
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +4 -0
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/core/agent-session-services.d.ts.map +1 -1
  7. package/dist/core/agent-session-services.js +2 -0
  8. package/dist/core/agent-session-services.js.map +1 -1
  9. package/dist/core/agent-session.d.ts +50 -1
  10. package/dist/core/agent-session.d.ts.map +1 -1
  11. package/dist/core/agent-session.js +330 -29
  12. package/dist/core/agent-session.js.map +1 -1
  13. package/dist/core/auth-storage.d.ts +1 -0
  14. package/dist/core/auth-storage.d.ts.map +1 -1
  15. package/dist/core/auth-storage.js +3 -0
  16. package/dist/core/auth-storage.js.map +1 -1
  17. package/dist/core/bash-executor.d.ts.map +1 -1
  18. package/dist/core/bash-executor.js +155 -37
  19. package/dist/core/bash-executor.js.map +1 -1
  20. package/dist/core/compaction/compaction-execution.d.ts +14 -0
  21. package/dist/core/compaction/compaction-execution.d.ts.map +1 -0
  22. package/dist/core/compaction/compaction-execution.js +121 -0
  23. package/dist/core/compaction/compaction-execution.js.map +1 -0
  24. package/dist/core/compaction/compaction-settings.d.ts +17 -0
  25. package/dist/core/compaction/compaction-settings.d.ts.map +1 -0
  26. package/dist/core/compaction/compaction-settings.js +17 -0
  27. package/dist/core/compaction/compaction-settings.js.map +1 -0
  28. package/dist/core/compaction/compaction.d.ts +13 -26
  29. package/dist/core/compaction/compaction.d.ts.map +1 -1
  30. package/dist/core/compaction/compaction.js +7 -136
  31. package/dist/core/compaction/compaction.js.map +1 -1
  32. package/dist/core/compaction/ideal-compaction-settings.d.ts +9 -0
  33. package/dist/core/compaction/ideal-compaction-settings.d.ts.map +1 -0
  34. package/dist/core/compaction/ideal-compaction-settings.js +7 -0
  35. package/dist/core/compaction/ideal-compaction-settings.js.map +1 -0
  36. package/dist/core/compaction-settings-access.d.ts +19 -0
  37. package/dist/core/compaction-settings-access.d.ts.map +1 -0
  38. package/dist/core/compaction-settings-access.js +10 -0
  39. package/dist/core/compaction-settings-access.js.map +1 -0
  40. package/dist/core/compaction-settings-resolver.d.ts +22 -0
  41. package/dist/core/compaction-settings-resolver.d.ts.map +1 -0
  42. package/dist/core/compaction-settings-resolver.js +46 -0
  43. package/dist/core/compaction-settings-resolver.js.map +1 -0
  44. package/dist/core/credential-accounts.d.ts.map +1 -1
  45. package/dist/core/credential-accounts.js +45 -21
  46. package/dist/core/credential-accounts.js.map +1 -1
  47. package/dist/core/credential-pool/classify.d.ts +6 -1
  48. package/dist/core/credential-pool/classify.d.ts.map +1 -1
  49. package/dist/core/credential-pool/classify.js +22 -5
  50. package/dist/core/credential-pool/classify.js.map +1 -1
  51. package/dist/core/credential-pool/env-slots.d.ts.map +1 -1
  52. package/dist/core/credential-pool/env-slots.js +2 -0
  53. package/dist/core/credential-pool/env-slots.js.map +1 -1
  54. package/dist/core/credential-pool/failover.d.ts +8 -0
  55. package/dist/core/credential-pool/failover.d.ts.map +1 -1
  56. package/dist/core/credential-pool/failover.js +24 -6
  57. package/dist/core/credential-pool/failover.js.map +1 -1
  58. package/dist/core/credential-pool/rotation-stream.d.ts +13 -2
  59. package/dist/core/credential-pool/rotation-stream.d.ts.map +1 -1
  60. package/dist/core/credential-pool/rotation-stream.js +97 -10
  61. package/dist/core/credential-pool/rotation-stream.js.map +1 -1
  62. package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts +17 -0
  63. package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts.map +1 -0
  64. package/dist/core/extensions/builtin/compaction/context-pipeline.js +28 -0
  65. package/dist/core/extensions/builtin/compaction/context-pipeline.js.map +1 -0
  66. package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +8 -2
  67. package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -1
  68. package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +163 -48
  69. package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -1
  70. package/dist/core/extensions/builtin/compaction/emergency-prune.d.ts +17 -0
  71. package/dist/core/extensions/builtin/compaction/emergency-prune.d.ts.map +1 -0
  72. package/dist/core/extensions/builtin/compaction/emergency-prune.js +64 -0
  73. package/dist/core/extensions/builtin/compaction/emergency-prune.js.map +1 -0
  74. package/dist/core/extensions/builtin/compaction/extension-wiring.d.ts +27 -0
  75. package/dist/core/extensions/builtin/compaction/extension-wiring.d.ts.map +1 -0
  76. package/dist/core/extensions/builtin/compaction/extension-wiring.js +84 -0
  77. package/dist/core/extensions/builtin/compaction/extension-wiring.js.map +1 -0
  78. package/dist/core/extensions/builtin/compaction/idle.d.ts +1 -0
  79. package/dist/core/extensions/builtin/compaction/idle.d.ts.map +1 -1
  80. package/dist/core/extensions/builtin/compaction/idle.js +13 -2
  81. package/dist/core/extensions/builtin/compaction/idle.js.map +1 -1
  82. package/dist/core/extensions/builtin/compaction/index.d.ts +1 -1
  83. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  84. package/dist/core/extensions/builtin/compaction/index.js +121 -147
  85. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  86. package/dist/core/extensions/builtin/compaction/log.d.ts +1 -1
  87. package/dist/core/extensions/builtin/compaction/log.d.ts.map +1 -1
  88. package/dist/core/extensions/builtin/compaction/log.js +2 -0
  89. package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
  90. package/dist/core/extensions/builtin/compaction/model-selection.d.ts +14 -0
  91. package/dist/core/extensions/builtin/compaction/model-selection.d.ts.map +1 -0
  92. package/dist/core/extensions/builtin/compaction/model-selection.js +37 -0
  93. package/dist/core/extensions/builtin/compaction/model-selection.js.map +1 -0
  94. package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.d.ts +9 -0
  95. package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.d.ts.map +1 -0
  96. package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.js +2 -0
  97. package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.js.map +1 -0
  98. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +3 -6
  99. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
  100. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
  101. package/dist/core/extensions/builtin/compaction/orchestration.d.ts +56 -0
  102. package/dist/core/extensions/builtin/compaction/orchestration.d.ts.map +1 -0
  103. package/dist/core/extensions/builtin/compaction/orchestration.js +136 -0
  104. package/dist/core/extensions/builtin/compaction/orchestration.js.map +1 -0
  105. package/dist/core/extensions/builtin/compaction/policy.d.ts +5 -2
  106. package/dist/core/extensions/builtin/compaction/policy.d.ts.map +1 -1
  107. package/dist/core/extensions/builtin/compaction/policy.js +43 -26
  108. package/dist/core/extensions/builtin/compaction/policy.js.map +1 -1
  109. package/dist/core/extensions/builtin/compaction/retained-message-safety.d.ts.map +1 -1
  110. package/dist/core/extensions/builtin/compaction/retained-message-safety.js +31 -8
  111. package/dist/core/extensions/builtin/compaction/retained-message-safety.js.map +1 -1
  112. package/dist/core/extensions/builtin/compaction/speculation-lead.d.ts +8 -0
  113. package/dist/core/extensions/builtin/compaction/speculation-lead.d.ts.map +1 -0
  114. package/dist/core/extensions/builtin/compaction/speculation-lead.js +17 -0
  115. package/dist/core/extensions/builtin/compaction/speculation-lead.js.map +1 -0
  116. package/dist/core/extensions/builtin/compaction/speculative-job.d.ts +22 -0
  117. package/dist/core/extensions/builtin/compaction/speculative-job.d.ts.map +1 -0
  118. package/dist/core/extensions/builtin/compaction/speculative-job.js +16 -0
  119. package/dist/core/extensions/builtin/compaction/speculative-job.js.map +1 -0
  120. package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts +22 -0
  121. package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts.map +1 -0
  122. package/dist/core/extensions/builtin/compaction/speculative-summary.js +131 -0
  123. package/dist/core/extensions/builtin/compaction/speculative-summary.js.map +1 -0
  124. package/dist/core/extensions/builtin/compaction/speculative.d.ts +8 -13
  125. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  126. package/dist/core/extensions/builtin/compaction/speculative.js +7 -196
  127. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  128. package/dist/core/extensions/builtin/compaction/token-budget-reminder.d.ts +18 -0
  129. package/dist/core/extensions/builtin/compaction/token-budget-reminder.d.ts.map +1 -0
  130. package/dist/core/extensions/builtin/compaction/token-budget-reminder.js +18 -0
  131. package/dist/core/extensions/builtin/compaction/token-budget-reminder.js.map +1 -0
  132. package/dist/core/extensions/builtin/compaction/tool-admission.d.ts +36 -0
  133. package/dist/core/extensions/builtin/compaction/tool-admission.d.ts.map +1 -0
  134. package/dist/core/extensions/builtin/compaction/tool-admission.js +92 -0
  135. package/dist/core/extensions/builtin/compaction/tool-admission.js.map +1 -0
  136. package/dist/core/extensions/builtin/cursor-cli-oauth/stream.d.ts.map +1 -1
  137. package/dist/core/extensions/builtin/cursor-cli-oauth/stream.js +8 -28
  138. package/dist/core/extensions/builtin/cursor-cli-oauth/stream.js.map +1 -1
  139. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  140. package/dist/core/extensions/builtin/goal/index.js +7 -0
  141. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  142. package/dist/core/extensions/builtin/permission-system/external-dir.d.ts.map +1 -1
  143. package/dist/core/extensions/builtin/permission-system/external-dir.js +15 -5
  144. package/dist/core/extensions/builtin/permission-system/external-dir.js.map +1 -1
  145. package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
  146. package/dist/core/extensions/builtin/permission-system/parsers.js +16 -1
  147. package/dist/core/extensions/builtin/permission-system/parsers.js.map +1 -1
  148. package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
  149. package/dist/core/extensions/builtin/service-tier.js +13 -0
  150. package/dist/core/extensions/builtin/service-tier.js.map +1 -1
  151. package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
  152. package/dist/core/extensions/builtin/terminal/extension.js +4 -2
  153. package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
  154. package/dist/core/extensions/builtin/terminal/manager.d.ts +5 -0
  155. package/dist/core/extensions/builtin/terminal/manager.d.ts.map +1 -1
  156. package/dist/core/extensions/builtin/terminal/manager.js +31 -3
  157. package/dist/core/extensions/builtin/terminal/manager.js.map +1 -1
  158. package/dist/core/extensions/builtin/terminal/monitor-permission.d.ts +8 -0
  159. package/dist/core/extensions/builtin/terminal/monitor-permission.d.ts.map +1 -0
  160. package/dist/core/extensions/builtin/terminal/monitor-permission.js +16 -0
  161. package/dist/core/extensions/builtin/terminal/monitor-permission.js.map +1 -0
  162. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts +13 -0
  163. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
  164. package/dist/core/extensions/builtin/terminal/monitor-registry.js +403 -3
  165. package/dist/core/extensions/builtin/terminal/monitor-registry.js.map +1 -1
  166. package/dist/core/extensions/builtin/terminal/session-bundle.d.ts.map +1 -1
  167. package/dist/core/extensions/builtin/terminal/session-bundle.js +1 -0
  168. package/dist/core/extensions/builtin/terminal/session-bundle.js.map +1 -1
  169. package/dist/core/extensions/builtin/terminal/tools/kill-bash.d.ts.map +1 -1
  170. package/dist/core/extensions/builtin/terminal/tools/kill-bash.js +5 -2
  171. package/dist/core/extensions/builtin/terminal/tools/kill-bash.js.map +1 -1
  172. package/dist/core/extensions/builtin/terminal/tools/monitor.d.ts +4 -0
  173. package/dist/core/extensions/builtin/terminal/tools/monitor.d.ts.map +1 -1
  174. package/dist/core/extensions/builtin/terminal/tools/monitor.js +40 -2
  175. package/dist/core/extensions/builtin/terminal/tools/monitor.js.map +1 -1
  176. package/dist/core/model-config-schema.d.ts +4 -4
  177. package/dist/core/model-resolver.js +2 -2
  178. package/dist/core/model-resolver.js.map +1 -1
  179. package/dist/core/model-runtime.d.ts +2 -0
  180. package/dist/core/model-runtime.d.ts.map +1 -1
  181. package/dist/core/model-runtime.js +74 -37
  182. package/dist/core/model-runtime.js.map +1 -1
  183. package/dist/core/retry-fallback/chains.d.ts +23 -1
  184. package/dist/core/retry-fallback/chains.d.ts.map +1 -1
  185. package/dist/core/retry-fallback/chains.js +59 -3
  186. package/dist/core/retry-fallback/chains.js.map +1 -1
  187. package/dist/core/retry-fallback/controller.d.ts.map +1 -1
  188. package/dist/core/retry-fallback/controller.js +9 -2
  189. package/dist/core/retry-fallback/controller.js.map +1 -1
  190. package/dist/core/retry-fallback/settings.d.ts.map +1 -1
  191. package/dist/core/retry-fallback/settings.js +9 -0
  192. package/dist/core/retry-fallback/settings.js.map +1 -1
  193. package/dist/core/retry-fallback/validate.js +1 -1
  194. package/dist/core/retry-fallback/validate.js.map +1 -1
  195. package/dist/core/sdk.js +1 -1
  196. package/dist/core/sdk.js.map +1 -1
  197. package/dist/core/session-manager.d.ts +9 -0
  198. package/dist/core/session-manager.d.ts.map +1 -1
  199. package/dist/core/session-manager.js +40 -0
  200. package/dist/core/session-manager.js.map +1 -1
  201. package/dist/core/settings-manager.d.ts +15 -85
  202. package/dist/core/settings-manager.d.ts.map +1 -1
  203. package/dist/core/settings-manager.js +15 -17
  204. package/dist/core/settings-manager.js.map +1 -1
  205. package/dist/core/settings-public-types.d.ts +11 -0
  206. package/dist/core/settings-public-types.d.ts.map +1 -0
  207. package/dist/core/settings-public-types.js +2 -0
  208. package/dist/core/settings-public-types.js.map +1 -0
  209. package/dist/core/settings-shapes.d.ts +36 -0
  210. package/dist/core/settings-shapes.d.ts.map +1 -0
  211. package/dist/core/settings-shapes.js +2 -0
  212. package/dist/core/settings-shapes.js.map +1 -0
  213. package/dist/core/shared-host-policy.d.ts +6 -0
  214. package/dist/core/shared-host-policy.d.ts.map +1 -0
  215. package/dist/core/shared-host-policy.js +7 -0
  216. package/dist/core/shared-host-policy.js.map +1 -0
  217. package/dist/core/terminal-settings.d.ts +22 -0
  218. package/dist/core/terminal-settings.d.ts.map +1 -0
  219. package/dist/core/terminal-settings.js +2 -0
  220. package/dist/core/terminal-settings.js.map +1 -0
  221. package/dist/core/tools/bash.d.ts.map +1 -1
  222. package/dist/core/tools/bash.js +97 -15
  223. package/dist/core/tools/bash.js.map +1 -1
  224. package/dist/core/tools/index.d.ts +1 -0
  225. package/dist/core/tools/index.d.ts.map +1 -1
  226. package/dist/core/tools/index.js +8 -0
  227. package/dist/core/tools/index.js.map +1 -1
  228. package/dist/core/tools/output-accumulator.d.ts +1 -1
  229. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  230. package/dist/core/tools/output-accumulator.js +76 -34
  231. package/dist/core/tools/output-accumulator.js.map +1 -1
  232. package/dist/main.d.ts +7 -0
  233. package/dist/main.d.ts.map +1 -1
  234. package/dist/main.js +27 -6
  235. package/dist/main.js.map +1 -1
  236. package/dist/modes/interactive/components/favorite-models-selector.d.ts.map +1 -1
  237. package/dist/modes/interactive/components/favorite-models-selector.js +2 -2
  238. package/dist/modes/interactive/components/favorite-models-selector.js.map +1 -1
  239. package/dist/modes/interactive/components/footer.d.ts +7 -0
  240. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  241. package/dist/modes/interactive/components/footer.js +34 -8
  242. package/dist/modes/interactive/components/footer.js.map +1 -1
  243. package/dist/modes/interactive/grok/chrome.d.ts +2 -0
  244. package/dist/modes/interactive/grok/chrome.d.ts.map +1 -1
  245. package/dist/modes/interactive/grok/chrome.js.map +1 -1
  246. package/dist/modes/interactive/interactive-host-runtime.d.ts +121 -1
  247. package/dist/modes/interactive/interactive-host-runtime.d.ts.map +1 -1
  248. package/dist/modes/interactive/interactive-host-runtime.js +606 -45
  249. package/dist/modes/interactive/interactive-host-runtime.js.map +1 -1
  250. package/dist/modes/interactive/interactive-mode.d.ts +7 -0
  251. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  252. package/dist/modes/interactive/interactive-mode.js +390 -239
  253. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  254. package/dist/modes/rpc/connection-handler.d.ts +8 -1
  255. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  256. package/dist/modes/rpc/connection-handler.js +268 -63
  257. package/dist/modes/rpc/connection-handler.js.map +1 -1
  258. package/dist/modes/rpc/host-ensure.d.ts +19 -0
  259. package/dist/modes/rpc/host-ensure.d.ts.map +1 -1
  260. package/dist/modes/rpc/host-ensure.js +79 -15
  261. package/dist/modes/rpc/host-ensure.js.map +1 -1
  262. package/dist/modes/rpc/host-lifecycle.d.ts +29 -0
  263. package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
  264. package/dist/modes/rpc/host-lifecycle.js +96 -25
  265. package/dist/modes/rpc/host-lifecycle.js.map +1 -1
  266. package/dist/modes/rpc/host-watchdog.d.ts +2 -0
  267. package/dist/modes/rpc/host-watchdog.d.ts.map +1 -1
  268. package/dist/modes/rpc/host-watchdog.js +23 -12
  269. package/dist/modes/rpc/host-watchdog.js.map +1 -1
  270. package/dist/modes/rpc/multi-session-host.js +20 -8
  271. package/dist/modes/rpc/multi-session-host.js.map +1 -1
  272. package/dist/modes/rpc/rpc-client.d.ts +91 -16
  273. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  274. package/dist/modes/rpc/rpc-client.js +131 -37
  275. package/dist/modes/rpc/rpc-client.js.map +1 -1
  276. package/dist/modes/rpc/rpc-input-validation.d.ts +1 -0
  277. package/dist/modes/rpc/rpc-input-validation.d.ts.map +1 -1
  278. package/dist/modes/rpc/rpc-input-validation.js +66 -0
  279. package/dist/modes/rpc/rpc-input-validation.js.map +1 -1
  280. package/dist/modes/rpc/rpc-mode.d.ts +3 -1
  281. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  282. package/dist/modes/rpc/rpc-mode.js +3 -1
  283. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  284. package/dist/modes/rpc/rpc-types.d.ts +248 -3
  285. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  286. package/dist/modes/rpc/rpc-types.js.map +1 -1
  287. package/dist/modes/rpc/session-binding.d.ts +1 -0
  288. package/dist/modes/rpc/session-binding.d.ts.map +1 -1
  289. package/dist/modes/rpc/session-binding.js +21 -1
  290. package/dist/modes/rpc/session-binding.js.map +1 -1
  291. package/dist/modes/rpc/session-command-router.d.ts +22 -0
  292. package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
  293. package/dist/modes/rpc/session-command-router.js +148 -16
  294. package/dist/modes/rpc/session-command-router.js.map +1 -1
  295. package/dist/modes/rpc/session-event-writer.d.ts +4 -0
  296. package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
  297. package/dist/modes/rpc/session-event-writer.js +58 -7
  298. package/dist/modes/rpc/session-event-writer.js.map +1 -1
  299. package/dist/modes/rpc/session-extension-ui-requests.d.ts +1 -0
  300. package/dist/modes/rpc/session-extension-ui-requests.d.ts.map +1 -1
  301. package/dist/modes/rpc/session-extension-ui-requests.js +5 -0
  302. package/dist/modes/rpc/session-extension-ui-requests.js.map +1 -1
  303. package/dist/modes/rpc/session-registry.d.ts +17 -2
  304. package/dist/modes/rpc/session-registry.d.ts.map +1 -1
  305. package/dist/modes/rpc/session-registry.js +67 -4
  306. package/dist/modes/rpc/session-registry.js.map +1 -1
  307. package/dist/modes/rpc/socket-event-fanout.d.ts +22 -0
  308. package/dist/modes/rpc/socket-event-fanout.d.ts.map +1 -0
  309. package/dist/modes/rpc/socket-event-fanout.js +84 -0
  310. package/dist/modes/rpc/socket-event-fanout.js.map +1 -0
  311. package/docs/rpc.md +55 -2
  312. package/docs/settings.md +34 -0
  313. package/docs/windows.md +2 -0
  314. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +74 -0
  315. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  316. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-indirect-eval.js +139 -90
  317. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +4 -4
  318. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  319. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +6 -3
  320. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  321. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  322. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +40 -20
  323. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  324. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +3 -3
  325. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
  326. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
  327. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts +1 -1
  328. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -1
  329. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js +28 -9
  330. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js.map +1 -1
  331. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  332. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  333. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +67 -38
  334. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  335. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.d.ts +20 -0
  336. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.d.ts.map +1 -0
  337. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.js +443 -0
  338. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.js.map +1 -0
  339. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +2 -0
  340. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts.map +1 -1
  341. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js +2 -0
  342. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
  343. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +1 -1
  344. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  345. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +1 -0
  346. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  347. package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -0
  348. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  349. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  350. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  351. package/node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +1 -1
  352. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  353. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
  354. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  355. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  356. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
  357. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  358. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  359. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  360. package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
  361. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  362. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
  363. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
  364. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  365. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  366. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  367. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts +7 -0
  368. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
  369. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +5 -0
  370. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  371. package/node_modules/@earendil-works/pi-tui/dist/mux.d.ts +1 -1
  372. package/node_modules/@earendil-works/pi-tui/dist/mux.d.ts.map +1 -1
  373. package/node_modules/@earendil-works/pi-tui/dist/mux.js +2 -2
  374. package/node_modules/@earendil-works/pi-tui/dist/mux.js.map +1 -1
  375. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +1 -0
  376. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  377. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +19 -0
  378. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  379. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  380. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"openai-remote.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/openai-remote.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype Api,\n\ttype AssistantMessage,\n\ttype Context,\n\ttype ContextProvenance,\n\tconvertResponsesMessages,\n\tgetContextProvenance,\n\ttype Model,\n\ttype ProviderHeaders,\n\ttype SimpleStreamOptions,\n} from \"@earendil-works/pi-ai\";\nimport { streamSimple } from \"@earendil-works/pi-ai/compat\";\nimport type { CompactionResult } from \"../../../compaction/index.ts\";\nimport { convertToLlm } from \"../../../messages.ts\";\nimport {\n\tbuildContextEntries,\n\tbuildSessionContext,\n\tgetSessionContextEntryId,\n\tSESSION_CONTEXT_ENTRY_ID,\n\ttype SessionEntry,\n\tsessionEntryToContextMessages,\n} from \"../../../session-manager.ts\";\nimport type { ProviderRequestPreparation, ServiceTier, SessionBeforeCompactEvent } from \"../../types.ts\";\nimport type {\n\tOpenAiCompactBody,\n\tOpenAiContextCompactionItem,\n\tOpenAiContextCompactionTriggerItem,\n\tOpenAiRemoteCompactionDetails,\n\tOpenAiRemoteInputItem,\n\tOpenAiRemoteTransport,\n} from \"./openai-remote-convert.ts\";\nimport {\n\tconvertBranchEntries,\n\tconvertPendingMessages,\n\tgetOpenAiRemoteCompactionDetails,\n\tisOpenAiContextCompactionItem,\n\tisOpenAiRemoteCompactionOutputItem,\n\tisRecord,\n\tisRetainedRemoteOutputItem,\n\tisRetainedResponsesStreamInputItem,\n\tOPENAI_REMOTE_COMPACTION_SCHEMA,\n\tproviderNativeItem,\n} from \"./openai-remote-convert.ts\";\nimport {\n\tcreateOpenAiRemoteCompactionHeaders,\n\tisOpenAiRemoteCompactionModel,\n\tmatchesOpenAiRemoteCompactionIdentity,\n\ttype OpenAiRemoteCompactionModel,\n\ttype OpenAiRemoteCompactionOrigin,\n\topenAiRemoteCompactionEndpointPath,\n\topenAiRemoteCompactionEndpointUrl,\n\topenAiRemoteCompactionIdentity,\n\topenAiRemoteCompactionOrigin,\n} from \"./openai-remote-model.ts\";\nimport {\n\tattemptOpenAiResponsesV2Compaction,\n\tsupportsOpenAiResponsesRemoteCompactionV2,\n\tsupportsOpenAiResponsesWebSocket,\n\twithRemoteCompactionV2Header,\n} from \"./openai-remote-responses-v2.ts\";\nimport { runWithRemoteTimeout } from \"./openai-remote-timeout.ts\";\n\nexport type {\n\tOpenAiRemoteCompactionDetails,\n\tOpenAiRemoteInputItem,\n} from \"./openai-remote-convert.ts\";\nexport { getOpenAiRemoteCompactionDetails, OPENAI_REMOTE_COMPACTION_SCHEMA } from \"./openai-remote-convert.ts\";\n\nexport const SENPI_COMPACTION_EVENT = \"senpi:compaction\";\n\nexport type OpenAiRemoteCompactionRequest = {\n\tbody: OpenAiCompactBody;\n\tinputItemCount: number;\n\ttokensBefore: number;\n};\n\nexport type OpenAiRemoteCompactionResult = CompactionResult<OpenAiRemoteCompactionDetails> & {\n\tdetails: OpenAiRemoteCompactionDetails;\n};\n\ntype OpenAiCompactedResponse = {\n\tid: string;\n\tcreated_at: number;\n\tobject: \"response.compaction\";\n\toutput: OpenAiRemoteInputItem[];\n\tusage?: Record<string, unknown>;\n};\n\ntype OpenAiResponsesStream = {\n\tresult(): Promise<AssistantMessage>;\n};\n\ntype OpenAiResponsesStreamRunner = (\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\toptions: SimpleStreamOptions,\n) => OpenAiResponsesStream;\n\nexport type OpenAiRemoteCompactionDependencies = {\n\tfetch?: typeof fetch;\n\tnow?: () => number;\n\tremoteTimeoutMs?: number;\n\tstreamRunner?: OpenAiResponsesStreamRunner;\n};\n\ntype OpenAiRemoteCompactionContext = {\n\tgetSystemPrompt(): string;\n\tmodel: Model<Api> | undefined;\n\tmodelRegistry: {\n\t\tgetApiKeyAndHeaders(model: Model<Api>): Promise<\n\t\t\t| {\n\t\t\t\t\tok: true;\n\t\t\t\t\tapiKey?: string;\n\t\t\t\t\theaders?: ProviderHeaders;\n\t\t\t\t\textraBody?: Record<string, unknown>;\n\t\t\t\t\tbaseUrl?: string;\n\t\t\t\t\tupstreamModelId?: string;\n\t\t\t\t\tserviceTier?: ServiceTier;\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\tok: false;\n\t\t\t\t\terror: string;\n\t\t\t }\n\t\t>;\n\t\tmodelRuntime?: { streamSimple: OpenAiResponsesStreamRunner };\n\t};\n\tserviceTier: ServiceTier | undefined;\n\tsessionManager: {\n\t\tgetSessionId(): string;\n\t};\n\tprepareProviderRequest?(messages: AgentMessage[]): Promise<ProviderRequestPreparation>;\n};\n\ntype OpenAiRemoteCompactionEvent =\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_started\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\trequestId: string;\n\t\t\tmodelId: string;\n\t\t\tinputItemCount: number;\n\t\t\ttransport: OpenAiRemoteTransport;\n\t }\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_completed\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\trequestId: string;\n\t\t\tmodelId: string;\n\t\t\tresponseId: string;\n\t\t\tretainedInputItemCount: number;\n\t\t\ttransport: OpenAiRemoteTransport;\n\t }\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_fallback\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\trequestId: string;\n\t\t\tmodelId?: string;\n\t\t\treason: string;\n\t\t\ttransport?: OpenAiRemoteTransport;\n\t }\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_payload_rewritten\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\tmodelId: string;\n\t\t\tcompactionEntryId: string;\n\t\t\tinputItemCount: number;\n\t };\n\ntype EmitCompactionEvent = (event: OpenAiRemoteCompactionEvent) => void;\n\nconst OPENAI_REMOTE_COMPACTION_TIMEOUT_MS = 15_000;\nconst REMOTE_COMPACTION_TIMEOUT_REASON = \"remote-compaction-timeout\";\nconst INVALID_COMPACT_REQUEST_PAYLOAD_REASON = \"invalid-compact-request-payload\";\nconst MISSING_REMOTE_REPLAY_ORIGIN_REASON = \"missing-remote-replay-origin-provenance\";\nconst REMOTE_REPLAY_ORIGIN_MISMATCH_REASON = \"remote-replay-origin-mismatch\";\nconst UNPROVEN_REMOTE_REPLAY_BOUNDARY_REASON = \"unproven-remote-replay-boundary\";\nconst OPENAI_REMOTE_REPLAY_BOUNDARY_SCOPE = \"openai-remote-replay\";\nconst OPENAI_RESPONSES_TOOL_CALL_PROVIDERS = new Set([\"openai\", \"openai-codex\", \"opencode\"]);\n\nexport function createOpenAiRemoteCompactionRequest(options: {\n\tmodel: Model<Api> | undefined;\n\tsystemPrompt: string;\n\tbranchEntries: SessionEntry[];\n\tmessages?: AgentMessage[];\n\ttokensBefore: number;\n\tpromptCacheKey?: string;\n\tserviceTier?: ServiceTier;\n}): OpenAiRemoteCompactionRequest | undefined {\n\tif (!isOpenAiRemoteCompactionModel(options.model)) return undefined;\n\tconst input = options.messages\n\t\t? convertPendingMessages(options.messages, options.model)\n\t\t: convertBranchEntries(options.branchEntries, options.model);\n\tif (input.length === 0) return undefined;\n\treturn {\n\t\tbody: {\n\t\t\tmodel: options.model.id,\n\t\t\tinput,\n\t\t\t...(options.systemPrompt ? { instructions: options.systemPrompt } : {}),\n\t\t\t...(options.promptCacheKey ? { prompt_cache_key: options.promptCacheKey } : {}),\n\t\t\t...(options.serviceTier ? { service_tier: options.serviceTier } : {}),\n\t\t},\n\t\tinputItemCount: input.length,\n\t\ttokensBefore: options.tokensBefore,\n\t};\n}\n\nfunction parseOpenAiCompactedResponse(options: {\n\tvalue: unknown;\n\tmodel: OpenAiRemoteCompactionModel;\n\trequestId: string;\n\tnow: () => number;\n}): OpenAiCompactedResponse | undefined {\n\tif (!isRecord(options.value) || !Array.isArray(options.value.output)) return undefined;\n\tif (options.model.api === \"openai-responses\") {\n\t\tif (\n\t\t\toptions.value.object !== \"response.compaction\" ||\n\t\t\ttypeof options.value.id !== \"string\" ||\n\t\t\ttypeof options.value.created_at !== \"number\"\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\treturn {\n\t\tid: typeof options.value.id === \"string\" ? options.value.id : `codex-compact:${options.requestId}`,\n\t\tcreated_at:\n\t\t\ttypeof options.value.created_at === \"number\" ? options.value.created_at : Math.floor(options.now() / 1000),\n\t\tobject: \"response.compaction\",\n\t\toutput: options.value.output.filter((item): item is OpenAiRemoteInputItem => isRecord(item)),\n\t\t...(isRecord(options.value.usage) ? { usage: options.value.usage } : {}),\n\t};\n}\n\nexport function buildOpenAiRemoteCompactionResult(options: {\n\tmodel: OpenAiRemoteCompactionModel;\n\tfirstKeptEntryId: string;\n\ttokensBefore: number;\n\trequestInputItemCount: number;\n\tresponse: OpenAiCompactedResponse;\n\torigin?: OpenAiRemoteCompactionOrigin;\n}): OpenAiRemoteCompactionResult {\n\tconst replacementInput = options.response.output.filter(isRetainedRemoteOutputItem);\n\tconst compactionItem = replacementInput.find(isOpenAiRemoteCompactionOutputItem);\n\tif (!compactionItem) {\n\t\tthrow new Error(\"OpenAI remote compaction did not return a compaction item\");\n\t}\n\n\tconst details = {\n\t\tschema: OPENAI_REMOTE_COMPACTION_SCHEMA,\n\t\tmode: \"openai-remote\",\n\t\t...openAiRemoteCompactionIdentity(options.model),\n\t\ttransport: \"compact-endpoint\",\n\t\tmodelId: options.model.id,\n\t\tresponseId: options.response.id,\n\t\tcreatedAt: options.response.created_at,\n\t\trequestInputItemCount: options.requestInputItemCount,\n\t\tretainedInputItemCount: replacementInput.length,\n\t\treplacementInput,\n\t\t...(options.origin ? { origin: options.origin } : {}),\n\t\t...(options.response.usage ? { usage: options.response.usage } : {}),\n\t} satisfies OpenAiRemoteCompactionDetails;\n\tconst endpointPath =\n\t\toptions.model.api === \"openai-codex-responses\"\n\t\t\t? `/${openAiRemoteCompactionEndpointPath(options.model)}`\n\t\t\t: \"/v1/responses/compact\";\n\n\treturn {\n\t\tsummary: [\n\t\t\t\"OpenAI remote compaction checkpoint.\",\n\t\t\t`Native ${endpointPath} replay is active for ${replacementInput.length.toLocaleString()} retained item(s).`,\n\t\t\t`Original OpenAI input items compacted: ${options.requestInputItemCount.toLocaleString()}.`,\n\t\t].join(\"\\n\"),\n\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\ttokensBefore: options.tokensBefore,\n\t\tdetails,\n\t};\n}\n\nfunction createOpenAiResponsesStreamCompactionInput(request: OpenAiRemoteCompactionRequest): OpenAiRemoteInputItem[] {\n\treturn [...request.body.input, { type: \"context_compaction\" } satisfies OpenAiContextCompactionTriggerItem];\n}\n\nexport function createOpenAiResponsesStreamCompactionPayload(\n\tpayload: unknown,\n\trequest: OpenAiRemoteCompactionRequest,\n): unknown | undefined {\n\tif (!isRecord(payload)) return undefined;\n\treturn {\n\t\t...payload,\n\t\tmodel: request.body.model,\n\t\tinput: [...leadingPromptMessages(payload.input), ...createOpenAiResponsesStreamCompactionInput(request)],\n\t\t...(request.body.prompt_cache_key ? { prompt_cache_key: request.body.prompt_cache_key } : {}),\n\t\t...(request.body.service_tier ? { service_tier: request.body.service_tier } : {}),\n\t};\n}\n\nfunction findResponsesStreamCompactionOutput(message: AssistantMessage): OpenAiContextCompactionItem | undefined {\n\tfor (const block of message.content) {\n\t\tif (block.type !== \"providerNative\") continue;\n\t\tconst item = providerNativeItem(block.raw);\n\t\tif (item && isOpenAiContextCompactionItem(item)) return item;\n\t}\n\treturn undefined;\n}\n\nfunction usageRecordFromAssistant(message: AssistantMessage): Record<string, unknown> {\n\treturn {\n\t\tinput: message.usage.input,\n\t\toutput: message.usage.output,\n\t\tcacheRead: message.usage.cacheRead,\n\t\tcacheWrite: message.usage.cacheWrite,\n\t\ttotalTokens: message.usage.totalTokens,\n\t};\n}\n\nexport function buildOpenAiResponsesStreamCompactionResult(options: {\n\tmodel: Model<\"openai-responses\">;\n\tfirstKeptEntryId: string;\n\ttokensBefore: number;\n\trequestInput: OpenAiRemoteInputItem[];\n\tresponse: AssistantMessage;\n\tnow: () => number;\n\torigin?: OpenAiRemoteCompactionOrigin;\n}): OpenAiRemoteCompactionResult {\n\tconst compactionItem = findResponsesStreamCompactionOutput(options.response);\n\tif (!compactionItem) {\n\t\tthrow new Error(\"OpenAI Responses stream compaction did not return a context_compaction item\");\n\t}\n\n\tconst retainedInput = options.requestInput.filter(isRetainedResponsesStreamInputItem);\n\tconst replacementInput = [...retainedInput, compactionItem];\n\tconst details = {\n\t\tschema: OPENAI_REMOTE_COMPACTION_SCHEMA,\n\t\tmode: \"openai-remote\",\n\t\tprovider: \"openai\",\n\t\tapi: \"openai-responses\",\n\t\ttransport: \"websocket\",\n\t\tmodelId: options.model.id,\n\t\tresponseId: options.response.responseId ?? `response-${options.now()}`,\n\t\tcreatedAt: Math.floor(options.response.timestamp / 1000),\n\t\trequestInputItemCount: options.requestInput.length,\n\t\tretainedInputItemCount: replacementInput.length,\n\t\treplacementInput,\n\t\t...(options.origin ? { origin: options.origin } : {}),\n\t\tusage: usageRecordFromAssistant(options.response),\n\t} satisfies OpenAiRemoteCompactionDetails;\n\n\treturn {\n\t\tsummary: [\n\t\t\t\"OpenAI remote compaction checkpoint.\",\n\t\t\t`Native Responses WebSocket replay is active for ${replacementInput.length.toLocaleString()} retained item(s).`,\n\t\t\t`Original OpenAI input items compacted: ${options.requestInput.length.toLocaleString()}.`,\n\t\t].join(\"\\n\"),\n\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\ttokensBefore: options.tokensBefore,\n\t\tdetails,\n\t};\n}\n\nasync function runOpenAiResponsesStreamCompaction(options: {\n\tmodel: Model<\"openai-responses\">;\n\tauth: { apiKey?: string; headers?: ProviderHeaders; extraBody?: Record<string, unknown> };\n\tfirstKeptEntryId: string;\n\tnow: () => number;\n\trequest: OpenAiRemoteCompactionRequest;\n\tsignal: AbortSignal;\n\tstreamRunner: OpenAiResponsesStreamRunner;\n\tsystemPrompt: string;\n\theaders?: ProviderHeaders;\n\tproviderRequest?: ProviderRequestPreparation;\n\torigin: OpenAiRemoteCompactionOrigin;\n}): Promise<OpenAiRemoteCompactionResult | undefined> {\n\tconst stream = options.streamRunner(\n\t\toptions.model,\n\t\t{ systemPrompt: options.systemPrompt, messages: [] },\n\t\t{\n\t\t\tapiKey: options.auth.apiKey,\n\t\t\tcacheRetention: \"short\",\n\t\t\textraBody: options.auth.extraBody,\n\t\t\theaders: options.headers ?? options.auth.headers,\n\t\t\tonPayload: async (payload) => {\n\t\t\t\tconst rewritten = createOpenAiResponsesStreamCompactionPayload(payload, options.request);\n\t\t\t\tif (!isRecord(rewritten) || !Array.isArray(rewritten.input)) {\n\t\t\t\t\tthrow new Error(\"Unable to build OpenAI Responses stream compaction payload\");\n\t\t\t\t}\n\t\t\t\tconst transformedPayload = options.providerRequest\n\t\t\t\t\t? await options.providerRequest.transformPayload(rewritten)\n\t\t\t\t\t: rewritten;\n\t\t\t\tif (!isOpenAiCompactBody(transformedPayload)) {\n\t\t\t\t\tthrow new Error(INVALID_COMPACT_REQUEST_PAYLOAD_REASON);\n\t\t\t\t}\n\t\t\t\treturn transformedPayload;\n\t\t\t},\n\t\t\tsessionId: options.request.body.prompt_cache_key,\n\t\t\tsignal: options.signal,\n\t\t\ttransport: \"websocket\",\n\t\t},\n\t);\n\tconst response = await stream.result();\n\tif (response.stopReason === \"error\" || response.stopReason === \"aborted\") {\n\t\treturn undefined;\n\t}\n\treturn buildOpenAiResponsesStreamCompactionResult({\n\t\tmodel: options.model,\n\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\ttokensBefore: options.request.tokensBefore,\n\t\trequestInput: options.request.body.input,\n\t\tresponse,\n\t\tnow: options.now,\n\t\torigin: options.origin,\n\t});\n}\n\nasync function runOpenAiCompactEndpointCompaction(options: {\n\tfetchImpl: typeof fetch;\n\theaders: Headers;\n\tmodel: OpenAiRemoteCompactionModel;\n\trequest: OpenAiRemoteCompactionRequest;\n\trequestId: string;\n\tsignal: AbortSignal;\n\tfirstKeptEntryId: string;\n\tnow: () => number;\n\temit?: EmitCompactionEvent;\n\torigin: OpenAiRemoteCompactionOrigin;\n}): Promise<OpenAiRemoteCompactionResult | undefined> {\n\toptions.emit?.({\n\t\tversion: 1,\n\t\taction: \"remote_started\",\n\t\troute: \"builtin.compaction.openai_remote\",\n\t\trequestId: options.requestId,\n\t\tmodelId: options.model.id,\n\t\tinputItemCount: options.request.inputItemCount,\n\t\ttransport: \"compact-endpoint\",\n\t});\n\n\tlet response: Response;\n\ttry {\n\t\tresponse = await options.fetchImpl(openAiRemoteCompactionEndpointUrl(options.model), {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: options.headers,\n\t\t\tbody: JSON.stringify(options.request.body),\n\t\t\tsignal: options.signal,\n\t\t});\n\t} catch (error) {\n\t\tif (options.signal.aborted) throw error;\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tif (!response.ok) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: `HTTP ${response.status}`,\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tlet payload: unknown;\n\ttry {\n\t\tpayload = await response.json();\n\t} catch (error) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\tconst compactedResponse = parseOpenAiCompactedResponse({\n\t\tvalue: payload,\n\t\tmodel: options.model,\n\t\trequestId: options.requestId,\n\t\tnow: options.now,\n\t});\n\tif (!compactedResponse) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: \"invalid-compact-response\",\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tlet result: OpenAiRemoteCompactionResult;\n\ttry {\n\t\tresult = buildOpenAiRemoteCompactionResult({\n\t\t\tmodel: options.model,\n\t\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\t\ttokensBefore: options.request.tokensBefore,\n\t\t\trequestInputItemCount: options.request.inputItemCount,\n\t\t\tresponse: compactedResponse,\n\t\t\torigin: options.origin,\n\t\t});\n\t} catch (error) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\toptions.emit?.({\n\t\tversion: 1,\n\t\taction: \"remote_completed\",\n\t\troute: \"builtin.compaction.openai_remote\",\n\t\trequestId: options.requestId,\n\t\tmodelId: options.model.id,\n\t\tresponseId: compactedResponse.id,\n\t\tretainedInputItemCount: result.details.retainedInputItemCount,\n\t\ttransport: \"compact-endpoint\",\n\t});\n\treturn result;\n}\n\nfunction isOpenAiCompactBody(value: unknown): value is OpenAiCompactBody {\n\treturn (\n\t\tisRecord(value) && typeof value.model === \"string\" && Array.isArray(value.input) && value.input.every(isRecord)\n\t);\n}\n\n/**\n * A provider registered through `pi.registerProvider()` owns its own transport for\n * its api id and is absent from compat's builtin api-registry, so the remote route\n * dispatches through the model runtime whenever it is reachable.\n */\nfunction resolveRemoteStreamRunner(\n\tctx: OpenAiRemoteCompactionContext,\n\tdependencies: OpenAiRemoteCompactionDependencies,\n): OpenAiResponsesStreamRunner {\n\tif (dependencies.streamRunner) return dependencies.streamRunner;\n\tconst runtime = ctx.modelRegistry.modelRuntime;\n\tif (runtime) return (model, context, options) => runtime.streamSimple(model, context, options);\n\treturn (model, context, options) => streamSimple(model, context, options);\n}\n\nexport async function runOpenAiRemoteCompaction(\n\tctx: OpenAiRemoteCompactionContext,\n\tevent: SessionBeforeCompactEvent,\n\temit?: EmitCompactionEvent,\n\tdependencies: OpenAiRemoteCompactionDependencies = {},\n): Promise<OpenAiRemoteCompactionResult | undefined> {\n\tconst model = ctx.model;\n\tif (!isOpenAiRemoteCompactionModel(model) || event.reason === \"branch\") {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model?.id,\n\t\t\treason: event.reason === \"branch\" ? \"branch-compaction\" : \"not-openai-responses\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tconst auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);\n\tif (!auth.ok) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model.id,\n\t\t\treason: auth.error,\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tconst requestModel: OpenAiRemoteCompactionModel =\n\t\tauth.upstreamModelId || auth.baseUrl\n\t\t\t? {\n\t\t\t\t\t...model,\n\t\t\t\t\t...(auth.upstreamModelId ? { id: auth.upstreamModelId } : {}),\n\t\t\t\t\t...(auth.baseUrl ? { baseUrl: auth.baseUrl } : {}),\n\t\t\t\t}\n\t\t\t: model;\n\tconst serviceTier = ctx.serviceTier ?? auth.serviceTier;\n\tconst providerRequest = await ctx.prepareProviderRequest?.(buildSessionContext(event.branchEntries).messages);\n\tconst request = createOpenAiRemoteCompactionRequest({\n\t\tmodel: requestModel,\n\t\tsystemPrompt: ctx.getSystemPrompt(),\n\t\tbranchEntries: event.branchEntries,\n\t\tmessages: providerRequest?.messages,\n\t\ttokensBefore: event.preparation.tokensBefore,\n\t\tpromptCacheKey: ctx.sessionManager.getSessionId(),\n\t\tserviceTier,\n\t});\n\tif (!request) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model.id,\n\t\t\treason: \"empty-compaction-input\",\n\t\t});\n\t\treturn undefined;\n\t}\n\tconst remoteTimeoutMs = dependencies.remoteTimeoutMs ?? OPENAI_REMOTE_COMPACTION_TIMEOUT_MS;\n\t// Normal provider requests transform configured headers before the Codex\n\t// transport applies its canonical auth/account fields. Mirror that ordering\n\t// so extension routing choices are retained but cannot impersonate another\n\t// OAuth account on either the wire or persisted provenance.\n\tconst transformedHeaders = providerRequest\n\t\t? await providerRequest.transformHeaders(auth.headers ?? {})\n\t\t: auth.headers;\n\tconst requestHeaders = createOpenAiRemoteCompactionHeaders(\n\t\trequestModel,\n\t\t{ ...auth, headers: transformedHeaders },\n\t\trequest.body.prompt_cache_key,\n\t);\n\tif (!requestHeaders) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model.id,\n\t\t\treason: \"missing-openai-auth\",\n\t\t});\n\t\treturn undefined;\n\t}\n\tconst origin = openAiRemoteCompactionOrigin(requestModel, requestHeaders);\n\tif (!origin) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: requestModel.id,\n\t\t\treason: MISSING_REMOTE_REPLAY_ORIGIN_REASON,\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tif (requestModel.api === \"openai-responses\") {\n\t\tconst responsesModel = requestModel as Model<\"openai-responses\">;\n\t\tif (supportsOpenAiResponsesRemoteCompactionV2(responsesModel)) {\n\t\t\tconst responseHeaders = withRemoteCompactionV2Header(Object.fromEntries(requestHeaders.entries()));\n\t\t\tconst responseOrigin = openAiRemoteCompactionOrigin(responsesModel, responseHeaders);\n\t\t\tif (!responseOrigin) return undefined;\n\t\t\tconst result = await attemptOpenAiResponsesV2Compaction({\n\t\t\t\tauth: { apiKey: auth.apiKey, extraBody: auth.extraBody },\n\t\t\t\temit,\n\t\t\t\tevent,\n\t\t\t\theaders: responseHeaders,\n\t\t\t\tmodel: responsesModel,\n\t\t\t\torigin: responseOrigin,\n\t\t\t\tproviderRequest,\n\t\t\t\trequest,\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tsessionId: ctx.sessionManager.getSessionId(),\n\t\t\t\tstream: resolveRemoteStreamRunner(ctx, dependencies),\n\t\t\t\tsystemPrompt: ctx.getSystemPrompt(),\n\t\t\t\ttimeoutMs: remoteTimeoutMs,\n\t\t\t});\n\t\t\tif (result) return result;\n\t\t}\n\t}\n\n\tif (supportsOpenAiResponsesWebSocket(requestModel)) {\n\t\tconst websocketHeaders = Object.fromEntries(requestHeaders.entries());\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_started\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: requestModel.id,\n\t\t\tinputItemCount: request.inputItemCount,\n\t\t\ttransport: \"websocket\",\n\t\t});\n\t\ttry {\n\t\t\tconst result = await runWithRemoteTimeout({\n\t\t\t\tsignal: event.signal,\n\t\t\t\ttimeoutMs: remoteTimeoutMs,\n\t\t\t\tonTimeout: () =>\n\t\t\t\t\temit?.({\n\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\taction: \"remote_fallback\",\n\t\t\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\t\t\trequestId: event.requestId,\n\t\t\t\t\t\tmodelId: requestModel.id,\n\t\t\t\t\t\treason: REMOTE_COMPACTION_TIMEOUT_REASON,\n\t\t\t\t\t\ttransport: \"websocket\",\n\t\t\t\t\t}),\n\t\t\t\trun: (signal) =>\n\t\t\t\t\trunOpenAiResponsesStreamCompaction({\n\t\t\t\t\t\tmodel: requestModel,\n\t\t\t\t\t\tauth: { apiKey: auth.apiKey, extraBody: auth.extraBody },\n\t\t\t\t\t\tfirstKeptEntryId: event.preparation.firstKeptEntryId,\n\t\t\t\t\t\tnow: dependencies.now ?? Date.now,\n\t\t\t\t\t\trequest,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tstreamRunner: resolveRemoteStreamRunner(ctx, dependencies),\n\t\t\t\t\t\tsystemPrompt: ctx.getSystemPrompt(),\n\t\t\t\t\t\theaders: websocketHeaders,\n\t\t\t\t\t\tproviderRequest,\n\t\t\t\t\t\torigin,\n\t\t\t\t\t}),\n\t\t\t});\n\t\t\tif (result) {\n\t\t\t\temit?.({\n\t\t\t\t\tversion: 1,\n\t\t\t\t\taction: \"remote_completed\",\n\t\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\t\trequestId: event.requestId,\n\t\t\t\t\tmodelId: requestModel.id,\n\t\t\t\t\tresponseId: result.details.responseId,\n\t\t\t\t\tretainedInputItemCount: result.details.retainedInputItemCount,\n\t\t\t\t\ttransport: \"websocket\",\n\t\t\t\t});\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\temit?.({\n\t\t\t\tversion: 1,\n\t\t\t\taction: \"remote_fallback\",\n\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tmodelId: requestModel.id,\n\t\t\t\treason: \"websocket-compaction-no-result\",\n\t\t\t\ttransport: \"websocket\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (event.signal.aborted) throw error;\n\t\t\temit?.({\n\t\t\t\tversion: 1,\n\t\t\t\taction: \"remote_fallback\",\n\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tmodelId: requestModel.id,\n\t\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\t\ttransport: \"websocket\",\n\t\t\t});\n\t\t}\n\t}\n\n\tconst transformedPayload = providerRequest ? await providerRequest.transformPayload(request.body) : request.body;\n\tif (!isOpenAiCompactBody(transformedPayload)) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: requestModel.id,\n\t\t\treason: INVALID_COMPACT_REQUEST_PAYLOAD_REASON,\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\tconst transformedRequest = { ...request, body: transformedPayload };\n\n\treturn runWithRemoteTimeout({\n\t\tsignal: event.signal,\n\t\ttimeoutMs: remoteTimeoutMs,\n\t\tonTimeout: () =>\n\t\t\temit?.({\n\t\t\t\tversion: 1,\n\t\t\t\taction: \"remote_fallback\",\n\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tmodelId: requestModel.id,\n\t\t\t\treason: REMOTE_COMPACTION_TIMEOUT_REASON,\n\t\t\t\ttransport: \"compact-endpoint\",\n\t\t\t}),\n\t\trun: (signal) =>\n\t\t\trunOpenAiCompactEndpointCompaction({\n\t\t\t\tfetchImpl: dependencies.fetch ?? fetch,\n\t\t\t\theaders: requestHeaders,\n\t\t\t\tmodel: requestModel,\n\t\t\t\trequest: transformedRequest,\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tsignal,\n\t\t\t\tfirstKeptEntryId: event.preparation.firstKeptEntryId,\n\t\t\t\tnow: dependencies.now ?? Date.now,\n\t\t\t\temit,\n\t\t\t\torigin,\n\t\t\t}),\n\t});\n}\n\nfunction latestRemoteCompaction(\n\tentries: SessionEntry[],\n): { entryId: string; index: number; firstKeptEntryId: string; details: OpenAiRemoteCompactionDetails } | undefined {\n\tfor (let index = entries.length - 1; index >= 0; index--) {\n\t\tconst entry = entries[index];\n\t\tif (entry?.type !== \"compaction\") continue;\n\t\tconst details = getOpenAiRemoteCompactionDetails(entry.details);\n\t\tif (details) return { entryId: entry.id, index, firstKeptEntryId: entry.firstKeptEntryId, details };\n\t\treturn undefined;\n\t}\n\treturn undefined;\n}\n\ntype OpenAiRemoteReplayBoundary = ContextProvenance & {\n\tscope: typeof OPENAI_REMOTE_REPLAY_BOUNDARY_SCOPE;\n\tcompactionEntryId: string;\n\tordinal: number;\n\texpectedOrdinals: number[];\n\tintegrity?: string;\n};\n\ntype RemoteCompactionCheckpoint = {\n\tentryId: string;\n\tindex: number;\n\tfirstKeptEntryId: string;\n\tdetails: OpenAiRemoteCompactionDetails;\n};\n\nfunction checkpointContextEntries(entries: SessionEntry[], remote: RemoteCompactionCheckpoint): SessionEntry[] {\n\tconst checkpointEntryIds = new Set(entries.slice(0, remote.index + 1).map((entry) => entry.id));\n\treturn buildContextEntries(entries).filter((entry) => checkpointEntryIds.has(entry.id));\n}\n\nfunction leadingPromptMessages(input: unknown): OpenAiRemoteInputItem[] {\n\tif (!Array.isArray(input)) return [];\n\tconst result: OpenAiRemoteInputItem[] = [];\n\tfor (const item of input) {\n\t\tif (!isRecord(item)) break;\n\t\tconst role = item.role;\n\t\tif (role !== \"system\" && role !== \"developer\") break;\n\t\tresult.push(providerNativeItem(item) ?? { role, content: typeof item.content === \"string\" ? item.content : [] });\n\t}\n\treturn result;\n}\n\nfunction replayBoundaryConversionOptions(model: Model<Api>): {\n\tincludeSystemPrompt?: boolean;\n\tpreserveTextSignatures?: boolean;\n} {\n\treturn model.api === \"openai-codex-responses\" ? { includeSystemPrompt: false, preserveTextSignatures: true } : {};\n}\n\nfunction isRemoteReplayBoundary(value: unknown): value is OpenAiRemoteReplayBoundary {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n\tconst boundary = value as Record<string, unknown>;\n\treturn (\n\t\tboundary.scope === OPENAI_REMOTE_REPLAY_BOUNDARY_SCOPE &&\n\t\ttypeof boundary.compactionEntryId === \"string\" &&\n\t\ttypeof boundary.ordinal === \"number\" &&\n\t\tArray.isArray(boundary.expectedOrdinals) &&\n\t\tboundary.expectedOrdinals.every((ordinal) => typeof ordinal === \"number\") &&\n\t\ttypeof boundary.integrity === \"string\"\n\t);\n}\n\nfunction replayBoundaryForInputItem(value: unknown): OpenAiRemoteReplayBoundary | undefined {\n\tconst provenance = getContextProvenance(value);\n\treturn isRemoteReplayBoundary(provenance) ? provenance : undefined;\n}\n\nfunction sameOrdinals(left: readonly number[], right: readonly number[]): boolean {\n\treturn left.length === right.length && left.every((value, index) => value === right[index]);\n}\n\nfunction emitReplayFallback(\n\temit: EmitCompactionEvent | undefined,\n\tremote: RemoteCompactionCheckpoint,\n\tmodelId: string,\n\treason: string,\n): void {\n\temit?.({\n\t\tversion: 1,\n\t\taction: \"remote_fallback\",\n\t\troute: \"builtin.compaction.openai_remote\",\n\t\trequestId: `replay:${remote.entryId}`,\n\t\tmodelId,\n\t\treason,\n\t});\n}\n\nfunction matchingReplayOrigin(\n\tpersisted: OpenAiRemoteCompactionOrigin | undefined,\n\tcurrent: OpenAiRemoteCompactionOrigin | undefined,\n): boolean {\n\treturn (\n\t\tpersisted !== undefined &&\n\t\tcurrent !== undefined &&\n\t\tpersisted.endpoint === current.endpoint &&\n\t\tpersisted.trustDomain === current.trustDomain &&\n\t\tpersisted.authTenantFingerprint === current.authTenantFingerprint\n\t);\n}\n\n/**\n * Mark the exact checkpoint-owned messages before later context hooks run.\n * The markers carry entry identity, not payload values; the Responses converter\n * transports them as non-enumerable request-local metadata for final validation.\n */\nexport function markOpenAiRemoteReplayBoundary(\n\tmessages: AgentMessage[],\n\toptions: { model: Model<Api> | undefined; branchEntries: SessionEntry[] },\n): AgentMessage[] {\n\tif (!isOpenAiRemoteCompactionModel(options.model)) return messages;\n\tconst remote = latestRemoteCompaction(options.branchEntries);\n\tif (!remote?.details.origin || !matchesOpenAiRemoteCompactionIdentity(options.model, remote.details)) {\n\t\treturn messages;\n\t}\n\tconst entryIds = checkpointContextEntries(options.branchEntries, remote)\n\t\t.filter((entry) => sessionEntryToContextMessages(entry).length > 0)\n\t\t.map((entry) => entry.id);\n\tif (\n\t\tentryIds.length === 0 ||\n\t\tmessages.length < entryIds.length ||\n\t\t!entryIds.every((entryId, index) => {\n\t\t\tconst message = messages[index] as AgentMessage & { [SESSION_CONTEXT_ENTRY_ID]?: unknown };\n\t\t\treturn message?.[SESSION_CONTEXT_ENTRY_ID] === entryId || getSessionContextEntryId(message) === entryId;\n\t\t})\n\t) {\n\t\treturn messages;\n\t}\n\n\tconst expectedOrdinals: number[] = [];\n\tconst marked = messages.map((message, index) => {\n\t\tif (index >= entryIds.length) return message;\n\t\tconst boundary: OpenAiRemoteReplayBoundary = {\n\t\t\tscope: OPENAI_REMOTE_REPLAY_BOUNDARY_SCOPE,\n\t\t\tcompactionEntryId: remote.entryId,\n\t\t\tordinal: index,\n\t\t\texpectedOrdinals,\n\t\t};\n\t\treturn Object.assign({}, message, { __piContextProvenance: boundary }) as AgentMessage;\n\t});\n\tconst baseline = convertResponsesMessages(\n\t\toptions.model,\n\t\t{ messages: convertToLlm(marked) },\n\t\tOPENAI_RESPONSES_TOOL_CALL_PROVIDERS,\n\t\t{ ...replayBoundaryConversionOptions(options.model), sealContextProvenance: true },\n\t);\n\tfor (const item of baseline) {\n\t\tconst boundary = replayBoundaryForInputItem(item);\n\t\tif (boundary?.compactionEntryId === remote.entryId) expectedOrdinals.push(boundary.ordinal);\n\t}\n\treturn expectedOrdinals.length > 0 ? marked : messages;\n}\n\nexport function rewriteOpenAiPayloadWithRemoteCompaction(\n\tpayload: unknown,\n\toptions: {\n\t\tmodel: Model<Api> | undefined;\n\t\tbranchEntries: SessionEntry[];\n\t\torigin?: OpenAiRemoteCompactionOrigin;\n\t},\n\temit?: EmitCompactionEvent,\n): unknown | undefined {\n\tif (!isOpenAiRemoteCompactionModel(options.model) || !isRecord(payload)) {\n\t\treturn undefined;\n\t}\n\tconst payloadInput = payload.input;\n\tif (!Array.isArray(payloadInput)) return undefined;\n\tconst remote = latestRemoteCompaction(options.branchEntries);\n\tif (!remote) return undefined;\n\tif (!matchesOpenAiRemoteCompactionIdentity(options.model, remote.details)) {\n\t\temitReplayFallback(emit, remote, options.model.id, \"remote-replay-identity-mismatch\");\n\t\treturn undefined;\n\t}\n\tif (!remote.details.origin || !options.origin) {\n\t\temitReplayFallback(emit, remote, options.model.id, MISSING_REMOTE_REPLAY_ORIGIN_REASON);\n\t\treturn undefined;\n\t}\n\tif (!matchingReplayOrigin(remote.details.origin, options.origin)) {\n\t\temitReplayFallback(emit, remote, options.model.id, REMOTE_REPLAY_ORIGIN_MISMATCH_REASON);\n\t\treturn undefined;\n\t}\n\n\tconst checkpointStart = leadingPromptMessages(payloadInput).length;\n\tconst allBoundaries = payloadInput\n\t\t.map(replayBoundaryForInputItem)\n\t\t.filter((boundary): boundary is OpenAiRemoteReplayBoundary => boundary?.compactionEntryId === remote.entryId);\n\tconst expectedOrdinals = allBoundaries[0]?.expectedOrdinals;\n\tif (\n\t\t!expectedOrdinals ||\n\t\texpectedOrdinals.length === 0 ||\n\t\tallBoundaries.length !== expectedOrdinals.length ||\n\t\tpayloadInput.length < checkpointStart + expectedOrdinals.length ||\n\t\t!allBoundaries.every(\n\t\t\t(boundary, index) =>\n\t\t\t\tsameOrdinals(boundary.expectedOrdinals, expectedOrdinals) && boundary.ordinal === expectedOrdinals[index],\n\t\t) ||\n\t\t!expectedOrdinals.every((ordinal: number, index: number) => {\n\t\t\tconst boundary = replayBoundaryForInputItem(payloadInput[checkpointStart + index]);\n\t\t\treturn (\n\t\t\t\tboundary?.compactionEntryId === remote.entryId &&\n\t\t\t\tboundary.ordinal === ordinal &&\n\t\t\t\tsameOrdinals(boundary.expectedOrdinals, expectedOrdinals)\n\t\t\t);\n\t\t})\n\t) {\n\t\temitReplayFallback(emit, remote, options.model.id, UNPROVEN_REMOTE_REPLAY_BOUNDARY_REASON);\n\t\treturn undefined;\n\t}\n\n\tconst input = [\n\t\t...payloadInput.slice(0, checkpointStart).filter(isRecord),\n\t\t...remote.details.replacementInput,\n\t\t...payloadInput.slice(checkpointStart + expectedOrdinals.length).filter(isRecord),\n\t];\n\temit?.({\n\t\tversion: 1,\n\t\taction: \"remote_payload_rewritten\",\n\t\troute: \"builtin.compaction.openai_remote\",\n\t\tmodelId: options.model.id,\n\t\tcompactionEntryId: remote.entryId,\n\t\tinputItemCount: input.length,\n\t});\n\treturn { ...payload, input };\n}\n"]}
1
+ {"version":3,"file":"openai-remote.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/openai-remote.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype Api,\n\ttype AssistantMessage,\n\ttype ContextProvenance,\n\tconvertResponsesMessages,\n\tgetContextProvenance,\n\ttype Model,\n\ttype ProviderHeaders,\n} from \"@earendil-works/pi-ai\";\nimport { streamSimple } from \"@earendil-works/pi-ai/compat\";\nimport type { CompactionResult } from \"../../../compaction/index.ts\";\nimport { convertToLlm } from \"../../../messages.ts\";\nimport {\n\tbuildContextEntries,\n\tbuildSessionContext,\n\tgetSessionContextEntryId,\n\tSESSION_CONTEXT_ENTRY_ID,\n\ttype SessionEntry,\n\tsessionEntryToContextMessages,\n} from \"../../../session-manager.ts\";\nimport type { ProviderRequestPreparation, ServiceTier, SessionBeforeCompactEvent } from \"../../types.ts\";\nimport type {\n\tOpenAiCompactBody,\n\tOpenAiContextCompactionItem,\n\tOpenAiContextCompactionTriggerItem,\n\tOpenAiRemoteCompactionDetails,\n\tOpenAiRemoteInputItem,\n\tOpenAiRemoteTransport,\n} from \"./openai-remote-convert.ts\";\nimport {\n\tconvertBranchEntries,\n\tconvertPendingMessages,\n\tgetOpenAiRemoteCompactionDetails,\n\tisOpenAiContextCompactionItem,\n\tisOpenAiRemoteCompactionOutputItem,\n\tisRecord,\n\tisRetainedRemoteOutputItem,\n\tisRetainedResponsesStreamInputItem,\n\tOPENAI_REMOTE_COMPACTION_SCHEMA,\n\tproviderNativeItem,\n} from \"./openai-remote-convert.ts\";\nimport {\n\tcreateOpenAiRemoteCompactionHeaders,\n\tisOpenAiRemoteCompactionModel,\n\tmatchesOpenAiRemoteCompactionIdentity,\n\ttype OpenAiRemoteCompactionModel,\n\ttype OpenAiRemoteCompactionOrigin,\n\topenAiRemoteCompactionEndpointPath,\n\topenAiRemoteCompactionEndpointUrl,\n\topenAiRemoteCompactionIdentity,\n\topenAiRemoteCompactionOrigin,\n} from \"./openai-remote-model.ts\";\nimport {\n\tattemptOpenAiResponsesV2Compaction,\n\tsupportsOpenAiResponsesRemoteCompactionV2,\n\tsupportsOpenAiResponsesWebSocket,\n\twithRemoteCompactionV2Header,\n} from \"./openai-remote-responses-v2.ts\";\nimport { runWithRemoteTimeout } from \"./openai-remote-timeout.ts\";\n\nexport type {\n\tOpenAiRemoteCompactionDetails,\n\tOpenAiRemoteInputItem,\n} from \"./openai-remote-convert.ts\";\nexport { getOpenAiRemoteCompactionDetails, OPENAI_REMOTE_COMPACTION_SCHEMA } from \"./openai-remote-convert.ts\";\n\nexport const SENPI_COMPACTION_EVENT = \"senpi:compaction\";\n\nexport type OpenAiRemoteCompactionRequest = {\n\tbody: OpenAiCompactBody;\n\tinputItemCount: number;\n\ttokensBefore: number;\n};\n\nexport type OpenAiRemoteCompactionResult = CompactionResult<OpenAiRemoteCompactionDetails> & {\n\tdetails: OpenAiRemoteCompactionDetails;\n};\n\ntype OpenAiCompactedResponse = {\n\tid: string;\n\tcreated_at: number;\n\tobject: \"response.compaction\";\n\toutput: OpenAiRemoteInputItem[];\n\tusage?: Record<string, unknown>;\n};\n\nimport type { OpenAiResponsesStreamRunner, SpeculativeJobSettlement } from \"./openai-remote-dependencies.ts\";\n\nexport type OpenAiRemoteCompactionDependencies = SpeculativeJobSettlement & {\n\tfetch?: typeof fetch;\n\tnow?: () => number;\n\tremoteTimeoutMs?: number;\n\tstreamRunner?: OpenAiResponsesStreamRunner;\n};\n\ntype OpenAiRemoteCompactionContext = {\n\tgetSystemPrompt(): string;\n\tmodel: Model<Api> | undefined;\n\tmodelRegistry: {\n\t\tgetApiKeyAndHeaders(model: Model<Api>): Promise<\n\t\t\t| {\n\t\t\t\t\tok: true;\n\t\t\t\t\tapiKey?: string;\n\t\t\t\t\theaders?: ProviderHeaders;\n\t\t\t\t\textraBody?: Record<string, unknown>;\n\t\t\t\t\tbaseUrl?: string;\n\t\t\t\t\tupstreamModelId?: string;\n\t\t\t\t\tserviceTier?: ServiceTier;\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\tok: false;\n\t\t\t\t\terror: string;\n\t\t\t }\n\t\t>;\n\t\tmodelRuntime?: { streamSimple: OpenAiResponsesStreamRunner };\n\t};\n\tserviceTier: ServiceTier | undefined;\n\tsessionManager: {\n\t\tgetSessionId(): string;\n\t};\n\tprepareProviderRequest?(messages: AgentMessage[]): Promise<ProviderRequestPreparation>;\n};\n\ntype OpenAiRemoteCompactionEvent =\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_started\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\trequestId: string;\n\t\t\tmodelId: string;\n\t\t\tinputItemCount: number;\n\t\t\ttransport: OpenAiRemoteTransport;\n\t }\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_completed\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\trequestId: string;\n\t\t\tmodelId: string;\n\t\t\tresponseId: string;\n\t\t\tretainedInputItemCount: number;\n\t\t\ttransport: OpenAiRemoteTransport;\n\t }\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_fallback\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\trequestId: string;\n\t\t\tmodelId?: string;\n\t\t\treason: string;\n\t\t\ttransport?: OpenAiRemoteTransport;\n\t }\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_payload_rewritten\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\tmodelId: string;\n\t\t\tcompactionEntryId: string;\n\t\t\tinputItemCount: number;\n\t };\n\ntype EmitCompactionEvent = (event: OpenAiRemoteCompactionEvent) => void;\n\nconst OPENAI_REMOTE_COMPACTION_TIMEOUT_MS = 15_000;\nconst REMOTE_COMPACTION_TIMEOUT_REASON = \"remote-compaction-timeout\";\nconst INVALID_COMPACT_REQUEST_PAYLOAD_REASON = \"invalid-compact-request-payload\";\nconst MISSING_REMOTE_REPLAY_ORIGIN_REASON = \"missing-remote-replay-origin-provenance\";\nconst REMOTE_REPLAY_ORIGIN_MISMATCH_REASON = \"remote-replay-origin-mismatch\";\nconst UNPROVEN_REMOTE_REPLAY_BOUNDARY_REASON = \"unproven-remote-replay-boundary\";\nconst OPENAI_REMOTE_REPLAY_BOUNDARY_SCOPE = \"openai-remote-replay\";\nconst OPENAI_RESPONSES_TOOL_CALL_PROVIDERS = new Set([\"openai\", \"openai-codex\", \"opencode\"]);\n\nexport function createOpenAiRemoteCompactionRequest(options: {\n\tmodel: Model<Api> | undefined;\n\tsystemPrompt: string;\n\tbranchEntries: SessionEntry[];\n\tmessages?: AgentMessage[];\n\ttokensBefore: number;\n\tpromptCacheKey?: string;\n\tserviceTier?: ServiceTier;\n}): OpenAiRemoteCompactionRequest | undefined {\n\tif (!isOpenAiRemoteCompactionModel(options.model)) return undefined;\n\tconst input = options.messages\n\t\t? convertPendingMessages(options.messages, options.model)\n\t\t: convertBranchEntries(options.branchEntries, options.model);\n\tif (input.length === 0) return undefined;\n\treturn {\n\t\tbody: {\n\t\t\tmodel: options.model.id,\n\t\t\tinput,\n\t\t\t...(options.systemPrompt ? { instructions: options.systemPrompt } : {}),\n\t\t\t...(options.promptCacheKey ? { prompt_cache_key: options.promptCacheKey } : {}),\n\t\t\t...(options.serviceTier ? { service_tier: options.serviceTier } : {}),\n\t\t},\n\t\tinputItemCount: input.length,\n\t\ttokensBefore: options.tokensBefore,\n\t};\n}\n\nfunction parseOpenAiCompactedResponse(options: {\n\tvalue: unknown;\n\tmodel: OpenAiRemoteCompactionModel;\n\trequestId: string;\n\tnow: () => number;\n}): OpenAiCompactedResponse | undefined {\n\tif (!isRecord(options.value) || !Array.isArray(options.value.output)) return undefined;\n\tif (options.model.api === \"openai-responses\") {\n\t\tif (\n\t\t\toptions.value.object !== \"response.compaction\" ||\n\t\t\ttypeof options.value.id !== \"string\" ||\n\t\t\ttypeof options.value.created_at !== \"number\"\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\treturn {\n\t\tid: typeof options.value.id === \"string\" ? options.value.id : `codex-compact:${options.requestId}`,\n\t\tcreated_at:\n\t\t\ttypeof options.value.created_at === \"number\" ? options.value.created_at : Math.floor(options.now() / 1000),\n\t\tobject: \"response.compaction\",\n\t\toutput: options.value.output.filter((item): item is OpenAiRemoteInputItem => isRecord(item)),\n\t\t...(isRecord(options.value.usage) ? { usage: options.value.usage } : {}),\n\t};\n}\n\nexport function buildOpenAiRemoteCompactionResult(options: {\n\tmodel: OpenAiRemoteCompactionModel;\n\tfirstKeptEntryId: string;\n\ttokensBefore: number;\n\trequestInputItemCount: number;\n\tresponse: OpenAiCompactedResponse;\n\torigin?: OpenAiRemoteCompactionOrigin;\n}): OpenAiRemoteCompactionResult {\n\tconst replacementInput = options.response.output.filter(isRetainedRemoteOutputItem);\n\tconst compactionItem = replacementInput.find(isOpenAiRemoteCompactionOutputItem);\n\tif (!compactionItem) {\n\t\tthrow new Error(\"OpenAI remote compaction did not return a compaction item\");\n\t}\n\n\tconst details = {\n\t\tschema: OPENAI_REMOTE_COMPACTION_SCHEMA,\n\t\tmode: \"openai-remote\",\n\t\t...openAiRemoteCompactionIdentity(options.model),\n\t\ttransport: \"compact-endpoint\",\n\t\tmodelId: options.model.id,\n\t\tresponseId: options.response.id,\n\t\tcreatedAt: options.response.created_at,\n\t\trequestInputItemCount: options.requestInputItemCount,\n\t\tretainedInputItemCount: replacementInput.length,\n\t\treplacementInput,\n\t\t...(options.origin ? { origin: options.origin } : {}),\n\t\t...(options.response.usage ? { usage: options.response.usage } : {}),\n\t} satisfies OpenAiRemoteCompactionDetails;\n\tconst endpointPath =\n\t\toptions.model.api === \"openai-codex-responses\"\n\t\t\t? `/${openAiRemoteCompactionEndpointPath(options.model)}`\n\t\t\t: \"/v1/responses/compact\";\n\n\treturn {\n\t\tsummary: [\n\t\t\t\"OpenAI remote compaction checkpoint.\",\n\t\t\t`Native ${endpointPath} replay is active for ${replacementInput.length.toLocaleString()} retained item(s).`,\n\t\t\t`Original OpenAI input items compacted: ${options.requestInputItemCount.toLocaleString()}.`,\n\t\t].join(\"\\n\"),\n\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\ttokensBefore: options.tokensBefore,\n\t\tdetails,\n\t};\n}\n\nfunction createOpenAiResponsesStreamCompactionInput(request: OpenAiRemoteCompactionRequest): OpenAiRemoteInputItem[] {\n\treturn [...request.body.input, { type: \"context_compaction\" } satisfies OpenAiContextCompactionTriggerItem];\n}\n\nexport function createOpenAiResponsesStreamCompactionPayload(\n\tpayload: unknown,\n\trequest: OpenAiRemoteCompactionRequest,\n): unknown | undefined {\n\tif (!isRecord(payload)) return undefined;\n\treturn {\n\t\t...payload,\n\t\tmodel: request.body.model,\n\t\tinput: [...leadingPromptMessages(payload.input), ...createOpenAiResponsesStreamCompactionInput(request)],\n\t\t...(request.body.prompt_cache_key ? { prompt_cache_key: request.body.prompt_cache_key } : {}),\n\t\t...(request.body.service_tier ? { service_tier: request.body.service_tier } : {}),\n\t};\n}\n\nfunction findResponsesStreamCompactionOutput(message: AssistantMessage): OpenAiContextCompactionItem | undefined {\n\tfor (const block of message.content) {\n\t\tif (block.type !== \"providerNative\") continue;\n\t\tconst item = providerNativeItem(block.raw);\n\t\tif (item && isOpenAiContextCompactionItem(item)) return item;\n\t}\n\treturn undefined;\n}\n\nfunction usageRecordFromAssistant(message: AssistantMessage): Record<string, unknown> {\n\treturn {\n\t\tinput: message.usage.input,\n\t\toutput: message.usage.output,\n\t\tcacheRead: message.usage.cacheRead,\n\t\tcacheWrite: message.usage.cacheWrite,\n\t\ttotalTokens: message.usage.totalTokens,\n\t};\n}\n\nexport function buildOpenAiResponsesStreamCompactionResult(options: {\n\tmodel: Model<\"openai-responses\">;\n\tfirstKeptEntryId: string;\n\ttokensBefore: number;\n\trequestInput: OpenAiRemoteInputItem[];\n\tresponse: AssistantMessage;\n\tnow: () => number;\n\torigin?: OpenAiRemoteCompactionOrigin;\n}): OpenAiRemoteCompactionResult {\n\tconst compactionItem = findResponsesStreamCompactionOutput(options.response);\n\tif (!compactionItem) {\n\t\tthrow new Error(\"OpenAI Responses stream compaction did not return a context_compaction item\");\n\t}\n\n\tconst retainedInput = options.requestInput.filter(isRetainedResponsesStreamInputItem);\n\tconst replacementInput = [...retainedInput, compactionItem];\n\tconst details = {\n\t\tschema: OPENAI_REMOTE_COMPACTION_SCHEMA,\n\t\tmode: \"openai-remote\",\n\t\tprovider: \"openai\",\n\t\tapi: \"openai-responses\",\n\t\ttransport: \"websocket\",\n\t\tmodelId: options.model.id,\n\t\tresponseId: options.response.responseId ?? `response-${options.now()}`,\n\t\tcreatedAt: Math.floor(options.response.timestamp / 1000),\n\t\trequestInputItemCount: options.requestInput.length,\n\t\tretainedInputItemCount: replacementInput.length,\n\t\treplacementInput,\n\t\t...(options.origin ? { origin: options.origin } : {}),\n\t\tusage: usageRecordFromAssistant(options.response),\n\t} satisfies OpenAiRemoteCompactionDetails;\n\n\treturn {\n\t\tsummary: [\n\t\t\t\"OpenAI remote compaction checkpoint.\",\n\t\t\t`Native Responses WebSocket replay is active for ${replacementInput.length.toLocaleString()} retained item(s).`,\n\t\t\t`Original OpenAI input items compacted: ${options.requestInput.length.toLocaleString()}.`,\n\t\t].join(\"\\n\"),\n\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\ttokensBefore: options.tokensBefore,\n\t\tdetails,\n\t};\n}\n\nasync function runOpenAiResponsesStreamCompaction(options: {\n\tmodel: Model<\"openai-responses\">;\n\tauth: { apiKey?: string; headers?: ProviderHeaders; extraBody?: Record<string, unknown> };\n\tfirstKeptEntryId: string;\n\tnow: () => number;\n\trequest: OpenAiRemoteCompactionRequest;\n\tsignal: AbortSignal;\n\tstreamRunner: OpenAiResponsesStreamRunner;\n\tsystemPrompt: string;\n\theaders?: ProviderHeaders;\n\tproviderRequest?: ProviderRequestPreparation;\n\torigin: OpenAiRemoteCompactionOrigin;\n}): Promise<OpenAiRemoteCompactionResult | undefined> {\n\tconst stream = options.streamRunner(\n\t\toptions.model,\n\t\t{ systemPrompt: options.systemPrompt, messages: [] },\n\t\t{\n\t\t\tapiKey: options.auth.apiKey,\n\t\t\tcacheRetention: \"short\",\n\t\t\textraBody: options.auth.extraBody,\n\t\t\theaders: options.headers ?? options.auth.headers,\n\t\t\tonPayload: async (payload) => {\n\t\t\t\tconst rewritten = createOpenAiResponsesStreamCompactionPayload(payload, options.request);\n\t\t\t\tif (!isRecord(rewritten) || !Array.isArray(rewritten.input)) {\n\t\t\t\t\tthrow new Error(\"Unable to build OpenAI Responses stream compaction payload\");\n\t\t\t\t}\n\t\t\t\tconst transformedPayload = options.providerRequest\n\t\t\t\t\t? await options.providerRequest.transformPayload(rewritten)\n\t\t\t\t\t: rewritten;\n\t\t\t\tif (!isOpenAiCompactBody(transformedPayload)) {\n\t\t\t\t\tthrow new Error(INVALID_COMPACT_REQUEST_PAYLOAD_REASON);\n\t\t\t\t}\n\t\t\t\treturn transformedPayload;\n\t\t\t},\n\t\t\tsessionId: options.request.body.prompt_cache_key,\n\t\t\tsignal: options.signal,\n\t\t\ttransport: \"websocket\",\n\t\t},\n\t);\n\tconst response = await stream.result();\n\tif (response.stopReason === \"error\" || response.stopReason === \"aborted\") {\n\t\treturn undefined;\n\t}\n\treturn buildOpenAiResponsesStreamCompactionResult({\n\t\tmodel: options.model,\n\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\ttokensBefore: options.request.tokensBefore,\n\t\trequestInput: options.request.body.input,\n\t\tresponse,\n\t\tnow: options.now,\n\t\torigin: options.origin,\n\t});\n}\n\nasync function runOpenAiCompactEndpointCompaction(options: {\n\tfetchImpl: typeof fetch;\n\theaders: Headers;\n\tmodel: OpenAiRemoteCompactionModel;\n\trequest: OpenAiRemoteCompactionRequest;\n\trequestId: string;\n\tsignal: AbortSignal;\n\tfirstKeptEntryId: string;\n\tnow: () => number;\n\temit?: EmitCompactionEvent;\n\torigin: OpenAiRemoteCompactionOrigin;\n}): Promise<OpenAiRemoteCompactionResult | undefined> {\n\toptions.emit?.({\n\t\tversion: 1,\n\t\taction: \"remote_started\",\n\t\troute: \"builtin.compaction.openai_remote\",\n\t\trequestId: options.requestId,\n\t\tmodelId: options.model.id,\n\t\tinputItemCount: options.request.inputItemCount,\n\t\ttransport: \"compact-endpoint\",\n\t});\n\n\tlet response: Response;\n\ttry {\n\t\tresponse = await options.fetchImpl(openAiRemoteCompactionEndpointUrl(options.model), {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: options.headers,\n\t\t\tbody: JSON.stringify(options.request.body),\n\t\t\tsignal: options.signal,\n\t\t});\n\t} catch (error) {\n\t\tif (options.signal.aborted) throw error;\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tif (!response.ok) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: `HTTP ${response.status}`,\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tlet payload: unknown;\n\ttry {\n\t\tpayload = await response.json();\n\t} catch (error) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\tconst compactedResponse = parseOpenAiCompactedResponse({\n\t\tvalue: payload,\n\t\tmodel: options.model,\n\t\trequestId: options.requestId,\n\t\tnow: options.now,\n\t});\n\tif (!compactedResponse) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: \"invalid-compact-response\",\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tlet result: OpenAiRemoteCompactionResult;\n\ttry {\n\t\tresult = buildOpenAiRemoteCompactionResult({\n\t\t\tmodel: options.model,\n\t\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\t\ttokensBefore: options.request.tokensBefore,\n\t\t\trequestInputItemCount: options.request.inputItemCount,\n\t\t\tresponse: compactedResponse,\n\t\t\torigin: options.origin,\n\t\t});\n\t} catch (error) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\toptions.emit?.({\n\t\tversion: 1,\n\t\taction: \"remote_completed\",\n\t\troute: \"builtin.compaction.openai_remote\",\n\t\trequestId: options.requestId,\n\t\tmodelId: options.model.id,\n\t\tresponseId: compactedResponse.id,\n\t\tretainedInputItemCount: result.details.retainedInputItemCount,\n\t\ttransport: \"compact-endpoint\",\n\t});\n\treturn result;\n}\n\nfunction isOpenAiCompactBody(value: unknown): value is OpenAiCompactBody {\n\treturn (\n\t\tisRecord(value) && typeof value.model === \"string\" && Array.isArray(value.input) && value.input.every(isRecord)\n\t);\n}\n\n/**\n * A provider registered through `pi.registerProvider()` owns its own transport for\n * its api id and is absent from compat's builtin api-registry, so the remote route\n * dispatches through the model runtime whenever it is reachable.\n */\nfunction resolveRemoteStreamRunner(\n\tctx: OpenAiRemoteCompactionContext,\n\tdependencies: OpenAiRemoteCompactionDependencies,\n): OpenAiResponsesStreamRunner {\n\tif (dependencies.streamRunner) return dependencies.streamRunner;\n\tconst runtime = ctx.modelRegistry.modelRuntime;\n\tif (runtime) return (model, context, options) => runtime.streamSimple(model, context, options);\n\treturn (model, context, options) => streamSimple(model, context, options);\n}\n\nexport async function runOpenAiRemoteCompaction(\n\tctx: OpenAiRemoteCompactionContext,\n\tevent: SessionBeforeCompactEvent,\n\temit?: EmitCompactionEvent,\n\tdependencies: OpenAiRemoteCompactionDependencies = {},\n): Promise<OpenAiRemoteCompactionResult | undefined> {\n\tconst model = ctx.model;\n\tif (!isOpenAiRemoteCompactionModel(model) || event.reason === \"branch\") {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model?.id,\n\t\t\treason: event.reason === \"branch\" ? \"branch-compaction\" : \"not-openai-responses\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tconst auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);\n\tif (!auth.ok) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model.id,\n\t\t\treason: auth.error,\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tconst requestModel: OpenAiRemoteCompactionModel =\n\t\tauth.upstreamModelId || auth.baseUrl\n\t\t\t? {\n\t\t\t\t\t...model,\n\t\t\t\t\t...(auth.upstreamModelId ? { id: auth.upstreamModelId } : {}),\n\t\t\t\t\t...(auth.baseUrl ? { baseUrl: auth.baseUrl } : {}),\n\t\t\t\t}\n\t\t\t: model;\n\tconst serviceTier = ctx.serviceTier ?? auth.serviceTier;\n\tconst providerRequest = await ctx.prepareProviderRequest?.(buildSessionContext(event.branchEntries).messages);\n\tconst request = createOpenAiRemoteCompactionRequest({\n\t\tmodel: requestModel,\n\t\tsystemPrompt: ctx.getSystemPrompt(),\n\t\tbranchEntries: event.branchEntries,\n\t\tmessages: providerRequest?.messages,\n\t\ttokensBefore: event.preparation.tokensBefore,\n\t\tpromptCacheKey: ctx.sessionManager.getSessionId(),\n\t\tserviceTier,\n\t});\n\tif (!request) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model.id,\n\t\t\treason: \"empty-compaction-input\",\n\t\t});\n\t\treturn undefined;\n\t}\n\tconst remoteTimeoutMs = dependencies.remoteTimeoutMs ?? OPENAI_REMOTE_COMPACTION_TIMEOUT_MS;\n\t// Normal provider requests transform configured headers before the Codex\n\t// transport applies its canonical auth/account fields. Mirror that ordering\n\t// so extension routing choices are retained but cannot impersonate another\n\t// OAuth account on either the wire or persisted provenance.\n\tconst transformedHeaders = providerRequest\n\t\t? await providerRequest.transformHeaders(auth.headers ?? {})\n\t\t: auth.headers;\n\tconst requestHeaders = createOpenAiRemoteCompactionHeaders(\n\t\trequestModel,\n\t\t{ ...auth, headers: transformedHeaders },\n\t\trequest.body.prompt_cache_key,\n\t);\n\tif (!requestHeaders) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model.id,\n\t\t\treason: \"missing-openai-auth\",\n\t\t});\n\t\treturn undefined;\n\t}\n\tconst origin = openAiRemoteCompactionOrigin(requestModel, requestHeaders);\n\tif (!origin) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: requestModel.id,\n\t\t\treason: MISSING_REMOTE_REPLAY_ORIGIN_REASON,\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tif (requestModel.api === \"openai-responses\") {\n\t\tconst responsesModel = requestModel as Model<\"openai-responses\">;\n\t\tif (supportsOpenAiResponsesRemoteCompactionV2(responsesModel)) {\n\t\t\tconst responseHeaders = withRemoteCompactionV2Header(Object.fromEntries(requestHeaders.entries()));\n\t\t\tconst responseOrigin = openAiRemoteCompactionOrigin(responsesModel, responseHeaders);\n\t\t\tif (!responseOrigin) return undefined;\n\t\t\tconst result = await attemptOpenAiResponsesV2Compaction({\n\t\t\t\tauth: { apiKey: auth.apiKey, extraBody: auth.extraBody },\n\t\t\t\temit,\n\t\t\t\tevent,\n\t\t\t\theaders: responseHeaders,\n\t\t\t\tmodel: responsesModel,\n\t\t\t\torigin: responseOrigin,\n\t\t\t\tproviderRequest,\n\t\t\t\trequest,\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tsessionId: ctx.sessionManager.getSessionId(),\n\t\t\t\tstream: resolveRemoteStreamRunner(ctx, dependencies),\n\t\t\t\tsystemPrompt: ctx.getSystemPrompt(),\n\t\t\t\ttimeoutMs: remoteTimeoutMs,\n\t\t\t});\n\t\t\tif (result) return result;\n\t\t}\n\t}\n\n\tif (supportsOpenAiResponsesWebSocket(requestModel)) {\n\t\tconst websocketHeaders = Object.fromEntries(requestHeaders.entries());\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_started\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: requestModel.id,\n\t\t\tinputItemCount: request.inputItemCount,\n\t\t\ttransport: \"websocket\",\n\t\t});\n\t\ttry {\n\t\t\tconst result = await runWithRemoteTimeout({\n\t\t\t\tsignal: event.signal,\n\t\t\t\ttimeoutMs: remoteTimeoutMs,\n\t\t\t\tonTimeout: () =>\n\t\t\t\t\temit?.({\n\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\taction: \"remote_fallback\",\n\t\t\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\t\t\trequestId: event.requestId,\n\t\t\t\t\t\tmodelId: requestModel.id,\n\t\t\t\t\t\treason: REMOTE_COMPACTION_TIMEOUT_REASON,\n\t\t\t\t\t\ttransport: \"websocket\",\n\t\t\t\t\t}),\n\t\t\t\trun: (signal) =>\n\t\t\t\t\trunOpenAiResponsesStreamCompaction({\n\t\t\t\t\t\tmodel: requestModel,\n\t\t\t\t\t\tauth: { apiKey: auth.apiKey, extraBody: auth.extraBody },\n\t\t\t\t\t\tfirstKeptEntryId: event.preparation.firstKeptEntryId,\n\t\t\t\t\t\tnow: dependencies.now ?? Date.now,\n\t\t\t\t\t\trequest,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tstreamRunner: resolveRemoteStreamRunner(ctx, dependencies),\n\t\t\t\t\t\tsystemPrompt: ctx.getSystemPrompt(),\n\t\t\t\t\t\theaders: websocketHeaders,\n\t\t\t\t\t\tproviderRequest,\n\t\t\t\t\t\torigin,\n\t\t\t\t\t}),\n\t\t\t});\n\t\t\tif (result) {\n\t\t\t\temit?.({\n\t\t\t\t\tversion: 1,\n\t\t\t\t\taction: \"remote_completed\",\n\t\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\t\trequestId: event.requestId,\n\t\t\t\t\tmodelId: requestModel.id,\n\t\t\t\t\tresponseId: result.details.responseId,\n\t\t\t\t\tretainedInputItemCount: result.details.retainedInputItemCount,\n\t\t\t\t\ttransport: \"websocket\",\n\t\t\t\t});\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\temit?.({\n\t\t\t\tversion: 1,\n\t\t\t\taction: \"remote_fallback\",\n\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tmodelId: requestModel.id,\n\t\t\t\treason: \"websocket-compaction-no-result\",\n\t\t\t\ttransport: \"websocket\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (event.signal.aborted) throw error;\n\t\t\temit?.({\n\t\t\t\tversion: 1,\n\t\t\t\taction: \"remote_fallback\",\n\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tmodelId: requestModel.id,\n\t\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\t\ttransport: \"websocket\",\n\t\t\t});\n\t\t}\n\t}\n\n\tconst transformedPayload = providerRequest ? await providerRequest.transformPayload(request.body) : request.body;\n\tif (!isOpenAiCompactBody(transformedPayload)) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: requestModel.id,\n\t\t\treason: INVALID_COMPACT_REQUEST_PAYLOAD_REASON,\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\tconst transformedRequest = { ...request, body: transformedPayload };\n\n\treturn runWithRemoteTimeout({\n\t\tsignal: event.signal,\n\t\ttimeoutMs: remoteTimeoutMs,\n\t\tonTimeout: () =>\n\t\t\temit?.({\n\t\t\t\tversion: 1,\n\t\t\t\taction: \"remote_fallback\",\n\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tmodelId: requestModel.id,\n\t\t\t\treason: REMOTE_COMPACTION_TIMEOUT_REASON,\n\t\t\t\ttransport: \"compact-endpoint\",\n\t\t\t}),\n\t\trun: (signal) =>\n\t\t\trunOpenAiCompactEndpointCompaction({\n\t\t\t\tfetchImpl: dependencies.fetch ?? fetch,\n\t\t\t\theaders: requestHeaders,\n\t\t\t\tmodel: requestModel,\n\t\t\t\trequest: transformedRequest,\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tsignal,\n\t\t\t\tfirstKeptEntryId: event.preparation.firstKeptEntryId,\n\t\t\t\tnow: dependencies.now ?? Date.now,\n\t\t\t\temit,\n\t\t\t\torigin,\n\t\t\t}),\n\t});\n}\n\nfunction latestRemoteCompaction(\n\tentries: SessionEntry[],\n): { entryId: string; index: number; firstKeptEntryId: string; details: OpenAiRemoteCompactionDetails } | undefined {\n\tfor (let index = entries.length - 1; index >= 0; index--) {\n\t\tconst entry = entries[index];\n\t\tif (entry?.type !== \"compaction\") continue;\n\t\tconst details = getOpenAiRemoteCompactionDetails(entry.details);\n\t\tif (details) return { entryId: entry.id, index, firstKeptEntryId: entry.firstKeptEntryId, details };\n\t\treturn undefined;\n\t}\n\treturn undefined;\n}\n\ntype OpenAiRemoteReplayBoundary = ContextProvenance & {\n\tscope: typeof OPENAI_REMOTE_REPLAY_BOUNDARY_SCOPE;\n\tcompactionEntryId: string;\n\tordinal: number;\n\texpectedOrdinals: number[];\n\tintegrity?: string;\n};\n\ntype RemoteCompactionCheckpoint = {\n\tentryId: string;\n\tindex: number;\n\tfirstKeptEntryId: string;\n\tdetails: OpenAiRemoteCompactionDetails;\n};\n\nfunction checkpointContextEntries(entries: SessionEntry[], remote: RemoteCompactionCheckpoint): SessionEntry[] {\n\tconst checkpointEntryIds = new Set(entries.slice(0, remote.index + 1).map((entry) => entry.id));\n\treturn buildContextEntries(entries).filter((entry) => checkpointEntryIds.has(entry.id));\n}\n\nfunction leadingPromptMessages(input: unknown): OpenAiRemoteInputItem[] {\n\tif (!Array.isArray(input)) return [];\n\tconst result: OpenAiRemoteInputItem[] = [];\n\tfor (const item of input) {\n\t\tif (!isRecord(item)) break;\n\t\tconst role = item.role;\n\t\tif (role !== \"system\" && role !== \"developer\") break;\n\t\tresult.push(providerNativeItem(item) ?? { role, content: typeof item.content === \"string\" ? item.content : [] });\n\t}\n\treturn result;\n}\n\nfunction replayBoundaryConversionOptions(model: Model<Api>): {\n\tincludeSystemPrompt?: boolean;\n\tpreserveTextSignatures?: boolean;\n} {\n\treturn model.api === \"openai-codex-responses\" ? { includeSystemPrompt: false, preserveTextSignatures: true } : {};\n}\n\nfunction isRemoteReplayBoundary(value: unknown): value is OpenAiRemoteReplayBoundary {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n\tconst boundary = value as Record<string, unknown>;\n\treturn (\n\t\tboundary.scope === OPENAI_REMOTE_REPLAY_BOUNDARY_SCOPE &&\n\t\ttypeof boundary.compactionEntryId === \"string\" &&\n\t\ttypeof boundary.ordinal === \"number\" &&\n\t\tArray.isArray(boundary.expectedOrdinals) &&\n\t\tboundary.expectedOrdinals.every((ordinal) => typeof ordinal === \"number\") &&\n\t\ttypeof boundary.integrity === \"string\"\n\t);\n}\n\nfunction replayBoundaryForInputItem(value: unknown): OpenAiRemoteReplayBoundary | undefined {\n\tconst provenance = getContextProvenance(value);\n\treturn isRemoteReplayBoundary(provenance) ? provenance : undefined;\n}\n\nfunction sameOrdinals(left: readonly number[], right: readonly number[]): boolean {\n\treturn left.length === right.length && left.every((value, index) => value === right[index]);\n}\n\nfunction emitReplayFallback(\n\temit: EmitCompactionEvent | undefined,\n\tremote: RemoteCompactionCheckpoint,\n\tmodelId: string,\n\treason: string,\n): void {\n\temit?.({\n\t\tversion: 1,\n\t\taction: \"remote_fallback\",\n\t\troute: \"builtin.compaction.openai_remote\",\n\t\trequestId: `replay:${remote.entryId}`,\n\t\tmodelId,\n\t\treason,\n\t});\n}\n\nfunction matchingReplayOrigin(\n\tpersisted: OpenAiRemoteCompactionOrigin | undefined,\n\tcurrent: OpenAiRemoteCompactionOrigin | undefined,\n): boolean {\n\treturn (\n\t\tpersisted !== undefined &&\n\t\tcurrent !== undefined &&\n\t\tpersisted.endpoint === current.endpoint &&\n\t\tpersisted.trustDomain === current.trustDomain &&\n\t\tpersisted.authTenantFingerprint === current.authTenantFingerprint\n\t);\n}\n\n/**\n * Mark the exact checkpoint-owned messages before later context hooks run.\n * The markers carry entry identity, not payload values; the Responses converter\n * transports them as non-enumerable request-local metadata for final validation.\n */\nexport function markOpenAiRemoteReplayBoundary(\n\tmessages: AgentMessage[],\n\toptions: { model: Model<Api> | undefined; branchEntries: SessionEntry[] },\n): AgentMessage[] {\n\tif (!isOpenAiRemoteCompactionModel(options.model)) return messages;\n\tconst remote = latestRemoteCompaction(options.branchEntries);\n\tif (!remote?.details.origin || !matchesOpenAiRemoteCompactionIdentity(options.model, remote.details)) {\n\t\treturn messages;\n\t}\n\tconst entryIds = checkpointContextEntries(options.branchEntries, remote)\n\t\t.filter((entry) => sessionEntryToContextMessages(entry).length > 0)\n\t\t.map((entry) => entry.id);\n\tif (\n\t\tentryIds.length === 0 ||\n\t\tmessages.length < entryIds.length ||\n\t\t!entryIds.every((entryId, index) => {\n\t\t\tconst message = messages[index] as AgentMessage & { [SESSION_CONTEXT_ENTRY_ID]?: unknown };\n\t\t\treturn message?.[SESSION_CONTEXT_ENTRY_ID] === entryId || getSessionContextEntryId(message) === entryId;\n\t\t})\n\t) {\n\t\treturn messages;\n\t}\n\n\tconst expectedOrdinals: number[] = [];\n\tconst marked = messages.map((message, index) => {\n\t\tif (index >= entryIds.length) return message;\n\t\tconst boundary: OpenAiRemoteReplayBoundary = {\n\t\t\tscope: OPENAI_REMOTE_REPLAY_BOUNDARY_SCOPE,\n\t\t\tcompactionEntryId: remote.entryId,\n\t\t\tordinal: index,\n\t\t\texpectedOrdinals,\n\t\t};\n\t\treturn Object.assign({}, message, { __piContextProvenance: boundary }) as AgentMessage;\n\t});\n\tconst baseline = convertResponsesMessages(\n\t\toptions.model,\n\t\t{ messages: convertToLlm(marked) },\n\t\tOPENAI_RESPONSES_TOOL_CALL_PROVIDERS,\n\t\t{ ...replayBoundaryConversionOptions(options.model), sealContextProvenance: true },\n\t);\n\tfor (const item of baseline) {\n\t\tconst boundary = replayBoundaryForInputItem(item);\n\t\tif (boundary?.compactionEntryId === remote.entryId) expectedOrdinals.push(boundary.ordinal);\n\t}\n\treturn expectedOrdinals.length > 0 ? marked : messages;\n}\n\nexport function rewriteOpenAiPayloadWithRemoteCompaction(\n\tpayload: unknown,\n\toptions: {\n\t\tmodel: Model<Api> | undefined;\n\t\tbranchEntries: SessionEntry[];\n\t\torigin?: OpenAiRemoteCompactionOrigin;\n\t},\n\temit?: EmitCompactionEvent,\n): unknown | undefined {\n\tif (!isOpenAiRemoteCompactionModel(options.model) || !isRecord(payload)) {\n\t\treturn undefined;\n\t}\n\tconst payloadInput = payload.input;\n\tif (!Array.isArray(payloadInput)) return undefined;\n\tconst remote = latestRemoteCompaction(options.branchEntries);\n\tif (!remote) return undefined;\n\tif (!matchesOpenAiRemoteCompactionIdentity(options.model, remote.details)) {\n\t\temitReplayFallback(emit, remote, options.model.id, \"remote-replay-identity-mismatch\");\n\t\treturn undefined;\n\t}\n\tif (!remote.details.origin || !options.origin) {\n\t\temitReplayFallback(emit, remote, options.model.id, MISSING_REMOTE_REPLAY_ORIGIN_REASON);\n\t\treturn undefined;\n\t}\n\tif (!matchingReplayOrigin(remote.details.origin, options.origin)) {\n\t\temitReplayFallback(emit, remote, options.model.id, REMOTE_REPLAY_ORIGIN_MISMATCH_REASON);\n\t\treturn undefined;\n\t}\n\n\tconst checkpointStart = leadingPromptMessages(payloadInput).length;\n\tconst allBoundaries = payloadInput\n\t\t.map(replayBoundaryForInputItem)\n\t\t.filter((boundary): boundary is OpenAiRemoteReplayBoundary => boundary?.compactionEntryId === remote.entryId);\n\tconst expectedOrdinals = allBoundaries[0]?.expectedOrdinals;\n\tif (\n\t\t!expectedOrdinals ||\n\t\texpectedOrdinals.length === 0 ||\n\t\tallBoundaries.length !== expectedOrdinals.length ||\n\t\tpayloadInput.length < checkpointStart + expectedOrdinals.length ||\n\t\t!allBoundaries.every(\n\t\t\t(boundary, index) =>\n\t\t\t\tsameOrdinals(boundary.expectedOrdinals, expectedOrdinals) && boundary.ordinal === expectedOrdinals[index],\n\t\t) ||\n\t\t!expectedOrdinals.every((ordinal: number, index: number) => {\n\t\t\tconst boundary = replayBoundaryForInputItem(payloadInput[checkpointStart + index]);\n\t\t\treturn (\n\t\t\t\tboundary?.compactionEntryId === remote.entryId &&\n\t\t\t\tboundary.ordinal === ordinal &&\n\t\t\t\tsameOrdinals(boundary.expectedOrdinals, expectedOrdinals)\n\t\t\t);\n\t\t})\n\t) {\n\t\temitReplayFallback(emit, remote, options.model.id, UNPROVEN_REMOTE_REPLAY_BOUNDARY_REASON);\n\t\treturn undefined;\n\t}\n\n\tconst input = [\n\t\t...payloadInput.slice(0, checkpointStart).filter(isRecord),\n\t\t...remote.details.replacementInput,\n\t\t...payloadInput.slice(checkpointStart + expectedOrdinals.length).filter(isRecord),\n\t];\n\temit?.({\n\t\tversion: 1,\n\t\taction: \"remote_payload_rewritten\",\n\t\troute: \"builtin.compaction.openai_remote\",\n\t\tmodelId: options.model.id,\n\t\tcompactionEntryId: remote.entryId,\n\t\tinputItemCount: input.length,\n\t});\n\treturn { ...payload, input };\n}\n"]}
@@ -0,0 +1,56 @@
1
+ import type { AgentMessage } from "@earendil-works/pi-agent-core";
2
+ import { type CompactionPreparation } from "../../../compaction/index.ts";
3
+ import type { BeforeAgentStartEventResult } from "../../types.ts";
4
+ import { type IdleCompactionDecision } from "./idle.ts";
5
+ export interface CompactionGeometry {
6
+ reserveTokens: number;
7
+ thresholdTokens: number;
8
+ leadTokens: number;
9
+ }
10
+ export declare function estimateTextTokens(text: string): number;
11
+ export declare function resolveCompactionGeometry(input: {
12
+ contextWindow: number;
13
+ settings: CompactionPreparation["settings"];
14
+ lastYield?: {
15
+ savedTokens: number;
16
+ tokensBefore: number;
17
+ };
18
+ }): CompactionGeometry;
19
+ export declare function shouldDeferGraceBand(input: {
20
+ tokens: number;
21
+ thresholdTokens: number;
22
+ leadTokens: number;
23
+ contextWindow: number;
24
+ reserveTokens: number;
25
+ compactionInFlight: boolean;
26
+ graceBandEnabled?: boolean;
27
+ }): boolean;
28
+ export declare function resolveBeforeAgentStartMessage(input: {
29
+ message?: BeforeAgentStartEventResult["message"];
30
+ reminder?: string;
31
+ reminderEnabled?: boolean;
32
+ }): BeforeAgentStartEventResult["message"] | undefined;
33
+ export declare function resolveReminderSystemPrompt(input: {
34
+ systemPrompt: string;
35
+ reminder?: string;
36
+ reminderEnabled?: boolean;
37
+ }): string | undefined;
38
+ export declare function resolveIdleWarmAction(decision: IdleCompactionDecision, job: {
39
+ armedAtTokens: number;
40
+ } | undefined): "none" | "start" | "replace";
41
+ export declare function admitContextToolResult(text: string, contextWindow: number, spillDir: string, capTokens?: number): {
42
+ text: string;
43
+ admitted: boolean;
44
+ spillPath?: string;
45
+ };
46
+ export declare function buildToolResultOmissionLine(omitted: ReadonlyArray<{
47
+ tokens: number;
48
+ path: string;
49
+ }>): string;
50
+ export declare function estimateToolResultOmissionTokens(omitted: ReadonlyArray<{
51
+ tokens: number;
52
+ path: string;
53
+ }>): number;
54
+ export declare function resolveMultipartRetainedBound(capTokens: number, omission: string, textPartCount: number): number;
55
+ export declare function admitContextToolResults(messages: AgentMessage[], contextWindow: number, enabled: boolean, capOverride?: number, spillDir?: string): AgentMessage[];
56
+ //# sourceMappingURL=orchestration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestration.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/orchestration.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,KAAK,qBAAqB,EAAkB,MAAM,8BAA8B,CAAC;AAC1F,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,KAAK,sBAAsB,EAAoB,MAAM,WAAW,CAAC;AAS1E,MAAM,WAAW,kBAAkB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1D,GAAG,kBAAkB,CAWrB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,OAAO,CAMV;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACrD,OAAO,CAAC,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,2BAA2B,CAAC,SAAS,CAAC,GAAG,SAAS,CAIrD;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,MAAM,GAAG,SAAS,CAGrB;AAED,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,sBAAsB,EAChC,GAAG,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACxC,MAAM,GAAG,OAAO,GAAG,SAAS,CAK9B;AAED,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAGzD;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,aAAa,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAE5G;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,aAAa,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAEjH;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAEhH;AAED,wBAAgB,uBAAuB,CACtC,QAAQ,EAAE,YAAY,EAAE,EACxB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,OAAO,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,SAAqC,GAC3C,YAAY,EAAE,CA8EhB"}
@@ -0,0 +1,136 @@
1
+ import { tmpdir } from "node:os";
2
+ import { join } from "node:path";
3
+ import { estimateTokens } from "../../../compaction/index.js";
4
+ import { shouldWarmAtIdle } from "./idle.js";
5
+ import * as policy from "./policy.js";
6
+ import { isWarmResultStale, isWithinGraceBand, resolveSpeculationLeadTokens } from "./speculation-lead.js";
7
+ import { admitToolResult, estimateAdmissionMarkerTokens, resolveToolResultAdmissionCapTokens, } from "./tool-admission.js";
8
+ export function estimateTextTokens(text) {
9
+ return estimateTokens({ role: "user", content: text, timestamp: 0 });
10
+ }
11
+ export function resolveCompactionGeometry(input) {
12
+ const thresholdTokens = input.contextWindow * policy.computeEffectiveThreshold(input.contextWindow, input.lastYield);
13
+ return {
14
+ reserveTokens: policy.resolveEffectiveReserveTokens(input.contextWindow, input.settings.reserveTokens, input.settings.reserveScalingEnabled !== false),
15
+ thresholdTokens,
16
+ leadTokens: resolveSpeculationLeadTokens(thresholdTokens, input.settings.speculativeLeadTokens),
17
+ };
18
+ }
19
+ export function shouldDeferGraceBand(input) {
20
+ return (input.compactionInFlight &&
21
+ input.graceBandEnabled !== false &&
22
+ isWithinGraceBand(input.tokens, input.thresholdTokens, input.leadTokens, input.contextWindow, input.reserveTokens));
23
+ }
24
+ export function resolveBeforeAgentStartMessage(input) {
25
+ if (!input.reminder || input.reminderEnabled === false)
26
+ return input.message;
27
+ if (!input.message)
28
+ return undefined;
29
+ return { ...input.message, content: `${input.message.content}\n\n${input.reminder}` };
30
+ }
31
+ export function resolveReminderSystemPrompt(input) {
32
+ if (!input.reminder || input.reminderEnabled === false)
33
+ return undefined;
34
+ return `${input.systemPrompt}\n\n${input.reminder}`;
35
+ }
36
+ export function resolveIdleWarmAction(decision, job) {
37
+ if (!shouldWarmAtIdle(decision))
38
+ return "none";
39
+ if (!job)
40
+ return "start";
41
+ const currentTokens = decision.usage?.tokens ?? 0;
42
+ return isWarmResultStale(job.armedAtTokens, currentTokens, decision.settings.keepRecentTokens) ? "replace" : "none";
43
+ }
44
+ export function admitContextToolResult(text, contextWindow, spillDir, capTokens) {
45
+ const result = admitToolResult({ text, contextWindow, spillDir, capTokens });
46
+ return { text: result.text, admitted: result.spilled, spillPath: result.spillPath };
47
+ }
48
+ export function buildToolResultOmissionLine(omitted) {
49
+ return `[tool-result admission: ${omitted.length} later text part(s) omitted (~${omitted.reduce((sum, item) => sum + item.tokens, 0)} tokens); full outputs at: ${omitted.map((item) => item.path).join("; ")} - read with the read tool]`;
50
+ }
51
+ export function estimateToolResultOmissionTokens(omitted) {
52
+ return estimateTextTokens(buildToolResultOmissionLine(omitted));
53
+ }
54
+ export function resolveMultipartRetainedBound(capTokens, omission, textPartCount) {
55
+ return Math.max(capTokens, estimateTextTokens(`${"\n".repeat(Math.max(1, textPartCount))}${omission}`));
56
+ }
57
+ export function admitContextToolResults(messages, contextWindow, enabled, capOverride, spillDir = join(tmpdir(), "senpi-tool-spill")) {
58
+ if (!enabled)
59
+ return messages;
60
+ return messages.map((message) => {
61
+ if (message.role !== "toolResult")
62
+ return message;
63
+ if (typeof message.content === "string") {
64
+ const admitted = admitContextToolResult(message.content, contextWindow, spillDir);
65
+ return admitted.admitted ? { ...message, content: [{ type: "text", text: admitted.text }] } : message;
66
+ }
67
+ const resultCap = capOverride ?? resolveToolResultAdmissionCapTokens(contextWindow);
68
+ const joinedText = message.content
69
+ .filter((part) => part.type === "text")
70
+ .map((part) => part.text ?? "")
71
+ .join("\n");
72
+ if (estimateTextTokens(joinedText) <= resultCap)
73
+ return message;
74
+ let changed = false;
75
+ const textParts = message.content.filter((part) => part.type === "text");
76
+ const hasSharedOmission = textParts.some((part) => part.text) && textParts.length >= 2;
77
+ let remainingTokens = resultCap;
78
+ const omitted = [];
79
+ const content = message.content.map((part) => {
80
+ if (part.type !== "text" || !part.text)
81
+ return part;
82
+ const partTokens = estimateTextTokens(part.text);
83
+ const omissionReserve = hasSharedOmission
84
+ ? 256 + estimateAdmissionMarkerTokens(partTokens, join(spillDir, "tool-result-0000000000-000000.txt"))
85
+ : 0;
86
+ if (partTokens <= remainingTokens - omissionReserve) {
87
+ remainingTokens -= partTokens;
88
+ return part;
89
+ }
90
+ const admitted = admitContextToolResult(part.text, contextWindow, spillDir, Math.max(0, remainingTokens - omissionReserve));
91
+ changed = true;
92
+ remainingTokens = Math.max(0, remainingTokens - estimateTextTokens(admitted.text));
93
+ if (admitted.spillPath)
94
+ omitted.push({ tokens: partTokens, path: admitted.spillPath });
95
+ return { ...part, text: admitted.text };
96
+ });
97
+ let omissionCost = 0;
98
+ if (omitted.length > 0) {
99
+ const omission = buildToolResultOmissionLine(omitted);
100
+ omissionCost = resolveMultipartRetainedBound(resultCap, omission, textParts.length);
101
+ const lastText = content.findLastIndex((part) => part.type === "text" && part.text);
102
+ const target = lastText >= 0 ? lastText : content.findIndex((part) => part.type === "text");
103
+ const targetPart = target >= 0 ? content[target] : undefined;
104
+ if (target >= 0 && targetPart?.type === "text") {
105
+ content[target] = { ...targetPart, text: `${targetPart.text ?? ""}\n${omission}` };
106
+ }
107
+ }
108
+ // Contract: total retained text tokens per tool result <= cap, and every omitted byte is reachable via a spill path named within the result.
109
+ const aggregateTokens = () => estimateTextTokens(content
110
+ .filter((part) => part.type === "text")
111
+ .map((part) => part.text ?? "")
112
+ .join("\n"));
113
+ const retainedLimit = omissionCost || resultCap;
114
+ while (aggregateTokens() > retainedLimit) {
115
+ const target = content.findLastIndex((part) => {
116
+ if (part.type !== "text" || !part.text)
117
+ return false;
118
+ const omissionIndex = part.text.indexOf("[tool-result admission:");
119
+ return omissionIndex < 0 || part.text.slice(0, omissionIndex).trim().length > 0;
120
+ });
121
+ if (target < 0)
122
+ break;
123
+ const part = content[target];
124
+ if (part.type !== "text")
125
+ break;
126
+ const text = part.text ?? "";
127
+ const omissionIndex = text.indexOf("[tool-result admission:");
128
+ const prefix = omissionIndex >= 0 ? text.slice(0, omissionIndex) : text;
129
+ const suffix = omissionIndex >= 0 ? text.slice(omissionIndex) : "";
130
+ const nextText = `${prefix.slice(0, Math.floor(prefix.length / 2))}${suffix}`;
131
+ content[target] = { ...part, text: nextText === text ? "" : nextText };
132
+ }
133
+ return changed ? { ...message, content } : message;
134
+ });
135
+ }
136
+ //# sourceMappingURL=orchestration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestration.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/orchestration.ts"],"names":[],"mappings":"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","sourcesContent":["import { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { type CompactionPreparation, estimateTokens } from \"../../../compaction/index.ts\";\nimport type { BeforeAgentStartEventResult } from \"../../types.ts\";\nimport { type IdleCompactionDecision, shouldWarmAtIdle } from \"./idle.ts\";\nimport * as policy from \"./policy.ts\";\nimport { isWarmResultStale, isWithinGraceBand, resolveSpeculationLeadTokens } from \"./speculation-lead.ts\";\nimport {\n\tadmitToolResult,\n\testimateAdmissionMarkerTokens,\n\tresolveToolResultAdmissionCapTokens,\n} from \"./tool-admission.ts\";\n\nexport interface CompactionGeometry {\n\treserveTokens: number;\n\tthresholdTokens: number;\n\tleadTokens: number;\n}\n\nexport function estimateTextTokens(text: string): number {\n\treturn estimateTokens({ role: \"user\", content: text, timestamp: 0 });\n}\n\nexport function resolveCompactionGeometry(input: {\n\tcontextWindow: number;\n\tsettings: CompactionPreparation[\"settings\"];\n\tlastYield?: { savedTokens: number; tokensBefore: number };\n}): CompactionGeometry {\n\tconst thresholdTokens = input.contextWindow * policy.computeEffectiveThreshold(input.contextWindow, input.lastYield);\n\treturn {\n\t\treserveTokens: policy.resolveEffectiveReserveTokens(\n\t\t\tinput.contextWindow,\n\t\t\tinput.settings.reserveTokens,\n\t\t\tinput.settings.reserveScalingEnabled !== false,\n\t\t),\n\t\tthresholdTokens,\n\t\tleadTokens: resolveSpeculationLeadTokens(thresholdTokens, input.settings.speculativeLeadTokens),\n\t};\n}\n\nexport function shouldDeferGraceBand(input: {\n\ttokens: number;\n\tthresholdTokens: number;\n\tleadTokens: number;\n\tcontextWindow: number;\n\treserveTokens: number;\n\tcompactionInFlight: boolean;\n\tgraceBandEnabled?: boolean;\n}): boolean {\n\treturn (\n\t\tinput.compactionInFlight &&\n\t\tinput.graceBandEnabled !== false &&\n\t\tisWithinGraceBand(input.tokens, input.thresholdTokens, input.leadTokens, input.contextWindow, input.reserveTokens)\n\t);\n}\n\nexport function resolveBeforeAgentStartMessage(input: {\n\tmessage?: BeforeAgentStartEventResult[\"message\"];\n\treminder?: string;\n\treminderEnabled?: boolean;\n}): BeforeAgentStartEventResult[\"message\"] | undefined {\n\tif (!input.reminder || input.reminderEnabled === false) return input.message;\n\tif (!input.message) return undefined;\n\treturn { ...input.message, content: `${input.message.content}\\n\\n${input.reminder}` };\n}\n\nexport function resolveReminderSystemPrompt(input: {\n\tsystemPrompt: string;\n\treminder?: string;\n\treminderEnabled?: boolean;\n}): string | undefined {\n\tif (!input.reminder || input.reminderEnabled === false) return undefined;\n\treturn `${input.systemPrompt}\\n\\n${input.reminder}`;\n}\n\nexport function resolveIdleWarmAction(\n\tdecision: IdleCompactionDecision,\n\tjob: { armedAtTokens: number } | undefined,\n): \"none\" | \"start\" | \"replace\" {\n\tif (!shouldWarmAtIdle(decision)) return \"none\";\n\tif (!job) return \"start\";\n\tconst currentTokens = decision.usage?.tokens ?? 0;\n\treturn isWarmResultStale(job.armedAtTokens, currentTokens, decision.settings.keepRecentTokens) ? \"replace\" : \"none\";\n}\n\nexport function admitContextToolResult(\n\ttext: string,\n\tcontextWindow: number,\n\tspillDir: string,\n\tcapTokens?: number,\n): { text: string; admitted: boolean; spillPath?: string } {\n\tconst result = admitToolResult({ text, contextWindow, spillDir, capTokens });\n\treturn { text: result.text, admitted: result.spilled, spillPath: result.spillPath };\n}\n\nexport function buildToolResultOmissionLine(omitted: ReadonlyArray<{ tokens: number; path: string }>): string {\n\treturn `[tool-result admission: ${omitted.length} later text part(s) omitted (~${omitted.reduce((sum, item) => sum + item.tokens, 0)} tokens); full outputs at: ${omitted.map((item) => item.path).join(\"; \")} - read with the read tool]`;\n}\n\nexport function estimateToolResultOmissionTokens(omitted: ReadonlyArray<{ tokens: number; path: string }>): number {\n\treturn estimateTextTokens(buildToolResultOmissionLine(omitted));\n}\n\nexport function resolveMultipartRetainedBound(capTokens: number, omission: string, textPartCount: number): number {\n\treturn Math.max(capTokens, estimateTextTokens(`${\"\\n\".repeat(Math.max(1, textPartCount))}${omission}`));\n}\n\nexport function admitContextToolResults(\n\tmessages: AgentMessage[],\n\tcontextWindow: number,\n\tenabled: boolean,\n\tcapOverride?: number,\n\tspillDir = join(tmpdir(), \"senpi-tool-spill\"),\n): AgentMessage[] {\n\tif (!enabled) return messages;\n\treturn messages.map((message) => {\n\t\tif (message.role !== \"toolResult\") return message;\n\t\tif (typeof message.content === \"string\") {\n\t\t\tconst admitted = admitContextToolResult(message.content, contextWindow, spillDir);\n\t\t\treturn admitted.admitted ? { ...message, content: [{ type: \"text\" as const, text: admitted.text }] } : message;\n\t\t}\n\t\tconst resultCap = capOverride ?? resolveToolResultAdmissionCapTokens(contextWindow);\n\t\tconst joinedText = message.content\n\t\t\t.filter((part) => part.type === \"text\")\n\t\t\t.map((part) => part.text ?? \"\")\n\t\t\t.join(\"\\n\");\n\t\tif (estimateTextTokens(joinedText) <= resultCap) return message;\n\t\tlet changed = false;\n\t\tconst textParts = message.content.filter((part) => part.type === \"text\");\n\t\tconst hasSharedOmission = textParts.some((part) => part.text) && textParts.length >= 2;\n\t\tlet remainingTokens = resultCap;\n\t\tconst omitted: Array<{ tokens: number; path: string }> = [];\n\t\tconst content = message.content.map((part) => {\n\t\t\tif (part.type !== \"text\" || !part.text) return part;\n\t\t\tconst partTokens = estimateTextTokens(part.text);\n\t\t\tconst omissionReserve = hasSharedOmission\n\t\t\t\t? 256 + estimateAdmissionMarkerTokens(partTokens, join(spillDir, \"tool-result-0000000000-000000.txt\"))\n\t\t\t\t: 0;\n\t\t\tif (partTokens <= remainingTokens - omissionReserve) {\n\t\t\t\tremainingTokens -= partTokens;\n\t\t\t\treturn part;\n\t\t\t}\n\t\t\tconst admitted = admitContextToolResult(\n\t\t\t\tpart.text,\n\t\t\t\tcontextWindow,\n\t\t\t\tspillDir,\n\t\t\t\tMath.max(0, remainingTokens - omissionReserve),\n\t\t\t);\n\t\t\tchanged = true;\n\t\t\tremainingTokens = Math.max(0, remainingTokens - estimateTextTokens(admitted.text));\n\t\t\tif (admitted.spillPath) omitted.push({ tokens: partTokens, path: admitted.spillPath });\n\t\t\treturn { ...part, text: admitted.text };\n\t\t});\n\t\tlet omissionCost = 0;\n\t\tif (omitted.length > 0) {\n\t\t\tconst omission = buildToolResultOmissionLine(omitted);\n\t\t\tomissionCost = resolveMultipartRetainedBound(resultCap, omission, textParts.length);\n\t\t\tconst lastText = content.findLastIndex((part) => part.type === \"text\" && part.text);\n\t\t\tconst target = lastText >= 0 ? lastText : content.findIndex((part) => part.type === \"text\");\n\t\t\tconst targetPart = target >= 0 ? content[target] : undefined;\n\t\t\tif (target >= 0 && targetPart?.type === \"text\") {\n\t\t\t\tcontent[target] = { ...targetPart, text: `${targetPart.text ?? \"\"}\\n${omission}` };\n\t\t\t}\n\t\t}\n\t\t// Contract: total retained text tokens per tool result <= cap, and every omitted byte is reachable via a spill path named within the result.\n\t\tconst aggregateTokens = () =>\n\t\t\testimateTextTokens(\n\t\t\t\tcontent\n\t\t\t\t\t.filter((part) => part.type === \"text\")\n\t\t\t\t\t.map((part) => part.text ?? \"\")\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t);\n\t\tconst retainedLimit = omissionCost || resultCap;\n\t\twhile (aggregateTokens() > retainedLimit) {\n\t\t\tconst target = content.findLastIndex((part) => {\n\t\t\t\tif (part.type !== \"text\" || !part.text) return false;\n\t\t\t\tconst omissionIndex = part.text.indexOf(\"[tool-result admission:\");\n\t\t\t\treturn omissionIndex < 0 || part.text.slice(0, omissionIndex).trim().length > 0;\n\t\t\t});\n\t\t\tif (target < 0) break;\n\t\t\tconst part = content[target];\n\t\t\tif (part.type !== \"text\") break;\n\t\t\tconst text = part.text ?? \"\";\n\t\t\tconst omissionIndex = text.indexOf(\"[tool-result admission:\");\n\t\t\tconst prefix = omissionIndex >= 0 ? text.slice(0, omissionIndex) : text;\n\t\t\tconst suffix = omissionIndex >= 0 ? text.slice(omissionIndex) : \"\";\n\t\t\tconst nextText = `${prefix.slice(0, Math.floor(prefix.length / 2))}${suffix}`;\n\t\t\tcontent[target] = { ...part, text: nextText === text ? \"\" : nextText };\n\t\t}\n\t\treturn changed ? { ...message, content } : message;\n\t});\n}\n"]}
@@ -5,10 +5,13 @@ export interface CompactionYield {
5
5
  savedTokens: number;
6
6
  tokensBefore: number;
7
7
  }
8
+ export declare function baseThresholdRatioForWindow(contextWindow: number): number;
9
+ export declare function resolveReserveTokens(contextWindow: number, configuredReserve: number): number;
8
10
  export declare function computeAdaptiveThresholdRatio(contextWindow: number, priorCompactionSavedTokens?: number): number;
9
- export declare function computeEffectiveThreshold(contextWindow: number, lastYield?: CompactionYield | number): number;
11
+ export declare function computeEffectiveThreshold(contextWindow: number, lastYield?: CompactionYield): number;
10
12
  export declare function computeEffectiveKeepRecentTokens(setting: number, contextWindow: number, thresholdRatio: number, margin?: number): number;
11
- export declare function shouldStartSpeculativeCompaction(usage: ContextUsage, contextWindow: number, settings: CompactionSettings, lastYield?: CompactionYield): boolean;
13
+ export declare function shouldStartSpeculativeCompaction(usage: ContextUsage, contextWindow: number, settings: CompactionSettings, lastYield?: CompactionYield, leadTokens?: number): boolean;
14
+ export declare function resolveEffectiveReserveTokens(contextWindow: number, configuredReserve: number, reserveScalingEnabled?: boolean): number;
12
15
  export declare function isAtHardLimit(usage: ContextUsage, contextWindow: number, reserveTokens: number, additionalTokens?: number): boolean;
13
16
  export declare function shouldTriggerCompaction(usage: ContextUsage, contextWindow: number, settings: CompactionSettings, lastYield?: CompactionYield): boolean;
14
17
  //# sourceMappingURL=policy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AASnD,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACrB;AAoCD,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,EAAE,0BAA0B,CAAC,EAAE,MAAM,GAAG,MAAM,CAqBhH;AAED,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM,CAU7G;AAED,wBAAgB,gCAAgC,CAC/C,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,MAAM,SAAO,GACX,MAAM,CAGR;AAED,wBAAgB,gCAAgC,CAC/C,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,CAAC,EAAE,eAAe,GACzB,OAAO,CAOT;AAED,wBAAgB,aAAa,CAC5B,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,gBAAgB,SAAI,GAClB,OAAO,CAET;AAED,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,CAAC,EAAE,eAAe,GACzB,OAAO,CAMT"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAanD,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACrB;AAyCD,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAoBzE;AAED,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAK7F;AAED,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,EAAE,0BAA0B,CAAC,EAAE,MAAM,GAAG,MAAM,CAQhH;AAED,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,eAAe,GAAG,MAAM,CAMpG;AAED,wBAAgB,gCAAgC,CAC/C,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,MAAM,SAAO,GACX,MAAM,CAUR;AAED,wBAAgB,gCAAgC,CAC/C,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,CAAC,EAAE,eAAe,EAC3B,UAAU,CAAC,EAAE,MAAM,GACjB,OAAO,CAYT;AAED,wBAAgB,6BAA6B,CAC5C,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,MAAM,EACzB,qBAAqB,UAAO,GAC1B,MAAM,CAER;AAED,wBAAgB,aAAa,CAC5B,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,gBAAgB,SAAI,GAClB,OAAO,CAET;AAED,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,CAAC,EAAE,eAAe,GACzB,OAAO,CAMT"}