@bastani/atomic 0.8.31-alpha.4 → 0.9.0-alpha.1

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 (1361) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/dist/builtin/cursor/CHANGELOG.md +4 -1
  3. package/dist/builtin/cursor/package.json +2 -2
  4. package/dist/builtin/cursor/src/proto/protobuf-codec-json.ts +44 -0
  5. package/dist/builtin/cursor/src/proto/protobuf-codec-request.ts +271 -0
  6. package/dist/builtin/cursor/src/proto/protobuf-codec-wire.ts +231 -0
  7. package/dist/builtin/cursor/src/proto/protobuf-codec.ts +5 -523
  8. package/dist/builtin/cursor/src/stream.ts +6 -70
  9. package/dist/builtin/cursor/src/transport-errors.ts +74 -0
  10. package/dist/builtin/cursor/src/transport-frame.ts +56 -0
  11. package/dist/builtin/cursor/src/transport-http2.ts +122 -0
  12. package/dist/builtin/cursor/src/transport-native-client.ts +161 -0
  13. package/dist/builtin/cursor/src/transport-run-stream.ts +188 -0
  14. package/dist/builtin/cursor/src/transport-timeouts.ts +87 -0
  15. package/dist/builtin/cursor/src/transport-types.ts +140 -0
  16. package/dist/builtin/cursor/src/transport.ts +24 -790
  17. package/dist/builtin/intercom/CHANGELOG.md +3 -0
  18. package/dist/builtin/intercom/broker/client.ts +0 -35
  19. package/dist/builtin/intercom/contact-supervisor-tool.ts +289 -0
  20. package/dist/builtin/intercom/index-heavy.ts +77 -1336
  21. package/dist/builtin/intercom/intercom-tool.ts +409 -0
  22. package/dist/builtin/intercom/intercom-utils.ts +401 -0
  23. package/dist/builtin/intercom/lifecycle.ts +133 -0
  24. package/dist/builtin/intercom/overlay.ts +96 -0
  25. package/dist/builtin/intercom/package.json +1 -1
  26. package/dist/builtin/intercom/subagent-relay.ts +137 -0
  27. package/dist/builtin/mcp/CHANGELOG.md +3 -0
  28. package/dist/builtin/mcp/config-write-utils.ts +104 -0
  29. package/dist/builtin/mcp/config.ts +4 -180
  30. package/dist/builtin/mcp/mcp-panel-renderer.ts +243 -0
  31. package/dist/builtin/mcp/mcp-panel-state.ts +227 -0
  32. package/dist/builtin/mcp/mcp-panel-types.ts +86 -0
  33. package/dist/builtin/mcp/mcp-panel.ts +145 -579
  34. package/dist/builtin/mcp/mcp-setup-panel.ts +4 -81
  35. package/dist/builtin/mcp/package.json +1 -1
  36. package/dist/builtin/mcp/proxy-auth.ts +61 -0
  37. package/dist/builtin/mcp/proxy-call.ts +373 -0
  38. package/dist/builtin/mcp/proxy-connect.ts +58 -0
  39. package/dist/builtin/mcp/proxy-info-modes.ts +326 -0
  40. package/dist/builtin/mcp/proxy-modes.ts +3 -805
  41. package/dist/builtin/mcp/proxy-types.ts +3 -0
  42. package/dist/builtin/mcp/ui-server-http.ts +81 -0
  43. package/dist/builtin/mcp/ui-server.ts +2 -127
  44. package/dist/builtin/subagents/CHANGELOG.md +3 -0
  45. package/dist/builtin/subagents/package.json +1 -1
  46. package/dist/builtin/subagents/src/agents/agent-discovery.ts +127 -0
  47. package/dist/builtin/subagents/src/agents/agent-loaders.ts +175 -0
  48. package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +310 -0
  49. package/dist/builtin/subagents/src/agents/agent-management.ts +3 -309
  50. package/dist/builtin/subagents/src/agents/agent-overrides.ts +397 -0
  51. package/dist/builtin/subagents/src/agents/agent-paths.ts +88 -0
  52. package/dist/builtin/subagents/src/agents/agent-types.ts +136 -0
  53. package/dist/builtin/subagents/src/agents/agents.ts +22 -895
  54. package/dist/builtin/subagents/src/agents/skills-paths.ts +333 -0
  55. package/dist/builtin/subagents/src/agents/skills.ts +3 -326
  56. package/dist/builtin/subagents/src/extension/index.ts +4 -118
  57. package/dist/builtin/subagents/src/extension/prompt-guidance.ts +13 -0
  58. package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +401 -0
  59. package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +131 -0
  60. package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +213 -0
  61. package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +84 -0
  62. package/dist/builtin/subagents/src/runs/background/async-execution.ts +13 -795
  63. package/dist/builtin/subagents/src/runs/background/subagent-runner-dynamic.ts +215 -0
  64. package/dist/builtin/subagents/src/runs/background/subagent-runner-finalize.ts +136 -0
  65. package/dist/builtin/subagents/src/runs/background/subagent-runner-output.ts +105 -0
  66. package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel-helpers.ts +112 -0
  67. package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel.ts +159 -0
  68. package/dist/builtin/subagents/src/runs/background/subagent-runner-sequential.ts +127 -0
  69. package/dist/builtin/subagents/src/runs/background/subagent-runner-state.ts +427 -0
  70. package/dist/builtin/subagents/src/runs/background/subagent-runner-step.ts +273 -0
  71. package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +269 -0
  72. package/dist/builtin/subagents/src/runs/background/subagent-runner-types.ts +196 -0
  73. package/dist/builtin/subagents/src/runs/background/subagent-runner-utils.ts +70 -0
  74. package/dist/builtin/subagents/src/runs/background/subagent-runner.ts +44 -2233
  75. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-behavior.ts +75 -0
  76. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-component.ts +202 -0
  77. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-edit.ts +97 -0
  78. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-editor.ts +160 -0
  79. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-frame.ts +72 -0
  80. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-modes.ts +161 -0
  81. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-selectors.ts +203 -0
  82. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-selectors.ts +234 -0
  83. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-state.ts +103 -0
  84. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-types.ts +29 -0
  85. package/dist/builtin/subagents/src/runs/foreground/chain-clarify.ts +4 -1328
  86. package/dist/builtin/subagents/src/runs/foreground/chain-execution-clarify.ts +117 -0
  87. package/dist/builtin/subagents/src/runs/foreground/chain-execution-details.ts +35 -0
  88. package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +194 -0
  89. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +183 -0
  90. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +185 -0
  91. package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +229 -0
  92. package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +194 -0
  93. package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +94 -1043
  94. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-control.ts +135 -0
  95. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +107 -0
  96. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-types.ts +17 -0
  97. package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +454 -0
  98. package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +219 -0
  99. package/dist/builtin/subagents/src/runs/foreground/execution-structured-retries.ts +77 -0
  100. package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +34 -0
  101. package/dist/builtin/subagents/src/runs/foreground/execution-utils.ts +56 -0
  102. package/dist/builtin/subagents/src/runs/foreground/execution.ts +6 -1082
  103. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +207 -0
  104. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +140 -0
  105. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +266 -0
  106. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +270 -0
  107. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +157 -0
  108. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +375 -0
  109. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +463 -0
  110. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +17 -0
  111. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +320 -0
  112. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +207 -0
  113. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +121 -0
  114. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +113 -0
  115. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +150 -2522
  116. package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +0 -16
  117. package/dist/builtin/subagents/src/runs/shared/nested-events-control.ts +167 -0
  118. package/dist/builtin/subagents/src/runs/shared/nested-events-core.ts +219 -0
  119. package/dist/builtin/subagents/src/runs/shared/nested-events-projection.ts +121 -0
  120. package/dist/builtin/subagents/src/runs/shared/nested-events-registry.ts +289 -0
  121. package/dist/builtin/subagents/src/runs/shared/nested-events-sanitize.ts +201 -0
  122. package/dist/builtin/subagents/src/runs/shared/nested-events.ts +50 -935
  123. package/dist/builtin/subagents/src/runs/shared/worktree.ts +0 -78
  124. package/dist/builtin/subagents/src/shared/types-async.ts +265 -0
  125. package/dist/builtin/subagents/src/shared/types-config.ts +125 -0
  126. package/dist/builtin/subagents/src/shared/types-depth.ts +121 -0
  127. package/dist/builtin/subagents/src/shared/types-output.ts +63 -0
  128. package/dist/builtin/subagents/src/shared/types-results.ts +318 -0
  129. package/dist/builtin/subagents/src/shared/types-runtime.ts +136 -0
  130. package/dist/builtin/subagents/src/shared/types.ts +10 -975
  131. package/dist/builtin/subagents/src/slash/slash-commands.ts +0 -12
  132. package/dist/builtin/subagents/src/tui/render-chain-graph.ts +247 -0
  133. package/dist/builtin/subagents/src/tui/render-event-formatting.ts +259 -0
  134. package/dist/builtin/subagents/src/tui/render-layout.ts +120 -0
  135. package/dist/builtin/subagents/src/tui/render-result-animation.ts +56 -0
  136. package/dist/builtin/subagents/src/tui/render-result-compact.ts +154 -0
  137. package/dist/builtin/subagents/src/tui/render-result.ts +390 -0
  138. package/dist/builtin/subagents/src/tui/render-stable-output.ts +83 -0
  139. package/dist/builtin/subagents/src/tui/render-status-progress.ts +133 -0
  140. package/dist/builtin/subagents/src/tui/render-widget-graph.ts +166 -0
  141. package/dist/builtin/subagents/src/tui/render-widget.ts +273 -0
  142. package/dist/builtin/subagents/src/tui/render.ts +14 -1801
  143. package/dist/builtin/web-access/CHANGELOG.md +3 -0
  144. package/dist/builtin/web-access/content-tools.ts +348 -0
  145. package/dist/builtin/web-access/curator-page-assets/script-1.ts +400 -0
  146. package/dist/builtin/web-access/curator-page-assets/script-2.ts +400 -0
  147. package/dist/builtin/web-access/curator-page-assets/script-3.ts +400 -0
  148. package/dist/builtin/web-access/curator-page-assets/script-4.ts +400 -0
  149. package/dist/builtin/web-access/curator-page-assets/script-5.ts +398 -0
  150. package/dist/builtin/web-access/curator-page-assets/styles-1.ts +394 -0
  151. package/dist/builtin/web-access/curator-page-assets/styles-2.ts +394 -0
  152. package/dist/builtin/web-access/curator-page-assets/styles-3.ts +393 -0
  153. package/dist/builtin/web-access/curator-page.ts +17 -3180
  154. package/dist/builtin/web-access/curator-server-helpers.ts +115 -0
  155. package/dist/builtin/web-access/curator-server.ts +2 -113
  156. package/dist/builtin/web-access/exa-mcp.ts +218 -0
  157. package/dist/builtin/web-access/exa.ts +2 -207
  158. package/dist/builtin/web-access/extract-frames.ts +228 -0
  159. package/dist/builtin/web-access/extract.ts +13 -214
  160. package/dist/builtin/web-access/github-config.ts +156 -0
  161. package/dist/builtin/web-access/github-extract.ts +3 -154
  162. package/dist/builtin/web-access/index-heavy.ts +8 -1904
  163. package/dist/builtin/web-access/package.json +2 -1
  164. package/dist/builtin/web-access/web-search-activity.ts +102 -0
  165. package/dist/builtin/web-access/web-search-browser.ts +116 -0
  166. package/dist/builtin/web-access/web-search-command.ts +242 -0
  167. package/dist/builtin/web-access/web-search-config.ts +163 -0
  168. package/dist/builtin/web-access/web-search-curator.ts +214 -0
  169. package/dist/builtin/web-access/web-search-features.ts +165 -0
  170. package/dist/builtin/web-access/web-search-formatting.ts +117 -0
  171. package/dist/builtin/web-access/web-search-return.ts +136 -0
  172. package/dist/builtin/web-access/web-search-summary.ts +170 -0
  173. package/dist/builtin/web-access/web-search-tool.ts +290 -0
  174. package/dist/builtin/web-access/web-search-types.ts +50 -0
  175. package/dist/builtin/workflows/CHANGELOG.md +8 -1
  176. package/dist/builtin/workflows/builtin/deep-research-codebase-runner.ts +492 -0
  177. package/dist/builtin/workflows/builtin/deep-research-codebase-utils.ts +346 -0
  178. package/dist/builtin/workflows/builtin/deep-research-codebase.ts +6 -822
  179. package/dist/builtin/workflows/builtin/goal-artifacts.ts +43 -0
  180. package/dist/builtin/workflows/builtin/goal-ledger.ts +54 -0
  181. package/dist/builtin/workflows/builtin/goal-prompts.ts +360 -0
  182. package/dist/builtin/workflows/builtin/goal-reducer.ts +141 -0
  183. package/dist/builtin/workflows/builtin/goal-reports.ts +56 -0
  184. package/dist/builtin/workflows/builtin/goal-review.ts +84 -0
  185. package/dist/builtin/workflows/builtin/goal-runner.ts +343 -0
  186. package/dist/builtin/workflows/builtin/goal-schemas.ts +60 -0
  187. package/dist/builtin/workflows/builtin/goal-types.ts +132 -0
  188. package/dist/builtin/workflows/builtin/goal.ts +4 -1160
  189. package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +432 -0
  190. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +477 -0
  191. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +312 -0
  192. package/dist/builtin/workflows/builtin/open-claude-design.ts +7 -1083
  193. package/dist/builtin/workflows/builtin/ralph-core.ts +408 -0
  194. package/dist/builtin/workflows/builtin/ralph-models.ts +123 -0
  195. package/dist/builtin/workflows/builtin/ralph-review-gate.ts +89 -0
  196. package/dist/builtin/workflows/builtin/ralph-runner.ts +499 -0
  197. package/dist/builtin/workflows/builtin/ralph.ts +7 -1015
  198. package/dist/builtin/workflows/package.json +1 -1
  199. package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +2 -2
  200. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +2 -2
  201. package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +2 -2
  202. package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/page.mjs +8 -1
  203. package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +13 -15
  204. package/dist/builtin/workflows/skills/impeccable/scripts/live-manual-edit-evidence.mjs +2 -2
  205. package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +9 -0
  206. package/dist/builtin/workflows/src/extension/atomic-stage-session.ts +186 -0
  207. package/dist/builtin/workflows/src/extension/config-file-loader.ts +152 -0
  208. package/dist/builtin/workflows/src/extension/config-loader.ts +2 -167
  209. package/dist/builtin/workflows/src/extension/discovery-loaders.ts +115 -0
  210. package/dist/builtin/workflows/src/extension/discovery.ts +3 -117
  211. package/dist/builtin/workflows/src/extension/dispatcher.ts +3 -0
  212. package/dist/builtin/workflows/src/extension/extension-factory.ts +120 -0
  213. package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +109 -0
  214. package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +270 -0
  215. package/dist/builtin/workflows/src/extension/index.ts +42 -4151
  216. package/dist/builtin/workflows/src/extension/public-types.ts +295 -0
  217. package/dist/builtin/workflows/src/extension/render-component.ts +14 -0
  218. package/dist/builtin/workflows/src/extension/runtime-direct.ts +96 -0
  219. package/dist/builtin/workflows/src/extension/runtime.ts +8 -92
  220. package/dist/builtin/workflows/src/extension/ui-surface.ts +286 -0
  221. package/dist/builtin/workflows/src/extension/wiring.ts +6 -475
  222. package/dist/builtin/workflows/src/extension/workflow-command-completions.ts +111 -0
  223. package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +213 -0
  224. package/dist/builtin/workflows/src/extension/workflow-command-surfaces.ts +81 -0
  225. package/dist/builtin/workflows/src/extension/workflow-command-utils.ts +181 -0
  226. package/dist/builtin/workflows/src/extension/workflow-policy.ts +15 -0
  227. package/dist/builtin/workflows/src/extension/workflow-ports.ts +41 -0
  228. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +23 -0
  229. package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +286 -0
  230. package/dist/builtin/workflows/src/extension/workflow-schema.ts +1 -1
  231. package/dist/builtin/workflows/src/extension/workflow-stage-results.ts +264 -0
  232. package/dist/builtin/workflows/src/extension/workflow-targets.ts +181 -0
  233. package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +175 -0
  234. package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +205 -0
  235. package/dist/builtin/workflows/src/extension/workflow-tool-helpers.ts +66 -0
  236. package/dist/builtin/workflows/src/extension/workflow-tool-inspection.ts +164 -0
  237. package/dist/builtin/workflows/src/extension/workflow-tool-registration.ts +54 -0
  238. package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +164 -0
  239. package/dist/builtin/workflows/src/extension/workflow-tool.ts +102 -0
  240. package/dist/builtin/workflows/src/runs/foreground/executor-abort.ts +431 -0
  241. package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +232 -0
  242. package/dist/builtin/workflows/src/runs/foreground/executor-child-helpers.ts +74 -0
  243. package/dist/builtin/workflows/src/runs/foreground/executor-child-workflow.ts +158 -0
  244. package/dist/builtin/workflows/src/runs/foreground/executor-continuation.ts +167 -0
  245. package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +450 -0
  246. package/dist/builtin/workflows/src/runs/foreground/executor-direct.ts +233 -0
  247. package/dist/builtin/workflows/src/runs/foreground/executor-exit-manager.ts +195 -0
  248. package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +368 -0
  249. package/dist/builtin/workflows/src/runs/foreground/executor-inputs.ts +83 -0
  250. package/dist/builtin/workflows/src/runs/foreground/executor-lifecycle.ts +441 -0
  251. package/dist/builtin/workflows/src/runs/foreground/executor-outputs.ts +160 -0
  252. package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +274 -0
  253. package/dist/builtin/workflows/src/runs/foreground/executor-run-finalizers.ts +122 -0
  254. package/dist/builtin/workflows/src/runs/foreground/executor-run.ts +359 -0
  255. package/dist/builtin/workflows/src/runs/foreground/executor-scheduler.ts +204 -0
  256. package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +197 -0
  257. package/dist/builtin/workflows/src/runs/foreground/executor-stage-context.ts +120 -0
  258. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +126 -0
  259. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +351 -0
  260. package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +134 -0
  261. package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +54 -0
  262. package/dist/builtin/workflows/src/runs/foreground/executor-task-context.ts +132 -0
  263. package/dist/builtin/workflows/src/runs/foreground/executor-task-prompts.ts +293 -0
  264. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +109 -0
  265. package/dist/builtin/workflows/src/runs/foreground/executor.ts +19 -5258
  266. package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +219 -0
  267. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +500 -0
  268. package/dist/builtin/workflows/src/runs/foreground/stage-runner-messages.ts +129 -0
  269. package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +53 -0
  270. package/dist/builtin/workflows/src/runs/foreground/stage-runner-output.ts +146 -0
  271. package/dist/builtin/workflows/src/runs/foreground/stage-runner-session.ts +55 -0
  272. package/dist/builtin/workflows/src/runs/foreground/stage-runner-structured-output.ts +82 -0
  273. package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +141 -0
  274. package/dist/builtin/workflows/src/runs/foreground/stage-runner.ts +13 -1342
  275. package/dist/builtin/workflows/src/runs/shared/model-fallback-candidates.ts +453 -0
  276. package/dist/builtin/workflows/src/runs/shared/model-fallback-failures.ts +442 -0
  277. package/dist/builtin/workflows/src/runs/shared/model-fallback.ts +2 -836
  278. package/dist/builtin/workflows/src/runs/shared/worktree-diff.ts +165 -0
  279. package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +220 -0
  280. package/dist/builtin/workflows/src/runs/shared/worktree-setup.ts +335 -0
  281. package/dist/builtin/workflows/src/runs/shared/worktree-types.ts +92 -0
  282. package/dist/builtin/workflows/src/runs/shared/worktree.ts +18 -791
  283. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +365 -0
  284. package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +425 -0
  285. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +236 -0
  286. package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +354 -0
  287. package/dist/builtin/workflows/src/shared/authoring-contract.d.ts +5 -598
  288. package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +428 -0
  289. package/dist/builtin/workflows/src/shared/persistence-restore.ts +11 -431
  290. package/dist/builtin/workflows/src/shared/store-factory.ts +16 -0
  291. package/dist/builtin/workflows/src/shared/store-internal.ts +219 -0
  292. package/dist/builtin/workflows/src/shared/store-prompt-methods.ts +219 -0
  293. package/dist/builtin/workflows/src/shared/store-public-types.ts +215 -0
  294. package/dist/builtin/workflows/src/shared/store-run-methods.ts +223 -0
  295. package/dist/builtin/workflows/src/shared/store-stage-methods.ts +305 -0
  296. package/dist/builtin/workflows/src/shared/store.ts +11 -1138
  297. package/dist/builtin/workflows/src/shared/workflow-failures-classifier.ts +266 -0
  298. package/dist/builtin/workflows/src/shared/workflow-failures-contract.ts +75 -0
  299. package/dist/builtin/workflows/src/shared/workflow-failures-decisions.ts +477 -0
  300. package/dist/builtin/workflows/src/shared/workflow-failures-signals.ts +248 -0
  301. package/dist/builtin/workflows/src/shared/workflow-failures.ts +13 -1001
  302. package/dist/builtin/workflows/src/tui/chat-surface.ts +0 -66
  303. package/dist/builtin/workflows/src/tui/graph-view-constants.ts +45 -0
  304. package/dist/builtin/workflows/src/tui/graph-view-graph-render.ts +161 -0
  305. package/dist/builtin/workflows/src/tui/graph-view-input.ts +333 -0
  306. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +336 -0
  307. package/dist/builtin/workflows/src/tui/graph-view-render.ts +194 -0
  308. package/dist/builtin/workflows/src/tui/graph-view-state.ts +306 -0
  309. package/dist/builtin/workflows/src/tui/graph-view-types.ts +70 -0
  310. package/dist/builtin/workflows/src/tui/graph-view.ts +4 -1386
  311. package/dist/builtin/workflows/src/tui/inline-form-editor-text.ts +121 -0
  312. package/dist/builtin/workflows/src/tui/inline-form-editor.ts +11 -223
  313. package/dist/builtin/workflows/src/tui/inputs-picker-editing.ts +151 -0
  314. package/dist/builtin/workflows/src/tui/inputs-picker-input.ts +305 -0
  315. package/dist/builtin/workflows/src/tui/inputs-picker-render.ts +300 -0
  316. package/dist/builtin/workflows/src/tui/inputs-picker-types.ts +190 -0
  317. package/dist/builtin/workflows/src/tui/inputs-picker.ts +19 -997
  318. package/dist/builtin/workflows/src/tui/prompt-card-input.ts +226 -0
  319. package/dist/builtin/workflows/src/tui/prompt-card-render.ts +373 -0
  320. package/dist/builtin/workflows/src/tui/prompt-card-select.ts +116 -0
  321. package/dist/builtin/workflows/src/tui/prompt-card-state.ts +61 -0
  322. package/dist/builtin/workflows/src/tui/prompt-card-text.ts +129 -0
  323. package/dist/builtin/workflows/src/tui/prompt-card.ts +8 -910
  324. package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +315 -0
  325. package/dist/builtin/workflows/src/tui/stage-chat-view-custom-ui.ts +127 -0
  326. package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +187 -0
  327. package/dist/builtin/workflows/src/tui/stage-chat-view-input.ts +222 -0
  328. package/dist/builtin/workflows/src/tui/stage-chat-view-render-helpers.ts +152 -0
  329. package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +464 -0
  330. package/dist/builtin/workflows/src/tui/stage-chat-view-transcript.ts +242 -0
  331. package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +151 -0
  332. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +141 -1777
  333. package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +85 -0
  334. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +1 -129
  335. package/dist/config-self-update.d.ts +21 -0
  336. package/dist/config-self-update.d.ts.map +1 -0
  337. package/dist/config-self-update.js +265 -0
  338. package/dist/config-self-update.js.map +1 -0
  339. package/dist/config.d.ts +3 -12
  340. package/dist/config.d.ts.map +1 -1
  341. package/dist/config.js +15 -252
  342. package/dist/config.js.map +1 -1
  343. package/dist/core/agent-session-accessors.d.ts +3 -0
  344. package/dist/core/agent-session-accessors.d.ts.map +1 -0
  345. package/dist/core/agent-session-accessors.js +36 -0
  346. package/dist/core/agent-session-accessors.js.map +1 -0
  347. package/dist/core/agent-session-auto-compaction.d.ts +32 -0
  348. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -0
  349. package/dist/core/agent-session-auto-compaction.js +214 -0
  350. package/dist/core/agent-session-auto-compaction.js.map +1 -0
  351. package/dist/core/agent-session-bash.d.ts +30 -0
  352. package/dist/core/agent-session-bash.d.ts.map +1 -0
  353. package/dist/core/agent-session-bash.js +84 -0
  354. package/dist/core/agent-session-bash.js.map +1 -0
  355. package/dist/core/agent-session-compaction.d.ts +44 -0
  356. package/dist/core/agent-session-compaction.d.ts.map +1 -0
  357. package/dist/core/agent-session-compaction.js +282 -0
  358. package/dist/core/agent-session-compaction.js.map +1 -0
  359. package/dist/core/agent-session-events.d.ts +65 -0
  360. package/dist/core/agent-session-events.d.ts.map +1 -0
  361. package/dist/core/agent-session-events.js +373 -0
  362. package/dist/core/agent-session-events.js.map +1 -0
  363. package/dist/core/agent-session-export.d.ts +42 -0
  364. package/dist/core/agent-session-export.d.ts.map +1 -0
  365. package/dist/core/agent-session-export.js +199 -0
  366. package/dist/core/agent-session-export.js.map +1 -0
  367. package/dist/core/agent-session-extension-bindings.d.ts +37 -0
  368. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -0
  369. package/dist/core/agent-session-extension-bindings.js +231 -0
  370. package/dist/core/agent-session-extension-bindings.js.map +1 -0
  371. package/dist/core/agent-session-message-queue.d.ts +85 -0
  372. package/dist/core/agent-session-message-queue.d.ts.map +1 -0
  373. package/dist/core/agent-session-message-queue.js +264 -0
  374. package/dist/core/agent-session-message-queue.js.map +1 -0
  375. package/dist/core/agent-session-methods.d.ts +302 -0
  376. package/dist/core/agent-session-methods.d.ts.map +1 -0
  377. package/dist/core/agent-session-methods.js +2 -0
  378. package/dist/core/agent-session-methods.js.map +1 -0
  379. package/dist/core/agent-session-models.d.ts +111 -0
  380. package/dist/core/agent-session-models.d.ts.map +1 -0
  381. package/dist/core/agent-session-models.js +368 -0
  382. package/dist/core/agent-session-models.js.map +1 -0
  383. package/dist/core/agent-session-prompt.d.ts +61 -0
  384. package/dist/core/agent-session-prompt.d.ts.map +1 -0
  385. package/dist/core/agent-session-prompt.js +330 -0
  386. package/dist/core/agent-session-prompt.js.map +1 -0
  387. package/dist/core/agent-session-retry.d.ts +62 -0
  388. package/dist/core/agent-session-retry.d.ts.map +1 -0
  389. package/dist/core/agent-session-retry.js +202 -0
  390. package/dist/core/agent-session-retry.js.map +1 -0
  391. package/dist/core/agent-session-skill-block.d.ts +13 -0
  392. package/dist/core/agent-session-skill-block.d.ts.map +1 -0
  393. package/dist/core/agent-session-skill-block.js +37 -0
  394. package/dist/core/agent-session-skill-block.js.map +1 -0
  395. package/dist/core/agent-session-state.d.ts +48 -0
  396. package/dist/core/agent-session-state.d.ts.map +1 -0
  397. package/dist/core/agent-session-state.js +129 -0
  398. package/dist/core/agent-session-state.js.map +1 -0
  399. package/dist/core/agent-session-tool-hooks.d.ts +7 -0
  400. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -0
  401. package/dist/core/agent-session-tool-hooks.js +72 -0
  402. package/dist/core/agent-session-tool-hooks.js.map +1 -0
  403. package/dist/core/agent-session-tool-registry.d.ts +15 -0
  404. package/dist/core/agent-session-tool-registry.d.ts.map +1 -0
  405. package/dist/core/agent-session-tool-registry.js +151 -0
  406. package/dist/core/agent-session-tool-registry.js.map +1 -0
  407. package/dist/core/agent-session-tree.d.ts +46 -0
  408. package/dist/core/agent-session-tree.d.ts.map +1 -0
  409. package/dist/core/agent-session-tree.js +217 -0
  410. package/dist/core/agent-session-tree.js.map +1 -0
  411. package/dist/core/agent-session-types.d.ts +159 -0
  412. package/dist/core/agent-session-types.d.ts.map +1 -0
  413. package/dist/core/agent-session-types.js +41 -0
  414. package/dist/core/agent-session-types.js.map +1 -0
  415. package/dist/core/agent-session.d.ts +68 -688
  416. package/dist/core/agent-session.d.ts.map +1 -1
  417. package/dist/core/agent-session.js +26 -3152
  418. package/dist/core/agent-session.js.map +1 -1
  419. package/dist/core/auth-storage-backends.d.ts +49 -0
  420. package/dist/core/auth-storage-backends.d.ts.map +1 -0
  421. package/dist/core/auth-storage-backends.js +185 -0
  422. package/dist/core/auth-storage-backends.js.map +1 -0
  423. package/dist/core/auth-storage.d.ts +2 -49
  424. package/dist/core/auth-storage.d.ts.map +1 -1
  425. package/dist/core/auth-storage.js +3 -183
  426. package/dist/core/auth-storage.js.map +1 -1
  427. package/dist/core/compaction/context-compaction-metrics.d.ts +16 -0
  428. package/dist/core/compaction/context-compaction-metrics.d.ts.map +1 -0
  429. package/dist/core/compaction/context-compaction-metrics.js +58 -0
  430. package/dist/core/compaction/context-compaction-metrics.js.map +1 -0
  431. package/dist/core/compaction/context-compaction-prompt.d.ts +9 -0
  432. package/dist/core/compaction/context-compaction-prompt.d.ts.map +1 -0
  433. package/dist/core/compaction/context-compaction-prompt.js +161 -0
  434. package/dist/core/compaction/context-compaction-prompt.js.map +1 -0
  435. package/dist/core/compaction/context-compaction-runner.d.ts +5 -0
  436. package/dist/core/compaction/context-compaction-runner.d.ts.map +1 -0
  437. package/dist/core/compaction/context-compaction-runner.js +181 -0
  438. package/dist/core/compaction/context-compaction-runner.js.map +1 -0
  439. package/dist/core/compaction/context-compaction-strategy.d.ts +5 -0
  440. package/dist/core/compaction/context-compaction-strategy.d.ts.map +1 -0
  441. package/dist/core/compaction/context-compaction-strategy.js +27 -0
  442. package/dist/core/compaction/context-compaction-strategy.js.map +1 -0
  443. package/dist/core/compaction/context-compaction-types.d.ts +73 -0
  444. package/dist/core/compaction/context-compaction-types.d.ts.map +1 -0
  445. package/dist/core/compaction/context-compaction-types.js +6 -0
  446. package/dist/core/compaction/context-compaction-types.js.map +1 -0
  447. package/dist/core/compaction/context-compaction.d.ts +9 -200
  448. package/dist/core/compaction/context-compaction.d.ts.map +1 -1
  449. package/dist/core/compaction/context-compaction.js +7 -1943
  450. package/dist/core/compaction/context-compaction.js.map +1 -1
  451. package/dist/core/compaction/context-deletion-application.d.ts +13 -0
  452. package/dist/core/compaction/context-deletion-application.d.ts.map +1 -0
  453. package/dist/core/compaction/context-deletion-application.js +259 -0
  454. package/dist/core/compaction/context-deletion-application.js.map +1 -0
  455. package/dist/core/compaction/context-deletion-store.d.ts +78 -0
  456. package/dist/core/compaction/context-deletion-store.d.ts.map +1 -0
  457. package/dist/core/compaction/context-deletion-store.js +162 -0
  458. package/dist/core/compaction/context-deletion-store.js.map +1 -0
  459. package/dist/core/compaction/context-deletion-targets.d.ts +40 -0
  460. package/dist/core/compaction/context-deletion-targets.d.ts.map +1 -0
  461. package/dist/core/compaction/context-deletion-targets.js +267 -0
  462. package/dist/core/compaction/context-deletion-targets.js.map +1 -0
  463. package/dist/core/compaction/context-deletion-tool-definitions.d.ts +187 -0
  464. package/dist/core/compaction/context-deletion-tool-definitions.d.ts.map +1 -0
  465. package/dist/core/compaction/context-deletion-tool-definitions.js +98 -0
  466. package/dist/core/compaction/context-deletion-tool-definitions.js.map +1 -0
  467. package/dist/core/compaction/context-deletion-tool-helpers.d.ts +19 -0
  468. package/dist/core/compaction/context-deletion-tool-helpers.d.ts.map +1 -0
  469. package/dist/core/compaction/context-deletion-tool-helpers.js +137 -0
  470. package/dist/core/compaction/context-deletion-tool-helpers.js.map +1 -0
  471. package/dist/core/compaction/context-deletion-tools.d.ts +4 -0
  472. package/dist/core/compaction/context-deletion-tools.d.ts.map +1 -0
  473. package/dist/core/compaction/context-deletion-tools.js +395 -0
  474. package/dist/core/compaction/context-deletion-tools.js.map +1 -0
  475. package/dist/core/compaction/context-transcript-analysis.d.ts +9 -0
  476. package/dist/core/compaction/context-transcript-analysis.d.ts.map +1 -0
  477. package/dist/core/compaction/context-transcript-analysis.js +234 -0
  478. package/dist/core/compaction/context-transcript-analysis.js.map +1 -0
  479. package/dist/core/export-html/index.d.ts.map +1 -1
  480. package/dist/core/export-html/index.js +2 -1
  481. package/dist/core/export-html/index.js.map +1 -1
  482. package/dist/core/export-html/template-js/data-tree.js +287 -0
  483. package/dist/core/export-html/template-js/entries-navigation.js +424 -0
  484. package/dist/core/export-html/template-js/initialization.js +312 -0
  485. package/dist/core/export-html/template-js/message-tools.js +415 -0
  486. package/dist/core/export-html/template-js/tree-filter-render.js +421 -0
  487. package/dist/core/export-html/template-script.d.ts +3 -0
  488. package/dist/core/export-html/template-script.d.ts.map +1 -0
  489. package/dist/core/export-html/template-script.js +13 -0
  490. package/dist/core/export-html/template-script.js.map +1 -0
  491. package/dist/core/export-html/template.js +3 -1
  492. package/dist/core/extensions/agent-events.d.ts +159 -0
  493. package/dist/core/extensions/agent-events.d.ts.map +1 -0
  494. package/dist/core/extensions/agent-events.js +2 -0
  495. package/dist/core/extensions/agent-events.js.map +1 -0
  496. package/dist/core/extensions/api-types.d.ts +189 -0
  497. package/dist/core/extensions/api-types.d.ts.map +1 -0
  498. package/dist/core/extensions/api-types.js +2 -0
  499. package/dist/core/extensions/api-types.js.map +1 -0
  500. package/dist/core/extensions/command-types.d.ts +14 -0
  501. package/dist/core/extensions/command-types.d.ts.map +1 -0
  502. package/dist/core/extensions/command-types.js +2 -0
  503. package/dist/core/extensions/command-types.js.map +1 -0
  504. package/dist/core/extensions/context-types.d.ts +130 -0
  505. package/dist/core/extensions/context-types.d.ts.map +1 -0
  506. package/dist/core/extensions/context-types.js +2 -0
  507. package/dist/core/extensions/context-types.js.map +1 -0
  508. package/dist/core/extensions/event-results.d.ts +61 -0
  509. package/dist/core/extensions/event-results.d.ts.map +1 -0
  510. package/dist/core/extensions/event-results.js +2 -0
  511. package/dist/core/extensions/event-results.js.map +1 -0
  512. package/dist/core/extensions/event-types.d.ts +6 -0
  513. package/dist/core/extensions/event-types.d.ts.map +1 -0
  514. package/dist/core/extensions/event-types.js +2 -0
  515. package/dist/core/extensions/event-types.js.map +1 -0
  516. package/dist/core/extensions/loader-api.d.ts +10 -0
  517. package/dist/core/extensions/loader-api.d.ts.map +1 -0
  518. package/dist/core/extensions/loader-api.js +143 -0
  519. package/dist/core/extensions/loader-api.js.map +1 -0
  520. package/dist/core/extensions/loader-core.d.ts +12 -0
  521. package/dist/core/extensions/loader-core.d.ts.map +1 -0
  522. package/dist/core/extensions/loader-core.js +91 -0
  523. package/dist/core/extensions/loader-core.js.map +1 -0
  524. package/dist/core/extensions/loader-discovery.d.ts +7 -0
  525. package/dist/core/extensions/loader-discovery.d.ts.map +1 -0
  526. package/dist/core/extensions/loader-discovery.js +139 -0
  527. package/dist/core/extensions/loader-discovery.js.map +1 -0
  528. package/dist/core/extensions/loader-resources.d.ts +11 -0
  529. package/dist/core/extensions/loader-resources.d.ts.map +1 -0
  530. package/dist/core/extensions/loader-resources.js +10 -0
  531. package/dist/core/extensions/loader-resources.js.map +1 -0
  532. package/dist/core/extensions/loader-runtime.d.ts +7 -0
  533. package/dist/core/extensions/loader-runtime.d.ts.map +1 -0
  534. package/dist/core/extensions/loader-runtime.js +51 -0
  535. package/dist/core/extensions/loader-runtime.js.map +1 -0
  536. package/dist/core/extensions/loader-virtual-modules.d.ts +3 -0
  537. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -0
  538. package/dist/core/extensions/loader-virtual-modules.js +92 -0
  539. package/dist/core/extensions/loader-virtual-modules.js.map +1 -0
  540. package/dist/core/extensions/loader.d.ts +4 -28
  541. package/dist/core/extensions/loader.d.ts.map +1 -1
  542. package/dist/core/extensions/loader.js +3 -542
  543. package/dist/core/extensions/loader.js.map +1 -1
  544. package/dist/core/extensions/message-types.d.ts +34 -0
  545. package/dist/core/extensions/message-types.d.ts.map +1 -0
  546. package/dist/core/extensions/message-types.js +2 -0
  547. package/dist/core/extensions/message-types.js.map +1 -0
  548. package/dist/core/extensions/provider-types.d.ts +71 -0
  549. package/dist/core/extensions/provider-types.d.ts.map +1 -0
  550. package/dist/core/extensions/provider-types.js +2 -0
  551. package/dist/core/extensions/provider-types.js.map +1 -0
  552. package/dist/core/extensions/runner-context.d.ts +42 -0
  553. package/dist/core/extensions/runner-context.d.ts.map +1 -0
  554. package/dist/core/extensions/runner-context.js +112 -0
  555. package/dist/core/extensions/runner-context.js.map +1 -0
  556. package/dist/core/extensions/runner-events.d.ts +47 -0
  557. package/dist/core/extensions/runner-events.d.ts.map +1 -0
  558. package/dist/core/extensions/runner-events.js +280 -0
  559. package/dist/core/extensions/runner-events.js.map +1 -0
  560. package/dist/core/extensions/runner-handlers.d.ts +32 -0
  561. package/dist/core/extensions/runner-handlers.d.ts.map +1 -0
  562. package/dist/core/extensions/runner-handlers.js +2 -0
  563. package/dist/core/extensions/runner-handlers.js.map +1 -0
  564. package/dist/core/extensions/runner-project-trust.d.ts +6 -0
  565. package/dist/core/extensions/runner-project-trust.d.ts.map +1 -0
  566. package/dist/core/extensions/runner-project-trust.js +27 -0
  567. package/dist/core/extensions/runner-project-trust.js.map +1 -0
  568. package/dist/core/extensions/runner-registries.d.ts +8 -0
  569. package/dist/core/extensions/runner-registries.d.ts.map +1 -0
  570. package/dist/core/extensions/runner-registries.js +76 -0
  571. package/dist/core/extensions/runner-registries.js.map +1 -0
  572. package/dist/core/extensions/runner-shortcuts.d.ts +10 -0
  573. package/dist/core/extensions/runner-shortcuts.d.ts.map +1 -0
  574. package/dist/core/extensions/runner-shortcuts.js +71 -0
  575. package/dist/core/extensions/runner-shortcuts.js.map +1 -0
  576. package/dist/core/extensions/runner-ui.d.ts +3 -0
  577. package/dist/core/extensions/runner-ui.d.ts.map +1 -0
  578. package/dist/core/extensions/runner-ui.js +50 -0
  579. package/dist/core/extensions/runner-ui.js.map +1 -0
  580. package/dist/core/extensions/runner.d.ts +7 -74
  581. package/dist/core/extensions/runner.d.ts.map +1 -1
  582. package/dist/core/extensions/runner.js +67 -673
  583. package/dist/core/extensions/runner.js.map +1 -1
  584. package/dist/core/extensions/runtime-types.d.ts +179 -0
  585. package/dist/core/extensions/runtime-types.d.ts.map +1 -0
  586. package/dist/core/extensions/runtime-types.js +2 -0
  587. package/dist/core/extensions/runtime-types.js.map +1 -0
  588. package/dist/core/extensions/session-events.d.ts +89 -0
  589. package/dist/core/extensions/session-events.d.ts.map +1 -0
  590. package/dist/core/extensions/session-events.js +2 -0
  591. package/dist/core/extensions/session-events.js.map +1 -0
  592. package/dist/core/extensions/tool-events.d.ts +127 -0
  593. package/dist/core/extensions/tool-events.d.ts.map +1 -0
  594. package/dist/core/extensions/tool-events.js +26 -0
  595. package/dist/core/extensions/tool-events.js.map +1 -0
  596. package/dist/core/extensions/tool-types.d.ts +100 -0
  597. package/dist/core/extensions/tool-types.d.ts.map +1 -0
  598. package/dist/core/extensions/tool-types.js +11 -0
  599. package/dist/core/extensions/tool-types.js.map +1 -0
  600. package/dist/core/extensions/types.d.ts +20 -1288
  601. package/dist/core/extensions/types.d.ts.map +1 -1
  602. package/dist/core/extensions/types.js +4 -34
  603. package/dist/core/extensions/types.js.map +1 -1
  604. package/dist/core/extensions/ui-types.d.ts +200 -0
  605. package/dist/core/extensions/ui-types.d.ts.map +1 -0
  606. package/dist/core/extensions/ui-types.js +2 -0
  607. package/dist/core/extensions/ui-types.js.map +1 -0
  608. package/dist/core/model-registry-auth.d.ts +7 -0
  609. package/dist/core/model-registry-auth.d.ts.map +1 -0
  610. package/dist/core/model-registry-auth.js +64 -0
  611. package/dist/core/model-registry-auth.js.map +1 -0
  612. package/dist/core/model-registry-builtins.d.ts +9 -0
  613. package/dist/core/model-registry-builtins.d.ts.map +1 -0
  614. package/dist/core/model-registry-builtins.js +120 -0
  615. package/dist/core/model-registry-builtins.js.map +1 -0
  616. package/dist/core/model-registry-custom-loader.d.ts +3 -0
  617. package/dist/core/model-registry-custom-loader.d.ts.map +1 -0
  618. package/dist/core/model-registry-custom-loader.js +213 -0
  619. package/dist/core/model-registry-custom-loader.js.map +1 -0
  620. package/dist/core/model-registry-dynamic.d.ts +6 -0
  621. package/dist/core/model-registry-dynamic.d.ts.map +1 -0
  622. package/dist/core/model-registry-dynamic.js +155 -0
  623. package/dist/core/model-registry-dynamic.js.map +1 -0
  624. package/dist/core/model-registry-loader.d.ts +4 -0
  625. package/dist/core/model-registry-loader.d.ts.map +1 -0
  626. package/dist/core/model-registry-loader.js +20 -0
  627. package/dist/core/model-registry-loader.js.map +1 -0
  628. package/dist/core/model-registry-schemas.d.ts +1084 -0
  629. package/dist/core/model-registry-schemas.d.ts.map +1 -0
  630. package/dist/core/model-registry-schemas.js +161 -0
  631. package/dist/core/model-registry-schemas.js.map +1 -0
  632. package/dist/core/model-registry-types.d.ts +74 -0
  633. package/dist/core/model-registry-types.d.ts.map +1 -0
  634. package/dist/core/model-registry-types.js +2 -0
  635. package/dist/core/model-registry-types.js.map +1 -0
  636. package/dist/core/model-registry.d.ts +3 -76
  637. package/dist/core/model-registry.d.ts.map +1 -1
  638. package/dist/core/model-registry.js +24 -733
  639. package/dist/core/model-registry.js.map +1 -1
  640. package/dist/core/model-resolver-cli.d.ts +19 -0
  641. package/dist/core/model-resolver-cli.d.ts.map +1 -0
  642. package/dist/core/model-resolver-cli.js +118 -0
  643. package/dist/core/model-resolver-cli.js.map +1 -0
  644. package/dist/core/model-resolver-defaults.d.ts +5 -0
  645. package/dist/core/model-resolver-defaults.d.ts.map +1 -0
  646. package/dist/core/model-resolver-defaults.js +47 -0
  647. package/dist/core/model-resolver-defaults.js.map +1 -0
  648. package/dist/core/model-resolver-initial.d.ts +31 -0
  649. package/dist/core/model-resolver-initial.d.ts.map +1 -0
  650. package/dist/core/model-resolver-initial.js +116 -0
  651. package/dist/core/model-resolver-initial.js.map +1 -0
  652. package/dist/core/model-resolver-patterns.d.ts +26 -0
  653. package/dist/core/model-resolver-patterns.d.ts.map +1 -0
  654. package/dist/core/model-resolver-patterns.js +139 -0
  655. package/dist/core/model-resolver-patterns.js.map +1 -0
  656. package/dist/core/model-resolver-scope.d.ts +15 -0
  657. package/dist/core/model-resolver-scope.d.ts.map +1 -0
  658. package/dist/core/model-resolver-scope.js +66 -0
  659. package/dist/core/model-resolver-scope.js.map +1 -0
  660. package/dist/core/model-resolver-types.d.ts +29 -0
  661. package/dist/core/model-resolver-types.d.ts.map +1 -0
  662. package/dist/core/model-resolver-types.js +2 -0
  663. package/dist/core/model-resolver-types.js.map +1 -0
  664. package/dist/core/model-resolver.d.ts +6 -107
  665. package/dist/core/model-resolver.d.ts.map +1 -1
  666. package/dist/core/model-resolver.js +5 -549
  667. package/dist/core/model-resolver.js.map +1 -1
  668. package/dist/core/package-manager-auto-resources.d.ts +5 -0
  669. package/dist/core/package-manager-auto-resources.d.ts.map +1 -0
  670. package/dist/core/package-manager-auto-resources.js +109 -0
  671. package/dist/core/package-manager-auto-resources.js.map +1 -0
  672. package/dist/core/package-manager-command.d.ts +11 -0
  673. package/dist/core/package-manager-command.d.ts.map +1 -0
  674. package/dist/core/package-manager-command.js +102 -0
  675. package/dist/core/package-manager-command.js.map +1 -0
  676. package/dist/core/package-manager-constants.d.ts +4 -0
  677. package/dist/core/package-manager-constants.d.ts.map +1 -0
  678. package/dist/core/package-manager-constants.js +4 -0
  679. package/dist/core/package-manager-constants.js.map +1 -0
  680. package/dist/core/package-manager-env.d.ts +4 -0
  681. package/dist/core/package-manager-env.d.ts.map +1 -0
  682. package/dist/core/package-manager-env.js +40 -0
  683. package/dist/core/package-manager-env.js.map +1 -0
  684. package/dist/core/package-manager-git.d.ts +10 -0
  685. package/dist/core/package-manager-git.d.ts.map +1 -0
  686. package/dist/core/package-manager-git.js +271 -0
  687. package/dist/core/package-manager-git.js.map +1 -0
  688. package/dist/core/package-manager-manifest.d.ts +7 -0
  689. package/dist/core/package-manager-manifest.d.ts.map +1 -0
  690. package/dist/core/package-manager-manifest.js +45 -0
  691. package/dist/core/package-manager-manifest.js.map +1 -0
  692. package/dist/core/package-manager-npm.d.ts +25 -0
  693. package/dist/core/package-manager-npm.d.ts.map +1 -0
  694. package/dist/core/package-manager-npm.js +252 -0
  695. package/dist/core/package-manager-npm.js.map +1 -0
  696. package/dist/core/package-manager-operations.d.ts +11 -0
  697. package/dist/core/package-manager-operations.d.ts.map +1 -0
  698. package/dist/core/package-manager-operations.js +196 -0
  699. package/dist/core/package-manager-operations.js.map +1 -0
  700. package/dist/core/package-manager-paths.d.ts +14 -0
  701. package/dist/core/package-manager-paths.d.ts.map +1 -0
  702. package/dist/core/package-manager-paths.js +61 -0
  703. package/dist/core/package-manager-paths.js.map +1 -0
  704. package/dist/core/package-manager-progress.d.ts +4 -0
  705. package/dist/core/package-manager-progress.d.ts.map +1 -0
  706. package/dist/core/package-manager-progress.js +16 -0
  707. package/dist/core/package-manager-progress.js.map +1 -0
  708. package/dist/core/package-manager-resolver.d.ts +5 -0
  709. package/dist/core/package-manager-resolver.d.ts.map +1 -0
  710. package/dist/core/package-manager-resolver.js +149 -0
  711. package/dist/core/package-manager-resolver.js.map +1 -0
  712. package/dist/core/package-manager-resource-accumulator.d.ts +6 -0
  713. package/dist/core/package-manager-resource-accumulator.d.ts.map +1 -0
  714. package/dist/core/package-manager-resource-accumulator.js +67 -0
  715. package/dist/core/package-manager-resource-accumulator.js.map +1 -0
  716. package/dist/core/package-manager-resource-collector.d.ts +5 -0
  717. package/dist/core/package-manager-resource-collector.d.ts.map +1 -0
  718. package/dist/core/package-manager-resource-collector.js +148 -0
  719. package/dist/core/package-manager-resource-collector.js.map +1 -0
  720. package/dist/core/package-manager-resource-files.d.ts +14 -0
  721. package/dist/core/package-manager-resource-files.d.ts.map +1 -0
  722. package/dist/core/package-manager-resource-files.js +265 -0
  723. package/dist/core/package-manager-resource-files.js.map +1 -0
  724. package/dist/core/package-manager-resource-patterns.d.ts +12 -0
  725. package/dist/core/package-manager-resource-patterns.d.ts.map +1 -0
  726. package/dist/core/package-manager-resource-patterns.js +136 -0
  727. package/dist/core/package-manager-resource-patterns.js.map +1 -0
  728. package/dist/core/package-manager-settings.d.ts +10 -0
  729. package/dist/core/package-manager-settings.d.ts.map +1 -0
  730. package/dist/core/package-manager-settings.js +91 -0
  731. package/dist/core/package-manager-settings.js.map +1 -0
  732. package/dist/core/package-manager-source.d.ts +21 -0
  733. package/dist/core/package-manager-source.d.ts.map +1 -0
  734. package/dist/core/package-manager-source.js +146 -0
  735. package/dist/core/package-manager-source.js.map +1 -0
  736. package/dist/core/package-manager-types.d.ts +169 -0
  737. package/dist/core/package-manager-types.d.ts.map +1 -0
  738. package/dist/core/package-manager-types.js +9 -0
  739. package/dist/core/package-manager-types.js.map +1 -0
  740. package/dist/core/package-manager.d.ts +9 -174
  741. package/dist/core/package-manager.d.ts.map +1 -1
  742. package/dist/core/package-manager.js +56 -2100
  743. package/dist/core/package-manager.js.map +1 -1
  744. package/dist/core/resource-loader-assets.d.ts +6 -0
  745. package/dist/core/resource-loader-assets.d.ts.map +1 -0
  746. package/dist/core/resource-loader-assets.js +209 -0
  747. package/dist/core/resource-loader-assets.js.map +1 -0
  748. package/dist/core/resource-loader-context-files.d.ts +10 -0
  749. package/dist/core/resource-loader-context-files.d.ts.map +1 -0
  750. package/dist/core/resource-loader-context-files.js +74 -0
  751. package/dist/core/resource-loader-context-files.js.map +1 -0
  752. package/dist/core/resource-loader-core.d.ts +82 -0
  753. package/dist/core/resource-loader-core.d.ts.map +1 -0
  754. package/dist/core/resource-loader-core.js +168 -0
  755. package/dist/core/resource-loader-core.js.map +1 -0
  756. package/dist/core/resource-loader-discovery.d.ts +4 -0
  757. package/dist/core/resource-loader-discovery.d.ts.map +1 -0
  758. package/dist/core/resource-loader-discovery.js +28 -0
  759. package/dist/core/resource-loader-discovery.js.map +1 -0
  760. package/dist/core/resource-loader-extensions.d.ts +13 -0
  761. package/dist/core/resource-loader-extensions.d.ts.map +1 -0
  762. package/dist/core/resource-loader-extensions.js +110 -0
  763. package/dist/core/resource-loader-extensions.js.map +1 -0
  764. package/dist/core/resource-loader-helpers.d.ts +4 -0
  765. package/dist/core/resource-loader-helpers.d.ts.map +1 -0
  766. package/dist/core/resource-loader-helpers.js +23 -0
  767. package/dist/core/resource-loader-helpers.js.map +1 -0
  768. package/dist/core/resource-loader-internals.d.ts +96 -0
  769. package/dist/core/resource-loader-internals.d.ts.map +1 -0
  770. package/dist/core/resource-loader-internals.js +4 -0
  771. package/dist/core/resource-loader-internals.js.map +1 -0
  772. package/dist/core/resource-loader-package-resources.d.ts +31 -0
  773. package/dist/core/resource-loader-package-resources.d.ts.map +1 -0
  774. package/dist/core/resource-loader-package-resources.js +112 -0
  775. package/dist/core/resource-loader-package-resources.js.map +1 -0
  776. package/dist/core/resource-loader-paths.d.ts +4 -0
  777. package/dist/core/resource-loader-paths.d.ts.map +1 -0
  778. package/dist/core/resource-loader-paths.js +22 -0
  779. package/dist/core/resource-loader-paths.js.map +1 -0
  780. package/dist/core/resource-loader-reload.d.ts +6 -0
  781. package/dist/core/resource-loader-reload.d.ts.map +1 -0
  782. package/dist/core/resource-loader-reload.js +226 -0
  783. package/dist/core/resource-loader-reload.js.map +1 -0
  784. package/dist/core/resource-loader-source-info.d.ts +9 -0
  785. package/dist/core/resource-loader-source-info.d.ts.map +1 -0
  786. package/dist/core/resource-loader-source-info.js +101 -0
  787. package/dist/core/resource-loader-source-info.js.map +1 -0
  788. package/dist/core/resource-loader-types.d.ts +130 -0
  789. package/dist/core/resource-loader-types.d.ts.map +1 -0
  790. package/dist/core/resource-loader-types.js +2 -0
  791. package/dist/core/resource-loader-types.js.map +1 -0
  792. package/dist/core/resource-loader.d.ts +3 -242
  793. package/dist/core/resource-loader.d.ts.map +1 -1
  794. package/dist/core/resource-loader.js +2 -976
  795. package/dist/core/resource-loader.js.map +1 -1
  796. package/dist/core/sdk-exports.d.ts +7 -0
  797. package/dist/core/sdk-exports.d.ts.map +1 -0
  798. package/dist/core/sdk-exports.js +5 -0
  799. package/dist/core/sdk-exports.js.map +1 -0
  800. package/dist/core/sdk-types.d.ts +86 -0
  801. package/dist/core/sdk-types.d.ts.map +1 -0
  802. package/dist/core/sdk-types.js +2 -0
  803. package/dist/core/sdk-types.js.map +1 -0
  804. package/dist/core/sdk.d.ts +3 -91
  805. package/dist/core/sdk.d.ts.map +1 -1
  806. package/dist/core/sdk.js +2 -6
  807. package/dist/core/sdk.js.map +1 -1
  808. package/dist/core/session-manager-archive.d.ts +27 -0
  809. package/dist/core/session-manager-archive.d.ts.map +1 -0
  810. package/dist/core/session-manager-archive.js +114 -0
  811. package/dist/core/session-manager-archive.js.map +1 -0
  812. package/dist/core/session-manager-core.d.ts +104 -0
  813. package/dist/core/session-manager-core.d.ts.map +1 -0
  814. package/dist/core/session-manager-core.js +346 -0
  815. package/dist/core/session-manager-core.js.map +1 -0
  816. package/dist/core/session-manager-entries.d.ts +38 -0
  817. package/dist/core/session-manager-entries.d.ts.map +1 -0
  818. package/dist/core/session-manager-entries.js +124 -0
  819. package/dist/core/session-manager-entries.js.map +1 -0
  820. package/dist/core/session-manager-history.d.ts +38 -0
  821. package/dist/core/session-manager-history.d.ts.map +1 -0
  822. package/dist/core/session-manager-history.js +378 -0
  823. package/dist/core/session-manager-history.js.map +1 -0
  824. package/dist/core/session-manager-list.d.ts +5 -0
  825. package/dist/core/session-manager-list.d.ts.map +1 -0
  826. package/dist/core/session-manager-list.js +196 -0
  827. package/dist/core/session-manager-list.js.map +1 -0
  828. package/dist/core/session-manager-migrations.d.ts +11 -0
  829. package/dist/core/session-manager-migrations.d.ts.map +1 -0
  830. package/dist/core/session-manager-migrations.js +80 -0
  831. package/dist/core/session-manager-migrations.js.map +1 -0
  832. package/dist/core/session-manager-paths.d.ts +7 -0
  833. package/dist/core/session-manager-paths.d.ts.map +1 -0
  834. package/dist/core/session-manager-paths.js +22 -0
  835. package/dist/core/session-manager-paths.js.map +1 -0
  836. package/dist/core/session-manager-storage.d.ts +15 -0
  837. package/dist/core/session-manager-storage.d.ts.map +1 -0
  838. package/dist/core/session-manager-storage.js +127 -0
  839. package/dist/core/session-manager-storage.js.map +1 -0
  840. package/dist/core/session-manager-types.d.ts +172 -0
  841. package/dist/core/session-manager-types.d.ts.map +1 -0
  842. package/dist/core/session-manager-types.js +2 -0
  843. package/dist/core/session-manager-types.js.map +1 -0
  844. package/dist/core/session-manager-validation.d.ts +7 -0
  845. package/dist/core/session-manager-validation.d.ts.map +1 -0
  846. package/dist/core/session-manager-validation.js +34 -0
  847. package/dist/core/session-manager-validation.js.map +1 -0
  848. package/dist/core/session-manager.d.ts +8 -390
  849. package/dist/core/session-manager.d.ts.map +1 -1
  850. package/dist/core/session-manager.js +7 -1418
  851. package/dist/core/session-manager.js.map +1 -1
  852. package/dist/core/settings-manager-basic-accessors.d.ts +65 -0
  853. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -0
  854. package/dist/core/settings-manager-basic-accessors.js +253 -0
  855. package/dist/core/settings-manager-basic-accessors.js.map +1 -0
  856. package/dist/core/settings-manager-core.d.ts +57 -0
  857. package/dist/core/settings-manager-core.d.ts.map +1 -0
  858. package/dist/core/settings-manager-core.js +387 -0
  859. package/dist/core/settings-manager-core.js.map +1 -0
  860. package/dist/core/settings-manager-internals.d.ts +13 -0
  861. package/dist/core/settings-manager-internals.d.ts.map +1 -0
  862. package/dist/core/settings-manager-internals.js +4 -0
  863. package/dist/core/settings-manager-internals.js.map +1 -0
  864. package/dist/core/settings-manager-resource-accessors.d.ts +43 -0
  865. package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -0
  866. package/dist/core/settings-manager-resource-accessors.js +172 -0
  867. package/dist/core/settings-manager-resource-accessors.js.map +1 -0
  868. package/dist/core/settings-manager-ui-accessors.d.ts +44 -0
  869. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -0
  870. package/dist/core/settings-manager-ui-accessors.js +208 -0
  871. package/dist/core/settings-manager-ui-accessors.js.map +1 -0
  872. package/dist/core/settings-manager.d.ts +6 -321
  873. package/dist/core/settings-manager.d.ts.map +1 -1
  874. package/dist/core/settings-manager.js +5 -1060
  875. package/dist/core/settings-manager.js.map +1 -1
  876. package/dist/core/settings-merge.d.ts +4 -0
  877. package/dist/core/settings-merge.d.ts.map +1 -0
  878. package/dist/core/settings-merge.js +26 -0
  879. package/dist/core/settings-merge.js.map +1 -0
  880. package/dist/core/settings-storage.d.ts +20 -0
  881. package/dist/core/settings-storage.d.ts.map +1 -0
  882. package/dist/core/settings-storage.js +100 -0
  883. package/dist/core/settings-storage.js.map +1 -0
  884. package/dist/core/settings-types.d.ts +123 -0
  885. package/dist/core/settings-types.d.ts.map +1 -0
  886. package/dist/core/settings-types.js +2 -0
  887. package/dist/core/settings-types.js.map +1 -0
  888. package/dist/core/system-prompt.d.ts.map +1 -1
  889. package/dist/core/system-prompt.js +7 -0
  890. package/dist/core/system-prompt.js.map +1 -1
  891. package/dist/core/tools/bash-policy-compile.d.ts +5 -0
  892. package/dist/core/tools/bash-policy-compile.d.ts.map +1 -0
  893. package/dist/core/tools/bash-policy-compile.js +241 -0
  894. package/dist/core/tools/bash-policy-compile.js.map +1 -0
  895. package/dist/core/tools/bash-policy-evaluate.d.ts +3 -0
  896. package/dist/core/tools/bash-policy-evaluate.d.ts.map +1 -0
  897. package/dist/core/tools/bash-policy-evaluate.js +92 -0
  898. package/dist/core/tools/bash-policy-evaluate.js.map +1 -0
  899. package/dist/core/tools/bash-policy-format.d.ts +5 -0
  900. package/dist/core/tools/bash-policy-format.d.ts.map +1 -0
  901. package/dist/core/tools/bash-policy-format.js +49 -0
  902. package/dist/core/tools/bash-policy-format.js.map +1 -0
  903. package/dist/core/tools/bash-policy-parser.d.ts +4 -0
  904. package/dist/core/tools/bash-policy-parser.d.ts.map +1 -0
  905. package/dist/core/tools/bash-policy-parser.js +155 -0
  906. package/dist/core/tools/bash-policy-parser.js.map +1 -0
  907. package/dist/core/tools/bash-policy-segment.d.ts +3 -0
  908. package/dist/core/tools/bash-policy-segment.d.ts.map +1 -0
  909. package/dist/core/tools/bash-policy-segment.js +275 -0
  910. package/dist/core/tools/bash-policy-segment.js.map +1 -0
  911. package/dist/core/tools/bash-policy-shell.d.ts +11 -0
  912. package/dist/core/tools/bash-policy-shell.d.ts.map +1 -0
  913. package/dist/core/tools/bash-policy-shell.js +267 -0
  914. package/dist/core/tools/bash-policy-shell.js.map +1 -0
  915. package/dist/core/tools/bash-policy-types.d.ts +146 -0
  916. package/dist/core/tools/bash-policy-types.d.ts.map +1 -0
  917. package/dist/core/tools/bash-policy-types.js +2 -0
  918. package/dist/core/tools/bash-policy-types.js.map +1 -0
  919. package/dist/core/tools/bash-policy.d.ts +5 -61
  920. package/dist/core/tools/bash-policy.d.ts.map +1 -1
  921. package/dist/core/tools/bash-policy.js +4 -1068
  922. package/dist/core/tools/bash-policy.js.map +1 -1
  923. package/dist/core/tools/todos-execute.d.ts +5 -0
  924. package/dist/core/tools/todos-execute.d.ts.map +1 -0
  925. package/dist/core/tools/todos-execute.js +200 -0
  926. package/dist/core/tools/todos-execute.js.map +1 -0
  927. package/dist/core/tools/todos-locks.d.ts +4 -0
  928. package/dist/core/tools/todos-locks.d.ts.map +1 -0
  929. package/dist/core/tools/todos-locks.js +80 -0
  930. package/dist/core/tools/todos-locks.js.map +1 -0
  931. package/dist/core/tools/todos-model.d.ts +21 -0
  932. package/dist/core/tools/todos-model.d.ts.map +1 -0
  933. package/dist/core/tools/todos-model.js +71 -0
  934. package/dist/core/tools/todos-model.js.map +1 -0
  935. package/dist/core/tools/todos-mutations.d.ts +6 -0
  936. package/dist/core/tools/todos-mutations.d.ts.map +1 -0
  937. package/dist/core/tools/todos-mutations.js +85 -0
  938. package/dist/core/tools/todos-mutations.js.map +1 -0
  939. package/dist/core/tools/todos-paths.d.ts +5 -0
  940. package/dist/core/tools/todos-paths.d.ts.map +1 -0
  941. package/dist/core/tools/todos-paths.js +25 -0
  942. package/dist/core/tools/todos-paths.js.map +1 -0
  943. package/dist/core/tools/todos-render.d.ts +10 -0
  944. package/dist/core/tools/todos-render.d.ts.map +1 -0
  945. package/dist/core/tools/todos-render.js +159 -0
  946. package/dist/core/tools/todos-render.js.map +1 -0
  947. package/dist/core/tools/todos-storage.d.ts +9 -0
  948. package/dist/core/tools/todos-storage.d.ts.map +1 -0
  949. package/dist/core/tools/todos-storage.js +183 -0
  950. package/dist/core/tools/todos-storage.js.map +1 -0
  951. package/dist/core/tools/todos-types.d.ts +46 -0
  952. package/dist/core/tools/todos-types.d.ts.map +1 -0
  953. package/dist/core/tools/todos-types.js +27 -0
  954. package/dist/core/tools/todos-types.js.map +1 -0
  955. package/dist/core/tools/todos.d.ts +12 -32
  956. package/dist/core/tools/todos.d.ts.map +1 -1
  957. package/dist/core/tools/todos.js +7 -893
  958. package/dist/core/tools/todos.js.map +1 -1
  959. package/dist/index-extensions.d.ts +3 -0
  960. package/dist/index-extensions.d.ts.map +1 -0
  961. package/dist/index-extensions.js +2 -0
  962. package/dist/index-extensions.js.map +1 -0
  963. package/dist/index.d.ts +1 -2
  964. package/dist/index.d.ts.map +1 -1
  965. package/dist/index.js +1 -1
  966. package/dist/index.js.map +1 -1
  967. package/dist/main-app-mode.d.ts +15 -0
  968. package/dist/main-app-mode.d.ts.map +1 -0
  969. package/dist/main-app-mode.js +51 -0
  970. package/dist/main-app-mode.js.map +1 -0
  971. package/dist/main-session-options.d.ts +12 -0
  972. package/dist/main-session-options.d.ts.map +1 -0
  973. package/dist/main-session-options.js +87 -0
  974. package/dist/main-session-options.js.map +1 -0
  975. package/dist/main-session.d.ts +9 -0
  976. package/dist/main-session.d.ts.map +1 -0
  977. package/dist/main-session.js +188 -0
  978. package/dist/main-session.js.map +1 -0
  979. package/dist/main-stdio.d.ts +12 -0
  980. package/dist/main-stdio.d.ts.map +1 -0
  981. package/dist/main-stdio.js +68 -0
  982. package/dist/main-stdio.js.map +1 -0
  983. package/dist/main.d.ts +2 -3
  984. package/dist/main.d.ts.map +1 -1
  985. package/dist/main.js +11 -388
  986. package/dist/main.js.map +1 -1
  987. package/dist/migrations-config-values.d.ts +9 -0
  988. package/dist/migrations-config-values.d.ts.map +1 -0
  989. package/dist/migrations-config-values.js +298 -0
  990. package/dist/migrations-config-values.js.map +1 -0
  991. package/dist/migrations.d.ts.map +1 -1
  992. package/dist/migrations.js +2 -296
  993. package/dist/migrations.js.map +1 -1
  994. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  995. package/dist/modes/interactive/components/chat-message-renderer.js +0 -7
  996. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  997. package/dist/modes/interactive/components/chat-session-host-actions.d.ts +9 -0
  998. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -0
  999. package/dist/modes/interactive/components/chat-session-host-actions.js +244 -0
  1000. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -0
  1001. package/dist/modes/interactive/components/chat-session-host-editor.d.ts +18 -0
  1002. package/dist/modes/interactive/components/chat-session-host-editor.d.ts.map +1 -0
  1003. package/dist/modes/interactive/components/chat-session-host-editor.js +165 -0
  1004. package/dist/modes/interactive/components/chat-session-host-editor.js.map +1 -0
  1005. package/dist/modes/interactive/components/chat-session-host-events.d.ts +5 -0
  1006. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -0
  1007. package/dist/modes/interactive/components/chat-session-host-events.js +200 -0
  1008. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -0
  1009. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts +13 -0
  1010. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -0
  1011. package/dist/modes/interactive/components/chat-session-host-rendering.js +185 -0
  1012. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -0
  1013. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +13 -0
  1014. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -0
  1015. package/dist/modes/interactive/components/chat-session-host-runtime.js +101 -0
  1016. package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -0
  1017. package/dist/modes/interactive/components/chat-session-host-state.d.ts +53 -0
  1018. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -0
  1019. package/dist/modes/interactive/components/chat-session-host-state.js +42 -0
  1020. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -0
  1021. package/dist/modes/interactive/components/chat-session-host-types.d.ts +63 -0
  1022. package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -0
  1023. package/dist/modes/interactive/components/chat-session-host-types.js +2 -0
  1024. package/dist/modes/interactive/components/chat-session-host-types.js.map +1 -0
  1025. package/dist/modes/interactive/components/chat-session-host-utils.d.ts +28 -0
  1026. package/dist/modes/interactive/components/chat-session-host-utils.d.ts.map +1 -0
  1027. package/dist/modes/interactive/components/chat-session-host-utils.js +103 -0
  1028. package/dist/modes/interactive/components/chat-session-host-utils.js.map +1 -0
  1029. package/dist/modes/interactive/components/chat-session-host.d.ts +6 -129
  1030. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  1031. package/dist/modes/interactive/components/chat-session-host.js +50 -1022
  1032. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  1033. package/dist/modes/interactive/components/config-selector-list.d.ts +65 -0
  1034. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -0
  1035. package/dist/modes/interactive/components/config-selector-list.js +458 -0
  1036. package/dist/modes/interactive/components/config-selector-list.js.map +1 -0
  1037. package/dist/modes/interactive/components/config-selector.d.ts +3 -58
  1038. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  1039. package/dist/modes/interactive/components/config-selector.js +2 -457
  1040. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  1041. package/dist/modes/interactive/components/session-selector-delete.d.ts +10 -0
  1042. package/dist/modes/interactive/components/session-selector-delete.d.ts.map +1 -0
  1043. package/dist/modes/interactive/components/session-selector-delete.js +40 -0
  1044. package/dist/modes/interactive/components/session-selector-delete.js.map +1 -0
  1045. package/dist/modes/interactive/components/session-selector-header.d.ts +33 -0
  1046. package/dist/modes/interactive/components/session-selector-header.d.ts.map +1 -0
  1047. package/dist/modes/interactive/components/session-selector-header.js +117 -0
  1048. package/dist/modes/interactive/components/session-selector-header.js.map +1 -0
  1049. package/dist/modes/interactive/components/session-selector-list.d.ts +49 -0
  1050. package/dist/modes/interactive/components/session-selector-list.d.ts.map +1 -0
  1051. package/dist/modes/interactive/components/session-selector-list.js +307 -0
  1052. package/dist/modes/interactive/components/session-selector-list.js.map +1 -0
  1053. package/dist/modes/interactive/components/session-selector-tree.d.ts +25 -0
  1054. package/dist/modes/interactive/components/session-selector-tree.d.ts.map +1 -0
  1055. package/dist/modes/interactive/components/session-selector-tree.js +53 -0
  1056. package/dist/modes/interactive/components/session-selector-tree.js.map +1 -0
  1057. package/dist/modes/interactive/components/session-selector-types.d.ts +4 -0
  1058. package/dist/modes/interactive/components/session-selector-types.d.ts.map +1 -0
  1059. package/dist/modes/interactive/components/session-selector-types.js +2 -0
  1060. package/dist/modes/interactive/components/session-selector-types.js.map +1 -0
  1061. package/dist/modes/interactive/components/session-selector-utils.d.ts +4 -0
  1062. package/dist/modes/interactive/components/session-selector-utils.d.ts.map +1 -0
  1063. package/dist/modes/interactive/components/session-selector-utils.js +37 -0
  1064. package/dist/modes/interactive/components/session-selector-utils.js.map +1 -0
  1065. package/dist/modes/interactive/components/session-selector.d.ts +3 -49
  1066. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  1067. package/dist/modes/interactive/components/session-selector.js +5 -542
  1068. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  1069. package/dist/modes/interactive/components/settings-selector-handlers.d.ts +3 -0
  1070. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -0
  1071. package/dist/modes/interactive/components/settings-selector-handlers.js +84 -0
  1072. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -0
  1073. package/dist/modes/interactive/components/settings-selector-items.d.ts +4 -0
  1074. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -0
  1075. package/dist/modes/interactive/components/settings-selector-items.js +211 -0
  1076. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -0
  1077. package/dist/modes/interactive/components/settings-selector-options.d.ts +6 -0
  1078. package/dist/modes/interactive/components/settings-selector-options.d.ts.map +1 -0
  1079. package/dist/modes/interactive/components/settings-selector-options.js +14 -0
  1080. package/dist/modes/interactive/components/settings-selector-options.js.map +1 -0
  1081. package/dist/modes/interactive/components/settings-selector-submenus.d.ts +44 -0
  1082. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -0
  1083. package/dist/modes/interactive/components/settings-selector-submenus.js +228 -0
  1084. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -0
  1085. package/dist/modes/interactive/components/settings-selector-types.d.ts +67 -0
  1086. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -0
  1087. package/dist/modes/interactive/components/settings-selector-types.js +2 -0
  1088. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -0
  1089. package/dist/modes/interactive/components/settings-selector.d.ts +2 -63
  1090. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1091. package/dist/modes/interactive/components/settings-selector.js +5 -538
  1092. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1093. package/dist/modes/interactive/components/tree-selector-component.d.ts +21 -0
  1094. package/dist/modes/interactive/components/tree-selector-component.d.ts.map +1 -0
  1095. package/dist/modes/interactive/components/tree-selector-component.js +80 -0
  1096. package/dist/modes/interactive/components/tree-selector-component.js.map +1 -0
  1097. package/dist/modes/interactive/components/tree-selector-content.d.ts +8 -0
  1098. package/dist/modes/interactive/components/tree-selector-content.d.ts.map +1 -0
  1099. package/dist/modes/interactive/components/tree-selector-content.js +263 -0
  1100. package/dist/modes/interactive/components/tree-selector-content.js.map +1 -0
  1101. package/dist/modes/interactive/components/tree-selector-help.d.ts +16 -0
  1102. package/dist/modes/interactive/components/tree-selector-help.d.ts.map +1 -0
  1103. package/dist/modes/interactive/components/tree-selector-help.js +103 -0
  1104. package/dist/modes/interactive/components/tree-selector-help.js.map +1 -0
  1105. package/dist/modes/interactive/components/tree-selector-label-input.d.ts +16 -0
  1106. package/dist/modes/interactive/components/tree-selector-label-input.d.ts.map +1 -0
  1107. package/dist/modes/interactive/components/tree-selector-label-input.js +46 -0
  1108. package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -0
  1109. package/dist/modes/interactive/components/tree-selector-list.d.ts +33 -0
  1110. package/dist/modes/interactive/components/tree-selector-list.d.ts.map +1 -0
  1111. package/dist/modes/interactive/components/tree-selector-list.js +336 -0
  1112. package/dist/modes/interactive/components/tree-selector-list.js.map +1 -0
  1113. package/dist/modes/interactive/components/tree-selector-model.d.ts +7 -0
  1114. package/dist/modes/interactive/components/tree-selector-model.d.ts.map +1 -0
  1115. package/dist/modes/interactive/components/tree-selector-model.js +358 -0
  1116. package/dist/modes/interactive/components/tree-selector-model.js.map +1 -0
  1117. package/dist/modes/interactive/components/tree-selector-types.d.ts +57 -0
  1118. package/dist/modes/interactive/components/tree-selector-types.d.ts.map +1 -0
  1119. package/dist/modes/interactive/components/tree-selector-types.js +6 -0
  1120. package/dist/modes/interactive/components/tree-selector-types.js.map +1 -0
  1121. package/dist/modes/interactive/components/tree-selector-viewport.d.ts +10 -0
  1122. package/dist/modes/interactive/components/tree-selector-viewport.d.ts.map +1 -0
  1123. package/dist/modes/interactive/components/tree-selector-viewport.js +32 -0
  1124. package/dist/modes/interactive/components/tree-selector-viewport.js.map +1 -0
  1125. package/dist/modes/interactive/components/tree-selector.d.ts +2 -88
  1126. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  1127. package/dist/modes/interactive/components/tree-selector.js +1 -1200
  1128. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  1129. package/dist/modes/interactive/interactive-agent-events.d.ts +2 -0
  1130. package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -0
  1131. package/dist/modes/interactive/interactive-agent-events.js +370 -0
  1132. package/dist/modes/interactive/interactive-agent-events.js.map +1 -0
  1133. package/dist/modes/interactive/interactive-auth-login.d.ts +2 -0
  1134. package/dist/modes/interactive/interactive-auth-login.d.ts.map +1 -0
  1135. package/dist/modes/interactive/interactive-auth-login.js +214 -0
  1136. package/dist/modes/interactive/interactive-auth-login.js.map +1 -0
  1137. package/dist/modes/interactive/interactive-auth-routing.d.ts +2 -0
  1138. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -0
  1139. package/dist/modes/interactive/interactive-auth-routing.js +128 -0
  1140. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -0
  1141. package/dist/modes/interactive/interactive-autocomplete.d.ts +2 -0
  1142. package/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -0
  1143. package/dist/modes/interactive/interactive-autocomplete.js +140 -0
  1144. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -0
  1145. package/dist/modes/interactive/interactive-bash-compact.d.ts +2 -0
  1146. package/dist/modes/interactive/interactive-bash-compact.d.ts.map +1 -0
  1147. package/dist/modes/interactive/interactive-bash-compact.js +112 -0
  1148. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -0
  1149. package/dist/modes/interactive/interactive-editor-actions.d.ts +2 -0
  1150. package/dist/modes/interactive/interactive-editor-actions.d.ts.map +1 -0
  1151. package/dist/modes/interactive/interactive-editor-actions.js +131 -0
  1152. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -0
  1153. package/dist/modes/interactive/interactive-extension-context.d.ts +2 -0
  1154. package/dist/modes/interactive/interactive-extension-context.d.ts.map +1 -0
  1155. package/dist/modes/interactive/interactive-extension-context.js +159 -0
  1156. package/dist/modes/interactive/interactive-extension-context.js.map +1 -0
  1157. package/dist/modes/interactive/interactive-extension-custom-ui.d.ts +2 -0
  1158. package/dist/modes/interactive/interactive-extension-custom-ui.d.ts.map +1 -0
  1159. package/dist/modes/interactive/interactive-extension-custom-ui.js +208 -0
  1160. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -0
  1161. package/dist/modes/interactive/interactive-extension-dialogs.d.ts +2 -0
  1162. package/dist/modes/interactive/interactive-extension-dialogs.d.ts.map +1 -0
  1163. package/dist/modes/interactive/interactive-extension-dialogs.js +162 -0
  1164. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -0
  1165. package/dist/modes/interactive/interactive-extension-runtime.d.ts +2 -0
  1166. package/dist/modes/interactive/interactive-extension-runtime.d.ts.map +1 -0
  1167. package/dist/modes/interactive/interactive-extension-runtime.js +179 -0
  1168. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -0
  1169. package/dist/modes/interactive/interactive-extension-widgets.d.ts +2 -0
  1170. package/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -0
  1171. package/dist/modes/interactive/interactive-extension-widgets.js +113 -0
  1172. package/dist/modes/interactive/interactive-extension-widgets.js.map +1 -0
  1173. package/dist/modes/interactive/interactive-hotkeys-debug.d.ts +2 -0
  1174. package/dist/modes/interactive/interactive-hotkeys-debug.d.ts.map +1 -0
  1175. package/dist/modes/interactive/interactive-hotkeys-debug.js +186 -0
  1176. package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -0
  1177. package/dist/modes/interactive/interactive-input-handling.d.ts +2 -0
  1178. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -0
  1179. package/dist/modes/interactive/interactive-input-handling.js +275 -0
  1180. package/dist/modes/interactive/interactive-input-handling.js.map +1 -0
  1181. package/dist/modes/interactive/interactive-mode-base.d.ts +103 -0
  1182. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -0
  1183. package/dist/modes/interactive/interactive-mode-base.js +130 -0
  1184. package/dist/modes/interactive/interactive-mode-base.js.map +1 -0
  1185. package/dist/modes/interactive/interactive-mode-deps.d.ts +81 -0
  1186. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -0
  1187. package/dist/modes/interactive/interactive-mode-deps.js +74 -0
  1188. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -0
  1189. package/dist/modes/interactive/interactive-mode-helpers.d.ts +21 -0
  1190. package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -0
  1191. package/dist/modes/interactive/interactive-mode-helpers.js +77 -0
  1192. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -0
  1193. package/dist/modes/interactive/interactive-mode-surface.d.ts +313 -0
  1194. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -0
  1195. package/dist/modes/interactive/interactive-mode-surface.js +2 -0
  1196. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -0
  1197. package/dist/modes/interactive/interactive-mode-types.d.ts +29 -0
  1198. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -0
  1199. package/dist/modes/interactive/interactive-mode-types.js +2 -0
  1200. package/dist/modes/interactive/interactive-mode-types.js.map +1 -0
  1201. package/dist/modes/interactive/interactive-mode.d.ts +30 -404
  1202. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1203. package/dist/modes/interactive/interactive-mode.js +29 -5260
  1204. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1205. package/dist/modes/interactive/interactive-model-routing.d.ts +2 -0
  1206. package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -0
  1207. package/dist/modes/interactive/interactive-model-routing.js +269 -0
  1208. package/dist/modes/interactive/interactive-model-routing.js.map +1 -0
  1209. package/dist/modes/interactive/interactive-process-lifecycle.d.ts +2 -0
  1210. package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -0
  1211. package/dist/modes/interactive/interactive-process-lifecycle.js +189 -0
  1212. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -0
  1213. package/dist/modes/interactive/interactive-queueing.d.ts +2 -0
  1214. package/dist/modes/interactive/interactive-queueing.d.ts.map +1 -0
  1215. package/dist/modes/interactive/interactive-queueing.js +163 -0
  1216. package/dist/modes/interactive/interactive-queueing.js.map +1 -0
  1217. package/dist/modes/interactive/interactive-render-chat.d.ts +2 -0
  1218. package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -0
  1219. package/dist/modes/interactive/interactive-render-chat.js +170 -0
  1220. package/dist/modes/interactive/interactive-render-chat.js.map +1 -0
  1221. package/dist/modes/interactive/interactive-resource-disclosure.d.ts +2 -0
  1222. package/dist/modes/interactive/interactive-resource-disclosure.d.ts.map +1 -0
  1223. package/dist/modes/interactive/interactive-resource-disclosure.js +101 -0
  1224. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -0
  1225. package/dist/modes/interactive/interactive-resource-paths.d.ts +2 -0
  1226. package/dist/modes/interactive/interactive-resource-paths.d.ts.map +1 -0
  1227. package/dist/modes/interactive/interactive-resource-paths.js +228 -0
  1228. package/dist/modes/interactive/interactive-resource-paths.js.map +1 -0
  1229. package/dist/modes/interactive/interactive-resource-rendering.d.ts +2 -0
  1230. package/dist/modes/interactive/interactive-resource-rendering.d.ts.map +1 -0
  1231. package/dist/modes/interactive/interactive-resource-rendering.js +181 -0
  1232. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -0
  1233. package/dist/modes/interactive/interactive-selectors.d.ts +2 -0
  1234. package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -0
  1235. package/dist/modes/interactive/interactive-selectors.js +198 -0
  1236. package/dist/modes/interactive/interactive-selectors.js.map +1 -0
  1237. package/dist/modes/interactive/interactive-session-routing.d.ts +2 -0
  1238. package/dist/modes/interactive/interactive-session-routing.d.ts.map +1 -0
  1239. package/dist/modes/interactive/interactive-session-routing.js +232 -0
  1240. package/dist/modes/interactive/interactive-session-routing.js.map +1 -0
  1241. package/dist/modes/interactive/interactive-session-runtime.d.ts +2 -0
  1242. package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -0
  1243. package/dist/modes/interactive/interactive-session-runtime.js +131 -0
  1244. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -0
  1245. package/dist/modes/interactive/interactive-slash-commands.d.ts +2 -0
  1246. package/dist/modes/interactive/interactive-slash-commands.d.ts.map +1 -0
  1247. package/dist/modes/interactive/interactive-slash-commands.js +338 -0
  1248. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -0
  1249. package/dist/modes/interactive/interactive-startup.d.ts +2 -0
  1250. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -0
  1251. package/dist/modes/interactive/interactive-startup.js +348 -0
  1252. package/dist/modes/interactive/interactive-startup.js.map +1 -0
  1253. package/dist/modes/interactive/theme/color-utils.d.ts +20 -0
  1254. package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -0
  1255. package/dist/modes/interactive/theme/color-utils.js +204 -0
  1256. package/dist/modes/interactive/theme/color-utils.js.map +1 -0
  1257. package/dist/modes/interactive/theme/export-colors.d.ts +19 -0
  1258. package/dist/modes/interactive/theme/export-colors.d.ts.map +1 -0
  1259. package/dist/modes/interactive/theme/export-colors.js +69 -0
  1260. package/dist/modes/interactive/theme/export-colors.js.map +1 -0
  1261. package/dist/modes/interactive/theme/global-theme.d.ts +12 -0
  1262. package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -0
  1263. package/dist/modes/interactive/theme/global-theme.js +150 -0
  1264. package/dist/modes/interactive/theme/global-theme.js.map +1 -0
  1265. package/dist/modes/interactive/theme/terminal-detection.d.ts +30 -0
  1266. package/dist/modes/interactive/theme/terminal-detection.d.ts.map +1 -0
  1267. package/dist/modes/interactive/theme/terminal-detection.js +89 -0
  1268. package/dist/modes/interactive/theme/terminal-detection.js.map +1 -0
  1269. package/dist/modes/interactive/theme/theme-class.d.ts +30 -0
  1270. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -0
  1271. package/dist/modes/interactive/theme/theme-class.js +83 -0
  1272. package/dist/modes/interactive/theme/theme-class.js.map +1 -0
  1273. package/dist/modes/interactive/theme/theme-loading.d.ts +17 -0
  1274. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -0
  1275. package/dist/modes/interactive/theme/theme-loading.js +155 -0
  1276. package/dist/modes/interactive/theme/theme-loading.js.map +1 -0
  1277. package/dist/modes/interactive/theme/theme-parse.d.ts +5 -0
  1278. package/dist/modes/interactive/theme/theme-parse.d.ts.map +1 -0
  1279. package/dist/modes/interactive/theme/theme-parse.js +52 -0
  1280. package/dist/modes/interactive/theme/theme-parse.js.map +1 -0
  1281. package/dist/modes/interactive/theme/theme-schema.d.ts +255 -0
  1282. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  1283. package/dist/modes/interactive/theme/theme-schema.js +78 -0
  1284. package/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  1285. package/dist/modes/interactive/theme/theme.d.ts +6 -108
  1286. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  1287. package/dist/modes/interactive/theme/theme.js +6 -1065
  1288. package/dist/modes/interactive/theme/theme.js.map +1 -1
  1289. package/dist/modes/interactive/theme/tui-theme.d.ts +15 -0
  1290. package/dist/modes/interactive/theme/tui-theme.d.ts.map +1 -0
  1291. package/dist/modes/interactive/theme/tui-theme.js +199 -0
  1292. package/dist/modes/interactive/theme/tui-theme.js.map +1 -0
  1293. package/dist/modes/rpc/rpc-client.d.ts +1 -61
  1294. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  1295. package/dist/modes/rpc/rpc-client.js +1 -72
  1296. package/dist/modes/rpc/rpc-client.js.map +1 -1
  1297. package/dist/modes/rpc/rpc-command-handler.d.ts +14 -0
  1298. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -0
  1299. package/dist/modes/rpc/rpc-command-handler.js +226 -0
  1300. package/dist/modes/rpc/rpc-command-handler.js.map +1 -0
  1301. package/dist/modes/rpc/rpc-extension-ui.d.ts +15 -0
  1302. package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -0
  1303. package/dist/modes/rpc/rpc-extension-ui.js +196 -0
  1304. package/dist/modes/rpc/rpc-extension-ui.js.map +1 -0
  1305. package/dist/modes/rpc/rpc-input.d.ts +12 -0
  1306. package/dist/modes/rpc/rpc-input.d.ts.map +1 -0
  1307. package/dist/modes/rpc/rpc-input.js +54 -0
  1308. package/dist/modes/rpc/rpc-input.js.map +1 -0
  1309. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  1310. package/dist/modes/rpc/rpc-mode.js +43 -607
  1311. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  1312. package/dist/modes/rpc/rpc-responses.d.ts +8 -0
  1313. package/dist/modes/rpc/rpc-responses.d.ts.map +1 -0
  1314. package/dist/modes/rpc/rpc-responses.js +27 -0
  1315. package/dist/modes/rpc/rpc-responses.js.map +1 -0
  1316. package/dist/modes/rpc/rpc-session-binding.d.ts +25 -0
  1317. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -0
  1318. package/dist/modes/rpc/rpc-session-binding.js +70 -0
  1319. package/dist/modes/rpc/rpc-session-binding.js.map +1 -0
  1320. package/dist/package-manager-cli-parser.d.ts +28 -0
  1321. package/dist/package-manager-cli-parser.d.ts.map +1 -0
  1322. package/dist/package-manager-cli-parser.js +269 -0
  1323. package/dist/package-manager-cli-parser.js.map +1 -0
  1324. package/dist/package-manager-cli.d.ts +0 -1
  1325. package/dist/package-manager-cli.d.ts.map +1 -1
  1326. package/dist/package-manager-cli.js +2 -267
  1327. package/dist/package-manager-cli.js.map +1 -1
  1328. package/dist/utils/git.d.ts.map +1 -1
  1329. package/dist/utils/git.js +10 -0
  1330. package/dist/utils/git.js.map +1 -1
  1331. package/dist/utils/version-check.d.ts +1 -0
  1332. package/dist/utils/version-check.d.ts.map +1 -1
  1333. package/dist/utils/version-check.js +17 -0
  1334. package/dist/utils/version-check.js.map +1 -1
  1335. package/docs/development.md +4 -0
  1336. package/docs/sessions.md +4 -0
  1337. package/docs/workflows.md +13 -7
  1338. package/examples/extensions/custom-provider-anthropic/index.ts +1 -106
  1339. package/examples/extensions/gondolin/index.ts +0 -23
  1340. package/examples/extensions/gondolin/package-lock.json +183 -183
  1341. package/examples/extensions/overlay-qa-animation-components.ts +255 -0
  1342. package/examples/extensions/overlay-qa-focus-components.ts +222 -0
  1343. package/examples/extensions/overlay-qa-position-components.ts +433 -0
  1344. package/examples/extensions/overlay-qa-shared.ts +37 -0
  1345. package/examples/extensions/overlay-qa-streaming-input-components.ts +205 -0
  1346. package/examples/extensions/overlay-qa-tests.ts +17 -1156
  1347. package/examples/extensions/overlay-qa-toggle-passive-components.ts +169 -0
  1348. package/examples/extensions/space-invaders.ts +0 -60
  1349. package/examples/extensions/subagent/display.ts +148 -0
  1350. package/examples/extensions/subagent/index.ts +11 -858
  1351. package/examples/extensions/subagent/render.ts +383 -0
  1352. package/examples/extensions/subagent/runner.ts +252 -0
  1353. package/examples/extensions/subagent/schemas.ts +59 -0
  1354. package/examples/extensions/subagent/types.ts +36 -0
  1355. package/examples/extensions/tic-tac-toe-instructions.ts +65 -0
  1356. package/examples/extensions/tic-tac-toe-rendering.ts +414 -0
  1357. package/examples/extensions/tic-tac-toe-state.ts +158 -0
  1358. package/examples/extensions/tic-tac-toe.ts +92 -754
  1359. package/examples/rpc-extension-ui-components.ts +189 -0
  1360. package/examples/rpc-extension-ui.ts +2 -179
  1361. package/package.json +4 -4
