@code-yeongyu/senpi 2026.6.4 → 2026.6.10-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 (1190) hide show
  1. package/CHANGELOG.md +69 -1
  2. package/README.md +116 -99
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js.map +1 -1
  5. package/dist/bun/register-bedrock.d.ts.map +1 -1
  6. package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
  7. package/dist/bun/restore-sandbox-env.js.map +1 -1
  8. package/dist/cli/args.d.ts +1 -0
  9. package/dist/cli/args.d.ts.map +1 -1
  10. package/dist/cli/args.js +13 -4
  11. package/dist/cli/args.js.map +1 -1
  12. package/dist/cli/config-selector.d.ts.map +1 -1
  13. package/dist/cli/config-selector.js.map +1 -1
  14. package/dist/cli/file-processor.d.ts.map +1 -1
  15. package/dist/cli/file-processor.js.map +1 -1
  16. package/dist/cli/initial-message.d.ts +1 -1
  17. package/dist/cli/initial-message.d.ts.map +1 -1
  18. package/dist/cli/initial-message.js.map +1 -1
  19. package/dist/cli/list-models.d.ts.map +1 -1
  20. package/dist/cli/list-models.js.map +1 -1
  21. package/dist/cli/project-trust.d.ts +10 -0
  22. package/dist/cli/project-trust.d.ts.map +1 -0
  23. package/dist/cli/project-trust.js +48 -0
  24. package/dist/cli/project-trust.js.map +1 -0
  25. package/dist/cli/session-picker.d.ts.map +1 -1
  26. package/dist/cli/session-picker.js.map +1 -1
  27. package/dist/cli/startup-ui.d.ts +7 -0
  28. package/dist/cli/startup-ui.d.ts.map +1 -0
  29. package/dist/cli/startup-ui.js +59 -0
  30. package/dist/cli/startup-ui.js.map +1 -0
  31. package/dist/cli-main.d.ts.map +1 -1
  32. package/dist/cli-main.js.map +1 -1
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +10 -1
  35. package/dist/cli.js.map +1 -1
  36. package/dist/config.d.ts.map +1 -1
  37. package/dist/config.js.map +1 -1
  38. package/dist/core/agent-session-runtime.d.ts +3 -1
  39. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  40. package/dist/core/agent-session-runtime.js +4 -9
  41. package/dist/core/agent-session-runtime.js.map +1 -1
  42. package/dist/core/agent-session-services.d.ts +2 -1
  43. package/dist/core/agent-session-services.d.ts.map +1 -1
  44. package/dist/core/agent-session-services.js +2 -2
  45. package/dist/core/agent-session-services.js.map +1 -1
  46. package/dist/core/agent-session.d.ts +33 -0
  47. package/dist/core/agent-session.d.ts.map +1 -1
  48. package/dist/core/agent-session.js +57 -79
  49. package/dist/core/agent-session.js.map +1 -1
  50. package/dist/core/auth-guidance.d.ts.map +1 -1
  51. package/dist/core/auth-guidance.js.map +1 -1
  52. package/dist/core/auth-storage.d.ts +4 -0
  53. package/dist/core/auth-storage.d.ts.map +1 -1
  54. package/dist/core/auth-storage.js +4 -8
  55. package/dist/core/auth-storage.js.map +1 -1
  56. package/dist/core/bash-executor.d.ts.map +1 -1
  57. package/dist/core/bash-executor.js.map +1 -1
  58. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  59. package/dist/core/compaction/branch-summarization.js.map +1 -1
  60. package/dist/core/compaction/compaction.d.ts.map +1 -1
  61. package/dist/core/compaction/compaction.js.map +1 -1
  62. package/dist/core/compaction/index.d.ts.map +1 -1
  63. package/dist/core/compaction/utils.d.ts +1 -1
  64. package/dist/core/compaction/utils.d.ts.map +1 -1
  65. package/dist/core/compaction/utils.js +1 -1
  66. package/dist/core/compaction/utils.js.map +1 -1
  67. package/dist/core/defaults.d.ts.map +1 -1
  68. package/dist/core/diagnostics.d.ts.map +1 -1
  69. package/dist/core/dynamic-prompt/build.d.ts.map +1 -1
  70. package/dist/core/dynamic-prompt/build.js.map +1 -1
  71. package/dist/core/dynamic-prompt/exploration.d.ts.map +1 -1
  72. package/dist/core/dynamic-prompt/exploration.js.map +1 -1
  73. package/dist/core/dynamic-prompt/identity.d.ts.map +1 -1
  74. package/dist/core/dynamic-prompt/identity.js.map +1 -1
  75. package/dist/core/dynamic-prompt/index.d.ts.map +1 -1
  76. package/dist/core/dynamic-prompt/intent-gate.d.ts.map +1 -1
  77. package/dist/core/dynamic-prompt/intent-gate.js.map +1 -1
  78. package/dist/core/dynamic-prompt/parallel-tools.d.ts.map +1 -1
  79. package/dist/core/dynamic-prompt/parallel-tools.js.map +1 -1
  80. package/dist/core/dynamic-prompt/policies.d.ts.map +1 -1
  81. package/dist/core/dynamic-prompt/policies.js.map +1 -1
  82. package/dist/core/dynamic-prompt/style.d.ts.map +1 -1
  83. package/dist/core/dynamic-prompt/style.js.map +1 -1
  84. package/dist/core/dynamic-prompt/tool-categorization.d.ts.map +1 -1
  85. package/dist/core/dynamic-prompt/tool-categorization.js.map +1 -1
  86. package/dist/core/dynamic-prompt/tool-section.d.ts.map +1 -1
  87. package/dist/core/dynamic-prompt/tool-section.js.map +1 -1
  88. package/dist/core/dynamic-prompt/types.d.ts.map +1 -1
  89. package/dist/core/dynamic-prompt/verification.d.ts.map +1 -1
  90. package/dist/core/dynamic-prompt/verification.js.map +1 -1
  91. package/dist/core/event-bus.d.ts.map +1 -1
  92. package/dist/core/event-bus.js.map +1 -1
  93. package/dist/core/exec.d.ts.map +1 -1
  94. package/dist/core/exec.js.map +1 -1
  95. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  96. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  97. package/dist/core/export-html/index.d.ts.map +1 -1
  98. package/dist/core/export-html/index.js.map +1 -1
  99. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  100. package/dist/core/export-html/tool-renderer.js.map +1 -1
  101. package/dist/core/extensions/builtin/anthropic-bash/index.d.ts.map +1 -1
  102. package/dist/core/extensions/builtin/anthropic-bash/index.js.map +1 -1
  103. package/dist/core/extensions/builtin/anthropic-web-search/index.d.ts.map +1 -1
  104. package/dist/core/extensions/builtin/anthropic-web-search/index.js.map +1 -1
  105. package/dist/core/extensions/builtin/bash-timeout/index.d.ts.map +1 -1
  106. package/dist/core/extensions/builtin/bash-timeout/index.js.map +1 -1
  107. package/dist/core/extensions/builtin/bash-timeout/timeout.d.ts.map +1 -1
  108. package/dist/core/extensions/builtin/bash-timeout/timeout.js.map +1 -1
  109. package/dist/core/extensions/builtin/compaction/checkpoint-state.d.ts.map +1 -1
  110. package/dist/core/extensions/builtin/compaction/checkpoint-state.js.map +1 -1
  111. package/dist/core/extensions/builtin/compaction/circuit-breaker.d.ts.map +1 -1
  112. package/dist/core/extensions/builtin/compaction/circuit-breaker.js.map +1 -1
  113. package/dist/core/extensions/builtin/compaction/context-reduction.d.ts.map +1 -1
  114. package/dist/core/extensions/builtin/compaction/context-reduction.js +1 -1
  115. package/dist/core/extensions/builtin/compaction/context-reduction.js.map +1 -1
  116. package/dist/core/extensions/builtin/compaction/degradation-monitor.d.ts +0 -1
  117. package/dist/core/extensions/builtin/compaction/degradation-monitor.d.ts.map +1 -1
  118. package/dist/core/extensions/builtin/compaction/degradation-monitor.js +0 -1
  119. package/dist/core/extensions/builtin/compaction/degradation-monitor.js.map +1 -1
  120. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  121. package/dist/core/extensions/builtin/compaction/index.js +4 -4
  122. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  123. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
  124. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
  125. package/dist/core/extensions/builtin/compaction/per-turn-cap.d.ts.map +1 -1
  126. package/dist/core/extensions/builtin/compaction/per-turn-cap.js.map +1 -1
  127. package/dist/core/extensions/builtin/compaction/policy.d.ts +0 -5
  128. package/dist/core/extensions/builtin/compaction/policy.d.ts.map +1 -1
  129. package/dist/core/extensions/builtin/compaction/policy.js +0 -4
  130. package/dist/core/extensions/builtin/compaction/policy.js.map +1 -1
  131. package/dist/core/extensions/builtin/compaction/prompts.d.ts.map +1 -1
  132. package/dist/core/extensions/builtin/compaction/prompts.js.map +1 -1
  133. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.d.ts.map +1 -1
  134. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.js.map +1 -1
  135. package/dist/core/extensions/builtin/compaction/restoration-tracker.d.ts.map +1 -1
  136. package/dist/core/extensions/builtin/compaction/restoration-tracker.js.map +1 -1
  137. package/dist/core/extensions/builtin/compaction/speculative.d.ts +0 -6
  138. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  139. package/dist/core/extensions/builtin/compaction/speculative.js +0 -3
  140. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  141. package/dist/core/extensions/builtin/compaction/state.d.ts.map +1 -1
  142. package/dist/core/extensions/builtin/compaction/state.js.map +1 -1
  143. package/dist/core/extensions/builtin/compaction/todo-bridge.d.ts.map +1 -1
  144. package/dist/core/extensions/builtin/compaction/todo-bridge.js.map +1 -1
  145. package/dist/core/extensions/builtin/compaction/tool-truncation.d.ts.map +1 -1
  146. package/dist/core/extensions/builtin/compaction/tool-truncation.js.map +1 -1
  147. package/dist/core/extensions/builtin/diff.d.ts.map +1 -1
  148. package/dist/core/extensions/builtin/diff.js.map +1 -1
  149. package/dist/core/extensions/builtin/files.d.ts.map +1 -1
  150. package/dist/core/extensions/builtin/files.js.map +1 -1
  151. package/dist/core/extensions/builtin/gpt-apply-patch/apply.d.ts.map +1 -1
  152. package/dist/core/extensions/builtin/gpt-apply-patch/apply.js.map +1 -1
  153. package/dist/core/extensions/builtin/gpt-apply-patch/constants.d.ts.map +1 -1
  154. package/dist/core/extensions/builtin/gpt-apply-patch/constants.js.map +1 -1
  155. package/dist/core/extensions/builtin/gpt-apply-patch/errors.d.ts.map +1 -1
  156. package/dist/core/extensions/builtin/gpt-apply-patch/errors.js +0 -2
  157. package/dist/core/extensions/builtin/gpt-apply-patch/errors.js.map +1 -1
  158. package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts +1 -1
  159. package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts.map +1 -1
  160. package/dist/core/extensions/builtin/gpt-apply-patch/extension.js +10 -2
  161. package/dist/core/extensions/builtin/gpt-apply-patch/extension.js.map +1 -1
  162. package/dist/core/extensions/builtin/gpt-apply-patch/index.d.ts.map +1 -1
  163. package/dist/core/extensions/builtin/gpt-apply-patch/params.d.ts.map +1 -1
  164. package/dist/core/extensions/builtin/gpt-apply-patch/params.js.map +1 -1
  165. package/dist/core/extensions/builtin/gpt-apply-patch/parser.d.ts.map +1 -1
  166. package/dist/core/extensions/builtin/gpt-apply-patch/parser.js.map +1 -1
  167. package/dist/core/extensions/builtin/gpt-apply-patch/patch-diff.d.ts.map +1 -1
  168. package/dist/core/extensions/builtin/gpt-apply-patch/patch-diff.js.map +1 -1
  169. package/dist/core/extensions/builtin/gpt-apply-patch/patch-replace.d.ts.map +1 -1
  170. package/dist/core/extensions/builtin/gpt-apply-patch/patch-replace.js.map +1 -1
  171. package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.d.ts.map +1 -1
  172. package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.js.map +1 -1
  173. package/dist/core/extensions/builtin/gpt-apply-patch/preview.d.ts.map +1 -1
  174. package/dist/core/extensions/builtin/gpt-apply-patch/preview.js.map +1 -1
  175. package/dist/core/extensions/builtin/gpt-apply-patch/seek-sequence.d.ts.map +1 -1
  176. package/dist/core/extensions/builtin/gpt-apply-patch/seek-sequence.js.map +1 -1
  177. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.d.ts.map +1 -1
  178. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.js +7 -5
  179. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.js.map +1 -1
  180. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-render.d.ts.map +1 -1
  181. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-render.js.map +1 -1
  182. package/dist/core/extensions/builtin/gpt-apply-patch/text.d.ts.map +1 -1
  183. package/dist/core/extensions/builtin/gpt-apply-patch/text.js.map +1 -1
  184. package/dist/core/extensions/builtin/gpt-apply-patch/tool.d.ts.map +1 -1
  185. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
  186. package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts.map +1 -1
  187. package/dist/core/extensions/builtin/gpt-apply-patch/workspace.d.ts.map +1 -1
  188. package/dist/core/extensions/builtin/gpt-apply-patch/workspace.js.map +1 -1
  189. package/dist/core/extensions/builtin/history-search/filter.d.ts.map +1 -1
  190. package/dist/core/extensions/builtin/history-search/filter.js.map +1 -1
  191. package/dist/core/extensions/builtin/history-search/index.d.ts.map +1 -1
  192. package/dist/core/extensions/builtin/history-search/index.js.map +1 -1
  193. package/dist/core/extensions/builtin/history-search/indexer.d.ts.map +1 -1
  194. package/dist/core/extensions/builtin/history-search/indexer.js.map +1 -1
  195. package/dist/core/extensions/builtin/history-search/overlay.d.ts.map +1 -1
  196. package/dist/core/extensions/builtin/history-search/overlay.js +3 -6
  197. package/dist/core/extensions/builtin/history-search/overlay.js.map +1 -1
  198. package/dist/core/extensions/builtin/history-search/types.d.ts.map +1 -1
  199. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  200. package/dist/core/extensions/builtin/kimi-web-search/index.d.ts.map +1 -1
  201. package/dist/core/extensions/builtin/kimi-web-search/index.js.map +1 -1
  202. package/dist/core/extensions/builtin/openai-web-search/index.d.ts.map +1 -1
  203. package/dist/core/extensions/builtin/openai-web-search/index.js.map +1 -1
  204. package/dist/core/extensions/builtin/permission-system/arity.d.ts.map +1 -1
  205. package/dist/core/extensions/builtin/permission-system/arity.js.map +1 -1
  206. package/dist/core/extensions/builtin/permission-system/cli.d.ts +0 -3
  207. package/dist/core/extensions/builtin/permission-system/cli.d.ts.map +1 -1
  208. package/dist/core/extensions/builtin/permission-system/cli.js +0 -13
  209. package/dist/core/extensions/builtin/permission-system/cli.js.map +1 -1
  210. package/dist/core/extensions/builtin/permission-system/config.d.ts.map +1 -1
  211. package/dist/core/extensions/builtin/permission-system/config.js.map +1 -1
  212. package/dist/core/extensions/builtin/permission-system/evaluate.d.ts.map +1 -1
  213. package/dist/core/extensions/builtin/permission-system/evaluate.js.map +1 -1
  214. package/dist/core/extensions/builtin/permission-system/events.d.ts.map +1 -1
  215. package/dist/core/extensions/builtin/permission-system/events.js.map +1 -1
  216. package/dist/core/extensions/builtin/permission-system/external-dir.d.ts.map +1 -1
  217. package/dist/core/extensions/builtin/permission-system/external-dir.js.map +1 -1
  218. package/dist/core/extensions/builtin/permission-system/index.d.ts.map +1 -1
  219. package/dist/core/extensions/builtin/permission-system/index.js.map +1 -1
  220. package/dist/core/extensions/builtin/permission-system/non-interactive.d.ts.map +1 -1
  221. package/dist/core/extensions/builtin/permission-system/non-interactive.js.map +1 -1
  222. package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
  223. package/dist/core/extensions/builtin/permission-system/parsers.js +3 -1
  224. package/dist/core/extensions/builtin/permission-system/parsers.js.map +1 -1
  225. package/dist/core/extensions/builtin/permission-system/prompt.d.ts.map +1 -1
  226. package/dist/core/extensions/builtin/permission-system/prompt.js.map +1 -1
  227. package/dist/core/extensions/builtin/permission-system/service.d.ts.map +1 -1
  228. package/dist/core/extensions/builtin/permission-system/service.js +2 -5
  229. package/dist/core/extensions/builtin/permission-system/service.js.map +1 -1
  230. package/dist/core/extensions/builtin/permission-system/settings.d.ts.map +1 -1
  231. package/dist/core/extensions/builtin/permission-system/settings.js.map +1 -1
  232. package/dist/core/extensions/builtin/permission-system/storage.d.ts.map +1 -1
  233. package/dist/core/extensions/builtin/permission-system/storage.js.map +1 -1
  234. package/dist/core/extensions/builtin/permission-system/types.d.ts.map +1 -1
  235. package/dist/core/extensions/builtin/permission-system/types.js +3 -5
  236. package/dist/core/extensions/builtin/permission-system/types.js.map +1 -1
  237. package/dist/core/extensions/builtin/permission-system/wildcard.d.ts.map +1 -1
  238. package/dist/core/extensions/builtin/permission-system/wildcard.js.map +1 -1
  239. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.d.ts.map +1 -1
  240. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.js.map +1 -1
  241. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.d.ts.map +1 -1
  242. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.js.map +1 -1
  243. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.d.ts.map +1 -1
  244. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.js.map +1 -1
  245. package/dist/core/extensions/builtin/prompt-preset/file-operations.d.ts.map +1 -1
  246. package/dist/core/extensions/builtin/prompt-preset/file-operations.js.map +1 -1
  247. package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.d.ts.map +1 -1
  248. package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.js.map +1 -1
  249. package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.d.ts.map +1 -1
  250. package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.js.map +1 -1
  251. package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.d.ts.map +1 -1
  252. package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.js.map +1 -1
  253. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.d.ts.map +1 -1
  254. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.js.map +1 -1
  255. package/dist/core/extensions/builtin/prompt-preset/gpt-5.d.ts.map +1 -1
  256. package/dist/core/extensions/builtin/prompt-preset/gpt-5.js.map +1 -1
  257. package/dist/core/extensions/builtin/prompt-preset/index.d.ts.map +1 -1
  258. package/dist/core/extensions/builtin/prompt-preset/index.js.map +1 -1
  259. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.d.ts.map +1 -1
  260. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.js.map +1 -1
  261. package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
  262. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  263. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
  264. package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
  265. package/dist/core/extensions/builtin/prompt-url-widget.d.ts.map +1 -1
  266. package/dist/core/extensions/builtin/prompt-url-widget.js.map +1 -1
  267. package/dist/core/extensions/builtin/redraws.d.ts.map +1 -1
  268. package/dist/core/extensions/builtin/redraws.js.map +1 -1
  269. package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
  270. package/dist/core/extensions/builtin/service-tier.js.map +1 -1
  271. package/dist/core/extensions/builtin/session-observer/index.d.ts.map +1 -1
  272. package/dist/core/extensions/builtin/session-observer/index.js.map +1 -1
  273. package/dist/core/extensions/builtin/session-observer/loader.d.ts.map +1 -1
  274. package/dist/core/extensions/builtin/session-observer/loader.js.map +1 -1
  275. package/dist/core/extensions/builtin/session-observer/overlay-format.d.ts.map +1 -1
  276. package/dist/core/extensions/builtin/session-observer/overlay-format.js.map +1 -1
  277. package/dist/core/extensions/builtin/session-observer/overlay.d.ts.map +1 -1
  278. package/dist/core/extensions/builtin/session-observer/overlay.js +13 -18
  279. package/dist/core/extensions/builtin/session-observer/overlay.js.map +1 -1
  280. package/dist/core/extensions/builtin/session-observer/scanner.d.ts.map +1 -1
  281. package/dist/core/extensions/builtin/session-observer/scanner.js.map +1 -1
  282. package/dist/core/extensions/builtin/session-observer/text.d.ts.map +1 -1
  283. package/dist/core/extensions/builtin/session-observer/text.js.map +1 -1
  284. package/dist/core/extensions/builtin/session-observer/transcript-entries.d.ts.map +1 -1
  285. package/dist/core/extensions/builtin/session-observer/transcript-entries.js.map +1 -1
  286. package/dist/core/extensions/builtin/session-observer/transcript-format.d.ts.map +1 -1
  287. package/dist/core/extensions/builtin/session-observer/transcript-format.js.map +1 -1
  288. package/dist/core/extensions/builtin/session-observer/transcript.d.ts.map +1 -1
  289. package/dist/core/extensions/builtin/session-observer/transcript.js.map +1 -1
  290. package/dist/core/extensions/builtin/session-observer/types.d.ts.map +1 -1
  291. package/dist/core/extensions/builtin/todotools/index.d.ts.map +1 -1
  292. package/dist/core/extensions/builtin/todotools/index.js +0 -2
  293. package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
  294. package/dist/core/extensions/builtin/todotools/prompt.d.ts +1 -1
  295. package/dist/core/extensions/builtin/todotools/prompt.d.ts.map +1 -1
  296. package/dist/core/extensions/builtin/todotools/prompt.js +0 -2
  297. package/dist/core/extensions/builtin/todotools/prompt.js.map +1 -1
  298. package/dist/core/extensions/builtin/todotools/state.d.ts.map +1 -1
  299. package/dist/core/extensions/builtin/todotools/state.js.map +1 -1
  300. package/dist/core/extensions/builtin/todotools/tools/todoread.d.ts.map +1 -1
  301. package/dist/core/extensions/builtin/todotools/tools/todoread.js.map +1 -1
  302. package/dist/core/extensions/builtin/todotools/tools/todowrite.d.ts.map +1 -1
  303. package/dist/core/extensions/builtin/todotools/tools/todowrite.js.map +1 -1
  304. package/dist/core/extensions/builtin/tool-pair-guard/index.d.ts.map +1 -1
  305. package/dist/core/extensions/builtin/tool-pair-guard/index.js.map +1 -1
  306. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.d.ts.map +1 -1
  307. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.js.map +1 -1
  308. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-chat-completions-payload.d.ts.map +1 -1
  309. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-chat-completions-payload.js.map +1 -1
  310. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-responses-payload.d.ts.map +1 -1
  311. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-responses-payload.js.map +1 -1
  312. package/dist/core/extensions/builtin/tps.d.ts.map +1 -1
  313. package/dist/core/extensions/builtin/tps.js.map +1 -1
  314. package/dist/core/extensions/index.d.ts +1 -1
  315. package/dist/core/extensions/index.d.ts.map +1 -1
  316. package/dist/core/extensions/index.js.map +1 -1
  317. package/dist/core/extensions/loader.d.ts +1 -1
  318. package/dist/core/extensions/loader.d.ts.map +1 -1
  319. package/dist/core/extensions/loader.js +4 -4
  320. package/dist/core/extensions/loader.js.map +1 -1
  321. package/dist/core/extensions/runner.d.ts +7 -2
  322. package/dist/core/extensions/runner.d.ts.map +1 -1
  323. package/dist/core/extensions/runner.js +69 -43
  324. package/dist/core/extensions/runner.js.map +1 -1
  325. package/dist/core/extensions/types.d.ts +22 -2
  326. package/dist/core/extensions/types.d.ts.map +1 -1
  327. package/dist/core/extensions/types.js.map +1 -1
  328. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  329. package/dist/core/extensions/wrapper.js.map +1 -1
  330. package/dist/core/footer-data-provider.d.ts.map +1 -1
  331. package/dist/core/footer-data-provider.js +17 -18
  332. package/dist/core/footer-data-provider.js.map +1 -1
  333. package/dist/core/http-dispatcher.d.ts.map +1 -1
  334. package/dist/core/http-dispatcher.js.map +1 -1
  335. package/dist/core/keybindings.d.ts +1 -1
  336. package/dist/core/keybindings.d.ts.map +1 -1
  337. package/dist/core/keybindings.js +0 -1
  338. package/dist/core/keybindings.js.map +1 -1
  339. package/dist/core/messages.d.ts.map +1 -1
  340. package/dist/core/messages.js.map +1 -1
  341. package/dist/core/model-registry.d.ts +3 -4
  342. package/dist/core/model-registry.d.ts.map +1 -1
  343. package/dist/core/model-registry.js +31 -16
  344. package/dist/core/model-registry.js.map +1 -1
  345. package/dist/core/model-resolver.d.ts.map +1 -1
  346. package/dist/core/model-resolver.js.map +1 -1
  347. package/dist/core/output-guard.d.ts.map +1 -1
  348. package/dist/core/output-guard.js.map +1 -1
  349. package/dist/core/package-manager.d.ts +1 -0
  350. package/dist/core/package-manager.d.ts.map +1 -1
  351. package/dist/core/package-manager.js +25 -13
  352. package/dist/core/package-manager.js.map +1 -1
  353. package/dist/core/project-trust.d.ts +15 -0
  354. package/dist/core/project-trust.d.ts.map +1 -0
  355. package/dist/core/project-trust.js +58 -0
  356. package/dist/core/project-trust.js.map +1 -0
  357. package/dist/core/prompt-templates.d.ts +2 -1
  358. package/dist/core/prompt-templates.d.ts.map +1 -1
  359. package/dist/core/prompt-templates.js +24 -26
  360. package/dist/core/prompt-templates.js.map +1 -1
  361. package/dist/core/provider-attribution.d.ts.map +1 -1
  362. package/dist/core/provider-attribution.js.map +1 -1
  363. package/dist/core/provider-display-names.d.ts.map +1 -1
  364. package/dist/core/resolve-config-value.d.ts +0 -4
  365. package/dist/core/resolve-config-value.d.ts.map +1 -1
  366. package/dist/core/resolve-config-value.js +0 -15
  367. package/dist/core/resolve-config-value.js.map +1 -1
  368. package/dist/core/resource-loader.d.ts +14 -2
  369. package/dist/core/resource-loader.d.ts.map +1 -1
  370. package/dist/core/resource-loader.js +117 -74
  371. package/dist/core/resource-loader.js.map +1 -1
  372. package/dist/core/sdk.d.ts.map +1 -1
  373. package/dist/core/sdk.js.map +1 -1
  374. package/dist/core/session-cwd.d.ts.map +1 -1
  375. package/dist/core/session-cwd.js +0 -1
  376. package/dist/core/session-cwd.js.map +1 -1
  377. package/dist/core/session-manager.d.ts +3 -0
  378. package/dist/core/session-manager.d.ts.map +1 -1
  379. package/dist/core/session-manager.js +41 -28
  380. package/dist/core/session-manager.js.map +1 -1
  381. package/dist/core/session-resident-store.d.ts +16 -0
  382. package/dist/core/session-resident-store.d.ts.map +1 -0
  383. package/dist/core/session-resident-store.js +48 -0
  384. package/dist/core/session-resident-store.js.map +1 -0
  385. package/dist/core/session-work-barrier.d.ts.map +1 -1
  386. package/dist/core/session-work-barrier.js +5 -3
  387. package/dist/core/session-work-barrier.js.map +1 -1
  388. package/dist/core/settings-manager.d.ts +14 -2
  389. package/dist/core/settings-manager.d.ts.map +1 -1
  390. package/dist/core/settings-manager.js +86 -46
  391. package/dist/core/settings-manager.js.map +1 -1
  392. package/dist/core/skills.d.ts.map +1 -1
  393. package/dist/core/skills.js.map +1 -1
  394. package/dist/core/slash-commands.d.ts.map +1 -1
  395. package/dist/core/slash-commands.js +1 -0
  396. package/dist/core/slash-commands.js.map +1 -1
  397. package/dist/core/source-info.d.ts.map +1 -1
  398. package/dist/core/source-info.js.map +1 -1
  399. package/dist/core/system-prompt.d.ts.map +1 -1
  400. package/dist/core/system-prompt.js.map +1 -1
  401. package/dist/core/telemetry.d.ts.map +1 -1
  402. package/dist/core/telemetry.js.map +1 -1
  403. package/dist/core/thinking-levels.d.ts.map +1 -1
  404. package/dist/core/thinking-levels.js.map +1 -1
  405. package/dist/core/timings.d.ts.map +1 -1
  406. package/dist/core/timings.js.map +1 -1
  407. package/dist/core/tools/bash.d.ts.map +1 -1
  408. package/dist/core/tools/bash.js +9 -6
  409. package/dist/core/tools/bash.js.map +1 -1
  410. package/dist/core/tools/diff-render.d.ts.map +1 -1
  411. package/dist/core/tools/diff-render.js.map +1 -1
  412. package/dist/core/tools/edit-diff.d.ts +0 -5
  413. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  414. package/dist/core/tools/edit-diff.js +0 -7
  415. package/dist/core/tools/edit-diff.js.map +1 -1
  416. package/dist/core/tools/edit.d.ts.map +1 -1
  417. package/dist/core/tools/edit.js.map +1 -1
  418. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  419. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  420. package/dist/core/tools/find.d.ts.map +1 -1
  421. package/dist/core/tools/find.js +1 -1
  422. package/dist/core/tools/find.js.map +1 -1
  423. package/dist/core/tools/grep.d.ts.map +1 -1
  424. package/dist/core/tools/grep.js +1 -1
  425. package/dist/core/tools/grep.js.map +1 -1
  426. package/dist/core/tools/index.d.ts +0 -5
  427. package/dist/core/tools/index.d.ts.map +1 -1
  428. package/dist/core/tools/index.js +0 -67
  429. package/dist/core/tools/index.js.map +1 -1
  430. package/dist/core/tools/ls.d.ts.map +1 -1
  431. package/dist/core/tools/ls.js +1 -1
  432. package/dist/core/tools/ls.js.map +1 -1
  433. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  434. package/dist/core/tools/output-accumulator.js +12 -18
  435. package/dist/core/tools/output-accumulator.js.map +1 -1
  436. package/dist/core/tools/path-utils.d.ts.map +1 -1
  437. package/dist/core/tools/path-utils.js.map +1 -1
  438. package/dist/core/tools/read.d.ts.map +1 -1
  439. package/dist/core/tools/read.js +1 -1
  440. package/dist/core/tools/read.js.map +1 -1
  441. package/dist/core/tools/render-utils.d.ts.map +1 -1
  442. package/dist/core/tools/render-utils.js.map +1 -1
  443. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  444. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  445. package/dist/core/tools/truncate.d.ts.map +1 -1
  446. package/dist/core/tools/truncate.js.map +1 -1
  447. package/dist/core/tools/write.d.ts.map +1 -1
  448. package/dist/core/tools/write.js +1 -2
  449. package/dist/core/tools/write.js.map +1 -1
  450. package/dist/core/trust-manager.d.ts +31 -0
  451. package/dist/core/trust-manager.d.ts.map +1 -0
  452. package/dist/core/trust-manager.js +186 -0
  453. package/dist/core/trust-manager.js.map +1 -0
  454. package/dist/index.d.ts +5 -4
  455. package/dist/index.d.ts.map +1 -1
  456. package/dist/index.js +2 -1
  457. package/dist/index.js.map +1 -1
  458. package/dist/main.d.ts.map +1 -1
  459. package/dist/main.js +101 -86
  460. package/dist/main.js.map +1 -1
  461. package/dist/migrations.d.ts.map +1 -1
  462. package/dist/migrations.js +39 -34
  463. package/dist/migrations.js.map +1 -1
  464. package/dist/modes/index.d.ts +1 -1
  465. package/dist/modes/index.d.ts.map +1 -1
  466. package/dist/modes/index.js.map +1 -1
  467. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  468. package/dist/modes/interactive/components/armin.js +6 -10
  469. package/dist/modes/interactive/components/armin.js.map +1 -1
  470. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  471. package/dist/modes/interactive/components/assistant-message.js +2 -11
  472. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  473. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  474. package/dist/modes/interactive/components/bash-execution.js +6 -11
  475. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  476. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  477. package/dist/modes/interactive/components/bordered-loader.js +0 -3
  478. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  479. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  480. package/dist/modes/interactive/components/branch-summary-message.js +1 -3
  481. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  482. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  483. package/dist/modes/interactive/components/compaction-summary-message.js +1 -3
  484. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  485. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  486. package/dist/modes/interactive/components/config-selector.js +5 -15
  487. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  488. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  489. package/dist/modes/interactive/components/countdown-timer.js +0 -5
  490. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  491. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  492. package/dist/modes/interactive/components/custom-editor.js +1 -8
  493. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  494. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  495. package/dist/modes/interactive/components/custom-message.js +1 -6
  496. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  497. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  498. package/dist/modes/interactive/components/daxnuts.js +6 -8
  499. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  500. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  501. package/dist/modes/interactive/components/diff.js +2 -2
  502. package/dist/modes/interactive/components/diff.js.map +1 -1
  503. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  504. package/dist/modes/interactive/components/dynamic-border.js +0 -1
  505. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  506. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  507. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  508. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  509. package/dist/modes/interactive/components/extension-editor.js +1 -6
  510. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  511. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  512. package/dist/modes/interactive/components/extension-input.js +2 -8
  513. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  514. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  515. package/dist/modes/interactive/components/extension-selector.js +1 -9
  516. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  517. package/dist/modes/interactive/components/favorite-models-selector.d.ts.map +1 -1
  518. package/dist/modes/interactive/components/favorite-models-selector.js +9 -15
  519. package/dist/modes/interactive/components/favorite-models-selector.js.map +1 -1
  520. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  521. package/dist/modes/interactive/components/footer.js +10 -3
  522. package/dist/modes/interactive/components/footer.js.map +1 -1
  523. package/dist/modes/interactive/components/index.d.ts +1 -0
  524. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  525. package/dist/modes/interactive/components/index.js +1 -0
  526. package/dist/modes/interactive/components/index.js.map +1 -1
  527. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  528. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  529. package/dist/modes/interactive/components/login-dialog.d.ts +1 -0
  530. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  531. package/dist/modes/interactive/components/login-dialog.js +10 -10
  532. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  533. package/dist/modes/interactive/components/model-favorites.d.ts.map +1 -1
  534. package/dist/modes/interactive/components/model-favorites.js.map +1 -1
  535. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  536. package/dist/modes/interactive/components/model-selector.js +9 -22
  537. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  538. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  539. package/dist/modes/interactive/components/oauth-selector.js +3 -12
  540. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  541. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  542. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  543. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  544. package/dist/modes/interactive/components/session-selector.js +33 -58
  545. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  546. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  547. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  548. package/dist/modes/interactive/components/settings-selector.js +20 -4
  549. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  550. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  551. package/dist/modes/interactive/components/show-images-selector.js +0 -1
  552. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  553. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  554. package/dist/modes/interactive/components/skill-invocation-message.js +1 -3
  555. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  556. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  557. package/dist/modes/interactive/components/theme-selector.js +0 -2
  558. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  559. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  560. package/dist/modes/interactive/components/thinking-selector.js +0 -1
  561. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  562. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  563. package/dist/modes/interactive/components/tool-execution.js +35 -32
  564. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  565. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  566. package/dist/modes/interactive/components/tree-selector.js +18 -32
  567. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  568. package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  569. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  570. package/dist/modes/interactive/components/trust-selector.js +85 -0
  571. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  572. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  573. package/dist/modes/interactive/components/user-message-selector.js +3 -6
  574. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  575. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  576. package/dist/modes/interactive/components/user-message.js +0 -1
  577. package/dist/modes/interactive/components/user-message.js.map +1 -1
  578. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  579. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  580. package/dist/modes/interactive/interactive-mode.d.ts +39 -0
  581. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  582. package/dist/modes/interactive/interactive-mode.js +264 -114
  583. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  584. package/dist/modes/interactive/session-info-format.d.ts.map +1 -1
  585. package/dist/modes/interactive/session-info-format.js.map +1 -1
  586. package/dist/modes/interactive/startup-tools.d.ts.map +1 -1
  587. package/dist/modes/interactive/startup-tools.js.map +1 -1
  588. package/dist/modes/interactive/theme/theme.d.ts +0 -4
  589. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  590. package/dist/modes/interactive/theme/theme.js +0 -13
  591. package/dist/modes/interactive/theme/theme.js.map +1 -1
  592. package/dist/modes/interactive/working-status.d.ts +2 -0
  593. package/dist/modes/interactive/working-status.d.ts.map +1 -1
  594. package/dist/modes/interactive/working-status.js +34 -0
  595. package/dist/modes/interactive/working-status.js.map +1 -1
  596. package/dist/modes/print-mode.d.ts.map +1 -1
  597. package/dist/modes/print-mode.js.map +1 -1
  598. package/dist/modes/provider-native-rendering.d.ts.map +1 -1
  599. package/dist/modes/provider-native-rendering.js.map +1 -1
  600. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  601. package/dist/modes/rpc/jsonl.js.map +1 -1
  602. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  603. package/dist/modes/rpc/rpc-client.js +7 -8
  604. package/dist/modes/rpc/rpc-client.js.map +1 -1
  605. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  606. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  607. package/dist/modes/rpc/rpc-types.d.ts +0 -1
  608. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  609. package/dist/modes/rpc/rpc-types.js.map +1 -1
  610. package/dist/package-manager-cli.d.ts +6 -2
  611. package/dist/package-manager-cli.d.ts.map +1 -1
  612. package/dist/package-manager-cli.js +105 -11
  613. package/dist/package-manager-cli.js.map +1 -1
  614. package/dist/self-update-bootstrap.d.ts.map +1 -1
  615. package/dist/self-update-bootstrap.js.map +1 -1
  616. package/dist/senpi +10 -1
  617. package/dist/utils/ansi.d.ts.map +1 -1
  618. package/dist/utils/ansi.js.map +1 -1
  619. package/dist/utils/changelog.d.ts +1 -0
  620. package/dist/utils/changelog.d.ts.map +1 -1
  621. package/dist/utils/changelog.js +78 -0
  622. package/dist/utils/changelog.js.map +1 -1
  623. package/dist/utils/child-process.d.ts.map +1 -1
  624. package/dist/utils/child-process.js.map +1 -1
  625. package/dist/utils/clipboard-image.d.ts.map +1 -1
  626. package/dist/utils/clipboard-image.js.map +1 -1
  627. package/dist/utils/clipboard-native.d.ts.map +1 -1
  628. package/dist/utils/clipboard-native.js.map +1 -1
  629. package/dist/utils/clipboard.d.ts.map +1 -1
  630. package/dist/utils/clipboard.js.map +1 -1
  631. package/dist/utils/deprecation.d.ts.map +1 -1
  632. package/dist/utils/deprecation.js.map +1 -1
  633. package/dist/utils/exif-orientation.d.ts.map +1 -1
  634. package/dist/utils/exif-orientation.js.map +1 -1
  635. package/dist/utils/frontmatter.d.ts.map +1 -1
  636. package/dist/utils/frontmatter.js.map +1 -1
  637. package/dist/utils/fs-watch.d.ts.map +1 -1
  638. package/dist/utils/fs-watch.js.map +1 -1
  639. package/dist/utils/git.d.ts.map +1 -1
  640. package/dist/utils/git.js.map +1 -1
  641. package/dist/utils/html.d.ts.map +1 -1
  642. package/dist/utils/html.js.map +1 -1
  643. package/dist/utils/image-convert.d.ts.map +1 -1
  644. package/dist/utils/image-convert.js.map +1 -1
  645. package/dist/utils/image-resize-core.d.ts.map +1 -1
  646. package/dist/utils/image-resize-core.js.map +1 -1
  647. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  648. package/dist/utils/image-resize-worker.js.map +1 -1
  649. package/dist/utils/image-resize.d.ts.map +1 -1
  650. package/dist/utils/image-resize.js.map +1 -1
  651. package/dist/utils/json.d.ts.map +1 -1
  652. package/dist/utils/json.js.map +1 -1
  653. package/dist/utils/mime.d.ts.map +1 -1
  654. package/dist/utils/mime.js.map +1 -1
  655. package/dist/utils/open-browser.d.ts.map +1 -1
  656. package/dist/utils/open-browser.js.map +1 -1
  657. package/dist/utils/paths.d.ts.map +1 -1
  658. package/dist/utils/paths.js.map +1 -1
  659. package/dist/utils/photon.d.ts.map +1 -1
  660. package/dist/utils/photon.js.map +1 -1
  661. package/dist/utils/pi-user-agent.d.ts.map +1 -1
  662. package/dist/utils/pi-user-agent.js.map +1 -1
  663. package/dist/utils/shell.d.ts.map +1 -1
  664. package/dist/utils/shell.js.map +1 -1
  665. package/dist/utils/sleep.d.ts.map +1 -1
  666. package/dist/utils/sleep.js.map +1 -1
  667. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  668. package/dist/utils/syntax-highlight.js.map +1 -1
  669. package/dist/utils/tools-manager.d.ts.map +1 -1
  670. package/dist/utils/tools-manager.js.map +1 -1
  671. package/dist/utils/version-check.d.ts.map +1 -1
  672. package/dist/utils/version-check.js.map +1 -1
  673. package/dist/utils/windows-self-update.d.ts.map +1 -1
  674. package/dist/utils/windows-self-update.js.map +1 -1
  675. package/docs/compaction-guide.md +9 -9
  676. package/docs/compaction.md +2 -2
  677. package/docs/containerization.md +22 -22
  678. package/docs/custom-provider.md +13 -13
  679. package/docs/development.md +4 -2
  680. package/docs/docs.json +4 -0
  681. package/docs/extensions.md +46 -18
  682. package/docs/index.md +5 -4
  683. package/docs/json.md +21 -15
  684. package/docs/keybindings.md +6 -3
  685. package/docs/models.md +10 -43
  686. package/docs/packages.md +12 -12
  687. package/docs/prompt-templates.md +11 -4
  688. package/docs/providers.md +9 -9
  689. package/docs/rpc.md +14 -13
  690. package/docs/sdk.md +18 -9
  691. package/docs/security.md +55 -0
  692. package/docs/session-format.md +4 -4
  693. package/docs/sessions.md +14 -14
  694. package/docs/settings.md +20 -7
  695. package/docs/skills.md +11 -11
  696. package/docs/terminal-setup.md +38 -4
  697. package/docs/termux.md +3 -3
  698. package/docs/themes.md +1 -1
  699. package/docs/tmux.md +4 -2
  700. package/docs/tui.md +4 -4
  701. package/docs/usage.md +60 -50
  702. package/examples/extensions/README.md +1 -0
  703. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  704. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  705. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  706. package/examples/extensions/gondolin/package-lock.json +2 -2
  707. package/examples/extensions/gondolin/package.json +1 -1
  708. package/examples/extensions/minimal-mode.ts +6 -6
  709. package/examples/extensions/project-trust.ts +64 -0
  710. package/examples/extensions/sandbox/package-lock.json +2 -2
  711. package/examples/extensions/sandbox/package.json +1 -1
  712. package/examples/extensions/with-deps/package-lock.json +2 -2
  713. package/examples/extensions/with-deps/package.json +1 -1
  714. package/node_modules/@earendil-works/pi-agent-core/README.md +4 -3
  715. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  716. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +125 -77
  717. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  718. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +7 -0
  719. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  720. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +2 -27
  721. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  722. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
  723. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +7 -20
  724. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
  725. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
  726. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
  727. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts +1 -1
  728. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
  729. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +1 -1
  730. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  731. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.d.ts.map +1 -1
  732. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.js.map +1 -1
  733. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  734. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +0 -3
  735. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  736. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.d.ts.map +1 -1
  737. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js.map +1 -1
  738. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.d.ts.map +1 -1
  739. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.js.map +1 -1
  740. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.d.ts.map +1 -1
  741. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.js +0 -3
  742. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.js.map +1 -1
  743. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts.map +1 -1
  744. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js +0 -7
  745. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js.map +1 -1
  746. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.d.ts.map +1 -1
  747. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.js +3 -1
  748. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.js.map +1 -1
  749. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.d.ts.map +1 -1
  750. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js +0 -5
  751. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js.map +1 -1
  752. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.d.ts.map +1 -1
  753. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.js.map +1 -1
  754. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
  755. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +0 -1
  756. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
  757. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.d.ts.map +1 -1
  758. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.js.map +1 -1
  759. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.d.ts.map +1 -1
  760. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.js.map +1 -1
  761. package/node_modules/@earendil-works/pi-agent-core/dist/harness/system-prompt.d.ts.map +1 -1
  762. package/node_modules/@earendil-works/pi-agent-core/dist/harness/system-prompt.js.map +1 -1
  763. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +0 -2
  764. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
  765. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js +0 -20
  766. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
  767. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -1
  768. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js.map +1 -1
  769. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.d.ts.map +1 -1
  770. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js.map +1 -1
  771. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
  772. package/node_modules/@earendil-works/pi-agent-core/dist/node.d.ts.map +1 -1
  773. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts.map +1 -1
  774. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js.map +1 -1
  775. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +7 -4
  776. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  777. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  778. package/node_modules/@earendil-works/pi-agent-core/package.json +6 -6
  779. package/node_modules/@earendil-works/pi-ai/README.md +4 -5
  780. package/node_modules/@earendil-works/pi-ai/dist/api-registry.d.ts +0 -1
  781. package/node_modules/@earendil-works/pi-ai/dist/api-registry.d.ts.map +1 -1
  782. package/node_modules/@earendil-works/pi-ai/dist/api-registry.js +0 -3
  783. package/node_modules/@earendil-works/pi-ai/dist/api-registry.js.map +1 -1
  784. package/node_modules/@earendil-works/pi-ai/dist/bedrock-provider.d.ts.map +1 -1
  785. package/node_modules/@earendil-works/pi-ai/dist/cli.d.ts.map +1 -1
  786. package/node_modules/@earendil-works/pi-ai/dist/cli.js.map +1 -1
  787. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -1
  788. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -1
  789. package/node_modules/@earendil-works/pi-ai/dist/image-models.d.ts.map +1 -1
  790. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +30 -0
  791. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  792. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +30 -0
  793. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  794. package/node_modules/@earendil-works/pi-ai/dist/image-models.js.map +1 -1
  795. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.d.ts.map +1 -1
  796. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.js.map +1 -1
  797. package/node_modules/@earendil-works/pi-ai/dist/images.d.ts.map +1 -1
  798. package/node_modules/@earendil-works/pi-ai/dist/images.js.map +1 -1
  799. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  800. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  801. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +584 -397
  802. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  803. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +578 -509
  804. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  805. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  806. package/node_modules/@earendil-works/pi-ai/dist/oauth.d.ts.map +1 -1
  807. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  808. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +15 -7
  809. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  810. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts +1 -1
  811. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  812. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +17 -7
  813. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
  814. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
  815. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js +1 -0
  816. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
  817. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare.d.ts.map +1 -1
  818. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare.js.map +1 -1
  819. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.d.ts.map +1 -1
  820. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js.map +1 -1
  821. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
  822. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
  823. package/node_modules/@earendil-works/pi-ai/dist/providers/google-shared.d.ts +0 -4
  824. package/node_modules/@earendil-works/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  825. package/node_modules/@earendil-works/pi-ai/dist/providers/google-shared.js +0 -13
  826. package/node_modules/@earendil-works/pi-ai/dist/providers/google-shared.js.map +1 -1
  827. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.d.ts.map +1 -1
  828. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js.map +1 -1
  829. package/node_modules/@earendil-works/pi-ai/dist/providers/google.d.ts.map +1 -1
  830. package/node_modules/@earendil-works/pi-ai/dist/providers/google.js.map +1 -1
  831. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.d.ts.map +1 -1
  832. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js.map +1 -1
  833. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.d.ts.map +1 -1
  834. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js.map +1 -1
  835. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.d.ts.map +1 -1
  836. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.js +3 -3
  837. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.js.map +1 -1
  838. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  839. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +0 -7
  840. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  841. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  842. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +5 -4
  843. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js.map +1 -1
  844. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-prompt-cache.d.ts.map +1 -1
  845. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-prompt-cache.js.map +1 -1
  846. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.d.ts.map +1 -1
  847. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js +2 -1
  848. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js.map +1 -1
  849. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
  850. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js +3 -2
  851. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js.map +1 -1
  852. package/node_modules/@earendil-works/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  853. package/node_modules/@earendil-works/pi-ai/dist/providers/register-builtins.js.map +1 -1
  854. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts +1 -7
  855. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  856. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js +2 -16
  857. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js.map +1 -1
  858. package/node_modules/@earendil-works/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
  859. package/node_modules/@earendil-works/pi-ai/dist/providers/transform-messages.js.map +1 -1
  860. package/node_modules/@earendil-works/pi-ai/dist/session-resources.d.ts.map +1 -1
  861. package/node_modules/@earendil-works/pi-ai/dist/session-resources.js.map +1 -1
  862. package/node_modules/@earendil-works/pi-ai/dist/stream.d.ts.map +1 -1
  863. package/node_modules/@earendil-works/pi-ai/dist/stream.js.map +1 -1
  864. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.d.ts.map +1 -1
  865. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.js.map +1 -1
  866. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.d.ts.map +1 -1
  867. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js.map +1 -1
  868. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.d.ts.map +1 -1
  869. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.js +10 -8
  870. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.js.map +1 -1
  871. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/hermes.d.ts.map +1 -1
  872. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/hermes.js.map +1 -1
  873. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/json-mix.d.ts.map +1 -1
  874. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/json-mix.js.map +1 -1
  875. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/morph-xml.d.ts.map +1 -1
  876. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/morph-xml.js.map +1 -1
  877. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.d.ts.map +1 -1
  878. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.js.map +1 -1
  879. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/yaml-xml.d.ts.map +1 -1
  880. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/yaml-xml.js.map +1 -1
  881. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.d.ts.map +1 -1
  882. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.js.map +1 -1
  883. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/types.d.ts.map +1 -1
  884. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +6 -2
  885. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  886. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  887. package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.d.ts.map +1 -1
  888. package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.js.map +1 -1
  889. package/node_modules/@earendil-works/pi-ai/dist/utils/diagnostics.d.ts.map +1 -1
  890. package/node_modules/@earendil-works/pi-ai/dist/utils/diagnostics.js.map +1 -1
  891. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  892. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js +3 -7
  893. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js.map +1 -1
  894. package/node_modules/@earendil-works/pi-ai/dist/utils/hash.d.ts.map +1 -1
  895. package/node_modules/@earendil-works/pi-ai/dist/utils/hash.js.map +1 -1
  896. package/node_modules/@earendil-works/pi-ai/dist/utils/headers.d.ts.map +1 -1
  897. package/node_modules/@earendil-works/pi-ai/dist/utils/headers.js.map +1 -1
  898. package/node_modules/@earendil-works/pi-ai/dist/utils/json-parse.d.ts.map +1 -1
  899. package/node_modules/@earendil-works/pi-ai/dist/utils/json-parse.js.map +1 -1
  900. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.d.ts.map +1 -1
  901. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.js.map +1 -1
  902. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/anthropic.d.ts.map +1 -1
  903. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/anthropic.js.map +1 -1
  904. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts.map +1 -1
  905. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js.map +1 -1
  906. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  907. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  908. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.d.ts.map +1 -1
  909. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.js.map +1 -1
  910. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/oauth-page.d.ts.map +1 -1
  911. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/oauth-page.js.map +1 -1
  912. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  913. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  914. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/pkce.d.ts.map +1 -1
  915. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/pkce.js.map +1 -1
  916. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/types.d.ts.map +1 -1
  917. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +0 -4
  918. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  919. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +0 -6
  920. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  921. package/node_modules/@earendil-works/pi-ai/dist/utils/sanitize-unicode.d.ts.map +1 -1
  922. package/node_modules/@earendil-works/pi-ai/dist/utils/sanitize-unicode.js.map +1 -1
  923. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-pair-repair.d.ts.map +1 -1
  924. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-pair-repair.js.map +1 -1
  925. package/node_modules/@earendil-works/pi-ai/dist/utils/typebox-helpers.d.ts.map +1 -1
  926. package/node_modules/@earendil-works/pi-ai/dist/utils/typebox-helpers.js.map +1 -1
  927. package/node_modules/@earendil-works/pi-ai/dist/utils/validation.d.ts.map +1 -1
  928. package/node_modules/@earendil-works/pi-ai/dist/utils/validation.js.map +1 -1
  929. package/node_modules/@earendil-works/pi-ai/package.json +5 -5
  930. package/node_modules/@earendil-works/pi-tui/README.md +1 -2
  931. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts +3 -1
  932. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  933. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js +0 -3
  934. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  935. package/node_modules/@earendil-works/pi-tui/dist/components/box.d.ts.map +1 -1
  936. package/node_modules/@earendil-works/pi-tui/dist/components/box.js +1 -6
  937. package/node_modules/@earendil-works/pi-tui/dist/components/box.js.map +1 -1
  938. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.d.ts.map +1 -1
  939. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.js +4 -3
  940. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.js.map +1 -1
  941. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts +6 -1
  942. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
  943. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +132 -93
  944. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  945. package/node_modules/@earendil-works/pi-tui/dist/components/image.d.ts.map +1 -1
  946. package/node_modules/@earendil-works/pi-tui/dist/components/image.js +0 -8
  947. package/node_modules/@earendil-works/pi-tui/dist/components/image.js.map +1 -1
  948. package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts.map +1 -1
  949. package/node_modules/@earendil-works/pi-tui/dist/components/input.js +14 -14
  950. package/node_modules/@earendil-works/pi-tui/dist/components/input.js.map +1 -1
  951. package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts +5 -0
  952. package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts.map +1 -1
  953. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js +29 -17
  954. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js.map +1 -1
  955. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
  956. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js +0 -11
  957. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
  958. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts.map +1 -1
  959. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js +4 -9
  960. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js.map +1 -1
  961. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  962. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js +4 -12
  963. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js.map +1 -1
  964. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.d.ts.map +1 -1
  965. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.js +0 -1
  966. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.js.map +1 -1
  967. package/node_modules/@earendil-works/pi-tui/dist/components/text.d.ts.map +1 -1
  968. package/node_modules/@earendil-works/pi-tui/dist/components/text.js +0 -8
  969. package/node_modules/@earendil-works/pi-tui/dist/components/text.js.map +1 -1
  970. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.d.ts.map +1 -1
  971. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.js +0 -3
  972. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.js.map +1 -1
  973. package/node_modules/@earendil-works/pi-tui/dist/editor-component.d.ts.map +1 -1
  974. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.d.ts.map +1 -1
  975. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js +131 -61
  976. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js.map +1 -1
  977. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
  978. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
  979. package/node_modules/@earendil-works/pi-tui/dist/index.js +1 -1
  980. package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
  981. package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts.map +1 -1
  982. package/node_modules/@earendil-works/pi-tui/dist/keybindings.js +2 -4
  983. package/node_modules/@earendil-works/pi-tui/dist/keybindings.js.map +1 -1
  984. package/node_modules/@earendil-works/pi-tui/dist/keys.d.ts.map +1 -1
  985. package/node_modules/@earendil-works/pi-tui/dist/keys.js.map +1 -1
  986. package/node_modules/@earendil-works/pi-tui/dist/kill-ring.d.ts.map +1 -1
  987. package/node_modules/@earendil-works/pi-tui/dist/kill-ring.js +3 -1
  988. package/node_modules/@earendil-works/pi-tui/dist/kill-ring.js.map +1 -1
  989. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts.map +1 -1
  990. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -1
  991. package/node_modules/@earendil-works/pi-tui/dist/slash-command-autocomplete.d.ts.map +1 -1
  992. package/node_modules/@earendil-works/pi-tui/dist/slash-command-autocomplete.js.map +1 -1
  993. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  994. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js +4 -6
  995. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js.map +1 -1
  996. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts +0 -1
  997. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
  998. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +4 -7
  999. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
  1000. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +4 -7
  1001. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  1002. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +60 -103
  1003. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  1004. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  1005. package/node_modules/@earendil-works/pi-tui/dist/tui.js +39 -31
  1006. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  1007. package/node_modules/@earendil-works/pi-tui/dist/undo-stack.d.ts.map +1 -1
  1008. package/node_modules/@earendil-works/pi-tui/dist/undo-stack.js +3 -1
  1009. package/node_modules/@earendil-works/pi-tui/dist/undo-stack.js.map +1 -1
  1010. package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts +0 -4
  1011. package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts.map +1 -1
  1012. package/node_modules/@earendil-works/pi-tui/dist/utils.js +57 -33
  1013. package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
  1014. package/node_modules/@earendil-works/pi-tui/dist/word-navigation.d.ts.map +1 -1
  1015. package/node_modules/@earendil-works/pi-tui/dist/word-navigation.js.map +1 -1
  1016. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  1017. package/node_modules/@types/node/README.md +3 -3
  1018. package/node_modules/@types/node/assert/strict.d.ts +3 -55
  1019. package/node_modules/@types/node/assert.d.ts +49 -177
  1020. package/node_modules/@types/node/async_hooks.d.ts +151 -43
  1021. package/node_modules/@types/node/buffer.buffer.d.ts +2 -8
  1022. package/node_modules/@types/node/buffer.d.ts +43 -212
  1023. package/node_modules/@types/node/child_process.d.ts +23 -133
  1024. package/node_modules/@types/node/cluster.d.ts +238 -384
  1025. package/node_modules/@types/node/compatibility/iterators.d.ts +1 -0
  1026. package/node_modules/@types/node/console.d.ts +45 -404
  1027. package/node_modules/@types/node/constants.d.ts +3 -10
  1028. package/node_modules/@types/node/crypto.d.ts +640 -1127
  1029. package/node_modules/@types/node/dgram.d.ts +14 -77
  1030. package/node_modules/@types/node/diagnostics_channel.d.ts +3 -29
  1031. package/node_modules/@types/node/dns/promises.d.ts +4 -10
  1032. package/node_modules/@types/node/dns.d.ts +130 -177
  1033. package/node_modules/@types/node/domain.d.ts +12 -32
  1034. package/node_modules/@types/node/events.d.ts +872 -840
  1035. package/node_modules/@types/node/fs/promises.d.ts +193 -20
  1036. package/node_modules/@types/node/fs.d.ts +754 -435
  1037. package/node_modules/@types/node/globals.d.ts +8 -30
  1038. package/node_modules/@types/node/globals.typedarray.d.ts +63 -0
  1039. package/node_modules/@types/node/http.d.ts +363 -305
  1040. package/node_modules/@types/node/http2.d.ts +545 -781
  1041. package/node_modules/@types/node/https.d.ts +64 -243
  1042. package/node_modules/@types/node/index.d.ts +26 -6
  1043. package/node_modules/@types/node/inspector/promises.d.ts +35 -0
  1044. package/node_modules/@types/node/inspector.d.ts +68 -57
  1045. package/node_modules/@types/node/inspector.generated.d.ts +764 -410
  1046. package/node_modules/@types/node/module.d.ts +53 -189
  1047. package/node_modules/@types/node/net.d.ts +101 -207
  1048. package/node_modules/@types/node/os.d.ts +11 -19
  1049. package/node_modules/@types/node/package.json +13 -3
  1050. package/node_modules/@types/node/path/posix.d.ts +8 -0
  1051. package/node_modules/@types/node/path/win32.d.ts +8 -0
  1052. package/node_modules/@types/node/path.d.ts +119 -141
  1053. package/node_modules/@types/node/perf_hooks.d.ts +317 -673
  1054. package/node_modules/@types/node/process.d.ts +277 -157
  1055. package/node_modules/@types/node/punycode.d.ts +3 -31
  1056. package/node_modules/@types/node/querystring.d.ts +3 -16
  1057. package/node_modules/@types/node/quic.d.ts +897 -0
  1058. package/node_modules/@types/node/readline/promises.d.ts +3 -6
  1059. package/node_modules/@types/node/readline.d.ts +65 -152
  1060. package/node_modules/@types/node/repl.d.ts +101 -109
  1061. package/node_modules/@types/node/sea.d.ts +9 -115
  1062. package/node_modules/@types/node/sqlite.d.ts +415 -68
  1063. package/node_modules/@types/node/stream/consumers.d.ts +91 -15
  1064. package/node_modules/@types/node/stream/iter.d.ts +301 -0
  1065. package/node_modules/@types/node/stream/promises.d.ts +136 -15
  1066. package/node_modules/@types/node/stream/web.d.ts +179 -501
  1067. package/node_modules/@types/node/stream.d.ts +577 -490
  1068. package/node_modules/@types/node/string_decoder.d.ts +3 -43
  1069. package/node_modules/@types/node/test/reporters.d.ts +59 -0
  1070. package/node_modules/@types/node/test.d.ts +402 -286
  1071. package/node_modules/@types/node/timers/promises.d.ts +3 -18
  1072. package/node_modules/@types/node/timers.d.ts +3 -141
  1073. package/node_modules/@types/node/tls.d.ts +115 -241
  1074. package/node_modules/@types/node/trace_events.d.ts +3 -97
  1075. package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +2 -8
  1076. package/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  1077. package/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +2 -0
  1078. package/node_modules/@types/node/ts5.6/index.d.ts +28 -6
  1079. package/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  1080. package/node_modules/@types/node/ts5.7/index.d.ts +119 -0
  1081. package/node_modules/@types/node/tty.d.ts +57 -40
  1082. package/node_modules/@types/node/url.d.ts +156 -584
  1083. package/node_modules/@types/node/util/types.d.ts +558 -0
  1084. package/node_modules/@types/node/util.d.ts +167 -1096
  1085. package/node_modules/@types/node/v8.d.ts +75 -15
  1086. package/node_modules/@types/node/vm.d.ts +334 -198
  1087. package/node_modules/@types/node/wasi.d.ts +24 -74
  1088. package/node_modules/@types/node/web-globals/abortcontroller.d.ts +27 -2
  1089. package/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  1090. package/node_modules/@types/node/web-globals/console.d.ts +9 -0
  1091. package/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  1092. package/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  1093. package/node_modules/@types/node/web-globals/events.d.ts +9 -0
  1094. package/node_modules/@types/node/web-globals/fetch.d.ts +14 -0
  1095. package/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  1096. package/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  1097. package/node_modules/@types/node/web-globals/navigator.d.ts +3 -0
  1098. package/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  1099. package/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  1100. package/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  1101. package/node_modules/@types/node/web-globals/url.d.ts +24 -0
  1102. package/node_modules/@types/node/worker_threads.d.ts +280 -393
  1103. package/node_modules/@types/node/zlib/iter.d.ts +131 -0
  1104. package/node_modules/@types/node/zlib.d.ts +7 -165
  1105. package/node_modules/undici-types/agent.d.ts +13 -12
  1106. package/node_modules/undici-types/api.d.ts +26 -26
  1107. package/node_modules/undici-types/balanced-pool.d.ts +13 -12
  1108. package/node_modules/undici-types/cache-interceptor.d.ts +179 -0
  1109. package/node_modules/undici-types/client-stats.d.ts +15 -0
  1110. package/node_modules/undici-types/client.d.ts +34 -19
  1111. package/node_modules/undici-types/connector.d.ts +4 -2
  1112. package/node_modules/undici-types/cookies.d.ts +2 -0
  1113. package/node_modules/undici-types/diagnostics-channel.d.ts +18 -10
  1114. package/node_modules/undici-types/dispatcher.d.ts +127 -104
  1115. package/node_modules/undici-types/env-http-proxy-agent.d.ts +4 -3
  1116. package/node_modules/undici-types/errors.d.ts +82 -54
  1117. package/node_modules/undici-types/eventsource.d.ts +9 -4
  1118. package/node_modules/undici-types/fetch.d.ts +22 -20
  1119. package/node_modules/undici-types/formdata.d.ts +7 -7
  1120. package/node_modules/undici-types/global-dispatcher.d.ts +4 -4
  1121. package/node_modules/undici-types/global-origin.d.ts +5 -5
  1122. package/node_modules/undici-types/h2c-client.d.ts +73 -0
  1123. package/node_modules/undici-types/handlers.d.ts +8 -8
  1124. package/node_modules/undici-types/header.d.ts +157 -1
  1125. package/node_modules/undici-types/index.d.ts +67 -47
  1126. package/node_modules/undici-types/interceptors.d.ts +71 -8
  1127. package/node_modules/undici-types/mock-agent.d.ts +36 -18
  1128. package/node_modules/undici-types/mock-call-history.d.ts +111 -0
  1129. package/node_modules/undici-types/mock-client.d.ts +6 -4
  1130. package/node_modules/undici-types/mock-errors.d.ts +3 -3
  1131. package/node_modules/undici-types/mock-interceptor.d.ts +21 -20
  1132. package/node_modules/undici-types/mock-pool.d.ts +6 -4
  1133. package/node_modules/undici-types/package.json +1 -1
  1134. package/node_modules/undici-types/patch.d.ts +0 -4
  1135. package/node_modules/undici-types/pool-stats.d.ts +8 -8
  1136. package/node_modules/undici-types/pool.d.ts +15 -13
  1137. package/node_modules/undici-types/proxy-agent.d.ts +5 -4
  1138. package/node_modules/undici-types/readable.d.ts +19 -16
  1139. package/node_modules/undici-types/retry-agent.d.ts +1 -1
  1140. package/node_modules/undici-types/retry-handler.d.ts +19 -10
  1141. package/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  1142. package/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  1143. package/node_modules/undici-types/socks5-proxy-agent.d.ts +25 -0
  1144. package/node_modules/undici-types/util.d.ts +3 -3
  1145. package/node_modules/undici-types/utility.d.ts +7 -0
  1146. package/node_modules/undici-types/webidl.d.ts +148 -29
  1147. package/node_modules/undici-types/websocket.d.ts +48 -10
  1148. package/npm-shrinkwrap.json +21 -21
  1149. package/package.json +13 -12
  1150. package/dist/core/extensions/builtin/compaction/overflow-detection.d.ts +0 -11
  1151. package/dist/core/extensions/builtin/compaction/overflow-detection.d.ts.map +0 -1
  1152. package/dist/core/extensions/builtin/compaction/overflow-detection.js +0 -40
  1153. package/dist/core/extensions/builtin/compaction/overflow-detection.js.map +0 -1
  1154. package/dist/core/extensions/builtin/system-messages.d.ts +0 -47
  1155. package/dist/core/extensions/builtin/system-messages.d.ts.map +0 -1
  1156. package/dist/core/extensions/builtin/system-messages.js +0 -117
  1157. package/dist/core/extensions/builtin/system-messages.js.map +0 -1
  1158. package/dist/core/extensions/builtin/todotools/continuation/config.d.ts +0 -10
  1159. package/dist/core/extensions/builtin/todotools/continuation/config.d.ts.map +0 -1
  1160. package/dist/core/extensions/builtin/todotools/continuation/config.js +0 -33
  1161. package/dist/core/extensions/builtin/todotools/continuation/config.js.map +0 -1
  1162. package/dist/core/extensions/builtin/todotools/continuation/index.d.ts +0 -2
  1163. package/dist/core/extensions/builtin/todotools/continuation/index.d.ts.map +0 -1
  1164. package/dist/core/extensions/builtin/todotools/continuation/index.js +0 -2
  1165. package/dist/core/extensions/builtin/todotools/continuation/index.js.map +0 -1
  1166. package/dist/core/extensions/builtin/todotools/continuation/prompt.d.ts +0 -5
  1167. package/dist/core/extensions/builtin/todotools/continuation/prompt.d.ts.map +0 -1
  1168. package/dist/core/extensions/builtin/todotools/continuation/prompt.js +0 -34
  1169. package/dist/core/extensions/builtin/todotools/continuation/prompt.js.map +0 -1
  1170. package/dist/core/extensions/builtin/todotools/continuation/runtime.d.ts +0 -11
  1171. package/dist/core/extensions/builtin/todotools/continuation/runtime.d.ts.map +0 -1
  1172. package/dist/core/extensions/builtin/todotools/continuation/runtime.js +0 -201
  1173. package/dist/core/extensions/builtin/todotools/continuation/runtime.js.map +0 -1
  1174. package/dist/core/extensions/builtin/todotools/settings.d.ts +0 -6
  1175. package/dist/core/extensions/builtin/todotools/settings.d.ts.map +0 -1
  1176. package/dist/core/extensions/builtin/todotools/settings.js +0 -58
  1177. package/dist/core/extensions/builtin/todotools/settings.js.map +0 -1
  1178. package/dist/core/extensions/builtin/todotools/system-messages.d.ts +0 -34
  1179. package/dist/core/extensions/builtin/todotools/system-messages.d.ts.map +0 -1
  1180. package/dist/core/extensions/builtin/todotools/system-messages.js +0 -82
  1181. package/dist/core/extensions/builtin/todotools/system-messages.js.map +0 -1
  1182. package/dist/core/index.d.ts +0 -12
  1183. package/dist/core/index.d.ts.map +0 -1
  1184. package/dist/core/index.js +0 -12
  1185. package/dist/core/index.js.map +0 -1
  1186. package/node_modules/@types/node/compatibility/disposable.d.ts +0 -14
  1187. package/node_modules/@types/node/compatibility/index.d.ts +0 -9
  1188. package/node_modules/@types/node/compatibility/indexable.d.ts +0 -20
  1189. package/node_modules/undici-types/file.d.ts +0 -39
  1190. package/node_modules/undici-types/filereader.d.ts +0 -54
