@bastani/atomic 0.9.13-alpha.1 → 0.9.13-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1048) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/README.md +35 -17
  3. package/dist/builtin/i-have-adhd/CHANGELOG.md +17 -0
  4. package/dist/builtin/i-have-adhd/LICENSE +21 -0
  5. package/dist/builtin/i-have-adhd/README.md +18 -0
  6. package/dist/builtin/i-have-adhd/index.ts +238 -0
  7. package/dist/builtin/i-have-adhd/package.json +56 -0
  8. package/dist/builtin/i-have-adhd/skills/i-have-adhd/SKILL.md +140 -0
  9. package/dist/builtin/intercom/CHANGELOG.md +19 -0
  10. package/dist/builtin/intercom/README.md +25 -4
  11. package/dist/builtin/intercom/broker/bounded-stderr-install.ts +18 -0
  12. package/dist/builtin/intercom/broker/bounded-stderr.ts +132 -0
  13. package/dist/builtin/intercom/broker/broker.ts +12 -23
  14. package/dist/builtin/intercom/broker/client.ts +70 -3
  15. package/dist/builtin/intercom/broker/paths.ts +9 -0
  16. package/dist/builtin/intercom/broker/presence-handler.ts +103 -0
  17. package/dist/builtin/intercom/broker/spawn.ts +128 -29
  18. package/dist/builtin/intercom/foreground-detach-handoff.ts +30 -14
  19. package/dist/builtin/intercom/group.ts +64 -25
  20. package/dist/builtin/intercom/index-heavy.ts +38 -5
  21. package/dist/builtin/intercom/index.ts +7 -3
  22. package/dist/builtin/intercom/intercom-tool.ts +82 -5
  23. package/dist/builtin/intercom/lazy-subagent-ack.ts +11 -6
  24. package/dist/builtin/intercom/package.json +2 -3
  25. package/dist/builtin/intercom/runtime-group.ts +13 -0
  26. package/dist/builtin/intercom/skills/intercom/SKILL.md +30 -2
  27. package/dist/builtin/intercom/subagent-relay.ts +32 -16
  28. package/dist/builtin/intercom/terminal-ordering-barrier.ts +21 -4
  29. package/dist/builtin/intercom/types.ts +3 -1
  30. package/dist/builtin/intercom/ui/compose.ts +8 -6
  31. package/dist/builtin/intercom/ui/session-list.ts +7 -5
  32. package/dist/builtin/mcp/CHANGELOG.md +13 -0
  33. package/dist/builtin/mcp/glimpse-ui.ts +2 -1
  34. package/dist/builtin/mcp/index.ts +1 -11
  35. package/dist/builtin/mcp/mcp-panel.ts +35 -34
  36. package/dist/builtin/mcp/mcp-setup-panel.ts +35 -33
  37. package/dist/builtin/mcp/npx-resolver.ts +3 -2
  38. package/dist/builtin/mcp/package.json +3 -3
  39. package/dist/builtin/mcp/sampling-handler.ts +5 -1
  40. package/dist/builtin/mcp/server-manager.ts +4 -7
  41. package/dist/builtin/subagents/CHANGELOG.md +33 -0
  42. package/dist/builtin/subagents/README.md +124 -323
  43. package/dist/builtin/subagents/agents/worker.md +1 -1
  44. package/dist/builtin/subagents/package.json +5 -5
  45. package/dist/builtin/subagents/prompts/parallel-context-build.md +2 -2
  46. package/dist/builtin/subagents/prompts/parallel-handoff-plan.md +4 -4
  47. package/dist/builtin/subagents/prompts/review-loop.md +1 -1
  48. package/dist/builtin/subagents/skills/subagent/SKILL.md +39 -102
  49. package/dist/builtin/subagents/src/agents/agent-discovery.ts +1 -29
  50. package/dist/builtin/subagents/src/agents/agent-loaders.ts +1 -40
  51. package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +6 -135
  52. package/dist/builtin/subagents/src/agents/agent-management.ts +52 -282
  53. package/dist/builtin/subagents/src/agents/agent-paths.ts +0 -22
  54. package/dist/builtin/subagents/src/agents/agent-types.ts +0 -40
  55. package/dist/builtin/subagents/src/agents/agents.ts +0 -3
  56. package/dist/builtin/subagents/src/agents/identity.ts +2 -4
  57. package/dist/builtin/subagents/src/agents/skills-paths.ts +8 -1
  58. package/dist/builtin/subagents/src/extension/doctor.ts +3 -23
  59. package/dist/builtin/subagents/src/extension/index.ts +9 -7
  60. package/dist/builtin/subagents/src/extension/prompt-guidance.ts +2 -2
  61. package/dist/builtin/subagents/src/extension/schemas.ts +1 -157
  62. package/dist/builtin/subagents/src/extension/startup-maintenance.ts +0 -2
  63. package/dist/builtin/subagents/src/extension/tool-description.ts +4 -13
  64. package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +6 -2
  65. package/dist/builtin/subagents/src/intercom/result-intercom.ts +20 -22
  66. package/dist/builtin/subagents/src/intercom/supervisor-authorization.ts +9 -2
  67. package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +97 -16
  68. package/dist/builtin/subagents/src/runs/background/completion-notification.ts +8 -3
  69. package/dist/builtin/subagents/src/runs/background/notify.ts +54 -18
  70. package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +0 -5
  71. package/dist/builtin/subagents/src/runs/foreground/execution.ts +1 -4
  72. package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +117 -15
  73. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +11 -40
  74. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +11 -22
  75. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +10 -173
  76. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +6 -4
  77. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +9 -2
  78. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +9 -2
  79. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +32 -12
  80. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +2 -6
  81. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +1 -14
  82. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +56 -31
  83. package/dist/builtin/subagents/src/runs/inprocess/background-single.ts +46 -30
  84. package/dist/builtin/subagents/src/runs/inprocess/background.ts +2 -1
  85. package/dist/builtin/subagents/src/runs/inprocess/runner.ts +343 -89
  86. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-projection.ts +0 -2
  87. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-sanitize.ts +1 -3
  88. package/dist/builtin/subagents/src/runs/shared/intercom-group.ts +23 -7
  89. package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +0 -86
  90. package/dist/builtin/subagents/src/runs/shared/worktree.ts +7 -2
  91. package/dist/builtin/subagents/src/shared/formatters.ts +2 -56
  92. package/dist/builtin/subagents/src/shared/settings.ts +14 -350
  93. package/dist/builtin/subagents/src/shared/types-async.ts +8 -31
  94. package/dist/builtin/subagents/src/shared/types-config.ts +20 -22
  95. package/dist/builtin/subagents/src/shared/types-depth.ts +30 -56
  96. package/dist/builtin/subagents/src/shared/types-results.ts +9 -58
  97. package/dist/builtin/subagents/src/shared/types-runtime.ts +0 -1
  98. package/dist/builtin/subagents/src/shared/utils.ts +5 -0
  99. package/dist/builtin/subagents/src/slash/bridge-settlement.ts +87 -0
  100. package/dist/builtin/subagents/src/slash/prompt-template-bridge.ts +47 -7
  101. package/dist/builtin/subagents/src/slash/slash-bridge.ts +27 -7
  102. package/dist/builtin/subagents/src/slash/slash-commands.ts +37 -82
  103. package/dist/builtin/subagents/src/slash/slash-live-state.ts +1 -92
  104. package/dist/builtin/subagents/src/tui/render-event-formatting.ts +2 -35
  105. package/dist/builtin/subagents/src/tui/render-progress.ts +89 -0
  106. package/dist/builtin/subagents/src/tui/render-result-compact.ts +43 -71
  107. package/dist/builtin/subagents/src/tui/render-result.ts +41 -90
  108. package/dist/builtin/subagents/src/tui/render-stable-output.ts +0 -5
  109. package/dist/builtin/subagents/src/tui/render-widget-graph.ts +6 -55
  110. package/dist/builtin/web-access/CHANGELOG.md +14 -0
  111. package/dist/builtin/web-access/chrome-cookies.ts +3 -2
  112. package/dist/builtin/web-access/github-api.ts +7 -6
  113. package/dist/builtin/web-access/github-extract.ts +2 -1
  114. package/dist/builtin/web-access/package.json +3 -3
  115. package/dist/builtin/web-access/subprocess.ts +3 -1
  116. package/dist/builtin/web-access/summary-review.ts +2 -2
  117. package/dist/builtin/web-access/web-search-features.ts +38 -22
  118. package/dist/builtin/web-access/web-search-summary.ts +2 -2
  119. package/dist/builtin/workflows/CHANGELOG.md +45 -0
  120. package/dist/builtin/workflows/README.md +41 -1
  121. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +3 -0
  122. package/dist/builtin/workflows/builtin/ralph-models.ts +25 -20
  123. package/dist/builtin/workflows/builtin/shared-prompts.ts +5 -2
  124. package/dist/builtin/workflows/package.json +2 -2
  125. package/dist/builtin/workflows/src/durable/backend.ts +18 -1
  126. package/dist/builtin/workflows/src/durable/completed-catalog-stage-groups.ts +60 -3
  127. package/dist/builtin/workflows/src/durable/completed-catalog.ts +67 -1
  128. package/dist/builtin/workflows/src/durable/completed-subtree.ts +22 -7
  129. package/dist/builtin/workflows/src/durable/dbos-metadata.ts +4 -0
  130. package/dist/builtin/workflows/src/durable/local-command.ts +2 -1
  131. package/dist/builtin/workflows/src/durable/types.ts +17 -1
  132. package/dist/builtin/workflows/src/durable/workflow-child-result.ts +3 -1
  133. package/dist/builtin/workflows/src/engine/primitives/workflow.ts +1 -1
  134. package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +10 -2
  135. package/dist/builtin/workflows/src/engine/run-durable-topology.ts +9 -2
  136. package/dist/builtin/workflows/src/extension/atomic-stage-session.ts +7 -1
  137. package/dist/builtin/workflows/src/extension/companions.ts +1 -1
  138. package/dist/builtin/workflows/src/extension/index.bundle.mjs +947 -447
  139. package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +31 -3
  140. package/dist/builtin/workflows/src/extension/mcp.ts +13 -2
  141. package/dist/builtin/workflows/src/extension/render-result.ts +1 -0
  142. package/dist/builtin/workflows/src/extension/ui-surface.ts +7 -20
  143. package/dist/builtin/workflows/src/extension/wiring.ts +33 -6
  144. package/dist/builtin/workflows/src/extension/workflow-ports.ts +14 -6
  145. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +11 -6
  146. package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +8 -0
  147. package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +2 -0
  148. package/dist/builtin/workflows/src/intercom/intercom-routing.ts +12 -6
  149. package/dist/builtin/workflows/src/intercom/result-intercom.ts +35 -4
  150. package/dist/builtin/workflows/src/runs/background/status.ts +15 -0
  151. package/dist/builtin/workflows/src/runs/foreground/executor-abort.ts +11 -3
  152. package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +2 -1
  153. package/dist/builtin/workflows/src/runs/foreground/executor-exit-manager.ts +26 -2
  154. package/dist/builtin/workflows/src/runs/foreground/executor-run-finalizers.ts +3 -2
  155. package/dist/builtin/workflows/src/runs/shared/worktree-git-runner.ts +5 -2
  156. package/dist/builtin/workflows/src/runs/shared/worktree-setup.ts +2 -0
  157. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +5 -3
  158. package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +5 -3
  159. package/dist/builtin/workflows/src/shared/graph-store-snapshot.ts +34 -2
  160. package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +23 -6
  161. package/dist/builtin/workflows/src/shared/stage-ui-broker.ts +10 -4
  162. package/dist/builtin/workflows/src/shared/store-public-types.ts +4 -2
  163. package/dist/builtin/workflows/src/shared/store-types.ts +1 -1
  164. package/dist/builtin/workflows/src/shared/workflow-artifact-env.ts +21 -0
  165. package/dist/builtin/workflows/src/shared/workflow-artifacts.ts +2 -5
  166. package/dist/builtin/workflows/src/tui/dispatch-confirm.ts +37 -2
  167. package/dist/builtin/workflows/src/tui/graph-view-constants.ts +0 -15
  168. package/dist/builtin/workflows/src/tui/graph-view-graph-render.ts +38 -47
  169. package/dist/builtin/workflows/src/tui/graph-view-input.ts +48 -45
  170. package/dist/builtin/workflows/src/tui/graph-view-layout.ts +266 -0
  171. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +1 -86
  172. package/dist/builtin/workflows/src/tui/graph-view-render.ts +209 -91
  173. package/dist/builtin/workflows/src/tui/graph-view-state.ts +5 -7
  174. package/dist/builtin/workflows/src/tui/graph-view-types.ts +13 -7
  175. package/dist/builtin/workflows/src/tui/inline-form-editor.ts +8 -6
  176. package/dist/builtin/workflows/src/tui/inline-form-overlay.ts +2 -1
  177. package/dist/builtin/workflows/src/tui/inputs-overlay.ts +7 -4
  178. package/dist/builtin/workflows/src/tui/inputs-picker-input.ts +66 -0
  179. package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +1 -0
  180. package/dist/builtin/workflows/src/tui/node-card.ts +1 -1
  181. package/dist/builtin/workflows/src/tui/overlay-adapter.ts +18 -46
  182. package/dist/builtin/workflows/src/tui/overlay-terminal-modes.ts +15 -26
  183. package/dist/builtin/workflows/src/tui/session-overlays.ts +5 -2
  184. package/dist/builtin/workflows/src/tui/session-picker.ts +27 -0
  185. package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +5 -14
  186. package/dist/builtin/workflows/src/tui/stage-chat-view-input.ts +8 -7
  187. package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +12 -3
  188. package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +1 -11
  189. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +0 -8
  190. package/dist/builtin/workflows/src/tui/status-list.ts +1 -0
  191. package/dist/builtin/workflows/src/tui/store-widget-installer.ts +2 -6
  192. package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +0 -15
  193. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +2 -26
  194. package/dist/builtin/workflows/src/tui/workflow-status.ts +3 -3
  195. package/dist/bun/split-loader.js +2 -0
  196. package/dist/bun/split-loader.js.map +1 -1
  197. package/dist/cli/args.d.ts.map +1 -1
  198. package/dist/cli/args.js +6 -2
  199. package/dist/cli/args.js.map +1 -1
  200. package/dist/cli/auth-check.d.ts +35 -0
  201. package/dist/cli/auth-check.d.ts.map +1 -0
  202. package/dist/cli/auth-check.js +100 -0
  203. package/dist/cli/auth-check.js.map +1 -0
  204. package/dist/cli/auth-command.d.ts +27 -0
  205. package/dist/cli/auth-command.d.ts.map +1 -0
  206. package/dist/cli/auth-command.js +150 -0
  207. package/dist/cli/auth-command.js.map +1 -0
  208. package/dist/cli/config-selector.js +2 -2
  209. package/dist/cli/config-selector.js.map +1 -1
  210. package/dist/cli/credential-print.d.ts +18 -23
  211. package/dist/cli/credential-print.d.ts.map +1 -1
  212. package/dist/cli/credential-print.js +42 -88
  213. package/dist/cli/credential-print.js.map +1 -1
  214. package/dist/cli/experimental/auth.d.ts +16 -0
  215. package/dist/cli/experimental/auth.d.ts.map +1 -0
  216. package/dist/cli/experimental/auth.js +13 -0
  217. package/dist/cli/experimental/auth.js.map +1 -0
  218. package/dist/cli/experimental/cli.d.ts +6 -0
  219. package/dist/cli/experimental/cli.d.ts.map +1 -0
  220. package/dist/cli/experimental/cli.js +5 -0
  221. package/dist/cli/experimental/cli.js.map +1 -0
  222. package/dist/cli/experimental/command-options.d.ts +17 -0
  223. package/dist/cli/experimental/command-options.d.ts.map +1 -0
  224. package/dist/cli/experimental/command-options.js +35 -0
  225. package/dist/cli/experimental/command-options.js.map +1 -0
  226. package/dist/cli/experimental/command.d.ts +63 -0
  227. package/dist/cli/experimental/command.d.ts.map +1 -0
  228. package/dist/cli/experimental/command.js +127 -0
  229. package/dist/cli/experimental/command.js.map +1 -0
  230. package/dist/cli/experimental/commands/client.d.ts +13 -0
  231. package/dist/cli/experimental/commands/client.d.ts.map +1 -0
  232. package/dist/cli/experimental/commands/client.js +25 -0
  233. package/dist/cli/experimental/commands/client.js.map +1 -0
  234. package/dist/cli/experimental/commands/pi.d.ts +15 -0
  235. package/dist/cli/experimental/commands/pi.d.ts.map +1 -0
  236. package/dist/cli/experimental/commands/pi.js +28 -0
  237. package/dist/cli/experimental/commands/pi.js.map +1 -0
  238. package/dist/cli/experimental/commands/server.d.ts +13 -0
  239. package/dist/cli/experimental/commands/server.d.ts.map +1 -0
  240. package/dist/cli/experimental/commands/server.js +25 -0
  241. package/dist/cli/experimental/commands/server.js.map +1 -0
  242. package/dist/cli/experimental/transport-address.d.ts +10 -0
  243. package/dist/cli/experimental/transport-address.d.ts.map +1 -0
  244. package/dist/cli/experimental/transport-address.js +38 -0
  245. package/dist/cli/experimental/transport-address.js.map +1 -0
  246. package/dist/cli/session-picker.js +2 -2
  247. package/dist/cli/session-picker.js.map +1 -1
  248. package/dist/cli/startup-ui.d.ts.map +1 -1
  249. package/dist/cli/startup-ui.js +4 -10
  250. package/dist/cli/startup-ui.js.map +1 -1
  251. package/dist/cli.js +2 -0
  252. package/dist/cli.js.map +1 -1
  253. package/dist/client/index.d.ts +3 -0
  254. package/dist/client/index.d.ts.map +1 -0
  255. package/dist/client/index.js +3 -0
  256. package/dist/client/index.js.map +1 -0
  257. package/dist/client/remote-session.d.ts +64 -0
  258. package/dist/client/remote-session.d.ts.map +1 -0
  259. package/dist/client/remote-session.js +351 -0
  260. package/dist/client/remote-session.js.map +1 -0
  261. package/dist/client/transcript.d.ts +12 -0
  262. package/dist/client/transcript.d.ts.map +1 -0
  263. package/dist/client/transcript.js +98 -0
  264. package/dist/client/transcript.js.map +1 -0
  265. package/dist/core/agent-session-auto-compaction.d.ts +17 -13
  266. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  267. package/dist/core/agent-session-auto-compaction.js +146 -64
  268. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  269. package/dist/core/agent-session-bash.d.ts.map +1 -1
  270. package/dist/core/agent-session-bash.js +2 -0
  271. package/dist/core/agent-session-bash.js.map +1 -1
  272. package/dist/core/agent-session-compaction.d.ts +3 -6
  273. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  274. package/dist/core/agent-session-compaction.js +64 -28
  275. package/dist/core/agent-session-compaction.js.map +1 -1
  276. package/dist/core/agent-session-events.d.ts +1 -11
  277. package/dist/core/agent-session-events.d.ts.map +1 -1
  278. package/dist/core/agent-session-events.js +15 -23
  279. package/dist/core/agent-session-events.js.map +1 -1
  280. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  281. package/dist/core/agent-session-extension-bindings.js +4 -2
  282. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  283. package/dist/core/agent-session-methods.d.ts +6 -2
  284. package/dist/core/agent-session-methods.d.ts.map +1 -1
  285. package/dist/core/agent-session-methods.js.map +1 -1
  286. package/dist/core/agent-session-models.d.ts +1 -0
  287. package/dist/core/agent-session-models.d.ts.map +1 -1
  288. package/dist/core/agent-session-models.js +11 -4
  289. package/dist/core/agent-session-models.js.map +1 -1
  290. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
  291. package/dist/core/agent-session-post-tool-compaction.js +22 -6
  292. package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
  293. package/dist/core/agent-session-runtime-auth.d.ts.map +1 -1
  294. package/dist/core/agent-session-runtime-auth.js +3 -0
  295. package/dist/core/agent-session-runtime-auth.js.map +1 -1
  296. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  297. package/dist/core/agent-session-tool-hooks.js +25 -14
  298. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  299. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  300. package/dist/core/agent-session-tool-registry.js +4 -0
  301. package/dist/core/agent-session-tool-registry.js.map +1 -1
  302. package/dist/core/agent-session-types.d.ts +2 -0
  303. package/dist/core/agent-session-types.d.ts.map +1 -1
  304. package/dist/core/agent-session-types.js.map +1 -1
  305. package/dist/core/agent-session.d.ts +6 -0
  306. package/dist/core/agent-session.d.ts.map +1 -1
  307. package/dist/core/agent-session.js +30 -0
  308. package/dist/core/agent-session.js.map +1 -1
  309. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  310. package/dist/core/atomic-guide-command.js +2 -3
  311. package/dist/core/atomic-guide-command.js.map +1 -1
  312. package/dist/core/auth-storage.d.ts +18 -1
  313. package/dist/core/auth-storage.d.ts.map +1 -1
  314. package/dist/core/auth-storage.js +83 -0
  315. package/dist/core/auth-storage.js.map +1 -1
  316. package/dist/core/bash-executor.d.ts +5 -0
  317. package/dist/core/bash-executor.d.ts.map +1 -1
  318. package/dist/core/bash-executor.js +43 -19
  319. package/dist/core/bash-executor.js.map +1 -1
  320. package/dist/core/builtin-packages.d.ts.map +1 -1
  321. package/dist/core/builtin-packages.js +6 -0
  322. package/dist/core/builtin-packages.js.map +1 -1
  323. package/dist/core/codex-fast-mode.d.ts.map +1 -1
  324. package/dist/core/codex-fast-mode.js +8 -3
  325. package/dist/core/codex-fast-mode.js.map +1 -1
  326. package/dist/core/exec.d.ts.map +1 -1
  327. package/dist/core/exec.js +4 -3
  328. package/dist/core/exec.js.map +1 -1
  329. package/dist/core/extensions/agent-events.d.ts +0 -1
  330. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  331. package/dist/core/extensions/agent-events.js.map +1 -1
  332. package/dist/core/extensions/api-types.d.ts +5 -3
  333. package/dist/core/extensions/api-types.d.ts.map +1 -1
  334. package/dist/core/extensions/api-types.js.map +1 -1
  335. package/dist/core/extensions/context-types.d.ts +15 -0
  336. package/dist/core/extensions/context-types.d.ts.map +1 -1
  337. package/dist/core/extensions/context-types.js.map +1 -1
  338. package/dist/core/extensions/event-results.d.ts +5 -0
  339. package/dist/core/extensions/event-results.d.ts.map +1 -1
  340. package/dist/core/extensions/event-results.js.map +1 -1
  341. package/dist/core/extensions/index.d.ts +2 -1
  342. package/dist/core/extensions/index.d.ts.map +1 -1
  343. package/dist/core/extensions/index.js +1 -0
  344. package/dist/core/extensions/index.js.map +1 -1
  345. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  346. package/dist/core/extensions/loader-api.js +14 -1
  347. package/dist/core/extensions/loader-api.js.map +1 -1
  348. package/dist/core/extensions/loader-discovery.d.ts.map +1 -1
  349. package/dist/core/extensions/loader-discovery.js +3 -23
  350. package/dist/core/extensions/loader-discovery.js.map +1 -1
  351. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  352. package/dist/core/extensions/loader-runtime.js +20 -3
  353. package/dist/core/extensions/loader-runtime.js.map +1 -1
  354. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  355. package/dist/core/extensions/loader-virtual-modules.js +7 -1
  356. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  357. package/dist/core/extensions/message-types.d.ts +6 -0
  358. package/dist/core/extensions/message-types.d.ts.map +1 -1
  359. package/dist/core/extensions/message-types.js.map +1 -1
  360. package/dist/core/extensions/provider-types.d.ts +9 -3
  361. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  362. package/dist/core/extensions/provider-types.js.map +1 -1
  363. package/dist/core/extensions/runner-registries.d.ts +2 -1
  364. package/dist/core/extensions/runner-registries.d.ts.map +1 -1
  365. package/dist/core/extensions/runner-registries.js +3 -0
  366. package/dist/core/extensions/runner-registries.js.map +1 -1
  367. package/dist/core/extensions/runner-ui.d.ts.map +1 -1
  368. package/dist/core/extensions/runner-ui.js +1 -0
  369. package/dist/core/extensions/runner-ui.js.map +1 -1
  370. package/dist/core/extensions/runner.d.ts +2 -1
  371. package/dist/core/extensions/runner.d.ts.map +1 -1
  372. package/dist/core/extensions/runner.js +6 -2
  373. package/dist/core/extensions/runner.js.map +1 -1
  374. package/dist/core/extensions/runtime-types.d.ts +4 -1
  375. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  376. package/dist/core/extensions/runtime-types.js.map +1 -1
  377. package/dist/core/extensions/stale-context.d.ts +5 -0
  378. package/dist/core/extensions/stale-context.d.ts.map +1 -0
  379. package/dist/core/extensions/stale-context.js +11 -0
  380. package/dist/core/extensions/stale-context.js.map +1 -0
  381. package/dist/core/extensions/ui-types.d.ts +14 -11
  382. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  383. package/dist/core/extensions/ui-types.js.map +1 -1
  384. package/dist/core/footer-data-provider.d.ts.map +1 -1
  385. package/dist/core/footer-data-provider.js +3 -2
  386. package/dist/core/footer-data-provider.js.map +1 -1
  387. package/dist/core/index.d.ts +1 -1
  388. package/dist/core/index.d.ts.map +1 -1
  389. package/dist/core/index.js.map +1 -1
  390. package/dist/core/intercom-runtime-group.d.ts +13 -0
  391. package/dist/core/intercom-runtime-group.d.ts.map +1 -0
  392. package/dist/core/intercom-runtime-group.js +23 -0
  393. package/dist/core/intercom-runtime-group.js.map +1 -0
  394. package/dist/core/keybindings.d.ts +44 -4
  395. package/dist/core/keybindings.d.ts.map +1 -1
  396. package/dist/core/model-config.d.ts +39 -5
  397. package/dist/core/model-config.d.ts.map +1 -1
  398. package/dist/core/model-config.js +6 -0
  399. package/dist/core/model-config.js.map +1 -1
  400. package/dist/core/model-registry.d.ts +12 -5
  401. package/dist/core/model-registry.d.ts.map +1 -1
  402. package/dist/core/model-registry.js +20 -12
  403. package/dist/core/model-registry.js.map +1 -1
  404. package/dist/core/model-resolver-cli.d.ts.map +1 -1
  405. package/dist/core/model-resolver-cli.js +46 -14
  406. package/dist/core/model-resolver-cli.js.map +1 -1
  407. package/dist/core/model-resolver-defaults.d.ts.map +1 -1
  408. package/dist/core/model-resolver-defaults.js +2 -0
  409. package/dist/core/model-resolver-defaults.js.map +1 -1
  410. package/dist/core/model-resolver-scope.d.ts +2 -0
  411. package/dist/core/model-resolver-scope.d.ts.map +1 -1
  412. package/dist/core/model-resolver-scope.js +12 -9
  413. package/dist/core/model-resolver-scope.js.map +1 -1
  414. package/dist/core/model-resolver.d.ts +1 -1
  415. package/dist/core/model-resolver.d.ts.map +1 -1
  416. package/dist/core/model-resolver.js +1 -1
  417. package/dist/core/model-resolver.js.map +1 -1
  418. package/dist/core/model-runtime-snapshot.d.ts +10 -0
  419. package/dist/core/model-runtime-snapshot.d.ts.map +1 -1
  420. package/dist/core/model-runtime-snapshot.js +14 -1
  421. package/dist/core/model-runtime-snapshot.js.map +1 -1
  422. package/dist/core/model-runtime-streaming.d.ts +3 -1
  423. package/dist/core/model-runtime-streaming.d.ts.map +1 -1
  424. package/dist/core/model-runtime-streaming.js +16 -0
  425. package/dist/core/model-runtime-streaming.js.map +1 -1
  426. package/dist/core/model-runtime-types.d.ts +2 -0
  427. package/dist/core/model-runtime-types.d.ts.map +1 -1
  428. package/dist/core/model-runtime-types.js.map +1 -1
  429. package/dist/core/model-runtime.d.ts +37 -10
  430. package/dist/core/model-runtime.d.ts.map +1 -1
  431. package/dist/core/model-runtime.js +312 -113
  432. package/dist/core/model-runtime.js.map +1 -1
  433. package/dist/core/oauth-login.d.ts.map +1 -1
  434. package/dist/core/oauth-login.js +2 -1
  435. package/dist/core/oauth-login.js.map +1 -1
  436. package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -1
  437. package/dist/core/openai-responses-payload-sanitizer.js +18 -2
  438. package/dist/core/openai-responses-payload-sanitizer.js.map +1 -1
  439. package/dist/core/package-manager-git.d.ts.map +1 -1
  440. package/dist/core/package-manager-git.js +56 -10
  441. package/dist/core/package-manager-git.js.map +1 -1
  442. package/dist/core/package-manager-manifest.d.ts +1 -1
  443. package/dist/core/package-manager-manifest.d.ts.map +1 -1
  444. package/dist/core/package-manager-manifest.js +19 -9
  445. package/dist/core/package-manager-manifest.js.map +1 -1
  446. package/dist/core/package-manager-resource-collector.js.map +1 -1
  447. package/dist/core/package-manager-resource-files.d.ts.map +1 -1
  448. package/dist/core/package-manager-resource-files.js +1 -2
  449. package/dist/core/package-manager-resource-files.js.map +1 -1
  450. package/dist/core/provider-composer-internal.d.ts +10 -2
  451. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  452. package/dist/core/provider-composer-internal.js +7 -3
  453. package/dist/core/provider-composer-internal.js.map +1 -1
  454. package/dist/core/provider-composer.d.ts.map +1 -1
  455. package/dist/core/provider-composer.js +19 -12
  456. package/dist/core/provider-composer.js.map +1 -1
  457. package/dist/core/provider-display-names.d.ts.map +1 -1
  458. package/dist/core/provider-display-names.js +2 -0
  459. package/dist/core/provider-display-names.js.map +1 -1
  460. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  461. package/dist/core/remote-catalog-provider.js +77 -67
  462. package/dist/core/remote-catalog-provider.js.map +1 -1
  463. package/dist/core/resolve-config-value.d.ts.map +1 -1
  464. package/dist/core/resolve-config-value.js +3 -0
  465. package/dist/core/resolve-config-value.js.map +1 -1
  466. package/dist/core/resource-loader-context-files.d.ts.map +1 -1
  467. package/dist/core/resource-loader-context-files.js +13 -5
  468. package/dist/core/resource-loader-context-files.js.map +1 -1
  469. package/dist/core/runtime-credentials.d.ts +5 -5
  470. package/dist/core/runtime-credentials.d.ts.map +1 -1
  471. package/dist/core/runtime-credentials.js +8 -8
  472. package/dist/core/runtime-credentials.js.map +1 -1
  473. package/dist/core/session-manager-list.d.ts.map +1 -1
  474. package/dist/core/session-manager-list.js +3 -1
  475. package/dist/core/session-manager-list.js.map +1 -1
  476. package/dist/core/settings-manager-ui-accessors.d.ts +8 -1
  477. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  478. package/dist/core/settings-manager-ui-accessors.js +31 -0
  479. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  480. package/dist/core/settings-manager.d.ts +2 -1
  481. package/dist/core/settings-manager.d.ts.map +1 -1
  482. package/dist/core/settings-manager.js.map +1 -1
  483. package/dist/core/settings-merge.d.ts.map +1 -1
  484. package/dist/core/settings-merge.js +13 -16
  485. package/dist/core/settings-merge.js.map +1 -1
  486. package/dist/core/settings-types.d.ts +5 -0
  487. package/dist/core/settings-types.d.ts.map +1 -1
  488. package/dist/core/settings-types.js.map +1 -1
  489. package/dist/core/slash-commands.d.ts.map +1 -1
  490. package/dist/core/slash-commands.js +0 -2
  491. package/dist/core/slash-commands.js.map +1 -1
  492. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts +2 -2
  493. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts.map +1 -1
  494. package/dist/core/tools/ask-user-question/state/questionnaire-session.js +39 -2
  495. package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
  496. package/dist/core/tools/bash-async-execution.d.ts +2 -0
  497. package/dist/core/tools/bash-async-execution.d.ts.map +1 -1
  498. package/dist/core/tools/bash-async-execution.js +4 -1
  499. package/dist/core/tools/bash-async-execution.js.map +1 -1
  500. package/dist/core/tools/bash-async-output.d.ts +1 -0
  501. package/dist/core/tools/bash-async-output.d.ts.map +1 -1
  502. package/dist/core/tools/bash-async-output.js +62 -27
  503. package/dist/core/tools/bash-async-output.js.map +1 -1
  504. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  505. package/dist/core/tools/bash-pty-native.js +2 -1
  506. package/dist/core/tools/bash-pty-native.js.map +1 -1
  507. package/dist/core/tools/bash.d.ts +9 -0
  508. package/dist/core/tools/bash.d.ts.map +1 -1
  509. package/dist/core/tools/bash.js +34 -16
  510. package/dist/core/tools/bash.js.map +1 -1
  511. package/dist/core/tools/directory-tree.d.ts +11 -0
  512. package/dist/core/tools/directory-tree.d.ts.map +1 -1
  513. package/dist/core/tools/directory-tree.js +26 -0
  514. package/dist/core/tools/directory-tree.js.map +1 -1
  515. package/dist/core/tools/edit.d.ts +4 -0
  516. package/dist/core/tools/edit.d.ts.map +1 -1
  517. package/dist/core/tools/edit.js +12 -8
  518. package/dist/core/tools/edit.js.map +1 -1
  519. package/dist/core/tools/errno.d.ts +25 -0
  520. package/dist/core/tools/errno.d.ts.map +1 -0
  521. package/dist/core/tools/errno.js +29 -0
  522. package/dist/core/tools/errno.js.map +1 -0
  523. package/dist/core/tools/find.d.ts +8 -1
  524. package/dist/core/tools/find.d.ts.map +1 -1
  525. package/dist/core/tools/find.js +20 -15
  526. package/dist/core/tools/find.js.map +1 -1
  527. package/dist/core/tools/grep.d.ts.map +1 -1
  528. package/dist/core/tools/grep.js +5 -1
  529. package/dist/core/tools/grep.js.map +1 -1
  530. package/dist/core/tools/index.d.ts +7 -7
  531. package/dist/core/tools/index.d.ts.map +1 -1
  532. package/dist/core/tools/index.js +7 -7
  533. package/dist/core/tools/index.js.map +1 -1
  534. package/dist/core/tools/ls.d.ts +4 -0
  535. package/dist/core/tools/ls.d.ts.map +1 -1
  536. package/dist/core/tools/ls.js +5 -1
  537. package/dist/core/tools/ls.js.map +1 -1
  538. package/dist/core/tools/output-accumulator.d.ts +8 -1
  539. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  540. package/dist/core/tools/output-accumulator.js +50 -28
  541. package/dist/core/tools/output-accumulator.js.map +1 -1
  542. package/dist/core/tools/oversized-tool-result.d.ts.map +1 -1
  543. package/dist/core/tools/oversized-tool-result.js +129 -22
  544. package/dist/core/tools/oversized-tool-result.js.map +1 -1
  545. package/dist/core/tools/persisted-output-file.d.ts +80 -0
  546. package/dist/core/tools/persisted-output-file.d.ts.map +1 -0
  547. package/dist/core/tools/persisted-output-file.js +284 -0
  548. package/dist/core/tools/persisted-output-file.js.map +1 -0
  549. package/dist/core/tools/read.d.ts +10 -0
  550. package/dist/core/tools/read.d.ts.map +1 -1
  551. package/dist/core/tools/read.js +20 -8
  552. package/dist/core/tools/read.js.map +1 -1
  553. package/dist/core/tools/search.d.ts +4 -0
  554. package/dist/core/tools/search.d.ts.map +1 -1
  555. package/dist/core/tools/search.js +5 -1
  556. package/dist/core/tools/search.js.map +1 -1
  557. package/dist/core/tools/session-temp-cleanup.d.ts +133 -0
  558. package/dist/core/tools/session-temp-cleanup.d.ts.map +1 -0
  559. package/dist/core/tools/session-temp-cleanup.js +669 -0
  560. package/dist/core/tools/session-temp-cleanup.js.map +1 -0
  561. package/dist/core/tools/session-temp-dir.d.ts +116 -0
  562. package/dist/core/tools/session-temp-dir.d.ts.map +1 -0
  563. package/dist/core/tools/session-temp-dir.js +409 -0
  564. package/dist/core/tools/session-temp-dir.js.map +1 -0
  565. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  566. package/dist/core/tools/tool-definition-wrapper.js +2 -0
  567. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  568. package/dist/core/tools/tool-limits.d.ts +11 -0
  569. package/dist/core/tools/tool-limits.d.ts.map +1 -1
  570. package/dist/core/tools/tool-limits.js +11 -0
  571. package/dist/core/tools/tool-limits.js.map +1 -1
  572. package/dist/core/tools/windows-directory-security.d.ts +82 -0
  573. package/dist/core/tools/windows-directory-security.d.ts.map +1 -0
  574. package/dist/core/tools/windows-directory-security.js +238 -0
  575. package/dist/core/tools/windows-directory-security.js.map +1 -0
  576. package/dist/core/tools/write.d.ts +4 -0
  577. package/dist/core/tools/write.d.ts.map +1 -1
  578. package/dist/core/tools/write.js +8 -4
  579. package/dist/core/tools/write.js.map +1 -1
  580. package/dist/core/trust-manager.js +1 -1
  581. package/dist/core/trust-manager.js.map +1 -1
  582. package/dist/extensions/llama/huggingface-ui.d.ts +1 -1
  583. package/dist/extensions/llama/huggingface-ui.d.ts.map +1 -1
  584. package/dist/extensions/llama/huggingface-ui.js +6 -5
  585. package/dist/extensions/llama/huggingface-ui.js.map +1 -1
  586. package/dist/extensions/llama/index.d.ts.map +1 -1
  587. package/dist/extensions/llama/index.js +11 -2
  588. package/dist/extensions/llama/index.js.map +1 -1
  589. package/dist/extensions/llama/provider.d.ts.map +1 -1
  590. package/dist/extensions/llama/provider.js +24 -8
  591. package/dist/extensions/llama/provider.js.map +1 -1
  592. package/dist/extensions/llama/ui.d.ts.map +1 -1
  593. package/dist/extensions/llama/ui.js +5 -2
  594. package/dist/extensions/llama/ui.js.map +1 -1
  595. package/dist/index-extensions.d.ts +2 -2
  596. package/dist/index-extensions.d.ts.map +1 -1
  597. package/dist/index-extensions.js +1 -1
  598. package/dist/index-extensions.js.map +1 -1
  599. package/dist/index.d.ts +5 -2
  600. package/dist/index.d.ts.map +1 -1
  601. package/dist/index.js +6 -2
  602. package/dist/index.js.map +1 -1
  603. package/dist/main-runtime-api-key.d.ts +2 -2
  604. package/dist/main-runtime-api-key.d.ts.map +1 -1
  605. package/dist/main-runtime-api-key.js +7 -2
  606. package/dist/main-runtime-api-key.js.map +1 -1
  607. package/dist/main-session.js +2 -2
  608. package/dist/main-session.js.map +1 -1
  609. package/dist/main.d.ts.map +1 -1
  610. package/dist/main.js +130 -26
  611. package/dist/main.js.map +1 -1
  612. package/dist/modes/index.d.ts +1 -0
  613. package/dist/modes/index.d.ts.map +1 -1
  614. package/dist/modes/index.js.map +1 -1
  615. package/dist/modes/interactive/components/assistant-message.d.ts +6 -2
  616. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  617. package/dist/modes/interactive/components/assistant-message.js +18 -5
  618. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  619. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  620. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  621. package/dist/modes/interactive/components/bordered-loader.js +5 -4
  622. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  623. package/dist/modes/interactive/components/branch-summary-message.d.ts +2 -1
  624. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  625. package/dist/modes/interactive/components/branch-summary-message.js +3 -2
  626. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  627. package/dist/modes/interactive/components/chat-message-renderer.d.ts +17 -7
  628. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  629. package/dist/modes/interactive/components/chat-message-renderer.js +35 -69
  630. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  631. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  632. package/dist/modes/interactive/components/chat-session-host-actions.js +11 -3
  633. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  634. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  635. package/dist/modes/interactive/components/chat-session-host-events.js +25 -15
  636. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  637. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
  638. package/dist/modes/interactive/components/chat-session-host-rendering.js +9 -4
  639. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  640. package/dist/modes/interactive/components/chat-session-host-state.d.ts +2 -0
  641. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  642. package/dist/modes/interactive/components/chat-session-host-state.js +2 -0
  643. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  644. package/dist/modes/interactive/components/chat-session-host.d.ts +9 -0
  645. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  646. package/dist/modes/interactive/components/chat-session-host.js +14 -0
  647. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  648. package/dist/modes/interactive/components/chat-transcript.d.ts +32 -0
  649. package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
  650. package/dist/modes/interactive/components/chat-transcript.js +173 -5
  651. package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
  652. package/dist/modes/interactive/components/config-selector-list.d.ts +1 -1
  653. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
  654. package/dist/modes/interactive/components/config-selector-list.js +9 -8
  655. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  656. package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
  657. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  658. package/dist/modes/interactive/components/custom-editor.js +32 -10
  659. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  660. package/dist/modes/interactive/components/custom-message.d.ts +2 -1
  661. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  662. package/dist/modes/interactive/components/custom-message.js +3 -2
  663. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  664. package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
  665. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  666. package/dist/modes/interactive/components/extension-editor.js +3 -2
  667. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  668. package/dist/modes/interactive/components/extension-input.d.ts +1 -1
  669. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  670. package/dist/modes/interactive/components/extension-input.js +1 -0
  671. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  672. package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
  673. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  674. package/dist/modes/interactive/components/extension-selector.js +4 -0
  675. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  676. package/dist/modes/interactive/components/fast-mode-selector.d.ts +1 -1
  677. package/dist/modes/interactive/components/fast-mode-selector.d.ts.map +1 -1
  678. package/dist/modes/interactive/components/fast-mode-selector.js +7 -5
  679. package/dist/modes/interactive/components/fast-mode-selector.js.map +1 -1
  680. package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
  681. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  682. package/dist/modes/interactive/components/first-time-setup.js +3 -0
  683. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  684. package/dist/modes/interactive/components/footer.js +1 -1
  685. package/dist/modes/interactive/components/footer.js.map +1 -1
  686. package/dist/modes/interactive/components/host-input-form.d.ts +1 -1
  687. package/dist/modes/interactive/components/host-input-form.d.ts.map +1 -1
  688. package/dist/modes/interactive/components/host-input-form.js +6 -5
  689. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  690. package/dist/modes/interactive/components/index.d.ts +1 -1
  691. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  692. package/dist/modes/interactive/components/index.js.map +1 -1
  693. package/dist/modes/interactive/components/login-dialog.d.ts +1 -1
  694. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  695. package/dist/modes/interactive/components/login-dialog.js +2 -1
  696. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  697. package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
  698. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  699. package/dist/modes/interactive/components/markdown-transform.js +19 -0
  700. package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
  701. package/dist/modes/interactive/components/mermaid.d.ts +11 -0
  702. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  703. package/dist/modes/interactive/components/mermaid.js +81 -0
  704. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  705. package/dist/modes/interactive/components/model-selector.d.ts +2 -2
  706. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  707. package/dist/modes/interactive/components/model-selector.js +9 -6
  708. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  709. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  710. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  711. package/dist/modes/interactive/components/oauth-selector.js +3 -2
  712. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  713. package/dist/modes/interactive/components/scoped-models-selector.d.ts +6 -2
  714. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  715. package/dist/modes/interactive/components/scoped-models-selector.js +39 -13
  716. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  717. package/dist/modes/interactive/components/session-selector-delete.d.ts.map +1 -1
  718. package/dist/modes/interactive/components/session-selector-delete.js +2 -1
  719. package/dist/modes/interactive/components/session-selector-delete.js.map +1 -1
  720. package/dist/modes/interactive/components/session-selector-list.d.ts +1 -1
  721. package/dist/modes/interactive/components/session-selector-list.d.ts.map +1 -1
  722. package/dist/modes/interactive/components/session-selector-list.js +12 -11
  723. package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
  724. package/dist/modes/interactive/components/session-selector.d.ts +1 -1
  725. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  726. package/dist/modes/interactive/components/session-selector.js +3 -3
  727. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  728. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  729. package/dist/modes/interactive/components/settings-selector-handlers.js +9 -0
  730. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  731. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  732. package/dist/modes/interactive/components/settings-selector-items.js +21 -0
  733. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  734. package/dist/modes/interactive/components/settings-selector-submenus.d.ts +3 -3
  735. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
  736. package/dist/modes/interactive/components/settings-selector-submenus.js +6 -1
  737. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  738. package/dist/modes/interactive/components/settings-selector-types.d.ts +8 -1
  739. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  740. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  741. package/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -1
  742. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  743. package/dist/modes/interactive/components/skill-invocation-message.js +3 -2
  744. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  745. package/dist/modes/interactive/components/tool-execution.d.ts +2 -0
  746. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  747. package/dist/modes/interactive/components/tool-execution.js +50 -27
  748. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  749. package/dist/modes/interactive/components/tree-selector-component.d.ts +1 -1
  750. package/dist/modes/interactive/components/tree-selector-component.d.ts.map +1 -1
  751. package/dist/modes/interactive/components/tree-selector-component.js +2 -3
  752. package/dist/modes/interactive/components/tree-selector-component.js.map +1 -1
  753. package/dist/modes/interactive/components/tree-selector-help.d.ts +1 -1
  754. package/dist/modes/interactive/components/tree-selector-help.d.ts.map +1 -1
  755. package/dist/modes/interactive/components/tree-selector-help.js +3 -1
  756. package/dist/modes/interactive/components/tree-selector-help.js.map +1 -1
  757. package/dist/modes/interactive/components/tree-selector-label-input.d.ts +1 -1
  758. package/dist/modes/interactive/components/tree-selector-label-input.d.ts.map +1 -1
  759. package/dist/modes/interactive/components/tree-selector-label-input.js +1 -0
  760. package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -1
  761. package/dist/modes/interactive/components/tree-selector-list.d.ts +1 -1
  762. package/dist/modes/interactive/components/tree-selector-list.d.ts.map +1 -1
  763. package/dist/modes/interactive/components/tree-selector-list.js +3 -0
  764. package/dist/modes/interactive/components/tree-selector-list.js.map +1 -1
  765. package/dist/modes/interactive/components/trust-selector.d.ts +1 -1
  766. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  767. package/dist/modes/interactive/components/trust-selector.js +4 -0
  768. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  769. package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
  770. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  771. package/dist/modes/interactive/components/user-message-selector.js +4 -0
  772. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  773. package/dist/modes/interactive/components/user-message.d.ts +4 -1
  774. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  775. package/dist/modes/interactive/components/user-message.js +10 -2
  776. package/dist/modes/interactive/components/user-message.js.map +1 -1
  777. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  778. package/dist/modes/interactive/external-editor.js +2 -1
  779. package/dist/modes/interactive/external-editor.js.map +1 -1
  780. package/dist/modes/interactive/interactive-agent-events.js +36 -18
  781. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  782. package/dist/modes/interactive/interactive-auth-login.js +9 -2
  783. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  784. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
  785. package/dist/modes/interactive/interactive-auth-routing.js +5 -1
  786. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  787. package/dist/modes/interactive/interactive-bash-compact.js +16 -4
  788. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
  789. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  790. package/dist/modes/interactive/interactive-deferred-startup.js +3 -0
  791. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  792. package/dist/modes/interactive/interactive-editor-actions.js +2 -0
  793. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  794. package/dist/modes/interactive/interactive-extension-context.js +12 -7
  795. package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
  796. package/dist/modes/interactive/interactive-extension-custom-ui.js +1 -0
  797. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  798. package/dist/modes/interactive/interactive-extension-dialogs.js +7 -0
  799. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  800. package/dist/modes/interactive/interactive-extension-widgets.js +7 -24
  801. package/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  802. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  803. package/dist/modes/interactive/interactive-input-handling.js +9 -8
  804. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  805. package/dist/modes/interactive/interactive-mode-base.d.ts +52 -3
  806. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  807. package/dist/modes/interactive/interactive-mode-base.js +143 -5
  808. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  809. package/dist/modes/interactive/interactive-mode-deps.d.ts +2 -2
  810. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  811. package/dist/modes/interactive/interactive-mode-deps.js +2 -2
  812. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  813. package/dist/modes/interactive/interactive-mode-surface.d.ts +9 -3
  814. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  815. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  816. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  817. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  818. package/dist/modes/interactive/interactive-mode.js +1 -0
  819. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  820. package/dist/modes/interactive/interactive-model-routing.js +107 -41
  821. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  822. package/dist/modes/interactive/interactive-process-lifecycle.js +1 -1
  823. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  824. package/dist/modes/interactive/interactive-render-chat.js +24 -6
  825. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  826. package/dist/modes/interactive/interactive-selectors.js +44 -5
  827. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  828. package/dist/modes/interactive/interactive-session-runtime.js +1 -0
  829. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  830. package/dist/modes/interactive/interactive-slash-commands.js +9 -4
  831. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  832. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  833. package/dist/modes/interactive/interactive-startup.js +37 -18
  834. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  835. package/dist/modes/interactive/interactive-tui.d.ts +21 -0
  836. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -0
  837. package/dist/modes/interactive/interactive-tui.js +279 -0
  838. package/dist/modes/interactive/interactive-tui.js.map +1 -0
  839. package/dist/modes/interactive/streaming-assistant-message.d.ts +34 -0
  840. package/dist/modes/interactive/streaming-assistant-message.d.ts.map +1 -0
  841. package/dist/modes/interactive/streaming-assistant-message.js +76 -0
  842. package/dist/modes/interactive/streaming-assistant-message.js.map +1 -0
  843. package/dist/modes/interactive/theme/catppuccin-frappe.json +1 -0
  844. package/dist/modes/interactive/theme/catppuccin-latte.json +1 -0
  845. package/dist/modes/interactive/theme/catppuccin-macchiato.json +1 -0
  846. package/dist/modes/interactive/theme/catppuccin-mocha.json +1 -0
  847. package/dist/modes/interactive/theme/dark.json +1 -0
  848. package/dist/modes/interactive/theme/light.json +1 -0
  849. package/dist/modes/interactive/theme/terminal-detection.d.ts +10 -0
  850. package/dist/modes/interactive/theme/terminal-detection.d.ts.map +1 -1
  851. package/dist/modes/interactive/theme/terminal-detection.js +19 -0
  852. package/dist/modes/interactive/theme/terminal-detection.js.map +1 -1
  853. package/dist/modes/interactive/theme/theme-class.d.ts +2 -2
  854. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  855. package/dist/modes/interactive/theme/theme-class.js +5 -1
  856. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  857. package/dist/modes/interactive/theme/theme-controller.d.ts +3 -1
  858. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  859. package/dist/modes/interactive/theme/theme-controller.js +10 -13
  860. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  861. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  862. package/dist/modes/interactive/theme/theme-loading.js +1 -0
  863. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  864. package/dist/modes/interactive/theme/theme-schema.d.ts +4 -0
  865. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  866. package/dist/modes/interactive/theme/theme-schema.js +2 -1
  867. package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  868. package/dist/modes/interactive/theme/theme-schema.json +5 -1
  869. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  870. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  871. package/dist/modes/interactive/theme/theme.js +1 -1
  872. package/dist/modes/interactive/theme/theme.js.map +1 -1
  873. package/dist/modes/interactive-engine/engine-custom-ui.d.ts +1 -1
  874. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  875. package/dist/modes/interactive-engine/engine-custom-ui.js +28 -11
  876. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  877. package/dist/modes/interactive-engine/engine-render-service.js +3 -3
  878. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  879. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +2 -1
  880. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  881. package/dist/modes/interactive-engine/extension-ui-bridge.js +2 -2
  882. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  883. package/dist/modes/interactive-engine/isolated-runtime.d.ts +7 -0
  884. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  885. package/dist/modes/interactive-engine/isolated-runtime.js +7 -0
  886. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  887. package/dist/modes/interactive-engine/protocol.d.ts +12 -10
  888. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  889. package/dist/modes/interactive-engine/protocol.js +14 -11
  890. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  891. package/dist/modes/interactive-engine/remote-component.d.ts +11 -1
  892. package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
  893. package/dist/modes/interactive-engine/remote-component.js +48 -8
  894. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  895. package/dist/modes/interactive-engine/terminal-mode-controller.d.ts +19 -12
  896. package/dist/modes/interactive-engine/terminal-mode-controller.d.ts.map +1 -1
  897. package/dist/modes/interactive-engine/terminal-mode-controller.js +54 -35
  898. package/dist/modes/interactive-engine/terminal-mode-controller.js.map +1 -1
  899. package/dist/modes/json-event.d.ts +28 -0
  900. package/dist/modes/json-event.d.ts.map +1 -0
  901. package/dist/modes/json-event.js +12 -0
  902. package/dist/modes/json-event.js.map +1 -0
  903. package/dist/modes/print-mode.d.ts.map +1 -1
  904. package/dist/modes/print-mode.js +2 -1
  905. package/dist/modes/print-mode.js.map +1 -1
  906. package/dist/modes/rpc/rpc-client-process.d.ts +1 -0
  907. package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
  908. package/dist/modes/rpc/rpc-client-process.js +5 -1
  909. package/dist/modes/rpc/rpc-client-process.js.map +1 -1
  910. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  911. package/dist/modes/rpc/rpc-client.js +7 -2
  912. package/dist/modes/rpc/rpc-client.js.map +1 -1
  913. package/dist/modes/rpc/rpc-command-handler.js +1 -1
  914. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  915. package/dist/modes/rpc/rpc-event-buffer.d.ts +9 -0
  916. package/dist/modes/rpc/rpc-event-buffer.d.ts.map +1 -1
  917. package/dist/modes/rpc/rpc-event-buffer.js +10 -5
  918. package/dist/modes/rpc/rpc-event-buffer.js.map +1 -1
  919. package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
  920. package/dist/modes/rpc/rpc-extension-ui.js +3 -0
  921. package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
  922. package/dist/modes/rpc/rpc-input.js +1 -1
  923. package/dist/modes/rpc/rpc-input.js.map +1 -1
  924. package/dist/modes/rpc/rpc-output-buffer.d.ts +9 -0
  925. package/dist/modes/rpc/rpc-output-buffer.d.ts.map +1 -1
  926. package/dist/modes/rpc/rpc-output-buffer.js +10 -5
  927. package/dist/modes/rpc/rpc-output-buffer.js.map +1 -1
  928. package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
  929. package/dist/modes/rpc/rpc-provider-auth.js +3 -0
  930. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  931. package/dist/modes/rpc/rpc-responses.d.ts +1 -1
  932. package/dist/modes/rpc/rpc-responses.d.ts.map +1 -1
  933. package/dist/modes/rpc/rpc-responses.js +13 -1
  934. package/dist/modes/rpc/rpc-responses.js.map +1 -1
  935. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  936. package/dist/modes/rpc/rpc-session-binding.js +2 -1
  937. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  938. package/dist/modes/rpc/rpc-types.d.ts +9 -2
  939. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  940. package/dist/modes/rpc/rpc-types.js.map +1 -1
  941. package/dist/rpc-entry.js +2 -0
  942. package/dist/rpc-entry.js.map +1 -1
  943. package/dist/self-update-plan.d.ts.map +1 -1
  944. package/dist/self-update-plan.js +5 -4
  945. package/dist/self-update-plan.js.map +1 -1
  946. package/dist/server/create-harness.d.ts +53 -0
  947. package/dist/server/create-harness.d.ts.map +1 -0
  948. package/dist/server/create-harness.js +349 -0
  949. package/dist/server/create-harness.js.map +1 -0
  950. package/dist/utils/agent-attribution.d.ts +2 -0
  951. package/dist/utils/agent-attribution.d.ts.map +1 -0
  952. package/dist/utils/agent-attribution.js +2 -0
  953. package/dist/utils/agent-attribution.js.map +1 -0
  954. package/dist/utils/child-process.d.ts +3 -1
  955. package/dist/utils/child-process.d.ts.map +1 -1
  956. package/dist/utils/child-process.js +24 -4
  957. package/dist/utils/child-process.js.map +1 -1
  958. package/dist/utils/clipboard-image.d.ts.map +1 -1
  959. package/dist/utils/clipboard-image.js +2 -1
  960. package/dist/utils/clipboard-image.js.map +1 -1
  961. package/dist/utils/clipboard.d.ts.map +1 -1
  962. package/dist/utils/clipboard.js +12 -3
  963. package/dist/utils/clipboard.js.map +1 -1
  964. package/dist/utils/management-http.d.ts +23 -0
  965. package/dist/utils/management-http.d.ts.map +1 -0
  966. package/dist/utils/management-http.js +50 -0
  967. package/dist/utils/management-http.js.map +1 -0
  968. package/dist/utils/open-browser.d.ts.map +1 -1
  969. package/dist/utils/open-browser.js +2 -1
  970. package/dist/utils/open-browser.js.map +1 -1
  971. package/dist/utils/paths.d.ts +2 -0
  972. package/dist/utils/paths.d.ts.map +1 -1
  973. package/dist/utils/paths.js +13 -0
  974. package/dist/utils/paths.js.map +1 -1
  975. package/dist/utils/shell.d.ts.map +1 -1
  976. package/dist/utils/shell.js +17 -4
  977. package/dist/utils/shell.js.map +1 -1
  978. package/dist/utils/tool-result-images.d.ts +17 -0
  979. package/dist/utils/tool-result-images.d.ts.map +1 -0
  980. package/dist/utils/tool-result-images.js +41 -0
  981. package/dist/utils/tool-result-images.js.map +1 -0
  982. package/dist/utils/tools-manager.d.ts.map +1 -1
  983. package/dist/utils/tools-manager.js +7 -8
  984. package/dist/utils/tools-manager.js.map +1 -1
  985. package/dist/utils/version-check.d.ts +4 -0
  986. package/dist/utils/version-check.d.ts.map +1 -1
  987. package/dist/utils/version-check.js +20 -2
  988. package/dist/utils/version-check.js.map +1 -1
  989. package/docs/compaction.md +2 -1
  990. package/docs/custom-provider.md +15 -7
  991. package/docs/development.md +1 -0
  992. package/docs/docs.json +1 -0
  993. package/docs/environment-variables.md +4 -0
  994. package/docs/extensions.md +102 -18
  995. package/docs/i-have-adhd.md +36 -0
  996. package/docs/intercom.md +26 -6
  997. package/docs/json.md +2 -2
  998. package/docs/keybindings.md +55 -12
  999. package/docs/models/model-selection.md +34 -8
  1000. package/docs/models.md +28 -3
  1001. package/docs/providers.md +20 -2
  1002. package/docs/quickstart.md +5 -5
  1003. package/docs/rpc.md +18 -12
  1004. package/docs/sdk.md +43 -7
  1005. package/docs/security.md +10 -10
  1006. package/docs/sessions.md +2 -0
  1007. package/docs/settings.md +25 -5
  1008. package/docs/subagents.md +15 -30
  1009. package/docs/themes.md +5 -3
  1010. package/docs/tools.md +21 -1
  1011. package/docs/tui.md +41 -24
  1012. package/docs/usage.md +40 -14
  1013. package/docs/windows.md +2 -0
  1014. package/docs/workflows.md +216 -20
  1015. package/examples/extensions/custom-provider-anthropic/index.ts +9 -2
  1016. package/examples/extensions/custom-provider-gitlab-duo/index.ts +9 -2
  1017. package/examples/extensions/modal-editor.ts +8 -10
  1018. package/examples/extensions/rainbow-editor.ts +3 -2
  1019. package/examples/extensions/subagent/README.md +16 -45
  1020. package/examples/extensions/subagent/index.ts +6 -96
  1021. package/examples/extensions/subagent/render.ts +0 -78
  1022. package/examples/extensions/subagent/runner.ts +0 -3
  1023. package/examples/extensions/subagent/schemas.ts +0 -13
  1024. package/examples/extensions/subagent/types.ts +1 -2
  1025. package/examples/sdk/09-api-keys-and-oauth.ts +6 -2
  1026. package/examples/sdk/12-full-control.ts +8 -2
  1027. package/examples/sdk/README.md +4 -1
  1028. package/npm-shrinkwrap.json +191 -634
  1029. package/package.json +14 -7
  1030. package/dist/builtin/subagents/src/agents/chain-serializer.ts +0 -257
  1031. package/dist/builtin/subagents/src/runs/foreground/chain-execution-details.ts +0 -38
  1032. package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +0 -280
  1033. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +0 -217
  1034. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +0 -271
  1035. package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +0 -271
  1036. package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +0 -200
  1037. package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +0 -184
  1038. package/dist/builtin/subagents/src/runs/foreground/execution-structured-retries.ts +0 -19
  1039. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +0 -109
  1040. package/dist/builtin/subagents/src/runs/shared/chain-outputs.ts +0 -126
  1041. package/dist/builtin/subagents/src/runs/shared/dynamic-fanout.ts +0 -393
  1042. package/dist/builtin/subagents/src/runs/shared/structured-output.ts +0 -150
  1043. package/dist/builtin/subagents/src/runs/shared/workflow-graph.ts +0 -232
  1044. package/dist/builtin/subagents/src/slash/saved-chain-mapping.ts +0 -60
  1045. package/dist/builtin/subagents/src/tui/render-chain-graph.ts +0 -341
  1046. package/examples/extensions/subagent/prompts/implement-and-review.md +0 -10
  1047. package/examples/extensions/subagent/prompts/implement.md +0 -10
  1048. package/examples/extensions/subagent/prompts/scout-and-plan.md +0 -9