@@ -1,1944 +1,8 @@
1
- import { Agent } from "@earendil-works/pi-agent-core";
2
- import { createAssistantMessageEventStream, isContextOverflow, streamSimple, StringEnum } from "@earendil-works/pi-ai";
3
- import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
4
- import { tmpdir } from "node:os";
5
- import { join } from "node:path";
6
- import { Type } from "typebox";
7
- import { formatCopilotProviderError } from "../copilot-errors.js";
8
- import { createBranchSummaryMessage, createCustomMessage } from "../messages.js";
9
- import { isAssistantThinkingBlockType, messageHasAssistantThinkingContentBlock, } from "../thinking-blocks.js";
10
- import { buildContextDeletionFilteredPath, buildEffectiveContextDeletionFilters, } from "../session-manager.js";
11
- import { estimateTokens } from "./compaction.js";
12
- export const CONTEXT_COMPACTION_PROMPT_VERSION = 1;
13
- const CONTEXT_DELETE_TOOL_NAME = "context_delete";
14
- const CONTEXT_GREP_DELETE_TOOL_NAME = "context_grep_delete";
15
- const CONTEXT_SEARCH_TRANSCRIPT_TOOL_NAME = "context_search_transcript";
16
- const CONTEXT_READ_ENTRY_TOOL_NAME = "context_read_entry";
17
- const CONTEXT_COMPACTION_BUDGET_TOOL_NAME = "context_compaction_budget";
18
- export const CONTEXT_COMPACTION_DEFAULT_COMPRESSION_RATIO = 0.5;
19
- export const CONTEXT_COMPACTION_TARGET_REDUCTION_PERCENT = 50;
20
- export const CONTEXT_COMPACTION_DEFAULT_PRESERVE_RECENT = 2;
21
- export const CONTEXT_COMPACTION_AUTO_QUERY = "auto-detected";
22
- const CONTEXT_GREP_DELETE_DEFAULT_MAX_MATCHES = 50;
23
- const CONTEXT_GREP_DELETE_MAX_REGEX_PATTERN_CHARS = 512;
24
- const CONTEXT_GREP_DELETE_MAX_REGEX_SCAN_CHARS = 250_000;
25
- const CONTEXT_MANIFEST_MAX_ENTRIES = 80;
26
- const CONTEXT_MANIFEST_PREVIEW_CHARS = 240;
27
- const CONTEXT_READ_ENTRY_DEFAULT_MAX_CHARS = 4000;
28
- const CONTEXT_READ_ENTRY_MAX_CHARS = 12_000;
29
- const CONTEXT_SEARCH_DEFAULT_MAX_MATCHES = 20;
30
- const CONTEXT_SEARCH_MAX_MATCHES = 100;
31
- const CONTEXT_SEARCH_DEFAULT_CONTEXT_CHARS = 160;
32
- const CONTEXT_SEARCH_MAX_CONTEXT_CHARS = 500;
33
- const ContextDeleteToolParameters = Type.Object({
34
- deletions: Type.Array(Type.Object({
35
- kind: StringEnum(["entry", "content_block"], {
36
- description: "Delete an entire transcript entry or a single content block within one entry.",
37
- }),
38
- entryId: Type.String({ minLength: 1, description: "Stable transcript entry id to delete from." }),
39
- blockIndex: Type.Optional(Type.Integer({
40
- minimum: 0,
41
- description: "Required when kind is content_block; omit when kind is entry.",
42
- })),
43
- }, { additionalProperties: false }), {
44
- description: "ID-only deletion targets. Include only kind, entryId, and blockIndex when needed; do not include transcript text, block contents, summaries, or replacement content. Invalid targets are rejected by the tool with correction guidance.",
45
- }),
46
- }, { additionalProperties: false });
47
- const ContextGrepDeleteToolParameters = Type.Object({
48
- pattern: Type.String({ minLength: 1, description: "Literal text or regular expression to match in transcript text." }),
49
- regex: Type.Optional(Type.Boolean({ description: "Treat pattern as a JavaScript regular expression. Defaults to false." })),
50
- caseSensitive: Type.Optional(Type.Boolean({ description: "Use case-sensitive matching. Defaults to false." })),
51
- target: Type.Optional(StringEnum(["entry", "content_block"], {
52
- description: "Delete whole matching entries or matching content blocks. Defaults to entry.",
53
- })),
54
- maxMatches: Type.Optional(Type.Integer({
55
- minimum: 1,
56
- maximum: 200,
57
- description: "Per-call safety cap. If more not-yet-deleted candidate targets are found in this tool call, no deletions are applied. Defaults to 50. This is not a cumulative compaction cap; call the tool again for additional batches.",
58
- })),
59
- expectedMatchCount: Type.Optional(Type.Integer({
60
- minimum: 0,
61
- description: "Optional safety check. If the match count differs, no deletions are applied.",
62
- })),
63
- }, { additionalProperties: false });
64
- const ContextSearchTranscriptToolParameters = Type.Object({
65
- pattern: Type.String({ minLength: 1, description: "Literal text or regular expression to search for." }),
66
- regex: Type.Optional(Type.Boolean({ description: "Treat pattern as a JavaScript regular expression. Defaults to false." })),
67
- caseSensitive: Type.Optional(Type.Boolean({ description: "Use case-sensitive matching. Defaults to false." })),
68
- target: Type.Optional(StringEnum(["entry", "content_block"], {
69
- description: "Search whole entry text or individual content-block text. Defaults to entry.",
70
- })),
71
- maxMatches: Type.Optional(Type.Integer({ minimum: 1, maximum: CONTEXT_SEARCH_MAX_MATCHES, description: "Maximum matches to return. Defaults to 20." })),
72
- contextChars: Type.Optional(Type.Integer({
73
- minimum: 0,
74
- maximum: CONTEXT_SEARCH_MAX_CONTEXT_CHARS,
75
- description: "Characters of context to include before and after each match. Defaults to 160.",
76
- })),
77
- }, { additionalProperties: false });
78
- const ContextReadEntryToolParameters = Type.Object({
79
- entryId: Type.String({ minLength: 1, description: "Stable transcript entry id to read." }),
80
- blockIndex: Type.Optional(Type.Integer({ minimum: 0, description: "Optional content block index to read instead of the whole entry text." })),
81
- offset: Type.Optional(Type.Integer({ minimum: 0, description: "Character offset to begin reading. Defaults to 0." })),
82
- maxChars: Type.Optional(Type.Integer({
83
- minimum: 1,
84
- maximum: CONTEXT_READ_ENTRY_MAX_CHARS,
85
- description: "Maximum characters to return. Defaults to 4000; keep reads small to avoid overflowing context.",
86
- })),
87
- }, { additionalProperties: false });
88
- const ContextCompactionBudgetToolParameters = Type.Object({}, { additionalProperties: false });
89
- const CONTEXT_DELETE_TOOL = {
90
- name: CONTEXT_DELETE_TOOL_NAME,
91
- description: "Record context compaction deletion targets directly against the transcript.",
92
- parameters: ContextDeleteToolParameters,
93
- };
94
- const CONTEXT_GREP_DELETE_TOOL = {
95
- name: CONTEXT_GREP_DELETE_TOOL_NAME,
96
- description: "Bulk-delete transcript entries or content blocks matching a guarded grep/regex query.",
97
- parameters: ContextGrepDeleteToolParameters,
98
- };
99
- const CONTEXT_SEARCH_TRANSCRIPT_TOOL = {
100
- name: CONTEXT_SEARCH_TRANSCRIPT_TOOL_NAME,
101
- description: "Search the full transcript working copy and return small snippets without mutating deletion state.",
102
- parameters: ContextSearchTranscriptToolParameters,
103
- };
104
- const CONTEXT_READ_ENTRY_TOOL = {
105
- name: CONTEXT_READ_ENTRY_TOOL_NAME,
106
- description: "Read a small slice of one transcript entry or content block from the full transcript working copy.",
107
- parameters: ContextReadEntryToolParameters,
108
- };
109
- const CONTEXT_COMPACTION_BUDGET_TOOL = {
110
- name: CONTEXT_COMPACTION_BUDGET_TOOL_NAME,
111
- description: "Report current context-window fullness and reduction progress for the selected deletion targets without mutating deletion state.",
112
- parameters: ContextCompactionBudgetToolParameters,
113
- };
114
- const CONTEXT_COMPACTION_SYSTEM_PROMPT = `You are a context compaction assistant.
115
-
116
- Your task is to read relevant parts of a conversation between a user and an AI assistant provided via a transcript file, then run a series of tools to apply deletion-only verbatim compaction using the exact context_delete or context_grep_delete format specified.`;
117
- function contextCompactionFixedPrompt(parameters) {
118
- const targetLabel = contextCompactionTargetLabel(parameters);
119
- return `Reference the provided transcript file transcript and use your search/read tools for small inspections, then use context_delete or context_grep_delete for deletions.
120
-
121
- Compaction records deletion targets, not replacement content.
122
- For context_delete, use id-only targets: stable entryId values and optional blockIndex values only.
123
- For context_grep_delete, use a concise literal or regex pattern to select matching entries or blocks; do not paste full transcript entries or content-block bodies.
124
- Do not summarize, paraphrase, or generate replacement context; those are not accepted compaction outputs.
125
- Do not mutate retained transcript objects or content.
126
- Deletion tool calls are the compaction action.
127
-
128
- Strategy:
129
- - Start by calling context_compaction_budget to see how much of the context window is full and how much reduction is needed.
130
- - Spend a few turns exploring with search/read tools to gain high confidence of candidate blocks to remove.
131
- - Prefer high-confidence exploit actions after that: delete obvious low-value entries via context_grep_delete or context_delete.
132
- - Use grep deletion for repeated low-value patterns.
133
- - Use exact id deletion for inspected one-off stale entries.
134
- - Check context_compaction_budget after deletion batches to track progress.
135
- - Strict requirement: reduce current context by at least ${targetLabel} before finishing. This is a hard completion gate, not a loose goal.
136
- - Do not send a final plain-text completion message until context_compaction_budget reports at least ${targetLabel} currentReductionPercent.
137
- - If the strict ${targetLabel} reduction is not met yet, continue removing low-value message entries or content blocks with context_delete/context_grep_delete.
138
- - Use the focus query to preserve relevant context: ${JSON.stringify(parameters.query)}.
139
-
140
- What Gets Deleted:
141
- - Redundant tool outputs: file reads already acted on, grep/search results already processed, passing test output no longer needed.
142
- - Exploratory dead ends: irrelevant files read, unhelpful or empty searches.
143
- - Verbose boilerplate: license headers, import blocks the agent isn't modifying, configuration files read for reference.
144
- - Superseded information: earlier versions of files that have since been edited, old error messages from bugs already fixed.
145
-
146
- What Survives:
147
- - Active file paths and line numbers: Any reference the agent might need to navigate.
148
- - Current error messages: Unresolved bugs and their exact text.
149
- - Reasoning decisions: Why the agent chose approach A over B. An agent's chain of thought (why it chose this file, what pattern it noticed, what fix it decided on) carries more information-per-token than the raw grep output or file content that informed those decisions.
150
- - Recent tool calls and their results: The last 3-5 operations.
151
- - User instructions: The original task and any clarifications.
152
-
153
- Conditionally Deleted:
154
- - Old Reasoning decisions: If there is nothing else to remove and the target reduction is not met, you can remove entire stale assistant entries, EXCEPT do not delete individual content blocks from any retained assistant message that contains thinking or redacted_thinking blocks. Thinking-bearing assistant messages are all-or-nothing for replay safety.
155
-
156
- <output_format>
157
- Call the context_delete tool one or more times with deletion targets in this shape:
158
- { "deletions": [{ "kind": "entry", "entryId": "..." }] }
159
-
160
- For content-block deletions, use:
161
- { "kind": "content_block", "entryId": "...", "blockIndex": 0 }
162
-
163
- The tool applies and validates deletion targets immediately. You can continue calling it for additional deletions if useful.
164
-
165
- For guarded bulk deletion by text match, call context_grep_delete with a literal pattern or regex. It removes valid matching context, silently ignores candidates that validation does not allow so they are not counted as removals, enforces a per-call maxMatches safety cap and optional expectedMatchCount, and validates through the same tool-call/tool-result safety rules. maxMatches only limits one tool call; there is no cumulative cap across corrected or repeated deletion calls.
166
-
167
- The full transcript is available as a JSONL file path in the prompt, but do NOT try to load the whole file into context. Use context_search_transcript to find candidate entry IDs and context_read_entry to read only small slices (for example maxChars 1000-4000) before deleting.
168
-
169
- When the strict ${targetLabel} reduction requirement is met, reply with a brief plain-text completion message. Do not include deletion target IDs outside tool calls.
170
- </output_format>`;
171
- }
172
- function getMessageFromEntry(entry) {
173
- if (entry.type === "message") {
174
- return entry.message;
175
- }
176
- if (entry.type === "custom_message") {
177
- return createCustomMessage(entry.customType, entry.content, entry.display, entry.details, entry.timestamp, entry.excludeFromContext);
178
- }
179
- if (entry.type === "branch_summary") {
180
- return createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp);
181
- }
182
- return undefined;
183
- }
184
- function isExcludedFromLlmContext(message) {
185
- switch (message.role) {
186
- case "bashExecution":
187
- return Boolean(message.excludeFromContext);
188
- case "custom":
189
- return message.excludeFromContext === true;
190
- default:
191
- return false;
192
- }
193
- }
194
- function getContextEligibleMessageFromEntry(entry) {
195
- const message = getMessageFromEntry(entry);
196
- if (!message || isExcludedFromLlmContext(message))
197
- return undefined;
198
- return message;
199
- }
200
- function textFromUnknownContent(content) {
201
- if (typeof content === "string")
202
- return content;
203
- if (!Array.isArray(content))
204
- return JSON.stringify(content);
205
- return content.map((block) => textFromContentBlock(block)).join("\n");
206
- }
207
- function textFromContentBlock(block) {
208
- if (!block || typeof block !== "object")
209
- return String(block);
210
- const record = block;
211
- if (record.type === "text" && typeof record.text === "string")
212
- return record.text;
213
- if (record.type === "thinking" && typeof record.thinking === "string")
214
- return record.thinking;
215
- if (record.type === "toolCall") {
216
- const name = typeof record.name === "string" ? record.name : "tool";
217
- const id = typeof record.id === "string" ? record.id : "unknown";
218
- const args = "arguments" in record ? JSON.stringify(record.arguments) : "";
219
- return `toolCall ${id} ${name} ${args}`.trim();
220
- }
221
- if (record.type === "image")
222
- return "[image]";
223
- return JSON.stringify(record);
224
- }
225
- function assistantEntryHasThinkingContentBlock(entry) {
226
- return (entry.role === "assistant" &&
227
- (entry.contentBlocks.some((block) => isAssistantThinkingBlockType(block.type)) ||
228
- messageHasAssistantThinkingContentBlock(entry.message)));
229
- }
230
- const IMAGE_BLOCK_CHAR_ESTIMATE = 4800;
231
- const IMAGE_BLOCK_TOKEN_ESTIMATE = Math.ceil(IMAGE_BLOCK_CHAR_ESTIMATE / 4);
232
- function estimateTextTokens(text) {
233
- return Math.max(1, Math.ceil(text.length / 4));
234
- }
235
- function estimateContentBlockTokens(block, text) {
236
- if (block && typeof block === "object" && block.type === "image") {
237
- return IMAGE_BLOCK_TOKEN_ESTIMATE;
238
- }
239
- return estimateTextTokens(text);
240
- }
241
- function getToolCallIdFromBlock(block) {
242
- if (!block || typeof block !== "object")
243
- return undefined;
244
- const record = block;
245
- if (record.type !== "toolCall")
246
- return undefined;
247
- return typeof record.id === "string" ? record.id : undefined;
248
- }
249
- function getToolResultCallId(message) {
250
- if (message.role !== "toolResult")
251
- return undefined;
252
- const callId = message.toolCallId;
253
- return typeof callId === "string" ? callId : undefined;
254
- }
255
- function contentBlocksForEntry(entryId, message, protectedEntry, existingDeletedBlocks) {
256
- const content = message.content;
257
- if (!Array.isArray(content))
258
- return [];
259
- return content
260
- .map((block, blockIndex) => {
261
- if (existingDeletedBlocks?.has(blockIndex)) {
262
- return undefined;
263
- }
264
- const type = block && typeof block === "object" && typeof block.type === "string"
265
- ? (block.type)
266
- : "unknown";
267
- const text = textFromContentBlock(block);
268
- return {
269
- entryId,
270
- blockIndex,
271
- type,
272
- text,
273
- tokenEstimate: estimateContentBlockTokens(block, text),
274
- protected: protectedEntry,
275
- toolCallId: getToolCallIdFromBlock(block),
276
- };
277
- })
278
- .filter((block) => block !== undefined);
279
- }
280
- function messageText(message) {
281
- switch (message.role) {
282
- case "bashExecution":
283
- return `Ran ${message.command}\n${message.output}`;
284
- case "branchSummary":
285
- return message.summary;
286
- case "custom":
287
- case "toolResult":
288
- case "user":
289
- return textFromUnknownContent(message.content);
290
- case "assistant":
291
- return textFromUnknownContent(message.content);
292
- case "compactionSummary":
293
- // Legacy summary-compaction message type retained in the upstream AgentMessage union
294
- // after summary compaction was removed; surface its archival summary text.
295
- return message.summary;
296
- default: {
297
- // Exhaustiveness guard: adding a new AgentMessage role must fail the build here instead
298
- // of silently degrading to an empty string.
299
- const _exhaustiveCheck = message;
300
- void _exhaustiveCheck;
301
- return "";
302
- }
303
- }
304
- }
305
- function hasAssistantError(message) {
306
- return message.role === "assistant" && message.stopReason === "error";
307
- }
308
- function hasToolResultError(message) {
309
- return message.role === "toolResult" && message.isError === true;
310
- }
311
- function hasFailedBashExecution(message) {
312
- return message.role === "bashExecution" && typeof message.exitCode === "number" && message.exitCode !== 0;
313
- }
314
- const CONTEXT_COMPACTION_QUERY_MAX_CHARS = 1000;
315
- function normalizeCompressionRatio(value) {
316
- return typeof value === "number" && Number.isFinite(value) && value > 0 && value < 1
317
- ? value
318
- : CONTEXT_COMPACTION_DEFAULT_COMPRESSION_RATIO;
319
- }
320
- function normalizePreserveRecent(value) {
321
- return typeof value === "number" && Number.isFinite(value) ? Math.max(0, Math.floor(value)) : CONTEXT_COMPACTION_DEFAULT_PRESERVE_RECENT;
322
- }
323
- function normalizeQuery(value, fallbackQuery) {
324
- const query = value?.trim() || fallbackQuery.trim() || CONTEXT_COMPACTION_AUTO_QUERY;
325
- return query.length > CONTEXT_COMPACTION_QUERY_MAX_CHARS
326
- ? `${query.slice(0, CONTEXT_COMPACTION_QUERY_MAX_CHARS)}\n[... ${query.length - CONTEXT_COMPACTION_QUERY_MAX_CHARS} more characters omitted from compaction query]`
327
- : query;
328
- }
329
- export function autoDetectContextCompactionQuery(pathEntries) {
330
- for (let index = pathEntries.length - 1; index >= 0; index--) {
331
- const entry = pathEntries[index];
332
- if (entry.type === "context_compaction")
333
- continue;
334
- const message = getContextEligibleMessageFromEntry(entry);
335
- if (!message || message.role !== "user")
336
- continue;
337
- const text = messageText(message).trim();
338
- if (text.length > 0)
339
- return normalizeQuery(text, CONTEXT_COMPACTION_AUTO_QUERY);
340
- }
341
- return CONTEXT_COMPACTION_AUTO_QUERY;
342
- }
343
- export function normalizeContextCompactionParameters(input = {}, fallbackQuery = CONTEXT_COMPACTION_AUTO_QUERY) {
344
- return {
345
- compression_ratio: normalizeCompressionRatio(input.compression_ratio),
346
- preserve_recent: normalizePreserveRecent(input.preserve_recent),
347
- query: normalizeQuery(input.query, fallbackQuery),
348
- };
349
- }
350
- function getTranscriptCompactionParameters(transcript) {
351
- return normalizeContextCompactionParameters(transcript.parameters ?? transcript.settings, transcript.parameters?.query ?? transcript.settings.query ?? CONTEXT_COMPACTION_AUTO_QUERY);
352
- }
353
- function contextCompactionTargetReductionPercent(parameters) {
354
- return roundPercent((1 - parameters.compression_ratio) * 100);
355
- }
356
- function contextCompactionTargetLabel(parameters) {
357
- return `${contextCompactionTargetReductionPercent(parameters)}%`;
358
- }
359
- function isProtectedEntry(entry, message, recentEntryIds) {
360
- if (recentEntryIds.has(entry.id))
361
- return true;
362
- if (message.role === "user")
363
- return true;
364
- if (message.role === "custom")
365
- return true;
366
- if (message.role === "branchSummary")
367
- return true;
368
- if (hasAssistantError(message) || hasToolResultError(message))
369
- return true;
370
- if (hasFailedBashExecution(message))
371
- return true;
372
- if (entry.type === "branch_summary")
373
- return true;
374
- return false;
375
- }
376
- export function prepareContextCompaction(pathEntries, settings, options = {}) {
377
- if (pathEntries.length === 0)
378
- return undefined;
379
- const effectiveDeletionFilters = buildEffectiveContextDeletionFilters(pathEntries);
380
- const filteredPathEntries = buildContextDeletionFilteredPath(pathEntries, effectiveDeletionFilters);
381
- const parameters = normalizeContextCompactionParameters({ ...settings, ...options }, autoDetectContextCompactionQuery(filteredPathEntries));
382
- const rawEntryById = new Map(pathEntries.map((entry) => [entry.id, entry]));
383
- const messageEntryIds = filteredPathEntries
384
- .filter((entry) => entry.type !== "context_compaction" && getContextEligibleMessageFromEntry(entry) !== undefined)
385
- .map((entry) => entry.id);
386
- const recentEntryIds = new Set(parameters.preserve_recent > 0 ? messageEntryIds.slice(-parameters.preserve_recent) : []);
387
- const protectedEntryIds = new Set();
388
- const entries = [];
389
- for (const entry of filteredPathEntries) {
390
- if (entry.type === "context_compaction")
391
- continue;
392
- const message = getContextEligibleMessageFromEntry(entry);
393
- if (!message)
394
- continue;
395
- const rawEntry = rawEntryById.get(entry.id) ?? entry;
396
- const protectedEntry = isProtectedEntry(entry, message, recentEntryIds);
397
- if (protectedEntry)
398
- protectedEntryIds.add(entry.id);
399
- const rawMessage = getContextEligibleMessageFromEntry(rawEntry) ?? message;
400
- const contentBlocks = contentBlocksForEntry(entry.id, rawMessage, protectedEntry, effectiveDeletionFilters.deletedContentBlocks.get(entry.id));
401
- const toolCallIds = contentBlocks.map((block) => block.toolCallId).filter((id) => id !== undefined);
402
- const text = contentBlocks.length > 0 ? contentBlocks.map((block) => block.text).join("\n") : messageText(message);
403
- entries.push({
404
- entryId: entry.id,
405
- entryType: entry.type,
406
- role: message.role,
407
- text,
408
- tokenEstimate: estimateTokens(message),
409
- protected: protectedEntry,
410
- contentBlocks,
411
- message,
412
- toolCallIds,
413
- toolResultFor: getToolResultCallId(message),
414
- });
415
- }
416
- if (entries.length < 2)
417
- return undefined;
418
- return {
419
- branchEntries: pathEntries,
420
- parameters,
421
- transcript: {
422
- entries,
423
- protectedEntryIds: [...protectedEntryIds],
424
- tokensBefore: entries.reduce((total, entry) => total + entry.tokenEstimate, 0),
425
- settings,
426
- parameters,
427
- },
428
- };
429
- }
430
- function targetKey(target) {
431
- return target.kind === "entry" ? `entry:${target.entryId}` : `content_block:${target.entryId}:${target.blockIndex}`;
432
- }
433
- function rawTargetKey(target) {
434
- return target.kind === "entry" ? `entry:${target.entryId}` : `content_block:${target.entryId}:${target.blockIndex}`;
435
- }
436
- function normalizeRawTarget(target) {
437
- if (target.kind === "entry")
438
- return { kind: "entry", entryId: target.entryId };
439
- return { kind: "content_block", entryId: target.entryId, blockIndex: target.blockIndex };
440
- }
441
- function assertIdOnlyDeletionTarget(target) {
442
- const allowedKeys = target.kind === "content_block" ? new Set(["kind", "entryId", "blockIndex"]) : new Set(["kind", "entryId"]);
443
- for (const key of Object.keys(target)) {
444
- if (!allowedKeys.has(key)) {
445
- throw new Error(`Deletion target includes unsupported property ${JSON.stringify(key)}; context deletion targets are id-only and must contain only kind, entryId${target.kind === "content_block" ? ", and blockIndex" : ""}`);
446
- }
447
- }
448
- }
449
- function rawDeletionFromTarget(target) {
450
- if (target.kind === "entry")
451
- return { kind: "entry", entryId: target.entryId };
452
- return { kind: "content_block", entryId: target.entryId, blockIndex: target.blockIndex };
453
- }
454
- function deletionRequestFromTargets(targets) {
455
- return { deletions: targets.map(rawDeletionFromTarget) };
456
- }
457
- function getDeletedEntryIds(targets) {
458
- return new Set(targets.filter((target) => target.kind === "entry").map((target) => target.entryId));
459
- }
460
- function getDeletedContentBlocks(targets) {
461
- const blocksByEntry = new Map();
462
- for (const target of targets) {
463
- if (target.kind !== "content_block")
464
- continue;
465
- const blocks = blocksByEntry.get(target.entryId) ?? new Set();
466
- blocks.add(target.blockIndex);
467
- blocksByEntry.set(target.entryId, blocks);
468
- }
469
- return blocksByEntry;
470
- }
471
- function recentContextEntryBoundary(transcript) {
472
- const { preserve_recent } = getTranscriptCompactionParameters(transcript);
473
- return preserve_recent > 0 ? Math.max(0, transcript.entries.length - preserve_recent) : transcript.entries.length;
474
- }
475
- function getRecentContextEntryIds(transcript) {
476
- const { preserve_recent } = getTranscriptCompactionParameters(transcript);
477
- if (preserve_recent <= 0)
478
- return new Set();
479
- return new Set(transcript.entries.slice(recentContextEntryBoundary(transcript)).map((entry) => entry.entryId));
480
- }
481
- function isRecentContextEntry(entry, transcript) {
482
- const { preserve_recent } = getTranscriptCompactionParameters(transcript);
483
- if (preserve_recent <= 0)
484
- return false;
485
- const entryIndex = transcript.entries.findIndex((candidate) => candidate.entryId === entry.entryId);
486
- return entryIndex >= 0 && entryIndex >= recentContextEntryBoundary(transcript);
487
- }
488
- function formatRecentContextDeletionError(transcript, target) {
489
- const { preserve_recent } = getTranscriptCompactionParameters(transcript);
490
- const recentWindow = `last ${preserve_recent} context ${preserve_recent === 1 ? "entry" : "entries"}`;
491
- if (target.kind === "entry") {
492
- return `Cannot delete recent context entry ${target.entryId} because the ${recentWindow} must remain available for active continuity. Choose an older entry.`;
493
- }
494
- return `Cannot delete content block ${target.entryId}:${target.blockIndex} because entry ${target.entryId} is one of the ${recentWindow} that must remain available for active continuity. Choose an older entry or content block.`;
495
- }
496
- function deletionGuidance() {
497
- return "Choose another deletion candidate.";
498
- }
499
- function findTranscriptEntry(transcript, entryId) {
500
- return transcript.entries.find((entry) => entry.entryId === entryId);
501
- }
502
- function findTranscriptContentBlock(transcript, target) {
503
- if (target.kind !== "content_block")
504
- return undefined;
505
- return findTranscriptEntry(transcript, target.entryId)?.contentBlocks.find((block) => block.blockIndex === target.blockIndex);
506
- }
507
- function firstToolCallBlockTarget(entry, callId) {
508
- const blockIndex = toolCallBlockIndexes(entry, callId)[0];
509
- return blockIndex === undefined ? undefined : { kind: "content_block", entryId: entry.entryId, blockIndex };
510
- }
511
- function formatProtectedDeletionError(transcript, target) {
512
- const entry = findTranscriptEntry(transcript, target.entryId);
513
- if (target.kind === "entry") {
514
- const toolResultSuffix = entry?.toolResultFor ? ` for tool call ${entry.toolResultFor}` : "";
515
- const toolCallSuffix = entry && entry.toolCallIds.length > 0 ? ` containing tool call ${entry.toolCallIds.join(", ")}` : "";
516
- return `Deletion target ${target.entryId}${toolResultSuffix}${toolCallSuffix} is protected. ${deletionGuidance()}`;
517
- }
518
- const block = findTranscriptContentBlock(transcript, target);
519
- const toolBlockSuffix = block?.toolCallId ? ` It is a protected tool block for tool call ${block.toolCallId}.` : "";
520
- return `Content block ${target.entryId}:${target.blockIndex} is protected.${toolBlockSuffix} ${deletionGuidance()}`;
521
- }
522
- function formatProtectedToolDependencyError(transcript, blockedTarget, context) {
523
- const protectedMessage = formatProtectedDeletionError(transcript, blockedTarget);
524
- return `${context} ${protectedMessage}`;
525
- }
526
- function isProtectedContextDeletionErrorMessage(message) {
527
- return (/\bprotected\b/i.test(message) ||
528
- /Cannot delete (?:recent context entry|content block .* because entry .* is one of the last)/u.test(message) ||
529
- /latest assistant message|thinking\/redacted_thinking block in (?:the latest|a retained) assistant message/u.test(message));
530
- }
531
- function assertNoRecentContextDeletionTargets(transcript, targets) {
532
- const recentEntryIds = getRecentContextEntryIds(transcript);
533
- for (const target of targets) {
534
- if (recentEntryIds.has(target.entryId)) {
535
- throw new Error(formatRecentContextDeletionError(transcript, target));
536
- }
537
- }
538
- }
539
- function latestAssistantEntry(transcript, deletedEntryIds = new Set()) {
540
- for (let index = transcript.entries.length - 1; index >= 0; index--) {
541
- const entry = transcript.entries[index];
542
- if (entry.role === "assistant" && !deletedEntryIds.has(entry.entryId))
543
- return entry;
544
- }
545
- return undefined;
546
- }
547
- function findAssistantThinkingContentBlockDeletionViolation(transcript, targets) {
548
- const deletedEntryIds = getDeletedEntryIds(targets);
549
- for (const target of targets) {
550
- if (target.kind !== "content_block")
551
- continue;
552
- if (deletedEntryIds.has(target.entryId))
553
- continue;
554
- const entry = findTranscriptEntry(transcript, target.entryId);
555
- if (entry && assistantEntryHasThinkingContentBlock(entry))
556
- return target;
557
- }
558
- return undefined;
559
- }
560
- function findLatestAssistantThinkingDeletionViolation(transcript, targets) {
561
- const deletedEntryIds = getDeletedEntryIds(targets);
562
- const latestRetainedAssistant = latestAssistantEntry(transcript, deletedEntryIds);
563
- for (const target of targets) {
564
- if (target.kind === "entry") {
565
- const entry = findTranscriptEntry(transcript, target.entryId);
566
- if (!entry || !assistantEntryHasThinkingContentBlock(entry))
567
- continue;
568
- const deletedEntryIdsIfTargetWereKept = new Set(deletedEntryIds);
569
- deletedEntryIdsIfTargetWereKept.delete(target.entryId);
570
- if (latestAssistantEntry(transcript, deletedEntryIdsIfTargetWereKept)?.entryId === target.entryId) {
571
- return target;
572
- }
573
- continue;
574
- }
575
- if (latestRetainedAssistant?.entryId === target.entryId &&
576
- assistantEntryHasThinkingContentBlock(latestRetainedAssistant)) {
577
- return target;
578
- }
579
- }
580
- return undefined;
581
- }
582
- function assertNoAssistantThinkingContentBlockDeletionTargets(transcript, targets) {
583
- const violation = findAssistantThinkingContentBlockDeletionViolation(transcript, targets);
584
- if (!violation)
585
- return;
586
- throw new Error(`Cannot delete content block ${violation.entryId}:${violation.blockIndex} because a thinking/redacted_thinking block in a retained assistant message must remain unmodified; retained assistant messages containing thinking/redacted_thinking content blocks are all-or-nothing`);
587
- }
588
- function assertNoLatestAssistantThinkingDeletionTargets(transcript, targets) {
589
- const violation = findLatestAssistantThinkingDeletionViolation(transcript, targets);
590
- if (!violation)
591
- return;
592
- if (violation.kind === "entry") {
593
- throw new Error(`Cannot delete assistant entry ${violation.entryId} because it is the latest assistant message retained after other deletions and contains thinking/redacted_thinking content blocks`);
594
- }
595
- throw new Error(`Cannot delete content block ${violation.entryId}:${violation.blockIndex} because a thinking/redacted_thinking block in the latest assistant message must remain unmodified; the latest retained assistant message contains thinking/redacted_thinking content blocks`);
596
- }
597
- function isToolCallBlockDeleted(entry, callId, deletedEntryIds, deletedContentBlocks) {
598
- if (deletedEntryIds.has(entry.entryId))
599
- return true;
600
- const deletedBlocks = deletedContentBlocks.get(entry.entryId);
601
- if (!deletedBlocks)
602
- return false;
603
- return entry.contentBlocks.some((block) => block.toolCallId === callId && deletedBlocks.has(block.blockIndex));
604
- }
605
- function toolCallBlockIndexes(entry, callId) {
606
- return entry.contentBlocks
607
- .filter((block) => block.toolCallId === callId)
608
- .map((block) => block.blockIndex);
609
- }
610
- function addTarget(targets, target) {
611
- if (targets.some((existing) => targetKey(existing) === targetKey(target)))
612
- return false;
613
- targets.push(target);
614
- return true;
615
- }
616
- function deleteEntryTarget(targets, entryId) {
617
- let changed = false;
618
- for (let index = targets.length - 1; index >= 0; index--) {
619
- const target = targets[index];
620
- if (target.kind === "content_block" && target.entryId === entryId) {
621
- targets.splice(index, 1);
622
- changed = true;
623
- }
624
- }
625
- return addTarget(targets, { kind: "entry", entryId }) || changed;
626
- }
627
- function mergeContextDeletionTargets(baseTargets, additionalTargets) {
628
- const targets = [...baseTargets];
629
- for (const target of additionalTargets) {
630
- if (target.kind === "entry") {
631
- deleteEntryTarget(targets, target.entryId);
632
- continue;
633
- }
634
- if (!getDeletedEntryIds(targets).has(target.entryId)) {
635
- addTarget(targets, target);
636
- }
637
- }
638
- return targets;
639
- }
640
- function canonicalizeEntryTargets(transcript, targets, entry) {
641
- if (!canDeleteTarget(transcript, { kind: "entry", entryId: entry.entryId }))
642
- return false;
643
- if (getDeletedEntryIds(targets).has(entry.entryId))
644
- return false;
645
- const deletedBlocks = getDeletedContentBlocks(targets).get(entry.entryId);
646
- if (!deletedBlocks || !entry.contentBlocks.every((block) => deletedBlocks.has(block.blockIndex)))
647
- return false;
648
- // Only repair/promote when dependency reconciliation reaches this entry. Non-tool entries that
649
- // request every block individually stay invalid so the assistant must choose explicit entry deletion.
650
- return deleteEntryTarget(targets, entry.entryId);
651
- }
652
- function addToolCallDeletion(transcript, targets, entry, callId) {
653
- if (assistantEntryHasThinkingContentBlock(entry)) {
654
- if (!canDeleteTarget(transcript, { kind: "entry", entryId: entry.entryId }))
655
- return false;
656
- return deleteEntryTarget(targets, entry.entryId);
657
- }
658
- let changed = false;
659
- for (const blockIndex of toolCallBlockIndexes(entry, callId)) {
660
- const target = { kind: "content_block", entryId: entry.entryId, blockIndex };
661
- if (!canDeleteTarget(transcript, target))
662
- continue;
663
- if (!getDeletedEntryIds(targets).has(entry.entryId)) {
664
- changed = addTarget(targets, target) || changed;
665
- }
666
- }
667
- return canonicalizeEntryTargets(transcript, targets, entry) || changed;
668
- }
669
- let warnedReconciliationNonConvergence = false;
670
- function reconcileToolDependencies(transcript, initialTargets) {
671
- const targets = [...initialTargets];
672
- const callEntries = new Map();
673
- const entriesWithToolCalls = new Set();
674
- const resultEntries = new Map();
675
- for (const entry of transcript.entries) {
676
- for (const callId of entry.toolCallIds) {
677
- callEntries.set(callId, entry);
678
- entriesWithToolCalls.add(entry);
679
- }
680
- if (entry.toolResultFor) {
681
- const results = resultEntries.get(entry.toolResultFor) ?? [];
682
- results.push(entry);
683
- resultEntries.set(entry.toolResultFor, results);
684
- }
685
- }
686
- // Bounded fixpoint repair: each pass can add/remove paired call/result targets. In practice this
687
- // converges within one or two passes; the cap protects against accidental oscillation.
688
- let changed = true;
689
- let remainingPasses = Math.max(1, transcript.entries.length * 2);
690
- while (changed && remainingPasses > 0) {
691
- changed = false;
692
- remainingPasses -= 1;
693
- let deletedEntryIds = getDeletedEntryIds(targets);
694
- let deletedContentBlocks = getDeletedContentBlocks(targets);
695
- const recordChange = (nextChanged) => {
696
- if (!nextChanged)
697
- return;
698
- changed = true;
699
- deletedEntryIds = getDeletedEntryIds(targets);
700
- deletedContentBlocks = getDeletedContentBlocks(targets);
701
- };
702
- for (const [callId, callEntry] of callEntries) {
703
- const callDeleted = isToolCallBlockDeleted(callEntry, callId, deletedEntryIds, deletedContentBlocks);
704
- const results = resultEntries.get(callId) ?? [];
705
- if (callDeleted) {
706
- const retainedProtectedResult = results.find((entry) => !deletedEntryIds.has(entry.entryId) &&
707
- !canDeleteTarget(transcript, { kind: "entry", entryId: entry.entryId }));
708
- if (retainedProtectedResult) {
709
- const retainedResultTarget = { kind: "entry", entryId: retainedProtectedResult.entryId };
710
- if (isRecentTarget(transcript, retainedResultTarget)) {
711
- throw new Error(formatRecentContextDeletionError(transcript, retainedResultTarget));
712
- }
713
- throw new Error(formatProtectedToolDependencyError(transcript, retainedResultTarget, `Cannot delete tool call ${callId} because its paired tool result entry ${retainedProtectedResult.entryId} is protected.`));
714
- }
715
- else {
716
- for (const result of results) {
717
- recordChange(deleteEntryTarget(targets, result.entryId));
718
- }
719
- }
720
- }
721
- if (isToolCallBlockDeleted(callEntry, callId, deletedEntryIds, deletedContentBlocks))
722
- continue;
723
- for (const result of results) {
724
- if (!deletedEntryIds.has(result.entryId))
725
- continue;
726
- recordChange(deleteEntryTarget(targets, result.entryId));
727
- const callEntryTarget = { kind: "entry", entryId: callEntry.entryId };
728
- const callBlockTarget = assistantEntryHasThinkingContentBlock(callEntry)
729
- ? callEntryTarget
730
- : firstToolCallBlockTarget(callEntry, callId) ?? callEntryTarget;
731
- if (!canDeleteTarget(transcript, callBlockTarget)) {
732
- if (isRecentTarget(transcript, callBlockTarget)) {
733
- throw new Error(formatRecentContextDeletionError(transcript, callBlockTarget));
734
- }
735
- throw new Error(formatProtectedToolDependencyError(transcript, callBlockTarget, `Cannot delete tool result entry ${result.entryId} because that would require deleting protected tool block for tool call ${callId}.`));
736
- }
737
- recordChange(addToolCallDeletion(transcript, targets, callEntry, callId));
738
- }
739
- }
740
- for (const entry of entriesWithToolCalls) {
741
- recordChange(canonicalizeEntryTargets(transcript, targets, entry));
742
- }
743
- }
744
- if (changed && !warnedReconciliationNonConvergence) {
745
- warnedReconciliationNonConvergence = true;
746
- console.warn(`Context compaction tool dependency reconciliation did not converge within the bounded pass limit; validation will continue with the last reconciled target set. entries=${transcript.entries.length} callEntries=${callEntries.size} targets=${targets.length}`);
747
- }
748
- return targets;
749
- }
750
- function validateToolDependencies(transcript, targets) {
751
- const deletedEntryIds = getDeletedEntryIds(targets);
752
- const deletedContentBlocks = getDeletedContentBlocks(targets);
753
- const callEntries = new Map();
754
- const resultEntries = new Map();
755
- for (const entry of transcript.entries) {
756
- for (const callId of entry.toolCallIds) {
757
- callEntries.set(callId, entry);
758
- }
759
- if (entry.toolResultFor) {
760
- const results = resultEntries.get(entry.toolResultFor) ?? [];
761
- results.push(entry);
762
- resultEntries.set(entry.toolResultFor, results);
763
- }
764
- }
765
- for (const [callId, callEntry] of callEntries) {
766
- const callDeleted = isToolCallBlockDeleted(callEntry, callId, deletedEntryIds, deletedContentBlocks);
767
- const results = resultEntries.get(callId) ?? [];
768
- if (callDeleted) {
769
- const danglingResult = results.find((entry) => !deletedEntryIds.has(entry.entryId));
770
- if (danglingResult) {
771
- throw new Error(`Deleting tool call ${callId} would leave tool result entry ${danglingResult.entryId} orphaned`);
772
- }
773
- continue;
774
- }
775
- const deletedResult = results.find((entry) => deletedEntryIds.has(entry.entryId));
776
- if (deletedResult) {
777
- throw new Error(`Deleting tool result entry ${deletedResult.entryId} would leave tool call ${callId} dangling`);
778
- }
779
- }
780
- }
781
- function computeContextCompactionStats(transcript, targets) {
782
- const entryById = new Map(transcript.entries.map((entry) => [entry.entryId, entry]));
783
- const deletedEntryIds = getDeletedEntryIds(targets);
784
- let deletedTokens = 0;
785
- let objectsDeleted = 0;
786
- for (const entryId of deletedEntryIds) {
787
- const entry = entryById.get(entryId);
788
- if (!entry)
789
- continue;
790
- deletedTokens += entry.tokenEstimate;
791
- objectsDeleted += 1 + entry.contentBlocks.length;
792
- }
793
- for (const target of targets) {
794
- if (target.kind !== "content_block" || deletedEntryIds.has(target.entryId))
795
- continue;
796
- const entry = entryById.get(target.entryId);
797
- if (!entry)
798
- continue;
799
- const block = entry.contentBlocks.find((item) => item.blockIndex === target.blockIndex);
800
- if (!block)
801
- continue;
802
- deletedTokens += block.tokenEstimate;
803
- objectsDeleted += 1;
804
- }
805
- const objectsBefore = transcript.entries.length + transcript.entries.reduce((total, entry) => total + entry.contentBlocks.length, 0);
806
- const tokensBefore = transcript.tokensBefore;
807
- const tokensAfter = Math.max(0, tokensBefore - deletedTokens);
808
- const percentReduction = tokensBefore > 0 ? Math.round(((tokensBefore - tokensAfter) / tokensBefore) * 1000) / 10 : 0;
809
- return {
810
- objectsBefore,
811
- objectsAfter: Math.max(0, objectsBefore - objectsDeleted),
812
- objectsDeleted,
813
- tokensBefore,
814
- tokensAfter,
815
- percentReduction,
816
- };
817
- }
818
- /**
819
- * An entry "bears task context" when it carries the user's intent for the session: a real `user`
820
- * message, an extension-injected `custom` message, or a branch summary (`branchSummary` role /
821
- * `branch_summary` entry type) that recaps an earlier branch's task.
822
- *
823
- * Verbatim compaction must always leave at least one task-bearing entry in context.
824
- */
825
- function isTaskBearingEntry(entry) {
826
- return (entry.role === "user" ||
827
- entry.role === "custom" ||
828
- entry.role === "branchSummary" ||
829
- entry.entryType === "branch_summary");
830
- }
831
- function isRecentTarget(transcript, target) {
832
- const entry = transcript.entries.find((candidate) => candidate.entryId === target.entryId);
833
- return entry !== undefined && isRecentContextEntry(entry, transcript);
834
- }
835
- function canDeleteTarget(transcript, target) {
836
- const entry = transcript.entries.find((candidate) => candidate.entryId === target.entryId);
837
- if (!entry)
838
- return false;
839
- if (isRecentTarget(transcript, target))
840
- return false;
841
- if (entry.protected)
842
- return false;
843
- if (target.kind === "entry")
844
- return true;
845
- const block = entry.contentBlocks.find((candidate) => candidate.blockIndex === target.blockIndex);
846
- if (!block)
847
- return false;
848
- return !block.protected;
849
- }
850
- export function validateContextDeletionRequest(request, transcript) {
851
- if (!request || typeof request !== "object" || !Array.isArray(request.deletions)) {
852
- throw new Error("Context deletion request must be an object with a deletions array");
853
- }
854
- const entryById = new Map(transcript.entries.map((entry) => [entry.entryId, entry]));
855
- const recentEntryIds = getRecentContextEntryIds(transcript);
856
- const seen = new Set();
857
- const deletedTargets = [];
858
- for (const deletion of request.deletions) {
859
- if (!deletion || typeof deletion !== "object") {
860
- throw new Error("Deletion target must be an object");
861
- }
862
- if (deletion.kind !== "entry" && deletion.kind !== "content_block") {
863
- throw new Error(`Unsupported deletion target kind: ${String(deletion.kind)}`);
864
- }
865
- assertIdOnlyDeletionTarget(deletion);
866
- if (typeof deletion.entryId !== "string" || deletion.entryId.length === 0) {
867
- throw new Error("Deletion target entryId must be a non-empty string");
868
- }
869
- const entry = entryById.get(deletion.entryId);
870
- if (!entry) {
871
- throw new Error(`Unknown deletion target entryId: ${deletion.entryId}`);
872
- }
873
- const normalized = normalizeRawTarget(deletion);
874
- if (deletion.kind === "entry") {
875
- if (recentEntryIds.has(deletion.entryId)) {
876
- throw new Error(formatRecentContextDeletionError(transcript, normalized));
877
- }
878
- if (entry.protected) {
879
- throw new Error(formatProtectedDeletionError(transcript, normalized));
880
- }
881
- }
882
- if (deletion.kind === "content_block") {
883
- if (typeof deletion.blockIndex !== "number" || !Number.isInteger(deletion.blockIndex) || deletion.blockIndex < 0) {
884
- throw new Error(`Invalid content block index for entry ${deletion.entryId}`);
885
- }
886
- if (recentEntryIds.has(deletion.entryId)) {
887
- throw new Error(formatRecentContextDeletionError(transcript, normalized));
888
- }
889
- if (entry.protected) {
890
- throw new Error(formatProtectedDeletionError(transcript, normalized));
891
- }
892
- const block = entry.contentBlocks.find((item) => item.blockIndex === deletion.blockIndex);
893
- if (!block) {
894
- throw new Error(`Unknown content block ${deletion.blockIndex} for entry ${deletion.entryId}`);
895
- }
896
- if (block.protected) {
897
- throw new Error(formatProtectedDeletionError(transcript, normalized));
898
- }
899
- if (entry.contentBlocks.length <= 1) {
900
- throw new Error(`Deleting the only content block of ${deletion.entryId} must be an entry deletion`);
901
- }
902
- }
903
- const key = rawTargetKey(deletion);
904
- if (seen.has(key)) {
905
- throw new Error(`Duplicate deletion target: ${key}`);
906
- }
907
- seen.add(key);
908
- deletedTargets.push(normalized);
909
- }
910
- const reconciledTargets = reconcileToolDependencies(transcript, deletedTargets);
911
- // Tool reconciliation can add targets after the per-request checks above, so
912
- // these post-reconcile assertions remain authoritative.
913
- assertNoRecentContextDeletionTargets(transcript, reconciledTargets);
914
- assertNoAssistantThinkingContentBlockDeletionTargets(transcript, reconciledTargets);
915
- assertNoLatestAssistantThinkingDeletionTargets(transcript, reconciledTargets);
916
- const reconciledDeletedEntryIds = getDeletedEntryIds(reconciledTargets);
917
- for (const target of reconciledTargets) {
918
- if (target.kind === "content_block" && reconciledDeletedEntryIds.has(target.entryId)) {
919
- throw new Error(`Deletion target ${targetKey(target)} overlaps with entry deletion`);
920
- }
921
- }
922
- const deletedContentBlocks = getDeletedContentBlocks(reconciledTargets);
923
- for (const [entryId, blockIndexes] of deletedContentBlocks) {
924
- const entry = entryById.get(entryId);
925
- if (entry?.contentBlocks.every((block) => blockIndexes.has(block.blockIndex))) {
926
- throw new Error(`Content-block deletions for ${entryId} would remove every content block`);
927
- }
928
- }
929
- validateToolDependencies(transcript, reconciledTargets);
930
- const remainingEntries = transcript.entries.filter((entry) => !reconciledDeletedEntryIds.has(entry.entryId));
931
- if (remainingEntries.length === 0) {
932
- throw new Error("Deletion request would remove all context entries");
933
- }
934
- const hasTaskBearingContext = remainingEntries.some(isTaskBearingEntry);
935
- if (!hasTaskBearingContext) {
936
- throw new Error("Deletion request would leave no user task in context");
937
- }
938
- return {
939
- deletedTargets: reconciledTargets,
940
- protectedEntryIds: [...transcript.protectedEntryIds],
941
- stats: computeContextCompactionStats(transcript, reconciledTargets),
942
- };
943
- }
944
- function contextDeletionRequestFromObject(value, source) {
945
- if (!value || typeof value !== "object" || !Array.isArray(value.deletions)) {
946
- throw new Error(`${source} must contain a deletions array`);
947
- }
948
- return value;
949
- }
950
- function escapeRegExpLiteral(text) {
951
- return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
952
- }
953
- function formatErrorMessage(error) {
954
- return error instanceof Error ? error.message : String(error);
955
- }
956
- function createContextDeletionToolResult(text, details) {
957
- return { content: [{ type: "text", text }], details, terminate: false };
958
- }
959
- function roundPercent(value) {
960
- return Math.round(value * 10) / 10;
961
- }
962
- function percentOf(part, total) {
963
- return total > 0 ? roundPercent((part / total) * 100) : 0;
964
- }
965
- function finitePositiveNumber(value) {
966
- return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : undefined;
967
- }
968
- function createContextCompactionBudgetDetails(stats, callCount, contextWindow, parameters) {
969
- const targetTokensAfter = Math.max(0, Math.floor(stats.tokensBefore * parameters.compression_ratio));
970
- const targetReductionPercent = contextCompactionTargetReductionPercent(parameters);
971
- const details = {
972
- ...(contextWindow !== undefined ? { contextWindow } : {}),
973
- compression_ratio: parameters.compression_ratio,
974
- tokensBefore: stats.tokensBefore,
975
- currentTokensAfter: stats.tokensAfter,
976
- deletedTokens: Math.max(0, stats.tokensBefore - stats.tokensAfter),
977
- currentReductionPercent: stats.percentReduction,
978
- targetReductionPercent,
979
- targetTokensAfter,
980
- tokensToDeleteForTarget: Math.max(0, stats.tokensAfter - targetTokensAfter),
981
- ...(contextWindow !== undefined
982
- ? {
983
- contextWindowBeforePercent: percentOf(stats.tokensBefore, contextWindow),
984
- contextWindowAfterPercent: percentOf(stats.tokensAfter, contextWindow),
985
- }
986
- : {}),
987
- callCount,
988
- };
989
- return details;
990
- }
991
- function contextCompactionTargetMet(result, parameters) {
992
- return (result !== undefined &&
993
- result.deletedTargets.length > 0 &&
994
- result.stats.percentReduction >= contextCompactionTargetReductionPercent(parameters));
995
- }
996
- function contextCompactionProgressKey(result) {
997
- if (!result)
998
- return "none:0";
999
- return `${result.deletedTargets.length}:${result.stats.percentReduction}:${result.stats.tokensAfter}`;
1000
- }
1001
- function contextCompactionProgressPercent(result) {
1002
- return result?.stats.percentReduction ?? 0;
1003
- }
1004
- function createContextCompactionTargetNudgeMessage(result, parameters) {
1005
- const currentReductionPercent = contextCompactionProgressPercent(result);
1006
- const targetLabel = contextCompactionTargetLabel(parameters);
1007
- const tokensToDelete = result
1008
- ? createContextCompactionBudgetDetails(result.stats, 0, undefined, parameters).tokensToDeleteForTarget
1009
- : undefined;
1010
- const remainingText = tokensToDelete !== undefined ? ` Delete about ${tokensToDelete} more token(s) if safe candidates exist.` : "";
1011
- return {
1012
- role: "user",
1013
- content: [
1014
- {
1015
- type: "text",
1016
- text: `The strict ${targetLabel} context-reduction requirement is not met yet; current validated reduction is ${currentReductionPercent}%.${remainingText} Continue removing low-value message entries or message content blocks using ${CONTEXT_DELETE_TOOL_NAME} or ${CONTEXT_GREP_DELETE_TOOL_NAME}. Use the focus query ${JSON.stringify(parameters.query)} to preserve relevant context. Call ${CONTEXT_COMPACTION_BUDGET_TOOL_NAME} to verify progress, and do not provide a final answer until the validated reduction is at least ${targetLabel}.`,
1017
- },
1018
- ],
1019
- timestamp: Date.now(),
1020
- };
1021
- }
1022
- function assertSafeRegexPattern(pattern) {
1023
- if (pattern.length > CONTEXT_GREP_DELETE_MAX_REGEX_PATTERN_CHARS) {
1024
- throw new Error(`Regex pattern is too long (${pattern.length} characters); maximum is ${CONTEXT_GREP_DELETE_MAX_REGEX_PATTERN_CHARS}`);
1025
- }
1026
- // Heuristic ReDoS guard for common catastrophic-backtracking shapes. JavaScript's RegExp engine
1027
- // does not expose a timeout, so reject nested quantified groups and backreferences instead of
1028
- // relying only on transcript scan-size caps.
1029
- const hasNestedQuantifiedGroup = /\((?:[^()\\]|\\.)*[+*](?:[^()\\]|\\.)*\)\s*(?:[+*]|\{\d)/u.test(pattern);
1030
- const hasQuantifiedAlternation = /\((?:[^()\\]|\\.)*\|(?:[^()\\]|\\.)*\)\s*(?:[+*]|\{\d)/u.test(pattern);
1031
- const hasBackreference = /\\[1-9]/u.test(pattern);
1032
- if (hasNestedQuantifiedGroup || hasQuantifiedAlternation || hasBackreference) {
1033
- throw new Error("Regex pattern is not allowed because it may cause excessive backtracking; use a literal pattern or exact deletion targets instead.");
1034
- }
1035
- }
1036
- function createGrepMatcher(pattern, regex, caseSensitive) {
1037
- if (regex) {
1038
- assertSafeRegexPattern(pattern);
1039
- }
1040
- try {
1041
- return new RegExp(regex ? pattern : escapeRegExpLiteral(pattern), caseSensitive ? "u" : "iu");
1042
- }
1043
- catch (error) {
1044
- throw new Error(`Invalid grep ${regex ? "regex" : "pattern"}: ${formatErrorMessage(error)}`);
1045
- }
1046
- }
1047
- function assertSafeRegexScan(scanChars) {
1048
- if (scanChars <= CONTEXT_GREP_DELETE_MAX_REGEX_SCAN_CHARS)
1049
- return;
1050
- throw new Error(`Regex grep would scan ${scanChars} characters; maximum is ${CONTEXT_GREP_DELETE_MAX_REGEX_SCAN_CHARS}. Use a literal pattern or exact deletion targets instead.`);
1051
- }
1052
- function clampInteger(value, defaultValue, minimum, maximum) {
1053
- if (value === undefined)
1054
- return defaultValue;
1055
- return Math.max(minimum, Math.min(maximum, value));
1056
- }
1057
- function textSlice(text, offset, maxChars) {
1058
- return text.slice(offset, Math.min(text.length, offset + maxChars));
1059
- }
1060
- function findMatchIndex(matcher, text) {
1061
- const match = matcher.exec(text);
1062
- matcher.lastIndex = 0;
1063
- return match?.index ?? -1;
1064
- }
1065
- function snippetForMatch(text, matchIndex, contextChars) {
1066
- const start = Math.max(0, matchIndex - contextChars);
1067
- const end = Math.min(text.length, matchIndex + contextChars);
1068
- const prefix = start > 0 ? "…" : "";
1069
- const suffix = end < text.length ? "…" : "";
1070
- return `${prefix}${text.slice(start, end)}${suffix}`;
1071
- }
1072
- function currentTargetDeleted(targets, target) {
1073
- const deletedEntryIds = getDeletedEntryIds(targets);
1074
- if (deletedEntryIds.has(target.entryId))
1075
- return true;
1076
- if (target.kind === "entry")
1077
- return false;
1078
- return getDeletedContentBlocks(targets).get(target.entryId)?.has(target.blockIndex) === true;
1079
- }
1080
- function addGrepCandidate(candidates, matches, seenTargets, candidate, match) {
1081
- const key = targetKey(candidate);
1082
- if (seenTargets.has(key))
1083
- return;
1084
- seenTargets.add(key);
1085
- candidates.push(candidate);
1086
- matches.push(match);
1087
- }
1088
- function pushProtectedGrepSkip(skipped, match) {
1089
- skipped.push({
1090
- entryId: match.entryId,
1091
- target: match.target,
1092
- ...(match.blockIndex === undefined ? {} : { blockIndex: match.blockIndex }),
1093
- reason: match.target === "content_block" ? "protected_block" : "protected_entry",
1094
- text: match.text,
1095
- });
1096
- }
1097
- function filterProtectedGrepCandidates(candidates, matches, currentTargets, transcript, skipped) {
1098
- const eligibleCandidates = [];
1099
- const eligibleMatches = [];
1100
- for (let index = 0; index < candidates.length; index++) {
1101
- const candidate = candidates[index];
1102
- const match = matches[index];
1103
- if (!candidate || !match)
1104
- continue;
1105
- try {
1106
- const mergedTargets = mergeContextDeletionTargets(currentTargets, [candidate]);
1107
- validateContextDeletionRequest(deletionRequestFromTargets(mergedTargets), transcript);
1108
- eligibleCandidates.push(candidate);
1109
- eligibleMatches.push(match);
1110
- }
1111
- catch (error) {
1112
- const message = formatErrorMessage(error);
1113
- if (isProtectedContextDeletionErrorMessage(message)) {
1114
- pushProtectedGrepSkip(skipped, match);
1115
- continue;
1116
- }
1117
- eligibleCandidates.push(candidate);
1118
- eligibleMatches.push(match);
1119
- }
1120
- }
1121
- // Some latest-assistant thinking violations only become visible after a grep batch also
1122
- // deletes newer assistant entries. Classify the newly-unsafe grep candidates as
1123
- // protected/skipped before maxMatches, expectedMatchCount, stats, or removals are computed.
1124
- let changed = true;
1125
- while (changed) {
1126
- changed = false;
1127
- const mergedTargets = mergeContextDeletionTargets(currentTargets, eligibleCandidates);
1128
- const violation = findLatestAssistantThinkingDeletionViolation(transcript, mergedTargets);
1129
- if (!violation)
1130
- continue;
1131
- const violationKey = targetKey(violation);
1132
- let violationIndex = eligibleCandidates.findIndex((candidate) => targetKey(candidate) === violationKey);
1133
- if (violationIndex < 0) {
1134
- violationIndex = eligibleCandidates.findIndex((_candidate, candidateIndex) => {
1135
- const remainingCandidates = eligibleCandidates.filter((_candidateToKeep, index) => index !== candidateIndex);
1136
- const remainingTargets = mergeContextDeletionTargets(currentTargets, remainingCandidates);
1137
- const remainingViolation = findLatestAssistantThinkingDeletionViolation(transcript, remainingTargets);
1138
- return !remainingViolation || targetKey(remainingViolation) !== violationKey;
1139
- });
1140
- }
1141
- if (violationIndex < 0)
1142
- continue;
1143
- const [skippedMatch] = eligibleMatches.splice(violationIndex, 1);
1144
- eligibleCandidates.splice(violationIndex, 1);
1145
- if (skippedMatch)
1146
- pushProtectedGrepSkip(skipped, skippedMatch);
1147
- changed = true;
1148
- }
1149
- return { candidates: eligibleCandidates, matches: eligibleMatches };
1150
- }
1151
- function copyDeletionTarget(target) {
1152
- return target.kind === "entry"
1153
- ? { kind: "entry", entryId: target.entryId }
1154
- : { kind: "content_block", entryId: target.entryId, blockIndex: target.blockIndex };
1155
- }
1156
- class ContextDeletionMemoryStore {
1157
- constructor(transcript) {
1158
- this.deletionTargets = [];
1159
- this.callCount = 0;
1160
- const entryIds = new Set();
1161
- const blockKeys = new Set();
1162
- this.entries = transcript.entries.map((entry) => {
1163
- if (entryIds.has(entry.entryId)) {
1164
- throw new Error(`Duplicate transcript entry id: ${entry.entryId}`);
1165
- }
1166
- entryIds.add(entry.entryId);
1167
- return {
1168
- entryId: entry.entryId,
1169
- role: entry.role,
1170
- protected: entry.protected,
1171
- hasAssistantThinkingBlocks: assistantEntryHasThinkingContentBlock(entry),
1172
- tokenEstimate: entry.tokenEstimate,
1173
- text: entry.text,
1174
- };
1175
- });
1176
- this.entriesById = new Map(this.entries.map((entry) => [entry.entryId, entry]));
1177
- this.contentBlocks = transcript.entries.flatMap((entry, entryPosition) => {
1178
- const hasAssistantThinkingBlocks = assistantEntryHasThinkingContentBlock(entry);
1179
- return entry.contentBlocks.map((block) => {
1180
- if (block.entryId !== entry.entryId) {
1181
- throw new Error(`Transcript content block ${block.entryId}:${block.blockIndex} does not belong to entry ${entry.entryId}`);
1182
- }
1183
- const blockKey = `${block.entryId}:${block.blockIndex}`;
1184
- if (blockKeys.has(blockKey)) {
1185
- throw new Error(`Duplicate transcript content block: ${blockKey}`);
1186
- }
1187
- blockKeys.add(blockKey);
1188
- return {
1189
- entryPosition,
1190
- entryId: block.entryId,
1191
- blockIndex: block.blockIndex,
1192
- role: entry.role,
1193
- type: block.type,
1194
- protected: block.protected,
1195
- hasAssistantThinkingBlocks,
1196
- tokenEstimate: block.tokenEstimate,
1197
- text: block.text,
1198
- };
1199
- });
1200
- });
1201
- this.contentBlockCountByEntryId = new Map();
1202
- for (const block of this.contentBlocks) {
1203
- this.contentBlockCountByEntryId.set(block.entryId, (this.contentBlockCountByEntryId.get(block.entryId) ?? 0) + 1);
1204
- }
1205
- }
1206
- transaction(operation) {
1207
- const snapshot = this.snapshot();
1208
- try {
1209
- return operation();
1210
- }
1211
- catch (error) {
1212
- this.restore(snapshot);
1213
- throw error;
1214
- }
1215
- }
1216
- readTargets() {
1217
- return this.deletionTargets.map(copyDeletionTarget);
1218
- }
1219
- replaceTargets(targets) {
1220
- this.deletionTargets = targets.map(copyDeletionTarget);
1221
- }
1222
- listEntriesForGrep() {
1223
- return this.entries.map((entry) => ({
1224
- entry_id: entry.entryId,
1225
- text: entry.text,
1226
- is_protected: entry.protected ? 1 : 0,
1227
- has_assistant_thinking_blocks: entry.hasAssistantThinkingBlocks ? 1 : 0,
1228
- }));
1229
- }
1230
- listContentBlocksForGrep() {
1231
- return [...this.contentBlocks]
1232
- .sort((a, b) => a.entryPosition - b.entryPosition || a.blockIndex - b.blockIndex)
1233
- .map((block) => ({
1234
- entry_id: block.entryId,
1235
- block_index: block.blockIndex,
1236
- role: block.role,
1237
- type: block.type,
1238
- text: block.text,
1239
- entry_protected: this.entriesById.get(block.entryId)?.protected ? 1 : 0,
1240
- block_protected: block.protected ? 1 : 0,
1241
- block_count: this.contentBlockCountByEntryId.get(block.entryId) ?? 0,
1242
- has_assistant_thinking_blocks: block.hasAssistantThinkingBlocks ? 1 : 0,
1243
- }));
1244
- }
1245
- getEntryForRead(entryId) {
1246
- const entry = this.entriesById.get(entryId);
1247
- if (!entry)
1248
- return undefined;
1249
- return {
1250
- entry_id: entry.entryId,
1251
- role: entry.role,
1252
- is_protected: entry.protected ? 1 : 0,
1253
- has_assistant_thinking_blocks: entry.hasAssistantThinkingBlocks ? 1 : 0,
1254
- token_estimate: entry.tokenEstimate,
1255
- text: entry.text,
1256
- };
1257
- }
1258
- getContentBlockForRead(entryId, blockIndex) {
1259
- const block = this.contentBlocks.find((candidate) => candidate.entryId === entryId && candidate.blockIndex === blockIndex);
1260
- if (!block)
1261
- return undefined;
1262
- return {
1263
- entry_id: block.entryId,
1264
- block_index: block.blockIndex,
1265
- role: block.role,
1266
- type: block.type,
1267
- token_estimate: block.tokenEstimate,
1268
- text: block.text,
1269
- entry_protected: this.entriesById.get(block.entryId)?.protected ? 1 : 0,
1270
- block_protected: block.protected ? 1 : 0,
1271
- block_count: this.contentBlockCountByEntryId.get(block.entryId) ?? 0,
1272
- has_assistant_thinking_blocks: block.hasAssistantThinkingBlocks ? 1 : 0,
1273
- };
1274
- }
1275
- getGrepScanTextLength(target) {
1276
- const texts = target === "entry" ? this.entries : this.contentBlocks;
1277
- return texts.reduce((sum, item) => sum + item.text.length, 0);
1278
- }
1279
- incrementCallCount() {
1280
- this.callCount += 1;
1281
- return this.callCount;
1282
- }
1283
- getCallCount() {
1284
- return this.callCount;
1285
- }
1286
- setLastError(message) {
1287
- this.lastError = message;
1288
- }
1289
- clearLastError() {
1290
- this.lastError = undefined;
1291
- }
1292
- getLastError() {
1293
- return this.lastError;
1294
- }
1295
- snapshot() {
1296
- return {
1297
- deletionTargets: this.readTargets(),
1298
- callCount: this.callCount,
1299
- ...(this.lastError === undefined ? {} : { lastError: this.lastError }),
1300
- };
1301
- }
1302
- restore(snapshot) {
1303
- this.deletionTargets = snapshot.deletionTargets.map(copyDeletionTarget);
1304
- this.callCount = snapshot.callCount;
1305
- this.lastError = snapshot.lastError;
1306
- }
1307
- }
1308
- function createContextDeletionStore(transcript) {
1309
- return new ContextDeletionMemoryStore(transcript);
1310
- }
1311
- export function createContextDeletionTool(inputTranscript, options = {}) {
1312
- const contextWindow = finitePositiveNumber(options.contextWindow);
1313
- const parameters = normalizeContextCompactionParameters({ ...getTranscriptCompactionParameters(inputTranscript), ...options }, inputTranscript.parameters?.query ?? CONTEXT_COMPACTION_AUTO_QUERY);
1314
- const transcript = { ...inputTranscript, parameters };
1315
- const store = createContextDeletionStore(transcript);
1316
- let validatedResult;
1317
- function readTargets() {
1318
- return store.readTargets();
1319
- }
1320
- function applyValidatedTargets(additionalTargets) {
1321
- const mergedTargets = mergeContextDeletionTargets(readTargets(), additionalTargets);
1322
- validatedResult = validateContextDeletionRequest(deletionRequestFromTargets(mergedTargets), transcript);
1323
- store.replaceTargets(validatedResult.deletedTargets);
1324
- return validatedResult;
1325
- }
1326
- function currentStats() {
1327
- return validatedResult?.stats ?? computeContextCompactionStats(transcript, readTargets());
1328
- }
1329
- function canDeleteProtectedTarget(target) {
1330
- return canDeleteTarget(transcript, target);
1331
- }
1332
- const tool = {
1333
- ...CONTEXT_DELETE_TOOL,
1334
- label: "context deletion request",
1335
- executionMode: "parallel",
1336
- async execute(_toolCallId, params) {
1337
- return store.transaction(() => {
1338
- const callCount = store.incrementCallCount();
1339
- try {
1340
- const incomingRequest = contextDeletionRequestFromObject(params, `${CONTEXT_DELETE_TOOL_NAME} arguments`);
1341
- const incomingValidated = validateContextDeletionRequest(incomingRequest, transcript);
1342
- const applied = applyValidatedTargets(incomingValidated.deletedTargets);
1343
- store.clearLastError();
1344
- const deletedTargets = readTargets();
1345
- const details = {
1346
- deletions: deletionRequestFromTargets(deletedTargets).deletions,
1347
- deletedTargets,
1348
- stats: applied.stats,
1349
- callCount,
1350
- };
1351
- 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.`;
1352
- return createContextDeletionToolResult(text, details);
1353
- }
1354
- catch (error) {
1355
- const message = formatErrorMessage(error);
1356
- store.setLastError(message);
1357
- const deletedTargets = readTargets();
1358
- const details = {
1359
- deletions: deletionRequestFromTargets(deletedTargets).deletions,
1360
- deletedTargets,
1361
- stats: currentStats(),
1362
- callCount,
1363
- error: message,
1364
- };
1365
- return createContextDeletionToolResult(`Error recording context deletion targets: ${message}. No new deletion targets were applied; continue with a corrected tool call.`, details);
1366
- }
1367
- });
1368
- },
1369
- };
1370
- const grepTool = {
1371
- ...CONTEXT_GREP_DELETE_TOOL,
1372
- label: "context grep delete",
1373
- executionMode: "parallel",
1374
- async execute(_toolCallId, params) {
1375
- return store.transaction(() => {
1376
- const callCount = store.incrementCallCount();
1377
- const pattern = params.pattern;
1378
- const regex = params.regex === true;
1379
- const caseSensitive = params.caseSensitive === true;
1380
- const target = params.target ?? "entry";
1381
- const maxMatches = params.maxMatches ?? CONTEXT_GREP_DELETE_DEFAULT_MAX_MATCHES;
1382
- const candidates = [];
1383
- const matches = [];
1384
- let reportedMatches = matches;
1385
- const skipped = [];
1386
- const seenTargets = new Set();
1387
- try {
1388
- if (regex) {
1389
- assertSafeRegexScan(store.getGrepScanTextLength(target));
1390
- }
1391
- const matcher = createGrepMatcher(pattern, regex, caseSensitive);
1392
- const currentTargets = readTargets();
1393
- const recentEntryIds = getRecentContextEntryIds(transcript);
1394
- if (target === "entry") {
1395
- for (const entry of store.listEntriesForGrep()) {
1396
- if (!matcher.test(entry.text))
1397
- continue;
1398
- const candidate = { kind: "entry", entryId: entry.entry_id };
1399
- if (recentEntryIds.has(candidate.entryId)) {
1400
- skipped.push({ entryId: entry.entry_id, target, reason: "protected_entry", text: entry.text });
1401
- continue;
1402
- }
1403
- if (entry.is_protected === 1 && !canDeleteProtectedTarget(candidate)) {
1404
- skipped.push({ entryId: entry.entry_id, target, reason: "protected_entry", text: entry.text });
1405
- continue;
1406
- }
1407
- if (currentTargetDeleted(currentTargets, candidate)) {
1408
- skipped.push({ entryId: entry.entry_id, target, reason: "already_deleted", text: entry.text });
1409
- continue;
1410
- }
1411
- addGrepCandidate(candidates, matches, seenTargets, candidate, {
1412
- entryId: entry.entry_id,
1413
- target,
1414
- text: entry.text,
1415
- });
1416
- }
1417
- }
1418
- else {
1419
- for (const block of store.listContentBlocksForGrep()) {
1420
- if (!matcher.test(block.text))
1421
- continue;
1422
- const candidate = block.block_count <= 1
1423
- ? { kind: "entry", entryId: block.entry_id }
1424
- : { kind: "content_block", entryId: block.entry_id, blockIndex: block.block_index };
1425
- if (recentEntryIds.has(candidate.entryId)) {
1426
- skipped.push({
1427
- entryId: block.entry_id,
1428
- target: candidate.kind,
1429
- ...(candidate.kind === "content_block" ? { blockIndex: candidate.blockIndex } : {}),
1430
- reason: "protected_entry",
1431
- text: block.text,
1432
- });
1433
- continue;
1434
- }
1435
- if (block.entry_protected === 1 && !canDeleteProtectedTarget(candidate)) {
1436
- skipped.push({
1437
- entryId: block.entry_id,
1438
- target,
1439
- blockIndex: block.block_index,
1440
- reason: "protected_entry",
1441
- text: block.text,
1442
- });
1443
- continue;
1444
- }
1445
- if (block.block_protected === 1 && !canDeleteProtectedTarget(candidate)) {
1446
- skipped.push({
1447
- entryId: block.entry_id,
1448
- target,
1449
- blockIndex: block.block_index,
1450
- reason: "protected_block",
1451
- text: block.text,
1452
- });
1453
- continue;
1454
- }
1455
- if (currentTargetDeleted(currentTargets, candidate)) {
1456
- skipped.push({
1457
- entryId: block.entry_id,
1458
- target: candidate.kind,
1459
- ...(candidate.kind === "content_block" ? { blockIndex: candidate.blockIndex } : {}),
1460
- reason: "already_deleted",
1461
- text: block.text,
1462
- });
1463
- continue;
1464
- }
1465
- addGrepCandidate(candidates, matches, seenTargets, candidate, {
1466
- entryId: block.entry_id,
1467
- target: candidate.kind,
1468
- ...(candidate.kind === "content_block" ? { blockIndex: candidate.blockIndex } : {}),
1469
- text: block.text,
1470
- });
1471
- }
1472
- }
1473
- const eligible = filterProtectedGrepCandidates(candidates, matches, currentTargets, transcript, skipped);
1474
- reportedMatches = eligible.matches;
1475
- let applied;
1476
- if (params.expectedMatchCount !== undefined && eligible.candidates.length !== params.expectedMatchCount) {
1477
- skipped.push({ reason: "expected_match_count_mismatch" });
1478
- }
1479
- else if (eligible.candidates.length > maxMatches) {
1480
- skipped.push({ reason: "max_matches_exceeded" });
1481
- }
1482
- else if (eligible.candidates.length > 0) {
1483
- applied = applyValidatedTargets(eligible.candidates);
1484
- }
1485
- store.clearLastError();
1486
- const deletedTargets = readTargets();
1487
- const details = {
1488
- pattern,
1489
- regex,
1490
- caseSensitive,
1491
- target,
1492
- matches: eligible.matches,
1493
- skipped,
1494
- deletedTargets,
1495
- stats: applied?.stats ?? currentStats(),
1496
- callCount,
1497
- };
1498
- 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}.`;
1499
- return createContextDeletionToolResult(text, details);
1500
- }
1501
- catch (error) {
1502
- const message = formatErrorMessage(error);
1503
- store.setLastError(message);
1504
- const deletedTargets = readTargets();
1505
- const details = {
1506
- pattern,
1507
- regex,
1508
- caseSensitive,
1509
- target,
1510
- matches: reportedMatches,
1511
- skipped,
1512
- deletedTargets,
1513
- stats: currentStats(),
1514
- callCount,
1515
- error: message,
1516
- };
1517
- 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);
1518
- }
1519
- });
1520
- },
1521
- };
1522
- const searchTool = {
1523
- ...CONTEXT_SEARCH_TRANSCRIPT_TOOL,
1524
- label: "context transcript search",
1525
- executionMode: "parallel",
1526
- async execute(_toolCallId, params) {
1527
- return store.transaction(() => {
1528
- const callCount = store.incrementCallCount();
1529
- const pattern = params.pattern;
1530
- const regex = params.regex === true;
1531
- const caseSensitive = params.caseSensitive === true;
1532
- const target = params.target ?? "entry";
1533
- const maxMatches = clampInteger(params.maxMatches, CONTEXT_SEARCH_DEFAULT_MAX_MATCHES, 1, CONTEXT_SEARCH_MAX_MATCHES);
1534
- const contextChars = clampInteger(params.contextChars, CONTEXT_SEARCH_DEFAULT_CONTEXT_CHARS, 0, CONTEXT_SEARCH_MAX_CONTEXT_CHARS);
1535
- const matches = [];
1536
- let truncated = false;
1537
- try {
1538
- if (regex) {
1539
- assertSafeRegexScan(store.getGrepScanTextLength(target));
1540
- }
1541
- const matcher = createGrepMatcher(pattern, regex, caseSensitive);
1542
- if (target === "entry") {
1543
- for (const entry of store.listEntriesForGrep()) {
1544
- const matchIndex = findMatchIndex(matcher, entry.text);
1545
- if (matchIndex < 0)
1546
- continue;
1547
- if (matches.length >= maxMatches) {
1548
- truncated = true;
1549
- break;
1550
- }
1551
- matches.push({
1552
- entryId: entry.entry_id,
1553
- target,
1554
- matchIndex,
1555
- snippet: snippetForMatch(entry.text, matchIndex, contextChars),
1556
- protected: entry.is_protected === 1,
1557
- });
1558
- }
1559
- }
1560
- else {
1561
- for (const block of store.listContentBlocksForGrep()) {
1562
- const matchIndex = findMatchIndex(matcher, block.text);
1563
- if (matchIndex < 0)
1564
- continue;
1565
- if (matches.length >= maxMatches) {
1566
- truncated = true;
1567
- break;
1568
- }
1569
- matches.push({
1570
- entryId: block.entry_id,
1571
- target,
1572
- blockIndex: block.block_index,
1573
- matchIndex,
1574
- snippet: snippetForMatch(block.text, matchIndex, contextChars),
1575
- protected: block.entry_protected === 1 || block.block_protected === 1,
1576
- });
1577
- }
1578
- }
1579
- store.clearLastError();
1580
- const details = {
1581
- pattern,
1582
- regex,
1583
- caseSensitive,
1584
- target,
1585
- matches,
1586
- truncated,
1587
- callCount,
1588
- };
1589
- 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.`;
1590
- return createContextDeletionToolResult(text, details);
1591
- }
1592
- catch (error) {
1593
- const message = formatErrorMessage(error);
1594
- store.setLastError(message);
1595
- const details = {
1596
- pattern,
1597
- regex,
1598
- caseSensitive,
1599
- target,
1600
- matches,
1601
- truncated,
1602
- callCount,
1603
- error: message,
1604
- };
1605
- return createContextDeletionToolResult(`Error searching transcript for ${JSON.stringify(pattern)}: ${message}. Try a literal pattern or narrower query.`, details);
1606
- }
1607
- });
1608
- },
1609
- };
1610
- const readEntryTool = {
1611
- ...CONTEXT_READ_ENTRY_TOOL,
1612
- label: "context read entry",
1613
- executionMode: "parallel",
1614
- async execute(_toolCallId, params) {
1615
- return store.transaction(() => {
1616
- const callCount = store.incrementCallCount();
1617
- const offset = clampInteger(params.offset, 0, 0, Number.MAX_SAFE_INTEGER);
1618
- const maxChars = clampInteger(params.maxChars, CONTEXT_READ_ENTRY_DEFAULT_MAX_CHARS, 1, CONTEXT_READ_ENTRY_MAX_CHARS);
1619
- try {
1620
- const row = params.blockIndex === undefined
1621
- ? store.getEntryForRead(params.entryId)
1622
- : store.getContentBlockForRead(params.entryId, params.blockIndex);
1623
- if (!row) {
1624
- throw new Error(params.blockIndex === undefined
1625
- ? `Unknown transcript entry: ${params.entryId}`
1626
- : `Unknown transcript content block: ${params.entryId}:${params.blockIndex}`);
1627
- }
1628
- const text = row.text;
1629
- const slice = textSlice(text, offset, maxChars);
1630
- store.clearLastError();
1631
- const details = {
1632
- entryId: params.entryId,
1633
- ...(params.blockIndex === undefined ? {} : { blockIndex: params.blockIndex }),
1634
- offset,
1635
- maxChars,
1636
- totalChars: text.length,
1637
- text: slice,
1638
- truncatedBefore: offset > 0,
1639
- truncatedAfter: offset + maxChars < text.length,
1640
- callCount,
1641
- };
1642
- 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.`;
1643
- return createContextDeletionToolResult(textResult, details);
1644
- }
1645
- catch (error) {
1646
- const message = formatErrorMessage(error);
1647
- store.setLastError(message);
1648
- const details = {
1649
- entryId: params.entryId,
1650
- ...(params.blockIndex === undefined ? {} : { blockIndex: params.blockIndex }),
1651
- offset,
1652
- maxChars,
1653
- totalChars: 0,
1654
- text: "",
1655
- truncatedBefore: false,
1656
- truncatedAfter: false,
1657
- callCount,
1658
- error: message,
1659
- };
1660
- return createContextDeletionToolResult(`Error reading transcript entry: ${message}`, details);
1661
- }
1662
- });
1663
- },
1664
- };
1665
- const budgetTool = {
1666
- ...CONTEXT_COMPACTION_BUDGET_TOOL,
1667
- label: "context compaction budget",
1668
- executionMode: "parallel",
1669
- async execute(_toolCallId) {
1670
- return store.transaction(() => {
1671
- const callCount = store.incrementCallCount();
1672
- store.clearLastError();
1673
- const details = createContextCompactionBudgetDetails(currentStats(), callCount, contextWindow, parameters);
1674
- const windowText = details.contextWindowBeforePercent !== undefined
1675
- ? ` Context window fullness: ${details.contextWindowBeforePercent}% before selected deletions, ${details.contextWindowAfterPercent}% after selected deletions.`
1676
- : " Context window size is unknown for this model, so fullness percentages are unavailable.";
1677
- const targetText = details.tokensToDeleteForTarget > 0
1678
- ? ` Delete about ${details.tokensToDeleteForTarget} more token(s) to reach the ${details.targetReductionPercent}% reduction target.`
1679
- : ` The selected deletions meet or exceed the ${details.targetReductionPercent}% reduction target.`;
1680
- return createContextDeletionToolResult(`Current selected deletions reduce context by ${details.currentReductionPercent}% (${details.deletedTokens} token(s)); tokens after selected deletions: ${details.currentTokensAfter}/${details.tokensBefore}.${windowText}${targetText} Keep maximizing useful retained context while aggressively removing low-value blocks.`, details);
1681
- });
1682
- },
1683
- };
1684
- return {
1685
- tool,
1686
- grepTool,
1687
- searchTool,
1688
- readEntryTool,
1689
- budgetTool,
1690
- tools: [tool, grepTool, searchTool, readEntryTool, budgetTool],
1691
- getDeletionRequest: () => deletionRequestFromTargets(readTargets()),
1692
- getValidatedResult: () => validatedResult,
1693
- getLastError: () => store.getLastError(),
1694
- getCallCount: () => store.getCallCount(),
1695
- };
1696
- }
1697
- function truncateForPrompt(text, maxChars) {
1698
- if (text.length <= maxChars)
1699
- return text;
1700
- return `${text.slice(0, maxChars)}\n[... ${text.length - maxChars} more characters omitted from context compaction prompt]`;
1701
- }
1702
- function transcriptEntryFilePayload(entry) {
1703
- return {
1704
- entryId: entry.entryId,
1705
- entryType: entry.entryType,
1706
- role: entry.role,
1707
- protected: entry.protected,
1708
- tokenEstimate: entry.tokenEstimate,
1709
- toolCallIds: entry.toolCallIds,
1710
- toolResultFor: entry.toolResultFor,
1711
- text: entry.text,
1712
- contentBlocks: entry.contentBlocks.map((block) => ({
1713
- blockIndex: block.blockIndex,
1714
- type: block.type,
1715
- protected: block.protected,
1716
- toolCallId: block.toolCallId,
1717
- tokenEstimate: block.tokenEstimate,
1718
- text: block.text,
1719
- })),
1720
- };
1721
- }
1722
- function writeContextCompactionTranscriptFile(transcript) {
1723
- const directory = mkdtempSync(join(tmpdir(), "atomic-context-transcript-"));
1724
- const path = join(directory, "transcript.jsonl");
1725
- const lines = transcript.entries
1726
- .filter((entry) => !isExcludedFromLlmContext(entry.message))
1727
- .map((entry) => JSON.stringify(transcriptEntryFilePayload(entry)));
1728
- writeFileSync(path, `${lines.join("\n")}\n`, "utf8");
1729
- return {
1730
- path,
1731
- cleanup: () => rmSync(directory, { recursive: true, force: true }),
1732
- };
1733
- }
1734
- function contextCompactionTranscriptManifest(transcript, transcriptFilePath) {
1735
- const eligibleEntries = transcript.entries.filter((entry) => !isExcludedFromLlmContext(entry.message));
1736
- const selectedEntryIds = new Set();
1737
- const selectedEntries = [];
1738
- const addEntry = (entry) => {
1739
- if (selectedEntryIds.has(entry.entryId) || selectedEntries.length >= CONTEXT_MANIFEST_MAX_ENTRIES)
1740
- return;
1741
- selectedEntryIds.add(entry.entryId);
1742
- selectedEntries.push(entry);
1743
- };
1744
- for (const entry of eligibleEntries.filter((entry) => entry.protected)) {
1745
- addEntry(entry);
1746
- }
1747
- for (const entry of [...eligibleEntries]
1748
- .filter((entry) => !entry.protected)
1749
- .sort((left, right) => right.tokenEstimate - left.tokenEstimate)) {
1750
- addEntry(entry);
1751
- }
1752
- selectedEntries.sort((left, right) => eligibleEntries.indexOf(left) - eligibleEntries.indexOf(right));
1753
- return {
1754
- transcriptFilePath,
1755
- transcriptFileFormat: "jsonl: one compactable transcript entry per line with full text and contentBlocks text",
1756
- totalEntries: eligibleEntries.length,
1757
- manifestEntries: selectedEntries.length,
1758
- omittedEntries: Math.max(0, eligibleEntries.length - selectedEntries.length),
1759
- tokensBefore: transcript.tokensBefore,
1760
- protectedEntryIds: transcript.protectedEntryIds,
1761
- entries: selectedEntries.map((entry) => ({
1762
- entryId: entry.entryId,
1763
- role: entry.role,
1764
- protected: entry.protected,
1765
- tokenEstimate: entry.tokenEstimate,
1766
- toolCallIds: entry.toolCallIds,
1767
- toolResultFor: entry.toolResultFor,
1768
- contentBlockCount: entry.contentBlocks.length,
1769
- contentBlocks: entry.contentBlocks.map((block) => ({
1770
- blockIndex: block.blockIndex,
1771
- type: block.type,
1772
- protected: block.protected,
1773
- toolCallId: block.toolCallId,
1774
- tokenEstimate: block.tokenEstimate,
1775
- })),
1776
- preview: truncateForPrompt(entry.text, CONTEXT_MANIFEST_PREVIEW_CHARS),
1777
- })),
1778
- };
1779
- }
1780
- function contextCompactionParametersPrompt(parameters) {
1781
- return `\n<compaction-parameters>\n${JSON.stringify({
1782
- compression_ratio: parameters.compression_ratio,
1783
- preserve_recent: parameters.preserve_recent,
1784
- query: parameters.query,
1785
- target_reduction_percent: contextCompactionTargetReductionPercent(parameters),
1786
- }, null, 2)}\n</compaction-parameters>`;
1787
- }
1788
- export function buildContextCompactionPrompt(transcript, transcriptFilePath = "<transcript file will be written during context compaction>", parameters = getTranscriptCompactionParameters(transcript)) {
1789
- return `${contextCompactionFixedPrompt(parameters)}${contextCompactionParametersPrompt(parameters)}\n\n<transcript-file>\n${transcriptFilePath}\n</transcript-file>\n\n<context-manifest>\n${JSON.stringify(contextCompactionTranscriptManifest(transcript, transcriptFilePath), null, 2)}\n</context-manifest>`;
1790
- }
1791
- function createContextCompactionAssistantMessage(model, content, stopReason, errorMessage) {
1792
- return {
1793
- role: "assistant",
1794
- content,
1795
- api: model.api,
1796
- provider: model.provider,
1797
- model: model.id,
1798
- usage: {
1799
- input: 0,
1800
- output: 0,
1801
- cacheRead: 0,
1802
- cacheWrite: 0,
1803
- totalTokens: 0,
1804
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
1805
- },
1806
- stopReason,
1807
- ...(errorMessage !== undefined ? { errorMessage } : {}),
1808
- timestamp: Date.now(),
1809
- };
1810
- }
1811
- function createContextCompactionStopStream(model, text) {
1812
- const stream = createAssistantMessageEventStream();
1813
- queueMicrotask(() => {
1814
- const message = createContextCompactionAssistantMessage(model, [{ type: "text", text }], "stop");
1815
- stream.push({ type: "done", reason: "stop", message });
1816
- stream.end(message);
1817
- });
1818
- return stream;
1819
- }
1820
- function isContextCompactionOverflowError(model, errorMessage) {
1821
- return isContextOverflow(createContextCompactionAssistantMessage(model, [], "error", errorMessage), model.contextWindow);
1822
- }
1823
- async function runContextDeletionAssistant(inputTranscript, model, apiKey, headers, signal, thinkingLevel = "off", parameters = getTranscriptCompactionParameters(inputTranscript)) {
1824
- const transcript = { ...inputTranscript, parameters };
1825
- const maxTokens = model.maxTokens > 0 ? model.maxTokens : Number.POSITIVE_INFINITY;
1826
- if (signal?.aborted) {
1827
- throw new Error("Context compaction failed: Request was aborted");
1828
- }
1829
- const transcriptFile = writeContextCompactionTranscriptFile(transcript);
1830
- const promptMessage = {
1831
- role: "user",
1832
- content: [{ type: "text", text: buildContextCompactionPrompt(transcript, transcriptFile.path, parameters) }],
1833
- timestamp: Date.now(),
1834
- };
1835
- const deletionTool = createContextDeletionTool(transcript, { contextWindow: model.contextWindow, ...parameters });
1836
- const agent = new Agent({
1837
- initialState: {
1838
- systemPrompt: CONTEXT_COMPACTION_SYSTEM_PROMPT,
1839
- model,
1840
- thinkingLevel,
1841
- tools: deletionTool.tools,
1842
- },
1843
- toolExecution: "parallel",
1844
- streamFn: async (requestModel, context, streamOptions) => {
1845
- const currentResult = deletionTool.getValidatedResult();
1846
- if (contextCompactionTargetMet(currentResult, parameters)) {
1847
- return createContextCompactionStopStream(requestModel, `Reached the strict ${contextCompactionTargetLabel(parameters)} context-reduction requirement (${currentResult.stats.percentReduction}%); using the validated deletions recorded so far.`);
1848
- }
1849
- return streamSimple(requestModel, context, {
1850
- ...streamOptions,
1851
- maxTokens,
1852
- apiKey,
1853
- headers: headers ?? streamOptions?.headers,
1854
- });
1855
- },
1856
- });
1857
- let lastNudgedProgressKey;
1858
- const unsubscribeNudge = agent.subscribe((event, eventSignal) => {
1859
- if (event.type !== "turn_end" || signal?.aborted || eventSignal.aborted)
1860
- return;
1861
- if (event.message.role !== "assistant")
1862
- return;
1863
- if (event.message.stopReason === "error" || event.message.stopReason === "aborted")
1864
- return;
1865
- if (event.message.content.some((content) => content.type === "toolCall"))
1866
- return;
1867
- const currentResult = deletionTool.getValidatedResult();
1868
- if (contextCompactionTargetMet(currentResult, parameters))
1869
- return;
1870
- const progressKey = contextCompactionProgressKey(currentResult);
1871
- if (progressKey === lastNudgedProgressKey)
1872
- return;
1873
- lastNudgedProgressKey = progressKey;
1874
- agent.followUp(createContextCompactionTargetNudgeMessage(currentResult, parameters));
1875
- });
1876
- const abortOnSignal = () => agent.abort();
1877
- signal?.addEventListener("abort", abortOnSignal, { once: true });
1878
- try {
1879
- await agent.prompt(promptMessage);
1880
- }
1881
- catch (error) {
1882
- if (signal?.aborted) {
1883
- throw new Error("Context compaction failed: Request was aborted");
1884
- }
1885
- throw new Error(`Context compaction failed: ${formatCopilotProviderError(model.provider, formatErrorMessage(error))}`);
1886
- }
1887
- finally {
1888
- signal?.removeEventListener("abort", abortOnSignal);
1889
- unsubscribeNudge();
1890
- transcriptFile.cleanup();
1891
- }
1892
- if (signal?.aborted) {
1893
- throw new Error("Context compaction failed: Request was aborted");
1894
- }
1895
- if (agent.state.errorMessage) {
1896
- const formattedErrorMessage = formatCopilotProviderError(model.provider, agent.state.errorMessage);
1897
- if (isContextCompactionOverflowError(model, agent.state.errorMessage)) {
1898
- return {
1899
- validatedResult: deletionTool.getValidatedResult(),
1900
- lastToolError: deletionTool.getLastError(),
1901
- providerError: formattedErrorMessage === agent.state.errorMessage ? undefined : formattedErrorMessage,
1902
- };
1903
- }
1904
- throw new Error(`Context compaction failed: ${formattedErrorMessage}`);
1905
- }
1906
- if (deletionTool.getCallCount() === 0) {
1907
- throw new Error(`Context compaction did not call any transcript inspection, budget, or deletion tools (${CONTEXT_SEARCH_TRANSCRIPT_TOOL_NAME}, ${CONTEXT_READ_ENTRY_TOOL_NAME}, ${CONTEXT_COMPACTION_BUDGET_TOOL_NAME}, ${CONTEXT_DELETE_TOOL_NAME}, or ${CONTEXT_GREP_DELETE_TOOL_NAME})`);
1908
- }
1909
- return {
1910
- validatedResult: deletionTool.getValidatedResult(),
1911
- lastToolError: deletionTool.getLastError(),
1912
- providerError: undefined,
1913
- };
1914
- }
1915
- function hasMetContextCompactionTarget(run, parameters) {
1916
- return contextCompactionTargetMet(run.validatedResult, parameters);
1917
- }
1918
- function formatContextCompactionTargetFailureMessage(attempts, parameters) {
1919
- const targetLabel = contextCompactionTargetLabel(parameters);
1920
- if (attempts.length === 0) {
1921
- return `Context compaction did not meet the strict ${targetLabel} reduction requirement`;
1922
- }
1923
- const attemptDetails = attempts
1924
- .map((attempt) => {
1925
- const reduction = contextCompactionProgressPercent(attempt.validatedResult);
1926
- const deletionCount = attempt.validatedResult?.deletedTargets.length ?? 0;
1927
- const toolErrorText = attempt.lastToolError ? `; last deletion tool error: ${attempt.lastToolError}` : "";
1928
- const providerErrorText = attempt.providerError ? `; provider error: ${attempt.providerError}` : "";
1929
- return `attempt reached ${reduction}% with ${deletionCount} validated deletion target(s)${toolErrorText}${providerErrorText}`;
1930
- })
1931
- .join("; ");
1932
- return `Context compaction did not meet the strict ${targetLabel} reduction requirement; ${attemptDetails}`;
1933
- }
1934
- export async function contextCompact(preparation, model, apiKey, headers, signal, thinkingLevel = "off") {
1935
- const parameters = normalizeContextCompactionParameters(preparation.parameters ?? preparation.transcript.parameters, preparation.parameters?.query ?? preparation.transcript.parameters?.query ?? CONTEXT_COMPACTION_AUTO_QUERY);
1936
- const transcript = { ...preparation.transcript, parameters };
1937
- const attempts = [];
1938
- const standardRun = await runContextDeletionAssistant(transcript, model, apiKey, headers, signal, thinkingLevel, parameters);
1939
- if (hasMetContextCompactionTarget(standardRun, parameters))
1940
- return standardRun.validatedResult;
1941
- attempts.push({ ...standardRun });
1942
- throw new Error(formatContextCompactionTargetFailureMessage(attempts, parameters));
1943
- }
1
+ export { CONTEXT_COMPACTION_AUTO_QUERY, CONTEXT_COMPACTION_DEFAULT_COMPRESSION_RATIO, CONTEXT_COMPACTION_DEFAULT_PRESERVE_RECENT, CONTEXT_COMPACTION_PROMPT_VERSION, CONTEXT_COMPACTION_TARGET_REDUCTION_PERCENT, } from "./context-compaction-types.js";
2
+ export { normalizeContextCompactionParameters } from "./context-compaction-strategy.js";
3
+ export { autoDetectContextCompactionQuery, prepareContextCompaction, } from "./context-transcript-analysis.js";
4
+ export { validateContextDeletionRequest } from "./context-deletion-application.js";
5
+ export { createContextDeletionTool } from "./context-deletion-tools.js";
6
+ export { buildContextCompactionPrompt } from "./context-compaction-prompt.js";
7
+ export { contextCompact } from "./context-compaction-runner.js";
1944
8
  //# sourceMappingURL=context-compaction.js.map