@@ -1 +1 @@
1
- {"version":3,"file":"per-turn-cap.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/per-turn-cap.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;AAO1B,MAAM,UAAU,iBAAiB,CAAC,KAA+B,EAA4B;IAC5F,OAAO;QACN,GAAG,KAAK;QACR,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,GAAG,CAAC;QAC5C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,GAAG,CAAC;KAC5C,CAAC;AAAA,CACF;AAED,MAAM,UAAU,aAAa,CAAC,KAA+B,EAAW;IACvE,OAAO,KAAK,CAAC,gBAAgB,IAAI,OAAO,CAAC;AAAA,CACzC;AAED,MAAM,UAAU,aAAa,CAAC,KAA+B,EAAW;IACvE,OAAO,KAAK,CAAC,gBAAgB,IAAI,OAAO,CAAC;AAAA,CACzC;AAED,MAAM,UAAU,iBAAiB,CAChC,KAA+B,EAC/B,IAA+B,EACT;IACtB,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,KAAK,IAAI,IAAI,IAAI,EAAE,MAAM,KAAK,QAAQ,IAAI,IAAI,EAAE,MAAM,KAAK,WAAW,CAAC;IAClG,IAAI,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAAA,CACzB","sourcesContent":["import type { CompactionReason } from \"../../types.ts\";\nimport type { CompactionExtensionState } from \"./state.ts\";\n\nexport const softCap = 3;\nexport const hardCap = 10;\n\nexport interface ShouldRejectByCapOptions {\n\tmanual?: boolean;\n\treason?: CompactionReason;\n}\n\nexport function incrementAccepted(state: CompactionExtensionState): CompactionExtensionState {\n\treturn {\n\t\t...state,\n\t\tacceptedThisTurn: state.acceptedThisTurn + 1,\n\t\tacceptedAbsolute: state.acceptedAbsolute + 1,\n\t};\n}\n\nexport function isOverSoftCap(state: CompactionExtensionState): boolean {\n\treturn state.acceptedThisTurn >= softCap;\n}\n\nexport function isOverHardCap(state: CompactionExtensionState): boolean {\n\treturn state.acceptedAbsolute >= hardCap;\n}\n\nexport function shouldRejectByCap(\n\tstate: CompactionExtensionState,\n\topts?: ShouldRejectByCapOptions,\n): { cancel: boolean } {\n\tconst bypass = opts?.manual === true || opts?.reason === \"manual\" || opts?.reason === \"extension\";\n\tif (bypass) {\n\t\treturn { cancel: isOverHardCap(state) };\n\t}\n\tif (isOverSoftCap(state)) {\n\t\treturn { cancel: true };\n\t}\n\treturn { cancel: false };\n}\n"]}
1
+ {"version":3,"file":"per-turn-cap.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/per-turn-cap.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;AAO1B,MAAM,UAAU,iBAAiB,CAAC,KAA+B;IAChE,OAAO;QACN,GAAG,KAAK;QACR,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,GAAG,CAAC;QAC5C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,GAAG,CAAC;KAC5C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAA+B;IAC5D,OAAO,KAAK,CAAC,gBAAgB,IAAI,OAAO,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAA+B;IAC5D,OAAO,KAAK,CAAC,gBAAgB,IAAI,OAAO,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAChC,KAA+B,EAC/B,IAA+B;IAE/B,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,KAAK,IAAI,IAAI,IAAI,EAAE,MAAM,KAAK,QAAQ,IAAI,IAAI,EAAE,MAAM,KAAK,WAAW,CAAC;IAClG,IAAI,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC","sourcesContent":["import type { CompactionReason } from \"../../types.ts\";\nimport type { CompactionExtensionState } from \"./state.ts\";\n\nexport const softCap = 3;\nexport const hardCap = 10;\n\nexport interface ShouldRejectByCapOptions {\n\tmanual?: boolean;\n\treason?: CompactionReason;\n}\n\nexport function incrementAccepted(state: CompactionExtensionState): CompactionExtensionState {\n\treturn {\n\t\t...state,\n\t\tacceptedThisTurn: state.acceptedThisTurn + 1,\n\t\tacceptedAbsolute: state.acceptedAbsolute + 1,\n\t};\n}\n\nexport function isOverSoftCap(state: CompactionExtensionState): boolean {\n\treturn state.acceptedThisTurn >= softCap;\n}\n\nexport function isOverHardCap(state: CompactionExtensionState): boolean {\n\treturn state.acceptedAbsolute >= hardCap;\n}\n\nexport function shouldRejectByCap(\n\tstate: CompactionExtensionState,\n\topts?: ShouldRejectByCapOptions,\n): { cancel: boolean } {\n\tconst bypass = opts?.manual === true || opts?.reason === \"manual\" || opts?.reason === \"extension\";\n\tif (bypass) {\n\t\treturn { cancel: isOverHardCap(state) };\n\t}\n\tif (isOverSoftCap(state)) {\n\t\treturn { cancel: true };\n\t}\n\treturn { cancel: false };\n}\n"]}
@@ -1,9 +1,6 @@
1
1
  import type { CompactionSettings } from "../../../compaction/index.ts";