@@ -1,16 +1,22 @@
1
- import { isContextOverflow } from "@earendil-works/pi-ai/compat";
2
- import { calculateContextTokens, estimateContextTokens, shouldCompact } from "./compaction/index.js";
1
+ import { isContextOverflow, isRecoverableLength } from "@earendil-works/pi-ai/compat";
2
+ import { calculateContextTokens, estimateContextTokens, shouldCompact, } from "./compaction/index.js";
3
3
  import { MIN_RESPONSES_MAX_OUTPUT_TOKENS } from "./openai-responses-payload-sanitizer.js";
4
4
  import { getLatestCompactionBoundaryEntry } from "./session-manager.js";
5
5
  /**
6
- * Upper bound on consecutive automatic continuations of a response that was
7
- * truncated at the output-token cap ("length") while the context is still
8
- * below the compaction budget. Each continuation regenerates the cut-off turn,
9
- * so a model that insists on emitting more than its per-turn output cap can
10
- * still terminate instead of looping forever.
6
+ * Upper bound on direct continuations after a response reaches its requested
7
+ * output cap. Context-limited truncations use one compact-and-retry attempt
8
+ * instead; this bound preserves Atomic's separate output-cap continuation.
11
9
  */
12
10
  export const MAX_LENGTH_CONTINUATION_ATTEMPTS = 3;
