@bastani/atomic 0.9.4 → 0.9.5-alpha.10

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 (759) hide show
  1. package/CHANGELOG.md +136 -2
  2. package/README.md +2 -2
  3. package/dist/builtin/cursor/CHANGELOG.md +6 -0
  4. package/dist/builtin/cursor/package.json +3 -3
  5. package/dist/builtin/cursor/src/model-mapper.ts +6 -3
  6. package/dist/builtin/intercom/CHANGELOG.md +31 -0
  7. package/dist/builtin/intercom/README.md +29 -21
  8. package/dist/builtin/intercom/broker/broker.ts +9 -120
  9. package/dist/builtin/intercom/broker/client.ts +29 -54
  10. package/dist/builtin/intercom/broker/delivered-message-cache.ts +44 -0
  11. package/dist/builtin/intercom/broker/paths.ts +42 -5
  12. package/dist/builtin/intercom/broker/pending-send-registry.ts +142 -0
  13. package/dist/builtin/intercom/broker/send-handler.ts +106 -0
  14. package/dist/builtin/intercom/broker/send-signature.ts +37 -0
  15. package/dist/builtin/intercom/broker/spawn.ts +78 -10
  16. package/dist/builtin/intercom/config.ts +6 -3
  17. package/dist/builtin/intercom/contact-supervisor-tool.ts +6 -4
  18. package/dist/builtin/intercom/foreground-detach-handoff.ts +136 -0
  19. package/dist/builtin/intercom/index-heavy.ts +50 -54
  20. package/dist/builtin/intercom/index.ts +320 -272
  21. package/dist/builtin/intercom/intercom-tool.ts +9 -3
  22. package/dist/builtin/intercom/lazy-heavy-proxy.ts +114 -0
  23. package/dist/builtin/intercom/lazy-subagent-ack.ts +20 -0
  24. package/dist/builtin/intercom/lazy-tool-execution.ts +39 -0
  25. package/dist/builtin/intercom/lifecycle-lease.ts +51 -0
  26. package/dist/builtin/intercom/lifecycle.ts +37 -20
  27. package/dist/builtin/intercom/package.json +12 -6
  28. package/dist/builtin/intercom/reply-routing.ts +17 -0
  29. package/dist/builtin/intercom/result-renderers.ts +1 -1
  30. package/dist/builtin/intercom/subagent-relay.ts +58 -12
  31. package/dist/builtin/intercom/types.ts +3 -3
  32. package/dist/builtin/intercom/ui/compose.ts +2 -2
  33. package/dist/builtin/intercom/ui/inline-message.ts +2 -2
  34. package/dist/builtin/intercom/ui/session-list.ts +2 -2
  35. package/dist/builtin/mcp/CHANGELOG.md +23 -0
  36. package/dist/builtin/mcp/OAUTH.md +1 -0
  37. package/dist/builtin/mcp/README.md +10 -6
  38. package/dist/builtin/mcp/apps-cancellation.ts +32 -0
  39. package/dist/builtin/mcp/call-tool-result.ts +9 -0
  40. package/dist/builtin/mcp/caller-wait.ts +50 -0
  41. package/dist/builtin/mcp/command-registration.ts +82 -0
  42. package/dist/builtin/mcp/direct-tool-executor.ts +279 -0
  43. package/dist/builtin/mcp/direct-tools.ts +40 -255
  44. package/dist/builtin/mcp/host-html-template.ts +4 -2
  45. package/dist/builtin/mcp/index.ts +274 -239
  46. package/dist/builtin/mcp/init.ts +96 -126
  47. package/dist/builtin/mcp/mcp-auth-flow.ts +247 -237
  48. package/dist/builtin/mcp/mcp-callback-server.ts +89 -68
  49. package/dist/builtin/mcp/mcp-oauth-provider.ts +23 -1
  50. package/dist/builtin/mcp/metadata-hydration.ts +52 -0
  51. package/dist/builtin/mcp/package.json +3 -3
  52. package/dist/builtin/mcp/proxy-auth.ts +4 -4
  53. package/dist/builtin/mcp/proxy-call.ts +111 -40
  54. package/dist/builtin/mcp/proxy-connect.ts +35 -15
  55. package/dist/builtin/mcp/proxy-info-modes.ts +106 -23
  56. package/dist/builtin/mcp/proxy-modes.ts +3 -3
  57. package/dist/builtin/mcp/session-cleanup-barrier.ts +43 -0
  58. package/dist/builtin/mcp/startup-warmup.ts +98 -0
  59. package/dist/builtin/mcp/state-lease.ts +12 -0
  60. package/dist/builtin/mcp/tool-result-renderer.ts +3 -3
  61. package/dist/builtin/mcp/ui-server.ts +8 -8
  62. package/dist/builtin/mcp/ui-session.ts +9 -18
  63. package/dist/builtin/subagents/CHANGELOG.md +60 -0
  64. package/dist/builtin/subagents/README.md +30 -29
  65. package/dist/builtin/subagents/agents/code-simplifier.md +2 -2
  66. package/dist/builtin/subagents/agents/codebase-analyzer.md +2 -2
  67. package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
  68. package/dist/builtin/subagents/agents/codebase-online-researcher.md +2 -2
  69. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
  70. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +2 -2
  71. package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
  72. package/dist/builtin/subagents/agents/debugger.md +2 -2
  73. package/dist/builtin/subagents/agents/worker.md +2 -2
  74. package/dist/builtin/subagents/package.json +5 -5
  75. package/dist/builtin/subagents/prompts/review-loop.md +1 -1
  76. package/dist/builtin/subagents/skills/subagent/SKILL.md +37 -36
  77. package/dist/builtin/subagents/src/extension/api-lifecycle.ts +64 -0
  78. package/dist/builtin/subagents/src/extension/fanout-child.ts +44 -51
  79. package/dist/builtin/subagents/src/extension/index.ts +289 -320
  80. package/dist/builtin/subagents/src/extension/prompt-guidance.ts +7 -10
  81. package/dist/builtin/subagents/src/extension/schemas.ts +22 -5
  82. package/dist/builtin/subagents/src/extension/startup-maintenance.ts +89 -0
  83. package/dist/builtin/subagents/src/extension/tool-description.ts +29 -0
  84. package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +13 -2
  85. package/dist/builtin/subagents/src/intercom/result-intercom.ts +4 -4
  86. package/dist/builtin/subagents/src/runs/background/async-event-journal.ts +106 -0
  87. package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +26 -20
  88. package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +13 -2
  89. package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +3 -0
  90. package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +1 -1
  91. package/dist/builtin/subagents/src/runs/background/completion-claims.ts +189 -0
  92. package/dist/builtin/subagents/src/runs/background/completion-dedupe.ts +44 -7
  93. package/dist/builtin/subagents/src/runs/background/completion-notification.ts +34 -0
  94. package/dist/builtin/subagents/src/runs/background/notify.ts +72 -22
  95. package/dist/builtin/subagents/src/runs/background/result-delivery-processor.ts +232 -0
  96. package/dist/builtin/subagents/src/runs/background/result-file-claims.ts +151 -0
  97. package/dist/builtin/subagents/src/runs/background/result-quarantine.ts +72 -0
  98. package/dist/builtin/subagents/src/runs/background/result-retry-scheduler.ts +48 -0
  99. package/dist/builtin/subagents/src/runs/background/result-status.ts +81 -0
  100. package/dist/builtin/subagents/src/runs/background/result-watcher-data.ts +59 -0
  101. package/dist/builtin/subagents/src/runs/background/result-watcher.ts +177 -233
  102. package/dist/builtin/subagents/src/runs/background/run-id-resolver.ts +3 -2
  103. package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +73 -14
  104. package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +29 -15
  105. package/dist/builtin/subagents/src/runs/background/top-level-async.ts +1 -2
  106. package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +1 -0
  107. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +1 -0
  108. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +1 -0
  109. package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +7 -9
  110. package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +3 -13
  111. package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +2 -15
  112. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +2 -2
  113. package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +63 -46
  114. package/dist/builtin/subagents/src/runs/foreground/execution-detach-reservations.ts +48 -0
  115. package/dist/builtin/subagents/src/runs/foreground/execution-detach-route.ts +17 -0
  116. package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +39 -26
  117. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +3 -1
  118. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +3 -51
  119. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +6 -11
  120. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +11 -2
  121. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +2 -0
  122. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +5 -112
  123. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +2 -0
  124. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +68 -118
  125. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +79 -7
  126. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +2 -2
  127. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +3 -0
  128. package/dist/builtin/subagents/src/runs/shared/pi-args.ts +2 -2
  129. package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +55 -12
  130. package/dist/builtin/subagents/src/shared/artifacts.ts +22 -11
  131. package/dist/builtin/subagents/src/shared/event-jsonl-writer.ts +294 -0
  132. package/dist/builtin/subagents/src/shared/exclusive-file-publication.ts +44 -0
  133. package/dist/builtin/subagents/src/shared/jsonl-writer.ts +1 -0
  134. package/dist/builtin/subagents/src/shared/model-info.ts +2 -2
  135. package/dist/builtin/subagents/src/shared/settings.ts +20 -10
  136. package/dist/builtin/subagents/src/shared/types-async.ts +3 -1
  137. package/dist/builtin/subagents/src/shared/types-config.ts +2 -0
  138. package/dist/builtin/subagents/src/shared/types-runtime.ts +3 -2
  139. package/dist/builtin/subagents/src/slash/slash-commands.ts +9 -12
  140. package/dist/builtin/subagents/src/slash/slash-live-state.ts +63 -32
  141. package/dist/builtin/subagents/src/tui/render-event-formatting.ts +15 -48
  142. package/dist/builtin/subagents/src/tui/render-layout.ts +9 -0
  143. package/dist/builtin/subagents/src/tui/render-result.ts +7 -0
  144. package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -0
  145. package/dist/builtin/subagents/src/tui/render-widget-graph.ts +27 -25
  146. package/dist/builtin/subagents/src/tui/render-widget.ts +177 -132
  147. package/dist/builtin/subagents/src/tui/render.ts +1 -1
  148. package/dist/builtin/web-access/CHANGELOG.md +14 -0
  149. package/dist/builtin/web-access/README.md +4 -0
  150. package/dist/builtin/web-access/content-tools.ts +8 -3
  151. package/dist/builtin/web-access/index-heavy.ts +1 -1
  152. package/dist/builtin/web-access/index.ts +190 -46
  153. package/dist/builtin/web-access/lifecycle-lease.ts +38 -0
  154. package/dist/builtin/web-access/package.json +2 -2
  155. package/dist/builtin/web-access/result-renderers.ts +1 -1
  156. package/dist/builtin/web-access/summary-review.ts +1 -1
  157. package/dist/builtin/web-access/web-search-activity.ts +1 -1
  158. package/dist/builtin/web-access/web-search-return.ts +7 -0
  159. package/dist/builtin/web-access/web-search-summary.ts +1 -1
  160. package/dist/builtin/web-access/web-search-tool.ts +4 -2
  161. package/dist/builtin/workflows/CHANGELOG.md +98 -0
  162. package/dist/builtin/workflows/README.md +20 -16
  163. package/dist/builtin/workflows/builtin/deep-research-codebase-utils.ts +33 -9
  164. package/dist/builtin/workflows/builtin/goal-artifacts.ts +3 -1
  165. package/dist/builtin/workflows/builtin/goal-ledger.ts +3 -0
  166. package/dist/builtin/workflows/builtin/goal-prompts.ts +39 -5
  167. package/dist/builtin/workflows/builtin/goal-reducer.ts +21 -0
  168. package/dist/builtin/workflows/builtin/goal-reports.ts +23 -0
  169. package/dist/builtin/workflows/builtin/goal-review.ts +85 -6
  170. package/dist/builtin/workflows/builtin/goal-runner.ts +122 -49
  171. package/dist/builtin/workflows/builtin/goal-schemas.ts +22 -0
  172. package/dist/builtin/workflows/builtin/goal-types.ts +25 -1
  173. package/dist/builtin/workflows/builtin/goal.d.ts +5 -0
  174. package/dist/builtin/workflows/builtin/goal.ts +13 -2
  175. package/dist/builtin/workflows/builtin/index.d.ts +8 -0
  176. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +16 -5
  177. package/dist/builtin/workflows/builtin/ralph-core.ts +100 -15
  178. package/dist/builtin/workflows/builtin/ralph-models.ts +98 -66
  179. package/dist/builtin/workflows/builtin/ralph-review-gate.ts +37 -5
  180. package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +159 -0
  181. package/dist/builtin/workflows/builtin/ralph-runner.ts +75 -165
  182. package/dist/builtin/workflows/builtin/ralph.d.ts +3 -0
  183. package/dist/builtin/workflows/builtin/ralph.ts +4 -1
  184. package/dist/builtin/workflows/builtin/review-convergence.ts +111 -0
  185. package/dist/builtin/workflows/builtin/shared-prompts.ts +20 -1
  186. package/dist/builtin/workflows/package.json +2 -2
  187. package/dist/builtin/workflows/skills/create-spec/SKILL.md +2 -0
  188. package/dist/builtin/workflows/skills/impeccable/SKILL.md +16 -13
  189. package/dist/builtin/workflows/skills/impeccable/reference/adapt.md +1 -0
  190. package/dist/builtin/workflows/skills/impeccable/reference/adapt.native.md +58 -0
  191. package/dist/builtin/workflows/skills/impeccable/reference/android.md +40 -0
  192. package/dist/builtin/workflows/skills/impeccable/reference/animate.md +2 -0
  193. package/dist/builtin/workflows/skills/impeccable/reference/audit.md +2 -0
  194. package/dist/builtin/workflows/skills/impeccable/reference/audit.native.md +139 -0
  195. package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +69 -62
  196. package/dist/builtin/workflows/skills/impeccable/reference/critique.md +21 -7
  197. package/dist/builtin/workflows/skills/impeccable/reference/document.md +1 -1
  198. package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +92 -0
  199. package/dist/builtin/workflows/skills/impeccable/reference/init.md +29 -7
  200. package/dist/builtin/workflows/skills/impeccable/reference/ios.md +45 -0
  201. package/dist/builtin/workflows/skills/impeccable/reference/layout.md +25 -1
  202. package/dist/builtin/workflows/skills/impeccable/reference/typeset.md +23 -1
  203. package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +2 -1
  204. package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +75 -14
  205. package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +1 -1
  206. package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +31 -0
  207. package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +64 -0
  208. package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +118 -11
  209. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +16 -11
  210. package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +66 -0
  211. package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +42 -10
  212. package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/fonts.mjs +30 -0
  213. package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/page.mjs +4 -6
  214. package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +660 -0
  215. package/dist/builtin/workflows/skills/impeccable/scripts/hook-before-edit.mjs +516 -0
  216. package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +1764 -0
  217. package/dist/builtin/workflows/skills/impeccable/scripts/hook.mjs +61 -0
  218. package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +4 -2
  219. package/dist/builtin/workflows/skills/impeccable/scripts/lib/is-generated.mjs +2 -2
  220. package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-component.mjs +13 -16
  221. package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +17 -11
  222. package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +104 -37
  223. package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +9 -0
  224. package/dist/builtin/workflows/src/durable/backend.ts +12 -0
  225. package/dist/builtin/workflows/src/durable/child-primitive.ts +12 -8
  226. package/dist/builtin/workflows/src/durable/dbos-backend.ts +63 -2
  227. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +28 -0
  228. package/dist/builtin/workflows/src/durable/resume-catalog.ts +12 -0
  229. package/dist/builtin/workflows/src/durable/resume-runtime.ts +5 -2
  230. package/dist/builtin/workflows/src/durable/stage-primitive.ts +167 -28
  231. package/dist/builtin/workflows/src/durable/types.ts +30 -1
  232. package/dist/builtin/workflows/src/engine/primitives/task.ts +3 -1
  233. package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +1 -2
  234. package/dist/builtin/workflows/src/engine/run-returned-status.ts +50 -16
  235. package/dist/builtin/workflows/src/engine/run.ts +32 -32
  236. package/dist/builtin/workflows/src/engine/runtime.ts +5 -0
  237. package/dist/builtin/workflows/src/extension/extension-factory.ts +3 -0
  238. package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +9 -2
  239. package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +137 -27
  240. package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +22 -6
  241. package/dist/builtin/workflows/src/extension/public-types.ts +1 -1
  242. package/dist/builtin/workflows/src/extension/workflow-command-completions.ts +13 -1
  243. package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +19 -4
  244. package/dist/builtin/workflows/src/extension/workflow-command-surfaces.ts +9 -0
  245. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +17 -17
  246. package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +48 -23
  247. package/dist/builtin/workflows/src/extension/workflow-schema.ts +15 -2
  248. package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +20 -8
  249. package/dist/builtin/workflows/src/extension/workflow-tool.ts +24 -8
  250. package/dist/builtin/workflows/src/runs/background/status.ts +4 -3
  251. package/dist/builtin/workflows/src/runs/foreground/executor-continuation.ts +13 -3
  252. package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +29 -8
  253. package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +1 -1
  254. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +8 -0
  255. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +4 -3
  256. package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +2 -0
  257. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +18 -19
  258. package/dist/builtin/workflows/src/runs/foreground/stage-runner-unresolved-overflow.ts +38 -0
  259. package/dist/builtin/workflows/src/runs/foreground/stage-tool-execution-buffer.ts +47 -0
  260. package/dist/builtin/workflows/src/runs/shared/model-fallback-candidates.ts +1 -1
  261. package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +155 -20
  262. package/dist/builtin/workflows/src/runs/shared/worktree-types.ts +6 -0
  263. package/dist/builtin/workflows/src/runs/shared/worktree.ts +2 -1
  264. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +2 -2
  265. package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +2 -2
  266. package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +18 -1
  267. package/dist/builtin/workflows/src/shared/persistence-restore.ts +23 -5
  268. package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +4 -0
  269. package/dist/builtin/workflows/src/shared/resume-continuation.ts +2 -0
  270. package/dist/builtin/workflows/src/shared/returned-run-status.ts +116 -0
  271. package/dist/builtin/workflows/src/shared/workflow-failures-decisions.ts +2 -0
  272. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +21 -3
  273. package/dist/builtin/workflows/src/tui/graph-view-state.ts +3 -0
  274. package/dist/builtin/workflows/src/tui/graph-view-types.ts +3 -0
  275. package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +1 -23
  276. package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +54 -9
  277. package/dist/builtin/workflows/src/tui/stage-chat-view-pending-tools.ts +9 -0
  278. package/dist/builtin/workflows/src/tui/stage-chat-view-render-settings.ts +27 -0
  279. package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +5 -6
  280. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +5 -2
  281. package/dist/builtin/workflows/src/tui/status-list.ts +22 -15
  282. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +4 -4
  283. package/dist/bun/internal-intercom-broker.d.ts +6 -0
  284. package/dist/bun/internal-intercom-broker.d.ts.map +1 -0
  285. package/dist/bun/internal-intercom-broker.js +39 -0
  286. package/dist/bun/internal-intercom-broker.js.map +1 -0
  287. package/dist/bun/split-loader.d.ts +2 -0
  288. package/dist/bun/split-loader.d.ts.map +1 -0
  289. package/dist/bun/split-loader.js +50 -0
  290. package/dist/bun/split-loader.js.map +1 -0
  291. package/dist/cli/args.d.ts.map +1 -1
  292. package/dist/cli/args.js +2 -2
  293. package/dist/cli/args.js.map +1 -1
  294. package/dist/config.d.ts.map +1 -1
  295. package/dist/config.js +6 -4
  296. package/dist/config.js.map +1 -1
  297. package/dist/core/agent-session-auto-compaction.d.ts +26 -6
  298. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  299. package/dist/core/agent-session-auto-compaction.js +178 -19
  300. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  301. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  302. package/dist/core/agent-session-compaction.js +25 -4
  303. package/dist/core/agent-session-compaction.js.map +1 -1
  304. package/dist/core/agent-session-events.d.ts.map +1 -1
  305. package/dist/core/agent-session-events.js +12 -2
  306. package/dist/core/agent-session-events.js.map +1 -1
  307. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  308. package/dist/core/agent-session-extension-bindings.js +1 -1
  309. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  310. package/dist/core/agent-session-message-queue.d.ts.map +1 -1
  311. package/dist/core/agent-session-message-queue.js +1 -1
  312. package/dist/core/agent-session-message-queue.js.map +1 -1
  313. package/dist/core/agent-session-methods.d.ts +13 -4
  314. package/dist/core/agent-session-methods.d.ts.map +1 -1
  315. package/dist/core/agent-session-methods.js.map +1 -1
  316. package/dist/core/agent-session-models.d.ts +2 -2
  317. package/dist/core/agent-session-models.d.ts.map +1 -1
  318. package/dist/core/agent-session-models.js.map +1 -1
  319. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  320. package/dist/core/agent-session-prompt.js +2 -1
  321. package/dist/core/agent-session-prompt.js.map +1 -1
  322. package/dist/core/agent-session-retry.d.ts +2 -0
  323. package/dist/core/agent-session-retry.d.ts.map +1 -1
  324. package/dist/core/agent-session-retry.js +152 -4
  325. package/dist/core/agent-session-retry.js.map +1 -1
  326. package/dist/core/agent-session-services.d.ts +1 -0
  327. package/dist/core/agent-session-services.d.ts.map +1 -1
  328. package/dist/core/agent-session-services.js +4 -2
  329. package/dist/core/agent-session-services.js.map +1 -1
  330. package/dist/core/agent-session-types.d.ts +15 -1
  331. package/dist/core/agent-session-types.d.ts.map +1 -1
  332. package/dist/core/agent-session-types.js +1 -1
  333. package/dist/core/agent-session-types.js.map +1 -1
  334. package/dist/core/agent-session.d.ts +6 -0
  335. package/dist/core/agent-session.d.ts.map +1 -1
  336. package/dist/core/agent-session.js +6 -0
  337. package/dist/core/agent-session.js.map +1 -1
  338. package/dist/core/anthropic-thinking-guard.d.ts +5 -5
  339. package/dist/core/anthropic-thinking-guard.d.ts.map +1 -1
  340. package/dist/core/anthropic-thinking-guard.js +42 -32
  341. package/dist/core/anthropic-thinking-guard.js.map +1 -1
  342. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  343. package/dist/core/atomic-guide-command.js +15 -15
  344. package/dist/core/atomic-guide-command.js.map +1 -1
  345. package/dist/core/auth-storage.d.ts.map +1 -1
  346. package/dist/core/auth-storage.js +14 -9
  347. package/dist/core/auth-storage.js.map +1 -1
  348. package/dist/core/builtin-packages.d.ts.map +1 -1
  349. package/dist/core/builtin-packages.js +8 -4
  350. package/dist/core/builtin-packages.js.map +1 -1
  351. package/dist/core/compaction/compaction.d.ts +2 -0
  352. package/dist/core/compaction/compaction.d.ts.map +1 -1
  353. package/dist/core/compaction/compaction.js +79 -46
  354. package/dist/core/compaction/compaction.js.map +1 -1
  355. package/dist/core/compaction/context-assistant-turns.d.ts +42 -0
  356. package/dist/core/compaction/context-assistant-turns.d.ts.map +1 -0
  357. package/dist/core/compaction/context-assistant-turns.js +87 -0
  358. package/dist/core/compaction/context-assistant-turns.js.map +1 -0
  359. package/dist/core/compaction/context-compaction-critical.d.ts +15 -0
  360. package/dist/core/compaction/context-compaction-critical.d.ts.map +1 -0
  361. package/dist/core/compaction/context-compaction-critical.js +57 -0
  362. package/dist/core/compaction/context-compaction-critical.js.map +1 -0
  363. package/dist/core/compaction/context-compaction-eviction-alternates.d.ts +18 -0
  364. package/dist/core/compaction/context-compaction-eviction-alternates.d.ts.map +1 -0
  365. package/dist/core/compaction/context-compaction-eviction-alternates.js +186 -0
  366. package/dist/core/compaction/context-compaction-eviction-alternates.js.map +1 -0
  367. package/dist/core/compaction/context-compaction-eviction.d.ts +12 -0
  368. package/dist/core/compaction/context-compaction-eviction.d.ts.map +1 -0
  369. package/dist/core/compaction/context-compaction-eviction.js +222 -0
  370. package/dist/core/compaction/context-compaction-eviction.js.map +1 -0
  371. package/dist/core/compaction/context-compaction-prompt.d.ts.map +1 -1
  372. package/dist/core/compaction/context-compaction-prompt.js +1 -1
  373. package/dist/core/compaction/context-compaction-prompt.js.map +1 -1
  374. package/dist/core/compaction/context-compaction-runner.d.ts +7 -1
  375. package/dist/core/compaction/context-compaction-runner.d.ts.map +1 -1
  376. package/dist/core/compaction/context-compaction-runner.js +113 -21
  377. package/dist/core/compaction/context-compaction-runner.js.map +1 -1
  378. package/dist/core/compaction/context-compaction-types.d.ts +2 -0
  379. package/dist/core/compaction/context-compaction-types.d.ts.map +1 -1
  380. package/dist/core/compaction/context-compaction-types.js.map +1 -1
  381. package/dist/core/compaction/context-deletion-application.d.ts +5 -4
  382. package/dist/core/compaction/context-deletion-application.d.ts.map +1 -1
  383. package/dist/core/compaction/context-deletion-application.js +17 -15
  384. package/dist/core/compaction/context-deletion-application.js.map +1 -1
  385. package/dist/core/compaction/context-deletion-store.d.ts.map +1 -1
  386. package/dist/core/compaction/context-deletion-store.js +1 -1
  387. package/dist/core/compaction/context-deletion-store.js.map +1 -1
  388. package/dist/core/compaction/context-deletion-targets.d.ts +2 -1
  389. package/dist/core/compaction/context-deletion-targets.d.ts.map +1 -1
  390. package/dist/core/compaction/context-deletion-targets.js +36 -31
  391. package/dist/core/compaction/context-deletion-targets.js.map +1 -1
  392. package/dist/core/compaction/context-deletion-tool-helpers.d.ts.map +1 -1
  393. package/dist/core/compaction/context-deletion-tool-helpers.js +116 -43
  394. package/dist/core/compaction/context-deletion-tool-helpers.js.map +1 -1
  395. package/dist/core/compaction/context-transcript-analysis.d.ts +4 -2
  396. package/dist/core/compaction/context-transcript-analysis.d.ts.map +1 -1
  397. package/dist/core/compaction/context-transcript-analysis.js +36 -40
  398. package/dist/core/compaction/context-transcript-analysis.js.map +1 -1
  399. package/dist/core/copilot-anthropic-sse-repair.d.ts +23 -0
  400. package/dist/core/copilot-anthropic-sse-repair.d.ts.map +1 -0
  401. package/dist/core/copilot-anthropic-sse-repair.js +340 -0
  402. package/dist/core/copilot-anthropic-sse-repair.js.map +1 -0
  403. package/dist/core/copilot-gemini-reasoning.d.ts +16 -8
  404. package/dist/core/copilot-gemini-reasoning.d.ts.map +1 -1
  405. package/dist/core/copilot-gemini-reasoning.js +27 -22
  406. package/dist/core/copilot-gemini-reasoning.js.map +1 -1
  407. package/dist/core/copilot-hosts.d.ts +12 -0
  408. package/dist/core/copilot-hosts.d.ts.map +1 -0
  409. package/dist/core/copilot-hosts.js +33 -0
  410. package/dist/core/copilot-hosts.js.map +1 -0
  411. package/dist/core/copilot-model-catalog.d.ts.map +1 -1
  412. package/dist/core/copilot-model-catalog.js +3 -2
  413. package/dist/core/copilot-model-catalog.js.map +1 -1
  414. package/dist/core/copilot-model-synthesis.d.ts.map +1 -1
  415. package/dist/core/copilot-model-synthesis.js +3 -1
  416. package/dist/core/copilot-model-synthesis.js.map +1 -1
  417. package/dist/core/extensions/agent-events.d.ts +1 -1
  418. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  419. package/dist/core/extensions/agent-events.js.map +1 -1
  420. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  421. package/dist/core/extensions/loader-core.js +6 -0
  422. package/dist/core/extensions/loader-core.js.map +1 -1
  423. package/dist/core/extensions/loader-virtual-modules.d.ts +8 -1
  424. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  425. package/dist/core/extensions/loader-virtual-modules.js +10 -4
  426. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  427. package/dist/core/extensions/provider-types.d.ts +2 -7
  428. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  429. package/dist/core/extensions/provider-types.js.map +1 -1
  430. package/dist/core/footer-data-provider.d.ts +6 -0
  431. package/dist/core/footer-data-provider.d.ts.map +1 -1
  432. package/dist/core/footer-data-provider.js +72 -29
  433. package/dist/core/footer-data-provider.js.map +1 -1
  434. package/dist/core/http-dispatcher.d.ts.map +1 -1
  435. package/dist/core/http-dispatcher.js +5 -5
  436. package/dist/core/http-dispatcher.js.map +1 -1
  437. package/dist/core/messages.d.ts +9 -0
  438. package/dist/core/messages.d.ts.map +1 -1
  439. package/dist/core/messages.js +100 -18
  440. package/dist/core/messages.js.map +1 -1
  441. package/dist/core/model-registry-builtins.d.ts.map +1 -1
  442. package/dist/core/model-registry-builtins.js +5 -0
  443. package/dist/core/model-registry-builtins.js.map +1 -1
  444. package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
  445. package/dist/core/model-registry-custom-loader.js +49 -8
  446. package/dist/core/model-registry-custom-loader.js.map +1 -1
  447. package/dist/core/model-registry-dynamic.d.ts.map +1 -1
  448. package/dist/core/model-registry-dynamic.js +11 -5
  449. package/dist/core/model-registry-dynamic.js.map +1 -1
  450. package/dist/core/model-registry-loader.d.ts.map +1 -1
  451. package/dist/core/model-registry-loader.js +8 -0
  452. package/dist/core/model-registry-loader.js.map +1 -1
  453. package/dist/core/model-registry-schemas.d.ts +93 -8
  454. package/dist/core/model-registry-schemas.d.ts.map +1 -1
  455. package/dist/core/model-registry-schemas.js +24 -12
  456. package/dist/core/model-registry-schemas.js.map +1 -1
  457. package/dist/core/model-registry-types.d.ts +7 -6
  458. package/dist/core/model-registry-types.d.ts.map +1 -1
  459. package/dist/core/model-registry-types.js.map +1 -1
  460. package/dist/core/model-registry.d.ts +5 -0
  461. package/dist/core/model-registry.d.ts.map +1 -1
  462. package/dist/core/model-registry.js +23 -0
  463. package/dist/core/model-registry.js.map +1 -1
  464. package/dist/core/model-resolver-cli.d.ts.map +1 -1
  465. package/dist/core/model-resolver-cli.js +33 -5
  466. package/dist/core/model-resolver-cli.js.map +1 -1
  467. package/dist/core/model-resolver-initial.d.ts +6 -1
  468. package/dist/core/model-resolver-initial.d.ts.map +1 -1
  469. package/dist/core/model-resolver-initial.js +12 -7
  470. package/dist/core/model-resolver-initial.js.map +1 -1
  471. package/dist/core/model-resolver-scope.d.ts +9 -0
  472. package/dist/core/model-resolver-scope.d.ts.map +1 -1
  473. package/dist/core/model-resolver-scope.js +12 -4
  474. package/dist/core/model-resolver-scope.js.map +1 -1
  475. package/dist/core/model-resolver.d.ts +4 -3
  476. package/dist/core/model-resolver.d.ts.map +1 -1
  477. package/dist/core/model-resolver.js +2 -2
  478. package/dist/core/model-resolver.js.map +1 -1
  479. package/dist/core/openai-responses-payload-sanitizer.d.ts +7 -0
  480. package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -0
  481. package/dist/core/openai-responses-payload-sanitizer.js +74 -0
  482. package/dist/core/openai-responses-payload-sanitizer.js.map +1 -0
  483. package/dist/core/package-manager-auto-resources.d.ts +2 -2
  484. package/dist/core/package-manager-auto-resources.d.ts.map +1 -1
  485. package/dist/core/package-manager-auto-resources.js +32 -52
  486. package/dist/core/package-manager-auto-resources.js.map +1 -1
  487. package/dist/core/package-manager-resolver.d.ts.map +1 -1
  488. package/dist/core/package-manager-resolver.js +23 -14
  489. package/dist/core/package-manager-resolver.js.map +1 -1
  490. package/dist/core/package-manager-resource-collector.d.ts +3 -3
  491. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  492. package/dist/core/package-manager-resource-collector.js +76 -73
  493. package/dist/core/package-manager-resource-collector.js.map +1 -1
  494. package/dist/core/package-manager-resource-files.d.ts +9 -8
  495. package/dist/core/package-manager-resource-files.d.ts.map +1 -1
  496. package/dist/core/package-manager-resource-files.js +92 -81
  497. package/dist/core/package-manager-resource-files.js.map +1 -1
  498. package/dist/core/prompt-templates-async.d.ts +3 -0
  499. package/dist/core/prompt-templates-async.d.ts.map +1 -0
  500. package/dist/core/prompt-templates-async.js +118 -0
  501. package/dist/core/prompt-templates-async.js.map +1 -0
  502. package/dist/core/provider-context-usage.d.ts +11 -0
  503. package/dist/core/provider-context-usage.d.ts.map +1 -0
  504. package/dist/core/provider-context-usage.js +58 -0
  505. package/dist/core/provider-context-usage.js.map +1 -0
  506. package/dist/core/resource-loader-assets.d.ts +3 -3
  507. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  508. package/dist/core/resource-loader-assets.js +66 -83
  509. package/dist/core/resource-loader-assets.js.map +1 -1
  510. package/dist/core/resource-loader-context-files.d.ts +1 -0
  511. package/dist/core/resource-loader-context-files.d.ts.map +1 -1
  512. package/dist/core/resource-loader-context-files.js +13 -10
  513. package/dist/core/resource-loader-context-files.js.map +1 -1
  514. package/dist/core/resource-loader-core.d.ts +1 -1
  515. package/dist/core/resource-loader-core.d.ts.map +1 -1
  516. package/dist/core/resource-loader-core.js +5 -5
  517. package/dist/core/resource-loader-core.js.map +1 -1
  518. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  519. package/dist/core/resource-loader-extensions.js +4 -0
  520. package/dist/core/resource-loader-extensions.js.map +1 -1
  521. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  522. package/dist/core/resource-loader-reload.js +54 -7
  523. package/dist/core/resource-loader-reload.js.map +1 -1
  524. package/dist/core/resource-loader-types.d.ts +7 -1
  525. package/dist/core/resource-loader-types.d.ts.map +1 -1
  526. package/dist/core/resource-loader-types.js.map +1 -1
  527. package/dist/core/sdk-types.d.ts +2 -0
  528. package/dist/core/sdk-types.d.ts.map +1 -1
  529. package/dist/core/sdk-types.js.map +1 -1
  530. package/dist/core/sdk.d.ts.map +1 -1
  531. package/dist/core/sdk.js +9 -6
  532. package/dist/core/sdk.js.map +1 -1
  533. package/dist/core/session-entry-normalization.d.ts +7 -0
  534. package/dist/core/session-entry-normalization.d.ts.map +1 -0
  535. package/dist/core/session-entry-normalization.js +14 -0
  536. package/dist/core/session-entry-normalization.js.map +1 -0
  537. package/dist/core/session-manager-core.d.ts.map +1 -1
  538. package/dist/core/session-manager-core.js +1 -0
  539. package/dist/core/session-manager-core.js.map +1 -1
  540. package/dist/core/session-manager-history.d.ts +2 -2
  541. package/dist/core/session-manager-history.d.ts.map +1 -1
  542. package/dist/core/session-manager-history.js +127 -108
  543. package/dist/core/session-manager-history.js.map +1 -1
  544. package/dist/core/settings-manager-basic-accessors.d.ts +3 -2
  545. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  546. package/dist/core/settings-manager-basic-accessors.js +6 -0
  547. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  548. package/dist/core/settings-manager-core.d.ts.map +1 -1
  549. package/dist/core/settings-manager-core.js +3 -2
  550. package/dist/core/settings-manager-core.js.map +1 -1
  551. package/dist/core/settings-storage.d.ts.map +1 -1
  552. package/dist/core/settings-storage.js +2 -1
  553. package/dist/core/settings-storage.js.map +1 -1
  554. package/dist/core/settings-types.d.ts +2 -1
  555. package/dist/core/settings-types.d.ts.map +1 -1
  556. package/dist/core/settings-types.js.map +1 -1
  557. package/dist/core/skills-async.d.ts +3 -0
  558. package/dist/core/skills-async.d.ts.map +1 -0
  559. package/dist/core/skills-async.js +269 -0
  560. package/dist/core/skills-async.js.map +1 -0
  561. package/dist/core/slash-commands.d.ts +2 -0
  562. package/dist/core/slash-commands.d.ts.map +1 -1
  563. package/dist/core/slash-commands.js +141 -0
  564. package/dist/core/slash-commands.js.map +1 -1
  565. package/dist/core/tools/bash.d.ts.map +1 -1
  566. package/dist/core/tools/bash.js +11 -8
  567. package/dist/core/tools/bash.js.map +1 -1
  568. package/dist/core/trust-manager.d.ts +9 -0
  569. package/dist/core/trust-manager.d.ts.map +1 -1
  570. package/dist/core/trust-manager.js +44 -2
  571. package/dist/core/trust-manager.js.map +1 -1
  572. package/dist/index-extensions.d.ts +1 -1
  573. package/dist/index-extensions.d.ts.map +1 -1
  574. package/dist/index-extensions.js.map +1 -1
  575. package/dist/index.d.ts +2 -1
  576. package/dist/index.d.ts.map +1 -1
  577. package/dist/index.js +2 -1
  578. package/dist/index.js.map +1 -1
  579. package/dist/main-deferred-startup.d.ts +33 -0
  580. package/dist/main-deferred-startup.d.ts.map +1 -0
  581. package/dist/main-deferred-startup.js +44 -0
  582. package/dist/main-deferred-startup.js.map +1 -0
  583. package/dist/main-early-input.d.ts +41 -0
  584. package/dist/main-early-input.d.ts.map +1 -0
  585. package/dist/main-early-input.js +154 -0
  586. package/dist/main-early-input.js.map +1 -0
  587. package/dist/main-session.d.ts.map +1 -1
  588. package/dist/main-session.js +1 -0
  589. package/dist/main-session.js.map +1 -1
  590. package/dist/main.d.ts +0 -6
  591. package/dist/main.d.ts.map +1 -1
  592. package/dist/main.js +47 -39
  593. package/dist/main.js.map +1 -1
  594. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  595. package/dist/modes/interactive/components/chat-session-host-actions.js +0 -1
  596. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  597. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  598. package/dist/modes/interactive/components/chat-session-host-events.js +15 -0
  599. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  600. package/dist/modes/interactive/components/settings-selector-options.d.ts.map +1 -1
  601. package/dist/modes/interactive/components/settings-selector-options.js +3 -1
  602. package/dist/modes/interactive/components/settings-selector-options.js.map +1 -1
  603. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  604. package/dist/modes/interactive/components/thinking-selector.js +2 -1
  605. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  606. package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -1
  607. package/dist/modes/interactive/interactive-agent-events.js +37 -2
  608. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  609. package/dist/modes/interactive/interactive-auth-login.d.ts.map +1 -1
  610. package/dist/modes/interactive/interactive-auth-login.js +0 -1
  611. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  612. package/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
  613. package/dist/modes/interactive/interactive-autocomplete.js +21 -9
  614. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  615. package/dist/modes/interactive/interactive-child-ordering.d.ts +7 -0
  616. package/dist/modes/interactive/interactive-child-ordering.d.ts.map +1 -0
  617. package/dist/modes/interactive/interactive-child-ordering.js +26 -0
  618. package/dist/modes/interactive/interactive-child-ordering.js.map +1 -0
  619. package/dist/modes/interactive/interactive-deferred-startup.d.ts +8 -1
  620. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  621. package/dist/modes/interactive/interactive-deferred-startup.js +86 -26
  622. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  623. package/dist/modes/interactive/interactive-editor-actions.d.ts.map +1 -1
  624. package/dist/modes/interactive/interactive-editor-actions.js +13 -13
  625. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  626. package/dist/modes/interactive/interactive-extension-runtime.d.ts.map +1 -1
  627. package/dist/modes/interactive/interactive-extension-runtime.js +16 -0
  628. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  629. package/dist/modes/interactive/interactive-hotkeys-debug.d.ts.map +1 -1
  630. package/dist/modes/interactive/interactive-hotkeys-debug.js +4 -3
  631. package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -1
  632. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  633. package/dist/modes/interactive/interactive-input-handling.js +360 -230
  634. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  635. package/dist/modes/interactive/interactive-mode-base.d.ts +19 -4
  636. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  637. package/dist/modes/interactive/interactive-mode-base.js +46 -4
  638. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  639. package/dist/modes/interactive/interactive-mode-deps.d.ts +3 -3
  640. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  641. package/dist/modes/interactive/interactive-mode-deps.js +3 -3
  642. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  643. package/dist/modes/interactive/interactive-mode-surface.d.ts +27 -17
  644. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  645. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  646. package/dist/modes/interactive/interactive-mode-types.d.ts +8 -1
  647. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  648. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  649. package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
  650. package/dist/modes/interactive/interactive-model-routing.js +14 -10
  651. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  652. package/dist/modes/interactive/interactive-onboarding.d.ts +0 -9
  653. package/dist/modes/interactive/interactive-onboarding.d.ts.map +1 -1
  654. package/dist/modes/interactive/interactive-onboarding.js +24 -201
  655. package/dist/modes/interactive/interactive-onboarding.js.map +1 -1
  656. package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -1
  657. package/dist/modes/interactive/interactive-process-lifecycle.js +43 -9
  658. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  659. package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -1
  660. package/dist/modes/interactive/interactive-render-chat.js +93 -10
  661. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  662. package/dist/modes/interactive/interactive-resource-disclosure.d.ts.map +1 -1
  663. package/dist/modes/interactive/interactive-resource-disclosure.js +3 -2
  664. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
  665. package/dist/modes/interactive/interactive-resource-rendering.d.ts.map +1 -1
  666. package/dist/modes/interactive/interactive-resource-rendering.js +10 -8
  667. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  668. package/dist/modes/interactive/interactive-session-routing.d.ts.map +1 -1
  669. package/dist/modes/interactive/interactive-session-routing.js +9 -5
  670. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  671. package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -1
  672. package/dist/modes/interactive/interactive-session-runtime.js +1 -1
  673. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  674. package/dist/modes/interactive/interactive-slash-commands.d.ts.map +1 -1
  675. package/dist/modes/interactive/interactive-slash-commands.js +1 -1
  676. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  677. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  678. package/dist/modes/interactive/interactive-startup.js +102 -98
  679. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  680. package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -1
  681. package/dist/modes/interactive/theme/global-theme.js +26 -2
  682. package/dist/modes/interactive/theme/global-theme.js.map +1 -1
  683. package/dist/modes/interactive/theme/theme-class.d.ts +1 -1
  684. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  685. package/dist/modes/interactive/theme/theme-class.js +2 -0
  686. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  687. package/dist/modes/interactive/theme/theme-loading.d.ts +1 -0
  688. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  689. package/dist/modes/interactive/theme/theme-loading.js +3 -0
  690. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  691. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  692. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  693. package/dist/modes/interactive/theme/theme.js +1 -1
  694. package/dist/modes/interactive/theme/theme.js.map +1 -1
  695. package/dist/utils/child-process.d.ts +8 -1
  696. package/dist/utils/child-process.d.ts.map +1 -1
  697. package/dist/utils/child-process.js +39 -6
  698. package/dist/utils/child-process.js.map +1 -1
  699. package/dist/utils/clipboard-image.d.ts.map +1 -1
  700. package/dist/utils/clipboard-image.js +3 -0
  701. package/dist/utils/clipboard-image.js.map +1 -1
  702. package/dist/utils/event-loop.d.ts +7 -0
  703. package/dist/utils/event-loop.d.ts.map +1 -0
  704. package/dist/utils/event-loop.js +14 -0
  705. package/dist/utils/event-loop.js.map +1 -0
  706. package/dist/utils/fs-watch.d.ts +24 -1
  707. package/dist/utils/fs-watch.d.ts.map +1 -1
  708. package/dist/utils/fs-watch.js +60 -5
  709. package/dist/utils/fs-watch.js.map +1 -1
  710. package/dist/utils/json.d.ts +4 -0
  711. package/dist/utils/json.d.ts.map +1 -1
  712. package/dist/utils/json.js +8 -0
  713. package/dist/utils/json.js.map +1 -1
  714. package/dist/utils/module-require.d.ts +11 -0
  715. package/dist/utils/module-require.d.ts.map +1 -1
  716. package/dist/utils/module-require.js +14 -1
  717. package/dist/utils/module-require.js.map +1 -1
  718. package/dist/utils/split-launcher.d.ts +38 -0
  719. package/dist/utils/split-launcher.d.ts.map +1 -0
  720. package/dist/utils/split-launcher.js +63 -0
  721. package/dist/utils/split-launcher.js.map +1 -0
  722. package/docs/changelog.mdx +19 -0
  723. package/docs/compaction.md +100 -64
  724. package/docs/custom-provider.md +18 -5
  725. package/docs/development.md +4 -0
  726. package/docs/extensions.md +11 -2
  727. package/docs/json.md +3 -1
  728. package/docs/keybindings.md +2 -2
  729. package/docs/models.md +69 -10
  730. package/docs/providers.md +3 -2
  731. package/docs/quickstart.md +15 -11
  732. package/docs/rpc.md +5 -3
  733. package/docs/sdk.md +1 -1
  734. package/docs/settings.md +33 -3
  735. package/docs/subagents.md +40 -5
  736. package/docs/terminal-setup.md +4 -0
  737. package/docs/tools.md +1 -1
  738. package/docs/usage.md +8 -6
  739. package/docs/windows.md +4 -0
  740. package/docs/workflows.md +59 -36
  741. package/examples/extensions/preset.ts +2 -2
  742. package/examples/extensions/subagent/README.md +2 -2
  743. package/examples/extensions/subagent/index.ts +1 -2
  744. package/examples/extensions/subagent/schemas.ts +4 -1
  745. package/examples/sdk/12-full-control.ts +1 -1
  746. package/npm-shrinkwrap.json +538 -51
  747. package/package.json +10 -9
  748. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-behavior.ts +0 -75
  749. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-component.ts +0 -202
  750. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-edit.ts +0 -97
  751. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-editor.ts +0 -160
  752. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-frame.ts +0 -72
  753. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-modes.ts +0 -161
  754. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-selectors.ts +0 -203
  755. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-selectors.ts +0 -234
  756. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-state.ts +0 -103
  757. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-types.ts +0 -29
  758. package/dist/builtin/subagents/src/runs/foreground/chain-clarify.ts +0 -9
  759. package/dist/builtin/subagents/src/runs/foreground/chain-execution-clarify.ts +0 -117