2
2
  import type { ContextUsage } from "../../types.ts";
3
3
  export declare const SPECULATIVE_FRACTION = 0.75;
4
- export interface CompactionState {
5
- lastFailureAt: number | null;
6
- }
7
4
  export interface CompactionYield {
8
5
  savedTokens: number;
9
6
  tokensBefore: number;
@@ -14,6 +11,4 @@ export declare function computeEffectiveKeepRecentTokens(setting: number, contex
14
11
  export declare function shouldStartSpeculativeCompaction(usage: ContextUsage, contextWindow: number, settings: CompactionSettings, lastYield?: CompactionYield): boolean;
15
12
  export declare function isAtHardLimit(usage: ContextUsage, contextWindow: number, reserveTokens: number, additionalTokens?: number): boolean;
16
13
  export declare function shouldTriggerCompaction(usage: ContextUsage, contextWindow: number, settings: CompactionSettings, lastYield?: CompactionYield): boolean;
17
- export declare const cooldownMs = 60000;
18
- export declare function isInCooldown(state: CompactionState, now: number): boolean;
19
14
  //# 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,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,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;AAED,eAAO,MAAM,UAAU,QAAQ,CAAC;AAEhC,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzE","sourcesContent":["import type { CompactionSettings } from \"../../../compaction/index.ts\";\nimport type { ContextUsage } from \"../../types.ts\";\n\nconst MIN_ADAPTIVE_THRESHOLD_RATIO = 0.4;\nconst MAX_ADAPTIVE_THRESHOLD_RATIO = 0.7;\nconst HIGH_YIELD_SAVING_RATIO = 0.5;\nconst LOW_YIELD_SAVING_RATIO = 0.1;\nconst YIELD_ADJUSTMENT_RATIO = 0.05;\nconst MIN_EFFECTIVE_KEEP_RECENT_TOKENS = 1024;\n\nexport const SPECULATIVE_FRACTION = 0.75;\n\nexport interface CompactionState {\n\tlastFailureAt: number | null;\n}\n\nexport interface CompactionYield {\n\tsavedTokens: number;\n\ttokensBefore: number;\n}\n\nfunction clampThresholdRatio(ratio: number): number {\n\treturn Math.min(MAX_ADAPTIVE_THRESHOLD_RATIO, Math.max(MIN_ADAPTIVE_THRESHOLD_RATIO, ratio));\n}\n\nfunction adjustThresholdRatio(ratio: number, savedTokens: number, tokensBefore: number): number {\n\tif (tokensBefore <= 0) {\n\t\treturn ratio;\n\t}\n\n\tconst savedRatio = savedTokens / tokensBefore;\n\tif (savedRatio > HIGH_YIELD_SAVING_RATIO) {\n\t\treturn clampThresholdRatio(ratio - YIELD_ADJUSTMENT_RATIO);\n\t}\n\tif (savedRatio < LOW_YIELD_SAVING_RATIO) {\n\t\treturn clampThresholdRatio(ratio + YIELD_ADJUSTMENT_RATIO);\n\t}\n\treturn ratio;\n}\n\nfunction adjustEffectiveThresholdRatio(ratio: number, savedTokens: number, tokensBefore: number): number {\n\tif (tokensBefore <= 0) {\n\t\treturn ratio;\n\t}\n\n\tconst savedRatio = savedTokens / tokensBefore;\n\tif (savedRatio > HIGH_YIELD_SAVING_RATIO) {\n\t\treturn ratio - YIELD_ADJUSTMENT_RATIO;\n\t}\n\tif (savedRatio < LOW_YIELD_SAVING_RATIO) {\n\t\treturn ratio + YIELD_ADJUSTMENT_RATIO;\n\t}\n\treturn ratio;\n}\n\nexport function computeAdaptiveThresholdRatio(contextWindow: number, priorCompactionSavedTokens?: number): number {\n\tlet ratio: number;\n\tif (!(contextWindow > 0)) {\n\t\tratio = 0.5;\n\t} else if (contextWindow <= 16_000) {\n\t\tratio = 0.45;\n\t} else if (contextWindow <= 32_000) {\n\t\tratio = 0.5;\n\t} else if (contextWindow <= 64_000) {\n\t\tratio = 0.55;\n\t} else if (contextWindow <= 128_000) {\n\t\tratio = 0.6;\n\t} else {\n\t\tratio = 0.65;\n\t}\n\n\tif (priorCompactionSavedTokens === undefined) {\n\t\treturn ratio;\n\t}\n\n\treturn adjustThresholdRatio(ratio, priorCompactionSavedTokens, contextWindow);\n}\n\nexport function computeEffectiveThreshold(contextWindow: number, lastYield?: CompactionYield | number): number {\n\tif (typeof lastYield === \"number\") {\n\t\treturn Math.max(contextWindow, lastYield);\n\t}\n\n\tlet ratio = computeAdaptiveThresholdRatio(contextWindow);\n\tif (lastYield) {\n\t\tratio = adjustEffectiveThresholdRatio(ratio, lastYield.savedTokens, lastYield.tokensBefore);\n\t}\n\treturn clampThresholdRatio(ratio);\n}\n\nexport function computeEffectiveKeepRecentTokens(\n\tsetting: number,\n\tcontextWindow: number,\n\tthresholdRatio: number,\n\tmargin = 0.05,\n): number {\n\tconst capped = Math.floor(contextWindow * (1 - thresholdRatio - margin));\n\treturn Math.min(setting, Math.max(MIN_EFFECTIVE_KEEP_RECENT_TOKENS, capped));\n}\n\nexport function shouldStartSpeculativeCompaction(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\tsettings: CompactionSettings,\n\tlastYield?: CompactionYield,\n): boolean {\n\tif (settings.speculativeEnabled === false || usage.tokens === null || contextWindow <= 0) {\n\t\treturn false;\n\t}\n\n\tconst fraction = settings.speculativeFraction ?? SPECULATIVE_FRACTION;\n\treturn usage.tokens >= contextWindow * computeEffectiveThreshold(contextWindow, lastYield) * fraction;\n}\n\nexport function isAtHardLimit(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\treserveTokens: number,\n\tadditionalTokens = 0,\n): boolean {\n\treturn usage.tokens !== null && usage.tokens + additionalTokens + reserveTokens >= contextWindow;\n}\n\nexport function shouldTriggerCompaction(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\tsettings: CompactionSettings,\n\tlastYield?: CompactionYield,\n): boolean {\n\tif (!settings.enabled || usage.tokens === null || contextWindow <= 0) {\n\t\treturn false;\n\t}\n\n\treturn usage.tokens >= contextWindow * computeEffectiveThreshold(contextWindow, lastYield);\n}\n\nexport const cooldownMs = 60000;\n\nexport function isInCooldown(state: CompactionState, now: number): boolean {\n\treturn state.lastFailureAt !== null && now - state.lastFailureAt < cooldownMs;\n}\n"]}
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"}
@@ -89,8 +89,4 @@ export function shouldTriggerCompaction(usage, contextWindow, settings, lastYiel
89
89
  }
90
90
  return usage.tokens >= contextWindow * computeEffectiveThreshold(contextWindow, lastYield);
91
91
  }
92
- export const cooldownMs = 60000;
93
- export function isInCooldown(state, now) {
94
- return state.lastFailureAt !== null && now - state.lastFailureAt < cooldownMs;
95
- }
96
92
  //# sourceMappingURL=policy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/policy.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CompactionSettings } from \"../../../compaction/index.ts\";\nimport type { ContextUsage } from \"../../types.ts\";\n\nconst MIN_ADAPTIVE_THRESHOLD_RATIO = 0.4;\nconst MAX_ADAPTIVE_THRESHOLD_RATIO = 0.7;\nconst HIGH_YIELD_SAVING_RATIO = 0.5;\nconst LOW_YIELD_SAVING_RATIO = 0.1;\nconst YIELD_ADJUSTMENT_RATIO = 0.05;\nconst MIN_EFFECTIVE_KEEP_RECENT_TOKENS = 1024;\n\nexport const SPECULATIVE_FRACTION = 0.75;\n\nexport interface CompactionState {\n\tlastFailureAt: number | null;\n}\n\nexport interface CompactionYield {\n\tsavedTokens: number;\n\ttokensBefore: number;\n}\n\nfunction clampThresholdRatio(ratio: number): number {\n\treturn Math.min(MAX_ADAPTIVE_THRESHOLD_RATIO, Math.max(MIN_ADAPTIVE_THRESHOLD_RATIO, ratio));\n}\n\nfunction adjustThresholdRatio(ratio: number, savedTokens: number, tokensBefore: number): number {\n\tif (tokensBefore <= 0) {\n\t\treturn ratio;\n\t}\n\n\tconst savedRatio = savedTokens / tokensBefore;\n\tif (savedRatio > HIGH_YIELD_SAVING_RATIO) {\n\t\treturn clampThresholdRatio(ratio - YIELD_ADJUSTMENT_RATIO);\n\t}\n\tif (savedRatio < LOW_YIELD_SAVING_RATIO) {\n\t\treturn clampThresholdRatio(ratio + YIELD_ADJUSTMENT_RATIO);\n\t}\n\treturn ratio;\n}\n\nfunction adjustEffectiveThresholdRatio(ratio: number, savedTokens: number, tokensBefore: number): number {\n\tif (tokensBefore <= 0) {\n\t\treturn ratio;\n\t}\n\n\tconst savedRatio = savedTokens / tokensBefore;\n\tif (savedRatio > HIGH_YIELD_SAVING_RATIO) {\n\t\treturn ratio - YIELD_ADJUSTMENT_RATIO;\n\t}\n\tif (savedRatio < LOW_YIELD_SAVING_RATIO) {\n\t\treturn ratio + YIELD_ADJUSTMENT_RATIO;\n\t}\n\treturn ratio;\n}\n\nexport function computeAdaptiveThresholdRatio(contextWindow: number, priorCompactionSavedTokens?: number): number {\n\tlet ratio: number;\n\tif (!(contextWindow > 0)) {\n\t\tratio = 0.5;\n\t} else if (contextWindow <= 16_000) {\n\t\tratio = 0.45;\n\t} else if (contextWindow <= 32_000) {\n\t\tratio = 0.5;\n\t} else if (contextWindow <= 64_000) {\n\t\tratio = 0.55;\n\t} else if (contextWindow <= 128_000) {\n\t\tratio = 0.6;\n\t} else {\n\t\tratio = 0.65;\n\t}\n\n\tif (priorCompactionSavedTokens === undefined) {\n\t\treturn ratio;\n\t}\n\n\treturn adjustThresholdRatio(ratio, priorCompactionSavedTokens, contextWindow);\n}\n\nexport function computeEffectiveThreshold(contextWindow: number, lastYield?: CompactionYield | number): number {\n\tif (typeof lastYield === \"number\") {\n\t\treturn Math.max(contextWindow, lastYield);\n\t}\n\n\tlet ratio = computeAdaptiveThresholdRatio(contextWindow);\n\tif (lastYield) {\n\t\tratio = adjustEffectiveThresholdRatio(ratio, lastYield.savedTokens, lastYield.tokensBefore);\n\t}\n\treturn clampThresholdRatio(ratio);\n}\n\nexport function computeEffectiveKeepRecentTokens(\n\tsetting: number,\n\tcontextWindow: number,\n\tthresholdRatio: number,\n\tmargin = 0.05,\n): number {\n\tconst capped = Math.floor(contextWindow * (1 - thresholdRatio - margin));\n\treturn Math.min(setting, Math.max(MIN_EFFECTIVE_KEEP_RECENT_TOKENS, capped));\n}\n\nexport function shouldStartSpeculativeCompaction(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\tsettings: CompactionSettings,\n\tlastYield?: CompactionYield,\n): boolean {\n\tif (settings.speculativeEnabled === false || usage.tokens === null || contextWindow <= 0) {\n\t\treturn false;\n\t}\n\n\tconst fraction = settings.speculativeFraction ?? SPECULATIVE_FRACTION;\n\treturn usage.tokens >= contextWindow * computeEffectiveThreshold(contextWindow, lastYield) * fraction;\n}\n\nexport function isAtHardLimit(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\treserveTokens: number,\n\tadditionalTokens = 0,\n): boolean {\n\treturn usage.tokens !== null && usage.tokens + additionalTokens + reserveTokens >= contextWindow;\n}\n\nexport function shouldTriggerCompaction(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\tsettings: CompactionSettings,\n\tlastYield?: CompactionYield,\n): boolean {\n\tif (!settings.enabled || usage.tokens === null || contextWindow <= 0) {\n\t\treturn false;\n\t}\n\n\treturn usage.tokens >= contextWindow * computeEffectiveThreshold(contextWindow, lastYield);\n}\n\nexport const cooldownMs = 60000;\n\nexport function isInCooldown(state: CompactionState, now: number): boolean {\n\treturn state.lastFailureAt !== null && now - state.lastFailureAt < cooldownMs;\n}\n"]}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/policy.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CompactionSettings } from \"../../../compaction/index.ts\";\nimport type { ContextUsage } from \"../../types.ts\";\n\nconst MIN_ADAPTIVE_THRESHOLD_RATIO = 0.4;\nconst MAX_ADAPTIVE_THRESHOLD_RATIO = 0.7;\nconst HIGH_YIELD_SAVING_RATIO = 0.5;\nconst LOW_YIELD_SAVING_RATIO = 0.1;\nconst YIELD_ADJUSTMENT_RATIO = 0.05;\nconst MIN_EFFECTIVE_KEEP_RECENT_TOKENS = 1024;\n\nexport const SPECULATIVE_FRACTION = 0.75;\n\nexport interface CompactionYield {\n\tsavedTokens: number;\n\ttokensBefore: number;\n}\n\nfunction clampThresholdRatio(ratio: number): number {\n\treturn Math.min(MAX_ADAPTIVE_THRESHOLD_RATIO, Math.max(MIN_ADAPTIVE_THRESHOLD_RATIO, ratio));\n}\n\nfunction adjustThresholdRatio(ratio: number, savedTokens: number, tokensBefore: number): number {\n\tif (tokensBefore <= 0) {\n\t\treturn ratio;\n\t}\n\n\tconst savedRatio = savedTokens / tokensBefore;\n\tif (savedRatio > HIGH_YIELD_SAVING_RATIO) {\n\t\treturn clampThresholdRatio(ratio - YIELD_ADJUSTMENT_RATIO);\n\t}\n\tif (savedRatio < LOW_YIELD_SAVING_RATIO) {\n\t\treturn clampThresholdRatio(ratio + YIELD_ADJUSTMENT_RATIO);\n\t}\n\treturn ratio;\n}\n\nfunction adjustEffectiveThresholdRatio(ratio: number, savedTokens: number, tokensBefore: number): number {\n\tif (tokensBefore <= 0) {\n\t\treturn ratio;\n\t}\n\n\tconst savedRatio = savedTokens / tokensBefore;\n\tif (savedRatio > HIGH_YIELD_SAVING_RATIO) {\n\t\treturn ratio - YIELD_ADJUSTMENT_RATIO;\n\t}\n\tif (savedRatio < LOW_YIELD_SAVING_RATIO) {\n\t\treturn ratio + YIELD_ADJUSTMENT_RATIO;\n\t}\n\treturn ratio;\n}\n\nexport function computeAdaptiveThresholdRatio(contextWindow: number, priorCompactionSavedTokens?: number): number {\n\tlet ratio: number;\n\tif (!(contextWindow > 0)) {\n\t\tratio = 0.5;\n\t} else if (contextWindow <= 16_000) {\n\t\tratio = 0.45;\n\t} else if (contextWindow <= 32_000) {\n\t\tratio = 0.5;\n\t} else if (contextWindow <= 64_000) {\n\t\tratio = 0.55;\n\t} else if (contextWindow <= 128_000) {\n\t\tratio = 0.6;\n\t} else {\n\t\tratio = 0.65;\n\t}\n\n\tif (priorCompactionSavedTokens === undefined) {\n\t\treturn ratio;\n\t}\n\n\treturn adjustThresholdRatio(ratio, priorCompactionSavedTokens, contextWindow);\n}\n\nexport function computeEffectiveThreshold(contextWindow: number, lastYield?: CompactionYield | number): number {\n\tif (typeof lastYield === \"number\") {\n\t\treturn Math.max(contextWindow, lastYield);\n\t}\n\n\tlet ratio = computeAdaptiveThresholdRatio(contextWindow);\n\tif (lastYield) {\n\t\tratio = adjustEffectiveThresholdRatio(ratio, lastYield.savedTokens, lastYield.tokensBefore);\n\t}\n\treturn clampThresholdRatio(ratio);\n}\n\nexport function computeEffectiveKeepRecentTokens(\n\tsetting: number,\n\tcontextWindow: number,\n\tthresholdRatio: number,\n\tmargin = 0.05,\n): number {\n\tconst capped = Math.floor(contextWindow * (1 - thresholdRatio - margin));\n\treturn Math.min(setting, Math.max(MIN_EFFECTIVE_KEEP_RECENT_TOKENS, capped));\n}\n\nexport function shouldStartSpeculativeCompaction(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\tsettings: CompactionSettings,\n\tlastYield?: CompactionYield,\n): boolean {\n\tif (settings.speculativeEnabled === false || usage.tokens === null || contextWindow <= 0) {\n\t\treturn false;\n\t}\n\n\tconst fraction = settings.speculativeFraction ?? SPECULATIVE_FRACTION;\n\treturn usage.tokens >= contextWindow * computeEffectiveThreshold(contextWindow, lastYield) * fraction;\n}\n\nexport function isAtHardLimit(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\treserveTokens: number,\n\tadditionalTokens = 0,\n): boolean {\n\treturn usage.tokens !== null && usage.tokens + additionalTokens + reserveTokens >= contextWindow;\n}\n\nexport function shouldTriggerCompaction(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\tsettings: CompactionSettings,\n\tlastYield?: CompactionYield,\n): boolean {\n\tif (!settings.enabled || usage.tokens === null || contextWindow <= 0) {\n\t\treturn false;\n\t}\n\n\treturn usage.tokens >= contextWindow * computeEffectiveThreshold(contextWindow, lastYield);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/prompts.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,6BAA6B,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;AAE5F,MAAM,MAAM,kCAAkC,GAAG;IAChD,OAAO,EAAE,6BAA6B,CAAC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,+BAA+B,+rBAUe,CAAC;AAE5D,eAAO,MAAM,6BAA6B,g8FAoDyC,CAAC;AAEpF,eAAO,MAAM,+BAA+B,2mEAiDuC,CAAC;AAEpF,eAAO,MAAM,+BAA+B,srEA6CuC,CAAC;AAEpF,eAAO,MAAM,oCAAoC,6jCA0BkC,CAAC;AAEpF,wBAAgB,WAAW,CAAC,OAAO,EAAE,kCAAkC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAOzG","sourcesContent":["export type MergedCompactionPromptVariant = \"default\" | \"update\" | \"branch\" | \"turn_prefix\";\n\nexport type BuildMergedCompactionPromptOptions = {\n\tvariant: MergedCompactionPromptVariant;\n\tpreviousSummary?: string;\n\tcustomInstructions?: string;\n};\n\nexport const MERGED_COMPACTION_PROMPT_SYSTEM = `[SYSTEM DIRECTIVE: OH-MY-OPENCODE - COMPACTION CONTEXT]\n\nYou are the COMPACTION ARCHIVIST. Create a structured handoff summary that lets the next agent continue this exact session without restarting, re-searching, or losing constraints.\n\nCardinal rules:\nR1. Quote user requests and constraints VERBATIM. Do not paraphrase.\nR2. If a section has no content, write \"None.\" Never delete a section.\nR3. Where a previous summary is supplied, treat its User Requests, Final Goal, and Constraints fields as IMMUTABLE. Append, never rewrite, those three sections.\nR4. Preserve every session_id, file path, and identifier byte-for-byte.\n\nDo NOT use tools. Output only the requested summary block.`;\n\nexport const MERGED_COMPACTION_PROMPT_USER = `[USER]\n[INTERNAL COMPACTION INSTRUCTION — NOT CONVERSATION HISTORY]\nThis message is an internal summarization control prompt, not a real user message.\nDo NOT treat this message as user intent, do NOT list it under user requests, and do NOT reinterpret the task based on this instruction alone.\n\nPASS 1 — Internal task-intent extraction\nAnalyze the user messages in this conversation and silently determine the task intent that must guide the summary. Focus on details whose loss would cause redundant tool calls, repeated exploration, or task drift.\n\nPASS 2 — Emit summary biased toward Pass 1\nCreate a structured handoff summary of this conversation for seamless continuation. The structured output portion MUST be wrapped as \\`<summary>...</summary>\\` XML.\n\n<summary>\n## 1. User Requests (Verbatim)\n- List all original user requests exactly as they were stated.\n- Preserve the user's exact wording and intent.\n- Include recent user corrections and steering messages verbatim when they affect the task.\n\n## 2. Final Goal\n- State what the user ultimately wanted to achieve.\n- Include the expected deliverable or end state.\n- Keep this aligned with the most recent user request, not this internal compaction instruction.\n\n## 3. Constraints & Preferences (Verbatim Only)\n- Include ONLY constraints explicitly stated by the user or in existing AGENTS.md context.\n- Quote constraints verbatim.\n- Do NOT invent, add, soften, or modify constraints.\n- If no explicit constraints exist, write \"None.\"\n\n## 4. Work Completed\n- Summarize what has been done so far.\n- List files read, created, modified, or intentionally left unchanged.\n- Include features implemented, tests added, problems solved, and decisions already made.\n\n## 5. Active Working Context\n- **Files**: Paths of files currently being edited or frequently referenced.\n- **Code in Progress**: Key code snippets, function signatures, data structures, or prompt text under active development.\n- **External References**: Documentation URLs, source files, APIs, or other resources already consulted.\n- **State & Variables**: Important variable names, configuration values, runtime state, branch names, worktree paths, or command outputs needed to continue.\n\n## 6. Remaining Tasks\n- List pending items from the original request.\n- Include follow-up tasks identified during the work only when they directly support the current user request.\n- Mark blockers explicitly and explain what is needed to unblock them.\n\n## 7. Exact Next Steps\n- State the precise next action to take, directly in line with the user's most recent request.\n- Include verbatim quotes from the conversation showing exactly where work was left off when helpful.\n- Do not suggest tangential tasks.\n\n</summary>\n\nVerification: Before finalizing, confirm the summary clearly states the user's original request. If not, restate it verbatim.\nIMPORTANT: Respond with ONLY the <summary>...</summary> block as your text output.`;\n\nexport const MERGED_COMPACTION_PROMPT_UPDATE = `[USER]\n<previous-summary>\n{{previousSummary}}\n</previous-summary>\n\n[INTERNAL COMPACTION UPDATE INSTRUCTION — NOT CONVERSATION HISTORY]\nThe messages above are NEW conversation messages to incorporate into the existing summary provided in <previous-summary> tags.\n\nR3 enforcement: R3. Where a previous summary is supplied, treat its User Requests, Final Goal, and Constraints fields as IMMUTABLE. Append, never rewrite, those three sections.\n\nPASS 1 — Internal task-intent extraction\nAnalyze the new user messages and silently determine which updates are needed without changing immutable prior User Requests, Final Goal, or Constraints.\n\nPASS 2 — Emit summary biased toward Pass 1\nUpdate the structured handoff summary. The structured output portion MUST be wrapped as \\`<summary>...</summary>\\` XML.\n\n<summary>\n## 1. User Requests (Verbatim)\n- Preserve prior entries from <previous-summary> byte-for-byte.\n- Append new user requests exactly as they were stated.\n\n## 2. Final Goal\n- Preserve the existing final goal unless the user explicitly changed it.\n- Append the explicit change verbatim if the goal changed.\n\n## 3. Constraints & Preferences (Verbatim Only)\n- Preserve prior constraints byte-for-byte.\n- Quote constraints verbatim.\n- Do NOT invent, add, soften, or modify constraints.\n- Append only new explicit constraints.\n- If no explicit constraints exist, write \"None.\"\n\n## 4. Work Completed\n- Preserve completed work from the previous summary.\n- Add newly completed work, files changed, tests run, and decisions made.\n\n## 5. Active Working Context\n- Update files, code in progress, external references, state, variables, branch names, worktree paths, and command outputs needed to continue.\n\n## 6. Remaining Tasks\n- Remove tasks only when the new messages prove they are completed or cancelled.\n- Add newly identified direct follow-up tasks.\n\n## 7. Exact Next Steps\n- Update based on current state and the user's most recent request.\n- Keep this direct and immediately actionable.\n\n</summary>\n\nIMPORTANT: Respond with ONLY the <summary>...</summary> block as your text output.`;\n\nexport const MERGED_COMPACTION_PROMPT_BRANCH = `[USER]\n[INTERNAL BRANCH SUMMARY INSTRUCTION — NOT CONVERSATION HISTORY]\nCreate a structured summary of this conversation branch for context when returning later. This is a branch-level handoff, so reorient §2 toward the branched intent and why this branch exists.\n\nPASS 1 — Internal task-intent extraction\nAnalyze this branch and silently determine the branch-specific intent, divergence point, and details whose loss would cause repeated work.\n\nPASS 2 — Emit summary biased toward Pass 1\nCreate a structured branch handoff summary. The structured output portion MUST be wrapped as \\`<summary>...</summary>\\` XML.\n\n<summary>\n## 1. User Requests (Verbatim)\n- List user requests that caused or shaped this branch exactly as they were stated.\n- Preserve the user's exact wording and intent.\n\n## 2. Final Goal\n- State the branched intent: what this branch was trying to accomplish, test, compare, or preserve.\n- Include how this branch differs from the mainline path when known.\n\n## 3. Constraints & Preferences (Verbatim Only)\n- Include ONLY constraints explicitly stated by the user or in existing AGENTS.md context.\n- Quote constraints verbatim.\n- Do NOT invent, add, soften, or modify constraints.\n- If no explicit constraints exist, write \"None.\"\n\n## 4. Work Completed\n- Summarize branch-specific progress.\n- List files read, created, modified, or intentionally left unchanged on this branch.\n\n## 5. Active Working Context\n- **Files**: Paths of files currently edited or frequently referenced in this branch.\n- **Code in Progress**: Key snippets, signatures, data structures, or prompt text under active development.\n- **External References**: Sources already consulted for this branch.\n- **State & Variables**: Branch names, worktree paths, runtime state, command outputs, and identifiers needed to resume.\n\n## 6. Remaining Tasks\n- List branch-specific work still needed.\n- Include blockers and the concrete condition needed to unblock them.\n\n## 7. Exact Next Steps\n- State the precise next action for returning to this branch.\n- Do not suggest tangential tasks.\n\n</summary>\n\nIMPORTANT: Respond with ONLY the <summary>...</summary> block as your text output.`;\n\nexport const MERGED_COMPACTION_PROMPT_TURN_PREFIX = `[USER]\n[INTERNAL TURN-PREFIX SUMMARY INSTRUCTION — NOT CONVERSATION HISTORY]\nCreate a compact prefix summary for the next turn. Emit only the sections listed below.\n\nPASS 1 — Internal task-intent extraction\nSilently determine the current task intent and the minimum context needed for the next turn.\n\nPASS 2 — Emit summary biased toward Pass 1\nThe structured output portion MUST be wrapped as \\`<summary>...</summary>\\` XML.\n\n<summary>\n## 1. User Requests (Verbatim)\n- Quote the active user request and any steering constraints exactly as stated.\n\n## 2. Final Goal\n- State the immediate end state needed for the next turn.\n\n## 3. Constraints & Preferences (Verbatim Only)\n- Quote constraints verbatim.\n- Do NOT invent, add, soften, or modify constraints.\n- If no explicit constraints exist, write \"None.\"\n\n## 5. Active Working Context\n- Include only files, identifiers, runtime state, and exact next-turn context needed to continue immediately.\n</summary>\n\nIMPORTANT: Respond with ONLY the <summary>...</summary> block as your text output.`;\n\nexport function buildPrompt(options: BuildMergedCompactionPromptOptions): { system: string; user: string } {\n\tconst user = buildUserPrompt(options);\n\n\treturn {\n\t\tsystem: MERGED_COMPACTION_PROMPT_SYSTEM,\n\t\tuser: appendCustomInstructions(user, options.customInstructions),\n\t};\n}\n\nfunction buildUserPrompt(options: BuildMergedCompactionPromptOptions): string {\n\tswitch (options.variant) {\n\t\tcase \"default\":\n\t\t\treturn MERGED_COMPACTION_PROMPT_USER;\n\t\tcase \"update\":\n\t\t\treturn MERGED_COMPACTION_PROMPT_UPDATE.replace(\n\t\t\t\t\"{{previousSummary}}\",\n\t\t\t\tsanitizePreviousSummary(options.previousSummary),\n\t\t\t);\n\t\tcase \"branch\":\n\t\t\treturn MERGED_COMPACTION_PROMPT_BRANCH;\n\t\tcase \"turn_prefix\":\n\t\t\treturn MERGED_COMPACTION_PROMPT_TURN_PREFIX;\n\t}\n\n\tconst exhaustiveCheck: never = options.variant;\n\treturn exhaustiveCheck;\n}\n\nfunction appendCustomInstructions(userPrompt: string, customInstructions: string | undefined): string {\n\tconst trimmedInstructions = customInstructions?.trim();\n\tif (!trimmedInstructions) {\n\t\treturn userPrompt;\n\t}\n\n\treturn `${userPrompt}\n\n<custom-instructions>\n${sanitizeCustomInstructions(trimmedInstructions)}\n</custom-instructions>`;\n}\n\nfunction sanitizePreviousSummary(previousSummary: string | undefined): string {\n\tconst trimmedSummary = previousSummary?.trim();\n\tif (!trimmedSummary) {\n\t\treturn \"None.\";\n\t}\n\n\treturn trimmedSummary.split(\"</previous-summary>\").join(\"[/previous-summary]\");\n}\n\nfunction sanitizeCustomInstructions(customInstructions: string): string {\n\treturn customInstructions.split(\"</custom-instructions>\").join(\"[/custom-instructions]\");\n}\n"]}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/prompts.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,6BAA6B,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;AAE5F,MAAM,MAAM,kCAAkC,GAAG;IAChD,OAAO,EAAE,6BAA6B,CAAC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,+BAA+B,+rBAUe,CAAC;AAE5D,eAAO,MAAM,6BAA6B,g8FAoDyC,CAAC;AAEpF,eAAO,MAAM,+BAA+B,2mEAiDuC,CAAC;AAEpF,eAAO,MAAM,+BAA+B,srEA6CuC,CAAC;AAEpF,eAAO,MAAM,oCAAoC,6jCA0BkC,CAAC;AAEpF,wBAAgB,WAAW,CAAC,OAAO,EAAE,kCAAkC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAOzG"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/prompts.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;;;;;;;2DAUY,CAAC;AAE5D,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mFAoDsC,CAAC;AAEpF,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mFAiDoC,CAAC;AAEpF,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mFA6CoC,CAAC;AAEpF,MAAM,CAAC,MAAM,oCAAoC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;mFA0B+B,CAAC;AAEpF,MAAM,UAAU,WAAW,CAAC,OAA2C,EAAoC;IAC1G,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAEtC,OAAO;QACN,MAAM,EAAE,+BAA+B;QACvC,IAAI,EAAE,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC;KAChE,CAAC;AAAA,CACF;AAED,SAAS,eAAe,CAAC,OAA2C,EAAU;IAC7E,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC;QACzB,KAAK,SAAS;YACb,OAAO,6BAA6B,CAAC;QACtC,KAAK,QAAQ;YACZ,OAAO,+BAA+B,CAAC,OAAO,CAC7C,qBAAqB,EACrB,uBAAuB,CAAC,OAAO,CAAC,eAAe,CAAC,CAChD,CAAC;QACH,KAAK,QAAQ;YACZ,OAAO,+BAA+B,CAAC;QACxC,KAAK,aAAa;YACjB,OAAO,oCAAoC,CAAC;IAC9C,CAAC;IAED,MAAM,eAAe,GAAU,OAAO,CAAC,OAAO,CAAC;IAC/C,OAAO,eAAe,CAAC;AAAA,CACvB;AAED,SAAS,wBAAwB,CAAC,UAAkB,EAAE,kBAAsC,EAAU;IACrG,MAAM,mBAAmB,GAAG,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACvD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,UAAU;;;EAGnB,0BAA0B,CAAC,mBAAmB,CAAC;uBAC1B,CAAC;AAAA,CACvB;AAED,SAAS,uBAAuB,CAAC,eAAmC,EAAU;IAC7E,MAAM,cAAc,GAAG,eAAe,EAAE,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,OAAO,cAAc,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAAA,CAC/E;AAED,SAAS,0BAA0B,CAAC,kBAA0B,EAAU;IACvE,OAAO,kBAAkB,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAAA,CACzF","sourcesContent":["export type MergedCompactionPromptVariant = \"default\" | \"update\" | \"branch\" | \"turn_prefix\";\n\nexport type BuildMergedCompactionPromptOptions = {\n\tvariant: MergedCompactionPromptVariant;\n\tpreviousSummary?: string;\n\tcustomInstructions?: string;\n};\n\nexport const MERGED_COMPACTION_PROMPT_SYSTEM = `[SYSTEM DIRECTIVE: OH-MY-OPENCODE - COMPACTION CONTEXT]\n\nYou are the COMPACTION ARCHIVIST. Create a structured handoff summary that lets the next agent continue this exact session without restarting, re-searching, or losing constraints.\n\nCardinal rules:\nR1. Quote user requests and constraints VERBATIM. Do not paraphrase.\nR2. If a section has no content, write \"None.\" Never delete a section.\nR3. Where a previous summary is supplied, treat its User Requests, Final Goal, and Constraints fields as IMMUTABLE. Append, never rewrite, those three sections.\nR4. Preserve every session_id, file path, and identifier byte-for-byte.\n\nDo NOT use tools. Output only the requested summary block.`;\n\nexport const MERGED_COMPACTION_PROMPT_USER = `[USER]\n[INTERNAL COMPACTION INSTRUCTION — NOT CONVERSATION HISTORY]\nThis message is an internal summarization control prompt, not a real user message.\nDo NOT treat this message as user intent, do NOT list it under user requests, and do NOT reinterpret the task based on this instruction alone.\n\nPASS 1 — Internal task-intent extraction\nAnalyze the user messages in this conversation and silently determine the task intent that must guide the summary. Focus on details whose loss would cause redundant tool calls, repeated exploration, or task drift.\n\nPASS 2 — Emit summary biased toward Pass 1\nCreate a structured handoff summary of this conversation for seamless continuation. The structured output portion MUST be wrapped as \\`<summary>...</summary>\\` XML.\n\n<summary>\n## 1. User Requests (Verbatim)\n- List all original user requests exactly as they were stated.\n- Preserve the user's exact wording and intent.\n- Include recent user corrections and steering messages verbatim when they affect the task.\n\n## 2. Final Goal\n- State what the user ultimately wanted to achieve.\n- Include the expected deliverable or end state.\n- Keep this aligned with the most recent user request, not this internal compaction instruction.\n\n## 3. Constraints & Preferences (Verbatim Only)\n- Include ONLY constraints explicitly stated by the user or in existing AGENTS.md context.\n- Quote constraints verbatim.\n- Do NOT invent, add, soften, or modify constraints.\n- If no explicit constraints exist, write \"None.\"\n\n## 4. Work Completed\n- Summarize what has been done so far.\n- List files read, created, modified, or intentionally left unchanged.\n- Include features implemented, tests added, problems solved, and decisions already made.\n\n## 5. Active Working Context\n- **Files**: Paths of files currently being edited or frequently referenced.\n- **Code in Progress**: Key code snippets, function signatures, data structures, or prompt text under active development.\n- **External References**: Documentation URLs, source files, APIs, or other resources already consulted.\n- **State & Variables**: Important variable names, configuration values, runtime state, branch names, worktree paths, or command outputs needed to continue.\n\n## 6. Remaining Tasks\n- List pending items from the original request.\n- Include follow-up tasks identified during the work only when they directly support the current user request.\n- Mark blockers explicitly and explain what is needed to unblock them.\n\n## 7. Exact Next Steps\n- State the precise next action to take, directly in line with the user's most recent request.\n- Include verbatim quotes from the conversation showing exactly where work was left off when helpful.\n- Do not suggest tangential tasks.\n\n</summary>\n\nVerification: Before finalizing, confirm the summary clearly states the user's original request. If not, restate it verbatim.\nIMPORTANT: Respond with ONLY the <summary>...</summary> block as your text output.`;\n\nexport const MERGED_COMPACTION_PROMPT_UPDATE = `[USER]\n<previous-summary>\n{{previousSummary}}\n</previous-summary>\n\n[INTERNAL COMPACTION UPDATE INSTRUCTION — NOT CONVERSATION HISTORY]\nThe messages above are NEW conversation messages to incorporate into the existing summary provided in <previous-summary> tags.\n\nR3 enforcement: R3. Where a previous summary is supplied, treat its User Requests, Final Goal, and Constraints fields as IMMUTABLE. Append, never rewrite, those three sections.\n\nPASS 1 — Internal task-intent extraction\nAnalyze the new user messages and silently determine which updates are needed without changing immutable prior User Requests, Final Goal, or Constraints.\n\nPASS 2 — Emit summary biased toward Pass 1\nUpdate the structured handoff summary. The structured output portion MUST be wrapped as \\`<summary>...</summary>\\` XML.\n\n<summary>\n## 1. User Requests (Verbatim)\n- Preserve prior entries from <previous-summary> byte-for-byte.\n- Append new user requests exactly as they were stated.\n\n## 2. Final Goal\n- Preserve the existing final goal unless the user explicitly changed it.\n- Append the explicit change verbatim if the goal changed.\n\n## 3. Constraints & Preferences (Verbatim Only)\n- Preserve prior constraints byte-for-byte.\n- Quote constraints verbatim.\n- Do NOT invent, add, soften, or modify constraints.\n- Append only new explicit constraints.\n- If no explicit constraints exist, write \"None.\"\n\n## 4. Work Completed\n- Preserve completed work from the previous summary.\n- Add newly completed work, files changed, tests run, and decisions made.\n\n## 5. Active Working Context\n- Update files, code in progress, external references, state, variables, branch names, worktree paths, and command outputs needed to continue.\n\n## 6. Remaining Tasks\n- Remove tasks only when the new messages prove they are completed or cancelled.\n- Add newly identified direct follow-up tasks.\n\n## 7. Exact Next Steps\n- Update based on current state and the user's most recent request.\n- Keep this direct and immediately actionable.\n\n</summary>\n\nIMPORTANT: Respond with ONLY the <summary>...</summary> block as your text output.`;\n\nexport const MERGED_COMPACTION_PROMPT_BRANCH = `[USER]\n[INTERNAL BRANCH SUMMARY INSTRUCTION — NOT CONVERSATION HISTORY]\nCreate a structured summary of this conversation branch for context when returning later. This is a branch-level handoff, so reorient §2 toward the branched intent and why this branch exists.\n\nPASS 1 — Internal task-intent extraction\nAnalyze this branch and silently determine the branch-specific intent, divergence point, and details whose loss would cause repeated work.\n\nPASS 2 — Emit summary biased toward Pass 1\nCreate a structured branch handoff summary. The structured output portion MUST be wrapped as \\`<summary>...</summary>\\` XML.\n\n<summary>\n## 1. User Requests (Verbatim)\n- List user requests that caused or shaped this branch exactly as they were stated.\n- Preserve the user's exact wording and intent.\n\n## 2. Final Goal\n- State the branched intent: what this branch was trying to accomplish, test, compare, or preserve.\n- Include how this branch differs from the mainline path when known.\n\n## 3. Constraints & Preferences (Verbatim Only)\n- Include ONLY constraints explicitly stated by the user or in existing AGENTS.md context.\n- Quote constraints verbatim.\n- Do NOT invent, add, soften, or modify constraints.\n- If no explicit constraints exist, write \"None.\"\n\n## 4. Work Completed\n- Summarize branch-specific progress.\n- List files read, created, modified, or intentionally left unchanged on this branch.\n\n## 5. Active Working Context\n- **Files**: Paths of files currently edited or frequently referenced in this branch.\n- **Code in Progress**: Key snippets, signatures, data structures, or prompt text under active development.\n- **External References**: Sources already consulted for this branch.\n- **State & Variables**: Branch names, worktree paths, runtime state, command outputs, and identifiers needed to resume.\n\n## 6. Remaining Tasks\n- List branch-specific work still needed.\n- Include blockers and the concrete condition needed to unblock them.\n\n## 7. Exact Next Steps\n- State the precise next action for returning to this branch.\n- Do not suggest tangential tasks.\n\n</summary>\n\nIMPORTANT: Respond with ONLY the <summary>...</summary> block as your text output.`;\n\nexport const MERGED_COMPACTION_PROMPT_TURN_PREFIX = `[USER]\n[INTERNAL TURN-PREFIX SUMMARY INSTRUCTION — NOT CONVERSATION HISTORY]\nCreate a compact prefix summary for the next turn. Emit only the sections listed below.\n\nPASS 1 — Internal task-intent extraction\nSilently determine the current task intent and the minimum context needed for the next turn.\n\nPASS 2 — Emit summary biased toward Pass 1\nThe structured output portion MUST be wrapped as \\`<summary>...</summary>\\` XML.\n\n<summary>\n## 1. User Requests (Verbatim)\n- Quote the active user request and any steering constraints exactly as stated.\n\n## 2. Final Goal\n- State the immediate end state needed for the next turn.\n\n## 3. Constraints & Preferences (Verbatim Only)\n- Quote constraints verbatim.\n- Do NOT invent, add, soften, or modify constraints.\n- If no explicit constraints exist, write \"None.\"\n\n## 5. Active Working Context\n- Include only files, identifiers, runtime state, and exact next-turn context needed to continue immediately.\n</summary>\n\nIMPORTANT: Respond with ONLY the <summary>...</summary> block as your text output.`;\n\nexport function buildPrompt(options: BuildMergedCompactionPromptOptions): { system: string; user: string } {\n\tconst user = buildUserPrompt(options);\n\n\treturn {\n\t\tsystem: MERGED_COMPACTION_PROMPT_SYSTEM,\n\t\tuser: appendCustomInstructions(user, options.customInstructions),\n\t};\n}\n\nfunction buildUserPrompt(options: BuildMergedCompactionPromptOptions): string {\n\tswitch (options.variant) {\n\t\tcase \"default\":\n\t\t\treturn MERGED_COMPACTION_PROMPT_USER;\n\t\tcase \"update\":\n\t\t\treturn MERGED_COMPACTION_PROMPT_UPDATE.replace(\n\t\t\t\t\"{{previousSummary}}\",\n\t\t\t\tsanitizePreviousSummary(options.previousSummary),\n\t\t\t);\n\t\tcase \"branch\":\n\t\t\treturn MERGED_COMPACTION_PROMPT_BRANCH;\n\t\tcase \"turn_prefix\":\n\t\t\treturn MERGED_COMPACTION_PROMPT_TURN_PREFIX;\n\t}\n\n\tconst exhaustiveCheck: never = options.variant;\n\treturn exhaustiveCheck;\n}\n\nfunction appendCustomInstructions(userPrompt: string, customInstructions: string | undefined): string {\n\tconst trimmedInstructions = customInstructions?.trim();\n\tif (!trimmedInstructions) {\n\t\treturn userPrompt;\n\t}\n\n\treturn `${userPrompt}\n\n<custom-instructions>\n${sanitizeCustomInstructions(trimmedInstructions)}\n</custom-instructions>`;\n}\n\nfunction sanitizePreviousSummary(previousSummary: string | undefined): string {\n\tconst trimmedSummary = previousSummary?.trim();\n\tif (!trimmedSummary) {\n\t\treturn \"None.\";\n\t}\n\n\treturn trimmedSummary.split(\"</previous-summary>\").join(\"[/previous-summary]\");\n}\n\nfunction sanitizeCustomInstructions(customInstructions: string): string {\n\treturn customInstructions.split(\"</custom-instructions>\").join(\"[/custom-instructions]\");\n}\n"]}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/prompts.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;;;;;;;2DAUY,CAAC;AAE5D,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mFAoDsC,CAAC;AAEpF,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mFAiDoC,CAAC;AAEpF,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mFA6CoC,CAAC;AAEpF,MAAM,CAAC,MAAM,oCAAoC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;mFA0B+B,CAAC;AAEpF,MAAM,UAAU,WAAW,CAAC,OAA2C;IACtE,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAEtC,OAAO;QACN,MAAM,EAAE,+BAA+B;QACvC,IAAI,EAAE,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC;KAChE,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,OAA2C;IACnE,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC;QACzB,KAAK,SAAS;YACb,OAAO,6BAA6B,CAAC;QACtC,KAAK,QAAQ;YACZ,OAAO,+BAA+B,CAAC,OAAO,CAC7C,qBAAqB,EACrB,uBAAuB,CAAC,OAAO,CAAC,eAAe,CAAC,CAChD,CAAC;QACH,KAAK,QAAQ;YACZ,OAAO,+BAA+B,CAAC;QACxC,KAAK,aAAa;YACjB,OAAO,oCAAoC,CAAC;IAC9C,CAAC;IAED,MAAM,eAAe,GAAU,OAAO,CAAC,OAAO,CAAC;IAC/C,OAAO,eAAe,CAAC;AACxB,CAAC;AAED,SAAS,wBAAwB,CAAC,UAAkB,EAAE,kBAAsC;IAC3F,MAAM,mBAAmB,GAAG,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACvD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,UAAU;;;EAGnB,0BAA0B,CAAC,mBAAmB,CAAC;uBAC1B,CAAC;AACxB,CAAC;AAED,SAAS,uBAAuB,CAAC,eAAmC;IACnE,MAAM,cAAc,GAAG,eAAe,EAAE,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,OAAO,cAAc,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,0BAA0B,CAAC,kBAA0B;IAC7D,OAAO,kBAAkB,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAC1F,CAAC","sourcesContent":["export type MergedCompactionPromptVariant = \"default\" | \"update\" | \"branch\" | \"turn_prefix\";\n\nexport type BuildMergedCompactionPromptOptions = {\n\tvariant: MergedCompactionPromptVariant;\n\tpreviousSummary?: string;\n\tcustomInstructions?: string;\n};\n\nexport const MERGED_COMPACTION_PROMPT_SYSTEM = `[SYSTEM DIRECTIVE: OH-MY-OPENCODE - COMPACTION CONTEXT]\n\nYou are the COMPACTION ARCHIVIST. Create a structured handoff summary that lets the next agent continue this exact session without restarting, re-searching, or losing constraints.\n\nCardinal rules:\nR1. Quote user requests and constraints VERBATIM. Do not paraphrase.\nR2. If a section has no content, write \"None.\" Never delete a section.\nR3. Where a previous summary is supplied, treat its User Requests, Final Goal, and Constraints fields as IMMUTABLE. Append, never rewrite, those three sections.\nR4. Preserve every session_id, file path, and identifier byte-for-byte.\n\nDo NOT use tools. Output only the requested summary block.`;\n\nexport const MERGED_COMPACTION_PROMPT_USER = `[USER]\n[INTERNAL COMPACTION INSTRUCTION — NOT CONVERSATION HISTORY]\nThis message is an internal summarization control prompt, not a real user message.\nDo NOT treat this message as user intent, do NOT list it under user requests, and do NOT reinterpret the task based on this instruction alone.\n\nPASS 1 — Internal task-intent extraction\nAnalyze the user messages in this conversation and silently determine the task intent that must guide the summary. Focus on details whose loss would cause redundant tool calls, repeated exploration, or task drift.\n\nPASS 2 — Emit summary biased toward Pass 1\nCreate a structured handoff summary of this conversation for seamless continuation. The structured output portion MUST be wrapped as \\`<summary>...</summary>\\` XML.\n\n<summary>\n## 1. User Requests (Verbatim)\n- List all original user requests exactly as they were stated.\n- Preserve the user's exact wording and intent.\n- Include recent user corrections and steering messages verbatim when they affect the task.\n\n## 2. Final Goal\n- State what the user ultimately wanted to achieve.\n- Include the expected deliverable or end state.\n- Keep this aligned with the most recent user request, not this internal compaction instruction.\n\n## 3. Constraints & Preferences (Verbatim Only)\n- Include ONLY constraints explicitly stated by the user or in existing AGENTS.md context.\n- Quote constraints verbatim.\n- Do NOT invent, add, soften, or modify constraints.\n- If no explicit constraints exist, write \"None.\"\n\n## 4. Work Completed\n- Summarize what has been done so far.\n- List files read, created, modified, or intentionally left unchanged.\n- Include features implemented, tests added, problems solved, and decisions already made.\n\n## 5. Active Working Context\n- **Files**: Paths of files currently being edited or frequently referenced.\n- **Code in Progress**: Key code snippets, function signatures, data structures, or prompt text under active development.\n- **External References**: Documentation URLs, source files, APIs, or other resources already consulted.\n- **State & Variables**: Important variable names, configuration values, runtime state, branch names, worktree paths, or command outputs needed to continue.\n\n## 6. Remaining Tasks\n- List pending items from the original request.\n- Include follow-up tasks identified during the work only when they directly support the current user request.\n- Mark blockers explicitly and explain what is needed to unblock them.\n\n## 7. Exact Next Steps\n- State the precise next action to take, directly in line with the user's most recent request.\n- Include verbatim quotes from the conversation showing exactly where work was left off when helpful.\n- Do not suggest tangential tasks.\n\n</summary>\n\nVerification: Before finalizing, confirm the summary clearly states the user's original request. If not, restate it verbatim.\nIMPORTANT: Respond with ONLY the <summary>...</summary> block as your text output.`;\n\nexport const MERGED_COMPACTION_PROMPT_UPDATE = `[USER]\n<previous-summary>\n{{previousSummary}}\n</previous-summary>\n\n[INTERNAL COMPACTION UPDATE INSTRUCTION — NOT CONVERSATION HISTORY]\nThe messages above are NEW conversation messages to incorporate into the existing summary provided in <previous-summary> tags.\n\nR3 enforcement: R3. Where a previous summary is supplied, treat its User Requests, Final Goal, and Constraints fields as IMMUTABLE. Append, never rewrite, those three sections.\n\nPASS 1 — Internal task-intent extraction\nAnalyze the new user messages and silently determine which updates are needed without changing immutable prior User Requests, Final Goal, or Constraints.\n\nPASS 2 — Emit summary biased toward Pass 1\nUpdate the structured handoff summary. The structured output portion MUST be wrapped as \\`<summary>...</summary>\\` XML.\n\n<summary>\n## 1. User Requests (Verbatim)\n- Preserve prior entries from <previous-summary> byte-for-byte.\n- Append new user requests exactly as they were stated.\n\n## 2. Final Goal\n- Preserve the existing final goal unless the user explicitly changed it.\n- Append the explicit change verbatim if the goal changed.\n\n## 3. Constraints & Preferences (Verbatim Only)\n- Preserve prior constraints byte-for-byte.\n- Quote constraints verbatim.\n- Do NOT invent, add, soften, or modify constraints.\n- Append only new explicit constraints.\n- If no explicit constraints exist, write \"None.\"\n\n## 4. Work Completed\n- Preserve completed work from the previous summary.\n- Add newly completed work, files changed, tests run, and decisions made.\n\n## 5. Active Working Context\n- Update files, code in progress, external references, state, variables, branch names, worktree paths, and command outputs needed to continue.\n\n## 6. Remaining Tasks\n- Remove tasks only when the new messages prove they are completed or cancelled.\n- Add newly identified direct follow-up tasks.\n\n## 7. Exact Next Steps\n- Update based on current state and the user's most recent request.\n- Keep this direct and immediately actionable.\n\n</summary>\n\nIMPORTANT: Respond with ONLY the <summary>...</summary> block as your text output.`;\n\nexport const MERGED_COMPACTION_PROMPT_BRANCH = `[USER]\n[INTERNAL BRANCH SUMMARY INSTRUCTION — NOT CONVERSATION HISTORY]\nCreate a structured summary of this conversation branch for context when returning later. This is a branch-level handoff, so reorient §2 toward the branched intent and why this branch exists.\n\nPASS 1 — Internal task-intent extraction\nAnalyze this branch and silently determine the branch-specific intent, divergence point, and details whose loss would cause repeated work.\n\nPASS 2 — Emit summary biased toward Pass 1\nCreate a structured branch handoff summary. The structured output portion MUST be wrapped as \\`<summary>...</summary>\\` XML.\n\n<summary>\n## 1. User Requests (Verbatim)\n- List user requests that caused or shaped this branch exactly as they were stated.\n- Preserve the user's exact wording and intent.\n\n## 2. Final Goal\n- State the branched intent: what this branch was trying to accomplish, test, compare, or preserve.\n- Include how this branch differs from the mainline path when known.\n\n## 3. Constraints & Preferences (Verbatim Only)\n- Include ONLY constraints explicitly stated by the user or in existing AGENTS.md context.\n- Quote constraints verbatim.\n- Do NOT invent, add, soften, or modify constraints.\n- If no explicit constraints exist, write \"None.\"\n\n## 4. Work Completed\n- Summarize branch-specific progress.\n- List files read, created, modified, or intentionally left unchanged on this branch.\n\n## 5. Active Working Context\n- **Files**: Paths of files currently edited or frequently referenced in this branch.\n- **Code in Progress**: Key snippets, signatures, data structures, or prompt text under active development.\n- **External References**: Sources already consulted for this branch.\n- **State & Variables**: Branch names, worktree paths, runtime state, command outputs, and identifiers needed to resume.\n\n## 6. Remaining Tasks\n- List branch-specific work still needed.\n- Include blockers and the concrete condition needed to unblock them.\n\n## 7. Exact Next Steps\n- State the precise next action for returning to this branch.\n- Do not suggest tangential tasks.\n\n</summary>\n\nIMPORTANT: Respond with ONLY the <summary>...</summary> block as your text output.`;\n\nexport const MERGED_COMPACTION_PROMPT_TURN_PREFIX = `[USER]\n[INTERNAL TURN-PREFIX SUMMARY INSTRUCTION — NOT CONVERSATION HISTORY]\nCreate a compact prefix summary for the next turn. Emit only the sections listed below.\n\nPASS 1 — Internal task-intent extraction\nSilently determine the current task intent and the minimum context needed for the next turn.\n\nPASS 2 — Emit summary biased toward Pass 1\nThe structured output portion MUST be wrapped as \\`<summary>...</summary>\\` XML.\n\n<summary>\n## 1. User Requests (Verbatim)\n- Quote the active user request and any steering constraints exactly as stated.\n\n## 2. Final Goal\n- State the immediate end state needed for the next turn.\n\n## 3. Constraints & Preferences (Verbatim Only)\n- Quote constraints verbatim.\n- Do NOT invent, add, soften, or modify constraints.\n- If no explicit constraints exist, write \"None.\"\n\n## 5. Active Working Context\n- Include only files, identifiers, runtime state, and exact next-turn context needed to continue immediately.\n</summary>\n\nIMPORTANT: Respond with ONLY the <summary>...</summary> block as your text output.`;\n\nexport function buildPrompt(options: BuildMergedCompactionPromptOptions): { system: string; user: string } {\n\tconst user = buildUserPrompt(options);\n\n\treturn {\n\t\tsystem: MERGED_COMPACTION_PROMPT_SYSTEM,\n\t\tuser: appendCustomInstructions(user, options.customInstructions),\n\t};\n}\n\nfunction buildUserPrompt(options: BuildMergedCompactionPromptOptions): string {\n\tswitch (options.variant) {\n\t\tcase \"default\":\n\t\t\treturn MERGED_COMPACTION_PROMPT_USER;\n\t\tcase \"update\":\n\t\t\treturn MERGED_COMPACTION_PROMPT_UPDATE.replace(\n\t\t\t\t\"{{previousSummary}}\",\n\t\t\t\tsanitizePreviousSummary(options.previousSummary),\n\t\t\t);\n\t\tcase \"branch\":\n\t\t\treturn MERGED_COMPACTION_PROMPT_BRANCH;\n\t\tcase \"turn_prefix\":\n\t\t\treturn MERGED_COMPACTION_PROMPT_TURN_PREFIX;\n\t}\n\n\tconst exhaustiveCheck: never = options.variant;\n\treturn exhaustiveCheck;\n}\n\nfunction appendCustomInstructions(userPrompt: string, customInstructions: string | undefined): string {\n\tconst trimmedInstructions = customInstructions?.trim();\n\tif (!trimmedInstructions) {\n\t\treturn userPrompt;\n\t}\n\n\treturn `${userPrompt}\n\n<custom-instructions>\n${sanitizeCustomInstructions(trimmedInstructions)}\n</custom-instructions>`;\n}\n\nfunction sanitizePreviousSummary(previousSummary: string | undefined): string {\n\tconst trimmedSummary = previousSummary?.trim();\n\tif (!trimmedSummary) {\n\t\treturn \"None.\";\n\t}\n\n\treturn trimmedSummary.split(\"</previous-summary>\").join(\"[/previous-summary]\");\n}\n\nfunction sanitizeCustomInstructions(customInstructions: string): string {\n\treturn customInstructions.split(\"</custom-instructions>\").join(\"[/custom-instructions]\");\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"repair-tool-pairs.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/repair-tool-pairs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,uBAAuB,CAAC;AAElE,eAAO,MAAM,uBAAuB,gDAAgD,CAAC;AAErF,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CA8CxE","sourcesContent":["import type { Message, TextContent } from \"@earendil-works/pi-ai\";\n\nexport const TOOL_RESULT_PLACEHOLDER = \"Tool output unavailable (context compacted)\";\n\nexport function repairOrphanedToolResults(messages: Message[]): Message[] {\n\tconst toolCallIds = new Set<string>();\n\tconst toolResultIds = new Set<string>();\n\tfor (const message of messages) {\n\t\tif (message.role === \"assistant\") {\n\t\t\tfor (const block of message.content) {\n\t\t\t\tif (block.type === \"toolCall\") toolCallIds.add(block.id);\n\t\t\t}\n\t\t}\n\t\tif (message.role === \"toolResult\") toolResultIds.add(message.toolCallId);\n\t}\n\n\tconst output: Message[] = [];\n\tconst dangling = new Set([...toolCallIds].filter((id) => !toolResultIds.has(id)));\n\n\tfor (const message of messages) {\n\t\tif (message.role === \"toolResult\") {\n\t\t\tif (!toolCallIds.has(message.toolCallId)) {\n\t\t\t\toutput.push({\n\t\t\t\t\t...message,\n\t\t\t\t\tcontent: [{ type: \"text\", text: TOOL_RESULT_PLACEHOLDER }] satisfies TextContent[],\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\toutput.push(message);\n\t\t\tcontinue;\n\t\t}\n\n\t\toutput.push(message);\n\t\tif (message.role === \"assistant\") {\n\t\t\tfor (const block of message.content) {\n\t\t\t\tif (block.type !== \"toolCall\" || !dangling.has(block.id)) continue;\n\t\t\t\toutput.push({\n\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\ttoolCallId: block.id,\n\t\t\t\t\ttoolName: block.name,\n\t\t\t\t\tcontent: [{ type: \"text\", text: TOOL_RESULT_PLACEHOLDER }],\n\t\t\t\t\tisError: false,\n\t\t\t\t\ttimestamp: message.timestamp ? message.timestamp + 1 : Date.now(),\n\t\t\t\t});\n\t\t\t\tdangling.delete(block.id);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output;\n}\n"]}
1
+ {"version":3,"file":"repair-tool-pairs.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/repair-tool-pairs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,uBAAuB,CAAC;AAElE,eAAO,MAAM,uBAAuB,gDAAgD,CAAC;AAErF,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CA8CxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"repair-tool-pairs.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/repair-tool-pairs.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG,6CAA6C,CAAC;AAErF,MAAM,UAAU,yBAAyB,CAAC,QAAmB,EAAa;IACzE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1D,CAAC;QACF,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY;YAAE,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAElF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC;oBACX,GAAG,OAAO;oBACV,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAyB;iBAClF,CAAC,CAAC;gBACH,SAAS;YACV,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,SAAS;QACV,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACnE,MAAM,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE,KAAK,CAAC,EAAE;oBACpB,QAAQ,EAAE,KAAK,CAAC,IAAI;oBACpB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;oBAC1D,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;iBACjE,CAAC,CAAC;gBACH,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC;AAAA,CACd","sourcesContent":["import type { Message, TextContent } from \"@earendil-works/pi-ai\";\n\nexport const TOOL_RESULT_PLACEHOLDER = \"Tool output unavailable (context compacted)\";\n\nexport function repairOrphanedToolResults(messages: Message[]): Message[] {\n\tconst toolCallIds = new Set<string>();\n\tconst toolResultIds = new Set<string>();\n\tfor (const message of messages) {\n\t\tif (message.role === \"assistant\") {\n\t\t\tfor (const block of message.content) {\n\t\t\t\tif (block.type === \"toolCall\") toolCallIds.add(block.id);\n\t\t\t}\n\t\t}\n\t\tif (message.role === \"toolResult\") toolResultIds.add(message.toolCallId);\n\t}\n\n\tconst output: Message[] = [];\n\tconst dangling = new Set([...toolCallIds].filter((id) => !toolResultIds.has(id)));\n\n\tfor (const message of messages) {\n\t\tif (message.role === \"toolResult\") {\n\t\t\tif (!toolCallIds.has(message.toolCallId)) {\n\t\t\t\toutput.push({\n\t\t\t\t\t...message,\n\t\t\t\t\tcontent: [{ type: \"text\", text: TOOL_RESULT_PLACEHOLDER }] satisfies TextContent[],\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\toutput.push(message);\n\t\t\tcontinue;\n\t\t}\n\n\t\toutput.push(message);\n\t\tif (message.role === \"assistant\") {\n\t\t\tfor (const block of message.content) {\n\t\t\t\tif (block.type !== \"toolCall\" || !dangling.has(block.id)) continue;\n\t\t\t\toutput.push({\n\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\ttoolCallId: block.id,\n\t\t\t\t\ttoolName: block.name,\n\t\t\t\t\tcontent: [{ type: \"text\", text: TOOL_RESULT_PLACEHOLDER }],\n\t\t\t\t\tisError: false,\n\t\t\t\t\ttimestamp: message.timestamp ? message.timestamp + 1 : Date.now(),\n\t\t\t\t});\n\t\t\t\tdangling.delete(block.id);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output;\n}\n"]}
1
+ {"version":3,"file":"repair-tool-pairs.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/repair-tool-pairs.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG,6CAA6C,CAAC;AAErF,MAAM,UAAU,yBAAyB,CAAC,QAAmB;IAC5D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1D,CAAC;QACF,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY;YAAE,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAElF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC;oBACX,GAAG,OAAO;oBACV,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAyB;iBAClF,CAAC,CAAC;gBACH,SAAS;YACV,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,SAAS;QACV,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACnE,MAAM,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE,KAAK,CAAC,EAAE;oBACpB,QAAQ,EAAE,KAAK,CAAC,IAAI;oBACpB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;oBAC1D,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;iBACjE,CAAC,CAAC;gBACH,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC","sourcesContent":["import type { Message, TextContent } from \"@earendil-works/pi-ai\";\n\nexport const TOOL_RESULT_PLACEHOLDER = \"Tool output unavailable (context compacted)\";\n\nexport function repairOrphanedToolResults(messages: Message[]): Message[] {\n\tconst toolCallIds = new Set<string>();\n\tconst toolResultIds = new Set<string>();\n\tfor (const message of messages) {\n\t\tif (message.role === \"assistant\") {\n\t\t\tfor (const block of message.content) {\n\t\t\t\tif (block.type === \"toolCall\") toolCallIds.add(block.id);\n\t\t\t}\n\t\t}\n\t\tif (message.role === \"toolResult\") toolResultIds.add(message.toolCallId);\n\t}\n\n\tconst output: Message[] = [];\n\tconst dangling = new Set([...toolCallIds].filter((id) => !toolResultIds.has(id)));\n\n\tfor (const message of messages) {\n\t\tif (message.role === \"toolResult\") {\n\t\t\tif (!toolCallIds.has(message.toolCallId)) {\n\t\t\t\toutput.push({\n\t\t\t\t\t...message,\n\t\t\t\t\tcontent: [{ type: \"text\", text: TOOL_RESULT_PLACEHOLDER }] satisfies TextContent[],\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\toutput.push(message);\n\t\t\tcontinue;\n\t\t}\n\n\t\toutput.push(message);\n\t\tif (message.role === \"assistant\") {\n\t\t\tfor (const block of message.content) {\n\t\t\t\tif (block.type !== \"toolCall\" || !dangling.has(block.id)) continue;\n\t\t\t\toutput.push({\n\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\ttoolCallId: block.id,\n\t\t\t\t\ttoolName: block.name,\n\t\t\t\t\tcontent: [{ type: \"text\", text: TOOL_RESULT_PLACEHOLDER }],\n\t\t\t\t\tisError: false,\n\t\t\t\t\ttimestamp: message.timestamp ? message.timestamp + 1 : Date.now(),\n\t\t\t\t});\n\t\t\t\tdangling.delete(block.id);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"restoration-tracker.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/restoration-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGpF,eAAO,MAAM,oCAAoC,wCAAwC,CAAC;AAE1F,QAAA,MAAM,+BAA+B,iDAAiD,CAAC;AAMvF,KAAK,mBAAmB,GAAG,MAAM,GAAG,OAAO,CAAC;AAG5C,MAAM,WAAW,mBAAmB;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,mBAAmB,CAAC;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACzC,UAAU,EAAE,OAAO,oCAAoC,CAAC;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,EAAE;QACR,MAAM,EAAE,OAAO,+BAA+B,CAAC;QAC/C,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,gBAAgB,CAAC;QACzB,KAAK,EAAE,eAAe,EAAE,CAAC;KACzB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACvC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACpC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,cAAc,EAAE,yBAAyB,GAAG,IAAI,CAAC;CACjD;AAED,wBAAgB,6BAA6B,IAAI,uBAAuB,CAMvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAmB/F;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,4BAA4B,GAAG,IAAI,CA8BjH;AAED,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,uBAAuB,GAC5B,2BAA2B,CAAC,SAAS,CAAC,GAAG,SAAS,CAapD;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,4BAA4B,GAAG,MAAM,CAQtF","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { estimateTokens } from \"../../../compaction/index.ts\";\nimport type { BeforeAgentStartEventResult, CompactionReason } from \"../../types.ts\";\nimport { extractPatchedPaths } from \"../gpt-apply-patch/index.ts\";\n\nexport const POST_COMPACT_RESTORATION_CUSTOM_TYPE = \"compaction.post-compact-restoration\";\n\nconst POST_COMPACT_RESTORATION_SCHEMA = \"senpi.compaction.post-compact-restoration.v1\";\nconst DEFAULT_RESTORATION_MAX_ITEMS = 10;\nconst DEFAULT_RESTORATION_MAX_TOKENS_PER_ITEM = 5000;\nconst DEFAULT_RESTORATION_MAX_TOTAL_TOKENS = 50_000;\nconst DEFAULT_RESTORATION_CONTEXT_RATIO = 0.15;\n\ntype RestorationItemType = \"file\" | \"skill\";\ntype FileOperation = \"read\" | \"write\" | \"edit\";\n\nexport interface RestorationSettings {\n\trestorationMaxItems?: number;\n\trestorationMaxTokensPerItem?: number;\n\trestorationMaxTotalTokens?: number;\n\trestorationContextRatio?: number;\n}\n\nexport interface MinimalToolCallEvent {\n\ttoolName: string;\n\tinput: Record<string, unknown>;\n}\n\nexport interface RestorationItem {\n\tcontent: string;\n\tlabel: string;\n\tpriority: number;\n\ttokens: number;\n\ttype: RestorationItemType;\n}\n\nexport interface PendingRestorationPayload {\n\tcustomType: typeof POST_COMPACT_RESTORATION_CUSTOM_TYPE;\n\tcontent: string;\n\tdisplay: false;\n\tdetails: {\n\t\tschema: typeof POST_COMPACT_RESTORATION_SCHEMA;\n\t\tbudgetTokens: number;\n\t\tcompactionEntryId: string;\n\t\treason: CompactionReason;\n\t\titems: RestorationItem[];\n\t};\n\tbudgetTokens: number;\n}\n\nexport interface PreparePendingPayloadOptions {\n\taccepted: boolean;\n\treason: CompactionReason;\n\tcompactionEntryId: string;\n\tcontextWindow: number;\n\tusageTokens: number | null;\n\treserveTokens: number;\n\tsettings?: RestorationSettings;\n\tkeptMessages?: AgentMessage[];\n}\n\nexport interface RestorationTrackerState {\n\titems: Map<string, RestorationItem>;\n\trestoredLabels: Set<string>;\n\tpendingPayload: PendingRestorationPayload | null;\n}\n\nexport function createRestorationTrackerState(): RestorationTrackerState {\n\treturn {\n\t\titems: new Map(),\n\t\trestoredLabels: new Set(),\n\t\tpendingPayload: null,\n\t};\n}\n\nexport function trackToolCall(state: RestorationTrackerState, event: MinimalToolCallEvent): void {\n\tswitch (event.toolName) {\n\t\tcase \"read\":\n\t\t\ttrackPathInput(state, event.input, \"read\");\n\t\t\treturn;\n\t\tcase \"write\":\n\t\t\ttrackPathInput(state, event.input, \"write\");\n\t\t\treturn;\n\t\tcase \"edit\":\n\t\t\ttrackPathInput(state, event.input, \"edit\");\n\t\t\treturn;\n\t\tcase \"apply_patch\":\n\t\t\ttrackApplyPatchInput(state, event.input);\n\t\t\treturn;\n\t\tcase \"skill\":\n\t\tcase \"load_skill\":\n\t\t\ttrackSkillInput(state, event.input);\n\t\t\treturn;\n\t}\n}\n\nexport function preparePendingPayload(state: RestorationTrackerState, options: PreparePendingPayloadOptions): void {\n\tif (!options.accepted) return;\n\n\tconst budgetTokens = computeRestorationBudget(options);\n\tif (budgetTokens <= 0) {\n\t\tstate.pendingPayload = null;\n\t\treturn;\n\t}\n\n\tfilterAgainstKeptMessages(state, options.keptMessages ?? []);\n\tconst selectedItems = selectRestorationItems(state, options.settings, budgetTokens);\n\tif (selectedItems.length === 0) {\n\t\tstate.pendingPayload = null;\n\t\treturn;\n\t}\n\n\tconst content = buildRestorationContent(options, selectedItems);\n\tstate.pendingPayload = {\n\t\tcustomType: POST_COMPACT_RESTORATION_CUSTOM_TYPE,\n\t\tcontent,\n\t\tdisplay: false,\n\t\tdetails: {\n\t\t\tschema: POST_COMPACT_RESTORATION_SCHEMA,\n\t\t\tbudgetTokens,\n\t\t\tcompactionEntryId: options.compactionEntryId,\n\t\t\treason: options.reason,\n\t\t\titems: selectedItems,\n\t\t},\n\t\tbudgetTokens,\n\t};\n}\n\nexport function consumePendingPayload(\n\tstate: RestorationTrackerState,\n): BeforeAgentStartEventResult[\"message\"] | undefined {\n\tconst payload = state.pendingPayload;\n\tstate.pendingPayload = null;\n\tif (!payload) return undefined;\n\tfor (const item of payload.details.items) {\n\t\tstate.restoredLabels.add(item.label);\n\t}\n\treturn {\n\t\tcustomType: payload.customType,\n\t\tcontent: payload.content,\n\t\tdisplay: payload.display,\n\t\tdetails: payload.details,\n\t};\n}\n\nexport function computeRestorationBudget(options: PreparePendingPayloadOptions): number {\n\tconst settings = resolveSettings(options.settings);\n\tconst contextWindow = Math.max(0, options.contextWindow);\n\tconst configuredBudget = settings.restorationMaxTotalTokens;\n\tconst contextRatioBudget = Math.floor(contextWindow * settings.restorationContextRatio);\n\tconst usageTokens = Math.max(0, options.usageTokens ?? 0);\n\tconst remainingBudget = Math.max(0, contextWindow - usageTokens - options.reserveTokens);\n\treturn Math.floor(Math.min(configuredBudget, contextRatioBudget, remainingBudget));\n}\n\nfunction trackPathInput(\n\tstate: RestorationTrackerState,\n\tinput: Record<string, unknown>,\n\toperation: FileOperation,\n): void {\n\tif (typeof input.path !== \"string\" || input.path.length === 0) return;\n\ttrackFile(state, input.path, operation);\n}\n\nfunction trackApplyPatchInput(state: RestorationTrackerState, input: Record<string, unknown>): void {\n\tif (typeof input.input !== \"string\") return;\n\tfor (const path of extractPatchedPaths(input.input)) {\n\t\tif (path.length > 0) trackFile(state, path, \"edit\");\n\t}\n}\n\nfunction trackSkillInput(state: RestorationTrackerState, input: Record<string, unknown>): void {\n\tconst skillName = typeof input.name === \"string\" ? input.name : input.skillName;\n\tif (typeof skillName === \"string\" && skillName.length > 0) {\n\t\tsetItem(state, {\n\t\t\tcontent: skillName,\n\t\t\tlabel: skillName,\n\t\t\tpriority: 80,\n\t\t\ttokens: estimateTextTokens(skillName),\n\t\t\ttype: \"skill\",\n\t\t});\n\t}\n}\n\nfunction trackFile(state: RestorationTrackerState, path: string, operation: FileOperation): void {\n\tconst label = path;\n\tconst existing = state.items.get(label);\n\tconst operations = new Set<FileOperation>(parseFileOperations(existing?.content));\n\toperations.add(operation);\n\tconst content = `${path} (${sortOperations(operations).join(\", \")})`;\n\tsetItem(state, {\n\t\tcontent,\n\t\tlabel,\n\t\tpriority: operation === \"read\" && operations.size === 1 ? 50 : 100,\n\t\ttokens: estimateTextTokens(content),\n\t\ttype: \"file\",\n\t});\n}\n\nfunction setItem(state: RestorationTrackerState, item: RestorationItem): void {\n\tstate.items.set(item.label, item);\n}\n\nfunction selectRestorationItems(\n\tstate: RestorationTrackerState,\n\tsettingsInput: RestorationSettings | undefined,\n\tbudgetTokens: number,\n): RestorationItem[] {\n\tconst settings = resolveSettings(settingsInput);\n\tconst candidates = Array.from(state.items.values())\n\t\t.filter((item) => !state.restoredLabels.has(item.label))\n\t\t.map((item) => truncateRestorationItem(item, settings.restorationMaxTokensPerItem))\n\t\t.sort((left, right) => {\n\t\t\tif (left.priority !== right.priority) return right.priority - left.priority;\n\t\t\tif (left.tokens !== right.tokens) return left.tokens - right.tokens;\n\t\t\treturn left.label.localeCompare(right.label);\n\t\t});\n\n\tconst selected: RestorationItem[] = [];\n\tlet totalTokens = 0;\n\tfor (const item of candidates) {\n\t\tif (selected.length >= settings.restorationMaxItems) break;\n\t\tif (totalTokens + item.tokens > budgetTokens) continue;\n\t\tselected.push(item);\n\t\ttotalTokens += item.tokens;\n\t}\n\treturn selected;\n}\n\nfunction buildRestorationContent(options: PreparePendingPayloadOptions, items: RestorationItem[]): string {\n\tconst files = items.filter((item) => item.type === \"file\");\n\tconst skills = items.filter((item) => item.type === \"skill\");\n\tconst lines = [\n\t\t\"[Restored context after compaction — files and skills from before compaction]\",\n\t\t`reason: ${options.reason}`,\n\t\t`compactionEntryId: ${options.compactionEntryId}`,\n\t\t\"\",\n\t];\n\n\tif (files.length > 0) {\n\t\tlines.push(\"<restored-files>\");\n\t\tfor (const file of files) {\n\t\t\tlines.push(`<file label=\"${escapeXmlAttribute(file.label)}\">${file.content}</file>`);\n\t\t}\n\t\tlines.push(\"</restored-files>\");\n\t\tlines.push(\"\");\n\t}\n\n\tif (skills.length > 0) {\n\t\tlines.push(\"<restored-skills>\");\n\t\tfor (const skill of skills) {\n\t\t\tlines.push(`<skill label=\"${escapeXmlAttribute(skill.label)}\">${skill.content}</skill>`);\n\t\t}\n\t\tlines.push(\"</restored-skills>\");\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\nfunction truncateRestorationItem(item: RestorationItem, maxTokens: number): RestorationItem {\n\tif (item.tokens <= maxTokens) return item;\n\tconst truncationNotice = \"[... truncated]\";\n\tconst noticeTokens = estimateTextTokens(truncationNotice);\n\tconst targetTokens = Math.max(0, maxTokens - noticeTokens - 1);\n\tconst truncatedBody = truncateToTokenLimit(item.content, targetTokens);\n\tconst content = truncatedBody.length > 0 ? `${truncatedBody}\\n${truncationNotice}` : truncationNotice;\n\treturn { ...item, content, tokens: estimateTextTokens(content) };\n}\n\nfunction filterAgainstKeptMessages(state: RestorationTrackerState, keptMessages: AgentMessage[]): void {\n\tif (keptMessages.length === 0) return;\n\tconst keptText = keptMessages.map(extractMessageText).join(\"\\n\");\n\tfor (const label of state.items.keys()) {\n\t\tif (keptText.includes(label)) {\n\t\t\tstate.items.delete(label);\n\t\t}\n\t}\n}\n\nfunction extractMessageText(message: AgentMessage): string {\n\tif (\"content\" in message) {\n\t\tif (typeof message.content === \"string\") return message.content;\n\t\tif (Array.isArray(message.content)) {\n\t\t\treturn message.content\n\t\t\t\t.filter((content): content is { type: \"text\"; text: string } => content.type === \"text\")\n\t\t\t\t.map((content) => content.text)\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\t}\n\tif (\"summary\" in message) return message.summary;\n\tif (\"command\" in message) return `${message.command}\\n${message.output}`;\n\treturn \"\";\n}\n\nfunction truncateToTokenLimit(text: string, tokenLimit: number): string {\n\tif (tokenLimit <= 0 || text.length === 0) return \"\";\n\tif (estimateTextTokens(text) <= tokenLimit) return text;\n\n\tlet low = 0;\n\tlet high = text.length;\n\twhile (low < high) {\n\t\tconst mid = Math.ceil((low + high) / 2);\n\t\tconst candidate = text.slice(0, mid);\n\t\tif (estimateTextTokens(candidate) <= tokenLimit) {\n\t\t\tlow = mid;\n\t\t\tcontinue;\n\t\t}\n\t\thigh = mid - 1;\n\t}\n\treturn text.slice(0, low).trimEnd();\n}\n\nfunction resolveSettings(settings: RestorationSettings | undefined): Required<RestorationSettings> {\n\treturn {\n\t\trestorationMaxItems: normalizeNonNegativeInteger(settings?.restorationMaxItems, DEFAULT_RESTORATION_MAX_ITEMS),\n\t\trestorationMaxTokensPerItem: normalizeNonNegativeInteger(\n\t\t\tsettings?.restorationMaxTokensPerItem,\n\t\t\tDEFAULT_RESTORATION_MAX_TOKENS_PER_ITEM,\n\t\t),\n\t\trestorationMaxTotalTokens: normalizeNonNegativeInteger(\n\t\t\tsettings?.restorationMaxTotalTokens,\n\t\t\tDEFAULT_RESTORATION_MAX_TOTAL_TOKENS,\n\t\t),\n\t\trestorationContextRatio: normalizeNonNegativeNumber(\n\t\t\tsettings?.restorationContextRatio,\n\t\t\tDEFAULT_RESTORATION_CONTEXT_RATIO,\n\t\t),\n\t};\n}\n\nfunction normalizeNonNegativeInteger(value: number | undefined, fallback: number): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : fallback;\n}\n\nfunction normalizeNonNegativeNumber(value: number | undefined, fallback: number): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : fallback;\n}\n\nfunction parseFileOperations(content: string | undefined): FileOperation[] {\n\tif (!content) return [];\n\tconst open = content.lastIndexOf(\"(\");\n\tconst close = content.lastIndexOf(\")\");\n\tif (open === -1 || close === -1 || close <= open) return [];\n\treturn content\n\t\t.slice(open + 1, close)\n\t\t.split(\",\")\n\t\t.map((operation) => operation.trim())\n\t\t.filter(\n\t\t\t(operation): operation is FileOperation =>\n\t\t\t\toperation === \"read\" || operation === \"write\" || operation === \"edit\",\n\t\t);\n}\n\nfunction sortOperations(operations: Set<FileOperation>): FileOperation[] {\n\tconst order: FileOperation[] = [\"read\", \"write\", \"edit\"];\n\treturn order.filter((operation) => operations.has(operation));\n}\n\nfunction estimateTextTokens(text: string): number {\n\treturn estimateTokens({ role: \"custom\", customType: \"restoration\", content: text, display: false, timestamp: 0 });\n}\n\nfunction escapeXmlAttribute(value: string): string {\n\treturn value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n"]}
1
+ {"version":3,"file":"restoration-tracker.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/restoration-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGpF,eAAO,MAAM,oCAAoC,wCAAwC,CAAC;AAE1F,QAAA,MAAM,+BAA+B,iDAAiD,CAAC;AAMvF,KAAK,mBAAmB,GAAG,MAAM,GAAG,OAAO,CAAC;AAG5C,MAAM,WAAW,mBAAmB;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,mBAAmB,CAAC;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACzC,UAAU,EAAE,OAAO,oCAAoC,CAAC;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,EAAE;QACR,MAAM,EAAE,OAAO,+BAA+B,CAAC;QAC/C,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,gBAAgB,CAAC;QACzB,KAAK,EAAE,eAAe,EAAE,CAAC;KACzB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACvC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACpC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,cAAc,EAAE,yBAAyB,GAAG,IAAI,CAAC;CACjD;AAED,wBAAgB,6BAA6B,IAAI,uBAAuB,CAMvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAmB/F;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,4BAA4B,GAAG,IAAI,CA8BjH;AAED,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,uBAAuB,GAC5B,2BAA2B,CAAC,SAAS,CAAC,GAAG,SAAS,CAapD;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,4BAA4B,GAAG,MAAM,CAQtF"}
@@ -1 +1 @@
1
- {"version":3,"file":"restoration-tracker.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/restoration-tracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,CAAC,MAAM,oCAAoC,GAAG,qCAAqC,CAAC;AAE1F,MAAM,+BAA+B,GAAG,8CAA8C,CAAC;AACvF,MAAM,6BAA6B,GAAG,EAAE,CAAC;AACzC,MAAM,uCAAuC,GAAG,IAAI,CAAC;AACrD,MAAM,oCAAoC,GAAG,MAAM,CAAC;AACpD,MAAM,iCAAiC,GAAG,IAAI,CAAC;AAwD/C,MAAM,UAAU,6BAA6B,GAA4B;IACxE,OAAO;QACN,KAAK,EAAE,IAAI,GAAG,EAAE;QAChB,cAAc,EAAE,IAAI,GAAG,EAAE;QACzB,cAAc,EAAE,IAAI;KACpB,CAAC;AAAA,CACF;AAED,MAAM,UAAU,aAAa,CAAC,KAA8B,EAAE,KAA2B,EAAQ;IAChG,QAAQ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,MAAM;YACV,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC3C,OAAO;QACR,KAAK,OAAO;YACX,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC5C,OAAO;QACR,KAAK,MAAM;YACV,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC3C,OAAO;QACR,KAAK,aAAa;YACjB,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO;QACR,KAAK,OAAO,CAAC;QACb,KAAK,YAAY;YAChB,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACpC,OAAO;IACT,CAAC;AAAA,CACD;AAED,MAAM,UAAU,qBAAqB,CAAC,KAA8B,EAAE,OAAqC,EAAQ;IAClH,IAAI,CAAC,OAAO,CAAC,QAAQ;QAAE,OAAO;IAE9B,MAAM,YAAY,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5B,OAAO;IACR,CAAC;IAED,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACpF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5B,OAAO;IACR,CAAC;IAED,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAChE,KAAK,CAAC,cAAc,GAAG;QACtB,UAAU,EAAE,oCAAoC;QAChD,OAAO;QACP,OAAO,EAAE,KAAK;QACd,OAAO,EAAE;YACR,MAAM,EAAE,+BAA+B;YACvC,YAAY;YACZ,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,aAAa;SACpB;QACD,YAAY;KACZ,CAAC;AAAA,CACF;AAED,MAAM,UAAU,qBAAqB,CACpC,KAA8B,EACuB;IACrD,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC;IACrC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1C,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,OAAO;QACN,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;KACxB,CAAC;AAAA,CACF;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAqC,EAAU;IACvF,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACzD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,yBAAyB,CAAC;IAC5D,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IACxF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACzF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAC,CAAC;AAAA,CACnF;AAED,SAAS,cAAc,CACtB,KAA8B,EAC9B,KAA8B,EAC9B,SAAwB,EACjB;IACP,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACtE,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAAA,CACxC;AAED,SAAS,oBAAoB,CAAC,KAA8B,EAAE,KAA8B,EAAQ;IACnG,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO;IAC5C,KAAK,MAAM,IAAI,IAAI,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;AAAA,CACD;AAED,SAAS,eAAe,CAAC,KAA8B,EAAE,KAA8B,EAAQ;IAC9F,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;IAChF,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,CAAC,KAAK,EAAE;YACd,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,kBAAkB,CAAC,SAAS,CAAC;YACrC,IAAI,EAAE,OAAO;SACb,CAAC,CAAC;IACJ,CAAC;AAAA,CACD;AAED,SAAS,SAAS,CAAC,KAA8B,EAAE,IAAY,EAAE,SAAwB,EAAQ;IAChG,MAAM,KAAK,GAAG,IAAI,CAAC;IACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAClF,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,GAAG,IAAI,KAAK,cAAc,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACrE,OAAO,CAAC,KAAK,EAAE;QACd,OAAO;QACP,KAAK;QACL,QAAQ,EAAE,SAAS,KAAK,MAAM,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG;QAClE,MAAM,EAAE,kBAAkB,CAAC,OAAO,CAAC;QACnC,IAAI,EAAE,MAAM;KACZ,CAAC,CAAC;AAAA,CACH;AAED,SAAS,OAAO,CAAC,KAA8B,EAAE,IAAqB,EAAQ;IAC7E,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAAA,CAClC;AAED,SAAS,sBAAsB,CAC9B,KAA8B,EAC9B,aAA8C,EAC9C,YAAoB,EACA;IACpB,MAAM,QAAQ,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SACjD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,2BAA2B,CAAC,CAAC;SAClF,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5E,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACpE,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAAA,CAC7C,CAAC,CAAC;IAEJ,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,mBAAmB;YAAE,MAAM;QAC3D,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY;YAAE,SAAS;QACvD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC;IAC5B,CAAC;IACD,OAAO,QAAQ,CAAC;AAAA,CAChB;AAED,SAAS,uBAAuB,CAAC,OAAqC,EAAE,KAAwB,EAAU;IACzG,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG;QACb,iFAA+E;QAC/E,WAAW,OAAO,CAAC,MAAM,EAAE;QAC3B,sBAAsB,OAAO,CAAC,iBAAiB,EAAE;QACjD,EAAE;KACF,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,SAAS,CAAC,CAAC;QACtF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,iBAAiB,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;QAC1F,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACxB;AAED,SAAS,uBAAuB,CAAC,IAAqB,EAAE,SAAiB,EAAmB;IAC3F,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;IAC3C,MAAM,YAAY,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,KAAK,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACtG,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;AAAA,CACjE;AAED,SAAS,yBAAyB,CAAC,KAA8B,EAAE,YAA4B,EAAQ;IACtG,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACtC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACF,CAAC;AAAA,CACD;AAED,SAAS,kBAAkB,CAAC,OAAqB,EAAU;IAC1D,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC;QAChE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,OAAO,OAAO,CAAC,OAAO;iBACpB,MAAM,CAAC,CAAC,OAAO,EAA6C,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;iBACvF,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;iBAC9B,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,CAAC;IACF,CAAC;IACD,IAAI,SAAS,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC;IACjD,IAAI,SAAS,IAAI,OAAO;QAAE,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;IACzE,OAAO,EAAE,CAAC;AAAA,CACV;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,UAAkB,EAAU;IACvE,IAAI,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpD,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,UAAU;QAAE,OAAO,IAAI,CAAC;IAExD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACvB,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,kBAAkB,CAAC,SAAS,CAAC,IAAI,UAAU,EAAE,CAAC;YACjD,GAAG,GAAG,GAAG,CAAC;YACV,SAAS;QACV,CAAC;QACD,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAAA,CACpC;AAED,SAAS,eAAe,CAAC,QAAyC,EAAiC;IAClG,OAAO;QACN,mBAAmB,EAAE,2BAA2B,CAAC,QAAQ,EAAE,mBAAmB,EAAE,6BAA6B,CAAC;QAC9G,2BAA2B,EAAE,2BAA2B,CACvD,QAAQ,EAAE,2BAA2B,EACrC,uCAAuC,CACvC;QACD,yBAAyB,EAAE,2BAA2B,CACrD,QAAQ,EAAE,yBAAyB,EACnC,oCAAoC,CACpC;QACD,uBAAuB,EAAE,0BAA0B,CAClD,QAAQ,EAAE,uBAAuB,EACjC,iCAAiC,CACjC;KACD,CAAC;AAAA,CACF;AAED,SAAS,2BAA2B,CAAC,KAAyB,EAAE,QAAgB,EAAU;IACzF,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAAA,CACxG;AAED,SAAS,0BAA0B,CAAC,KAAyB,EAAE,QAAgB,EAAU;IACxF,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAAA,CAC5F;AAED,SAAS,mBAAmB,CAAC,OAA2B,EAAmB;IAC1E,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC5D,OAAO,OAAO;SACZ,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC;SACtB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;SACpC,MAAM,CACN,CAAC,SAAS,EAA8B,EAAE,CACzC,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,MAAM,CACtE,CAAC;AAAA,CACH;AAED,SAAS,cAAc,CAAC,UAA8B,EAAmB;IACxE,MAAM,KAAK,GAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACzD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAAA,CAC9D;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAU;IACjD,OAAO,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,CAClH;AAED,SAAS,kBAAkB,CAAC,KAAa,EAAU;IAClD,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAAA,CACxG","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { estimateTokens } from \"../../../compaction/index.ts\";\nimport type { BeforeAgentStartEventResult, CompactionReason } from \"../../types.ts\";\nimport { extractPatchedPaths } from \"../gpt-apply-patch/index.ts\";\n\nexport const POST_COMPACT_RESTORATION_CUSTOM_TYPE = \"compaction.post-compact-restoration\";\n\nconst POST_COMPACT_RESTORATION_SCHEMA = \"senpi.compaction.post-compact-restoration.v1\";\nconst DEFAULT_RESTORATION_MAX_ITEMS = 10;\nconst DEFAULT_RESTORATION_MAX_TOKENS_PER_ITEM = 5000;\nconst DEFAULT_RESTORATION_MAX_TOTAL_TOKENS = 50_000;\nconst DEFAULT_RESTORATION_CONTEXT_RATIO = 0.15;\n\ntype RestorationItemType = \"file\" | \"skill\";\ntype FileOperation = \"read\" | \"write\" | \"edit\";\n\nexport interface RestorationSettings {\n\trestorationMaxItems?: number;\n\trestorationMaxTokensPerItem?: number;\n\trestorationMaxTotalTokens?: number;\n\trestorationContextRatio?: number;\n}\n\nexport interface MinimalToolCallEvent {\n\ttoolName: string;\n\tinput: Record<string, unknown>;\n}\n\nexport interface RestorationItem {\n\tcontent: string;\n\tlabel: string;\n\tpriority: number;\n\ttokens: number;\n\ttype: RestorationItemType;\n}\n\nexport interface PendingRestorationPayload {\n\tcustomType: typeof POST_COMPACT_RESTORATION_CUSTOM_TYPE;\n\tcontent: string;\n\tdisplay: false;\n\tdetails: {\n\t\tschema: typeof POST_COMPACT_RESTORATION_SCHEMA;\n\t\tbudgetTokens: number;\n\t\tcompactionEntryId: string;\n\t\treason: CompactionReason;\n\t\titems: RestorationItem[];\n\t};\n\tbudgetTokens: number;\n}\n\nexport interface PreparePendingPayloadOptions {\n\taccepted: boolean;\n\treason: CompactionReason;\n\tcompactionEntryId: string;\n\tcontextWindow: number;\n\tusageTokens: number | null;\n\treserveTokens: number;\n\tsettings?: RestorationSettings;\n\tkeptMessages?: AgentMessage[];\n}\n\nexport interface RestorationTrackerState {\n\titems: Map<string, RestorationItem>;\n\trestoredLabels: Set<string>;\n\tpendingPayload: PendingRestorationPayload | null;\n}\n\nexport function createRestorationTrackerState(): RestorationTrackerState {\n\treturn {\n\t\titems: new Map(),\n\t\trestoredLabels: new Set(),\n\t\tpendingPayload: null,\n\t};\n}\n\nexport function trackToolCall(state: RestorationTrackerState, event: MinimalToolCallEvent): void {\n\tswitch (event.toolName) {\n\t\tcase \"read\":\n\t\t\ttrackPathInput(state, event.input, \"read\");\n\t\t\treturn;\n\t\tcase \"write\":\n\t\t\ttrackPathInput(state, event.input, \"write\");\n\t\t\treturn;\n\t\tcase \"edit\":\n\t\t\ttrackPathInput(state, event.input, \"edit\");\n\t\t\treturn;\n\t\tcase \"apply_patch\":\n\t\t\ttrackApplyPatchInput(state, event.input);\n\t\t\treturn;\n\t\tcase \"skill\":\n\t\tcase \"load_skill\":\n\t\t\ttrackSkillInput(state, event.input);\n\t\t\treturn;\n\t}\n}\n\nexport function preparePendingPayload(state: RestorationTrackerState, options: PreparePendingPayloadOptions): void {\n\tif (!options.accepted) return;\n\n\tconst budgetTokens = computeRestorationBudget(options);\n\tif (budgetTokens <= 0) {\n\t\tstate.pendingPayload = null;\n\t\treturn;\n\t}\n\n\tfilterAgainstKeptMessages(state, options.keptMessages ?? []);\n\tconst selectedItems = selectRestorationItems(state, options.settings, budgetTokens);\n\tif (selectedItems.length === 0) {\n\t\tstate.pendingPayload = null;\n\t\treturn;\n\t}\n\n\tconst content = buildRestorationContent(options, selectedItems);\n\tstate.pendingPayload = {\n\t\tcustomType: POST_COMPACT_RESTORATION_CUSTOM_TYPE,\n\t\tcontent,\n\t\tdisplay: false,\n\t\tdetails: {\n\t\t\tschema: POST_COMPACT_RESTORATION_SCHEMA,\n\t\t\tbudgetTokens,\n\t\t\tcompactionEntryId: options.compactionEntryId,\n\t\t\treason: options.reason,\n\t\t\titems: selectedItems,\n\t\t},\n\t\tbudgetTokens,\n\t};\n}\n\nexport function consumePendingPayload(\n\tstate: RestorationTrackerState,\n): BeforeAgentStartEventResult[\"message\"] | undefined {\n\tconst payload = state.pendingPayload;\n\tstate.pendingPayload = null;\n\tif (!payload) return undefined;\n\tfor (const item of payload.details.items) {\n\t\tstate.restoredLabels.add(item.label);\n\t}\n\treturn {\n\t\tcustomType: payload.customType,\n\t\tcontent: payload.content,\n\t\tdisplay: payload.display,\n\t\tdetails: payload.details,\n\t};\n}\n\nexport function computeRestorationBudget(options: PreparePendingPayloadOptions): number {\n\tconst settings = resolveSettings(options.settings);\n\tconst contextWindow = Math.max(0, options.contextWindow);\n\tconst configuredBudget = settings.restorationMaxTotalTokens;\n\tconst contextRatioBudget = Math.floor(contextWindow * settings.restorationContextRatio);\n\tconst usageTokens = Math.max(0, options.usageTokens ?? 0);\n\tconst remainingBudget = Math.max(0, contextWindow - usageTokens - options.reserveTokens);\n\treturn Math.floor(Math.min(configuredBudget, contextRatioBudget, remainingBudget));\n}\n\nfunction trackPathInput(\n\tstate: RestorationTrackerState,\n\tinput: Record<string, unknown>,\n\toperation: FileOperation,\n): void {\n\tif (typeof input.path !== \"string\" || input.path.length === 0) return;\n\ttrackFile(state, input.path, operation);\n}\n\nfunction trackApplyPatchInput(state: RestorationTrackerState, input: Record<string, unknown>): void {\n\tif (typeof input.input !== \"string\") return;\n\tfor (const path of extractPatchedPaths(input.input)) {\n\t\tif (path.length > 0) trackFile(state, path, \"edit\");\n\t}\n}\n\nfunction trackSkillInput(state: RestorationTrackerState, input: Record<string, unknown>): void {\n\tconst skillName = typeof input.name === \"string\" ? input.name : input.skillName;\n\tif (typeof skillName === \"string\" && skillName.length > 0) {\n\t\tsetItem(state, {\n\t\t\tcontent: skillName,\n\t\t\tlabel: skillName,\n\t\t\tpriority: 80,\n\t\t\ttokens: estimateTextTokens(skillName),\n\t\t\ttype: \"skill\",\n\t\t});\n\t}\n}\n\nfunction trackFile(state: RestorationTrackerState, path: string, operation: FileOperation): void {\n\tconst label = path;\n\tconst existing = state.items.get(label);\n\tconst operations = new Set<FileOperation>(parseFileOperations(existing?.content));\n\toperations.add(operation);\n\tconst content = `${path} (${sortOperations(operations).join(\", \")})`;\n\tsetItem(state, {\n\t\tcontent,\n\t\tlabel,\n\t\tpriority: operation === \"read\" && operations.size === 1 ? 50 : 100,\n\t\ttokens: estimateTextTokens(content),\n\t\ttype: \"file\",\n\t});\n}\n\nfunction setItem(state: RestorationTrackerState, item: RestorationItem): void {\n\tstate.items.set(item.label, item);\n}\n\nfunction selectRestorationItems(\n\tstate: RestorationTrackerState,\n\tsettingsInput: RestorationSettings | undefined,\n\tbudgetTokens: number,\n): RestorationItem[] {\n\tconst settings = resolveSettings(settingsInput);\n\tconst candidates = Array.from(state.items.values())\n\t\t.filter((item) => !state.restoredLabels.has(item.label))\n\t\t.map((item) => truncateRestorationItem(item, settings.restorationMaxTokensPerItem))\n\t\t.sort((left, right) => {\n\t\t\tif (left.priority !== right.priority) return right.priority - left.priority;\n\t\t\tif (left.tokens !== right.tokens) return left.tokens - right.tokens;\n\t\t\treturn left.label.localeCompare(right.label);\n\t\t});\n\n\tconst selected: RestorationItem[] = [];\n\tlet totalTokens = 0;\n\tfor (const item of candidates) {\n\t\tif (selected.length >= settings.restorationMaxItems) break;\n\t\tif (totalTokens + item.tokens > budgetTokens) continue;\n\t\tselected.push(item);\n\t\ttotalTokens += item.tokens;\n\t}\n\treturn selected;\n}\n\nfunction buildRestorationContent(options: PreparePendingPayloadOptions, items: RestorationItem[]): string {\n\tconst files = items.filter((item) => item.type === \"file\");\n\tconst skills = items.filter((item) => item.type === \"skill\");\n\tconst lines = [\n\t\t\"[Restored context after compaction — files and skills from before compaction]\",\n\t\t`reason: ${options.reason}`,\n\t\t`compactionEntryId: ${options.compactionEntryId}`,\n\t\t\"\",\n\t];\n\n\tif (files.length > 0) {\n\t\tlines.push(\"<restored-files>\");\n\t\tfor (const file of files) {\n\t\t\tlines.push(`<file label=\"${escapeXmlAttribute(file.label)}\">${file.content}</file>`);\n\t\t}\n\t\tlines.push(\"</restored-files>\");\n\t\tlines.push(\"\");\n\t}\n\n\tif (skills.length > 0) {\n\t\tlines.push(\"<restored-skills>\");\n\t\tfor (const skill of skills) {\n\t\t\tlines.push(`<skill label=\"${escapeXmlAttribute(skill.label)}\">${skill.content}</skill>`);\n\t\t}\n\t\tlines.push(\"</restored-skills>\");\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\nfunction truncateRestorationItem(item: RestorationItem, maxTokens: number): RestorationItem {\n\tif (item.tokens <= maxTokens) return item;\n\tconst truncationNotice = \"[... truncated]\";\n\tconst noticeTokens = estimateTextTokens(truncationNotice);\n\tconst targetTokens = Math.max(0, maxTokens - noticeTokens - 1);\n\tconst truncatedBody = truncateToTokenLimit(item.content, targetTokens);\n\tconst content = truncatedBody.length > 0 ? `${truncatedBody}\\n${truncationNotice}` : truncationNotice;\n\treturn { ...item, content, tokens: estimateTextTokens(content) };\n}\n\nfunction filterAgainstKeptMessages(state: RestorationTrackerState, keptMessages: AgentMessage[]): void {\n\tif (keptMessages.length === 0) return;\n\tconst keptText = keptMessages.map(extractMessageText).join(\"\\n\");\n\tfor (const label of state.items.keys()) {\n\t\tif (keptText.includes(label)) {\n\t\t\tstate.items.delete(label);\n\t\t}\n\t}\n}\n\nfunction extractMessageText(message: AgentMessage): string {\n\tif (\"content\" in message) {\n\t\tif (typeof message.content === \"string\") return message.content;\n\t\tif (Array.isArray(message.content)) {\n\t\t\treturn message.content\n\t\t\t\t.filter((content): content is { type: \"text\"; text: string } => content.type === \"text\")\n\t\t\t\t.map((content) => content.text)\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\t}\n\tif (\"summary\" in message) return message.summary;\n\tif (\"command\" in message) return `${message.command}\\n${message.output}`;\n\treturn \"\";\n}\n\nfunction truncateToTokenLimit(text: string, tokenLimit: number): string {\n\tif (tokenLimit <= 0 || text.length === 0) return \"\";\n\tif (estimateTextTokens(text) <= tokenLimit) return text;\n\n\tlet low = 0;\n\tlet high = text.length;\n\twhile (low < high) {\n\t\tconst mid = Math.ceil((low + high) / 2);\n\t\tconst candidate = text.slice(0, mid);\n\t\tif (estimateTextTokens(candidate) <= tokenLimit) {\n\t\t\tlow = mid;\n\t\t\tcontinue;\n\t\t}\n\t\thigh = mid - 1;\n\t}\n\treturn text.slice(0, low).trimEnd();\n}\n\nfunction resolveSettings(settings: RestorationSettings | undefined): Required<RestorationSettings> {\n\treturn {\n\t\trestorationMaxItems: normalizeNonNegativeInteger(settings?.restorationMaxItems, DEFAULT_RESTORATION_MAX_ITEMS),\n\t\trestorationMaxTokensPerItem: normalizeNonNegativeInteger(\n\t\t\tsettings?.restorationMaxTokensPerItem,\n\t\t\tDEFAULT_RESTORATION_MAX_TOKENS_PER_ITEM,\n\t\t),\n\t\trestorationMaxTotalTokens: normalizeNonNegativeInteger(\n\t\t\tsettings?.restorationMaxTotalTokens,\n\t\t\tDEFAULT_RESTORATION_MAX_TOTAL_TOKENS,\n\t\t),\n\t\trestorationContextRatio: normalizeNonNegativeNumber(\n\t\t\tsettings?.restorationContextRatio,\n\t\t\tDEFAULT_RESTORATION_CONTEXT_RATIO,\n\t\t),\n\t};\n}\n\nfunction normalizeNonNegativeInteger(value: number | undefined, fallback: number): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : fallback;\n}\n\nfunction normalizeNonNegativeNumber(value: number | undefined, fallback: number): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : fallback;\n}\n\nfunction parseFileOperations(content: string | undefined): FileOperation[] {\n\tif (!content) return [];\n\tconst open = content.lastIndexOf(\"(\");\n\tconst close = content.lastIndexOf(\")\");\n\tif (open === -1 || close === -1 || close <= open) return [];\n\treturn content\n\t\t.slice(open + 1, close)\n\t\t.split(\",\")\n\t\t.map((operation) => operation.trim())\n\t\t.filter(\n\t\t\t(operation): operation is FileOperation =>\n\t\t\t\toperation === \"read\" || operation === \"write\" || operation === \"edit\",\n\t\t);\n}\n\nfunction sortOperations(operations: Set<FileOperation>): FileOperation[] {\n\tconst order: FileOperation[] = [\"read\", \"write\", \"edit\"];\n\treturn order.filter((operation) => operations.has(operation));\n}\n\nfunction estimateTextTokens(text: string): number {\n\treturn estimateTokens({ role: \"custom\", customType: \"restoration\", content: text, display: false, timestamp: 0 });\n}\n\nfunction escapeXmlAttribute(value: string): string {\n\treturn value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n"]}
1
+ {"version":3,"file":"restoration-tracker.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/restoration-tracker.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { estimateTokens } from \"../../../compaction/index.ts\";\nimport type { BeforeAgentStartEventResult, CompactionReason } from \"../../types.ts\";\nimport { extractPatchedPaths } from \"../gpt-apply-patch/index.ts\";\n\nexport const POST_COMPACT_RESTORATION_CUSTOM_TYPE = \"compaction.post-compact-restoration\";\n\nconst POST_COMPACT_RESTORATION_SCHEMA = \"senpi.compaction.post-compact-restoration.v1\";\nconst DEFAULT_RESTORATION_MAX_ITEMS = 10;\nconst DEFAULT_RESTORATION_MAX_TOKENS_PER_ITEM = 5000;\nconst DEFAULT_RESTORATION_MAX_TOTAL_TOKENS = 50_000;\nconst DEFAULT_RESTORATION_CONTEXT_RATIO = 0.15;\n\ntype RestorationItemType = \"file\" | \"skill\";\ntype FileOperation = \"read\" | \"write\" | \"edit\";\n\nexport interface RestorationSettings {\n\trestorationMaxItems?: number;\n\trestorationMaxTokensPerItem?: number;\n\trestorationMaxTotalTokens?: number;\n\trestorationContextRatio?: number;\n}\n\nexport interface MinimalToolCallEvent {\n\ttoolName: string;\n\tinput: Record<string, unknown>;\n}\n\nexport interface RestorationItem {\n\tcontent: string;\n\tlabel: string;\n\tpriority: number;\n\ttokens: number;\n\ttype: RestorationItemType;\n}\n\nexport interface PendingRestorationPayload {\n\tcustomType: typeof POST_COMPACT_RESTORATION_CUSTOM_TYPE;\n\tcontent: string;\n\tdisplay: false;\n\tdetails: {\n\t\tschema: typeof POST_COMPACT_RESTORATION_SCHEMA;\n\t\tbudgetTokens: number;\n\t\tcompactionEntryId: string;\n\t\treason: CompactionReason;\n\t\titems: RestorationItem[];\n\t};\n\tbudgetTokens: number;\n}\n\nexport interface PreparePendingPayloadOptions {\n\taccepted: boolean;\n\treason: CompactionReason;\n\tcompactionEntryId: string;\n\tcontextWindow: number;\n\tusageTokens: number | null;\n\treserveTokens: number;\n\tsettings?: RestorationSettings;\n\tkeptMessages?: AgentMessage[];\n}\n\nexport interface RestorationTrackerState {\n\titems: Map<string, RestorationItem>;\n\trestoredLabels: Set<string>;\n\tpendingPayload: PendingRestorationPayload | null;\n}\n\nexport function createRestorationTrackerState(): RestorationTrackerState {\n\treturn {\n\t\titems: new Map(),\n\t\trestoredLabels: new Set(),\n\t\tpendingPayload: null,\n\t};\n}\n\nexport function trackToolCall(state: RestorationTrackerState, event: MinimalToolCallEvent): void {\n\tswitch (event.toolName) {\n\t\tcase \"read\":\n\t\t\ttrackPathInput(state, event.input, \"read\");\n\t\t\treturn;\n\t\tcase \"write\":\n\t\t\ttrackPathInput(state, event.input, \"write\");\n\t\t\treturn;\n\t\tcase \"edit\":\n\t\t\ttrackPathInput(state, event.input, \"edit\");\n\t\t\treturn;\n\t\tcase \"apply_patch\":\n\t\t\ttrackApplyPatchInput(state, event.input);\n\t\t\treturn;\n\t\tcase \"skill\":\n\t\tcase \"load_skill\":\n\t\t\ttrackSkillInput(state, event.input);\n\t\t\treturn;\n\t}\n}\n\nexport function preparePendingPayload(state: RestorationTrackerState, options: PreparePendingPayloadOptions): void {\n\tif (!options.accepted) return;\n\n\tconst budgetTokens = computeRestorationBudget(options);\n\tif (budgetTokens <= 0) {\n\t\tstate.pendingPayload = null;\n\t\treturn;\n\t}\n\n\tfilterAgainstKeptMessages(state, options.keptMessages ?? []);\n\tconst selectedItems = selectRestorationItems(state, options.settings, budgetTokens);\n\tif (selectedItems.length === 0) {\n\t\tstate.pendingPayload = null;\n\t\treturn;\n\t}\n\n\tconst content = buildRestorationContent(options, selectedItems);\n\tstate.pendingPayload = {\n\t\tcustomType: POST_COMPACT_RESTORATION_CUSTOM_TYPE,\n\t\tcontent,\n\t\tdisplay: false,\n\t\tdetails: {\n\t\t\tschema: POST_COMPACT_RESTORATION_SCHEMA,\n\t\t\tbudgetTokens,\n\t\t\tcompactionEntryId: options.compactionEntryId,\n\t\t\treason: options.reason,\n\t\t\titems: selectedItems,\n\t\t},\n\t\tbudgetTokens,\n\t};\n}\n\nexport function consumePendingPayload(\n\tstate: RestorationTrackerState,\n): BeforeAgentStartEventResult[\"message\"] | undefined {\n\tconst payload = state.pendingPayload;\n\tstate.pendingPayload = null;\n\tif (!payload) return undefined;\n\tfor (const item of payload.details.items) {\n\t\tstate.restoredLabels.add(item.label);\n\t}\n\treturn {\n\t\tcustomType: payload.customType,\n\t\tcontent: payload.content,\n\t\tdisplay: payload.display,\n\t\tdetails: payload.details,\n\t};\n}\n\nexport function computeRestorationBudget(options: PreparePendingPayloadOptions): number {\n\tconst settings = resolveSettings(options.settings);\n\tconst contextWindow = Math.max(0, options.contextWindow);\n\tconst configuredBudget = settings.restorationMaxTotalTokens;\n\tconst contextRatioBudget = Math.floor(contextWindow * settings.restorationContextRatio);\n\tconst usageTokens = Math.max(0, options.usageTokens ?? 0);\n\tconst remainingBudget = Math.max(0, contextWindow - usageTokens - options.reserveTokens);\n\treturn Math.floor(Math.min(configuredBudget, contextRatioBudget, remainingBudget));\n}\n\nfunction trackPathInput(\n\tstate: RestorationTrackerState,\n\tinput: Record<string, unknown>,\n\toperation: FileOperation,\n): void {\n\tif (typeof input.path !== \"string\" || input.path.length === 0) return;\n\ttrackFile(state, input.path, operation);\n}\n\nfunction trackApplyPatchInput(state: RestorationTrackerState, input: Record<string, unknown>): void {\n\tif (typeof input.input !== \"string\") return;\n\tfor (const path of extractPatchedPaths(input.input)) {\n\t\tif (path.length > 0) trackFile(state, path, \"edit\");\n\t}\n}\n\nfunction trackSkillInput(state: RestorationTrackerState, input: Record<string, unknown>): void {\n\tconst skillName = typeof input.name === \"string\" ? input.name : input.skillName;\n\tif (typeof skillName === \"string\" && skillName.length > 0) {\n\t\tsetItem(state, {\n\t\t\tcontent: skillName,\n\t\t\tlabel: skillName,\n\t\t\tpriority: 80,\n\t\t\ttokens: estimateTextTokens(skillName),\n\t\t\ttype: \"skill\",\n\t\t});\n\t}\n}\n\nfunction trackFile(state: RestorationTrackerState, path: string, operation: FileOperation): void {\n\tconst label = path;\n\tconst existing = state.items.get(label);\n\tconst operations = new Set<FileOperation>(parseFileOperations(existing?.content));\n\toperations.add(operation);\n\tconst content = `${path} (${sortOperations(operations).join(\", \")})`;\n\tsetItem(state, {\n\t\tcontent,\n\t\tlabel,\n\t\tpriority: operation === \"read\" && operations.size === 1 ? 50 : 100,\n\t\ttokens: estimateTextTokens(content),\n\t\ttype: \"file\",\n\t});\n}\n\nfunction setItem(state: RestorationTrackerState, item: RestorationItem): void {\n\tstate.items.set(item.label, item);\n}\n\nfunction selectRestorationItems(\n\tstate: RestorationTrackerState,\n\tsettingsInput: RestorationSettings | undefined,\n\tbudgetTokens: number,\n): RestorationItem[] {\n\tconst settings = resolveSettings(settingsInput);\n\tconst candidates = Array.from(state.items.values())\n\t\t.filter((item) => !state.restoredLabels.has(item.label))\n\t\t.map((item) => truncateRestorationItem(item, settings.restorationMaxTokensPerItem))\n\t\t.sort((left, right) => {\n\t\t\tif (left.priority !== right.priority) return right.priority - left.priority;\n\t\t\tif (left.tokens !== right.tokens) return left.tokens - right.tokens;\n\t\t\treturn left.label.localeCompare(right.label);\n\t\t});\n\n\tconst selected: RestorationItem[] = [];\n\tlet totalTokens = 0;\n\tfor (const item of candidates) {\n\t\tif (selected.length >= settings.restorationMaxItems) break;\n\t\tif (totalTokens + item.tokens > budgetTokens) continue;\n\t\tselected.push(item);\n\t\ttotalTokens += item.tokens;\n\t}\n\treturn selected;\n}\n\nfunction buildRestorationContent(options: PreparePendingPayloadOptions, items: RestorationItem[]): string {\n\tconst files = items.filter((item) => item.type === \"file\");\n\tconst skills = items.filter((item) => item.type === \"skill\");\n\tconst lines = [\n\t\t\"[Restored context after compaction — files and skills from before compaction]\",\n\t\t`reason: ${options.reason}`,\n\t\t`compactionEntryId: ${options.compactionEntryId}`,\n\t\t\"\",\n\t];\n\n\tif (files.length > 0) {\n\t\tlines.push(\"<restored-files>\");\n\t\tfor (const file of files) {\n\t\t\tlines.push(`<file label=\"${escapeXmlAttribute(file.label)}\">${file.content}</file>`);\n\t\t}\n\t\tlines.push(\"</restored-files>\");\n\t\tlines.push(\"\");\n\t}\n\n\tif (skills.length > 0) {\n\t\tlines.push(\"<restored-skills>\");\n\t\tfor (const skill of skills) {\n\t\t\tlines.push(`<skill label=\"${escapeXmlAttribute(skill.label)}\">${skill.content}</skill>`);\n\t\t}\n\t\tlines.push(\"</restored-skills>\");\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\nfunction truncateRestorationItem(item: RestorationItem, maxTokens: number): RestorationItem {\n\tif (item.tokens <= maxTokens) return item;\n\tconst truncationNotice = \"[... truncated]\";\n\tconst noticeTokens = estimateTextTokens(truncationNotice);\n\tconst targetTokens = Math.max(0, maxTokens - noticeTokens - 1);\n\tconst truncatedBody = truncateToTokenLimit(item.content, targetTokens);\n\tconst content = truncatedBody.length > 0 ? `${truncatedBody}\\n${truncationNotice}` : truncationNotice;\n\treturn { ...item, content, tokens: estimateTextTokens(content) };\n}\n\nfunction filterAgainstKeptMessages(state: RestorationTrackerState, keptMessages: AgentMessage[]): void {\n\tif (keptMessages.length === 0) return;\n\tconst keptText = keptMessages.map(extractMessageText).join(\"\\n\");\n\tfor (const label of state.items.keys()) {\n\t\tif (keptText.includes(label)) {\n\t\t\tstate.items.delete(label);\n\t\t}\n\t}\n}\n\nfunction extractMessageText(message: AgentMessage): string {\n\tif (\"content\" in message) {\n\t\tif (typeof message.content === \"string\") return message.content;\n\t\tif (Array.isArray(message.content)) {\n\t\t\treturn message.content\n\t\t\t\t.filter((content): content is { type: \"text\"; text: string } => content.type === \"text\")\n\t\t\t\t.map((content) => content.text)\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\t}\n\tif (\"summary\" in message) return message.summary;\n\tif (\"command\" in message) return `${message.command}\\n${message.output}`;\n\treturn \"\";\n}\n\nfunction truncateToTokenLimit(text: string, tokenLimit: number): string {\n\tif (tokenLimit <= 0 || text.length === 0) return \"\";\n\tif (estimateTextTokens(text) <= tokenLimit) return text;\n\n\tlet low = 0;\n\tlet high = text.length;\n\twhile (low < high) {\n\t\tconst mid = Math.ceil((low + high) / 2);\n\t\tconst candidate = text.slice(0, mid);\n\t\tif (estimateTextTokens(candidate) <= tokenLimit) {\n\t\t\tlow = mid;\n\t\t\tcontinue;\n\t\t}\n\t\thigh = mid - 1;\n\t}\n\treturn text.slice(0, low).trimEnd();\n}\n\nfunction resolveSettings(settings: RestorationSettings | undefined): Required<RestorationSettings> {\n\treturn {\n\t\trestorationMaxItems: normalizeNonNegativeInteger(settings?.restorationMaxItems, DEFAULT_RESTORATION_MAX_ITEMS),\n\t\trestorationMaxTokensPerItem: normalizeNonNegativeInteger(\n\t\t\tsettings?.restorationMaxTokensPerItem,\n\t\t\tDEFAULT_RESTORATION_MAX_TOKENS_PER_ITEM,\n\t\t),\n\t\trestorationMaxTotalTokens: normalizeNonNegativeInteger(\n\t\t\tsettings?.restorationMaxTotalTokens,\n\t\t\tDEFAULT_RESTORATION_MAX_TOTAL_TOKENS,\n\t\t),\n\t\trestorationContextRatio: normalizeNonNegativeNumber(\n\t\t\tsettings?.restorationContextRatio,\n\t\t\tDEFAULT_RESTORATION_CONTEXT_RATIO,\n\t\t),\n\t};\n}\n\nfunction normalizeNonNegativeInteger(value: number | undefined, fallback: number): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : fallback;\n}\n\nfunction normalizeNonNegativeNumber(value: number | undefined, fallback: number): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : fallback;\n}\n\nfunction parseFileOperations(content: string | undefined): FileOperation[] {\n\tif (!content) return [];\n\tconst open = content.lastIndexOf(\"(\");\n\tconst close = content.lastIndexOf(\")\");\n\tif (open === -1 || close === -1 || close <= open) return [];\n\treturn content\n\t\t.slice(open + 1, close)\n\t\t.split(\",\")\n\t\t.map((operation) => operation.trim())\n\t\t.filter(\n\t\t\t(operation): operation is FileOperation =>\n\t\t\t\toperation === \"read\" || operation === \"write\" || operation === \"edit\",\n\t\t);\n}\n\nfunction sortOperations(operations: Set<FileOperation>): FileOperation[] {\n\tconst order: FileOperation[] = [\"read\", \"write\", \"edit\"];\n\treturn order.filter((operation) => operations.has(operation));\n}\n\nfunction estimateTextTokens(text: string): number {\n\treturn estimateTokens({ role: \"custom\", customType: \"restoration\", content: text, display: false, timestamp: 0 });\n}\n\nfunction escapeXmlAttribute(value: string): string {\n\treturn value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n"]}
@@ -31,11 +31,6 @@ export type SpeculativeCompactionResult = ApplyCompactionResult | {
31
31
  applied: false;
32
32
  reason: "unavailable";
33
33
  };