13
11
  export const MAX_OUTPUT_BUDGET_ERROR_CONTINUATION_ATTEMPTS = 1;
12
+ /** Create the settlement boundary for a regular automatic compaction run. */
13
+ export function createAutoCompactionCompletion() {
14
+ let resolve;
15
+ const promise = new Promise((done) => {
16
+ resolve = done;
17
+ });
18
+ return { promise, resolve };
19
+ }
14
20
  const OUTPUT_BUDGET_PARAMETER_PATTERN = /\bmax_output_tokens\b/;
15
21
  const OUTPUT_BUDGET_UNDERFLOW_PATTERN = new RegExp(`(?:integer\\s+below\\s+minimum\\s+value|expected\\s+(?:a\\s+)?value\\s*>=\\s*${MIN_RESPONSES_MAX_OUTPUT_TOKENS}|got\\s+1\\s+instead)`);
16
22
  export async function _checkCompaction(assistantMessage, skipAbortedCheck = true) {
@@ -24,6 +30,7 @@ export async function _checkCompaction(assistantMessage, skipAbortedCheck = true
24
30
  aborted: true,
25
31
  willRetry: false,
26
32
  midTurn: true,
33
+ ...(hasPendingManualCompactionTakeover.call(this) ? { manualTakeoverPending: true } : {}),
27
34
  });