@@ -1,154 +1,71 @@
1
- import type { ExtensionAPI, ExtensionContext, HandlerFn, MessageRenderer, RegisteredCommand, ToolDefinition } from "@bastani/atomic";
2
- import { Text } from "@mariozechner/pi-tui";
1
+ import { APP_NAME, getEnvValue, type ExtensionAPI, type ExtensionContext, type SessionStartEvent, type ToolDefinition, type ToolExecutionStartEvent } from "@bastani/atomic";
2
+ import { Text } from "@earendil-works/pi-tui";
3
3
  import { Type } from "typebox";
4
4
  import { renderIntercomToolResult } from "./result-renderers.js";
5
+ import { loadConfig } from "./config.js";
6
+ import { executeHeavyTool, runHeavyCommand, type HeavyHandle } from "./lazy-tool-execution.js";
7
+ import { assertCurrentLifecycleLease, createLifecycleLease, retainSettledLifecycleCleanup, retireLifecycleLease, SerializedLifecycleForwarder, type LifecycleLease } from "./lifecycle-lease.js";
8
+ import { rejectLazyResultRelay } from "./lazy-subagent-ack.js";
9
+ import {
10
+ createForwardedHandlerMap,
11
+ createHeavyProxy,
12
+ dispatchEventHandlers,
13
+ dispatchHandlers,
14
+ type CapturedHeavy,
15
+ type ForwardedEventMap,
16
+ type HeavyRuntimeReadiness,
17
+ type ToolRenderResultArgs,
18
+ } from "./lazy-heavy-proxy.js";
5
19
 