34
- export type ExtensionCompactionRequest = {
35
- customInstructions?: string;
36
- generation: number;
37
- signal?: AbortSignal;
38
- };
39
34
  export declare function truncateContextMessages(messages: AgentMessage[]): AgentMessage[];
40
35
  export declare function hardLimitEmergencyPrune(messages: AgentMessage[], contextWindow: number): {
41
36
  messages: AgentMessage[];
@@ -54,7 +49,6 @@ export declare function createSpeculativeCompactionSnapshot(context: Speculative
54
49
  }): SpeculativeCompactionSnapshot | undefined;
55
50
  export declare function runExtensionCompaction(context: SpeculativeCompactionContext, snapshot: SpeculativeCompactionSnapshot, signal?: AbortSignal, onProgress?: CompactionProgressCallback): Promise<CompactionResult | undefined>;
56
51
  export declare function applyGeneratedCompaction(context: SpeculativeCompactionContext, snapshot: SpeculativeCompactionSnapshot | undefined, getCurrentGeneration: () => number, compaction: CompactionResult | undefined): Promise<SpeculativeCompactionResult>;
57
- export declare function snapshotExtensionCompaction(context: SpeculativeCompactionContext, request: ExtensionCompactionRequest): SpeculativeCompactionSnapshot | undefined;
58
52
  export declare function applySpeculativeCompaction(context: SpeculativeCompactionContext, snapshot: SpeculativeCompactionSnapshot | undefined, getCurrentGeneration: () => number, generate: () => Promise<CompactionResult | undefined>): Promise<SpeculativeCompactionResult>;
