@bastani/atomic 0.9.8 → 0.9.9-alpha.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 (814) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/builtin/cursor/CHANGELOG.md +12 -0
  3. package/dist/builtin/cursor/package.json +3 -3
  4. package/dist/builtin/intercom/CHANGELOG.md +13 -0
  5. package/dist/builtin/intercom/package.json +3 -3
  6. package/dist/builtin/mcp/CHANGELOG.md +13 -0
  7. package/dist/builtin/mcp/package.json +4 -4
  8. package/dist/builtin/subagents/CHANGELOG.md +13 -0
  9. package/dist/builtin/subagents/package.json +5 -5
  10. package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +2 -0
  11. package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +7 -1
  12. package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +2 -0
  13. package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +8 -2
  14. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +2 -0
  15. package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +2 -0
  16. package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +2 -1
  17. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +2 -0
  18. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +2 -0
  19. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +2 -0
  20. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +2 -0
  21. package/dist/builtin/subagents/src/runs/shared/pi-args.ts +6 -0
  22. package/dist/builtin/subagents/src/shared/types-config.ts +4 -0
  23. package/dist/builtin/subagents/src/shared/types-depth.ts +29 -2
  24. package/dist/builtin/web-access/CHANGELOG.md +13 -0
  25. package/dist/builtin/web-access/package.json +3 -3
  26. package/dist/builtin/web-access/web-search-tool.ts +1 -2
  27. package/dist/builtin/workflows/CHANGELOG.md +29 -0
  28. package/dist/builtin/workflows/README.md +17 -8
  29. package/dist/builtin/workflows/builtin/goal-prompts.ts +8 -2
  30. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +26 -9
  31. package/dist/builtin/workflows/builtin/ralph-forked-prompts.ts +1 -1
  32. package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +8 -3
  33. package/dist/builtin/workflows/builtin/ralph-runner.ts +2 -0
  34. package/dist/builtin/workflows/builtin/shared-prompts.ts +24 -1
  35. package/dist/builtin/workflows/package.json +3 -3
  36. package/dist/builtin/workflows/src/durable/backend.ts +53 -15
  37. package/dist/builtin/workflows/src/durable/completed-catalog.ts +245 -0
  38. package/dist/builtin/workflows/src/durable/completed-inspection.ts +213 -0
  39. package/dist/builtin/workflows/src/durable/dbos-backend.ts +120 -170
  40. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +84 -8
  41. package/dist/builtin/workflows/src/durable/dbos-metadata.ts +98 -0
  42. package/dist/builtin/workflows/src/durable/dbos-tombstone.ts +27 -0
  43. package/dist/builtin/workflows/src/durable/factory.ts +1 -1
  44. package/dist/builtin/workflows/src/durable/file-backend.ts +247 -241
  45. package/dist/builtin/workflows/src/durable/file-lock.ts +153 -0
  46. package/dist/builtin/workflows/src/durable/file-state.ts +104 -0
  47. package/dist/builtin/workflows/src/durable/format-version.ts +12 -0
  48. package/dist/builtin/workflows/src/durable/index.ts +12 -0
  49. package/dist/builtin/workflows/src/durable/resume-catalog.ts +16 -27
  50. package/dist/builtin/workflows/src/durable/resume-eligibility.ts +20 -0
  51. package/dist/builtin/workflows/src/durable/resume-runtime.ts +29 -29
  52. package/dist/builtin/workflows/src/durable/scoped-backend.ts +20 -3
  53. package/dist/builtin/workflows/src/durable/stage-primitive.ts +29 -8
  54. package/dist/builtin/workflows/src/durable/types.ts +3 -0
  55. package/dist/builtin/workflows/src/engine/primitives/task.ts +1 -0
  56. package/dist/builtin/workflows/src/engine/run.ts +14 -14
  57. package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +39 -9
  58. package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +10 -0
  59. package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +133 -0
  60. package/dist/builtin/workflows/src/extension/runtime.ts +15 -40
  61. package/dist/builtin/workflows/src/extension/wiring.ts +9 -6
  62. package/dist/builtin/workflows/src/extension/workflow-durable-resume-command.ts +226 -0
  63. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +1 -0
  64. package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +66 -112
  65. package/dist/builtin/workflows/src/extension/workflow-schema.ts +5 -5
  66. package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +16 -1
  67. package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +50 -43
  68. package/dist/builtin/workflows/src/runs/foreground/executor-direct-output.ts +91 -0
  69. package/dist/builtin/workflows/src/runs/foreground/executor-direct.ts +95 -46
  70. package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +3 -1
  71. package/dist/builtin/workflows/src/runs/foreground/executor-task-prompts.ts +1 -1
  72. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +3 -0
  73. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +1 -1
  74. package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +36 -7
  75. package/dist/builtin/workflows/src/runs/shared/worktree-cache-lifecycle.ts +25 -0
  76. package/dist/builtin/workflows/src/runs/shared/worktree-cwd.ts +103 -0
  77. package/dist/builtin/workflows/src/runs/shared/worktree-generation.ts +57 -0
  78. package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +134 -8
  79. package/dist/builtin/workflows/src/runs/shared/worktree.ts +2 -0
  80. package/dist/builtin/workflows/src/shared/resumable-workflow-notices.ts +43 -0
  81. package/dist/builtin/workflows/src/shared/serializable.ts +1 -1
  82. package/dist/builtin/workflows/src/shared/timing.ts +4 -0
  83. package/dist/builtin/workflows/src/shared/types.ts +5 -3
  84. package/dist/builtin/workflows/src/tui/graph-view-constants.ts +1 -0
  85. package/dist/builtin/workflows/src/tui/graph-view-input.ts +24 -14
  86. package/dist/builtin/workflows/src/tui/workflow-resume-selector.ts +43 -13
  87. package/dist/bun/cli.d.ts.map +1 -1
  88. package/dist/bun/internal-intercom-broker.d.ts.map +1 -1
  89. package/dist/bun/register-bedrock.d.ts.map +1 -1
  90. package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
  91. package/dist/bun/split-loader.d.ts.map +1 -1
  92. package/dist/cli/args.d.ts.map +1 -1
  93. package/dist/cli/config-selector.d.ts.map +1 -1
  94. package/dist/cli/file-processor.d.ts.map +1 -1
  95. package/dist/cli/initial-message.d.ts.map +1 -1
  96. package/dist/cli/list-models.d.ts.map +1 -1
  97. package/dist/cli/project-trust.d.ts.map +1 -1
  98. package/dist/cli/session-picker.d.ts.map +1 -1
  99. package/dist/cli/startup-ui.d.ts.map +1 -1
  100. package/dist/cli.d.ts.map +1 -1
  101. package/dist/config-self-update.d.ts.map +1 -1
  102. package/dist/config.d.ts.map +1 -1
  103. package/dist/core/agent-session-accessors.d.ts.map +1 -1
  104. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  105. package/dist/core/agent-session-auto-compaction.js +5 -7
  106. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  107. package/dist/core/agent-session-bash.d.ts.map +1 -1
  108. package/dist/core/agent-session-compaction.d.ts +6 -34
  109. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  110. package/dist/core/agent-session-compaction.js +95 -233
  111. package/dist/core/agent-session-compaction.js.map +1 -1
  112. package/dist/core/agent-session-events.d.ts.map +1 -1
  113. package/dist/core/agent-session-export.d.ts.map +1 -1
  114. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  115. package/dist/core/agent-session-message-queue.d.ts +0 -4
  116. package/dist/core/agent-session-message-queue.d.ts.map +1 -1
  117. package/dist/core/agent-session-message-queue.js +1 -5
  118. package/dist/core/agent-session-message-queue.js.map +1 -1
  119. package/dist/core/agent-session-methods.d.ts +5 -6
  120. package/dist/core/agent-session-methods.d.ts.map +1 -1
  121. package/dist/core/agent-session-methods.js.map +1 -1
  122. package/dist/core/agent-session-models.d.ts.map +1 -1
  123. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  124. package/dist/core/agent-session-retry.d.ts.map +1 -1
  125. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  126. package/dist/core/agent-session-services.d.ts.map +1 -1
  127. package/dist/core/agent-session-skill-block.d.ts.map +1 -1
  128. package/dist/core/agent-session-state.d.ts.map +1 -1
  129. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  130. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  131. package/dist/core/agent-session-tree.d.ts.map +1 -1
  132. package/dist/core/agent-session-types.d.ts +2 -12
  133. package/dist/core/agent-session-types.d.ts.map +1 -1
  134. package/dist/core/agent-session-types.js.map +1 -1
  135. package/dist/core/agent-session.d.ts.map +1 -1
  136. package/dist/core/anthropic-thinking-guard.d.ts.map +1 -1
  137. package/dist/core/async/format.d.ts.map +1 -1
  138. package/dist/core/async/job-manager.d.ts.map +1 -1
  139. package/dist/core/async/session-manager.d.ts.map +1 -1
  140. package/dist/core/async/types.d.ts.map +1 -1
  141. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  142. package/dist/core/auth-guidance.d.ts.map +1 -1
  143. package/dist/core/auth-storage-backends.d.ts.map +1 -1
  144. package/dist/core/auth-storage.d.ts +4 -0
  145. package/dist/core/auth-storage.d.ts.map +1 -1
  146. package/dist/core/bash-executor.d.ts.map +1 -1
  147. package/dist/core/builtin-packages.d.ts.map +1 -1
  148. package/dist/core/codex-fast-mode.d.ts.map +1 -1
  149. package/dist/core/compaction/branch-summarization.d.ts +1 -1
  150. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  151. package/dist/core/compaction/branch-summarization.js +1 -2
  152. package/dist/core/compaction/branch-summarization.js.map +1 -1
  153. package/dist/core/compaction/compaction-boundary.d.ts +9 -0
  154. package/dist/core/compaction/compaction-boundary.d.ts.map +1 -0
  155. package/dist/core/compaction/compaction-boundary.js +115 -0
  156. package/dist/core/compaction/compaction-boundary.js.map +1 -0
  157. package/dist/core/compaction/compaction-parameters.d.ts +5 -0
  158. package/dist/core/compaction/compaction-parameters.d.ts.map +1 -0
  159. package/dist/core/compaction/compaction-parameters.js +27 -0
  160. package/dist/core/compaction/compaction-parameters.js.map +1 -0
  161. package/dist/core/compaction/compaction-runner.d.ts +14 -0
  162. package/dist/core/compaction/compaction-runner.d.ts.map +1 -0
  163. package/dist/core/compaction/compaction-runner.js +29 -0
  164. package/dist/core/compaction/compaction-runner.js.map +1 -0
  165. package/dist/core/compaction/compaction-types.d.ts +79 -0
  166. package/dist/core/compaction/compaction-types.d.ts.map +1 -0
  167. package/dist/core/compaction/compaction-types.js +6 -0
  168. package/dist/core/compaction/compaction-types.js.map +1 -0
  169. package/dist/core/compaction/compaction.d.ts.map +1 -1
  170. package/dist/core/compaction/deleted-ranges.d.ts +6 -0
  171. package/dist/core/compaction/deleted-ranges.d.ts.map +1 -0
  172. package/dist/core/compaction/deleted-ranges.js +134 -0
  173. package/dist/core/compaction/deleted-ranges.js.map +1 -0
  174. package/dist/core/compaction/index.d.ts +7 -1
  175. package/dist/core/compaction/index.d.ts.map +1 -1
  176. package/dist/core/compaction/index.js +7 -1
  177. package/dist/core/compaction/index.js.map +1 -1
  178. package/dist/core/compaction/range-planner.d.ts +21 -0
  179. package/dist/core/compaction/range-planner.d.ts.map +1 -0
  180. package/dist/core/compaction/range-planner.js +145 -0
  181. package/dist/core/compaction/range-planner.js.map +1 -0
  182. package/dist/core/compaction/transcript-serialization.d.ts +11 -0
  183. package/dist/core/compaction/transcript-serialization.d.ts.map +1 -0
  184. package/dist/core/compaction/transcript-serialization.js +104 -0
  185. package/dist/core/compaction/transcript-serialization.js.map +1 -0
  186. package/dist/core/compaction/utils.d.ts.map +1 -1
  187. package/dist/core/context-window.d.ts.map +1 -1
  188. package/dist/core/copilot-anthropic-sse-repair.d.ts.map +1 -1
  189. package/dist/core/copilot-errors.d.ts.map +1 -1
  190. package/dist/core/copilot-gemini-payload-sanitizer.d.ts.map +1 -1
  191. package/dist/core/copilot-gemini-reasoning.d.ts.map +1 -1
  192. package/dist/core/copilot-gemini-tool-arguments.d.ts.map +1 -1
  193. package/dist/core/copilot-hosts.d.ts.map +1 -1
  194. package/dist/core/copilot-model-catalog.d.ts.map +1 -1
  195. package/dist/core/copilot-model-static-fallbacks.d.ts.map +1 -1
  196. package/dist/core/copilot-model-synthesis.d.ts.map +1 -1
  197. package/dist/core/defaults.d.ts.map +1 -1
  198. package/dist/core/diagnostics.d.ts.map +1 -1
  199. package/dist/core/event-bus.d.ts.map +1 -1
  200. package/dist/core/exec.d.ts.map +1 -1
  201. package/dist/core/experimental.d.ts.map +1 -1
  202. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  203. package/dist/core/export-html/index.d.ts.map +1 -1
  204. package/dist/core/export-html/template-script.d.ts.map +1 -1
  205. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  206. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  207. package/dist/core/extensions/api-types.d.ts.map +1 -1
  208. package/dist/core/extensions/command-types.d.ts.map +1 -1
  209. package/dist/core/extensions/context-types.d.ts +2 -2
  210. package/dist/core/extensions/context-types.d.ts.map +1 -1
  211. package/dist/core/extensions/context-types.js.map +1 -1
  212. package/dist/core/extensions/event-results.d.ts +2 -2
  213. package/dist/core/extensions/event-results.d.ts.map +1 -1
  214. package/dist/core/extensions/event-results.js.map +1 -1
  215. package/dist/core/extensions/event-types.d.ts.map +1 -1
  216. package/dist/core/extensions/index.d.ts.map +1 -1
  217. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  218. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  219. package/dist/core/extensions/loader-discovery.d.ts.map +1 -1
  220. package/dist/core/extensions/loader-resources.d.ts.map +1 -1
  221. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  222. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  223. package/dist/core/extensions/loader.d.ts.map +1 -1
  224. package/dist/core/extensions/message-types.d.ts.map +1 -1
  225. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  226. package/dist/core/extensions/reactive-widget.d.ts.map +1 -1
  227. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  228. package/dist/core/extensions/runner-events.d.ts.map +1 -1
  229. package/dist/core/extensions/runner-handlers.d.ts.map +1 -1
  230. package/dist/core/extensions/runner-project-trust.d.ts.map +1 -1
  231. package/dist/core/extensions/runner-registries.d.ts.map +1 -1
  232. package/dist/core/extensions/runner-shortcuts.d.ts.map +1 -1
  233. package/dist/core/extensions/runner-ui.d.ts.map +1 -1
  234. package/dist/core/extensions/runner.d.ts.map +1 -1
  235. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  236. package/dist/core/extensions/session-events.d.ts +7 -7
  237. package/dist/core/extensions/session-events.d.ts.map +1 -1
  238. package/dist/core/extensions/session-events.js.map +1 -1
  239. package/dist/core/extensions/tool-events.d.ts.map +1 -1
  240. package/dist/core/extensions/tool-types.d.ts.map +1 -1
  241. package/dist/core/extensions/types.d.ts.map +1 -1
  242. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  243. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  244. package/dist/core/flattened-tool-arguments.d.ts.map +1 -1
  245. package/dist/core/footer-data-provider.d.ts.map +1 -1
  246. package/dist/core/http-dispatcher.d.ts.map +1 -1
  247. package/dist/core/index.d.ts +1 -1
  248. package/dist/core/index.d.ts.map +1 -1
  249. package/dist/core/index.js.map +1 -1
  250. package/dist/core/keybindings.d.ts.map +1 -1
  251. package/dist/core/messages.d.ts +4 -0
  252. package/dist/core/messages.d.ts.map +1 -1
  253. package/dist/core/messages.js +11 -0
  254. package/dist/core/messages.js.map +1 -1
  255. package/dist/core/model-registry-auth.d.ts.map +1 -1
  256. package/dist/core/model-registry-builtins.d.ts.map +1 -1
  257. package/dist/core/model-registry-builtins.js.map +1 -1
  258. package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
  259. package/dist/core/model-registry-custom-loader.js.map +1 -1
  260. package/dist/core/model-registry-dynamic.d.ts.map +1 -1
  261. package/dist/core/model-registry-loader.d.ts.map +1 -1
  262. package/dist/core/model-registry-schemas.d.ts +65 -13
  263. package/dist/core/model-registry-schemas.d.ts.map +1 -1
  264. package/dist/core/model-registry-schemas.js +5 -1
  265. package/dist/core/model-registry-schemas.js.map +1 -1
  266. package/dist/core/model-registry-types.d.ts.map +1 -1
  267. package/dist/core/model-registry.d.ts.map +1 -1
  268. package/dist/core/model-resolver-cli.d.ts.map +1 -1
  269. package/dist/core/model-resolver-defaults.d.ts.map +1 -1
  270. package/dist/core/model-resolver-initial.d.ts.map +1 -1
  271. package/dist/core/model-resolver-patterns.d.ts.map +1 -1
  272. package/dist/core/model-resolver-scope.d.ts.map +1 -1
  273. package/dist/core/model-resolver-types.d.ts.map +1 -1
  274. package/dist/core/model-resolver.d.ts.map +1 -1
  275. package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -1
  276. package/dist/core/output-guard.d.ts.map +1 -1
  277. package/dist/core/package-manager-auto-resources.d.ts.map +1 -1
  278. package/dist/core/package-manager-command.d.ts.map +1 -1
  279. package/dist/core/package-manager-constants.d.ts.map +1 -1
  280. package/dist/core/package-manager-env.d.ts.map +1 -1
  281. package/dist/core/package-manager-git.d.ts.map +1 -1
  282. package/dist/core/package-manager-manifest.d.ts.map +1 -1
  283. package/dist/core/package-manager-npm.d.ts.map +1 -1
  284. package/dist/core/package-manager-operations.d.ts.map +1 -1
  285. package/dist/core/package-manager-paths.d.ts.map +1 -1
  286. package/dist/core/package-manager-progress.d.ts.map +1 -1
  287. package/dist/core/package-manager-resolver.d.ts.map +1 -1
  288. package/dist/core/package-manager-resource-accumulator.d.ts.map +1 -1
  289. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  290. package/dist/core/package-manager-resource-files.d.ts.map +1 -1
  291. package/dist/core/package-manager-resource-patterns.d.ts.map +1 -1
  292. package/dist/core/package-manager-settings.d.ts.map +1 -1
  293. package/dist/core/package-manager-source.d.ts.map +1 -1
  294. package/dist/core/package-manager-types.d.ts.map +1 -1
  295. package/dist/core/package-manager.d.ts.map +1 -1
  296. package/dist/core/project-trust.d.ts.map +1 -1
  297. package/dist/core/prompt-templates-async.d.ts.map +1 -1
  298. package/dist/core/prompt-templates.d.ts.map +1 -1
  299. package/dist/core/provider-attribution.d.ts.map +1 -1
  300. package/dist/core/provider-context-usage.d.ts.map +1 -1
  301. package/dist/core/provider-context-usage.js +1 -2
  302. package/dist/core/provider-context-usage.js.map +1 -1
  303. package/dist/core/provider-display-names.d.ts.map +1 -1
  304. package/dist/core/resolve-config-value.d.ts.map +1 -1
  305. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  306. package/dist/core/resource-loader-context-files.d.ts.map +1 -1
  307. package/dist/core/resource-loader-core.d.ts.map +1 -1
  308. package/dist/core/resource-loader-discovery.d.ts.map +1 -1
  309. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  310. package/dist/core/resource-loader-helpers.d.ts.map +1 -1
  311. package/dist/core/resource-loader-internals.d.ts.map +1 -1
  312. package/dist/core/resource-loader-package-resources.d.ts.map +1 -1
  313. package/dist/core/resource-loader-paths.d.ts.map +1 -1
  314. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  315. package/dist/core/resource-loader-source-info.d.ts.map +1 -1
  316. package/dist/core/resource-loader-types.d.ts.map +1 -1
  317. package/dist/core/resource-loader.d.ts.map +1 -1
  318. package/dist/core/sdk-exports.d.ts.map +1 -1
  319. package/dist/core/sdk-types.d.ts.map +1 -1
  320. package/dist/core/sdk.d.ts.map +1 -1
  321. package/dist/core/session-cwd.d.ts.map +1 -1
  322. package/dist/core/session-entry-normalization.d.ts.map +1 -1
  323. package/dist/core/session-manager-archive.d.ts +2 -1
  324. package/dist/core/session-manager-archive.d.ts.map +1 -1
  325. package/dist/core/session-manager-archive.js +2 -2
  326. package/dist/core/session-manager-archive.js.map +1 -1
  327. package/dist/core/session-manager-classification.d.ts +9 -0
  328. package/dist/core/session-manager-classification.d.ts.map +1 -0
  329. package/dist/core/session-manager-classification.js +37 -0
  330. package/dist/core/session-manager-classification.js.map +1 -0
  331. package/dist/core/session-manager-core.d.ts +4 -4
  332. package/dist/core/session-manager-core.d.ts.map +1 -1
  333. package/dist/core/session-manager-core.js +13 -8
  334. package/dist/core/session-manager-core.js.map +1 -1
  335. package/dist/core/session-manager-entries.d.ts +4 -3
  336. package/dist/core/session-manager-entries.d.ts.map +1 -1
  337. package/dist/core/session-manager-entries.js +12 -10
  338. package/dist/core/session-manager-entries.js.map +1 -1
  339. package/dist/core/session-manager-history.d.ts +6 -23
  340. package/dist/core/session-manager-history.d.ts.map +1 -1
  341. package/dist/core/session-manager-history.js +23 -256
  342. package/dist/core/session-manager-history.js.map +1 -1
  343. package/dist/core/session-manager-list.d.ts.map +1 -1
  344. package/dist/core/session-manager-list.js +3 -3
  345. package/dist/core/session-manager-list.js.map +1 -1
  346. package/dist/core/session-manager-migrations.d.ts.map +1 -1
  347. package/dist/core/session-manager-paths.d.ts.map +1 -1
  348. package/dist/core/session-manager-storage.d.ts +1 -1
  349. package/dist/core/session-manager-storage.d.ts.map +1 -1
  350. package/dist/core/session-manager-storage.js +3 -2
  351. package/dist/core/session-manager-storage.js.map +1 -1
  352. package/dist/core/session-manager-types.d.ts +14 -15
  353. package/dist/core/session-manager-types.d.ts.map +1 -1
  354. package/dist/core/session-manager-types.js.map +1 -1
  355. package/dist/core/session-manager-validation.d.ts.map +1 -1
  356. package/dist/core/session-manager.d.ts +3 -2
  357. package/dist/core/session-manager.d.ts.map +1 -1
  358. package/dist/core/session-manager.js +1 -1
  359. package/dist/core/session-manager.js.map +1 -1
  360. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  361. package/dist/core/settings-manager-core.d.ts.map +1 -1
  362. package/dist/core/settings-manager-internals.d.ts.map +1 -1
  363. package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -1
  364. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  365. package/dist/core/settings-manager.d.ts.map +1 -1
  366. package/dist/core/settings-merge.d.ts.map +1 -1
  367. package/dist/core/settings-storage.d.ts.map +1 -1
  368. package/dist/core/settings-types.d.ts.map +1 -1
  369. package/dist/core/skills-async.d.ts.map +1 -1
  370. package/dist/core/skills.d.ts.map +1 -1
  371. package/dist/core/slash-commands.d.ts.map +1 -1
  372. package/dist/core/slash-commands.js +1 -1
  373. package/dist/core/slash-commands.js.map +1 -1
  374. package/dist/core/source-info.d.ts.map +1 -1
  375. package/dist/core/system-prompt.d.ts.map +1 -1
  376. package/dist/core/telemetry.d.ts.map +1 -1
  377. package/dist/core/thinking-blocks.d.ts.map +1 -1
  378. package/dist/core/timings.d.ts.map +1 -1
  379. package/dist/core/tools/artifact-protocol.d.ts.map +1 -1
  380. package/dist/core/tools/artifacts.d.ts.map +1 -1
  381. package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
  382. package/dist/core/tools/ask-user-question/config.d.ts.map +1 -1
  383. package/dist/core/tools/ask-user-question/index.d.ts.map +1 -1
  384. package/dist/core/tools/ask-user-question/state/build-questionnaire.d.ts.map +1 -1
  385. package/dist/core/tools/ask-user-question/state/inline-input.d.ts.map +1 -1
  386. package/dist/core/tools/ask-user-question/state/key-router.d.ts.map +1 -1
  387. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts.map +1 -1
  388. package/dist/core/tools/ask-user-question/state/row-intent.d.ts.map +1 -1
  389. package/dist/core/tools/ask-user-question/state/selectors/contract.d.ts.map +1 -1
  390. package/dist/core/tools/ask-user-question/state/selectors/derivations.d.ts.map +1 -1
  391. package/dist/core/tools/ask-user-question/state/selectors/focus.d.ts.map +1 -1
  392. package/dist/core/tools/ask-user-question/state/selectors/projections.d.ts.map +1 -1
  393. package/dist/core/tools/ask-user-question/state/state-reducer.d.ts.map +1 -1
  394. package/dist/core/tools/ask-user-question/state/state.d.ts.map +1 -1
  395. package/dist/core/tools/ask-user-question/tool/format-answer.d.ts.map +1 -1
  396. package/dist/core/tools/ask-user-question/tool/response-envelope.d.ts.map +1 -1
  397. package/dist/core/tools/ask-user-question/tool/types.d.ts.map +1 -1
  398. package/dist/core/tools/ask-user-question/tool/validate-questionnaire.d.ts.map +1 -1
  399. package/dist/core/tools/ask-user-question/view/body-residual-spacer.d.ts.map +1 -1
  400. package/dist/core/tools/ask-user-question/view/component-binding.d.ts.map +1 -1
  401. package/dist/core/tools/ask-user-question/view/components/chat-row-view.d.ts.map +1 -1
  402. package/dist/core/tools/ask-user-question/view/components/multi-select-view.d.ts.map +1 -1
  403. package/dist/core/tools/ask-user-question/view/components/option-list-view.d.ts.map +1 -1
  404. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.d.ts.map +1 -1
  405. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.d.ts.map +1 -1
  406. package/dist/core/tools/ask-user-question/view/components/preview/preview-box-renderer.d.ts.map +1 -1
  407. package/dist/core/tools/ask-user-question/view/components/preview/preview-layout-decider.d.ts.map +1 -1
  408. package/dist/core/tools/ask-user-question/view/components/preview/preview-pane.d.ts.map +1 -1
  409. package/dist/core/tools/ask-user-question/view/components/submit-picker.d.ts.map +1 -1
  410. package/dist/core/tools/ask-user-question/view/components/tab-bar.d.ts.map +1 -1
  411. package/dist/core/tools/ask-user-question/view/components/wrapping-select.d.ts.map +1 -1
  412. package/dist/core/tools/ask-user-question/view/dialog-builder.d.ts.map +1 -1
  413. package/dist/core/tools/ask-user-question/view/props-adapter.d.ts.map +1 -1
  414. package/dist/core/tools/ask-user-question/view/stateful-view.d.ts.map +1 -1
  415. package/dist/core/tools/ask-user-question/view/tab-components.d.ts.map +1 -1
  416. package/dist/core/tools/ask-user-question/view/tab-content-strategy.d.ts.map +1 -1
  417. package/dist/core/tools/bash-async-execution.d.ts.map +1 -1
  418. package/dist/core/tools/bash-async-jobs.d.ts.map +1 -1
  419. package/dist/core/tools/bash-async-output.d.ts.map +1 -1
  420. package/dist/core/tools/bash-interceptor.d.ts.map +1 -1
  421. package/dist/core/tools/bash-leading-cd.d.ts.map +1 -1
  422. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  423. package/dist/core/tools/bash.d.ts.map +1 -1
  424. package/dist/core/tools/block-resolver.d.ts.map +1 -1
  425. package/dist/core/tools/conflict-registry.d.ts.map +1 -1
  426. package/dist/core/tools/directory-tree.d.ts.map +1 -1
  427. package/dist/core/tools/edit-diff-preserve.d.ts.map +1 -1
  428. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  429. package/dist/core/tools/edit.d.ts.map +1 -1
  430. package/dist/core/tools/fetch-url.d.ts.map +1 -1
  431. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  432. package/dist/core/tools/find.d.ts.map +1 -1
  433. package/dist/core/tools/glob-path-utils.d.ts.map +1 -1
  434. package/dist/core/tools/grep.d.ts.map +1 -1
  435. package/dist/core/tools/hashline-engine/apply.d.ts.map +1 -1
  436. package/dist/core/tools/hashline-engine/block.d.ts.map +1 -1
  437. package/dist/core/tools/hashline-engine/diff-preview.d.ts.map +1 -1
  438. package/dist/core/tools/hashline-engine/format.d.ts.map +1 -1
  439. package/dist/core/tools/hashline-engine/fs.d.ts.map +1 -1
  440. package/dist/core/tools/hashline-engine/index.d.ts.map +1 -1
  441. package/dist/core/tools/hashline-engine/input.d.ts.map +1 -1
  442. package/dist/core/tools/hashline-engine/messages.d.ts.map +1 -1
  443. package/dist/core/tools/hashline-engine/mismatch.d.ts.map +1 -1
  444. package/dist/core/tools/hashline-engine/normalize.d.ts.map +1 -1
  445. package/dist/core/tools/hashline-engine/parser.d.ts.map +1 -1
  446. package/dist/core/tools/hashline-engine/patcher.d.ts.map +1 -1
  447. package/dist/core/tools/hashline-engine/prefixes.d.ts.map +1 -1
  448. package/dist/core/tools/hashline-engine/recovery.d.ts.map +1 -1
  449. package/dist/core/tools/hashline-engine/snapshots.d.ts.map +1 -1
  450. package/dist/core/tools/hashline-engine/stream.d.ts.map +1 -1
  451. package/dist/core/tools/hashline-engine/tokenizer.d.ts.map +1 -1
  452. package/dist/core/tools/hashline-engine/types.d.ts.map +1 -1
  453. package/dist/core/tools/hashline.d.ts.map +1 -1
  454. package/dist/core/tools/index.d.ts.map +1 -1
  455. package/dist/core/tools/ls.d.ts.map +1 -1
  456. package/dist/core/tools/notebook.d.ts.map +1 -1
  457. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  458. package/dist/core/tools/oversized-tool-result.d.ts.map +1 -1
  459. package/dist/core/tools/path-utils.d.ts.map +1 -1
  460. package/dist/core/tools/read-document-extract.d.ts.map +1 -1
  461. package/dist/core/tools/read-selectors.d.ts.map +1 -1
  462. package/dist/core/tools/read-url.d.ts.map +1 -1
  463. package/dist/core/tools/read.d.ts.map +1 -1
  464. package/dist/core/tools/render-utils.d.ts.map +1 -1
  465. package/dist/core/tools/resource-selectors.d.ts.map +1 -1
  466. package/dist/core/tools/search-details.d.ts.map +1 -1
  467. package/dist/core/tools/search-line-ranges.d.ts.map +1 -1
  468. package/dist/core/tools/search-native.d.ts.map +1 -1
  469. package/dist/core/tools/search.d.ts.map +1 -1
  470. package/dist/core/tools/structured-output.d.ts.map +1 -1
  471. package/dist/core/tools/todos-execute.d.ts.map +1 -1
  472. package/dist/core/tools/todos-locks.d.ts.map +1 -1
  473. package/dist/core/tools/todos-model.d.ts.map +1 -1
  474. package/dist/core/tools/todos-mutations.d.ts.map +1 -1
  475. package/dist/core/tools/todos-paths.d.ts.map +1 -1
  476. package/dist/core/tools/todos-render.d.ts.map +1 -1
  477. package/dist/core/tools/todos-storage.d.ts.map +1 -1
  478. package/dist/core/tools/todos-types.d.ts.map +1 -1
  479. package/dist/core/tools/todos-types.js +1 -1
  480. package/dist/core/tools/todos-types.js.map +1 -1
  481. package/dist/core/tools/todos.d.ts.map +1 -1
  482. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  483. package/dist/core/tools/tool-definition-wrapper.js +6 -2
  484. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  485. package/dist/core/tools/tool-limits.d.ts.map +1 -1
  486. package/dist/core/tools/truncate.d.ts.map +1 -1
  487. package/dist/core/tools/url-ip-guards.d.ts.map +1 -1
  488. package/dist/core/tools/write.d.ts.map +1 -1
  489. package/dist/core/trust-manager.d.ts.map +1 -1
  490. package/dist/core/typebox-compat.d.ts +12 -0
  491. package/dist/core/typebox-compat.d.ts.map +1 -0
  492. package/dist/core/typebox-compat.js +10 -0
  493. package/dist/core/typebox-compat.js.map +1 -0
  494. package/dist/index-extensions.d.ts.map +1 -1
  495. package/dist/index.d.ts +4 -2
  496. package/dist/index.d.ts.map +1 -1
  497. package/dist/index.js +3 -1
  498. package/dist/index.js.map +1 -1
  499. package/dist/main-app-mode.d.ts.map +1 -1
  500. package/dist/main-deferred-startup.d.ts.map +1 -1
  501. package/dist/main-early-input.d.ts.map +1 -1
  502. package/dist/main-session-options.d.ts.map +1 -1
  503. package/dist/main-session.d.ts +1 -0
  504. package/dist/main-session.d.ts.map +1 -1
  505. package/dist/main-session.js +7 -0
  506. package/dist/main-session.js.map +1 -1
  507. package/dist/main-stdio.d.ts.map +1 -1
  508. package/dist/main.d.ts.map +1 -1
  509. package/dist/main.js +2 -2
  510. package/dist/main.js.map +1 -1
  511. package/dist/migrations-config-values.d.ts.map +1 -1
  512. package/dist/migrations.d.ts.map +1 -1
  513. package/dist/modes/index.d.ts.map +1 -1
  514. package/dist/modes/interactive/chat-input-actions.d.ts.map +1 -1
  515. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  516. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  517. package/dist/modes/interactive/components/atomic-banner.d.ts.map +1 -1
  518. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  519. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  520. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  521. package/dist/modes/interactive/components/chat-message-renderer.d.ts +4 -1
  522. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  523. package/dist/modes/interactive/components/chat-message-renderer.js +12 -22
  524. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  525. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  526. package/dist/modes/interactive/components/chat-session-host-editor.d.ts.map +1 -1
  527. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  528. package/dist/modes/interactive/components/chat-session-host-events.js +5 -11
  529. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  530. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
  531. package/dist/modes/interactive/components/chat-session-host-rendering.js +3 -0
  532. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  533. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
  534. package/dist/modes/interactive/components/chat-session-host-state.d.ts +1 -0
  535. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  536. package/dist/modes/interactive/components/chat-session-host-state.js +1 -0
  537. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  538. package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.d.ts.map +1 -1
  539. package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -1
  540. package/dist/modes/interactive/components/chat-session-host-utils.d.ts.map +1 -1
  541. package/dist/modes/interactive/components/chat-session-host-utils.js +1 -1
  542. package/dist/modes/interactive/components/chat-session-host-utils.js.map +1 -1
  543. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  544. package/dist/modes/interactive/components/chat-session-host.js +1 -0
  545. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  546. package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
  547. package/dist/modes/interactive/components/compaction-boundary-message.d.ts +20 -0
  548. package/dist/modes/interactive/components/compaction-boundary-message.d.ts.map +1 -0
  549. package/dist/modes/interactive/components/compaction-boundary-message.js +48 -0
  550. package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -0
  551. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
  552. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  553. package/dist/modes/interactive/components/context-window-selector.d.ts.map +1 -1
  554. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  555. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  556. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  557. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  558. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  559. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  560. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  561. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  562. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  563. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  564. package/dist/modes/interactive/components/fast-mode-selector.d.ts.map +1 -1
  565. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  566. package/dist/modes/interactive/components/index.d.ts +1 -1
  567. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  568. package/dist/modes/interactive/components/index.js +1 -1
  569. package/dist/modes/interactive/components/index.js.map +1 -1
  570. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  571. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  572. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  573. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  574. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  575. package/dist/modes/interactive/components/session-selector-delete.d.ts.map +1 -1
  576. package/dist/modes/interactive/components/session-selector-header.d.ts.map +1 -1
  577. package/dist/modes/interactive/components/session-selector-list.d.ts.map +1 -1
  578. package/dist/modes/interactive/components/session-selector-list.js +3 -0
  579. package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
  580. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  581. package/dist/modes/interactive/components/session-selector-tree.d.ts.map +1 -1
  582. package/dist/modes/interactive/components/session-selector-types.d.ts.map +1 -1
  583. package/dist/modes/interactive/components/session-selector-utils.d.ts.map +1 -1
  584. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  585. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  586. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  587. package/dist/modes/interactive/components/settings-selector-options.d.ts.map +1 -1
  588. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
  589. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  590. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  591. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  592. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  593. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  594. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  595. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  596. package/dist/modes/interactive/components/tree-selector-component.d.ts.map +1 -1
  597. package/dist/modes/interactive/components/tree-selector-content.d.ts.map +1 -1
  598. package/dist/modes/interactive/components/tree-selector-help.d.ts.map +1 -1
  599. package/dist/modes/interactive/components/tree-selector-label-input.d.ts.map +1 -1
  600. package/dist/modes/interactive/components/tree-selector-list.d.ts.map +1 -1
  601. package/dist/modes/interactive/components/tree-selector-model.d.ts.map +1 -1
  602. package/dist/modes/interactive/components/tree-selector-types.d.ts.map +1 -1
  603. package/dist/modes/interactive/components/tree-selector-viewport.d.ts.map +1 -1
  604. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  605. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  606. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  607. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  608. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  609. package/dist/modes/interactive/components/working-status.d.ts.map +1 -1
  610. package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -1
  611. package/dist/modes/interactive/interactive-agent-events.js +3 -47
  612. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  613. package/dist/modes/interactive/interactive-auth-login.d.ts.map +1 -1
  614. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
  615. package/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
  616. package/dist/modes/interactive/interactive-bash-compact.d.ts.map +1 -1
  617. package/dist/modes/interactive/interactive-child-ordering.d.ts.map +1 -1
  618. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  619. package/dist/modes/interactive/interactive-editor-actions.d.ts.map +1 -1
  620. package/dist/modes/interactive/interactive-extension-context.d.ts.map +1 -1
  621. package/dist/modes/interactive/interactive-extension-custom-ui.d.ts.map +1 -1
  622. package/dist/modes/interactive/interactive-extension-dialogs.d.ts.map +1 -1
  623. package/dist/modes/interactive/interactive-extension-runtime.d.ts.map +1 -1
  624. package/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
  625. package/dist/modes/interactive/interactive-hotkeys-debug.d.ts.map +1 -1
  626. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  627. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  628. package/dist/modes/interactive/interactive-mode-deps.d.ts +2 -2
  629. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  630. package/dist/modes/interactive/interactive-mode-deps.js +1 -1
  631. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  632. package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -1
  633. package/dist/modes/interactive/interactive-mode-surface.d.ts +5 -3
  634. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  635. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  636. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  637. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  638. package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
  639. package/dist/modes/interactive/interactive-onboarding.d.ts.map +1 -1
  640. package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -1
  641. package/dist/modes/interactive/interactive-queueing.d.ts.map +1 -1
  642. package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -1
  643. package/dist/modes/interactive/interactive-render-chat.js +21 -12
  644. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  645. package/dist/modes/interactive/interactive-resource-disclosure.d.ts.map +1 -1
  646. package/dist/modes/interactive/interactive-resource-paths.d.ts.map +1 -1
  647. package/dist/modes/interactive/interactive-resource-rendering.d.ts.map +1 -1
  648. package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -1
  649. package/dist/modes/interactive/interactive-session-routing.d.ts.map +1 -1
  650. package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -1
  651. package/dist/modes/interactive/interactive-slash-commands.d.ts.map +1 -1
  652. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  653. package/dist/modes/interactive/model-search.d.ts.map +1 -1
  654. package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -1
  655. package/dist/modes/interactive/theme/export-colors.d.ts.map +1 -1
  656. package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -1
  657. package/dist/modes/interactive/theme/terminal-detection.d.ts.map +1 -1
  658. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  659. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  660. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  661. package/dist/modes/interactive/theme/theme-parse.d.ts.map +1 -1
  662. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  663. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  664. package/dist/modes/interactive/theme/tui-theme.d.ts.map +1 -1
  665. package/dist/modes/interactive/whimsical-messages.d.ts.map +1 -1
  666. package/dist/modes/print-mode.d.ts.map +1 -1
  667. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  668. package/dist/modes/rpc/rpc-client.d.ts +3 -5
  669. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  670. package/dist/modes/rpc/rpc-client.js +1 -6
  671. package/dist/modes/rpc/rpc-client.js.map +1 -1
  672. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  673. package/dist/modes/rpc/rpc-command-handler.js +0 -4
  674. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  675. package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
  676. package/dist/modes/rpc/rpc-input.d.ts.map +1 -1
  677. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  678. package/dist/modes/rpc/rpc-responses.d.ts.map +1 -1
  679. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  680. package/dist/modes/rpc/rpc-types.d.ts +2 -11
  681. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  682. package/dist/modes/rpc/rpc-types.js.map +1 -1
  683. package/dist/package-manager-cli-parser.d.ts.map +1 -1
  684. package/dist/package-manager-cli.d.ts.map +1 -1
  685. package/dist/rpc-entry.d.ts.map +1 -1
  686. package/dist/utils/ansi.d.ts.map +1 -1
  687. package/dist/utils/changelog.d.ts.map +1 -1
  688. package/dist/utils/child-process.d.ts.map +1 -1
  689. package/dist/utils/clipboard-image.d.ts.map +1 -1
  690. package/dist/utils/clipboard-native.d.ts.map +1 -1
  691. package/dist/utils/clipboard.d.ts.map +1 -1
  692. package/dist/utils/deprecation.d.ts.map +1 -1
  693. package/dist/utils/event-loop.d.ts.map +1 -1
  694. package/dist/utils/exif-orientation.d.ts.map +1 -1
  695. package/dist/utils/frontmatter.d.ts.map +1 -1
  696. package/dist/utils/fs-watch.d.ts.map +1 -1
  697. package/dist/utils/git-env.d.ts.map +1 -1
  698. package/dist/utils/git.d.ts.map +1 -1
  699. package/dist/utils/html.d.ts.map +1 -1
  700. package/dist/utils/image-convert.d.ts.map +1 -1
  701. package/dist/utils/image-process.d.ts.map +1 -1
  702. package/dist/utils/image-resize-core.d.ts.map +1 -1
  703. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  704. package/dist/utils/image-resize.d.ts.map +1 -1
  705. package/dist/utils/json.d.ts.map +1 -1
  706. package/dist/utils/markit.d.ts.map +1 -1
  707. package/dist/utils/mime.d.ts.map +1 -1
  708. package/dist/utils/module-require.d.ts.map +1 -1
  709. package/dist/utils/open-browser.d.ts.map +1 -1
  710. package/dist/utils/paths.d.ts.map +1 -1
  711. package/dist/utils/photon.d.ts.map +1 -1
  712. package/dist/utils/pi-user-agent.d.ts.map +1 -1
  713. package/dist/utils/shell.d.ts.map +1 -1
  714. package/dist/utils/sleep.d.ts.map +1 -1
  715. package/dist/utils/split-launcher.d.ts.map +1 -1
  716. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  717. package/dist/utils/tools-manager.d.ts.map +1 -1
  718. package/dist/utils/version-check.d.ts.map +1 -1
  719. package/dist/utils/windows-self-update.d.ts.map +1 -1
  720. package/docs/compaction.md +97 -772
  721. package/docs/custom-provider.md +7 -1
  722. package/docs/extensions.md +31 -33
  723. package/docs/json.md +2 -2
  724. package/docs/rpc.md +32 -24
  725. package/docs/sdk.md +3 -3
  726. package/docs/session-format.md +49 -30
  727. package/docs/sessions.md +5 -3
  728. package/docs/settings.md +14 -4
  729. package/docs/usage.md +1 -1
  730. package/docs/workflows.md +30 -15
  731. package/examples/extensions/README.md +3 -1
  732. package/examples/extensions/custom-compaction.ts +14 -58
  733. package/examples/extensions/handoff.ts +2 -3
  734. package/examples/extensions/subagent/schemas.ts +1 -1
  735. package/examples/extensions/tic-tac-toe.ts +1 -2
  736. package/examples/extensions/todo.ts +1 -2
  737. package/npm-shrinkwrap.json +214 -98
  738. package/package.json +12 -12
  739. package/dist/core/compaction/context-assistant-turns.d.ts +0 -42
  740. package/dist/core/compaction/context-assistant-turns.d.ts.map +0 -1
  741. package/dist/core/compaction/context-assistant-turns.js +0 -87
  742. package/dist/core/compaction/context-assistant-turns.js.map +0 -1
  743. package/dist/core/compaction/context-compaction-critical.d.ts +0 -15
  744. package/dist/core/compaction/context-compaction-critical.d.ts.map +0 -1
  745. package/dist/core/compaction/context-compaction-critical.js +0 -57
  746. package/dist/core/compaction/context-compaction-critical.js.map +0 -1
  747. package/dist/core/compaction/context-compaction-eviction-alternates.d.ts +0 -18
  748. package/dist/core/compaction/context-compaction-eviction-alternates.d.ts.map +0 -1
  749. package/dist/core/compaction/context-compaction-eviction-alternates.js +0 -186
  750. package/dist/core/compaction/context-compaction-eviction-alternates.js.map +0 -1
  751. package/dist/core/compaction/context-compaction-eviction.d.ts +0 -12
  752. package/dist/core/compaction/context-compaction-eviction.d.ts.map +0 -1
  753. package/dist/core/compaction/context-compaction-eviction.js +0 -222
  754. package/dist/core/compaction/context-compaction-eviction.js.map +0 -1
  755. package/dist/core/compaction/context-compaction-metrics.d.ts +0 -28
  756. package/dist/core/compaction/context-compaction-metrics.d.ts.map +0 -1
  757. package/dist/core/compaction/context-compaction-metrics.js +0 -107
  758. package/dist/core/compaction/context-compaction-metrics.js.map +0 -1
  759. package/dist/core/compaction/context-compaction-prompt.d.ts +0 -9
  760. package/dist/core/compaction/context-compaction-prompt.d.ts.map +0 -1
  761. package/dist/core/compaction/context-compaction-prompt.js +0 -163
  762. package/dist/core/compaction/context-compaction-prompt.js.map +0 -1
  763. package/dist/core/compaction/context-compaction-runner.d.ts +0 -11
  764. package/dist/core/compaction/context-compaction-runner.d.ts.map +0 -1
  765. package/dist/core/compaction/context-compaction-runner.js +0 -273
  766. package/dist/core/compaction/context-compaction-runner.js.map +0 -1
  767. package/dist/core/compaction/context-compaction-strategy.d.ts +0 -5
  768. package/dist/core/compaction/context-compaction-strategy.d.ts.map +0 -1
  769. package/dist/core/compaction/context-compaction-strategy.js +0 -27
  770. package/dist/core/compaction/context-compaction-strategy.js.map +0 -1
  771. package/dist/core/compaction/context-compaction-types.d.ts +0 -75
  772. package/dist/core/compaction/context-compaction-types.d.ts.map +0 -1
  773. package/dist/core/compaction/context-compaction-types.js +0 -6
  774. package/dist/core/compaction/context-compaction-types.js.map +0 -1
  775. package/dist/core/compaction/context-compaction.d.ts +0 -10
  776. package/dist/core/compaction/context-compaction.d.ts.map +0 -1
  777. package/dist/core/compaction/context-compaction.js +0 -8
  778. package/dist/core/compaction/context-compaction.js.map +0 -1
  779. package/dist/core/compaction/context-deletion-application.d.ts +0 -14
  780. package/dist/core/compaction/context-deletion-application.d.ts.map +0 -1
  781. package/dist/core/compaction/context-deletion-application.js +0 -261
  782. package/dist/core/compaction/context-deletion-application.js.map +0 -1
  783. package/dist/core/compaction/context-deletion-store.d.ts +0 -78
  784. package/dist/core/compaction/context-deletion-store.d.ts.map +0 -1
  785. package/dist/core/compaction/context-deletion-store.js +0 -162
  786. package/dist/core/compaction/context-deletion-store.js.map +0 -1
  787. package/dist/core/compaction/context-deletion-targets.d.ts +0 -43
  788. package/dist/core/compaction/context-deletion-targets.d.ts.map +0 -1
  789. package/dist/core/compaction/context-deletion-targets.js +0 -292
  790. package/dist/core/compaction/context-deletion-targets.js.map +0 -1
  791. package/dist/core/compaction/context-deletion-tool-definitions.d.ts +0 -193
  792. package/dist/core/compaction/context-deletion-tool-definitions.d.ts.map +0 -1
  793. package/dist/core/compaction/context-deletion-tool-definitions.js +0 -98
  794. package/dist/core/compaction/context-deletion-tool-definitions.js.map +0 -1
  795. package/dist/core/compaction/context-deletion-tool-helpers.d.ts +0 -19
  796. package/dist/core/compaction/context-deletion-tool-helpers.d.ts.map +0 -1
  797. package/dist/core/compaction/context-deletion-tool-helpers.js +0 -210
  798. package/dist/core/compaction/context-deletion-tool-helpers.js.map +0 -1
  799. package/dist/core/compaction/context-deletion-tools.d.ts +0 -4
  800. package/dist/core/compaction/context-deletion-tools.d.ts.map +0 -1
  801. package/dist/core/compaction/context-deletion-tools.js +0 -403
  802. package/dist/core/compaction/context-deletion-tools.js.map +0 -1
  803. package/dist/core/compaction/context-transcript-analysis.d.ts +0 -11
  804. package/dist/core/compaction/context-transcript-analysis.d.ts.map +0 -1
  805. package/dist/core/compaction/context-transcript-analysis.js +0 -228
  806. package/dist/core/compaction/context-transcript-analysis.js.map +0 -1
  807. package/dist/core/session-manager-tool-dependencies.d.ts +0 -10
  808. package/dist/core/session-manager-tool-dependencies.d.ts.map +0 -1
  809. package/dist/core/session-manager-tool-dependencies.js +0 -133
  810. package/dist/core/session-manager-tool-dependencies.js.map +0 -1
  811. package/dist/modes/interactive/components/context-compaction-summary-message.d.ts +0 -17
  812. package/dist/modes/interactive/components/context-compaction-summary-message.d.ts.map +0 -1
  813. package/dist/modes/interactive/components/context-compaction-summary-message.js +0 -83
  814. package/dist/modes/interactive/components/context-compaction-summary-message.js.map +0 -1