6
- type CapturedCommand = Omit<RegisteredCommand, "name" | "sourceInfo">;
7
- type CapturedShortcut = Parameters<ExtensionAPI["registerShortcut"]>[1];
8
- type EventHandler = Parameters<ExtensionAPI["events"]["on"]>[1];
9
- type ToolRenderResultArgs = Parameters<NonNullable<ToolDefinition["renderResult"]>>;
10
- type CapturedHeavy = {
11
- tools: Map<string, ToolDefinition>;
12
- commands: Map<string, CapturedCommand>;
13
- handlers: Map<string, HandlerFn[]>;
14
- shortcuts: Map<string, CapturedShortcut>;
15
- eventHandlers: Map<string, EventHandler[]>;
16
- };
17
- type LifecycleSnapshot = {
18
- event: unknown;
20
+ type LifecycleSnapshot<K extends keyof ForwardedEventMap> = {
21
+ event: ForwardedEventMap[K];
19
22
  ctx: ExtensionContext;
20
23
  };
21
-
22
- type SessionSnapshot = LifecycleSnapshot & {
23
- generation: number;
24
- };
25
-
24
+ type ShutdownSnapshot = LifecycleSnapshot<"session_shutdown"> & { generation: number };
25
+ type IntercomLease = LifecycleLease<ShutdownSnapshot>;
26
+ type SessionSnapshot = LifecycleSnapshot<"session_start"> & { generation: number; lease: IntercomLease };
27
+ type IntercomHeavyHandle = HeavyHandle<CapturedHeavy>;
28
+ type HeavyAttempt = { lease: IntercomLease; promise: Promise<IntercomHeavyHandle> };
29
+ type ReplayAttempt = { lease: IntercomLease; heavy: CapturedHeavy; promise: Promise<void> };
26
30
  type ActiveLifecycleState = {
27
- turnStart: LifecycleSnapshot | null;
28
- agentStart: LifecycleSnapshot | null;
29
- activeTools: Map<string, LifecycleSnapshot>;
30
- modelSelect: LifecycleSnapshot | null;
31
+ turnStart: LifecycleSnapshot<"turn_start"> | null;
32
+ agentStart: LifecycleSnapshot<"agent_start"> | null;
33
+ activeTools: Map<string, LifecycleSnapshot<"tool_execution_start">>;
34
+ modelSelect: LifecycleSnapshot<"model_select"> | null;
31
35
  };
32
-
33
- type LazyLifecycleEvent =
34
- | "session_start"
35
- | "session_shutdown"
36
- | "turn_start"
37
- | "turn_end"
38
- | "agent_start"
39
- | "agent_end"
40
- | "tool_execution_start"
41
- | "tool_execution_end"
42
- | "model_select";
43
-
44
- const FORWARDED_EVENTS: readonly LazyLifecycleEvent[] = [
45
- "session_start",
46
- "session_shutdown",
47
- "turn_start",
48
- "turn_end",
49
- "agent_start",
50
- "agent_end",
51
- "tool_execution_start",
52
- "tool_execution_end",
53
- "model_select",
54
- ];
55
- const SUBAGENT_CONTROL_INTERCOM_EVENT = "subagent:control-intercom";
56
- const SUBAGENT_RESULT_INTERCOM_EVENT = "subagent:result-intercom";
57
-
58
- function hasSubagentIntercomEnv(): boolean {
59
- return Object.keys(process.env).some((key) => key.endsWith("_SUBAGENT_ORCHESTRATOR_TARGET"));
36
+ interface LightweightIntercomOptions {
37
+ importHeavy?: () => Promise<{ default: (pi: ExtensionAPI) => void | HeavyRuntimeReadiness | Promise<void | HeavyRuntimeReadiness> }>;
38
+ isEnabled?: () => boolean;
60
39
  }
61
40
 
62
- function getToolCallId(event: unknown): string | null {
63
- if (typeof event !== "object" || event === null || !("toolCallId" in event)) return null;
64
- const toolCallId = event.toolCallId;
65
- return typeof toolCallId === "string" ? toolCallId : null;
66
- }
41
+ const MANAGEMENT_ONLY_SUBAGENT_ACTIONS = new Set(["list", "get", "create", "update", "delete", "status", "interrupt", "doctor"]);
67
42
 
68
- function addHandler(captured: CapturedHeavy, event: string, handler: HandlerFn): void {
69
- const handlers = captured.handlers.get(event) ?? [];
70
- handlers.push(handler);
71
- captured.handlers.set(event, handlers);
43
+ function isInteractiveForegroundSubagentStart(event: ToolExecutionStartEvent, ctx: ExtensionContext): boolean {
44
+ if (!ctx.hasUI || event.toolName !== "subagent") return false;
45
+ if (!event.args || typeof event.args !== "object" || Array.isArray(event.args)) return true;
46
+ const args = event.args as { action?: unknown; async?: unknown };
47
+ const action = typeof args.action === "string" ? args.action.trim() : "";
48
+ if (action && MANAGEMENT_ONLY_SUBAGENT_ACTIONS.has(action)) return false;
49
+ return args.async !== true;
72
50
  }
73
51
 
74
- function addEventHandler(captured: CapturedHeavy, event: string, handler: EventHandler): void {
75
- const handlers = captured.eventHandlers.get(event) ?? [];
76
- handlers.push(handler);
77
- captured.eventHandlers.set(event, handlers);
78
- }
79
52
 
80
- async function dispatchHandlers(captured: CapturedHeavy, eventName: string, event: unknown, ctx: ExtensionContext): Promise<void> {
81
- for (const handler of captured.handlers.get(eventName) ?? []) {
82
- await handler(event, ctx);
83
- }
84
- }
53
+ const SUBAGENT_CONTROL_INTERCOM_EVENT = "subagent:control-intercom";
54
+ const SUBAGENT_RESULT_INTERCOM_EVENT = "subagent:result-intercom";
85
55
 
86
- async function dispatchEventHandlers(captured: CapturedHeavy, eventName: string, payload: unknown): Promise<void> {
87
- for (const handler of captured.eventHandlers.get(eventName) ?? []) {
88
- await handler(payload);
89
- }
90
- }
56
+ const SUBAGENT_ENV_PREFIX = `${APP_NAME.toUpperCase()}_SUBAGENT_`;
91
57
 
92
- function createHeavyProxy(pi: ExtensionAPI, captured: CapturedHeavy): ExtensionAPI {
93
- return new Proxy(pi, {
94
- get(target, prop, receiver) {
95
- if (prop === "registerTool") {
96
- return (tool: ToolDefinition) => captured.tools.set(tool.name, tool);
97
- }
98
- if (prop === "registerCommand") {
99
- return (name: string, options: CapturedCommand) => captured.commands.set(name, options);
100
- }
101
- if (prop === "on") {
102
- return (event: string, handler: HandlerFn) => {
103
- addHandler(captured, event, handler);
104
- };
105
- }
106
- if (prop === "registerShortcut") {
107
- return (shortcut: string, options: CapturedShortcut) => {
108
- captured.shortcuts.set(shortcut, options);
109
- };
110
- }
111
- if (prop === "registerMessageRenderer") {
112
- return (customType: string, renderer: MessageRenderer) => pi.registerMessageRenderer(customType, renderer);
113
- }
114
- if (prop === "events") {
115
- return new Proxy(pi.events, {
116
- get(eventTarget, eventProp, eventReceiver) {
117
- if (eventProp === "on") {
118
- return (event: string, handler: EventHandler) => {
119
- addEventHandler(captured, event, handler);
120
- return () => {
121
- const handlers = captured.eventHandlers.get(event) ?? [];
122
- captured.eventHandlers.set(event, handlers.filter((candidate) => candidate !== handler));
123
- };
124
- };
125
- }
126
- return Reflect.get(eventTarget, eventProp, eventReceiver);
127
- },
128
- });
129
- }
130
- return Reflect.get(target, prop, receiver);
131
- },
132
- }) as ExtensionAPI;
58
+ function readSubagentEnv(name: string): string | undefined {
59
+ const value = getEnvValue(`${SUBAGENT_ENV_PREFIX}${name}`)?.trim();
60
+ return value || undefined;
133
61
  }
134
62
 
135
- async function executeHeavyTool(
136
- loadHeavy: (ctx?: ExtensionContext) => Promise<CapturedHeavy>,
137
- name: string,
138
- args: Parameters<NonNullable<ToolDefinition["execute"]>>,
139
- ): Promise<ReturnType<NonNullable<ToolDefinition["execute"]>>> {
140
- const ctx = args[4];
141
- const heavy = await loadHeavy(ctx);
142
- const tool = heavy.tools.get(name);
143
- if (!tool?.execute) throw new Error(`Intercom tool implementation not found: ${name}`);
144
- return tool.execute(...args) as ReturnType<NonNullable<ToolDefinition["execute"]>>;
63
+ function hasSubagentIntercomEnv(): boolean {
64
+ return readSubagentEnv("ORCHESTRATOR_TARGET") !== undefined;
145
65
  }
146
66
 
147
- async function runHeavyCommand(loadHeavy: (ctx?: ExtensionContext) => Promise<CapturedHeavy>, args: string | undefined, ctx: ExtensionContext): Promise<void> {
148
- const heavy = await loadHeavy(ctx);
149
- const command = heavy.commands.get("intercom");
150
- if (!command) throw new Error("Intercom command implementation not found");
151
- await command.handler(args, ctx);
67
+ function createSyntheticSessionStartEvent(): SessionStartEvent {
68
+ return { type: "session_start", reason: "startup" };
152
69
  }
153
70
 
154
71
  function renderHeavyToolResult(loadedHeavy: CapturedHeavy | null, name: string, args: ToolRenderResultArgs): ReturnType<NonNullable<ToolDefinition["renderResult"]>> {
@@ -156,175 +73,307 @@ function renderHeavyToolResult(loadedHeavy: CapturedHeavy | null, name: string,
156
73
  if (renderer) return renderer(...args);
157
74
  return renderIntercomToolResult(name, args);
158
75
  }
159
-
160
- export default function intercom(pi: ExtensionAPI) {
161
- let heavyPromise: Promise<CapturedHeavy> | null = null;
162
- let loadedHeavy: CapturedHeavy | null = null;
76
+ export default function intercom(pi: ExtensionAPI, options: LightweightIntercomOptions = {}) {
77
+ const enabled = options.isEnabled?.() ?? loadConfig().enabled;
78
+ const delegatedSession = hasSubagentIntercomEnv();
79
+ const delegatedSessionName = readSubagentEnv("INTERCOM_SESSION_NAME");
80
+ let heavyAttempt: HeavyAttempt | null = null;
81
+ let loadedHeavy: IntercomHeavyHandle | null = null;
163
82
  let sessionSnapshot: SessionSnapshot | null = null;
164
83
  let lifecycleGeneration = 0;
84
+ let nextLeaseId = 1;
85
+ let activeLease = createLifecycleLease<ShutdownSnapshot>(nextLeaseId++);
165
86
  let replayedGeneration = 0;
87
+ let replayAttempt: ReplayAttempt | null = null;
88
+ const lifecycleForward = new SerializedLifecycleForwarder();
89
+ const invalidatedMessage = "Intercom initialization was invalidated by session shutdown";
166
90
  const activeLifecycle: ActiveLifecycleState = {
167
91
  turnStart: null,
168
92
  agentStart: null,
169
93
  activeTools: new Map(),
170
94
  modelSelect: null,
171
95
  };
172
-
173
- async function replaySessionStart(heavy: CapturedHeavy): Promise<void> {
174
- if (!sessionSnapshot || replayedGeneration === sessionSnapshot.generation) return;
175
- replayedGeneration = sessionSnapshot.generation;
176
- await dispatchHandlers(heavy, "session_start", sessionSnapshot.event, sessionSnapshot.ctx);
177
- if (activeLifecycle.turnStart) {
178
- await dispatchHandlers(heavy, "turn_start", activeLifecycle.turnStart.event, activeLifecycle.turnStart.ctx);
179
- }
180
- if (activeLifecycle.modelSelect) {
181
- await dispatchHandlers(heavy, "model_select", activeLifecycle.modelSelect.event, activeLifecycle.modelSelect.ctx);
182
- }
183
- if (activeLifecycle.agentStart) {
184
- await dispatchHandlers(heavy, "agent_start", activeLifecycle.agentStart.event, activeLifecycle.agentStart.ctx);
185
- }
186
- for (const activeTool of activeLifecycle.activeTools.values()) {
187
- await dispatchHandlers(heavy, "tool_execution_start", activeTool.event, activeTool.ctx);
96
+ function assertLease(lease: IntercomLease): void {
97
+ assertCurrentLifecycleLease(activeLease, lease, invalidatedMessage);
98
+ }
99
+ function createHandle(heavy: CapturedHeavy, lease: IntercomLease): IntercomHeavyHandle {
100
+ return { heavy, assertCurrent: () => assertLease(lease) };
101
+ }
102
+ async function waitForPriorCleanup(lease: IntercomLease): Promise<void> {
103
+ await lease.priorCleanup;
104
+ assertLease(lease);
105
+ }
106
+ function isReplaySnapshotCurrent(snapshot: SessionSnapshot, lease: IntercomLease): boolean {
107
+ assertLease(lease);
108
+ return sessionSnapshot === snapshot;
109
+ }
110
+ async function replaySessionStart(heavy: CapturedHeavy, lease: IntercomLease, onReplay?: (ctx: ExtensionContext) => void): Promise<void> {
111
+ for (;;) {
112
+ assertLease(lease);
113
+ const snapshot = sessionSnapshot;
114
+ if (!snapshot || snapshot.lease !== lease || replayedGeneration === snapshot.generation) return;
115
+ const active = {
116
+ turnStart: activeLifecycle.turnStart,
117
+ modelSelect: activeLifecycle.modelSelect,
118
+ agentStart: activeLifecycle.agentStart,
119
+ activeTools: [...activeLifecycle.activeTools.values()],
120
+ };
121
+ onReplay?.(snapshot.ctx);
122
+ await dispatchHandlers(heavy, "session_start", snapshot.event, snapshot.ctx);
123
+ if (!isReplaySnapshotCurrent(snapshot, lease)) continue;
124
+ if (active.turnStart) await dispatchHandlers(heavy, "turn_start", active.turnStart.event, active.turnStart.ctx);
125
+ if (!isReplaySnapshotCurrent(snapshot, lease)) continue;
126
+ if (active.modelSelect) await dispatchHandlers(heavy, "model_select", active.modelSelect.event, active.modelSelect.ctx);
127
+ if (!isReplaySnapshotCurrent(snapshot, lease)) continue;
128
+ if (active.agentStart) await dispatchHandlers(heavy, "agent_start", active.agentStart.event, active.agentStart.ctx);
129
+ if (!isReplaySnapshotCurrent(snapshot, lease)) continue;
130
+ for (const activeTool of active.activeTools) {
131
+ await dispatchHandlers(heavy, "tool_execution_start", activeTool.event, activeTool.ctx);
132
+ if (!isReplaySnapshotCurrent(snapshot, lease)) break;
133
+ }
134
+ if (!isReplaySnapshotCurrent(snapshot, lease)) continue;
135
+ replayedGeneration = snapshot.generation;
136
+ return;
188
137
  }
189
138
  }
190
-
191
- async function loadHeavy(ctx?: ExtensionContext): Promise<CapturedHeavy> {
192
- if (!heavyPromise) {
193
- heavyPromise = (async () => {
194
- const captured: CapturedHeavy = {
195
- tools: new Map(),
196
- commands: new Map(),
197
- handlers: new Map(),
198
- shortcuts: new Map(),
199
- eventHandlers: new Map(),
200
- };
201
- const mod = await import("./index-heavy.js");
202
- await mod.default(createHeavyProxy(pi, captured));
203
- loadedHeavy = captured;
139
+ async function ensureSessionStartReplayed(heavy: CapturedHeavy, lease: IntercomLease, onReplay?: (ctx: ExtensionContext) => void): Promise<void> {
140
+ await waitForPriorCleanup(lease);
141
+ const snapshot = sessionSnapshot;
142
+ if (!snapshot || snapshot.lease !== lease || replayedGeneration === snapshot.generation) return;
143
+ const existing = replayAttempt;
144
+ if (existing?.lease === lease && existing.heavy === heavy) return existing.promise;
145
+ let promise: Promise<void>;
146
+ promise = lifecycleForward.enqueue(() => replaySessionStart(heavy, lease, onReplay)).finally(() => {
147
+ if (replayAttempt?.promise === promise) replayAttempt = null;
148
+ });
149
+ replayAttempt = { lease, heavy, promise };
150
+ await promise;
151
+ }
152
+ async function loadHeavy(ctx?: ExtensionContext): Promise<IntercomHeavyHandle> {
153
+ const lease = activeLease;
154
+ if (lease.retired) throw new Error("Intercom initialization unavailable: no active session");
155
+ await waitForPriorCleanup(lease);
156
+ const existing = heavyAttempt;
157
+ if (existing?.lease === lease) {
158
+ const handle = await existing.promise;
159
+ assertLease(lease);
160
+ if (!sessionSnapshot && ctx) {
161
+ sessionSnapshot = { event: createSyntheticSessionStartEvent(), ctx, generation: ++lifecycleGeneration, lease };
162
+ }
163
+ await ensureSessionStartReplayed(handle.heavy, lease);
164
+ assertLease(lease);
165
+ return handle;
166
+ }
167
+ let promise: Promise<IntercomHeavyHandle>;
168
+ promise = (async (): Promise<IntercomHeavyHandle> => {
169
+ const captured: CapturedHeavy = {
170
+ tools: new Map(), commands: new Map(), handlers: createForwardedHandlerMap(),
171
+ shortcuts: new Map(), eventHandlers: new Map(),
172
+ };
173
+ let replayCtx: ExtensionContext | null = null;
174
+ let cleaned = false;
175
+ const cleanupCandidate = async (): Promise<void> => {
176
+ const shutdown = lease.shutdown;
177
+ const cleanupCtx = shutdown?.ctx ?? replayCtx;
178
+ if (!cleanupCtx || cleaned) return;
179
+ cleaned = true;
180
+ const event = shutdown?.event ?? { type: "session_shutdown", reason: "quit" };
181
+ try {
182
+ await dispatchHandlers(captured, "session_shutdown", event, cleanupCtx);
183
+ } catch (cleanupError) {
184
+ console.error("Intercom failed to clean rejected lazy candidate:", cleanupError);
185
+ }
186
+ };
187
+ try {
188
+ const mod = await (options.importHeavy?.() ?? import("./index-heavy.js"));
189
+ assertLease(lease);
190
+ const runtimeReadiness = await mod.default(createHeavyProxy(pi, captured));
191
+ if (runtimeReadiness) captured.runtimeReadiness = runtimeReadiness;
192
+ assertLease(lease);
204
193
  if (!sessionSnapshot && ctx) {
205
- sessionSnapshot = { event: {}, ctx, generation: ++lifecycleGeneration };
194
+ sessionSnapshot = { event: createSyntheticSessionStartEvent(), ctx, generation: ++lifecycleGeneration, lease };
206
195
  }
207
- await replaySessionStart(captured);
208
- return captured;
209
- })();
210
- }
211
- const heavy = await heavyPromise;
212
- if (!sessionSnapshot && ctx) {
213
- sessionSnapshot = { event: {}, ctx, generation: ++lifecycleGeneration };
214
- await replaySessionStart(heavy);
215
- }
216
- return heavy;
196
+ await ensureSessionStartReplayed(captured, lease, (replayContext) => { replayCtx = replayContext; });
197
+ assertLease(lease);
198
+ const handle = createHandle(captured, lease);
199
+ loadedHeavy = handle;
200
+ return handle;
201
+ } catch (error) {
202
+ await cleanupCandidate();
203
+ throw error;
204
+ }
205
+ })();
206
+ heavyAttempt = { lease, promise };
207
+ void promise.then(
208
+ () => undefined,
209
+ (error: unknown) => {
210
+ if (heavyAttempt?.promise === promise) heavyAttempt = null;
211
+ const message = error instanceof Error ? error.message : String(error);
212
+ console.error(`Intercom heavy initialization failed; a later call will retry: ${message}`, error);
213
+ },
214
+ );
215
+ return promise;
217
216
  }
218
-
219
- for (const eventName of FORWARDED_EVENTS) {
220
- switch (eventName) {
221
- case "session_start":
222
- pi.on("session_start", async (event, ctx) => {
223
- const generation = ++lifecycleGeneration;
224
- sessionSnapshot = { event, ctx, generation };
225
- if (loadedHeavy) {
226
- replayedGeneration = generation;
227
- await dispatchHandlers(loadedHeavy, "session_start", event, ctx);
228
- }
229
- });
230
- break;
231
- case "session_shutdown":
232
- pi.on("session_shutdown", async (event, ctx) => {
233
- ++lifecycleGeneration;
234
- activeLifecycle.turnStart = null;
235
- activeLifecycle.agentStart = null;
236
- activeLifecycle.activeTools.clear();
237
- activeLifecycle.modelSelect = null;
238
- if (loadedHeavy) {
239
- await dispatchHandlers(loadedHeavy, "session_shutdown", event, ctx);
240
- }
241
- sessionSnapshot = null;
242
- replayedGeneration = lifecycleGeneration;
243
- });
244
- break;
245
- case "turn_start":
246
- pi.on("turn_start", async (event, ctx) => {
247
- activeLifecycle.turnStart = { event, ctx };
248
- if (loadedHeavy) await dispatchHandlers(loadedHeavy, "turn_start", event, ctx);
249
- });
250
- break;
251
- case "turn_end":
252
- pi.on("turn_end", async (event, ctx) => {
253
- activeLifecycle.turnStart = null;
254
- activeLifecycle.agentStart = null;
255
- activeLifecycle.activeTools.clear();
256
- if (loadedHeavy) await dispatchHandlers(loadedHeavy, "turn_end", event, ctx);
257
- });
258
- break;
259
- case "agent_start":
260
- pi.on("agent_start", async (event, ctx) => {
261
- activeLifecycle.agentStart = { event, ctx };
262
- activeLifecycle.activeTools.clear();
263
- if (loadedHeavy) await dispatchHandlers(loadedHeavy, "agent_start", event, ctx);
264
- });
265
- break;
266
- case "agent_end":
267
- pi.on("agent_end", async (event, ctx) => {
268
- activeLifecycle.agentStart = null;
269
- activeLifecycle.activeTools.clear();
270
- if (loadedHeavy) await dispatchHandlers(loadedHeavy, "agent_end", event, ctx);
271
- });
272
- break;
273
- case "tool_execution_start":
274
- pi.on("tool_execution_start", async (event, ctx) => {
275
- const toolCallId = getToolCallId(event);
276
- if (toolCallId) activeLifecycle.activeTools.set(toolCallId, { event, ctx });
277
- if (loadedHeavy) await dispatchHandlers(loadedHeavy, "tool_execution_start", event, ctx);
278
- });
279
- break;
280
- case "tool_execution_end":
281
- pi.on("tool_execution_end", async (event, ctx) => {
282
- const toolCallId = getToolCallId(event);
283
- if (toolCallId) activeLifecycle.activeTools.delete(toolCallId);
284
- if (loadedHeavy) await dispatchHandlers(loadedHeavy, "tool_execution_end", event, ctx);
285
- });
286
- break;
287
- case "model_select":
288
- pi.on("model_select", async (event, ctx) => {
289
- activeLifecycle.modelSelect = { event, ctx };
290
- if (loadedHeavy) await dispatchHandlers(loadedHeavy, "model_select", event, ctx);
291
- });
292
- break;
217
+ async function registerAutomatically(ctx: ExtensionContext, phase: string, foreground = false): Promise<boolean> {
218
+ try {
219
+ const handle = await loadHeavy(ctx);
220
+ const readiness = handle.heavy.runtimeReadiness;
221
+ if (!readiness) throw new Error("Intercom heavy runtime did not expose broker readiness");
222
+ if (readiness.enabled) {
223
+ if (foreground) await readiness.awaitForegroundBrokerReady();
224
+ else await readiness.awaitAutomaticBrokerReady();
225
+ }
226
+ handle.assertCurrent();
227
+ return readiness.enabled;
228
+ } catch (error) {
229
+ const message = error instanceof Error ? error.message : String(error);
230
+ console.error(`Intercom ${phase} failed; session will continue and a later call may retry: ${message}`, error);
231
+ return false;
293
232
  }
294
233
  }
295
-
234
+ pi.on("session_start", async (event, ctx) => {
235
+ if (delegatedSessionName && typeof pi.setSessionName === "function") pi.setSessionName(delegatedSessionName);
236
+ if (activeLease.retired) activeLease = createLifecycleLease<ShutdownSnapshot>(nextLeaseId++, activeLease.cleanupBarrier);
237
+ const lease = activeLease;
238
+ await waitForPriorCleanup(lease);
239
+ if (sessionSnapshot) {
240
+ activeLifecycle.turnStart = null;
241
+ activeLifecycle.agentStart = null;
242
+ activeLifecycle.activeTools.clear();
243
+ activeLifecycle.modelSelect = null;
244
+ }
245
+ const generation = ++lifecycleGeneration;
246
+ sessionSnapshot = { event, ctx, generation, lease };
247
+ if (loadedHeavy) {
248
+ await ensureSessionStartReplayed(loadedHeavy.heavy, lease);
249
+ return;
250
+ }
251
+ if (!enabled || (!ctx.hasUI && !delegatedSession)) return;
252
+ if (delegatedSession) await registerAutomatically(ctx, "bridged child automatic registration");
253
+ });
254
+ pi.on("session_shutdown", async (event, ctx) => {
255
+ const lease = activeLease;
256
+ const generation = ++lifecycleGeneration;
257
+ retireLifecycleLease(lease, { event, ctx, generation });
258
+ const retiredHeavy = loadedHeavy?.heavy ?? null;
259
+ const retiredAttempt = heavyAttempt?.lease === lease ? heavyAttempt.promise : null;
260
+ const retiredReplay = replayAttempt?.lease === lease ? replayAttempt.promise : null;
261
+ sessionSnapshot = null;
262
+ heavyAttempt = null;
263
+ loadedHeavy = null;
264
+ replayAttempt = null;
265
+ replayedGeneration = generation;
266
+ activeLifecycle.turnStart = null;
267
+ activeLifecycle.agentStart = null;
268
+ activeLifecycle.activeTools.clear();
269
+ activeLifecycle.modelSelect = null;
270
+ const publishedCleanup = retiredHeavy
271
+ ? lifecycleForward.enqueue(() => dispatchHandlers(retiredHeavy, "session_shutdown", event, ctx))
272
+ : Promise.resolve();
273
+ const retainedCleanup = retainSettledLifecycleCleanup(lease, [publishedCleanup, retiredAttempt, retiredReplay, lifecycleForward.settled]);
274
+ try {
275
+ await publishedCleanup;
276
+ } finally {
277
+ await retainedCleanup;
278
+ }
279
+ });
280
+ pi.on("turn_start", async (event, ctx) => {
281
+ if (activeLease.retired) return;
282
+ activeLifecycle.turnStart = { event, ctx };
283
+ const heavy = loadedHeavy?.heavy;
284
+ if (heavy) await lifecycleForward.enqueue(() => dispatchHandlers(heavy, "turn_start", event, ctx));
285
+ });
286
+ pi.on("turn_end", async (event, ctx) => {
287
+ if (activeLease.retired) return;
288
+ activeLifecycle.turnStart = null;
289
+ activeLifecycle.agentStart = null;
290
+ activeLifecycle.activeTools.clear();
291
+ const heavy = loadedHeavy?.heavy;
292
+ if (heavy) await lifecycleForward.enqueue(() => dispatchHandlers(heavy, "turn_end", event, ctx));
293
+ });
294
+ pi.on("agent_start", async (event, ctx) => {
295
+ if (activeLease.retired) return;
296
+ activeLifecycle.agentStart = { event, ctx };
297
+ activeLifecycle.activeTools.clear();
298
+ const heavy = loadedHeavy?.heavy;
299
+ if (heavy) await lifecycleForward.enqueue(() => dispatchHandlers(heavy, "agent_start", event, ctx));
300
+ });
301
+ pi.on("agent_end", async (event, ctx) => {
302
+ if (activeLease.retired) return;
303
+ activeLifecycle.agentStart = null;
304
+ activeLifecycle.activeTools.clear();
305
+ const heavy = loadedHeavy?.heavy;
306
+ if (heavy) await lifecycleForward.enqueue(() => dispatchHandlers(heavy, "agent_end", event, ctx));
307
+ });
308
+ pi.on("tool_execution_start", async (event, ctx) => {
309
+ if (activeLease.retired) return;
310
+ const lease = activeLease;
311
+ const toolSnapshot: LifecycleSnapshot<"tool_execution_start"> = { event, ctx };
312
+ activeLifecycle.activeTools.set(event.toolCallId, toolSnapshot);
313
+ if (isInteractiveForegroundSubagentStart(event, ctx) && enabled) {
314
+ const session = sessionSnapshot;
315
+ const warmHeavy = loadedHeavy?.heavy ?? null;
316
+ const warmReplayComplete = warmHeavy !== null
317
+ && session?.lease === lease
318
+ && replayedGeneration === session.generation;
319
+ // Successful readiness gates launch; optional Intercom failures degrade
320
+ // without preventing the subagent tool itself from executing.
321
+ await registerAutomatically(ctx, "foreground parent warmup", true);
322
+ if (warmReplayComplete
323
+ && activeLease === lease
324
+ && !lease.retired
325
+ && sessionSnapshot === session
326
+ && activeLifecycle.activeTools.get(event.toolCallId) === toolSnapshot
327
+ && loadedHeavy?.heavy === warmHeavy) {
328
+ await lifecycleForward.enqueue(() => dispatchHandlers(warmHeavy, "tool_execution_start", event, ctx));
329
+ }
330
+ return; // Cold initialization replay owns this active tool's delivery.
331
+ }
332
+ const heavy = loadedHeavy?.heavy;
333
+ if (heavy) await lifecycleForward.enqueue(() => dispatchHandlers(heavy, "tool_execution_start", event, ctx));
334
+ });
335
+ pi.on("tool_execution_end", async (event, ctx) => {
336
+ if (activeLease.retired) return;
337
+ activeLifecycle.activeTools.delete(event.toolCallId);
338
+ const heavy = loadedHeavy?.heavy;
339
+ if (heavy) await lifecycleForward.enqueue(() => dispatchHandlers(heavy, "tool_execution_end", event, ctx));
340
+ });
341
+ pi.on("model_select", async (event, ctx) => {
342
+ if (activeLease.retired) return;
343
+ activeLifecycle.modelSelect = { event, ctx };
344
+ const heavy = loadedHeavy?.heavy;
345
+ if (heavy) await lifecycleForward.enqueue(() => dispatchHandlers(heavy, "model_select", event, ctx));
346
+ });
296
347
  pi.registerShortcut("alt+m", {
297
348
  description: "Open session intercom overlay",
298
349
  handler: async (ctx) => {
299
- const heavy = await loadHeavy(ctx);
300
- const handler = heavy.shortcuts.get("alt+m")?.handler;
350
+ const handle = await loadHeavy(ctx);
351
+ handle.assertCurrent();
352
+ const handler = handle.heavy.shortcuts.get("alt+m")?.handler;
301
353
  if (!handler) throw new Error("Intercom shortcut implementation not found: alt+m");
302
354
  await handler(ctx);
355
+ handle.assertCurrent();
303
356
  },
304
357
  });
305
-
306
358
  for (const eventName of [SUBAGENT_CONTROL_INTERCOM_EVENT, SUBAGENT_RESULT_INTERCOM_EVENT] as const) {
307
359
  pi.events.on(eventName, (payload) => {
308
- void loadHeavy().then((heavy) => dispatchEventHandlers(heavy, eventName, payload)).catch((error) => {
360
+ void loadHeavy().then(async (handle) => {
361
+ handle.assertCurrent();
362
+ await dispatchEventHandlers(handle.heavy, eventName, payload);
363
+ handle.assertCurrent();
364
+ }).catch((error) => {
365
+ rejectLazyResultRelay(pi, eventName, payload, error);
309
366
  console.error(`Intercom event relay failed (${eventName}):`, error);
310
367
  });
311
368
  });
312
369
  }
313
-
314
- if (hasSubagentIntercomEnv()) {
315
- pi.on("session_start", (_event, ctx) => {
316
- void loadHeavy(ctx).catch((error) => {
317
- console.error("Intercom initialization failed:", error);
318
- });
319
- });
320
- }
321
-
370
+ // Bridged children are registered synchronously by the primary session-start
371
+ // handler, before their first agent turn can send or receive intercom messages.
322
372
  pi.registerTool({
323
373
  name: "intercom",
324
374
  label: "Intercom",
325
- description: `Send a message to another pi session running on this machine.
375
+ description: `Send a message to another local agent session running on this machine.
326
376
  Use this to communicate findings, request help, or coordinate work with other sessions.
327
-
328
377
  Usage:
329
378
  intercom({ action: "list" }) → List active sessions
330
379
  intercom({ action: "send", to: "session-name", message: "..." }) → Send message
@@ -332,7 +381,7 @@ Usage:
332
381
  intercom({ action: "reply", message: "..." }) → Reply to the active/single pending ask
333
382
  intercom({ action: "pending" }) → List unresolved inbound asks
334
383
  intercom({ action: "status" }) → Show connection status`,
335
- promptSnippet: "Use to coordinate with other local pi sessions: list peers, send updates, ask for help, or check intercom connectivity.",
384
+ promptSnippet: "Use to coordinate with other local agent sessions: list peers, send updates, ask for help, or check intercom connectivity.",
336
385
  parameters: Type.Object({
337
386
  action: Type.String({ description: "Action: 'list', 'send', 'ask', 'reply', 'pending', or 'status'" }),
338
387
  to: Type.Optional(Type.String({ description: "Target session name or ID (for 'send', 'ask', or disambiguating 'reply')" })),
@@ -346,14 +395,13 @@ Usage:
346
395
  replyTo: Type.Optional(Type.String({ description: "Message ID to reply to (for threading or responding to an 'ask')" })),
347
396
  }),
348
397
  execute: (...args) => executeHeavyTool(loadHeavy, "intercom", args),
349
- renderResult: (...args) => renderHeavyToolResult(loadedHeavy, "intercom", args),
398
+ renderResult: (...args) => renderHeavyToolResult(loadedHeavy?.heavy ?? null, "intercom", args),
350
399
  renderCall(args, theme) {
351
400
  const input = args as { action?: string; to?: string; message?: string };
352
401
  const target = input.to ? ` ${input.to}` : "";
353
402
  return new Text(theme.fg("toolTitle", theme.bold(`intercom ${input.action ?? ""}`)) + theme.fg("accent", target), 0, 0);
354
403
  },
355
404
  });
356
-
357
405
  if (hasSubagentIntercomEnv()) {
358
406
  pi.registerTool({
359
407
  name: "contact_supervisor",
@@ -387,7 +435,7 @@ Usage:
387
435
  }, { description: "Structured interview request for reason='interview_request'" })),
388
436
  }),
389
437
  execute: (...args) => executeHeavyTool(loadHeavy, "contact_supervisor", args),
390
- renderResult: (...args) => renderHeavyToolResult(loadedHeavy, "contact_supervisor", args),
438
+ renderResult: (...args) => renderHeavyToolResult(loadedHeavy?.heavy ?? null, "contact_supervisor", args),
391
439
  renderCall(args, theme) {
392
440
  const input = args as { reason?: string; message?: string; interview?: { title?: string } };
393
441
  const reason = input.reason ?? "contact";