@bastani/atomic 0.9.14 → 0.9.15

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 (525) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +1 -1
  3. package/dist/builtin/intercom/package.json +2 -2
  4. package/dist/builtin/mcp/CHANGELOG.md +14 -0
  5. package/dist/builtin/mcp/package.json +4 -4
  6. package/dist/builtin/mcp/sampling-handler.ts +2 -2
  7. package/dist/builtin/mcp/types.ts +1 -1
  8. package/dist/builtin/subagents/CHANGELOG.md +40 -0
  9. package/dist/builtin/subagents/README.md +5 -22
  10. package/dist/builtin/subagents/agents/code-simplifier.md +2 -2
  11. package/dist/builtin/subagents/agents/codebase-analyzer.md +2 -2
  12. package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
  13. package/dist/builtin/subagents/agents/codebase-online-researcher.md +2 -2
  14. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
  15. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +2 -2
  16. package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
  17. package/dist/builtin/subagents/agents/worker.md +2 -2
  18. package/dist/builtin/subagents/package.json +4 -4
  19. package/dist/builtin/subagents/skills/subagent/SKILL.md +6 -6
  20. package/dist/builtin/subagents/src/agents/agent-loaders.ts +0 -4
  21. package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +1 -12
  22. package/dist/builtin/subagents/src/agents/agent-management.ts +0 -1
  23. package/dist/builtin/subagents/src/agents/agent-serializer.ts +7 -6
  24. package/dist/builtin/subagents/src/agents/agent-types.ts +0 -1
  25. package/dist/builtin/subagents/src/extension/schemas.ts +2 -2
  26. package/dist/builtin/subagents/src/extension/startup-maintenance.ts +2 -2
  27. package/dist/builtin/subagents/src/intercom/result-intercom.ts +0 -127
  28. package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +1 -3
  29. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +15 -106
  30. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +0 -3
  31. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +2 -13
  32. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +2 -12
  33. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +1 -20
  34. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +0 -6
  35. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +10 -21
  36. package/dist/builtin/subagents/src/runs/inprocess/attempt-handles.ts +104 -0
  37. package/dist/builtin/subagents/src/runs/inprocess/index.ts +10 -21
  38. package/dist/builtin/subagents/src/runs/inprocess/prompt-behavior.ts +2 -3
  39. package/dist/builtin/subagents/src/runs/inprocess/runner.ts +11 -32
  40. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/temp-cleanup.ts +69 -0
  41. package/dist/builtin/subagents/src/shared/model-resolution.ts +1 -1
  42. package/dist/builtin/subagents/src/shared/types-config.ts +0 -4
  43. package/dist/builtin/subagents/src/shared/types-depth.ts +15 -103
  44. package/dist/builtin/subagents/src/shared/types-foreground-state.ts +56 -0
  45. package/dist/builtin/subagents/src/shared/types-results.ts +1 -59
  46. package/dist/builtin/subagents/src/shared/types-runtime.ts +0 -2
  47. package/dist/builtin/subagents/src/shared/types.ts +1 -1
  48. package/dist/builtin/subagents/src/shared/utils.ts +1 -1
  49. package/dist/builtin/subagents/src/slash/slash-live-state.ts +1 -1
  50. package/dist/builtin/web-access/package.json +2 -2
  51. package/dist/builtin/web-access/summary-review.ts +2 -2
  52. package/dist/builtin/web-access/web-search-summary.ts +2 -2
  53. package/dist/builtin/workflows/CHANGELOG.md +30 -0
  54. package/dist/builtin/workflows/README.md +2 -2
  55. package/dist/builtin/workflows/package.json +2 -2
  56. package/dist/builtin/workflows/src/extension/index.bundle.mjs +60473 -401
  57. package/dist/builtin/workflows/src/extension/public-types.ts +1 -1
  58. package/dist/builtin/workflows/src/extension/wiring.ts +1 -1
  59. package/dist/builtin/workflows/src/extension/workflow-heartbeat-delivery.ts +48 -4
  60. package/dist/builtin/workflows/src/extension/workflow-tool.ts +1 -1
  61. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +5 -0
  62. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +35 -2
  63. package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +1 -1
  64. package/dist/builtin/workflows/src/runs/foreground/stage-runner-pause.ts +6 -0
  65. package/dist/builtin/workflows/src/tui/chat-surface-message.ts +15 -13
  66. package/dist/builtin/workflows/src/tui/store-widget-installer.ts +25 -2
  67. package/dist/bun/cli.js +1 -1
  68. package/dist/bun/cli.js.map +1 -1
  69. package/dist/bun/register-bedrock.js +2 -2
  70. package/dist/bun/register-bedrock.js.map +1 -1
  71. package/dist/cli/auth-check.d.ts +1 -1
  72. package/dist/cli/auth-check.d.ts.map +1 -1
  73. package/dist/cli/auth-check.js +1 -1
  74. package/dist/cli/auth-check.js.map +1 -1
  75. package/dist/cli/credential-print.d.ts +1 -1
  76. package/dist/cli/credential-print.d.ts.map +1 -1
  77. package/dist/cli/credential-print.js +2 -2
  78. package/dist/cli/credential-print.js.map +1 -1
  79. package/dist/cli/file-processor.d.ts +1 -1
  80. package/dist/cli/file-processor.d.ts.map +1 -1
  81. package/dist/cli/file-processor.js.map +1 -1
  82. package/dist/cli/initial-message.d.ts +1 -1
  83. package/dist/cli/initial-message.d.ts.map +1 -1
  84. package/dist/cli/initial-message.js.map +1 -1
  85. package/dist/cli/list-models.js.map +1 -1
  86. package/dist/core/agent-session-auto-compaction.d.ts +1 -1
  87. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  88. package/dist/core/agent-session-auto-compaction.js +1 -1
  89. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  90. package/dist/core/agent-session-events.d.ts +1 -1
  91. package/dist/core/agent-session-events.d.ts.map +1 -1
  92. package/dist/core/agent-session-events.js +1 -1
  93. package/dist/core/agent-session-events.js.map +1 -1
  94. package/dist/core/agent-session-export.js.map +1 -1
  95. package/dist/core/agent-session-extension-bindings.js +1 -1
  96. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  97. package/dist/core/agent-session-message-queue.d.ts +1 -1
  98. package/dist/core/agent-session-message-queue.d.ts.map +1 -1
  99. package/dist/core/agent-session-message-queue.js.map +1 -1
  100. package/dist/core/agent-session-methods.d.ts +2 -2
  101. package/dist/core/agent-session-methods.d.ts.map +1 -1
  102. package/dist/core/agent-session-methods.js.map +1 -1
  103. package/dist/core/agent-session-models.d.ts +2 -2
  104. package/dist/core/agent-session-models.d.ts.map +1 -1
  105. package/dist/core/agent-session-models.js +2 -2
  106. package/dist/core/agent-session-models.js.map +1 -1
  107. package/dist/core/agent-session-prompt.d.ts +1 -1
  108. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  109. package/dist/core/agent-session-prompt.js.map +1 -1
  110. package/dist/core/agent-session-retry.d.ts +1 -1
  111. package/dist/core/agent-session-retry.d.ts.map +1 -1
  112. package/dist/core/agent-session-retry.js +1 -1
  113. package/dist/core/agent-session-retry.js.map +1 -1
  114. package/dist/core/agent-session-runtime-auth.js +1 -1
  115. package/dist/core/agent-session-runtime-auth.js.map +1 -1
  116. package/dist/core/agent-session-runtime.d.ts +1 -1
  117. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  118. package/dist/core/agent-session-runtime.js +1 -1
  119. package/dist/core/agent-session-runtime.js.map +1 -1
  120. package/dist/core/agent-session-services.d.ts +1 -1
  121. package/dist/core/agent-session-services.d.ts.map +1 -1
  122. package/dist/core/agent-session-services.js.map +1 -1
  123. package/dist/core/agent-session-state.d.ts +1 -1
  124. package/dist/core/agent-session-state.d.ts.map +1 -1
  125. package/dist/core/agent-session-state.js.map +1 -1
  126. package/dist/core/agent-session-tree.js.map +1 -1
  127. package/dist/core/agent-session-types.d.ts +1 -1
  128. package/dist/core/agent-session-types.d.ts.map +1 -1
  129. package/dist/core/agent-session-types.js.map +1 -1
  130. package/dist/core/agent-session.d.ts +1 -1
  131. package/dist/core/agent-session.d.ts.map +1 -1
  132. package/dist/core/agent-session.js.map +1 -1
  133. package/dist/core/anthropic-thinking-guard.d.ts +1 -1
  134. package/dist/core/anthropic-thinking-guard.d.ts.map +1 -1
  135. package/dist/core/anthropic-thinking-guard.js +1 -1
  136. package/dist/core/anthropic-thinking-guard.js.map +1 -1
  137. package/dist/core/auth-storage.d.ts +1 -1
  138. package/dist/core/auth-storage.d.ts.map +1 -1
  139. package/dist/core/auth-storage.js.map +1 -1
  140. package/dist/core/cache-stats.d.ts +1 -1
  141. package/dist/core/cache-stats.d.ts.map +1 -1
  142. package/dist/core/cache-stats.js.map +1 -1
  143. package/dist/core/cloudflare-gateway-binding.d.ts +1 -1
  144. package/dist/core/cloudflare-gateway-binding.d.ts.map +1 -1
  145. package/dist/core/cloudflare-gateway-binding.js +1 -1
  146. package/dist/core/cloudflare-gateway-binding.js.map +1 -1
  147. package/dist/core/codex-fast-mode.d.ts +2 -2
  148. package/dist/core/codex-fast-mode.d.ts.map +1 -1
  149. package/dist/core/codex-fast-mode.js +3 -2
  150. package/dist/core/codex-fast-mode.js.map +1 -1
  151. package/dist/core/compaction/branch-summarization.d.ts +2 -2
  152. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  153. package/dist/core/compaction/branch-summarization.js +2 -2
  154. package/dist/core/compaction/branch-summarization.js.map +1 -1
  155. package/dist/core/compaction/compaction-runner.d.ts +2 -2
  156. package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
  157. package/dist/core/compaction/compaction-runner.js.map +1 -1
  158. package/dist/core/compaction/compaction-types.d.ts +2 -2
  159. package/dist/core/compaction/compaction-types.d.ts.map +1 -1
  160. package/dist/core/compaction/compaction-types.js.map +1 -1
  161. package/dist/core/compaction/compaction.d.ts +1 -1
  162. package/dist/core/compaction/compaction.d.ts.map +1 -1
  163. package/dist/core/compaction/compaction.js.map +1 -1
  164. package/dist/core/compaction/fallback-planner.d.ts +1 -1
  165. package/dist/core/compaction/fallback-planner.d.ts.map +1 -1
  166. package/dist/core/compaction/fallback-planner.js.map +1 -1
  167. package/dist/core/compaction/planner-outcome.d.ts +1 -1
  168. package/dist/core/compaction/planner-outcome.d.ts.map +1 -1
  169. package/dist/core/compaction/planner-outcome.js +1 -1
  170. package/dist/core/compaction/planner-outcome.js.map +1 -1
  171. package/dist/core/compaction/range-planner-diagnostics.d.ts +1 -1
  172. package/dist/core/compaction/range-planner-diagnostics.d.ts.map +1 -1
  173. package/dist/core/compaction/range-planner-diagnostics.js +1 -1
  174. package/dist/core/compaction/range-planner-diagnostics.js.map +1 -1
  175. package/dist/core/compaction/range-planner.d.ts +2 -2
  176. package/dist/core/compaction/range-planner.d.ts.map +1 -1
  177. package/dist/core/compaction/range-planner.js +2 -2
  178. package/dist/core/compaction/range-planner.js.map +1 -1
  179. package/dist/core/compaction/session-summarization.d.ts +2 -2
  180. package/dist/core/compaction/session-summarization.d.ts.map +1 -1
  181. package/dist/core/compaction/session-summarization.js +2 -2
  182. package/dist/core/compaction/session-summarization.js.map +1 -1
  183. package/dist/core/compaction/transcript-serialization.d.ts +1 -1
  184. package/dist/core/compaction/transcript-serialization.d.ts.map +1 -1
  185. package/dist/core/compaction/transcript-serialization.js.map +1 -1
  186. package/dist/core/compaction/utils.d.ts +1 -1
  187. package/dist/core/compaction/utils.d.ts.map +1 -1
  188. package/dist/core/compaction/utils.js.map +1 -1
  189. package/dist/core/experimental.d.ts +1 -1
  190. package/dist/core/experimental.d.ts.map +1 -1
  191. package/dist/core/experimental.js.map +1 -1
  192. package/dist/core/export-html/tool-renderer.js.map +1 -1
  193. package/dist/core/extensions/agent-events.d.ts +2 -2
  194. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  195. package/dist/core/extensions/agent-events.js.map +1 -1
  196. package/dist/core/extensions/api-types.d.ts +2 -2
  197. package/dist/core/extensions/api-types.d.ts.map +1 -1
  198. package/dist/core/extensions/api-types.js.map +1 -1
  199. package/dist/core/extensions/context-types.d.ts +1 -7
  200. package/dist/core/extensions/context-types.d.ts.map +1 -1
  201. package/dist/core/extensions/context-types.js.map +1 -1
  202. package/dist/core/extensions/event-results.d.ts +1 -1
  203. package/dist/core/extensions/event-results.d.ts.map +1 -1
  204. package/dist/core/extensions/event-results.js.map +1 -1
  205. package/dist/core/extensions/index.d.ts +1 -1
  206. package/dist/core/extensions/index.d.ts.map +1 -1
  207. package/dist/core/extensions/index.js.map +1 -1
  208. package/dist/core/extensions/loader-api.js.map +1 -1
  209. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  210. package/dist/core/extensions/loader-virtual-modules.js +21 -9
  211. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  212. package/dist/core/extensions/provider-types.d.ts +2 -2
  213. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  214. package/dist/core/extensions/provider-types.js.map +1 -1
  215. package/dist/core/extensions/reactive-widget.d.ts +6 -0
  216. package/dist/core/extensions/reactive-widget.d.ts.map +1 -1
  217. package/dist/core/extensions/reactive-widget.js +62 -6
  218. package/dist/core/extensions/reactive-widget.js.map +1 -1
  219. package/dist/core/extensions/runner-context.d.ts +1 -1
  220. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  221. package/dist/core/extensions/runner-context.js.map +1 -1
  222. package/dist/core/extensions/runner-events.d.ts +1 -1
  223. package/dist/core/extensions/runner-events.d.ts.map +1 -1
  224. package/dist/core/extensions/runner-events.js.map +1 -1
  225. package/dist/core/extensions/runner.d.ts +2 -2
  226. package/dist/core/extensions/runner.d.ts.map +1 -1
  227. package/dist/core/extensions/runner.js.map +1 -1
  228. package/dist/core/extensions/runtime-types.d.ts +2 -2
  229. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  230. package/dist/core/extensions/runtime-types.js.map +1 -1
  231. package/dist/core/extensions/tool-events.d.ts +1 -1
  232. package/dist/core/extensions/tool-events.d.ts.map +1 -1
  233. package/dist/core/extensions/tool-events.js.map +1 -1
  234. package/dist/core/extensions/tool-types.d.ts +2 -2
  235. package/dist/core/extensions/tool-types.d.ts.map +1 -1
  236. package/dist/core/extensions/tool-types.js.map +1 -1
  237. package/dist/core/extensions/ui-types.d.ts +2 -0
  238. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  239. package/dist/core/extensions/ui-types.js.map +1 -1
  240. package/dist/core/fallback-models.d.ts +1 -1
  241. package/dist/core/fallback-models.d.ts.map +1 -1
  242. package/dist/core/fallback-models.js.map +1 -1
  243. package/dist/core/http-dispatcher.d.ts.map +1 -1
  244. package/dist/core/http-dispatcher.js +14 -0
  245. package/dist/core/http-dispatcher.js.map +1 -1
  246. package/dist/core/messages.d.ts +1 -1
  247. package/dist/core/messages.d.ts.map +1 -1
  248. package/dist/core/messages.js.map +1 -1
  249. package/dist/core/model-capabilities.d.ts +1 -1
  250. package/dist/core/model-capabilities.d.ts.map +1 -1
  251. package/dist/core/model-capabilities.js.map +1 -1
  252. package/dist/core/model-fallback-failures.d.ts.map +1 -1
  253. package/dist/core/model-fallback-failures.js +18 -1
  254. package/dist/core/model-fallback-failures.js.map +1 -1
  255. package/dist/core/model-registry.d.ts +1 -1
  256. package/dist/core/model-registry.d.ts.map +1 -1
  257. package/dist/core/model-registry.js.map +1 -1
  258. package/dist/core/model-resolver-cli.js.map +1 -1
  259. package/dist/core/model-resolver-defaults.d.ts +1 -1
  260. package/dist/core/model-resolver-defaults.d.ts.map +1 -1
  261. package/dist/core/model-resolver-defaults.js +1 -1
  262. package/dist/core/model-resolver-defaults.js.map +1 -1
  263. package/dist/core/model-resolver-initial.d.ts +1 -1
  264. package/dist/core/model-resolver-initial.d.ts.map +1 -1
  265. package/dist/core/model-resolver-initial.js.map +1 -1
  266. package/dist/core/model-resolver-patterns.d.ts +1 -1
  267. package/dist/core/model-resolver-patterns.d.ts.map +1 -1
  268. package/dist/core/model-resolver-patterns.js.map +1 -1
  269. package/dist/core/model-resolver-scope.d.ts +1 -1
  270. package/dist/core/model-resolver-scope.d.ts.map +1 -1
  271. package/dist/core/model-resolver-scope.js +1 -1
  272. package/dist/core/model-resolver-scope.js.map +1 -1
  273. package/dist/core/model-resolver-types.d.ts +1 -1
  274. package/dist/core/model-resolver-types.d.ts.map +1 -1
  275. package/dist/core/model-resolver-types.js.map +1 -1
  276. package/dist/core/model-runtime-auth.d.ts +1 -1
  277. package/dist/core/model-runtime-auth.d.ts.map +1 -1
  278. package/dist/core/model-runtime-auth.js.map +1 -1
  279. package/dist/core/model-runtime-providers.d.ts +2 -2
  280. package/dist/core/model-runtime-providers.d.ts.map +1 -1
  281. package/dist/core/model-runtime-providers.js +2 -2
  282. package/dist/core/model-runtime-providers.js.map +1 -1
  283. package/dist/core/model-runtime-restoration.d.ts +1 -1
  284. package/dist/core/model-runtime-restoration.d.ts.map +1 -1
  285. package/dist/core/model-runtime-restoration.js.map +1 -1
  286. package/dist/core/model-runtime-snapshot.d.ts +1 -1
  287. package/dist/core/model-runtime-snapshot.d.ts.map +1 -1
  288. package/dist/core/model-runtime-snapshot.js.map +1 -1
  289. package/dist/core/model-runtime-streaming.d.ts +1 -1
  290. package/dist/core/model-runtime-streaming.d.ts.map +1 -1
  291. package/dist/core/model-runtime-streaming.js +1 -1
  292. package/dist/core/model-runtime-streaming.js.map +1 -1
  293. package/dist/core/model-runtime-types.d.ts +1 -1
  294. package/dist/core/model-runtime-types.d.ts.map +1 -1
  295. package/dist/core/model-runtime-types.js.map +1 -1
  296. package/dist/core/model-runtime.d.ts +8 -1
  297. package/dist/core/model-runtime.d.ts.map +1 -1
  298. package/dist/core/model-runtime.js +15 -3
  299. package/dist/core/model-runtime.js.map +1 -1
  300. package/dist/core/models-store.d.ts +1 -1
  301. package/dist/core/models-store.d.ts.map +1 -1
  302. package/dist/core/models-store.js.map +1 -1
  303. package/dist/core/oauth-login.d.ts +1 -1
  304. package/dist/core/oauth-login.d.ts.map +1 -1
  305. package/dist/core/oauth-login.js.map +1 -1
  306. package/dist/core/oauth-provider-metadata.d.ts +1 -1
  307. package/dist/core/oauth-provider-metadata.d.ts.map +1 -1
  308. package/dist/core/oauth-provider-metadata.js.map +1 -1
  309. package/dist/core/openai-responses-payload-sanitizer.d.ts +1 -1
  310. package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -1
  311. package/dist/core/openai-responses-payload-sanitizer.js.map +1 -1
  312. package/dist/core/provider-attribution.d.ts +1 -1
  313. package/dist/core/provider-attribution.d.ts.map +1 -1
  314. package/dist/core/provider-attribution.js.map +1 -1
  315. package/dist/core/provider-composer-internal.d.ts +1 -1
  316. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  317. package/dist/core/provider-composer-internal.js.map +1 -1
  318. package/dist/core/provider-composer.d.ts +1 -1
  319. package/dist/core/provider-composer.d.ts.map +1 -1
  320. package/dist/core/provider-composer.js +2 -2
  321. package/dist/core/provider-composer.js.map +1 -1
  322. package/dist/core/provider-context-usage.d.ts.map +1 -1
  323. package/dist/core/provider-context-usage.js.map +1 -1
  324. package/dist/core/remote-catalog-provider.d.ts +1 -1
  325. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  326. package/dist/core/remote-catalog-provider.js.map +1 -1
  327. package/dist/core/runtime-credentials.d.ts +1 -1
  328. package/dist/core/runtime-credentials.d.ts.map +1 -1
  329. package/dist/core/runtime-credentials.js.map +1 -1
  330. package/dist/core/sdk-types.d.ts +1 -1
  331. package/dist/core/sdk-types.d.ts.map +1 -1
  332. package/dist/core/sdk-types.js.map +1 -1
  333. package/dist/core/sdk.d.ts +1 -1
  334. package/dist/core/sdk.d.ts.map +1 -1
  335. package/dist/core/sdk.js +30 -6
  336. package/dist/core/sdk.js.map +1 -1
  337. package/dist/core/session-manager-core.d.ts +2 -2
  338. package/dist/core/session-manager-core.d.ts.map +1 -1
  339. package/dist/core/session-manager-core.js.map +1 -1
  340. package/dist/core/session-manager-entries.d.ts +1 -1
  341. package/dist/core/session-manager-entries.d.ts.map +1 -1
  342. package/dist/core/session-manager-entries.js.map +1 -1
  343. package/dist/core/session-manager-list.js.map +1 -1
  344. package/dist/core/session-manager-types.d.ts +1 -1
  345. package/dist/core/session-manager-types.d.ts.map +1 -1
  346. package/dist/core/session-manager-types.js.map +1 -1
  347. package/dist/core/session-manager-validation.js +1 -1
  348. package/dist/core/session-manager-validation.js.map +1 -1
  349. package/dist/core/settings-manager-basic-accessors.d.ts +1 -0
  350. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  351. package/dist/core/settings-manager-basic-accessors.js +11 -0
  352. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  353. package/dist/core/settings-types.d.ts +2 -1
  354. package/dist/core/settings-types.d.ts.map +1 -1
  355. package/dist/core/settings-types.js.map +1 -1
  356. package/dist/core/summarization-retry.d.ts +1 -1
  357. package/dist/core/summarization-retry.d.ts.map +1 -1
  358. package/dist/core/summarization-retry.js.map +1 -1
  359. package/dist/core/tools/bash-session-environment.d.ts +1 -1
  360. package/dist/core/tools/bash-session-environment.d.ts.map +1 -1
  361. package/dist/core/tools/bash-session-environment.js.map +1 -1
  362. package/dist/core/tools/oversized-tool-result.d.ts +1 -1
  363. package/dist/core/tools/oversized-tool-result.d.ts.map +1 -1
  364. package/dist/core/tools/oversized-tool-result.js.map +1 -1
  365. package/dist/core/tools/read-url.d.ts +1 -1
  366. package/dist/core/tools/read-url.d.ts.map +1 -1
  367. package/dist/core/tools/read-url.js.map +1 -1
  368. package/dist/core/tools/read.d.ts.map +1 -1
  369. package/dist/core/tools/read.js.map +1 -1
  370. package/dist/core/tools/render-utils.d.ts +1 -1
  371. package/dist/core/tools/render-utils.d.ts.map +1 -1
  372. package/dist/core/tools/render-utils.js.map +1 -1
  373. package/dist/core/tools/resource-selectors.d.ts +1 -1
  374. package/dist/core/tools/resource-selectors.d.ts.map +1 -1
  375. package/dist/core/tools/resource-selectors.js +2 -7
  376. package/dist/core/tools/resource-selectors.js.map +1 -1
  377. package/dist/core/typebox-compat.js +1 -1
  378. package/dist/core/typebox-compat.js.map +1 -1
  379. package/dist/core/usage-totals.d.ts +1 -1
  380. package/dist/core/usage-totals.d.ts.map +1 -1
  381. package/dist/core/usage-totals.js.map +1 -1
  382. package/dist/extensions/llama/provider.d.ts +1 -1
  383. package/dist/extensions/llama/provider.d.ts.map +1 -1
  384. package/dist/extensions/llama/provider.js +1 -1
  385. package/dist/extensions/llama/provider.js.map +1 -1
  386. package/dist/main-app-mode.d.ts +1 -1
  387. package/dist/main-app-mode.d.ts.map +1 -1
  388. package/dist/main-app-mode.js.map +1 -1
  389. package/dist/main-session-options.js +1 -1
  390. package/dist/main-session-options.js.map +1 -1
  391. package/dist/modes/interactive/components/assistant-message.d.ts +1 -1
  392. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  393. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  394. package/dist/modes/interactive/components/chat-message-renderer.d.ts +1 -1
  395. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  396. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  397. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  398. package/dist/modes/interactive/components/login-dialog.d.ts +1 -1
  399. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  400. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  401. package/dist/modes/interactive/components/model-selector.d.ts +1 -1
  402. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  403. package/dist/modes/interactive/components/model-selector.js +1 -1
  404. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  405. package/dist/modes/interactive/components/scoped-models-selector.d.ts +1 -1
  406. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  407. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  408. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  409. package/dist/modes/interactive/components/settings-selector-types.d.ts +1 -1
  410. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  411. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  412. package/dist/modes/interactive/interactive-auth-routing.js +1 -1
  413. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  414. package/dist/modes/interactive/interactive-deferred-startup.js +1 -1
  415. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  416. package/dist/modes/interactive/interactive-extension-context.js +26 -0
  417. package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
  418. package/dist/modes/interactive/interactive-extension-runtime.js +7 -2
  419. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  420. package/dist/modes/interactive/interactive-mode-base.d.ts +1 -0
  421. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  422. package/dist/modes/interactive/interactive-mode-base.js +1 -0
  423. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  424. package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
  425. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  426. package/dist/modes/interactive/interactive-mode-deps.js +1 -1
  427. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  428. package/dist/modes/interactive/interactive-mode-helpers.js +1 -1
  429. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  430. package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -0
  431. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  432. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  433. package/dist/modes/interactive/model-catalog-refresh.d.ts +1 -1
  434. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -1
  435. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -1
  436. package/dist/modes/interactive/streaming-assistant-message.d.ts +1 -1
  437. package/dist/modes/interactive/streaming-assistant-message.d.ts.map +1 -1
  438. package/dist/modes/interactive/streaming-assistant-message.js.map +1 -1
  439. package/dist/modes/interactive-engine/engine-custom-ui.d.ts +3 -0
  440. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  441. package/dist/modes/interactive-engine/engine-custom-ui.js +26 -3
  442. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  443. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  444. package/dist/modes/interactive-engine/remote-component.d.ts +2 -1
  445. package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
  446. package/dist/modes/interactive-engine/remote-component.js +14 -0
  447. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  448. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  449. package/dist/modes/json-event.d.ts +1 -1
  450. package/dist/modes/json-event.d.ts.map +1 -1
  451. package/dist/modes/json-event.js.map +1 -1
  452. package/dist/modes/print-mode.d.ts +1 -1
  453. package/dist/modes/print-mode.d.ts.map +1 -1
  454. package/dist/modes/print-mode.js.map +1 -1
  455. package/dist/modes/rpc/rpc-client-api.d.ts +2 -2
  456. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  457. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  458. package/dist/modes/rpc/rpc-client.d.ts +1 -1
  459. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  460. package/dist/modes/rpc/rpc-client.js.map +1 -1
  461. package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
  462. package/dist/modes/rpc/rpc-extension-ui.js +4 -1
  463. package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
  464. package/dist/modes/rpc/rpc-provider-auth.d.ts +1 -1
  465. package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
  466. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  467. package/dist/modes/rpc/rpc-types.d.ts +2 -2
  468. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  469. package/dist/modes/rpc/rpc-types.js.map +1 -1
  470. package/dist/utils/tool-result-images.d.ts +1 -1
  471. package/dist/utils/tool-result-images.d.ts.map +1 -1
  472. package/dist/utils/tool-result-images.js.map +1 -1
  473. package/docs/custom-provider.md +11 -8
  474. package/docs/development.md +0 -2
  475. package/docs/extensions.md +2 -2
  476. package/docs/json.md +1 -1
  477. package/docs/models/artificial-analysis-index.md +2 -2
  478. package/docs/models/model-selection.md +8 -8
  479. package/docs/models/pareto-efficiency.md +10 -10
  480. package/docs/models.md +9 -3
  481. package/docs/packages.md +1 -1
  482. package/docs/providers.md +5 -3
  483. package/docs/quickstart.md +1 -1
  484. package/docs/rpc.md +1 -1
  485. package/docs/sdk.md +2 -2
  486. package/docs/session-format.md +2 -2
  487. package/docs/settings.md +2 -1
  488. package/docs/subagents.md +5 -6
  489. package/docs/tui.md +3 -0
  490. package/docs/workflows.md +3 -1
  491. package/examples/extensions/README.md +1 -1
  492. package/examples/extensions/custom-footer.ts +1 -1
  493. package/examples/extensions/custom-provider-anthropic/index.ts +1 -1
  494. package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
  495. package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
  496. package/examples/extensions/handoff.ts +2 -2
  497. package/examples/extensions/hello.ts +1 -1
  498. package/examples/extensions/plan-mode/index.ts +1 -1
  499. package/examples/extensions/preset.ts +1 -1
  500. package/examples/extensions/qna.ts +1 -1
  501. package/examples/extensions/subagent/display.ts +1 -1
  502. package/examples/extensions/subagent/runner.ts +1 -1
  503. package/examples/extensions/subagent/types.ts +1 -1
  504. package/examples/extensions/summarize.ts +2 -2
  505. package/examples/extensions/tool-override.ts +1 -1
  506. package/examples/sdk/02-custom-model.ts +1 -1
  507. package/examples/sdk/12-full-control.ts +1 -1
  508. package/examples/sdk/README.md +1 -1
  509. package/npm-shrinkwrap.json +54 -31
  510. package/package.json +3 -3
  511. package/dist/builtin/subagents/src/extension/fanout-child.ts +0 -259
  512. package/dist/builtin/subagents/src/runs/inprocess/nested-routing.ts +0 -218
  513. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-api.ts +0 -55
  514. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-control.ts +0 -178
  515. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-core.ts +0 -187
  516. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-paths.ts +0 -57
  517. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-projection.ts +0 -42
  518. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-registry.ts +0 -352
  519. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-rendering.ts +0 -136
  520. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-sanitize.ts +0 -252
  521. package/dist/builtin/subagents/src/shared/types-nested.ts +0 -127
  522. package/dist/core/copilot-env-routing.d.ts +0 -36
  523. package/dist/core/copilot-env-routing.d.ts.map +0 -1
  524. package/dist/core/copilot-env-routing.js +0 -94
  525. package/dist/core/copilot-env-routing.js.map +0 -1