@@ -1,403 +0,0 @@
1
- import { CONTEXT_COMPACTION_AUTO_QUERY, } from "./context-compaction-types.js";
2
- import { createContextCompactionBudgetDetails, createContextDeletionToolResult, countRemainingImageBlocks, finitePositiveNumber, formatErrorMessage, sumRemainingImageTokens, } from "./context-compaction-metrics.js";
3
- import { getTranscriptCompactionParameters, normalizeContextCompactionParameters } from "./context-compaction-strategy.js";
4
- import { CONTEXT_COMPACTION_BUDGET_TOOL, CONTEXT_DELETE_TOOL, CONTEXT_DELETE_TOOL_NAME, CONTEXT_GREP_DELETE_DEFAULT_MAX_MATCHES, CONTEXT_GREP_DELETE_TOOL, CONTEXT_GREP_DELETE_TOOL_NAME, CONTEXT_READ_ENTRY_DEFAULT_MAX_CHARS, CONTEXT_READ_ENTRY_MAX_CHARS, CONTEXT_READ_ENTRY_TOOL, CONTEXT_READ_ENTRY_TOOL_NAME, CONTEXT_SEARCH_DEFAULT_CONTEXT_CHARS, CONTEXT_SEARCH_DEFAULT_MAX_MATCHES, CONTEXT_SEARCH_MAX_CONTEXT_CHARS, CONTEXT_SEARCH_MAX_MATCHES, CONTEXT_SEARCH_TRANSCRIPT_TOOL, } from "./context-deletion-tool-definitions.js";
5
- import { computeContextCompactionStats, contextDeletionRequestFromObject, validateContextDeletionRequest } from "./context-deletion-application.js";
6
- import { canDeleteTarget, deletionRequestFromTargets, getRecentContextEntryIds, isStaleUserImageOnlyEntry, mergeContextDeletionTargets, } from "./context-deletion-targets.js";
7
- import { createContextDeletionStore } from "./context-deletion-store.js";
8
- import { addGrepCandidate, assertSafeRegexScan, clampInteger, createGrepMatcher, currentTargetDeleted, filterProtectedGrepCandidates, findMatchIndex, snippetForMatch, textSlice, } from "./context-deletion-tool-helpers.js";
9
- export function createContextDeletionTool(inputTranscript, options = {}) {
10
- const contextWindow = finitePositiveNumber(options.contextWindow);
11
- const parameters = normalizeContextCompactionParameters({ ...getTranscriptCompactionParameters(inputTranscript), ...options }, inputTranscript.parameters?.query ?? CONTEXT_COMPACTION_AUTO_QUERY);
12
- const transcript = { ...inputTranscript, parameters };
13
- const store = createContextDeletionStore(transcript);
14
- let validatedResult;
15
- function readTargets() {
16
- return store.readTargets();
17
- }
18
- function applyValidatedTargets(additionalTargets) {
19
- const mergedTargets = mergeContextDeletionTargets(readTargets(), additionalTargets);
20
- validatedResult = validateContextDeletionRequest(deletionRequestFromTargets(mergedTargets), transcript);
21
- store.replaceTargets(validatedResult.deletedTargets);
22
- return validatedResult;
23
- }
24
- function currentStats() {
25
- return validatedResult?.stats ?? computeContextCompactionStats(transcript, readTargets());
26
- }
27
- function canDeleteProtectedTarget(target) {
28
- return canDeleteTarget(transcript, target);
29
- }
30
- function shouldGrepDeleteContentBlockAsEntry(entryId, blockCount) {
31
- if (blockCount <= 1)
32
- return true;
33
- const entry = transcript.entries.find((candidate) => candidate.entryId === entryId);
34
- return entry !== undefined && isStaleUserImageOnlyEntry(transcript, entry);
35
- }
36
- const tool = {
37
- ...CONTEXT_DELETE_TOOL,
38
- label: "context deletion request",
39
- executionMode: "parallel",
40
- async execute(_toolCallId, params) {
41
- return store.transaction(() => {
42
- const callCount = store.incrementCallCount();
43
- try {
44
- const incomingRequest = contextDeletionRequestFromObject(params, `${CONTEXT_DELETE_TOOL_NAME} arguments`);
45
- const incomingValidated = validateContextDeletionRequest(incomingRequest, transcript);
46
- const applied = applyValidatedTargets(incomingValidated.deletedTargets);
47
- store.clearLastError();
48
- const deletedTargets = readTargets();
49
- const details = {
50
- deletions: deletionRequestFromTargets(deletedTargets).deletions,
51
- deletedTargets,
52
- stats: applied.stats,
53
- callCount,
54
- };
55
- const text = `Recorded ${incomingValidated.deletedTargets.length} deletion target(s); ${deletedTargets.length} total validated deletion target(s) are selected. Continue calling ${CONTEXT_DELETE_TOOL_NAME} or ${CONTEXT_GREP_DELETE_TOOL_NAME} for additional deletions, or respond done when finished.`;
56
- return createContextDeletionToolResult(text, details);
57
- }
58
- catch (error) {
59
- const message = formatErrorMessage(error);
60
- store.setLastError(message);
61
- const deletedTargets = readTargets();
62
- const details = {
63
- deletions: deletionRequestFromTargets(deletedTargets).deletions,
64
- deletedTargets,
65
- stats: currentStats(),
66
- callCount,
67
- error: message,
68
- };
69
- return createContextDeletionToolResult(`Error recording context deletion targets: ${message}. No new deletion targets were applied; continue with a corrected tool call.`, details);
70
- }
71
- });
72
- },
73
- };
74
- const grepTool = {
75
- ...CONTEXT_GREP_DELETE_TOOL,
76
- label: "context grep delete",
77
- executionMode: "parallel",
78
- async execute(_toolCallId, params) {
79
- return store.transaction(() => {
80
- const callCount = store.incrementCallCount();
81
- const pattern = params.pattern;
82
- const regex = params.regex === true;
83
- const caseSensitive = params.caseSensitive === true;
84
- const target = params.target ?? "entry";
85
- const maxMatches = params.maxMatches ?? CONTEXT_GREP_DELETE_DEFAULT_MAX_MATCHES;
86
- const candidates = [];
87
- const matches = [];
88
- let reportedMatches = matches;
89
- const skipped = [];
90
- const seenTargets = new Set();
91
- try {
92
- if (regex) {
93
- assertSafeRegexScan(store.getGrepScanTextLength(target));
94
- }
95
- const matcher = createGrepMatcher(pattern, regex, caseSensitive);
96
- const currentTargets = readTargets();
97
- const recentEntryIds = getRecentContextEntryIds(transcript);
98
- if (target === "entry") {
99
- for (const entry of store.listEntriesForGrep()) {
100
- if (!matcher.test(entry.text))
101
- continue;
102
- const candidate = { kind: "entry", entryId: entry.entry_id };
103
- if (recentEntryIds.has(candidate.entryId)) {
104
- skipped.push({ entryId: entry.entry_id, target, reason: "protected_entry", text: entry.text });
105
- continue;
106
- }
107
- if (entry.is_protected === 1 && !canDeleteProtectedTarget(candidate)) {
108
- skipped.push({ entryId: entry.entry_id, target, reason: "protected_entry", text: entry.text });
109
- continue;
110
- }
111
- if (currentTargetDeleted(currentTargets, candidate)) {
112
- skipped.push({ entryId: entry.entry_id, target, reason: "already_deleted", text: entry.text });
113
- continue;
114
- }
115
- addGrepCandidate(candidates, matches, seenTargets, candidate, {
116
- entryId: entry.entry_id,
117
- target,
118
- text: entry.text,
119
- });
120
- }
121
- }
122
- else {
123
- for (const block of store.listContentBlocksForGrep()) {
124
- if (!matcher.test(block.text))
125
- continue;
126
- const candidate = shouldGrepDeleteContentBlockAsEntry(block.entry_id, block.block_count)
127
- ? { kind: "entry", entryId: block.entry_id }
128
- : { kind: "content_block", entryId: block.entry_id, blockIndex: block.block_index };
129
- if (recentEntryIds.has(candidate.entryId)) {
130
- skipped.push({
131
- entryId: block.entry_id,
132
- target: candidate.kind,
133
- ...(candidate.kind === "content_block" ? { blockIndex: candidate.blockIndex } : {}),
134
- reason: "protected_entry",
135
- text: block.text,
136
- });
137
- continue;
138
- }
139
- if (block.entry_protected === 1 && !canDeleteProtectedTarget(candidate)) {
140
- skipped.push({
141
- entryId: block.entry_id,
142
- target,
143
- blockIndex: block.block_index,
144
- reason: "protected_entry",
145
- text: block.text,
146
- });
147
- continue;
148
- }
149
- if (block.block_protected === 1 && !canDeleteProtectedTarget(candidate)) {
150
- skipped.push({
151
- entryId: block.entry_id,
152
- target,
153
- blockIndex: block.block_index,
154
- reason: "protected_block",
155
- text: block.text,
156
- });
157
- continue;
158
- }
159
- if (currentTargetDeleted(currentTargets, candidate)) {
160
- skipped.push({
161
- entryId: block.entry_id,
162
- target: candidate.kind,
163
- ...(candidate.kind === "content_block" ? { blockIndex: candidate.blockIndex } : {}),
164
- reason: "already_deleted",
165
- text: block.text,
166
- });
167
- continue;
168
- }
169
- addGrepCandidate(candidates, matches, seenTargets, candidate, {
170
- entryId: block.entry_id,
171
- target: candidate.kind,
172
- ...(candidate.kind === "content_block" ? { blockIndex: candidate.blockIndex } : {}),
173
- text: block.text,
174
- });
175
- }
176
- }
177
- const eligible = filterProtectedGrepCandidates(candidates, matches, currentTargets, transcript, skipped);
178
- reportedMatches = eligible.matches;
179
- let applied;
180
- if (params.expectedMatchCount !== undefined && eligible.candidates.length !== params.expectedMatchCount) {
181
- skipped.push({ reason: "expected_match_count_mismatch" });
182
- }
183
- else if (eligible.candidates.length > maxMatches) {
184
- skipped.push({ reason: "max_matches_exceeded" });
185
- }
186
- else if (eligible.candidates.length > 0) {
187
- applied = applyValidatedTargets(eligible.candidates);
188
- }
189
- store.clearLastError();
190
- const deletedTargets = readTargets();
191
- const details = {
192
- pattern,
193
- regex,
194
- caseSensitive,
195
- target,
196
- matches: eligible.matches,
197
- skipped,
198
- deletedTargets,
199
- stats: applied?.stats ?? currentStats(),
200
- callCount,
201
- };
202
- const text = `Matched ${eligible.matches.length} deletion target(s), skipped ${skipped.length}, and ${applied ? "applied" : "did not apply"} grep deletion for pattern ${JSON.stringify(pattern)}. Total validated deletion target(s): ${deletedTargets.length}.`;
203
- return createContextDeletionToolResult(text, details);
204
- }
205
- catch (error) {
206
- const message = formatErrorMessage(error);
207
- store.setLastError(message);
208
- const deletedTargets = readTargets();
209
- const details = {
210
- pattern,
211
- regex,
212
- caseSensitive,
213
- target,
214
- matches: reportedMatches,
215
- skipped,
216
- deletedTargets,
217
- stats: currentStats(),
218
- callCount,
219
- error: message,
220
- };
221
- return createContextDeletionToolResult(`Error applying grep deletion for pattern ${JSON.stringify(pattern)}: ${message}. No new deletion targets were applied; continue with a corrected tool call.`, details);
222
- }
223
- });
224
- },
225
- };
226
- const searchTool = {
227
- ...CONTEXT_SEARCH_TRANSCRIPT_TOOL,
228
- label: "context transcript search",
229
- executionMode: "parallel",
230
- async execute(_toolCallId, params) {
231
- return store.transaction(() => {
232
- const callCount = store.incrementCallCount();
233
- const pattern = params.pattern;
234
- const regex = params.regex === true;
235
- const caseSensitive = params.caseSensitive === true;
236
- const target = params.target ?? "entry";
237
- const maxMatches = clampInteger(params.maxMatches, CONTEXT_SEARCH_DEFAULT_MAX_MATCHES, 1, CONTEXT_SEARCH_MAX_MATCHES);
238
- const contextChars = clampInteger(params.contextChars, CONTEXT_SEARCH_DEFAULT_CONTEXT_CHARS, 0, CONTEXT_SEARCH_MAX_CONTEXT_CHARS);
239
- const matches = [];
240
- let truncated = false;
241
- try {
242
- if (regex) {
243
- assertSafeRegexScan(store.getGrepScanTextLength(target));
244
- }
245
- const matcher = createGrepMatcher(pattern, regex, caseSensitive);
246
- if (target === "entry") {
247
- for (const entry of store.listEntriesForGrep()) {
248
- const matchIndex = findMatchIndex(matcher, entry.text);
249
- if (matchIndex < 0)
250
- continue;
251
- if (matches.length >= maxMatches) {
252
- truncated = true;
253
- break;
254
- }
255
- matches.push({
256
- entryId: entry.entry_id,
257
- target,
258
- matchIndex,
259
- snippet: snippetForMatch(entry.text, matchIndex, contextChars),
260
- protected: entry.is_protected === 1,
261
- });
262
- }
263
- }
264
- else {
265
- for (const block of store.listContentBlocksForGrep()) {
266
- const matchIndex = findMatchIndex(matcher, block.text);
267
- if (matchIndex < 0)
268
- continue;
269
- if (matches.length >= maxMatches) {
270
- truncated = true;
271
- break;
272
- }
273
- matches.push({
274
- entryId: block.entry_id,
275
- target,
276
- blockIndex: block.block_index,
277
- matchIndex,
278
- snippet: snippetForMatch(block.text, matchIndex, contextChars),
279
- protected: block.entry_protected === 1 || block.block_protected === 1,
280
- });
281
- }
282
- }
283
- store.clearLastError();
284
- const details = {
285
- pattern,
286
- regex,
287
- caseSensitive,
288
- target,
289
- matches,
290
- truncated,
291
- callCount,
292
- };
293
- const text = `Found ${matches.length}${truncated ? "+" : ""} ${target} match(es) for ${JSON.stringify(pattern)}. Use ${CONTEXT_READ_ENTRY_TOOL_NAME} with small maxChars to inspect exact content before deleting.`;
294
- return createContextDeletionToolResult(text, details);
295
- }
296
- catch (error) {
297
- const message = formatErrorMessage(error);
298
- store.setLastError(message);
299
- const details = {
300
- pattern,
301
- regex,
302
- caseSensitive,
303
- target,
304
- matches,
305
- truncated,
306
- callCount,
307
- error: message,
308
- };
309
- return createContextDeletionToolResult(`Error searching transcript for ${JSON.stringify(pattern)}: ${message}. Try a literal pattern or narrower query.`, details);
310
- }
311
- });
312
- },
313
- };
314
- const readEntryTool = {
315
- ...CONTEXT_READ_ENTRY_TOOL,
316
- label: "context read entry",
317
- executionMode: "parallel",
318
- async execute(_toolCallId, params) {
319
- return store.transaction(() => {
320
- const callCount = store.incrementCallCount();
321
- const offset = clampInteger(params.offset, 0, 0, Number.MAX_SAFE_INTEGER);
322
- const maxChars = clampInteger(params.maxChars, CONTEXT_READ_ENTRY_DEFAULT_MAX_CHARS, 1, CONTEXT_READ_ENTRY_MAX_CHARS);
323
- try {
324
- const row = params.blockIndex === undefined
325
- ? store.getEntryForRead(params.entryId)
326
- : store.getContentBlockForRead(params.entryId, params.blockIndex);
327
- if (!row) {
328
- throw new Error(params.blockIndex === undefined
329
- ? `Unknown transcript entry: ${params.entryId}`
330
- : `Unknown transcript content block: ${params.entryId}:${params.blockIndex}`);
331
- }
332
- const text = row.text;
333
- const slice = textSlice(text, offset, maxChars);
334
- store.clearLastError();
335
- const details = {
336
- entryId: params.entryId,
337
- ...(params.blockIndex === undefined ? {} : { blockIndex: params.blockIndex }),
338
- offset,
339
- maxChars,
340
- totalChars: text.length,
341
- text: slice,
342
- truncatedBefore: offset > 0,
343
- truncatedAfter: offset + maxChars < text.length,
344
- callCount,
345
- };
346
- const textResult = `Read ${slice.length} of ${text.length} characters from ${params.blockIndex === undefined ? params.entryId : `${params.entryId}:${params.blockIndex}`}. Keep reads small; increase offset for the next slice if needed.`;
347
- return createContextDeletionToolResult(textResult, details);
348
- }
349
- catch (error) {
350
- const message = formatErrorMessage(error);
351
- store.setLastError(message);
352
- const details = {
353
- entryId: params.entryId,
354
- ...(params.blockIndex === undefined ? {} : { blockIndex: params.blockIndex }),
355
- offset,
356
- maxChars,
357
- totalChars: 0,
358
- text: "",
359
- truncatedBefore: false,
360
- truncatedAfter: false,
361
- callCount,
362
- error: message,
363
- };
364
- return createContextDeletionToolResult(`Error reading transcript entry: ${message}`, details);
365
- }
366
- });
367
- },
368
- };
369
- const budgetTool = {
370
- ...CONTEXT_COMPACTION_BUDGET_TOOL,
371
- label: "context compaction budget",
372
- executionMode: "parallel",
373
- async execute(_toolCallId) {
374
- return store.transaction(() => {
375
- const callCount = store.incrementCallCount();
376
- store.clearLastError();
377
- const liveTargets = readTargets(); // recompute image stats each call (issue #1500)
378
- const imageTokensRemaining = sumRemainingImageTokens(transcript, liveTargets);
379
- const imageBlocksRemaining = countRemainingImageBlocks(transcript, liveTargets);
380
- const details = createContextCompactionBudgetDetails(currentStats(), callCount, contextWindow, parameters, imageTokensRemaining, imageBlocksRemaining);
381
- const windowText = details.contextWindowBeforePercent !== undefined
382
- ? ` Context window fullness: ${details.contextWindowBeforePercent}% before selected deletions, ${details.contextWindowAfterPercent}% after selected deletions.`
383
- : " Context window size is unknown for this model, so fullness percentages are unavailable.";
384
- const targetText = details.tokensToDeleteForTarget > 0 ? ` Delete about ${details.tokensToDeleteForTarget} more token(s) to reach the ${details.targetReductionPercent}% reduction target.` : ` The selected deletions meet or exceed the ${details.targetReductionPercent}% reduction target.`;
385
- const imageText = details.remainingImageTokens > 0 ? ` Images account for ${details.imageTokenPercent}% of remaining context (${details.remainingImageTokens} tokens across ${details.imageBlockCount} block(s)); prefer deleting stale/superseded image content blocks when images dominate.` : "";
386
- return createContextDeletionToolResult(`Current selected deletions reduce context by ${details.currentReductionPercent}% (${details.deletedTokens} token(s)); tokens after selected deletions: ${details.currentTokensAfter}/${details.tokensBefore}.${windowText}${targetText}${imageText} Keep maximizing useful retained context while aggressively removing low-value blocks.`, details);
387
- });
388
- },
389
- };
390
- return {
391
- tool,
392
- grepTool,
393
- searchTool,
394
- readEntryTool,
395
- budgetTool,
396
- tools: [tool, grepTool, searchTool, readEntryTool, budgetTool],
397
- getDeletionRequest: () => deletionRequestFromTargets(readTargets()),
398
- getValidatedResult: () => validatedResult,
399
- getLastError: () => store.getLastError(),
400
- getCallCount: () => store.getCallCount(),
401
- };
402
- }
403
- //# sourceMappingURL=context-deletion-tools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-deletion-tools.js","sourceRoot":"","sources":["../../../src/core/compaction/context-deletion-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@earendil-works/pi-agent-core\";\nimport type { ContextCompactionStats, ContextDeletionTarget } from \"../session-manager.ts\";\nimport {\n\tCONTEXT_COMPACTION_AUTO_QUERY,\n\ttype CompactableTranscript,\n\ttype ContextCompactionRunOptions,\n\ttype ValidatedContextDeletionResult,\n} from \"./context-compaction-types.ts\";\nimport {\n\tcreateContextCompactionBudgetDetails,\n\tcreateContextDeletionToolResult,\n\tcountRemainingImageBlocks,\n\tfinitePositiveNumber,\n\tformatErrorMessage,\n\tsumRemainingImageTokens,\n} from \"./context-compaction-metrics.ts\";\nimport { getTranscriptCompactionParameters, normalizeContextCompactionParameters } from \"./context-compaction-strategy.ts\";\nimport {\n\tCONTEXT_COMPACTION_BUDGET_TOOL,\n\tCONTEXT_DELETE_TOOL,\n\tCONTEXT_DELETE_TOOL_NAME,\n\tCONTEXT_GREP_DELETE_DEFAULT_MAX_MATCHES,\n\tCONTEXT_GREP_DELETE_TOOL,\n\tCONTEXT_GREP_DELETE_TOOL_NAME,\n\tCONTEXT_READ_ENTRY_DEFAULT_MAX_CHARS,\n\tCONTEXT_READ_ENTRY_MAX_CHARS,\n\tCONTEXT_READ_ENTRY_TOOL,\n\tCONTEXT_READ_ENTRY_TOOL_NAME,\n\tCONTEXT_SEARCH_DEFAULT_CONTEXT_CHARS,\n\tCONTEXT_SEARCH_DEFAULT_MAX_MATCHES,\n\tCONTEXT_SEARCH_MAX_CONTEXT_CHARS,\n\tCONTEXT_SEARCH_MAX_MATCHES,\n\tCONTEXT_SEARCH_TRANSCRIPT_TOOL,\n\ttype ContextCompactionBudgetToolDetails,\n\ttype ContextDeletionToolController,\n\ttype ContextDeletionToolDetails,\n\ttype ContextGrepDeletionMatch,\n\ttype ContextGrepDeletionSkipped,\n\ttype ContextGrepDeletionToolDetails,\n\ttype ContextReadEntryToolDetails,\n\ttype ContextTranscriptSearchMatch,\n\ttype ContextTranscriptSearchToolDetails,\n\tContextCompactionBudgetToolParameters,\n\tContextDeleteToolParameters,\n\tContextGrepDeleteToolParameters,\n\tContextReadEntryToolParameters,\n\tContextSearchTranscriptToolParameters,\n} from \"./context-deletion-tool-definitions.ts\";\nimport { computeContextCompactionStats, contextDeletionRequestFromObject, validateContextDeletionRequest } from \"./context-deletion-application.ts\";\nimport {\n\tcanDeleteTarget,\n\tdeletionRequestFromTargets,\n\tgetRecentContextEntryIds,\n\tisStaleUserImageOnlyEntry,\n\tmergeContextDeletionTargets,\n} from \"./context-deletion-targets.ts\";\nimport { createContextDeletionStore } from \"./context-deletion-store.ts\";\nimport {\n\taddGrepCandidate,\n\tassertSafeRegexScan,\n\tclampInteger,\n\tcreateGrepMatcher,\n\tcurrentTargetDeleted,\n\tfilterProtectedGrepCandidates,\n\tfindMatchIndex,\n\tsnippetForMatch,\n\ttextSlice,\n} from \"./context-deletion-tool-helpers.ts\";\n\nexport function createContextDeletionTool(\n\tinputTranscript: CompactableTranscript,\n\toptions: ContextCompactionRunOptions = {},\n): ContextDeletionToolController {\n\tconst contextWindow = finitePositiveNumber(options.contextWindow);\n\tconst parameters = normalizeContextCompactionParameters(\n\t\t{ ...getTranscriptCompactionParameters(inputTranscript), ...options },\n\t\tinputTranscript.parameters?.query ?? CONTEXT_COMPACTION_AUTO_QUERY,\n\t);\n\tconst transcript: CompactableTranscript = { ...inputTranscript, parameters };\n\tconst store = createContextDeletionStore(transcript);\n\tlet validatedResult: ValidatedContextDeletionResult | undefined;\n\n\tfunction readTargets(): ContextDeletionTarget[] {\n\t\treturn store.readTargets();\n\t}\n\n\tfunction applyValidatedTargets(additionalTargets: readonly ContextDeletionTarget[]): ValidatedContextDeletionResult {\n\t\tconst mergedTargets = mergeContextDeletionTargets(readTargets(), additionalTargets);\n\t\tvalidatedResult = validateContextDeletionRequest(deletionRequestFromTargets(mergedTargets), transcript);\n\t\tstore.replaceTargets(validatedResult.deletedTargets);\n\t\treturn validatedResult;\n\t}\n\n\tfunction currentStats(): ContextCompactionStats {\n\t\treturn validatedResult?.stats ?? computeContextCompactionStats(transcript, readTargets());\n\t}\n\n\tfunction canDeleteProtectedTarget(target: ContextDeletionTarget): boolean {\n\t\treturn canDeleteTarget(transcript, target);\n\t}\n\n\tfunction shouldGrepDeleteContentBlockAsEntry(entryId: string, blockCount: number): boolean {\n\t\tif (blockCount <= 1) return true;\n\t\tconst entry = transcript.entries.find((candidate) => candidate.entryId === entryId);\n\t\treturn entry !== undefined && isStaleUserImageOnlyEntry(transcript, entry);\n\t}\n\n\tconst tool: AgentTool<typeof ContextDeleteToolParameters, ContextDeletionToolDetails> = {\n\t\t...CONTEXT_DELETE_TOOL,\n\t\tlabel: \"context deletion request\",\n\t\texecutionMode: \"parallel\",\n\t\tasync execute(_toolCallId, params) {\n\t\t\treturn store.transaction(() => {\n\t\t\t\tconst callCount = store.incrementCallCount();\n\t\t\t\ttry {\n\t\t\t\t\tconst incomingRequest = contextDeletionRequestFromObject(params, `${CONTEXT_DELETE_TOOL_NAME} arguments`);\n\t\t\t\t\tconst incomingValidated = validateContextDeletionRequest(incomingRequest, transcript);\n\t\t\t\t\tconst applied = applyValidatedTargets(incomingValidated.deletedTargets);\n\t\t\t\t\tstore.clearLastError();\n\t\t\t\t\tconst deletedTargets = readTargets();\n\n\t\t\t\t\tconst details: ContextDeletionToolDetails = {\n\t\t\t\t\t\tdeletions: deletionRequestFromTargets(deletedTargets).deletions,\n\t\t\t\t\t\tdeletedTargets,\n\t\t\t\t\t\tstats: applied.stats,\n\t\t\t\t\t\tcallCount,\n\t\t\t\t\t};\n\t\t\t\t\tconst text = `Recorded ${incomingValidated.deletedTargets.length} deletion target(s); ${deletedTargets.length} total validated deletion target(s) are selected. Continue calling ${CONTEXT_DELETE_TOOL_NAME} or ${CONTEXT_GREP_DELETE_TOOL_NAME} for additional deletions, or respond done when finished.`;\n\t\t\t\t\treturn createContextDeletionToolResult(text, details);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = formatErrorMessage(error);\n\t\t\t\t\tstore.setLastError(message);\n\t\t\t\t\tconst deletedTargets = readTargets();\n\t\t\t\t\tconst details: ContextDeletionToolDetails = {\n\t\t\t\t\t\tdeletions: deletionRequestFromTargets(deletedTargets).deletions,\n\t\t\t\t\t\tdeletedTargets,\n\t\t\t\t\t\tstats: currentStats(),\n\t\t\t\t\t\tcallCount,\n\t\t\t\t\t\terror: message,\n\t\t\t\t\t};\n\t\t\t\t\treturn createContextDeletionToolResult(\n\t\t\t\t\t\t`Error recording context deletion targets: ${message}. No new deletion targets were applied; continue with a corrected tool call.`,\n\t\t\t\t\t\tdetails,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t};\n\n\tconst grepTool: AgentTool<typeof ContextGrepDeleteToolParameters, ContextGrepDeletionToolDetails> = {\n\t\t...CONTEXT_GREP_DELETE_TOOL,\n\t\tlabel: \"context grep delete\",\n\t\texecutionMode: \"parallel\",\n\t\tasync execute(_toolCallId, params) {\n\t\t\treturn store.transaction(() => {\n\t\t\t\tconst callCount = store.incrementCallCount();\n\t\t\t\tconst pattern = params.pattern;\n\t\t\t\tconst regex = params.regex === true;\n\t\t\t\tconst caseSensitive = params.caseSensitive === true;\n\t\t\t\tconst target = params.target ?? \"entry\";\n\t\t\t\tconst maxMatches = params.maxMatches ?? CONTEXT_GREP_DELETE_DEFAULT_MAX_MATCHES;\n\t\t\t\tconst candidates: ContextDeletionTarget[] = [];\n\t\t\t\tconst matches: ContextGrepDeletionMatch[] = [];\n\t\t\t\tlet reportedMatches: ContextGrepDeletionMatch[] = matches;\n\t\t\t\tconst skipped: ContextGrepDeletionSkipped[] = [];\n\t\t\t\tconst seenTargets = new Set<string>();\n\n\t\t\t\ttry {\n\t\t\t\t\tif (regex) {\n\t\t\t\t\t\tassertSafeRegexScan(store.getGrepScanTextLength(target));\n\t\t\t\t\t}\n\t\t\t\t\tconst matcher = createGrepMatcher(pattern, regex, caseSensitive);\n\t\t\t\t\tconst currentTargets = readTargets();\n\t\t\t\t\tconst recentEntryIds = getRecentContextEntryIds(transcript);\n\n\t\t\t\t\tif (target === \"entry\") {\n\t\t\t\t\t\tfor (const entry of store.listEntriesForGrep()) {\n\t\t\t\t\t\t\tif (!matcher.test(entry.text)) continue;\n\t\t\t\t\t\t\tconst candidate: ContextDeletionTarget = { kind: \"entry\", entryId: entry.entry_id };\n\t\t\t\t\t\t\tif (recentEntryIds.has(candidate.entryId)) {\n\t\t\t\t\t\t\t\tskipped.push({ entryId: entry.entry_id, target, reason: \"protected_entry\", text: entry.text });\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (entry.is_protected === 1 && !canDeleteProtectedTarget(candidate)) {\n\t\t\t\t\t\t\t\tskipped.push({ entryId: entry.entry_id, target, reason: \"protected_entry\", text: entry.text });\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (currentTargetDeleted(currentTargets, candidate)) {\n\t\t\t\t\t\t\t\tskipped.push({ entryId: entry.entry_id, target, reason: \"already_deleted\", text: entry.text });\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taddGrepCandidate(candidates, matches, seenTargets, candidate, {\n\t\t\t\t\t\t\t\tentryId: entry.entry_id,\n\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\ttext: entry.text,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const block of store.listContentBlocksForGrep()) {\n\t\t\t\t\t\t\tif (!matcher.test(block.text)) continue;\n\t\t\t\t\t\t\tconst candidate: ContextDeletionTarget = shouldGrepDeleteContentBlockAsEntry(block.entry_id, block.block_count)\n\t\t\t\t\t\t\t\t? { kind: \"entry\", entryId: block.entry_id }\n\t\t\t\t\t\t\t\t: { kind: \"content_block\", entryId: block.entry_id, blockIndex: block.block_index };\n\t\t\t\t\t\t\tif (recentEntryIds.has(candidate.entryId)) {\n\t\t\t\t\t\t\t\tskipped.push({\n\t\t\t\t\t\t\t\t\tentryId: block.entry_id,\n\t\t\t\t\t\t\t\t\ttarget: candidate.kind,\n\t\t\t\t\t\t\t\t\t...(candidate.kind === \"content_block\" ? { blockIndex: candidate.blockIndex } : {}),\n\t\t\t\t\t\t\t\t\treason: \"protected_entry\",\n\t\t\t\t\t\t\t\t\ttext: block.text,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (block.entry_protected === 1 && !canDeleteProtectedTarget(candidate)) {\n\t\t\t\t\t\t\t\tskipped.push({\n\t\t\t\t\t\t\t\t\tentryId: block.entry_id,\n\t\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\t\tblockIndex: block.block_index,\n\t\t\t\t\t\t\t\t\treason: \"protected_entry\",\n\t\t\t\t\t\t\t\t\ttext: block.text,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (block.block_protected === 1 && !canDeleteProtectedTarget(candidate)) {\n\t\t\t\t\t\t\t\tskipped.push({\n\t\t\t\t\t\t\t\t\tentryId: block.entry_id,\n\t\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\t\tblockIndex: block.block_index,\n\t\t\t\t\t\t\t\t\treason: \"protected_block\",\n\t\t\t\t\t\t\t\t\ttext: block.text,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (currentTargetDeleted(currentTargets, candidate)) {\n\t\t\t\t\t\t\t\tskipped.push({\n\t\t\t\t\t\t\t\t\tentryId: block.entry_id,\n\t\t\t\t\t\t\t\t\ttarget: candidate.kind,\n\t\t\t\t\t\t\t\t\t...(candidate.kind === \"content_block\" ? { blockIndex: candidate.blockIndex } : {}),\n\t\t\t\t\t\t\t\t\treason: \"already_deleted\",\n\t\t\t\t\t\t\t\t\ttext: block.text,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taddGrepCandidate(candidates, matches, seenTargets, candidate, {\n\t\t\t\t\t\t\t\tentryId: block.entry_id,\n\t\t\t\t\t\t\t\ttarget: candidate.kind,\n\t\t\t\t\t\t\t\t...(candidate.kind === \"content_block\" ? { blockIndex: candidate.blockIndex } : {}),\n\t\t\t\t\t\t\t\ttext: block.text,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst eligible = filterProtectedGrepCandidates(candidates, matches, currentTargets, transcript, skipped);\n\t\t\t\t\treportedMatches = eligible.matches;\n\t\t\t\t\tlet applied: ValidatedContextDeletionResult | undefined;\n\t\t\t\t\tif (params.expectedMatchCount !== undefined && eligible.candidates.length !== params.expectedMatchCount) {\n\t\t\t\t\t\tskipped.push({ reason: \"expected_match_count_mismatch\" });\n\t\t\t\t\t} else if (eligible.candidates.length > maxMatches) {\n\t\t\t\t\t\tskipped.push({ reason: \"max_matches_exceeded\" });\n\t\t\t\t\t} else if (eligible.candidates.length > 0) {\n\t\t\t\t\t\tapplied = applyValidatedTargets(eligible.candidates);\n\t\t\t\t\t}\n\t\t\t\t\tstore.clearLastError();\n\t\t\t\t\tconst deletedTargets = readTargets();\n\n\t\t\t\t\tconst details: ContextGrepDeletionToolDetails = {\n\t\t\t\t\t\tpattern,\n\t\t\t\t\t\tregex,\n\t\t\t\t\t\tcaseSensitive,\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tmatches: eligible.matches,\n\t\t\t\t\t\tskipped,\n\t\t\t\t\t\tdeletedTargets,\n\t\t\t\t\t\tstats: applied?.stats ?? currentStats(),\n\t\t\t\t\t\tcallCount,\n\t\t\t\t\t};\n\t\t\t\t\tconst text = `Matched ${eligible.matches.length} deletion target(s), skipped ${skipped.length}, and ${applied ? \"applied\" : \"did not apply\"} grep deletion for pattern ${JSON.stringify(pattern)}. Total validated deletion target(s): ${deletedTargets.length}.`;\n\t\t\t\t\treturn createContextDeletionToolResult(text, details);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = formatErrorMessage(error);\n\t\t\t\t\tstore.setLastError(message);\n\t\t\t\t\tconst deletedTargets = readTargets();\n\t\t\t\t\tconst details: ContextGrepDeletionToolDetails = {\n\t\t\t\t\t\tpattern,\n\t\t\t\t\t\tregex,\n\t\t\t\t\t\tcaseSensitive,\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tmatches: reportedMatches,\n\t\t\t\t\t\tskipped,\n\t\t\t\t\t\tdeletedTargets,\n\t\t\t\t\t\tstats: currentStats(),\n\t\t\t\t\t\tcallCount,\n\t\t\t\t\t\terror: message,\n\t\t\t\t\t};\n\t\t\t\t\treturn createContextDeletionToolResult(\n\t\t\t\t\t\t`Error applying grep deletion for pattern ${JSON.stringify(pattern)}: ${message}. No new deletion targets were applied; continue with a corrected tool call.`,\n\t\t\t\t\t\tdetails,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t};\n\n\tconst searchTool: AgentTool<typeof ContextSearchTranscriptToolParameters, ContextTranscriptSearchToolDetails> = {\n\t\t...CONTEXT_SEARCH_TRANSCRIPT_TOOL,\n\t\tlabel: \"context transcript search\",\n\t\texecutionMode: \"parallel\",\n\t\tasync execute(_toolCallId, params) {\n\t\t\treturn store.transaction(() => {\n\t\t\t\tconst callCount = store.incrementCallCount();\n\t\t\t\tconst pattern = params.pattern;\n\t\t\t\tconst regex = params.regex === true;\n\t\t\t\tconst caseSensitive = params.caseSensitive === true;\n\t\t\t\tconst target = params.target ?? \"entry\";\n\t\t\t\tconst maxMatches = clampInteger(params.maxMatches, CONTEXT_SEARCH_DEFAULT_MAX_MATCHES, 1, CONTEXT_SEARCH_MAX_MATCHES);\n\t\t\t\tconst contextChars = clampInteger(\n\t\t\t\t\tparams.contextChars,\n\t\t\t\t\tCONTEXT_SEARCH_DEFAULT_CONTEXT_CHARS,\n\t\t\t\t\t0,\n\t\t\t\t\tCONTEXT_SEARCH_MAX_CONTEXT_CHARS,\n\t\t\t\t);\n\t\t\t\tconst matches: ContextTranscriptSearchMatch[] = [];\n\t\t\t\tlet truncated = false;\n\n\t\t\t\ttry {\n\t\t\t\t\tif (regex) {\n\t\t\t\t\t\tassertSafeRegexScan(store.getGrepScanTextLength(target));\n\t\t\t\t\t}\n\t\t\t\t\tconst matcher = createGrepMatcher(pattern, regex, caseSensitive);\n\t\t\t\t\tif (target === \"entry\") {\n\t\t\t\t\t\tfor (const entry of store.listEntriesForGrep()) {\n\t\t\t\t\t\t\tconst matchIndex = findMatchIndex(matcher, entry.text);\n\t\t\t\t\t\t\tif (matchIndex < 0) continue;\n\t\t\t\t\t\t\tif (matches.length >= maxMatches) {\n\t\t\t\t\t\t\t\ttruncated = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatches.push({\n\t\t\t\t\t\t\t\tentryId: entry.entry_id,\n\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\tmatchIndex,\n\t\t\t\t\t\t\t\tsnippet: snippetForMatch(entry.text, matchIndex, contextChars),\n\t\t\t\t\t\t\t\tprotected: entry.is_protected === 1,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const block of store.listContentBlocksForGrep()) {\n\t\t\t\t\t\t\tconst matchIndex = findMatchIndex(matcher, block.text);\n\t\t\t\t\t\t\tif (matchIndex < 0) continue;\n\t\t\t\t\t\t\tif (matches.length >= maxMatches) {\n\t\t\t\t\t\t\t\ttruncated = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatches.push({\n\t\t\t\t\t\t\t\tentryId: block.entry_id,\n\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\tblockIndex: block.block_index,\n\t\t\t\t\t\t\t\tmatchIndex,\n\t\t\t\t\t\t\t\tsnippet: snippetForMatch(block.text, matchIndex, contextChars),\n\t\t\t\t\t\t\t\tprotected: block.entry_protected === 1 || block.block_protected === 1,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstore.clearLastError();\n\t\t\t\t\tconst details: ContextTranscriptSearchToolDetails = {\n\t\t\t\t\t\tpattern,\n\t\t\t\t\t\tregex,\n\t\t\t\t\t\tcaseSensitive,\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tmatches,\n\t\t\t\t\t\ttruncated,\n\t\t\t\t\t\tcallCount,\n\t\t\t\t\t};\n\t\t\t\t\tconst text = `Found ${matches.length}${truncated ? \"+\" : \"\"} ${target} match(es) for ${JSON.stringify(pattern)}. Use ${CONTEXT_READ_ENTRY_TOOL_NAME} with small maxChars to inspect exact content before deleting.`;\n\t\t\t\t\treturn createContextDeletionToolResult(text, details);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = formatErrorMessage(error);\n\t\t\t\t\tstore.setLastError(message);\n\t\t\t\t\tconst details: ContextTranscriptSearchToolDetails = {\n\t\t\t\t\t\tpattern,\n\t\t\t\t\t\tregex,\n\t\t\t\t\t\tcaseSensitive,\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tmatches,\n\t\t\t\t\t\ttruncated,\n\t\t\t\t\t\tcallCount,\n\t\t\t\t\t\terror: message,\n\t\t\t\t\t};\n\t\t\t\t\treturn createContextDeletionToolResult(\n\t\t\t\t\t\t`Error searching transcript for ${JSON.stringify(pattern)}: ${message}. Try a literal pattern or narrower query.`,\n\t\t\t\t\t\tdetails,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t};\n\n\tconst readEntryTool: AgentTool<typeof ContextReadEntryToolParameters, ContextReadEntryToolDetails> = {\n\t\t...CONTEXT_READ_ENTRY_TOOL,\n\t\tlabel: \"context read entry\",\n\t\texecutionMode: \"parallel\",\n\t\tasync execute(_toolCallId, params) {\n\t\t\treturn store.transaction(() => {\n\t\t\t\tconst callCount = store.incrementCallCount();\n\t\t\t\tconst offset = clampInteger(params.offset, 0, 0, Number.MAX_SAFE_INTEGER);\n\t\t\t\tconst maxChars = clampInteger(\n\t\t\t\t\tparams.maxChars,\n\t\t\t\t\tCONTEXT_READ_ENTRY_DEFAULT_MAX_CHARS,\n\t\t\t\t\t1,\n\t\t\t\t\tCONTEXT_READ_ENTRY_MAX_CHARS,\n\t\t\t\t);\n\t\t\t\ttry {\n\t\t\t\t\tconst row =\n\t\t\t\t\t\tparams.blockIndex === undefined\n\t\t\t\t\t\t\t? store.getEntryForRead(params.entryId)\n\t\t\t\t\t\t\t: store.getContentBlockForRead(params.entryId, params.blockIndex);\n\t\t\t\t\tif (!row) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\tparams.blockIndex === undefined\n\t\t\t\t\t\t\t\t? `Unknown transcript entry: ${params.entryId}`\n\t\t\t\t\t\t\t\t: `Unknown transcript content block: ${params.entryId}:${params.blockIndex}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst text = row.text;\n\t\t\t\t\tconst slice = textSlice(text, offset, maxChars);\n\t\t\t\t\tstore.clearLastError();\n\t\t\t\t\tconst details: ContextReadEntryToolDetails = {\n\t\t\t\t\t\tentryId: params.entryId,\n\t\t\t\t\t\t...(params.blockIndex === undefined ? {} : { blockIndex: params.blockIndex }),\n\t\t\t\t\t\toffset,\n\t\t\t\t\t\tmaxChars,\n\t\t\t\t\t\ttotalChars: text.length,\n\t\t\t\t\t\ttext: slice,\n\t\t\t\t\t\ttruncatedBefore: offset > 0,\n\t\t\t\t\t\ttruncatedAfter: offset + maxChars < text.length,\n\t\t\t\t\t\tcallCount,\n\t\t\t\t\t};\n\t\t\t\t\tconst textResult = `Read ${slice.length} of ${text.length} characters from ${params.blockIndex === undefined ? params.entryId : `${params.entryId}:${params.blockIndex}`}. Keep reads small; increase offset for the next slice if needed.`;\n\t\t\t\t\treturn createContextDeletionToolResult(textResult, details);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = formatErrorMessage(error);\n\t\t\t\t\tstore.setLastError(message);\n\t\t\t\t\tconst details: ContextReadEntryToolDetails = {\n\t\t\t\t\t\tentryId: params.entryId,\n\t\t\t\t\t\t...(params.blockIndex === undefined ? {} : { blockIndex: params.blockIndex }),\n\t\t\t\t\t\toffset,\n\t\t\t\t\t\tmaxChars,\n\t\t\t\t\t\ttotalChars: 0,\n\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\ttruncatedBefore: false,\n\t\t\t\t\t\ttruncatedAfter: false,\n\t\t\t\t\t\tcallCount,\n\t\t\t\t\t\terror: message,\n\t\t\t\t\t};\n\t\t\t\t\treturn createContextDeletionToolResult(`Error reading transcript entry: ${message}`, details);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t};\n\n\tconst budgetTool: AgentTool<typeof ContextCompactionBudgetToolParameters, ContextCompactionBudgetToolDetails> = {\n\t\t...CONTEXT_COMPACTION_BUDGET_TOOL,\n\t\tlabel: \"context compaction budget\",\n\t\texecutionMode: \"parallel\",\n\t\tasync execute(_toolCallId) {\n\t\t\treturn store.transaction(() => {\n\t\t\t\tconst callCount = store.incrementCallCount();\n\t\t\t\tstore.clearLastError();\n\t\t\t\tconst liveTargets = readTargets(); // recompute image stats each call (issue #1500)\n\t\t\t\tconst imageTokensRemaining = sumRemainingImageTokens(transcript, liveTargets);\n\t\t\t\tconst imageBlocksRemaining = countRemainingImageBlocks(transcript, liveTargets);\n\t\t\t\tconst details = createContextCompactionBudgetDetails(currentStats(), callCount, contextWindow, parameters, imageTokensRemaining, imageBlocksRemaining);\n\t\t\t\tconst windowText =\n\t\t\t\t\tdetails.contextWindowBeforePercent !== undefined\n\t\t\t\t\t\t? ` Context window fullness: ${details.contextWindowBeforePercent}% before selected deletions, ${details.contextWindowAfterPercent}% after selected deletions.`\n\t\t\t\t\t\t: \" Context window size is unknown for this model, so fullness percentages are unavailable.\";\n\t\t\t\tconst targetText = details.tokensToDeleteForTarget > 0 ? ` Delete about ${details.tokensToDeleteForTarget} more token(s) to reach the ${details.targetReductionPercent}% reduction target.` : ` The selected deletions meet or exceed the ${details.targetReductionPercent}% reduction target.`;\n\t\t\t\tconst imageText = details.remainingImageTokens > 0 ? ` Images account for ${details.imageTokenPercent}% of remaining context (${details.remainingImageTokens} tokens across ${details.imageBlockCount} block(s)); prefer deleting stale/superseded image content blocks when images dominate.` : \"\";\n\t\t\t\treturn createContextDeletionToolResult(\n\t\t\t\t\t`Current selected deletions reduce context by ${details.currentReductionPercent}% (${details.deletedTokens} token(s)); tokens after selected deletions: ${details.currentTokensAfter}/${details.tokensBefore}.${windowText}${targetText}${imageText} Keep maximizing useful retained context while aggressively removing low-value blocks.`,\n\t\t\t\t\tdetails,\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t};\n\n\treturn {\n\t\ttool,\n\t\tgrepTool,\n\t\tsearchTool,\n\t\treadEntryTool,\n\t\tbudgetTool,\n\t\ttools: [tool, grepTool, searchTool, readEntryTool, budgetTool],\n\t\tgetDeletionRequest: () => deletionRequestFromTargets(readTargets()),\n\t\tgetValidatedResult: () => validatedResult,\n\t\tgetLastError: () => store.getLastError(),\n\t\tgetCallCount: () => store.getCallCount(),\n\t};\n}\n"]}
@@ -1,11 +0,0 @@
1
- import type { AgentMessage } from "@earendil-works/pi-agent-core";
2
- import { type SessionEntry } from "../session-manager.ts";
3
- import type { CompactionSettings } from "./compaction.ts";
4
- import { type ContextCompactionPreparation, type ContextCompactionRunOptions } from "./context-compaction-types.ts";
5
- export declare function isExcludedFromLlmContext(message: AgentMessage): boolean;
6
- export declare function hasAssistantError(message: AgentMessage): boolean;
7
- export declare function hasToolResultError(message: AgentMessage): boolean;
8
- export declare function hasFailedBashExecution(message: AgentMessage): boolean;
9
- export declare function autoDetectContextCompactionQuery(pathEntries: readonly SessionEntry[]): string;
10
- export declare function prepareContextCompaction(pathEntries: SessionEntry[], settings: CompactionSettings, options?: ContextCompactionRunOptions): ContextCompactionPreparation | undefined;
11
- //# sourceMappingURL=context-transcript-analysis.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-transcript-analysis.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/context-transcript-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAIlE,OAAO,EAGN,KAAK,YAAY,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAIN,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,MAAM,+BAA+B,CAAC;AA0BvC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAEvE;AAkHD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAEhE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAEjE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAErE;AAED,wBAAgB,gCAAgC,CAAC,WAAW,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAW7F;AAiBD,wBAAgB,wBAAwB,CACvC,WAAW,EAAE,YAAY,EAAE,EAC3B,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,GAAE,2BAAgC,GACvC,4BAA4B,GAAG,SAAS,CA6D1C","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { AssistantMessage } from \"@earendil-works/pi-ai/compat\";\nimport { createBranchSummaryMessage, createCustomMessage, messageIsLlmVisible, userLikeContentBlockIsLlmVisible } from \"../messages.ts\";\nimport { normalizeDerivedSessionEntries } from \"../session-entry-normalization.ts\";\nimport {\n\tbuildContextDeletionFilteredPath,\n\tbuildEffectiveContextDeletionFilters,\n\ttype SessionEntry,\n} from \"../session-manager.ts\";\nimport type { CompactionSettings } from \"./compaction.ts\";\nimport { estimateContentBlockTokens, estimateTokens } from \"./compaction.ts\";\nimport {\n\tCONTEXT_COMPACTION_AUTO_QUERY,\n\ttype CompactableContentBlock,\n\ttype CompactableTranscriptEntry,\n\ttype ContextCompactionPreparation,\n\ttype ContextCompactionRunOptions,\n} from \"./context-compaction-types.ts\";\nimport {\n\tnormalizeContextCompactionParameters,\n\tnormalizeContextCompactionQuery,\n} from \"./context-compaction-strategy.ts\";\n\nfunction getMessageFromEntry(entry: SessionEntry): AgentMessage | undefined {\n\tif (entry.type === \"message\") {\n\t\treturn entry.message;\n\t}\n\tif (entry.type === \"custom_message\") {\n\t\treturn createCustomMessage(\n\t\t\tentry.customType,\n\t\t\tentry.content,\n\t\t\tentry.display,\n\t\t\tentry.details,\n\t\t\tentry.timestamp,\n\t\t\tentry.excludeFromContext,\n\t\t);\n\t}\n\tif (entry.type === \"branch_summary\" && typeof entry.summary === \"string\") {\n\t\treturn createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp);\n\t}\n\treturn undefined;\n}\n\nexport function isExcludedFromLlmContext(message: AgentMessage): boolean {\n\treturn !messageIsLlmVisible(message);\n}\n\nfunction getContextEligibleMessageFromEntry(entry: SessionEntry): AgentMessage | undefined {\n\tconst message = getMessageFromEntry(entry);\n\tif (!message || isExcludedFromLlmContext(message)) return undefined;\n\treturn message;\n}\n\nfunction safelySerialize(value: unknown): string {\n\ttry {\n\t\tconst serialized = JSON.stringify(value);\n\t\tif (typeof serialized === \"string\") return serialized;\n\t} catch {\n\t\t// Preserve a finite diagnostic projection for cyclic future payloads.\n\t}\n\treturn \"[unserializable content]\";\n}\n\nfunction textFromUnknownContent(content: unknown): string {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return safelySerialize(content);\n\treturn content.map((block) => textFromContentBlock(block)).join(\"\\n\");\n}\n\nfunction textFromContentBlock(block: unknown): string {\n\tif (!block || typeof block !== \"object\") return String(block);\n\tconst record = block as Record<string, unknown>;\n\tif (record.type === \"text\" && typeof record.text === \"string\") return record.text;\n\tif (record.type === \"thinking\" && typeof record.thinking === \"string\") return record.thinking;\n\tif (record.type === \"toolCall\") {\n\t\tconst name = typeof record.name === \"string\" ? record.name : \"tool\";\n\t\tconst id = typeof record.id === \"string\" ? record.id : \"unknown\";\n\t\tconst args = \"arguments\" in record ? safelySerialize(record.arguments) : \"\";\n\t\treturn `toolCall ${id} ${name} ${args}`.trim();\n\t}\n\tif (record.type === \"image\") return \"[image]\";\n\treturn safelySerialize(record);\n}\n\nfunction getToolCallIdFromBlock(block: unknown): string | undefined {\n\tif (!block || typeof block !== \"object\") return undefined;\n\tconst record = block as Record<string, unknown>;\n\tif (record.type !== \"toolCall\") return undefined;\n\treturn typeof record.id === \"string\" ? record.id : undefined;\n}\n\nfunction getToolResultCallId(message: AgentMessage): string | undefined {\n\tif (message.role !== \"toolResult\") return undefined;\n\tconst callId = (message as { toolCallId?: unknown }).toolCallId;\n\treturn typeof callId === \"string\" ? callId : undefined;\n}\n\nfunction contentBlocksForEntry(\n\tentryId: string,\n\tmessage: AgentMessage,\n\tprotectedEntry: boolean,\n\texistingDeletedBlocks: ReadonlySet<number> | undefined,\n): CompactableContentBlock[] {\n\tconst content = (message as { content?: unknown }).content;\n\tif (!Array.isArray(content)) return [];\n\treturn content\n\t\t.map((block, blockIndex): CompactableContentBlock | undefined => {\n\t\t\tif (existingDeletedBlocks?.has(blockIndex)) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst type =\n\t\t\t\tblock && typeof block === \"object\" && typeof (block as { type?: unknown }).type === \"string\"\n\t\t\t\t\t? ((block as { type: string }).type)\n\t\t\t\t\t: \"unknown\";\n\t\t\tconst text = textFromContentBlock(block);\n\t\t\tconst llmVisible =\n\t\t\t\tmessage.role === \"user\" || message.role === \"custom\"\n\t\t\t\t\t? userLikeContentBlockIsLlmVisible(block)\n\t\t\t\t\t: true;\n\t\t\treturn {\n\t\t\t\tentryId,\n\t\t\t\tblockIndex,\n\t\t\t\ttype,\n\t\t\t\ttext,\n\t\t\t\ttokenEstimate: estimateContentBlockTokens(block, llmVisible),\n\t\t\t\tprotected: protectedEntry,\n\t\t\t\tllmVisible,\n\t\t\t\ttoolCallId: getToolCallIdFromBlock(block),\n\t\t\t};\n\t\t})\n\t\t.filter((block): block is CompactableContentBlock => block !== undefined);\n}\n\nfunction messageText(message: AgentMessage): string {\n\tswitch (message.role) {\n\t\tcase \"bashExecution\":\n\t\t\treturn `Ran ${message.command}\\n${message.output}`;\n\t\tcase \"branchSummary\":\n\t\t\treturn message.summary;\n\t\tcase \"custom\":\n\t\tcase \"toolResult\":\n\t\tcase \"user\":\n\t\t\treturn textFromUnknownContent(message.content);\n\t\tcase \"assistant\":\n\t\t\treturn textFromUnknownContent(message.content);\n\t\tcase \"compactionSummary\":\n\t\t\t// Legacy summary-compaction message type retained in the upstream AgentMessage union\n\t\t\t// after summary compaction was removed; surface its archival summary text.\n\t\t\treturn message.summary;\n\t\tdefault: {\n\t\t\t// Exhaustiveness guard: adding a new AgentMessage role must fail the build here instead\n\t\t\t// of silently degrading to an empty string.\n\t\t\tconst _exhaustiveCheck: never = message;\n\t\t\tvoid _exhaustiveCheck;\n\t\t\treturn \"\";\n\t\t}\n\t}\n}\n\nexport function hasAssistantError(message: AgentMessage): boolean {\n\treturn message.role === \"assistant\" && (message as AssistantMessage).stopReason === \"error\";\n}\n\nexport function hasToolResultError(message: AgentMessage): boolean {\n\treturn message.role === \"toolResult\" && (message as { isError?: unknown }).isError === true;\n}\n\nexport function hasFailedBashExecution(message: AgentMessage): boolean {\n\treturn message.role === \"bashExecution\" && typeof message.exitCode === \"number\" && message.exitCode !== 0;\n}\n\nexport function autoDetectContextCompactionQuery(pathEntries: readonly SessionEntry[]): string {\n\tconst derivedPathEntries = normalizeDerivedSessionEntries(pathEntries);\n\tfor (let index = derivedPathEntries.length - 1; index >= 0; index--) {\n\t\tconst entry = derivedPathEntries[index];\n\t\tif (entry.type === \"context_compaction\") continue;\n\t\tconst message = getContextEligibleMessageFromEntry(entry);\n\t\tif (!message || message.role !== \"user\") continue;\n\t\tconst text = messageText(message).trim();\n\t\tif (text.length > 0) return normalizeContextCompactionQuery(text, CONTEXT_COMPACTION_AUTO_QUERY);\n\t}\n\treturn CONTEXT_COMPACTION_AUTO_QUERY;\n}\n\nfunction isProtectedEntry(\n\tentry: SessionEntry,\n\tmessage: AgentMessage,\n\trecentEntryIds: ReadonlySet<string>,\n): boolean {\n\tif (recentEntryIds.has(entry.id)) return true;\n\tif (message.role === \"user\") return true;\n\tif (message.role === \"custom\") return true;\n\tif (message.role === \"branchSummary\") return true;\n\tif (hasAssistantError(message) || hasToolResultError(message)) return true;\n\tif (hasFailedBashExecution(message)) return true;\n\tif (entry.type === \"branch_summary\") return true;\n\treturn false;\n}\n\nexport function prepareContextCompaction(\n\tpathEntries: SessionEntry[],\n\tsettings: CompactionSettings,\n\toptions: ContextCompactionRunOptions = {},\n): ContextCompactionPreparation | undefined {\n\tconst derivedPathEntries = normalizeDerivedSessionEntries(pathEntries);\n\tif (derivedPathEntries.length === 0) return undefined;\n\n\tconst effectiveDeletionFilters = buildEffectiveContextDeletionFilters(derivedPathEntries);\n\tconst filteredPathEntries = buildContextDeletionFilteredPath(derivedPathEntries, effectiveDeletionFilters);\n\tconst parameters = normalizeContextCompactionParameters(\n\t\t{ ...settings, ...options },\n\t\tautoDetectContextCompactionQuery(filteredPathEntries),\n\t);\n\tconst rawEntryById = new Map(derivedPathEntries.map((entry) => [entry.id, entry]));\n\tconst messageEntryIds = filteredPathEntries\n\t\t.filter((entry) => entry.type !== \"context_compaction\" && getContextEligibleMessageFromEntry(entry) !== undefined)\n\t\t.map((entry) => entry.id);\n\tconst recentEntryIds = new Set(parameters.preserve_recent > 0 ? messageEntryIds.slice(-parameters.preserve_recent) : []);\n\tconst protectedEntryIds = new Set<string>();\n\tconst entries: CompactableTranscriptEntry[] = [];\n\n\tfor (const entry of filteredPathEntries) {\n\t\tif (entry.type === \"context_compaction\") continue;\n\t\tconst message = getContextEligibleMessageFromEntry(entry);\n\t\tif (!message) continue;\n\t\tconst rawEntry = rawEntryById.get(entry.id) ?? entry;\n\t\tconst protectedEntry = isProtectedEntry(entry, message, recentEntryIds);\n\t\tif (protectedEntry) protectedEntryIds.add(entry.id);\n\t\tconst rawMessage = getContextEligibleMessageFromEntry(rawEntry) ?? message;\n\t\tconst contentBlocks = contentBlocksForEntry(\n\t\t\tentry.id,\n\t\t\trawMessage,\n\t\t\tprotectedEntry,\n\t\t\teffectiveDeletionFilters.deletedContentBlocks.get(entry.id),\n\t\t);\n\t\tconst toolCallIds = contentBlocks.map((block) => block.toolCallId).filter((id): id is string => id !== undefined);\n\t\tconst text = contentBlocks.length > 0 ? contentBlocks.map((block) => block.text).join(\"\\n\") : messageText(message);\n\t\tentries.push({\n\t\t\tentryId: entry.id,\n\t\t\tentryType: entry.type,\n\t\t\trole: message.role,\n\t\t\ttext,\n\t\t\ttokenEstimate: estimateTokens(message),\n\t\t\tprotected: protectedEntry,\n\t\t\tcontentBlocks,\n\t\t\tmessage,\n\t\t\ttoolCallIds,\n\t\t\ttoolResultFor: getToolResultCallId(message),\n\t\t});\n\t}\n\n\tif (entries.length < 2) return undefined;\n\n\treturn {\n\t\tbranchEntries: derivedPathEntries,\n\t\tparameters,\n\t\ttranscript: {\n\t\t\tentries,\n\t\t\tprotectedEntryIds: [...protectedEntryIds],\n\t\t\ttokensBefore: entries.reduce((total, entry) => total + entry.tokenEstimate, 0),\n\t\t\tsettings,\n\t\t\tparameters,\n\t\t},\n\t};\n}\n"]}