59
53
  export {};
60
54
  //# sourceMappingURL=speculative.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"speculative.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/speculative.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype AssistantMessage,\n\tisContextOverflow,\n\ttype Message,\n\ttype Model,\n\tstream,\n\ttype TextContent,\n} from \"@earendil-works/pi-ai\";\nimport {\n\ttype CompactionPreparation,\n\ttype CompactionResult,\n\tDEFAULT_COMPACTION_SETTINGS,\n\testimateContextTokens,\n\testimateTokens,\n\tprepareCompaction,\n\tserializeConversation,\n} from \"../../../compaction/index.ts\";\nimport { convertToLlm } from \"../../../messages.ts\";\nimport type { ModelRegistry } from \"../../../model-registry.ts\";\nimport type { ReadonlySessionManager } from \"../../../session-manager.ts\";\nimport type { ApplyCompactionResult, ContextUsage } from \"../../types.ts\";\nimport { computeEffectiveKeepRecentTokens, computeEffectiveThreshold } from \"./policy.ts\";\nimport { buildPrompt, type MergedCompactionPromptVariant } from \"./prompts.ts\";\nimport * as truncation from \"./tool-truncation.ts\";\n\nconst DEFAULT_CONTEXT_WINDOW = 200_000;\nconst COMPACTION_BUDGET_RATIO = 0.6;\nconst EMERGENCY_CONTEXT_TARGET_RATIO = 0.95;\nconst MAX_SUMMARY_TOKENS = 8192;\nconst SUMMARY_SCHEMA = \"senpi.compaction.summary.v1\";\ntype CompactionProgressCallback = (delta: string) => void;\n\nexport interface SpeculativeCompactionContext {\n\tmodel: Model<any> | undefined;\n\tsessionManager: ReadonlySessionManager;\n\tmodelRegistry?: ModelRegistry;\n\tgetContextUsage(): ContextUsage | undefined;\n\tgetCompactionSettings?(): CompactionPreparation[\"settings\"];\n\tgetMessageRevision(): number;\n\tapplyCompaction(\n\t\tprecomputed: CompactionResult,\n\t\toptions: { reason: \"extension\"; expectedRevision: number },\n\t): Promise<ApplyCompactionResult>;\n}\n\nexport interface SpeculativeCompactionSnapshot {\n\tgeneration: number;\n\texpectedRevision: number;\n\tmodel: Model<any>;\n\tcontextWindow: number;\n\tpreparation: CompactionPreparation;\n\tpromptVariant: MergedCompactionPromptVariant;\n\tcustomInstructions?: string;\n}\n\nexport type SpeculativeCompactionResult = ApplyCompactionResult | { applied: false; reason: \"unavailable\" };\n\nexport type ExtensionCompactionRequest = {\n\tcustomInstructions?: string;\n\tgeneration: number;\n\tsignal?: AbortSignal;\n};\n\nfunction approxTokens(text: string): number {\n\treturn Math.ceil(text.length / 4);\n}\n\nfunction getSummaryText(message: Message): string {\n\tconst content = Array.isArray(message.content)\n\t\t? message.content\n\t\t: [{ type: \"text\" as const, text: message.content }];\n\treturn content\n\t\t.filter((content): content is TextContent => content.type === \"text\")\n\t\t.map((content) => content.text)\n\t\t.join(\"\\n\")\n\t\t.trim();\n}\n\nfunction isAssistantMessage(message: Message): message is AssistantMessage {\n\treturn message.role === \"assistant\" && \"stopReason\" in message;\n}\n\nasync function generateSummaryMessage(options: {\n\tmessages: AgentMessage[];\n\tonProgress?: CompactionProgressCallback;\n\tprompt: ReturnType<typeof buildPrompt>;\n\tsignal?: AbortSignal;\n\tsnapshot: SpeculativeCompactionSnapshot;\n\tauth: {\n\t\tapiKey: string;\n\t\theaders?: Record<string, string>;\n\t\textraBody?: Record<string, unknown>;\n\t};\n}): Promise<Message | undefined> {\n\tconst conversationText = serializeConversation(convertToLlm(options.messages));\n\tconst responseStream = stream(\n\t\toptions.snapshot.model,\n\t\t{\n\t\t\tsystemPrompt: options.prompt.system,\n\t\t\tmessages: [\n\t\t\t\t{\n\t\t\t\t\trole: \"user\",\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `${options.prompt.user}\\n\\n<conversation>\\n${conversationText}\\n</conversation>`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tapiKey: options.auth.apiKey,\n\t\t\theaders: options.auth.headers,\n\t\t\textraBody: options.auth.extraBody,\n\t\t\tmaxTokens: MAX_SUMMARY_TOKENS,\n\t\t\tsignal: options.signal,\n\t\t},\n\t);\n\tfor await (const event of responseStream) {\n\t\tif (event.type === \"text_delta\" && event.delta) {\n\t\t\toptions.onProgress?.(event.delta);\n\t\t}\n\t}\n\treturn await responseStream.result();\n}\n\nfunction pruneToolResults(messages: AgentMessage[], contextWindow: number): AgentMessage[] {\n\tconst toolResults = messages\n\t\t.filter((message) => message.role === \"toolResult\")\n\t\t.map((message) => ({ content: message.content, details: undefined }));\n\tif (toolResults.length === 0) return messages;\n\n\tconst prunedResults = truncation.prePruneToolOutputsToBudget(toolResults, contextWindow * COMPACTION_BUDGET_RATIO);\n\tlet resultIndex = 0;\n\treturn messages.map((message) => {\n\t\tif (message.role !== \"toolResult\") return message;\n\t\tconst pruned = prunedResults[resultIndex];\n\t\tresultIndex++;\n\t\treturn pruned ? { ...message, content: pruned.content } : message;\n\t});\n}\n\nexport function truncateContextMessages(messages: AgentMessage[]): AgentMessage[] {\n\tconst toolResults = messages\n\t\t.filter((message) => message.role === \"toolResult\")\n\t\t.map((message) => ({ content: message.content, details: undefined }));\n\tif (toolResults.length === 0) return messages;\n\n\tconst truncatedResults = truncation.truncateOversizedToolResults(toolResults);\n\tlet resultIndex = 0;\n\treturn messages.map((message) => {\n\t\tif (message.role !== \"toolResult\") return message;\n\t\tconst truncated = truncatedResults[resultIndex];\n\t\tresultIndex++;\n\t\treturn truncated ? { ...message, content: truncated.content } : message;\n\t});\n}\n\nfunction getToolCallIds(message: AgentMessage): Set<string> {\n\tconst ids = new Set<string>();\n\tif (message.role !== \"assistant\") return ids;\n\tfor (const block of message.content) {\n\t\tif (block.type === \"toolCall\") ids.add(block.id);\n\t}\n\treturn ids;\n}\n\nfunction findLastUserLikeIndex(messages: AgentMessage[]): number {\n\tfor (let index = messages.length - 1; index >= 0; index--) {\n\t\tconst role = messages[index]?.role;\n\t\tif (role === \"user\" || role === \"bashExecution\") return index;\n\t}\n\treturn messages.length;\n}\n\nfunction removeAssistantToolPair(messages: AgentMessage[], assistantIndex: number): AgentMessage[] {\n\tconst ids = getToolCallIds(messages[assistantIndex]);\n\treturn messages.filter((message, index) => {\n\t\tif (index === assistantIndex) return false;\n\t\treturn message.role !== \"toolResult\" || !ids.has(message.toolCallId);\n\t});\n}\n\nfunction removeFirstOldToolPair(messages: AgentMessage[], boundaryIndex: number): AgentMessage[] | undefined {\n\tfor (let index = 0; index < boundaryIndex; index++) {\n\t\tconst message = messages[index];\n\t\tif (!message) continue;\n\t\tif (message.role === \"assistant\" && getToolCallIds(message).size > 0)\n\t\t\treturn removeAssistantToolPair(messages, index);\n\t\tif (message.role === \"toolResult\") return messages.filter((_message, candidateIndex) => candidateIndex !== index);\n\t}\n\treturn undefined;\n}\n\nfunction removeFirstOldMessage(messages: AgentMessage[], boundaryIndex: number): AgentMessage[] | undefined {\n\tfor (let index = 0; index < boundaryIndex; index++) {\n\t\tconst message = messages[index];\n\t\tif (!message || message.role === \"toolResult\") continue;\n\t\tif (message.role === \"assistant\" && getToolCallIds(message).size > 0)\n\t\t\treturn removeAssistantToolPair(messages, index);\n\t\treturn messages.filter((_candidate, candidateIndex) => candidateIndex !== index);\n\t}\n\treturn undefined;\n}\n\nfunction pruneOldMessagesToBudget(messages: AgentMessage[], targetTokens: number): AgentMessage[] {\n\tlet pruned = messages;\n\twhile (estimateTotalTokens(pruned) > targetTokens) {\n\t\tconst boundaryIndex = findLastUserLikeIndex(pruned);\n\t\tconst next = removeFirstOldToolPair(pruned, boundaryIndex) ?? removeFirstOldMessage(pruned, boundaryIndex);\n\t\tif (!next || next.length === pruned.length) break;\n\t\tpruned = next;\n\t}\n\treturn pruned;\n}\n\nfunction removeOldestHistoryItemForOverflowRetry(messages: AgentMessage[]): AgentMessage[] | undefined {\n\tif (messages.length <= 1) return undefined;\n\tconst boundaryIndex = findLastUserLikeIndex(messages);\n\treturn (\n\t\tremoveFirstOldToolPair(messages, boundaryIndex) ??\n\t\tremoveFirstOldMessage(messages, boundaryIndex) ??\n\t\t(messages.length > 1 ? messages.slice(1) : undefined)\n\t);\n}\n\nfunction estimateTotalTokens(messages: AgentMessage[]): number {\n\tlet total = 0;\n\tfor (const message of messages) total += estimateTokens(message);\n\treturn total;\n}\n\nexport function hardLimitEmergencyPrune(\n\tmessages: AgentMessage[],\n\tcontextWindow: number,\n): {\n\tmessages: AgentMessage[];\n\tneedsAggressiveCompaction: boolean;\n} {\n\tconst targetTokens = Math.floor(contextWindow * EMERGENCY_CONTEXT_TARGET_RATIO);\n\tconst noLlmPruned = truncateContextMessages(pruneToolResults(messages, contextWindow));\n\tif (estimateTotalTokens(noLlmPruned) <= targetTokens) {\n\t\treturn { messages: noLlmPruned, needsAggressiveCompaction: false };\n\t}\n\treturn {\n\t\tmessages: pruneOldMessagesToBudget(noLlmPruned, targetTokens),\n\t\tneedsAggressiveCompaction: true,\n\t};\n}\n\nexport function getPromptVariant(options: {\n\treason: string;\n\tpreparation: { previousSummary?: string; isSplitTurn: boolean };\n}): MergedCompactionPromptVariant {\n\tif (options.reason === \"branch\") return \"branch\";\n\tif (options.preparation.previousSummary) return \"update\";\n\tif (options.preparation.isSplitTurn) return \"turn_prefix\";\n\treturn \"default\";\n}\n\nexport function createSpeculativeCompactionSnapshot(\n\tcontext: SpeculativeCompactionContext,\n\toptions: { customInstructions?: string; generation: number },\n): SpeculativeCompactionSnapshot | undefined {\n\tconst model = context.model;\n\tif (!model) return undefined;\n\n\tconst expectedRevision = context.getMessageRevision();\n\tconst branchEntries = context.sessionManager.getBranch();\n\tconst contextWindow = context.getContextUsage()?.contextWindow ?? model.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\tconst settings = context.getCompactionSettings?.() ?? DEFAULT_COMPACTION_SETTINGS;\n\tconst thresholdRatio = computeEffectiveThreshold(contextWindow);\n\tconst preparation = prepareCompaction(branchEntries, {\n\t\t...settings,\n\t\tkeepRecentTokens: computeEffectiveKeepRecentTokens(settings.keepRecentTokens, contextWindow, thresholdRatio),\n\t});\n\tif (!preparation) return undefined;\n\n\treturn {\n\t\tgeneration: options.generation,\n\t\texpectedRevision,\n\t\tmodel,\n\t\tcontextWindow,\n\t\tpreparation,\n\t\tpromptVariant: getPromptVariant({ reason: \"extension\", preparation }),\n\t\tcustomInstructions: options.customInstructions,\n\t};\n}\n\nexport async function runExtensionCompaction(\n\tcontext: SpeculativeCompactionContext,\n\tsnapshot: SpeculativeCompactionSnapshot,\n\tsignal?: AbortSignal,\n\tonProgress?: CompactionProgressCallback,\n): Promise<CompactionResult | undefined> {\n\tconst auth = await context.modelRegistry?.getApiKeyAndHeaders(snapshot.model);\n\tif (!auth?.ok || !auth.apiKey) return undefined;\n\n\tlet messages = pruneToolResults(\n\t\t[...snapshot.preparation.messagesToSummarize, ...snapshot.preparation.turnPrefixMessages],\n\t\tsnapshot.contextWindow,\n\t);\n\tconst prompt = buildPrompt({\n\t\tvariant: snapshot.promptVariant,\n\t\tpreviousSummary: snapshot.preparation.previousSummary,\n\t\tcustomInstructions: snapshot.customInstructions,\n\t});\n\n\twhile (true) {\n\t\tconst response = await generateSummaryMessage({\n\t\t\tmessages,\n\t\t\tonProgress,\n\t\t\tprompt,\n\t\t\tsignal,\n\t\t\tsnapshot,\n\t\t\tauth: {\n\t\t\t\tapiKey: auth.apiKey,\n\t\t\t\theaders: auth.headers,\n\t\t\t\textraBody: auth.extraBody,\n\t\t\t},\n\t\t});\n\t\tif (!response) return undefined;\n\n\t\tif (isAssistantMessage(response) && isContextOverflow(response, snapshot.contextWindow)) {\n\t\t\tconst retryMessages = removeOldestHistoryItemForOverflowRetry(messages);\n\t\t\tif (!retryMessages || retryMessages.length === messages.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmessages = retryMessages;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst summary = getSummaryText(response);\n\t\tif (!summary) return undefined;\n\n\t\tconst tokenEstimate = estimateContextTokens(convertToLlm(messages)).tokens + approxTokens(summary);\n\t\tif (tokenEstimate > snapshot.contextWindow * COMPACTION_BUDGET_RATIO) return undefined;\n\n\t\treturn {\n\t\t\tsummary,\n\t\t\tfirstKeptEntryId: snapshot.preparation.firstKeptEntryId,\n\t\t\ttokensBefore: snapshot.preparation.tokensBefore,\n\t\t\tdetails: { schema: SUMMARY_SCHEMA, promptVariant: snapshot.promptVariant, tokenEstimate },\n\t\t};\n\t}\n\n\tthrow new Error(\"Compaction summary request exceeded the context window after retrying with a smaller input\");\n}\n\nexport async function applyGeneratedCompaction(\n\tcontext: SpeculativeCompactionContext,\n\tsnapshot: SpeculativeCompactionSnapshot | undefined,\n\tgetCurrentGeneration: () => number,\n\tcompaction: CompactionResult | undefined,\n): Promise<SpeculativeCompactionResult> {\n\tif (!snapshot || !compaction) return { applied: false, reason: \"unavailable\" };\n\n\tif (snapshot.generation !== getCurrentGeneration() || snapshot.expectedRevision !== context.getMessageRevision()) {\n\t\treturn { applied: false, reason: \"stale\" };\n\t}\n\n\treturn await context.applyCompaction(compaction, {\n\t\treason: \"extension\",\n\t\texpectedRevision: snapshot.expectedRevision,\n\t});\n}\n\nexport function snapshotExtensionCompaction(\n\tcontext: SpeculativeCompactionContext,\n\trequest: ExtensionCompactionRequest,\n): SpeculativeCompactionSnapshot | undefined {\n\treturn createSpeculativeCompactionSnapshot(context, request);\n}\n\nexport async function applySpeculativeCompaction(\n\tcontext: SpeculativeCompactionContext,\n\tsnapshot: SpeculativeCompactionSnapshot | undefined,\n\tgetCurrentGeneration: () => number,\n\tgenerate: () => Promise<CompactionResult | undefined>,\n): Promise<SpeculativeCompactionResult> {\n\tif (!snapshot) return { applied: false, reason: \"unavailable\" };\n\n\tconst compaction = await generate();\n\treturn await applyGeneratedCompaction(context, snapshot, getCurrentGeneration, compaction);\n}\n"]}
1
+ {"version":3,"file":"speculative.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/speculative.ts"],"names":[],"mappings":"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"}
@@ -265,9 +265,6 @@ export async function applyGeneratedCompaction(context, snapshot, getCurrentGene
265
265
  expectedRevision: snapshot.expectedRevision,
266
266
  });
267
267
  }
268
- export function snapshotExtensionCompaction(context, request) {
269
- return createSpeculativeCompactionSnapshot(context, request);
270
- }
271
268
  export async function applySpeculativeCompaction(context, snapshot, getCurrentGeneration, generate) {
272
269
  if (!snapshot)
273
270
  return { applied: false, reason: "unavailable" };