28
35
  }
29
36
  if (this._postToolCompactionPreflightError !== undefined &&
@@ -41,11 +48,14 @@ export async function _checkCompaction(assistantMessage, skipAbortedCheck = true
41
48
  // This handles the case where user switched from a smaller-context model (e.g. opus)
42
49
  // to a larger-context model (e.g. codex) - the overflow error from the old model
43
50
  // shouldn't trigger compaction for the new model.
44
- const sameModel = this.model && assistantMessage.provider === this.model.provider && assistantMessage.model === this.model.id;
51
+ const sameModel = this.model !== undefined &&
52
+ assistantMessage.provider === this.model.provider &&
53
+ assistantMessage.model === this.model.id;
54
+ const contextOverflow = sameModel && isContextOverflow(assistantMessage, contextWindow);
45
55
  if (!settings.enabled) {
46
56
  // Compaction cannot recover this turn, so a configured fallback chain may
47
57
  // advance to a larger-context candidate instead of dead-ending.
48
- if (sameModel && isContextOverflow(assistantMessage, contextWindow))
58
+ if (contextOverflow)
49
59
  this._contextOverflowUnresolved = true;
50
60
  return;
51
61
  }
@@ -61,36 +71,74 @@ export async function _checkCompaction(assistantMessage, skipAbortedCheck = true
61
71
  if (assistantIsFromBeforeCompactionBoundary) {
62
72
  return;
63
73
  }
64
- // Case 1: Overflow - LLM returned context overflow error
65
- if (sameModel && isContextOverflow(assistantMessage, contextWindow)) {
74
+ // Case 1: Recoverable failure. Explicit/silent context overflow still uses
75
+ // context metadata. A length stop below the model's original requested output
76
+ // cap instead receives one compact-and-retry independent of context metadata.
77
+ // This recovers a chat response; `truncated-range-recovery` separately parses
78
+ // deletion records from a compaction planner response and is not involved here.
79
+ const desiredMaxOutput = this.model?.maxTokens ?? 0;
80
+ const recoverableLength = isLiveTurnCompletion && sameModel && isRecoverableLength(assistantMessage, desiredMaxOutput);
81
+ if (contextOverflow || recoverableLength) {
66
82
  const willRetry = assistantMessage.stopReason !== "stop";
67
83
  if (!willRetry) {
68
84
  await this._runAutoCompaction("overflow", false);
69
85
  return;
70
86
  }
71
- if (this._overflowRecoveryAttempted) {
72
- // One compact-and-retry has already been spent on this turn; a configured
73
- // fallback chain may now advance to a larger-context candidate.
74
- this._contextOverflowUnresolved = true;
87
+ const recoveryAttempted = contextOverflow
88
+ ? this._overflowRecoveryAttempted
89
+ : this._recoverableLengthRecoveryAttempted;
90
+ if (recoveryAttempted) {
91
+ // One recovery of this kind has already been spent on this turn. A real
92
+ // context overflow may now advance to a larger-context fallback; a
93
+ // recoverable output truncation stops without claiming overflow.
94
+ if (contextOverflow)
95
+ this._contextOverflowUnresolved = true;
75
96
  this._emit({
76
97
  type: "compaction_end",
77
98
  reason: "overflow",
78
99
  result: undefined,
79
100
  aborted: false,
80
101
  willRetry: false,
81
- unresolvedOverflow: true,
82
- errorMessage: "Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.",
102
+ ...(contextOverflow ? { unresolvedOverflow: true } : {}),
103
+ errorMessage: contextOverflow
104
+ ? "Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model."
105
+ : "Response truncation recovery stopped after one retry.",
83
106
  });
84
107
  return;
85
108
  }
86
- this._overflowRecoveryAttempted = true;
87
- // Remove the error message from agent state (it IS saved to session for history,
88
- // but we don't want it in context for the retry)
89
- const messages = this.agent.state.messages;
90
- if (messages.length > 0 && messages[messages.length - 1].role === "assistant") {
91
- this.agent.state.messages = messages.slice(0, -1);
109
+ if (contextOverflow)
110
+ this._overflowRecoveryAttempted = true;
111
+ else
112
+ this._recoverableLengthRecoveryAttempted = true;
113
+ let outcome;
114
+ try {
115
+ outcome = contextOverflow
116
+ ? await this._runAutoCompaction("overflow", willRetry)
117
+ : await this._runAutoCompaction("overflow", willRetry, "recoverable");
118
+ }
119
+ catch (error) {
120
+ if (contextOverflow)
121
+ this._overflowRecoveryAttempted = false;
122
+ else
123
+ this._recoverableLengthRecoveryAttempted = false;
124
+ throw error;
92
125
  }
93
- await this._runAutoCompaction("overflow", willRetry);
126
+ if (outcome === "compacted" || outcome === "failed")
127
+ return;
128
+ // No boundary means there is no context to free. Keep this recovery
129
+ // attempt spent while its one direct continuation is pending, so another
130
+ // below-cap stop cannot start a new compaction cycle.
131
+ if (recoverableLength &&
132
+ outcome === "not_compactable" &&
133
+ this._compactionAbortController === undefined &&
134
+ this._manualCompactionPromise === undefined) {
135
+ this._resumeAfterLengthTruncation();
136
+ return;
137
+ }
138
+ if (contextOverflow)
139
+ this._overflowRecoveryAttempted = false;
140
+ else
141
+ this._recoverableLengthRecoveryAttempted = false;
94
142
  return;
95
143
  }
96
144
  // Case 2: Threshold - context is getting large
@@ -117,7 +165,7 @@ export async function _checkCompaction(assistantMessage, skipAbortedCheck = true
117
165
  contextTokens = calculateContextTokens(assistantMessage.usage, assistantMessage.api);
118
166
  }
119
167
  if (shouldCompact(contextTokens, contextWindow, settings)) {
120
- const willRetry = shouldRetryAfterThresholdCompaction(assistantMessage);
168
+ const willRetry = shouldRetryAfterThresholdCompaction(assistantMessage, desiredMaxOutput, isLiveTurnCompletion);
121
169
  if (willRetry && isRetryWorthyOutputBudgetError(assistantMessage)) {
122
170
  if (this._outputBudgetErrorContinuationAttempts >= MAX_OUTPUT_BUDGET_ERROR_CONTINUATION_ATTEMPTS) {
123
171
  this._emit({
@@ -135,18 +183,22 @@ export async function _checkCompaction(assistantMessage, skipAbortedCheck = true
135
183
  await this._runAutoCompaction("threshold", willRetry);
136
184
  return;
137
185
  }
138
- // A response truncated at the output-token cap ("length") with the context
139
- // still below the compaction budget is genuine work cut off mid-flight, not a
140
- // context overflow. Compaction would not free any room, so continue the
141
- // generation directly instead of dead-ending on the truncation and leaving
142
- // the task half-finished.
143
- if (isLiveTurnCompletion && isRetryWorthyLengthStop(assistantMessage)) {
186
+ // A length stop that reached its requested output cap is not the
187
+ // context-limited truncation recovered above. Preserve Atomic's bounded
188
+ // direct-continuation policy for that distinct case.
189
+ if (isLiveTurnCompletion &&
190
+ isOutputCappedLengthStop(assistantMessage, desiredMaxOutput) &&
191
+ this._compactionAbortController === undefined &&
192
+ this._manualCompactionPromise === undefined) {
144
193
  this._resumeAfterLengthTruncation();
145
194
  }
146
195
  }
147
196
  export function isRetryWorthyLengthStop(assistantMessage) {
148
197
  return assistantMessage.stopReason === "length" && assistantMessage.usage.output > 0;
149
198
  }
199
+ export function isOutputCappedLengthStop(assistantMessage, desiredMaxOutput) {
200
+ return isRetryWorthyLengthStop(assistantMessage) && !isRecoverableLength(assistantMessage, desiredMaxOutput);
201
+ }
150
202
  function isJsonRecord(value) {
151
203
  return typeof value === "object" && value !== null && !Array.isArray(value);
152
204
  }
@@ -204,8 +256,9 @@ export function isRetryWorthyOutputBudgetError(assistantMessage) {
204
256
  return true;
205
257
  return isOutputBudgetUnderflowText(assistantMessage.errorMessage);
206
258
  }
207
- export function shouldRetryAfterThresholdCompaction(assistantMessage) {
208
- return isRetryWorthyLengthStop(assistantMessage) || isRetryWorthyOutputBudgetError(assistantMessage);
259
+ export function shouldRetryAfterThresholdCompaction(assistantMessage, desiredMaxOutput, isLiveTurnCompletion) {
260
+ return (isRetryWorthyOutputBudgetError(assistantMessage) ||
261
+ (isLiveTurnCompletion && isOutputCappedLengthStop(assistantMessage, desiredMaxOutput)));
209
262
  }
210
263
  /**
211
264
  * Internal: remove an incomplete assistant from retry context before auto-continuing after compaction.
@@ -313,11 +366,9 @@ export async function _resumeAfterAutoCompaction() {
313
366
  }
314
367
  }
315
368
  /**
316
- * Internal: resume a response that was truncated at the output-token cap
317
- * ("length") when the context does not warrant compaction. The generation is
318
- * continued directly so the model finishes the work it was cut off from, rather
319
- * than dead-ending on the truncation. Bounded by MAX_LENGTH_CONTINUATION_ATTEMPTS
320
- * so a turn that keeps exceeding the per-turn output cap can still terminate.
369
+ * Internal: resume a response that reached its requested output cap when the
370
+ * context does not warrant compaction. Bounded so a model that repeatedly
371
+ * stops at that cap can still terminate.
321
372
  */
322
373
  export function _resumeAfterLengthTruncation() {
323
374
  if (this._lengthContinuationAttempts >= MAX_LENGTH_CONTINUATION_ATTEMPTS)
@@ -333,18 +384,24 @@ export function _resumeAfterLengthTruncation() {
333
384
  * Whether an overflow turn is now unrecoverable by compaction, recording it on
334
385
  * the session so a configured fallback chain may advance to another candidate.
335
386
  */
336
- function overflowUnresolved(reason, aborted = false) {
337
- if (reason !== "overflow" || aborted)
387
+ function overflowUnresolved(loadBearing, aborted = false) {
388
+ if (!loadBearing || aborted)
338
389
  return undefined;
339
390
  this._contextOverflowUnresolved = true;
340
391
  return true;
341
392
  }
342
- export async function _runAutoCompaction(reason, willRetry) {
343
- // Publish automatic ownership before notifying listeners. `_emit()` invokes
344
- // public listeners synchronously, so a `compaction_start` listener that calls
345
- // `compact()` must already observe this controller and be rejected rather than
346
- // racing the run that was just announced.
347
- this._autoCompactionAbortController = new AbortController();
393
+ export function hasPendingManualCompactionTakeover() {
394
+ return this._compactionReason === "manual" && this._compactionAbortController !== undefined;
395
+ }
396
+ export async function _runAutoCompaction(reason, willRetry, urgency = reason === "overflow" ? "load_bearing" : "recoverable") {
397
+ if (this._compactionAbortController !== undefined ||
398
+ this._manualCompactionPromise !== undefined ||
399
+ this._autoCompactionAbortController !== undefined)
400
+ return "deferred";
401
+ const controller = new AbortController();
402
+ const completion = createAutoCompactionCompletion();
403
+ this._autoCompactionAbortController = controller;
404
+ this._autoCompactionCompletion = completion.promise;
348
405
  this._compactionReason = reason;
349
406
  try {
350
407
  this._emit({ type: "compaction_start", reason });
@@ -352,22 +409,28 @@ export async function _runAutoCompaction(reason, willRetry) {
352
409
  catch (error) {
353
410
  // A throwing start listener still propagates, matching current behavior,
354
411
  // but must not leave ownership published with no owner running.
355
- this._autoCompactionAbortController = undefined;
412
+ if (this._autoCompactionAbortController === controller)
413
+ this._autoCompactionAbortController = undefined;
356
414
  if (this._compactionReason === reason)
357
415
  this._compactionReason = undefined;
416
+ completion.resolve();
417
+ if (this._autoCompactionCompletion === completion.promise)
418
+ this._autoCompactionCompletion = undefined;
358
419
  throw error;
359
420
  }
360
421
  try {
361
422
  if (!this.model) {
423
+ const manualTakeoverPending = hasPendingManualCompactionTakeover.call(this);
362
424
  this._emit({
363
425
  type: "compaction_end",
364
426
  reason,
365
427
  result: undefined,
366
428
  aborted: false,
367
429
  willRetry: false,
368
- unresolvedOverflow: overflowUnresolved.call(this, reason),
430
+ unresolvedOverflow: overflowUnresolved.call(this, urgency === "load_bearing"),
431
+ ...(manualTakeoverPending ? { manualTakeoverPending: true } : {}),
369
432
  });
370
- return;
433
+ return manualTakeoverPending ? "deferred" : "failed";
371
434
  }
372
435
  // Resolve auth only after extension hooks have had an opportunity to cancel
373
436
  // compaction or provide compacted text, so local extension compaction does not
@@ -378,54 +441,73 @@ export async function _runAutoCompaction(reason, willRetry) {
378
441
  const authResult = await this._getRequiredRequestAuth(candidate);
379
442
  return authResult.apiKey || authResult.headers ? authResult : undefined;
380
443
  },
381
- abortController: this._autoCompactionAbortController,
382
- backupLabel: reason === "overflow" ? "overflow-auto-compact" : "auto-compact",
444
+ abortController: controller,
445
+ backupLabel: urgency === "load_bearing" ? "overflow-auto-compact" : "auto-compact",
383
446
  reason,
384
- // Overflow recovery is load-bearing: the turn cannot continue without it.
385
- // A threshold crossing has already passed its turn boundary, so failing is safe.
386
- urgency: reason === "overflow" ? "load_bearing" : "recoverable",
387
- // A real provider overflow already proved the context does not fit, so a
388
- // sub-minimum region may reach the fresh rung.
389
- ...(reason === "overflow" ? { allowSmallRegion: true } : {}),
447
+ urgency,
448
+ // Only an actual context overflow proved the context cannot fit. A
449
+ // recoverable length stop must never reach the fresh-context fallback.
450
+ ...(urgency === "load_bearing" ? { allowSmallRegion: true } : {}),
390
451
  });
391
452
  if (!result) {
453
+ const manualTakeoverPending = hasPendingManualCompactionTakeover.call(this);
392
454
  this._emit({
393
455
  type: "compaction_end",
394
456
  reason,
395
457
  result: undefined,
396
458
  aborted: false,
397
459
  willRetry: false,
398
- unresolvedOverflow: overflowUnresolved.call(this, reason),
460
+ unresolvedOverflow: overflowUnresolved.call(this, urgency === "load_bearing"),
461
+ ...(manualTakeoverPending ? { manualTakeoverPending: true } : {}),
399
462
  });
400
- return;
463
+ return manualTakeoverPending ? "deferred" : "not_compactable";
401
464
  }
402
465
  if (willRetry) {
403
466
  this._dropTrailingAutoCompactionRetryAssistantIfPresent();
404
467
  }
405
- this._emit({ type: "compaction_end", reason, result, aborted: false, willRetry });
406
- this._schedulePostAutoCompactionContinuationProbe(reason, willRetry);
468
+ this._emit({
469
+ type: "compaction_end",
470
+ reason,
471
+ result,
472
+ aborted: false,
473
+ willRetry,
474
+ ...(hasPendingManualCompactionTakeover.call(this) ? { manualTakeoverPending: true } : {}),
475
+ });
476
+ if (!hasPendingManualCompactionTakeover.call(this)) {
477
+ this._schedulePostAutoCompactionContinuationProbe(reason, willRetry);
478
+ }
479
+ return "compacted";
407
480
  }
408
481
  catch (error) {
409
482
  const errorMessage = error instanceof Error ? error.message : "compaction failed";
410
483
  const aborted = errorMessage === "Compaction cancelled" || (error instanceof Error && error.name === "AbortError");
484
+ const manualTakeoverPending = hasPendingManualCompactionTakeover.call(this);
411
485
  this._emit({
412
486
  type: "compaction_end",
413
487
  reason,
414
488
  result: undefined,
415
489
  aborted,
416
490
  willRetry: false,
417
- unresolvedOverflow: overflowUnresolved.call(this, reason, aborted),
491
+ unresolvedOverflow: overflowUnresolved.call(this, urgency === "load_bearing", aborted),
492
+ ...(manualTakeoverPending ? { manualTakeoverPending: true } : {}),
418
493
  errorMessage: aborted
419
494
  ? undefined
420
495
  : reason === "overflow"
421
- ? `Context overflow recovery failed: ${errorMessage}`
496
+ ? urgency === "recoverable"
497
+ ? `Response truncation recovery failed: ${errorMessage}`
498
+ : `Context overflow recovery failed: ${errorMessage}`
422
499
  : `Auto-compaction failed: ${errorMessage}`,
423
500
  });
501
+ return manualTakeoverPending ? "deferred" : "failed";
424
502
  }
425
503
  finally {
426
- this._autoCompactionAbortController = undefined;
504
+ if (this._autoCompactionAbortController === controller)
505
+ this._autoCompactionAbortController = undefined;
427
506
  if (this._compactionReason === reason)
428
507
  this._compactionReason = undefined;
508
+ completion.resolve();
509
+ if (this._autoCompactionCompletion === completion.promise)
510
+ this._autoCompactionCompletion = undefined;
429
511
  }
430
512
  }
431
513
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-auto-compaction.js","sourceRoot":"","sources":["../../src/core/agent-session-auto-compaction.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage } from \"@earendil-works/pi-ai/compat\";\nimport { isContextOverflow } from \"@earendil-works/pi-ai/compat\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { calculateContextTokens, estimateContextTokens, shouldCompact } from \"./compaction/index.ts\";\nimport { MIN_RESPONSES_MAX_OUTPUT_TOKENS } from \"./openai-responses-payload-sanitizer.ts\";\nimport { getLatestCompactionBoundaryEntry } from \"./session-manager.ts\";\n\n/**\n * Upper bound on consecutive automatic continuations of a response that was\n * truncated at the output-token cap (\"length\") while the context is still\n * below the compaction budget. Each continuation regenerates the cut-off turn,\n * so a model that insists on emitting more than its per-turn output cap can\n * still terminate instead of looping forever.\n */\nexport const MAX_LENGTH_CONTINUATION_ATTEMPTS = 3;\n\nexport const MAX_OUTPUT_BUDGET_ERROR_CONTINUATION_ATTEMPTS = 1;\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\ntype ProviderErrorDetails = {\n\tmessage?: string;\n\tcode?: string;\n\tparam?: string;\n};\n\nconst OUTPUT_BUDGET_PARAMETER_PATTERN = /\\bmax_output_tokens\\b/;\nconst OUTPUT_BUDGET_UNDERFLOW_PATTERN = new RegExp(\n\t`(?:integer\\\\s+below\\\\s+minimum\\\\s+value|expected\\\\s+(?:a\\\\s+)?value\\\\s*>=\\\\s*${MIN_RESPONSES_MAX_OUTPUT_TOKENS}|got\\\\s+1\\\\s+instead)`,\n);\n\nexport async function _checkCompaction(\n\tthis: AgentSession,\n\tassistantMessage: AssistantMessage,\n\tskipAbortedCheck = true,\n): Promise<void> {\n\tif (this._pendingPostToolCompactionGuard) {\n\t\tconst { result } = this._pendingPostToolCompactionGuard;\n\t\tthis._pendingPostToolCompactionGuard = undefined;\n\t\tthis._emit({\n\t\t\ttype: \"compaction_end\",\n\t\t\treason: \"threshold\",\n\t\t\tresult,\n\t\t\taborted: true,\n\t\t\twillRetry: false,\n\t\t\tmidTurn: true,\n\t\t});\n\t}\n\tif (\n\t\tthis._postToolCompactionPreflightError !== undefined &&\n\t\tassistantMessage.errorMessage === this._postToolCompactionPreflightError\n\t) {\n\t\tthis._postToolCompactionPreflightError = undefined;\n\t\treturn;\n\t}\n\t// The agent_end path passes skipAbortedCheck=true; the pre-prompt path passes\n\t// false. Only the live turn-completion path may auto-continue a truncated\n\t// response — before a fresh user prompt we must not resume the old turn.\n\tconst isLiveTurnCompletion = skipAbortedCheck;\n\tconst settings = this.settingsManager.getCompactionSettings();\n\tconst contextWindow = this.model?.contextWindow ?? 0;\n\t// Skip overflow handling if the message came from a different model.\n\t// This handles the case where user switched from a smaller-context model (e.g. opus)\n\t// to a larger-context model (e.g. codex) - the overflow error from the old model\n\t// shouldn't trigger compaction for the new model.\n\tconst sameModel =\n\t\tthis.model && assistantMessage.provider === this.model.provider && assistantMessage.model === this.model.id;\n\tif (!settings.enabled) {\n\t\t// Compaction cannot recover this turn, so a configured fallback chain may\n\t\t// advance to a larger-context candidate instead of dead-ending.\n\t\tif (sameModel && isContextOverflow(assistantMessage, contextWindow)) this._contextOverflowUnresolved = true;\n\t\treturn;\n\t}\n\n\t// Skip if message was aborted (user cancelled) - unless skipAbortedCheck is false\n\tif (skipAbortedCheck && assistantMessage.stopReason === \"aborted\") return;\n\n\t// Skip compaction checks if this assistant message is older than the latest\n\t// compaction boundary. This prevents a stale pre-compaction usage/error\n\t// from retriggering compaction on the first prompt after compaction.\n\tconst compactionBoundaryEntry = getLatestCompactionBoundaryEntry(this.sessionManager.getBranch());\n\tconst assistantIsFromBeforeCompactionBoundary =\n\t\tcompactionBoundaryEntry !== null &&\n\t\tassistantMessage.timestamp <= new Date(compactionBoundaryEntry.timestamp).getTime();\n\tif (assistantIsFromBeforeCompactionBoundary) {\n\t\treturn;\n\t}\n\n\t// Case 1: Overflow - LLM returned context overflow error\n\tif (sameModel && isContextOverflow(assistantMessage, contextWindow)) {\n\t\tconst willRetry = assistantMessage.stopReason !== \"stop\";\n\t\tif (!willRetry) {\n\t\t\tawait this._runAutoCompaction(\"overflow\", false);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._overflowRecoveryAttempted) {\n\t\t\t// One compact-and-retry has already been spent on this turn; a configured\n\t\t\t// fallback chain may now advance to a larger-context candidate.\n\t\t\tthis._contextOverflowUnresolved = true;\n\t\t\tthis._emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason: \"overflow\",\n\t\t\t\tresult: undefined,\n\t\t\t\taborted: false,\n\t\t\t\twillRetry: false,\n\t\t\t\tunresolvedOverflow: true,\n\t\t\t\terrorMessage:\n\t\t\t\t\t\"Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis._overflowRecoveryAttempted = true;\n\t\t// Remove the error message from agent state (it IS saved to session for history,\n\t\t// but we don't want it in context for the retry)\n\t\tconst messages = this.agent.state.messages;\n\t\tif (messages.length > 0 && messages[messages.length - 1].role === \"assistant\") {\n\t\t\tthis.agent.state.messages = messages.slice(0, -1);\n\t\t}\n\t\tawait this._runAutoCompaction(\"overflow\", willRetry);\n\t\treturn;\n\t}\n\n\t// Case 2: Threshold - context is getting large\n\t// For error messages (no usage data), estimate from last successful response.\n\t// This ensures sessions that hit persistent API errors (e.g. 529) can still compact.\n\tlet contextTokens: number;\n\tif (assistantMessage.stopReason === \"error\") {\n\t\tconst messages = this.agent.state.messages;\n\t\tconst estimate = estimateContextTokens(messages);\n\t\tif (estimate.lastUsageIndex === null) return; // No usage data at all\n\t\t// Verify the usage source is post-compaction. Kept pre-compaction messages\n\t\t// have stale usage reflecting the old (larger) context and would falsely\n\t\t// trigger compaction right after one just finished.\n\t\tconst usageMsg = messages[estimate.lastUsageIndex];\n\t\tif (\n\t\t\tcompactionBoundaryEntry &&\n\t\t\tusageMsg.role === \"assistant\" &&\n\t\t\t(usageMsg as AssistantMessage).timestamp <= new Date(compactionBoundaryEntry.timestamp).getTime()\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tcontextTokens = estimate.tokens;\n\t} else {\n\t\tcontextTokens = calculateContextTokens(assistantMessage.usage, assistantMessage.api);\n\t}\n\tif (shouldCompact(contextTokens, contextWindow, settings)) {\n\t\tconst willRetry = shouldRetryAfterThresholdCompaction(assistantMessage);\n\t\tif (willRetry && isRetryWorthyOutputBudgetError(assistantMessage)) {\n\t\t\tif (this._outputBudgetErrorContinuationAttempts >= MAX_OUTPUT_BUDGET_ERROR_CONTINUATION_ATTEMPTS) {\n\t\t\t\tthis._emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason: \"threshold\",\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\terrorMessage:\n\t\t\t\t\t\t\"Output-budget recovery stopped after a compact-and-retry attempt. Try reducing context or switching to a larger-context model.\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._outputBudgetErrorContinuationAttempts += 1;\n\t\t}\n\t\tawait this._runAutoCompaction(\"threshold\", willRetry);\n\t\treturn;\n\t}\n\n\t// A response truncated at the output-token cap (\"length\") with the context\n\t// still below the compaction budget is genuine work cut off mid-flight, not a\n\t// context overflow. Compaction would not free any room, so continue the\n\t// generation directly instead of dead-ending on the truncation and leaving\n\t// the task half-finished.\n\tif (isLiveTurnCompletion && isRetryWorthyLengthStop(assistantMessage)) {\n\t\tthis._resumeAfterLengthTruncation();\n\t}\n}\n\nexport function isRetryWorthyLengthStop(assistantMessage: AssistantMessage): boolean {\n\treturn assistantMessage.stopReason === \"length\" && assistantMessage.usage.output > 0;\n}\n\nfunction isJsonRecord(value: JsonValue): value is { [key: string]: JsonValue } {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction stringField(record: { [key: string]: JsonValue }, key: string): string | undefined {\n\tconst value = record[key];\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nfunction parseProviderErrorDetails(errorMessage: string): ProviderErrorDetails | undefined {\n\tconst start = errorMessage.indexOf(\"{\");\n\tconst end = errorMessage.lastIndexOf(\"}\");\n\tif (start === -1 || end <= start) return undefined;\n\n\ttry {\n\t\tconst parsed = JSON.parse(errorMessage.slice(start, end + 1)) as JsonValue;\n\t\tif (!isJsonRecord(parsed)) return undefined;\n\n\t\tconst nestedError = parsed.error;\n\t\tif (nestedError !== undefined && isJsonRecord(nestedError)) {\n\t\t\treturn {\n\t\t\t\tmessage: stringField(nestedError, \"message\"),\n\t\t\t\tcode: stringField(nestedError, \"code\") ?? stringField(parsed, \"code\"),\n\t\t\t\tparam: stringField(nestedError, \"param\") ?? stringField(parsed, \"param\"),\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tmessage: stringField(parsed, \"message\"),\n\t\t\tcode: stringField(parsed, \"code\"),\n\t\t\tparam: stringField(parsed, \"param\"),\n\t\t};\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction isOutputBudgetUnderflowText(text: string): boolean {\n\tconst message = text.toLowerCase();\n\treturn OUTPUT_BUDGET_PARAMETER_PATTERN.test(message) && OUTPUT_BUDGET_UNDERFLOW_PATTERN.test(message);\n}\n\nfunction isStructuredOutputBudgetUnderflow(details: ProviderErrorDetails): boolean {\n\tconst message = details.message?.toLowerCase() ?? \"\";\n\tconst param = details.param?.toLowerCase();\n\tif (!OUTPUT_BUDGET_UNDERFLOW_PATTERN.test(message)) return false;\n\treturn param !== undefined\n\t\t? OUTPUT_BUDGET_PARAMETER_PATTERN.test(param)\n\t\t: OUTPUT_BUDGET_PARAMETER_PATTERN.test(message);\n}\n\nexport function isRetryWorthyOutputBudgetError(assistantMessage: AssistantMessage): boolean {\n\tif (assistantMessage.stopReason !== \"error\" || !assistantMessage.errorMessage) return false;\n\tif (assistantMessage.api !== \"openai-responses\") return false;\n\n\tconst structuredDetails = parseProviderErrorDetails(assistantMessage.errorMessage);\n\tif (structuredDetails && isStructuredOutputBudgetUnderflow(structuredDetails)) return true;\n\n\treturn isOutputBudgetUnderflowText(assistantMessage.errorMessage);\n}\n\nexport function shouldRetryAfterThresholdCompaction(assistantMessage: AssistantMessage): boolean {\n\treturn isRetryWorthyLengthStop(assistantMessage) || isRetryWorthyOutputBudgetError(assistantMessage);\n}\n\n/**\n * Internal: remove an incomplete assistant from retry context before auto-continuing after compaction.\n */\n\nexport function _dropTrailingAutoCompactionRetryAssistantIfPresent(this: AgentSession): void {\n\tconst messages = this.agent.state.messages;\n\tconst lastMsg = messages[messages.length - 1];\n\tif (lastMsg?.role !== \"assistant\") return;\n\tconst stopReason = (lastMsg as AssistantMessage).stopReason;\n\tif (stopReason === \"error\" || stopReason === \"length\") {\n\t\tthis.agent.state.messages = messages.slice(0, -1);\n\t}\n}\n\n/**\n * Internal: schedule a live post-event continuation after compaction_end listeners can flush queues.\n * The grace period preserves listener ordering. Queue-only probes wait for transient work to become\n * idle, while retry probes remain tied to the turn that scheduled them and are abandoned if another\n * turn owns the agent when the grace period ends.\n */\n\nexport function _schedulePostAutoCompactionContinuationProbe(\n\tthis: AgentSession,\n\t_reason: \"overflow\" | \"threshold\",\n\twillRetry: boolean,\n): void {\n\tconst token = this._postCompactionContinuationToken + 1;\n\tthis._postCompactionContinuationToken = token;\n\tconst fallbackScopeGeneration = this._fallbackOriginGeneration;\n\tlet pending: Promise<void>;\n\tpending = new Promise<void>((resolve) => {\n\t\tsetTimeout(() => {\n\t\t\tvoid (async () => {\n\t\t\t\tconst restoreIfOwned = async (): Promise<void> => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tfallbackScopeGeneration === undefined ||\n\t\t\t\t\t\tthis._fallbackOriginGeneration !== fallbackScopeGeneration ||\n\t\t\t\t\t\ttypeof this._restoreFallbackModel !== \"function\"\n\t\t\t\t\t)\n\t\t\t\t\t\treturn;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this._restoreFallbackModel();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// A listener must not strand the continuation waiter. The model\n\t\t\t\t\t\t// state was already restored before lifecycle notifications ran.\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\ttry {\n\t\t\t\t\tif (willRetry) {\n\t\t\t\t\t\tif (this._postCompactionContinuationToken !== token) return;\n\t\t\t\t\t\tif (this.isCompacting || this.isStreaming) return;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait this.agent.waitForIdle();\n\t\t\t\t\t\tif (this._postCompactionContinuationToken !== token) return;\n\t\t\t\t\t\tif (this.isCompacting || this.isStreaming) return;\n\t\t\t\t\t\tif (!this.agent.hasQueuedMessages()) {\n\t\t\t\t\t\t\tawait restoreIfOwned();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// A queued message starts the next user turn. Restore before\n\t\t\t\t\t\t// Agent snapshots the next request's model.\n\t\t\t\t\t\tawait restoreIfOwned();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._pendingPostCompactionContinuation !== pending) return;\n\t\t\t\t\t// Clear this probe before entering the next run. Its promise is\n\t\t\t\t\t// still awaited by _awaitPendingPostCompactionContinuation, but\n\t\t\t\t\t// the nested agent_end must be free to schedule a new probe.\n\t\t\t\t\tthis._pendingPostCompactionContinuation = undefined;\n\t\t\t\t\tawait this._resumeAfterAutoCompaction();\n\t\t\t\t\tif (willRetry && this._pendingPostCompactionContinuation === undefined) {\n\t\t\t\t\t\tawait restoreIfOwned();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (this._pendingPostCompactionContinuation === pending) {\n\t\t\t\t\t\tthis._pendingPostCompactionContinuation = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t})();\n\t\t}, 100);\n\t});\n\tthis._pendingPostCompactionContinuation = pending;\n}\n\nexport async function _awaitPendingPostCompactionContinuation(this: AgentSession): Promise<void> {\n\tconst pending = this._pendingPostCompactionContinuation;\n\tif (pending === undefined) return;\n\tawait pending;\n}\n\n/**\n * Internal: resume generation after successful auto-compaction only when active work remains.\n */\n\nexport async function _resumeAfterAutoCompaction(this: AgentSession): Promise<void> {\n\ttry {\n\t\tawait this._runAgentContinue();\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthis._emit({\n\t\t\ttype: \"agent_continue_error\",\n\t\t\tsource: \"post_compaction\",\n\t\t\terrorMessage: `Post-compaction continuation failed: ${message}`,\n\t\t});\n\t}\n}\n\n/**\n * Internal: resume a response that was truncated at the output-token cap\n * (\"length\") when the context does not warrant compaction. The generation is\n * continued directly so the model finishes the work it was cut off from, rather\n * than dead-ending on the truncation. Bounded by MAX_LENGTH_CONTINUATION_ATTEMPTS\n * so a turn that keeps exceeding the per-turn output cap can still terminate.\n */\n\nexport function _resumeAfterLengthTruncation(this: AgentSession): void {\n\tif (this._lengthContinuationAttempts >= MAX_LENGTH_CONTINUATION_ATTEMPTS) return;\n\tthis._lengthContinuationAttempts += 1;\n\t// agent.continue() rejects an assistant tail; drop the incomplete\n\t// length-stopped message so the preceding user/tool-result anchors the\n\t// continuation. It remains persisted in session history.\n\tthis._dropTrailingAutoCompactionRetryAssistantIfPresent();\n\tthis._schedulePostAutoCompactionContinuationProbe(\"threshold\", true);\n}\n\n/**\n * Whether an overflow turn is now unrecoverable by compaction, recording it on\n * the session so a configured fallback chain may advance to another candidate.\n */\nfunction overflowUnresolved(\n\tthis: AgentSession,\n\treason: \"overflow\" | \"threshold\",\n\taborted = false,\n): boolean | undefined {\n\tif (reason !== \"overflow\" || aborted) return undefined;\n\tthis._contextOverflowUnresolved = true;\n\treturn true;\n}\n\nexport async function _runAutoCompaction(\n\tthis: AgentSession,\n\treason: \"overflow\" | \"threshold\",\n\twillRetry: boolean,\n): Promise<void> {\n\t// Publish automatic ownership before notifying listeners. `_emit()` invokes\n\t// public listeners synchronously, so a `compaction_start` listener that calls\n\t// `compact()` must already observe this controller and be rejected rather than\n\t// racing the run that was just announced.\n\tthis._autoCompactionAbortController = new AbortController();\n\tthis._compactionReason = reason;\n\ttry {\n\t\tthis._emit({ type: \"compaction_start\", reason });\n\t} catch (error) {\n\t\t// A throwing start listener still propagates, matching current behavior,\n\t\t// but must not leave ownership published with no owner running.\n\t\tthis._autoCompactionAbortController = undefined;\n\t\tif (this._compactionReason === reason) this._compactionReason = undefined;\n\t\tthrow error;\n\t}\n\n\ttry {\n\t\tif (!this.model) {\n\t\t\tthis._emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason,\n\t\t\t\tresult: undefined,\n\t\t\t\taborted: false,\n\t\t\t\twillRetry: false,\n\t\t\t\tunresolvedOverflow: overflowUnresolved.call(this, reason),\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Resolve auth only after extension hooks have had an opportunity to cancel\n\t\t// compaction or provide compacted text, so local extension compaction does not\n\t\t// require provider credentials. Missing auth then fails model-driven compaction\n\t\t// before persistence or continuation, matching other provider-call failures.\n\t\tconst result = await this._applyVerbatimCompaction({\n\t\t\tresolvePlannerAuth: async (candidate) => {\n\t\t\t\tconst authResult = await this._getRequiredRequestAuth(candidate);\n\t\t\t\treturn authResult.apiKey || authResult.headers ? authResult : undefined;\n\t\t\t},\n\t\t\tabortController: this._autoCompactionAbortController,\n\t\t\tbackupLabel: reason === \"overflow\" ? \"overflow-auto-compact\" : \"auto-compact\",\n\t\t\treason,\n\t\t\t// Overflow recovery is load-bearing: the turn cannot continue without it.\n\t\t\t// A threshold crossing has already passed its turn boundary, so failing is safe.\n\t\t\turgency: reason === \"overflow\" ? \"load_bearing\" : \"recoverable\",\n\t\t\t// A real provider overflow already proved the context does not fit, so a\n\t\t\t// sub-minimum region may reach the fresh rung.\n\t\t\t...(reason === \"overflow\" ? { allowSmallRegion: true } : {}),\n\t\t});\n\t\tif (!result) {\n\t\t\tthis._emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason,\n\t\t\t\tresult: undefined,\n\t\t\t\taborted: false,\n\t\t\t\twillRetry: false,\n\t\t\t\tunresolvedOverflow: overflowUnresolved.call(this, reason),\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (willRetry) {\n\t\t\tthis._dropTrailingAutoCompactionRetryAssistantIfPresent();\n\t\t}\n\n\t\tthis._emit({ type: \"compaction_end\", reason, result, aborted: false, willRetry });\n\t\tthis._schedulePostAutoCompactionContinuationProbe(reason, willRetry);\n\t} catch (error) {\n\t\tconst errorMessage = error instanceof Error ? error.message : \"compaction failed\";\n\t\tconst aborted =\n\t\t\terrorMessage === \"Compaction cancelled\" || (error instanceof Error && error.name === \"AbortError\");\n\t\tthis._emit({\n\t\t\ttype: \"compaction_end\",\n\t\t\treason,\n\t\t\tresult: undefined,\n\t\t\taborted,\n\t\t\twillRetry: false,\n\t\t\tunresolvedOverflow: overflowUnresolved.call(this, reason, aborted),\n\t\t\terrorMessage: aborted\n\t\t\t\t? undefined\n\t\t\t\t: reason === \"overflow\"\n\t\t\t\t\t? `Context overflow recovery failed: ${errorMessage}`\n\t\t\t\t\t: `Auto-compaction failed: ${errorMessage}`,\n\t\t});\n\t} finally {\n\t\tthis._autoCompactionAbortController = undefined;\n\t\tif (this._compactionReason === reason) this._compactionReason = undefined;\n\t}\n}\n\n/**\n * Toggle auto-compaction setting.\n */\n\nexport const agentSessionAutoCompactionMethods = {\n\t_awaitPendingPostCompactionContinuation,\n\t_checkCompaction,\n\t_dropTrailingAutoCompactionRetryAssistantIfPresent,\n\t_schedulePostAutoCompactionContinuationProbe,\n\t_resumeAfterAutoCompaction,\n\t_resumeAfterLengthTruncation,\n\t_runAutoCompaction,\n};\n"]}
1
+ {"version":3,"file":"agent-session-auto-compaction.js","sourceRoot":"","sources":["../../src/core/agent-session-auto-compaction.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage } from \"@earendil-works/pi-ai/compat\";\nimport { isContextOverflow, isRecoverableLength } from \"@earendil-works/pi-ai/compat\";\nimport type { AgentSessionInternalSurface as AgentSession, AutoCompactionRunOutcome } from \"./agent-session-methods.ts\";\nimport {\n\ttype CompactionUrgency,\n\tcalculateContextTokens,\n\testimateContextTokens,\n\tshouldCompact,\n} from \"./compaction/index.ts\";\nimport { MIN_RESPONSES_MAX_OUTPUT_TOKENS } from \"./openai-responses-payload-sanitizer.ts\";\nimport { getLatestCompactionBoundaryEntry } from \"./session-manager.ts\";\n\n/**\n * Upper bound on direct continuations after a response reaches its requested\n * output cap. Context-limited truncations use one compact-and-retry attempt\n * instead; this bound preserves Atomic's separate output-cap continuation.\n */\nexport const MAX_LENGTH_CONTINUATION_ATTEMPTS = 3;\n\nexport const MAX_OUTPUT_BUDGET_ERROR_CONTINUATION_ATTEMPTS = 1;\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\ntype ProviderErrorDetails = {\n\tmessage?: string;\n\tcode?: string;\n\tparam?: string;\n};\n\n/** Create the settlement boundary for a regular automatic compaction run. */\nexport function createAutoCompactionCompletion(): {\n\tpromise: Promise<void>;\n\tresolve: () => void;\n} {\n\tlet resolve!: () => void;\n\tconst promise = new Promise<void>((done) => {\n\t\tresolve = done;\n\t});\n\treturn { promise, resolve };\n}\n\nconst OUTPUT_BUDGET_PARAMETER_PATTERN = /\\bmax_output_tokens\\b/;\nconst OUTPUT_BUDGET_UNDERFLOW_PATTERN = new RegExp(\n\t`(?:integer\\\\s+below\\\\s+minimum\\\\s+value|expected\\\\s+(?:a\\\\s+)?value\\\\s*>=\\\\s*${MIN_RESPONSES_MAX_OUTPUT_TOKENS}|got\\\\s+1\\\\s+instead)`,\n);\n\nexport async function _checkCompaction(\n\tthis: AgentSession,\n\tassistantMessage: AssistantMessage,\n\tskipAbortedCheck = true,\n): Promise<void> {\n\tif (this._pendingPostToolCompactionGuard) {\n\t\tconst { result } = this._pendingPostToolCompactionGuard;\n\t\tthis._pendingPostToolCompactionGuard = undefined;\n\t\tthis._emit({\n\t\t\ttype: \"compaction_end\",\n\t\t\treason: \"threshold\",\n\t\t\tresult,\n\t\t\taborted: true,\n\t\t\twillRetry: false,\n\t\t\tmidTurn: true,\n\t\t\t...(hasPendingManualCompactionTakeover.call(this) ? { manualTakeoverPending: true } : {}),\n\t\t});\n\t}\n\tif (\n\t\tthis._postToolCompactionPreflightError !== undefined &&\n\t\tassistantMessage.errorMessage === this._postToolCompactionPreflightError\n\t) {\n\t\tthis._postToolCompactionPreflightError = undefined;\n\t\treturn;\n\t}\n\t// The agent_end path passes skipAbortedCheck=true; the pre-prompt path passes\n\t// false. Only the live turn-completion path may auto-continue a truncated\n\t// response — before a fresh user prompt we must not resume the old turn.\n\tconst isLiveTurnCompletion = skipAbortedCheck;\n\tconst settings = this.settingsManager.getCompactionSettings();\n\tconst contextWindow = this.model?.contextWindow ?? 0;\n\t// Skip overflow handling if the message came from a different model.\n\t// This handles the case where user switched from a smaller-context model (e.g. opus)\n\t// to a larger-context model (e.g. codex) - the overflow error from the old model\n\t// shouldn't trigger compaction for the new model.\n\tconst sameModel =\n\t\tthis.model !== undefined &&\n\t\tassistantMessage.provider === this.model.provider &&\n\t\tassistantMessage.model === this.model.id;\n\tconst contextOverflow = sameModel && isContextOverflow(assistantMessage, contextWindow);\n\tif (!settings.enabled) {\n\t\t// Compaction cannot recover this turn, so a configured fallback chain may\n\t\t// advance to a larger-context candidate instead of dead-ending.\n\t\tif (contextOverflow) this._contextOverflowUnresolved = true;\n\t\treturn;\n\t}\n\n\t// Skip if message was aborted (user cancelled) - unless skipAbortedCheck is false\n\tif (skipAbortedCheck && assistantMessage.stopReason === \"aborted\") return;\n\n\t// Skip compaction checks if this assistant message is older than the latest\n\t// compaction boundary. This prevents a stale pre-compaction usage/error\n\t// from retriggering compaction on the first prompt after compaction.\n\tconst compactionBoundaryEntry = getLatestCompactionBoundaryEntry(this.sessionManager.getBranch());\n\tconst assistantIsFromBeforeCompactionBoundary =\n\t\tcompactionBoundaryEntry !== null &&\n\t\tassistantMessage.timestamp <= new Date(compactionBoundaryEntry.timestamp).getTime();\n\tif (assistantIsFromBeforeCompactionBoundary) {\n\t\treturn;\n\t}\n\n\t// Case 1: Recoverable failure. Explicit/silent context overflow still uses\n\t// context metadata. A length stop below the model's original requested output\n\t// cap instead receives one compact-and-retry independent of context metadata.\n\t// This recovers a chat response; `truncated-range-recovery` separately parses\n\t// deletion records from a compaction planner response and is not involved here.\n\tconst desiredMaxOutput = this.model?.maxTokens ?? 0;\n\tconst recoverableLength =\n\t\tisLiveTurnCompletion && sameModel && isRecoverableLength(assistantMessage, desiredMaxOutput);\n\tif (contextOverflow || recoverableLength) {\n\t\tconst willRetry = assistantMessage.stopReason !== \"stop\";\n\t\tif (!willRetry) {\n\t\t\tawait this._runAutoCompaction(\"overflow\", false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst recoveryAttempted = contextOverflow\n\t\t\t? this._overflowRecoveryAttempted\n\t\t\t: this._recoverableLengthRecoveryAttempted;\n\t\tif (recoveryAttempted) {\n\t\t\t// One recovery of this kind has already been spent on this turn. A real\n\t\t\t// context overflow may now advance to a larger-context fallback; a\n\t\t\t// recoverable output truncation stops without claiming overflow.\n\t\t\tif (contextOverflow) this._contextOverflowUnresolved = true;\n\t\t\tthis._emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason: \"overflow\",\n\t\t\t\tresult: undefined,\n\t\t\t\taborted: false,\n\t\t\t\twillRetry: false,\n\t\t\t\t...(contextOverflow ? { unresolvedOverflow: true } : {}),\n\t\t\t\terrorMessage: contextOverflow\n\t\t\t\t\t? \"Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.\"\n\t\t\t\t\t: \"Response truncation recovery stopped after one retry.\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (contextOverflow) this._overflowRecoveryAttempted = true;\n\t\telse this._recoverableLengthRecoveryAttempted = true;\n\t\tlet outcome: AutoCompactionRunOutcome;\n\t\ttry {\n\t\t\toutcome = contextOverflow\n\t\t\t\t? await this._runAutoCompaction(\"overflow\", willRetry)\n\t\t\t\t: await this._runAutoCompaction(\"overflow\", willRetry, \"recoverable\");\n\t\t} catch (error) {\n\t\t\tif (contextOverflow) this._overflowRecoveryAttempted = false;\n\t\t\telse this._recoverableLengthRecoveryAttempted = false;\n\t\t\tthrow error;\n\t\t}\n\t\tif (outcome === \"compacted\" || outcome === \"failed\") return;\n\t\t// No boundary means there is no context to free. Keep this recovery\n\t\t// attempt spent while its one direct continuation is pending, so another\n\t\t// below-cap stop cannot start a new compaction cycle.\n\t\tif (\n\t\t\trecoverableLength &&\n\t\t\toutcome === \"not_compactable\" &&\n\t\t\tthis._compactionAbortController === undefined &&\n\t\t\tthis._manualCompactionPromise === undefined\n\t\t) {\n\t\t\tthis._resumeAfterLengthTruncation();\n\t\t\treturn;\n\t\t}\n\t\tif (contextOverflow) this._overflowRecoveryAttempted = false;\n\t\telse this._recoverableLengthRecoveryAttempted = false;\n\t\treturn;\n\t}\n\n\t// Case 2: Threshold - context is getting large\n\t// For error messages (no usage data), estimate from last successful response.\n\t// This ensures sessions that hit persistent API errors (e.g. 529) can still compact.\n\tlet contextTokens: number;\n\tif (assistantMessage.stopReason === \"error\") {\n\t\tconst messages = this.agent.state.messages;\n\t\tconst estimate = estimateContextTokens(messages);\n\t\tif (estimate.lastUsageIndex === null) return; // No usage data at all\n\t\t// Verify the usage source is post-compaction. Kept pre-compaction messages\n\t\t// have stale usage reflecting the old (larger) context and would falsely\n\t\t// trigger compaction right after one just finished.\n\t\tconst usageMsg = messages[estimate.lastUsageIndex];\n\t\tif (\n\t\t\tcompactionBoundaryEntry &&\n\t\t\tusageMsg.role === \"assistant\" &&\n\t\t\t(usageMsg as AssistantMessage).timestamp <= new Date(compactionBoundaryEntry.timestamp).getTime()\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tcontextTokens = estimate.tokens;\n\t} else {\n\t\tcontextTokens = calculateContextTokens(assistantMessage.usage, assistantMessage.api);\n\t}\n\tif (shouldCompact(contextTokens, contextWindow, settings)) {\n\t\tconst willRetry = shouldRetryAfterThresholdCompaction(assistantMessage, desiredMaxOutput, isLiveTurnCompletion);\n\t\tif (willRetry && isRetryWorthyOutputBudgetError(assistantMessage)) {\n\t\t\tif (this._outputBudgetErrorContinuationAttempts >= MAX_OUTPUT_BUDGET_ERROR_CONTINUATION_ATTEMPTS) {\n\t\t\t\tthis._emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason: \"threshold\",\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\terrorMessage:\n\t\t\t\t\t\t\"Output-budget recovery stopped after a compact-and-retry attempt. Try reducing context or switching to a larger-context model.\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._outputBudgetErrorContinuationAttempts += 1;\n\t\t}\n\t\tawait this._runAutoCompaction(\"threshold\", willRetry);\n\t\treturn;\n\t}\n\n\t// A length stop that reached its requested output cap is not the\n\t// context-limited truncation recovered above. Preserve Atomic's bounded\n\t// direct-continuation policy for that distinct case.\n\tif (\n\t\tisLiveTurnCompletion &&\n\t\tisOutputCappedLengthStop(assistantMessage, desiredMaxOutput) &&\n\t\tthis._compactionAbortController === undefined &&\n\t\tthis._manualCompactionPromise === undefined\n\t) {\n\t\tthis._resumeAfterLengthTruncation();\n\t}\n}\n\nexport function isRetryWorthyLengthStop(assistantMessage: AssistantMessage): boolean {\n\treturn assistantMessage.stopReason === \"length\" && assistantMessage.usage.output > 0;\n}\n\nexport function isOutputCappedLengthStop(assistantMessage: AssistantMessage, desiredMaxOutput: number): boolean {\n\treturn isRetryWorthyLengthStop(assistantMessage) && !isRecoverableLength(assistantMessage, desiredMaxOutput);\n}\n\nfunction isJsonRecord(value: JsonValue): value is { [key: string]: JsonValue } {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction stringField(record: { [key: string]: JsonValue }, key: string): string | undefined {\n\tconst value = record[key];\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nfunction parseProviderErrorDetails(errorMessage: string): ProviderErrorDetails | undefined {\n\tconst start = errorMessage.indexOf(\"{\");\n\tconst end = errorMessage.lastIndexOf(\"}\");\n\tif (start === -1 || end <= start) return undefined;\n\n\ttry {\n\t\tconst parsed = JSON.parse(errorMessage.slice(start, end + 1)) as JsonValue;\n\t\tif (!isJsonRecord(parsed)) return undefined;\n\n\t\tconst nestedError = parsed.error;\n\t\tif (nestedError !== undefined && isJsonRecord(nestedError)) {\n\t\t\treturn {\n\t\t\t\tmessage: stringField(nestedError, \"message\"),\n\t\t\t\tcode: stringField(nestedError, \"code\") ?? stringField(parsed, \"code\"),\n\t\t\t\tparam: stringField(nestedError, \"param\") ?? stringField(parsed, \"param\"),\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tmessage: stringField(parsed, \"message\"),\n\t\t\tcode: stringField(parsed, \"code\"),\n\t\t\tparam: stringField(parsed, \"param\"),\n\t\t};\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction isOutputBudgetUnderflowText(text: string): boolean {\n\tconst message = text.toLowerCase();\n\treturn OUTPUT_BUDGET_PARAMETER_PATTERN.test(message) && OUTPUT_BUDGET_UNDERFLOW_PATTERN.test(message);\n}\n\nfunction isStructuredOutputBudgetUnderflow(details: ProviderErrorDetails): boolean {\n\tconst message = details.message?.toLowerCase() ?? \"\";\n\tconst param = details.param?.toLowerCase();\n\tif (!OUTPUT_BUDGET_UNDERFLOW_PATTERN.test(message)) return false;\n\treturn param !== undefined\n\t\t? OUTPUT_BUDGET_PARAMETER_PATTERN.test(param)\n\t\t: OUTPUT_BUDGET_PARAMETER_PATTERN.test(message);\n}\n\nexport function isRetryWorthyOutputBudgetError(assistantMessage: AssistantMessage): boolean {\n\tif (assistantMessage.stopReason !== \"error\" || !assistantMessage.errorMessage) return false;\n\tif (assistantMessage.api !== \"openai-responses\") return false;\n\n\tconst structuredDetails = parseProviderErrorDetails(assistantMessage.errorMessage);\n\tif (structuredDetails && isStructuredOutputBudgetUnderflow(structuredDetails)) return true;\n\n\treturn isOutputBudgetUnderflowText(assistantMessage.errorMessage);\n}\n\nexport function shouldRetryAfterThresholdCompaction(\n\tassistantMessage: AssistantMessage,\n\tdesiredMaxOutput: number,\n\tisLiveTurnCompletion: boolean,\n): boolean {\n\treturn (\n\t\tisRetryWorthyOutputBudgetError(assistantMessage) ||\n\t\t(isLiveTurnCompletion && isOutputCappedLengthStop(assistantMessage, desiredMaxOutput))\n\t);\n}\n\n/**\n * Internal: remove an incomplete assistant from retry context before auto-continuing after compaction.\n */\n\nexport function _dropTrailingAutoCompactionRetryAssistantIfPresent(this: AgentSession): void {\n\tconst messages = this.agent.state.messages;\n\tconst lastMsg = messages[messages.length - 1];\n\tif (lastMsg?.role !== \"assistant\") return;\n\tconst stopReason = (lastMsg as AssistantMessage).stopReason;\n\tif (stopReason === \"error\" || stopReason === \"length\") {\n\t\tthis.agent.state.messages = messages.slice(0, -1);\n\t}\n}\n\n/**\n * Internal: schedule a live post-event continuation after compaction_end listeners can flush queues.\n * The grace period preserves listener ordering. Queue-only probes wait for transient work to become\n * idle, while retry probes remain tied to the turn that scheduled them and are abandoned if another\n * turn owns the agent when the grace period ends.\n */\n\nexport function _schedulePostAutoCompactionContinuationProbe(\n\tthis: AgentSession,\n\t_reason: \"overflow\" | \"threshold\",\n\twillRetry: boolean,\n): void {\n\tconst token = this._postCompactionContinuationToken + 1;\n\tthis._postCompactionContinuationToken = token;\n\tconst fallbackScopeGeneration = this._fallbackOriginGeneration;\n\tlet pending: Promise<void>;\n\tpending = new Promise<void>((resolve) => {\n\t\tsetTimeout(() => {\n\t\t\tvoid (async () => {\n\t\t\t\tconst restoreIfOwned = async (): Promise<void> => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tfallbackScopeGeneration === undefined ||\n\t\t\t\t\t\tthis._fallbackOriginGeneration !== fallbackScopeGeneration ||\n\t\t\t\t\t\ttypeof this._restoreFallbackModel !== \"function\"\n\t\t\t\t\t)\n\t\t\t\t\t\treturn;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this._restoreFallbackModel();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// A listener must not strand the continuation waiter. The model\n\t\t\t\t\t\t// state was already restored before lifecycle notifications ran.\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\ttry {\n\t\t\t\t\tif (willRetry) {\n\t\t\t\t\t\tif (this._postCompactionContinuationToken !== token) return;\n\t\t\t\t\t\tif (this.isCompacting || this.isStreaming) return;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait this.agent.waitForIdle();\n\t\t\t\t\t\tif (this._postCompactionContinuationToken !== token) return;\n\t\t\t\t\t\tif (this.isCompacting || this.isStreaming) return;\n\t\t\t\t\t\tif (!this.agent.hasQueuedMessages()) {\n\t\t\t\t\t\t\tawait restoreIfOwned();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// A queued message starts the next user turn. Restore before\n\t\t\t\t\t\t// Agent snapshots the next request's model.\n\t\t\t\t\t\tawait restoreIfOwned();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._pendingPostCompactionContinuation !== pending) return;\n\t\t\t\t\t// Clear this probe before entering the next run. Its promise is\n\t\t\t\t\t// still awaited by _awaitPendingPostCompactionContinuation, but\n\t\t\t\t\t// the nested agent_end must be free to schedule a new probe.\n\t\t\t\t\tthis._pendingPostCompactionContinuation = undefined;\n\t\t\t\t\tawait this._resumeAfterAutoCompaction();\n\t\t\t\t\tif (willRetry && this._pendingPostCompactionContinuation === undefined) {\n\t\t\t\t\t\tawait restoreIfOwned();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (this._pendingPostCompactionContinuation === pending) {\n\t\t\t\t\t\tthis._pendingPostCompactionContinuation = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t})();\n\t\t}, 100);\n\t});\n\tthis._pendingPostCompactionContinuation = pending;\n}\n\nexport async function _awaitPendingPostCompactionContinuation(this: AgentSession): Promise<void> {\n\tconst pending = this._pendingPostCompactionContinuation;\n\tif (pending === undefined) return;\n\tawait pending;\n}\n\n/**\n * Internal: resume generation after successful auto-compaction only when active work remains.\n */\n\nexport async function _resumeAfterAutoCompaction(this: AgentSession): Promise<void> {\n\ttry {\n\t\tawait this._runAgentContinue();\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthis._emit({\n\t\t\ttype: \"agent_continue_error\",\n\t\t\tsource: \"post_compaction\",\n\t\t\terrorMessage: `Post-compaction continuation failed: ${message}`,\n\t\t});\n\t}\n}\n\n/**\n * Internal: resume a response that reached its requested output cap when the\n * context does not warrant compaction. Bounded so a model that repeatedly\n * stops at that cap can still terminate.\n */\n\nexport function _resumeAfterLengthTruncation(this: AgentSession): void {\n\tif (this._lengthContinuationAttempts >= MAX_LENGTH_CONTINUATION_ATTEMPTS) return;\n\tthis._lengthContinuationAttempts += 1;\n\t// agent.continue() rejects an assistant tail; drop the incomplete\n\t// length-stopped message so the preceding user/tool-result anchors the\n\t// continuation. It remains persisted in session history.\n\tthis._dropTrailingAutoCompactionRetryAssistantIfPresent();\n\tthis._schedulePostAutoCompactionContinuationProbe(\"threshold\", true);\n}\n\n/**\n * Whether an overflow turn is now unrecoverable by compaction, recording it on\n * the session so a configured fallback chain may advance to another candidate.\n */\nfunction overflowUnresolved(this: AgentSession, loadBearing: boolean, aborted = false): boolean | undefined {\n\tif (!loadBearing || aborted) return undefined;\n\tthis._contextOverflowUnresolved = true;\n\treturn true;\n}\n\nexport function hasPendingManualCompactionTakeover(this: AgentSession): boolean {\n\treturn this._compactionReason === \"manual\" && this._compactionAbortController !== undefined;\n}\n\nexport async function _runAutoCompaction(\n\tthis: AgentSession,\n\treason: \"overflow\" | \"threshold\",\n\twillRetry: boolean,\n\turgency: CompactionUrgency = reason === \"overflow\" ? \"load_bearing\" : \"recoverable\",\n): Promise<AutoCompactionRunOutcome> {\n\tif (\n\t\tthis._compactionAbortController !== undefined ||\n\t\tthis._manualCompactionPromise !== undefined ||\n\t\tthis._autoCompactionAbortController !== undefined\n\t)\n\t\treturn \"deferred\";\n\n\tconst controller = new AbortController();\n\tconst completion = createAutoCompactionCompletion();\n\tthis._autoCompactionAbortController = controller;\n\tthis._autoCompactionCompletion = completion.promise;\n\tthis._compactionReason = reason;\n\ttry {\n\t\tthis._emit({ type: \"compaction_start\", reason });\n\t} catch (error) {\n\t\t// A throwing start listener still propagates, matching current behavior,\n\t\t// but must not leave ownership published with no owner running.\n\t\tif (this._autoCompactionAbortController === controller) this._autoCompactionAbortController = undefined;\n\t\tif (this._compactionReason === reason) this._compactionReason = undefined;\n\t\tcompletion.resolve();\n\t\tif (this._autoCompactionCompletion === completion.promise) this._autoCompactionCompletion = undefined;\n\t\tthrow error;\n\t}\n\n\ttry {\n\t\tif (!this.model) {\n\t\t\tconst manualTakeoverPending = hasPendingManualCompactionTakeover.call(this);\n\t\t\tthis._emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason,\n\t\t\t\tresult: undefined,\n\t\t\t\taborted: false,\n\t\t\t\twillRetry: false,\n\t\t\t\tunresolvedOverflow: overflowUnresolved.call(this, urgency === \"load_bearing\"),\n\t\t\t\t...(manualTakeoverPending ? { manualTakeoverPending: true } : {}),\n\t\t\t});\n\t\t\treturn manualTakeoverPending ? \"deferred\" : \"failed\";\n\t\t}\n\n\t\t// Resolve auth only after extension hooks have had an opportunity to cancel\n\t\t// compaction or provide compacted text, so local extension compaction does not\n\t\t// require provider credentials. Missing auth then fails model-driven compaction\n\t\t// before persistence or continuation, matching other provider-call failures.\n\t\tconst result = await this._applyVerbatimCompaction({\n\t\t\tresolvePlannerAuth: async (candidate) => {\n\t\t\t\tconst authResult = await this._getRequiredRequestAuth(candidate);\n\t\t\t\treturn authResult.apiKey || authResult.headers ? authResult : undefined;\n\t\t\t},\n\t\t\tabortController: controller,\n\t\t\tbackupLabel: urgency === \"load_bearing\" ? \"overflow-auto-compact\" : \"auto-compact\",\n\t\t\treason,\n\t\t\turgency,\n\t\t\t// Only an actual context overflow proved the context cannot fit. A\n\t\t\t// recoverable length stop must never reach the fresh-context fallback.\n\t\t\t...(urgency === \"load_bearing\" ? { allowSmallRegion: true } : {}),\n\t\t});\n\t\tif (!result) {\n\t\t\tconst manualTakeoverPending = hasPendingManualCompactionTakeover.call(this);\n\t\t\tthis._emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason,\n\t\t\t\tresult: undefined,\n\t\t\t\taborted: false,\n\t\t\t\twillRetry: false,\n\t\t\t\tunresolvedOverflow: overflowUnresolved.call(this, urgency === \"load_bearing\"),\n\t\t\t\t...(manualTakeoverPending ? { manualTakeoverPending: true } : {}),\n\t\t\t});\n\t\t\treturn manualTakeoverPending ? \"deferred\" : \"not_compactable\";\n\t\t}\n\n\t\tif (willRetry) {\n\t\t\tthis._dropTrailingAutoCompactionRetryAssistantIfPresent();\n\t\t}\n\n\t\tthis._emit({\n\t\t\ttype: \"compaction_end\",\n\t\t\treason,\n\t\t\tresult,\n\t\t\taborted: false,\n\t\t\twillRetry,\n\t\t\t...(hasPendingManualCompactionTakeover.call(this) ? { manualTakeoverPending: true } : {}),\n\t\t});\n\t\tif (!hasPendingManualCompactionTakeover.call(this)) {\n\t\t\tthis._schedulePostAutoCompactionContinuationProbe(reason, willRetry);\n\t\t}\n\t\treturn \"compacted\";\n\t} catch (error) {\n\t\tconst errorMessage = error instanceof Error ? error.message : \"compaction failed\";\n\t\tconst aborted =\n\t\t\terrorMessage === \"Compaction cancelled\" || (error instanceof Error && error.name === \"AbortError\");\n\t\tconst manualTakeoverPending = hasPendingManualCompactionTakeover.call(this);\n\t\tthis._emit({\n\t\t\ttype: \"compaction_end\",\n\t\t\treason,\n\t\t\tresult: undefined,\n\t\t\taborted,\n\t\t\twillRetry: false,\n\t\t\tunresolvedOverflow: overflowUnresolved.call(this, urgency === \"load_bearing\", aborted),\n\t\t\t...(manualTakeoverPending ? { manualTakeoverPending: true } : {}),\n\t\t\terrorMessage: aborted\n\t\t\t\t? undefined\n\t\t\t\t: reason === \"overflow\"\n\t\t\t\t\t? urgency === \"recoverable\"\n\t\t\t\t\t\t? `Response truncation recovery failed: ${errorMessage}`\n\t\t\t\t\t\t: `Context overflow recovery failed: ${errorMessage}`\n\t\t\t\t\t: `Auto-compaction failed: ${errorMessage}`,\n\t\t});\n\t\treturn manualTakeoverPending ? \"deferred\" : \"failed\";\n\t} finally {\n\t\tif (this._autoCompactionAbortController === controller) this._autoCompactionAbortController = undefined;\n\t\tif (this._compactionReason === reason) this._compactionReason = undefined;\n\t\tcompletion.resolve();\n\t\tif (this._autoCompactionCompletion === completion.promise) this._autoCompactionCompletion = undefined;\n\t}\n}\n\n/**\n * Toggle auto-compaction setting.\n */\n\nexport const agentSessionAutoCompactionMethods = {\n\t_awaitPendingPostCompactionContinuation,\n\t_checkCompaction,\n\t_dropTrailingAutoCompactionRetryAssistantIfPresent,\n\t_schedulePostAutoCompactionContinuationProbe,\n\t_resumeAfterAutoCompaction,\n\t_resumeAfterLengthTruncation,\n\t_runAutoCompaction,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-bash.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-bash.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAA6B,MAAM,iBAAiB,CAAC;AAGzG,wBAAsB,WAAW,CAChC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,KAAK,IAAI,EAC7D,OAAO,CAAC,EAAE;IACT,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB,GACC,OAAO,CAAC,UAAU,CAAC,CAkCrB;AAED;;;GAGG;AAEH,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5E,IAAI,CAyBN;AAED,qFAAqF;AACrF,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ/D;AAED,kDAAkD;AAElD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAYlE;AAMD;;GAEG;AAEH,eAAO,MAAM,uBAAuB;;;;;CAKnC,CAAC"}
1
+ {"version":3,"file":"agent-session-bash.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-bash.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAA6B,MAAM,iBAAiB,CAAC;AAIzG,wBAAsB,WAAW,CAChC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,KAAK,IAAI,EAC7D,OAAO,CAAC,EAAE;IACT,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB,GACC,OAAO,CAAC,UAAU,CAAC,CAmCrB;AAED;;;GAGG;AAEH,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5E,IAAI,CAyBN;AAED,qFAAqF;AACrF,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ/D;AAED,kDAAkD;AAElD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAYlE;AAMD;;GAEG;AAEH,eAAO,MAAM,uBAAuB;;;;;CAKnC,CAAC"}
@@ -2,6 +2,7 @@ import { getShellEnv } from "../utils/shell.js";
2
2
  import { executeBashWithOperations } from "./bash-executor.js";
3
3
  import { createLocalBashOperations } from "./tools/bash.js";
4
4
  import { applyBashSessionEnvironment, snapshotBashSessionEnvironment } from "./tools/bash-session-environment.js";
5
+ import { resolveSessionTempDirPath } from "./tools/session-temp-dir.js";
5
6
  export async function executeBash(command, onChunk, options) {
6
7
  const requestKey = options?.id ?? Symbol("bash-request");
7
8
  const abortController = new AbortController();
@@ -23,6 +24,7 @@ export async function executeBash(command, onChunk, options) {
23
24
  signal: abortController.signal,
24
25
  env,
25
26
  pty: options?.pty,
27
+ sessionTempDir: resolveSessionTempDirPath(this.sessionManager.getSessionId()),
26
28
  });
27
29
  if (options?.recordResult !== false)
28
30
  this.recordBashResult(command, result, options);
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-bash.js","sourceRoot":"","sources":["../../src/core/agent-session-bash.ts"],"names":[],"mappings":"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","sourcesContent":["import { getShellEnv } from \"../utils/shell.ts\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport type { BashResult } from \"./bash-executor.ts\";\nimport { executeBashWithOperations } from \"./bash-executor.ts\";\nimport type { BashExecutionMessage } from \"./messages.ts\";\nimport { type BashOperations, type BashOutputChannel, createLocalBashOperations } from \"./tools/bash.ts\";\nimport { applyBashSessionEnvironment, snapshotBashSessionEnvironment } from \"./tools/bash-session-environment.ts\";\n\nexport async function executeBash(\n\tthis: AgentSession,\n\tcommand: string,\n\tonChunk?: (chunk: string, channel: BashOutputChannel) => void,\n\toptions?: {\n\t\texcludeFromContext?: boolean;\n\t\tid?: string;\n\t\toperations?: BashOperations;\n\t\tpty?: boolean;\n\t\temitEvent?: boolean;\n\t\trecordResult?: boolean;\n\t},\n): Promise<BashResult> {\n\tconst requestKey = options?.id ?? Symbol(\"bash-request\");\n\tconst abortController = new AbortController();\n\tthis._bashAbortControllers.set(requestKey, abortController);\n\t// Apply command prefix if configured (e.g., \"shopt -s expand_aliases\" for alias support)\n\tconst prefix = this.settingsManager.getShellCommandPrefix();\n\tconst shellPath = this.settingsManager.getShellPath();\n\tconst resolvedCommand = prefix ? `${prefix}\\n${command}` : command;\n\tconst env = { ...getShellEnv() };\n\tapplyBashSessionEnvironment(env, snapshotBashSessionEnvironment(this, true));\n\n\ttry {\n\t\tconst result = await executeBashWithOperations(\n\t\t\tresolvedCommand,\n\t\t\tthis.sessionManager.getCwd(),\n\t\t\toptions?.operations ?? createLocalBashOperations({ shellPath }),\n\t\t\t{\n\t\t\t\tonChunk: (delta, channel) => {\n\t\t\t\t\tonChunk?.(delta, channel);\n\t\t\t\t\tif (options?.emitEvent !== false) {\n\t\t\t\t\t\tthis._emit({ type: \"bash_execution_update\", id: options?.id, channel, delta });\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsignal: abortController.signal,\n\t\t\t\tenv,\n\t\t\t\tpty: options?.pty,\n\t\t\t},\n\t\t);\n\n\t\tif (options?.recordResult !== false) this.recordBashResult(command, result, options);\n\t\treturn result;\n\t} finally {\n\t\tif (this._bashAbortControllers.get(requestKey) === abortController) this._bashAbortControllers.delete(requestKey);\n\t}\n}\n\n/**\n * Record a bash execution result in session history.\n * Used by executeBash and by extensions that handle bash execution themselves.\n */\n\nexport function recordBashResult(\n\tthis: AgentSession,\n\tcommand: string,\n\tresult: BashResult,\n\toptions?: { excludeFromContext?: boolean; persist?: boolean; defer?: boolean },\n): void {\n\tconst bashMessage: BashExecutionMessage = {\n\t\trole: \"bashExecution\",\n\t\tcommand,\n\t\toutput: result.output,\n\t\texitCode: result.exitCode,\n\t\tcancelled: result.cancelled,\n\t\ttruncated: result.truncated,\n\t\tfullOutputPath: result.fullOutputPath,\n\t\ttimestamp: Date.now(),\n\t\texcludeFromContext: options?.excludeFromContext,\n\t};\n\n\t// If agent is streaming, defer adding to avoid breaking tool_use/tool_result ordering\n\tif (this.isStreaming && options?.defer !== false) {\n\t\t// Queue for later - will be flushed on agent_end\n\t\tthis._pendingBashMessages.push(bashMessage);\n\t} else {\n\t\t// Add to agent state immediately\n\t\tthis.agent.state.messages.push(bashMessage);\n\n\t\t// Avoid writing a source-owned result into a shared manager that an\n\t\t// in-memory fork changed while this execution was active.\n\t\tif (options?.persist !== false) this.sessionManager.appendMessage(bashMessage);\n\t}\n}\n\n/** Cancel one correlated bash request, or all active requests for legacy callers. */\nexport function abortBash(this: AgentSession, id?: string): void {\n\tif (id !== undefined) {\n\t\tthis._bashAbortControllers.get(id)?.abort();\n\t\treturn;\n\t}\n\t// Snapshot first: aborting settles owners, and a listener that removes its own\n\t// entry must not shorten the cancellation sweep.\n\tfor (const controller of [...this._bashAbortControllers.values()]) controller.abort();\n}\n\n/** Whether a bash command is currently running */\n\nexport function _flushPendingBashMessages(this: AgentSession): void {\n\tif (this._pendingBashMessages.length === 0) return;\n\n\tfor (const bashMessage of this._pendingBashMessages) {\n\t\t// Add to agent state\n\t\tthis.agent.state.messages.push(bashMessage);\n\n\t\t// Save to session\n\t\tthis.sessionManager.appendMessage(bashMessage);\n\t}\n\n\tthis._pendingBashMessages = [];\n}\n\n// =========================================================================\n// Session Management\n// =========================================================================\n\n/**\n * Set a display name for the current session.\n */\n\nexport const agentSessionBashMethods = {\n\texecuteBash,\n\trecordBashResult,\n\tabortBash,\n\t_flushPendingBashMessages,\n};\n"]}
1
+ {"version":3,"file":"agent-session-bash.js","sourceRoot":"","sources":["../../src/core/agent-session-bash.ts"],"names":[],"mappings":"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","sourcesContent":["import { getShellEnv } from \"../utils/shell.ts\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport type { BashResult } from \"./bash-executor.ts\";\nimport { executeBashWithOperations } from \"./bash-executor.ts\";\nimport type { BashExecutionMessage } from \"./messages.ts\";\nimport { type BashOperations, type BashOutputChannel, createLocalBashOperations } from \"./tools/bash.ts\";\nimport { applyBashSessionEnvironment, snapshotBashSessionEnvironment } from \"./tools/bash-session-environment.ts\";\nimport { resolveSessionTempDirPath } from \"./tools/session-temp-dir.ts\";\n\nexport async function executeBash(\n\tthis: AgentSession,\n\tcommand: string,\n\tonChunk?: (chunk: string, channel: BashOutputChannel) => void,\n\toptions?: {\n\t\texcludeFromContext?: boolean;\n\t\tid?: string;\n\t\toperations?: BashOperations;\n\t\tpty?: boolean;\n\t\temitEvent?: boolean;\n\t\trecordResult?: boolean;\n\t},\n): Promise<BashResult> {\n\tconst requestKey = options?.id ?? Symbol(\"bash-request\");\n\tconst abortController = new AbortController();\n\tthis._bashAbortControllers.set(requestKey, abortController);\n\t// Apply command prefix if configured (e.g., \"shopt -s expand_aliases\" for alias support)\n\tconst prefix = this.settingsManager.getShellCommandPrefix();\n\tconst shellPath = this.settingsManager.getShellPath();\n\tconst resolvedCommand = prefix ? `${prefix}\\n${command}` : command;\n\tconst env = { ...getShellEnv() };\n\tapplyBashSessionEnvironment(env, snapshotBashSessionEnvironment(this, true));\n\n\ttry {\n\t\tconst result = await executeBashWithOperations(\n\t\t\tresolvedCommand,\n\t\t\tthis.sessionManager.getCwd(),\n\t\t\toptions?.operations ?? createLocalBashOperations({ shellPath }),\n\t\t\t{\n\t\t\t\tonChunk: (delta, channel) => {\n\t\t\t\t\tonChunk?.(delta, channel);\n\t\t\t\t\tif (options?.emitEvent !== false) {\n\t\t\t\t\t\tthis._emit({ type: \"bash_execution_update\", id: options?.id, channel, delta });\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsignal: abortController.signal,\n\t\t\t\tenv,\n\t\t\t\tpty: options?.pty,\n\t\t\t\tsessionTempDir: resolveSessionTempDirPath(this.sessionManager.getSessionId()),\n\t\t\t},\n\t\t);\n\n\t\tif (options?.recordResult !== false) this.recordBashResult(command, result, options);\n\t\treturn result;\n\t} finally {\n\t\tif (this._bashAbortControllers.get(requestKey) === abortController) this._bashAbortControllers.delete(requestKey);\n\t}\n}\n\n/**\n * Record a bash execution result in session history.\n * Used by executeBash and by extensions that handle bash execution themselves.\n */\n\nexport function recordBashResult(\n\tthis: AgentSession,\n\tcommand: string,\n\tresult: BashResult,\n\toptions?: { excludeFromContext?: boolean; persist?: boolean; defer?: boolean },\n): void {\n\tconst bashMessage: BashExecutionMessage = {\n\t\trole: \"bashExecution\",\n\t\tcommand,\n\t\toutput: result.output,\n\t\texitCode: result.exitCode,\n\t\tcancelled: result.cancelled,\n\t\ttruncated: result.truncated,\n\t\tfullOutputPath: result.fullOutputPath,\n\t\ttimestamp: Date.now(),\n\t\texcludeFromContext: options?.excludeFromContext,\n\t};\n\n\t// If agent is streaming, defer adding to avoid breaking tool_use/tool_result ordering\n\tif (this.isStreaming && options?.defer !== false) {\n\t\t// Queue for later - will be flushed on agent_end\n\t\tthis._pendingBashMessages.push(bashMessage);\n\t} else {\n\t\t// Add to agent state immediately\n\t\tthis.agent.state.messages.push(bashMessage);\n\n\t\t// Avoid writing a source-owned result into a shared manager that an\n\t\t// in-memory fork changed while this execution was active.\n\t\tif (options?.persist !== false) this.sessionManager.appendMessage(bashMessage);\n\t}\n}\n\n/** Cancel one correlated bash request, or all active requests for legacy callers. */\nexport function abortBash(this: AgentSession, id?: string): void {\n\tif (id !== undefined) {\n\t\tthis._bashAbortControllers.get(id)?.abort();\n\t\treturn;\n\t}\n\t// Snapshot first: aborting settles owners, and a listener that removes its own\n\t// entry must not shorten the cancellation sweep.\n\tfor (const controller of [...this._bashAbortControllers.values()]) controller.abort();\n}\n\n/** Whether a bash command is currently running */\n\nexport function _flushPendingBashMessages(this: AgentSession): void {\n\tif (this._pendingBashMessages.length === 0) return;\n\n\tfor (const bashMessage of this._pendingBashMessages) {\n\t\t// Add to agent state\n\t\tthis.agent.state.messages.push(bashMessage);\n\n\t\t// Save to session\n\t\tthis.sessionManager.appendMessage(bashMessage);\n\t}\n\n\tthis._pendingBashMessages = [];\n}\n\n// =========================================================================\n// Session Management\n// =========================================================================\n\n/**\n * Set a display name for the current session.\n */\n\nexport const agentSessionBashMethods = {\n\texecuteBash,\n\trecordBashResult,\n\tabortBash,\n\t_flushPendingBashMessages,\n};\n"]}