@@ -1,259 +0,0 @@
1
- import * as fs from "node:fs";
2
- import * as os from "node:os";
3
- import * as path from "node:path";
4
- import type { ExtensionAPI, ToolDefinition } from "@bastani/atomic";
5
- import { APP_NAME } from "@bastani/atomic";
6
-
7
- import { discoverAgents } from "../agents/agents.js";
8
- import { resolveSubagentIntercomTarget } from "../intercom/intercom-bridge.js";
9
- import { deliverSubagentIntercomMessageEvent } from "../intercom/result-intercom.js";
10
- import { createSubagentExecutor, type SubagentParamsLike } from "../runs/foreground/subagent-executor.js";
11
- import type { ChildModePolicy } from "../runs/inprocess/child-policy.js";
12
- import { hasInProcessNestedRoute, subscribeInProcessControlRequests } from "../runs/inprocess/nested-routing.js";
13
- import {
14
- type NestedRoute,
15
- readNestedControlRequests,
16
- resolveNestedRouteFromEnv,
17
- writeNestedControlResult,
18
- } from "../runs/inprocess/runtime-support/nested-api.js";
19
- import { getArtifactsDir } from "../shared/artifacts.js";
20
- import type { Details, SubagentState } from "../shared/types.js";
21
- import { beginApiLifecycle } from "./api-lifecycle.js";
22
- import { loadConfig } from "./config.js";
23
- import { SubagentParams } from "./schemas.js";
24
-
25
- function getSubagentSessionRoot(parentSessionFile: string | null): string {
26
- if (parentSessionFile) {
27
- const baseName = path.basename(parentSessionFile, ".jsonl");
28
- const sessionsDir = path.dirname(parentSessionFile);
29
- return path.join(sessionsDir, baseName);
30
- }
31
- return fs.mkdtempSync(path.join(os.tmpdir(), `${APP_NAME}-subagent-session-`));
32
- }
33
-
34
- function expandTilde(p: string): string {
35
- return p.startsWith("~/") ? path.join(os.homedir(), p.slice(2)) : p;
36
- }
37
-
38
- export function createChildSafeState(): SubagentState {
39
- return {
40
- baseCwd: "",
41
- currentSessionId: null,
42
- subagentInProgress: false,
43
- foregroundRuns: new Map(),
44
- foregroundControls: new Map(),
45
- lastForegroundControlId: null,
46
- pendingForegroundControlNotices: new Map(),
47
- lastUiContext: null,
48
- };
49
- }
50
-
51
- const MAX_SEEN_REQUEST_IDS = 1024;
52
- const TRIMMED_SEEN_REQUEST_IDS = 512;
53
- const MAX_PENDING_RESULTS = 256;
54
- const MAX_PENDING_RESULT_ATTEMPTS = 10;
55
- const MAX_PENDING_RESULT_AGE_MS = 60_000;
56
- type NestedControlResultPayload = Parameters<typeof writeNestedControlResult>[1];
57
-
58
- interface PendingControlResult {
59
- result: NestedControlResultPayload;
60
- firstFailureAt: number;
61
- attempts: number;
62
- }
63
-
64
- function rememberSeenRequest(seen: Set<string>, requestId: string): void {
65
- seen.add(requestId);
66
- if (seen.size <= MAX_SEEN_REQUEST_IDS) return;
67
- const keep = [...seen].slice(-TRIMMED_SEEN_REQUEST_IDS);
68
- seen.clear();
69
- for (const id of keep) seen.add(id);
70
- }
71
-
72
- function dropControlRequestFile(filePath: string, requestId: string): void {
73
- try {
74
- fs.unlinkSync(filePath);
75
- } catch (error) {
76
- console.error(`Failed to remove processed nested control request '${requestId}' at '${filePath}':`, error);
77
- }
78
- }
79
-
80
- function shouldDropPendingResult(pending: PendingControlResult, pendingSize: number, now: number): boolean {
81
- return (
82
- pending.attempts >= MAX_PENDING_RESULT_ATTEMPTS ||
83
- now - pending.firstFailureAt >= MAX_PENDING_RESULT_AGE_MS ||
84
- pendingSize > MAX_PENDING_RESULTS
85
- );
86
- }
87
-
88
- function buildNestedControlResult(
89
- pi: ExtensionAPI,
90
- state: SubagentState,
91
- request: ReturnType<typeof readNestedControlRequests>[number],
92
- ): Promise<NestedControlResultPayload> {
93
- return (async () => {
94
- let ok = false;
95
- let message = "Control request failed.";
96
- try {
97
- const control = state.foregroundControls.get(request.targetRunId);
98
- if (!control) {
99
- message = `Nested run ${request.targetRunId} is not active in this fanout child.`;
100
- } else if (request.action === "interrupt") {
101
- ok = control.interrupt?.() === true;
102
- message = ok
103
- ? `Interrupt requested for nested run ${request.targetRunId}.`
104
- : `Nested run ${request.targetRunId} has no active child step to interrupt.`;
105
- } else if (!request.message?.trim()) {
106
- message = "Nested resume requires message.";
107
- } else if (!control.currentAgent) {
108
- message = `Nested run ${request.targetRunId} has no active child message route.`;
109
- } else {
110
- const index = control.currentIndex ?? 0;
111
- const target = resolveSubagentIntercomTarget(request.targetRunId, control.currentAgent, index);
112
- ok = await deliverSubagentIntercomMessageEvent(
113
- pi.events,
114
- target,
115
- `Follow-up for nested run ${request.targetRunId} (${control.currentAgent}):\n\n${request.message.trim()}`,
116
- 500,
117
- { source: "nested-resume", runId: request.targetRunId, agent: control.currentAgent, index },
118
- );
119
- message = ok
120
- ? `Delivered follow-up to live nested run ${request.targetRunId}.`
121
- : `Nested child intercom target is not registered: ${target}`;
122
- }
123
- } catch (error) {
124
- message = error instanceof Error ? error.message : String(error);
125
- }
126
- return { ts: Date.now(), requestId: request.requestId, targetRunId: request.targetRunId, ok, message };
127
- })();
128
- }
129
-
130
- const nestedControlListenerCleanups = new WeakMap<ExtensionAPI, () => void>();
131
-
132
- export function stopNestedControlInboxListener(pi: ExtensionAPI): void {
133
- nestedControlListenerCleanups.get(pi)?.();
134
- nestedControlListenerCleanups.delete(pi);
135
- }
136
-
137
- export function startNestedControlInboxListener(pi: ExtensionAPI, state: SubagentState): (() => void) | undefined {
138
- stopNestedControlInboxListener(pi);
139
- let route: NestedRoute | undefined;
140
- try {
141
- route = resolveNestedRouteFromEnv();
142
- } catch {
143
- return undefined;
144
- }
145
- if (!route) return undefined;
146
- const seen = new Set<string>();
147
- const inFlight = new Set<string>();
148
- const pendingResults = new Map<string, PendingControlResult>();
149
- const processRequest = (request: ReturnType<typeof readNestedControlRequests>[number]): void => {
150
- if (seen.has(request.requestId) || inFlight.has(request.requestId)) return;
151
- inFlight.add(request.requestId);
152
- void (async () => {
153
- try {
154
- const pending = pendingResults.get(request.requestId);
155
- const result = pending?.result ?? (await buildNestedControlResult(pi, state, request));
156
- try {
157
- writeNestedControlResult(route!, result);
158
- } catch (error) {
159
- const now = Date.now();
160
- const nextPending: PendingControlResult = {
161
- result,
162
- firstFailureAt: pending?.firstFailureAt ?? now,
163
- attempts: (pending?.attempts ?? 0) + 1,
164
- };
165
- pendingResults.set(request.requestId, nextPending);
166
- if (shouldDropPendingResult(nextPending, pendingResults.size, now)) {
167
- pendingResults.delete(request.requestId);
168
- rememberSeenRequest(seen, request.requestId);
169
- dropControlRequestFile(request.filePath, request.requestId);
170
- console.error(
171
- `Dropping nested control result for request '${request.requestId}' targeting '${request.targetRunId}' after ${nextPending.attempts} failed writes via inbox '${route!.controlInbox}':`,
172
- error,
173
- );
174
- } else if (nextPending.attempts === 1) {
175
- console.error(
176
- `Failed to write nested control result for request '${request.requestId}' targeting '${request.targetRunId}' via inbox '${route!.controlInbox}'; keeping request for retry:`,
177
- error,
178
- );
179
- }
180
- return;
181
- }
182
- pendingResults.delete(request.requestId);
183
- rememberSeenRequest(seen, request.requestId);
184
- dropControlRequestFile(request.filePath, request.requestId);
185
- } finally {
186
- inFlight.delete(request.requestId);
187
- }
188
- })();
189
- };
190
- const processPending = (): void => {
191
- for (const request of readNestedControlRequests(route!)) processRequest(request);
192
- };
193
- processPending();
194
- const memoryCleanup = hasInProcessNestedRoute(route)
195
- ? subscribeInProcessControlRequests(route, processRequest)
196
- : undefined;
197
- let watcher: fs.FSWatcher | undefined;
198
- if (!memoryCleanup) {
199
- try {
200
- watcher = fs.watch(route.controlInbox, { persistent: false }, () => processPending());
201
- } catch (error) {
202
- console.error(`Failed to watch nested control inbox '${route.controlInbox}':`, error);
203
- }
204
- }
205
- const cleanup = () => {
206
- memoryCleanup?.();
207
- watcher?.close();
208
- if (nestedControlListenerCleanups.get(pi) === cleanup) nestedControlListenerCleanups.delete(pi);
209
- };
210
- nestedControlListenerCleanups.set(pi, cleanup);
211
- return cleanup;
212
- }
213
-
214
- export default function registerFanoutChildSubagentExtension(pi: ExtensionAPI, childPolicy?: ChildModePolicy): void {
215
- if (!childPolicy?.fanoutAuthorized) return;
216
-
217
- const lifecycle = beginApiLifecycle(pi);
218
-
219
- try {
220
- const config = loadConfig();
221
- const state = createChildSafeState();
222
- let nestedListenerCleanup: (() => void) | undefined;
223
- const executor = createSubagentExecutor({
224
- pi,
225
- state,
226
- config,
227
- tempArtifactsDir: getArtifactsDir(null),
228
- getSubagentSessionRoot,
229
- expandTilde,
230
- discoverAgents,
231
- childPolicy,
232
- allowMutatingManagementActions: childPolicy ? childPolicy.managementActions === "full" : false,
233
- });
234
- lifecycle.setCleanup(() => nestedListenerCleanup?.());
235
-
236
- const tool: ToolDefinition<typeof SubagentParams, Details> = {
237
- name: "subagent",
238
- label: "Subagent",
239
- description: [
240
- "Delegate to subagents from child-safe fanout mode.",
241
- "Execution calls always start non-interactively.",
242
- "Allowed management/control actions: list, get, status, interrupt, resume, doctor.",
243
- "Agent config mutation actions create, update, and delete are blocked in this mode.",
244
- ].join("\n"),
245
- parameters: SubagentParams,
246
- execute(id, params, signal, onUpdate, ctx) {
247
- const executionSignal = signal ?? ctx.signal ?? new AbortController().signal;
248
- return executor.execute(id, params as SubagentParamsLike, executionSignal, onUpdate, ctx);
249
- },
250
- };
251
-
252
- pi.registerTool(tool);
253
- nestedListenerCleanup = startNestedControlInboxListener(pi, state);
254
- pi.on?.("session_shutdown", () => lifecycle.dispose());
255
- } catch (error) {
256
- lifecycle.dispose();
257
- throw error;
258
- }
259
- }
@@ -1,218 +0,0 @@
1
- /**
2
- * In-process nested routing and control registry.
3
- *
4
- * Routes still expose the file-backed shape for compatibility with cold starts and
5
- * older sessions, but a live host registers the same route here. Live children are
6
- * addressed by their run id or canonical task path, so control never needs a
7
- * request file, an inherited capability-token environment variable, or a poller.
8
- */
9
-
10
- export interface InProcessNestedRouteKey {
11
- readonly rootRunId: string;
12
- readonly capabilityToken: string;
13
- }
14
-
15
- export interface InProcessControlRequest {
16
- readonly type: "subagent.nested.control-request";
17
- readonly rootRunId: string;
18
- readonly capabilityToken: string;
19
- readonly ts: number;
20
- readonly requestId: string;
21
- readonly targetRunId: string;
22
- readonly action: "interrupt" | "resume";
23
- readonly message?: string;
24
- readonly filePath: string;
25
- }
26
-
27
- export interface InProcessControlResult {
28
- readonly ts: number;
29
- readonly requestId: string;
30
- readonly targetRunId: string;
31
- readonly ok: boolean;
32
- readonly message: string;
33
- readonly filePath?: string;
34
- }
35
-
36
- export interface InProcessNestedResumeOutcome {
37
- readonly status: "ok" | "error" | "interrupted" | "continued";
38
- readonly path: string;
39
- readonly sessionFile?: string;
40
- readonly envelope?: string;
41
- }
42
-
43
- export interface InProcessNestedAttemptHandle {
44
- readonly runId: string;
45
- readonly path: string;
46
- readonly status: () => string;
47
- readonly interrupt: () => Promise<void>;
48
- readonly resume: (message: string) => Promise<InProcessNestedResumeOutcome>;
49
- }
50
-
51
- interface RouteState {
52
- readonly key: InProcessNestedRouteKey;
53
- readonly events: object[];
54
- readonly controlRequests: Map<string, InProcessControlRequest>;
55
- readonly controlResults: Map<string, InProcessControlResult>;
56
- readonly listeners: Set<(request: InProcessControlRequest) => void | Promise<void>>;
57
- }
58
-
59
- const routeStates = new Map<string, RouteState>();
60
- const attemptHandles = new Map<string, Map<string, InProcessNestedAttemptHandle>>();
61
-
62
- function routeKey(route: InProcessNestedRouteKey): string {
63
- return `${route.rootRunId}\u0000${route.capabilityToken}`;
64
- }
65
-
66
- function attemptKey(id: string): string {
67
- return id.trim();
68
- }
69
-
70
- function stateFor(route: InProcessNestedRouteKey): RouteState | undefined {
71
- return routeStates.get(routeKey(route));
72
- }
73
-
74
- export function registerInProcessNestedRoute(route: InProcessNestedRouteKey): void {
75
- const key = routeKey(route);
76
- if (!routeStates.has(key)) {
77
- routeStates.set(key, {
78
- key: { rootRunId: route.rootRunId, capabilityToken: route.capabilityToken },
79
- events: [],
80
- controlRequests: new Map(),
81
- controlResults: new Map(),
82
- listeners: new Set(),
83
- });
84
- }
85
- }
86
-
87
- export function unregisterInProcessNestedRoute(route: InProcessNestedRouteKey): void {
88
- routeStates.delete(routeKey(route));
89
- }
90
-
91
- export function hasInProcessNestedRoute(route: InProcessNestedRouteKey): boolean {
92
- return stateFor(route) !== undefined;
93
- }
94
-
95
- export function appendInProcessNestedEvent(route: InProcessNestedRouteKey, event: object): void {
96
- const state = stateFor(route);
97
- if (!state) return;
98
- state.events.push(event);
99
- if (state.events.length > 20_000) state.events.splice(0, state.events.length - 20_000);
100
- }
101
-
102
- export function readInProcessNestedEvents(route: InProcessNestedRouteKey): readonly object[] {
103
- return stateFor(route)?.events ?? [];
104
- }
105
-
106
- export function appendInProcessControlRequest(route: InProcessNestedRouteKey, request: InProcessControlRequest): void {
107
- const state = stateFor(route);
108
- if (!state) return;
109
- state.controlRequests.set(request.requestId, request);
110
- for (const listener of state.listeners) queueMicrotask(() => void listener(request));
111
- }
112
-
113
- export function readInProcessControlRequests(route: InProcessNestedRouteKey): readonly InProcessControlRequest[] {
114
- return stateFor(route) ? [...stateFor(route)!.controlRequests.values()] : [];
115
- }
116
-
117
- export function removeInProcessControlRequest(route: InProcessNestedRouteKey, requestId: string): void {
118
- stateFor(route)?.controlRequests.delete(requestId);
119
- }
120
-
121
- export function appendInProcessControlResult(route: InProcessNestedRouteKey, result: InProcessControlResult): void {
122
- const state = stateFor(route);
123
- if (!state) return;
124
- state.controlResults.set(result.requestId, result);
125
- }
126
-
127
- export function readInProcessControlResults(route: InProcessNestedRouteKey): readonly InProcessControlResult[] {
128
- return stateFor(route) ? [...stateFor(route)!.controlResults.values()] : [];
129
- }
130
-
131
- export function subscribeInProcessControlRequests(
132
- route: InProcessNestedRouteKey,
133
- listener: (request: InProcessControlRequest) => void | Promise<void>,
134
- ): (() => void) | undefined {
135
- const state = stateFor(route);
136
- if (!state) return undefined;
137
- state.listeners.add(listener);
138
- for (const request of state.controlRequests.values()) queueMicrotask(() => void listener(request));
139
- return () => state.listeners.delete(listener);
140
- }
141
-
142
- export function registerInProcessNestedAttempt(handle: InProcessNestedAttemptHandle): () => void {
143
- const key = attemptKey(handle.runId);
144
- let handles = attemptHandles.get(key);
145
- if (!handles) {
146
- handles = new Map();
147
- attemptHandles.set(key, handles);
148
- }
149
- handles.set(handle.path, handle);
150
- const pathKey = attemptKey(handle.path);
151
- if (pathKey !== key) {
152
- let byPath = attemptHandles.get(pathKey);
153
- if (!byPath) {
154
- byPath = new Map();
155
- attemptHandles.set(pathKey, byPath);
156
- }
157
- byPath.set(handle.path, handle);
158
- }
159
- return () => {
160
- for (const lookupKey of [key, pathKey]) {
161
- const current = attemptHandles.get(lookupKey);
162
- if (!current || current.get(handle.path) !== handle) continue;
163
- current.delete(handle.path);
164
- if (current.size === 0) attemptHandles.delete(lookupKey);
165
- }
166
- };
167
- }
168
-
169
- function handlesFor(id: string): InProcessNestedAttemptHandle[] {
170
- return [...(attemptHandles.get(attemptKey(id))?.values() ?? [])];
171
- }
172
-
173
- export interface InProcessNestedControlResult {
174
- readonly ok: boolean;
175
- readonly message: string;
176
- readonly outcome?: InProcessNestedResumeOutcome;
177
- }
178
-
179
- export async function interruptInProcessNestedAttempt(
180
- targetId: string,
181
- ): Promise<InProcessNestedControlResult | undefined> {
182
- const handles = handlesFor(targetId);
183
- if (handles.length === 0) return undefined;
184
- const active = handles.filter((handle) => handle.status() === "running" || handle.status() === "continued");
185
- if (active.length === 0) {
186
- return { ok: false, message: `Nested run ${targetId} has no active child attempt to interrupt.` };
187
- }
188
- await Promise.all(active.map((handle) => handle.interrupt()));
189
- return { ok: true, message: `Interrupt requested for nested run ${targetId}.` };
190
- }
191
-
192
- export async function resumeInProcessNestedAttempt(
193
- targetId: string,
194
- message: string,
195
- ): Promise<InProcessNestedControlResult | undefined> {
196
- const handles = handlesFor(targetId);
197
- if (handles.length === 0) return undefined;
198
- const handle =
199
- handles.find((candidate) => candidate.status() === "interrupted" || candidate.status() === "error") ?? handles[0];
200
- if (!handle) return undefined;
201
- if (handle.status() === "running" || handle.status() === "continued") {
202
- return { ok: false, message: `Nested run ${targetId} is still running; resume is not required.` };
203
- }
204
- const outcome = await handle.resume(message);
205
- return {
206
- ok: outcome.status === "ok" || outcome.status === "continued",
207
- message:
208
- outcome.status === "ok"
209
- ? `Reloaded nested run ${targetId} through the in-process control plane.`
210
- : `Nested run ${targetId} resume ended with status '${outcome.status}'.`,
211
- outcome,
212
- };
213
- }
214
-
215
- export function clearInProcessNestedRouting(): void {
216
- routeStates.clear();
217
- attemptHandles.clear();
218
- }
@@ -1,55 +0,0 @@
1
- export {
2
- nestedRouteEnv,
3
- parseNestedControlRequest,
4
- parseNestedControlResult,
5
- readNestedControlRequests,
6
- readNestedControlResults,
7
- writeNestedControlRequest,
8
- writeNestedControlResult,
9
- } from "./nested-control.js";
10
- export type {
11
- NestedControlRequestRecord,
12
- NestedControlResultRecord,
13
- NestedEventRecord,
14
- NestedRegistry,
15
- NestedRoute,
16
- } from "./nested-core.js";
17
- export {
18
- assertSafeNestedId,
19
- cleanupOldNestedRuntimeDirs,
20
- createNestedRoute,
21
- isSafeNestedId,
22
- MAX_NESTED_CHILDREN,
23
- MAX_NESTED_DEPTH,
24
- MAX_NESTED_EVENT_BYTES,
25
- MAX_NESTED_STEPS,
26
- MAX_PROCESSED_NESTED_EVENTS,
27
- NESTED_EVENTS_DIR,
28
- resolveInheritedNestedRouteFromEnv,
29
- resolveNestedParentAddressFromEnv,
30
- resolveNestedRouteFromEnv,
31
- validateNestedRouteShape,
32
- } from "./nested-core.js";
33
- export {
34
- encodeNestedPathEnv,
35
- MAX_NESTED_PATH_ENTRIES,
36
- parseNestedPathEnv,
37
- sanitizeNestedPath,
38
- } from "./nested-paths.js";
39
- export {
40
- attachRootChildrenToSteps,
41
- hasLiveNestedDescendants,
42
- updateForegroundNestedProjection,
43
- } from "./nested-projection.js";
44
- export type { NestedRunMatch, NestedRunResolutionScope } from "./nested-registry.js";
45
- export {
46
- findNestedRouteForRootId,
47
- findNestedRun,
48
- findNestedRunById,
49
- findNestedRunMatchesById,
50
- projectNestedEvents,
51
- projectNestedRegistryForRoot,
52
- readNestedRegistry,
53
- writeNestedEvent,
54
- } from "./nested-registry.js";
55
- export { applyNestedEvent, parseNestedEventRecords, sanitizeSummary } from "./nested-sanitize.js";