@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,5 +1,5 @@
1
1
  import type { CreateAgentSessionOptions, DefaultResourceLoaderInheritanceSnapshot } from "@bastani/atomic";
2
- import type { Api, Model } from "@earendil-works/pi-ai/compat";
2
+ import type { Api, Model } from "@bastani/pi-ai/compat";
3
3
  import type { StageSessionRuntime } from "../runs/foreground/stage-runner.js";
4
4
  import type { SessionManager } from "../shared/persistence-restore.js";
5
5
  import type { RunStatus, StageStatus } from "../shared/store-types.js";
@@ -327,7 +327,7 @@ function makeWorkflowStageOrchestrationContext(
327
327
  workflowRunId: meta.runId,
328
328
  workflowStageId: meta.stageId,
329
329
  workflowStageName: meta.stageName,
330
- constraints: { disableWorkflowTool: true, maxSubagentDepth: 5 },
330
+ constraints: { disableWorkflowTool: true },
331
331
  ...(intercomGroup ? { intercomGroup } : {}),
332
332
  lateMessageRouter: {
333
333
  routeMessage(message, options) {
@@ -24,6 +24,13 @@ export const defaultWorkflowHeartbeatTimerApi: WorkflowHeartbeatTimerApi = {
24
24
  */
25
25
  export const WORKFLOW_HEARTBEAT_MAX_DELIVERY_ATTEMPTS = 5;
26
26
 
27
+ /**
28
+ * Maximum time a single host admission may remain in flight. Two minutes is
29
+ * comfortably shorter than the default fifteen-minute heartbeat cadence while
30
+ * leaving a legitimately slow host enough time to admit a card.
31
+ */
32
+ export const WORKFLOW_HEARTBEAT_DELIVERY_TIMEOUT_MS = 120_000;
33
+
27
34
  interface WorkflowHeartbeatDeliveryOptions {
28
35
  readonly emit: (details: WorkflowHeartbeatEventDetails) => boolean | Promise<boolean>;
29
36
  /**
@@ -83,6 +90,9 @@ export function createWorkflowHeartbeatDelivery(options: WorkflowHeartbeatDelive
83
90
  const retryTimers = new Set<WorkflowHeartbeatTimerHandle>();
84
91
  const queue: WorkflowHeartbeatEventDetails[] = [];
85
92
  let attempt = 0;
93
+ let attemptToken = 0;
94
+ let activeAttemptToken: number | undefined;
95
+ let watchdogHandle: WorkflowHeartbeatTimerHandle | undefined;
86
96
  let running = false;
87
97
  let active = true;
88
98
  /**
@@ -97,8 +107,16 @@ export function createWorkflowHeartbeatDelivery(options: WorkflowHeartbeatDelive
97
107
  */
98
108
  let headDiscarded = false;
99
109
 
110
+ const clearWatchdog = (): void => {
111
+ if (watchdogHandle === undefined) return;
112
+ options.timers.clearTimeout(watchdogHandle);
113
+ watchdogHandle = undefined;
114
+ };
115
+
100
116
  /** Finish the head identity and start the next one, in handover order. */
101
117
  const settleHead = (details: WorkflowHeartbeatEventDetails, delivered: boolean): void => {
118
+ clearWatchdog();
119
+ activeAttemptToken = undefined;
102
120
  queue.shift();
103
121
  attempt = 0;
104
122
  running = false;
@@ -123,7 +141,12 @@ export function createWorkflowHeartbeatDelivery(options: WorkflowHeartbeatDelive
123
141
  running = true;
124
142
  attempt += 1;
125
143
  const thisAttempt = attempt;
144
+ const thisAttemptToken = ++attemptToken;
145
+ activeAttemptToken = thisAttemptToken;
126
146
  const settle = (delivered: boolean): void => {
147
+ if (activeAttemptToken !== thisAttemptToken) return;
148
+ activeAttemptToken = undefined;
149
+ clearWatchdog();
127
150
  // A discarded head settles straight through, whatever the host answered:
128
151
  // no retry, and the real result is still reported once.
129
152
  if (delivered || headDiscarded || thisAttempt >= WORKFLOW_HEARTBEAT_MAX_DELIVERY_ATTEMPTS || !active) {
@@ -141,9 +164,29 @@ export function createWorkflowHeartbeatDelivery(options: WorkflowHeartbeatDelive
141
164
  handle.unref?.();
142
165
  retryTimers.add(handle);
143
166
  };
144
- const result = options.emit(details);
145
- if (typeof result === "boolean") settle(result);
146
- else void result.then(settle);
167
+ let result: boolean | Promise<boolean>;
168
+ try {
169
+ result = options.emit(details);
170
+ } catch {
171
+ // A host can throw synchronously before returning its admission result.
172
+ // Treat that exactly like an asynchronous rejection so the failed head
173
+ // enters capped backoff instead of leaving `running` set forever.
174
+ settle(false);
175
+ return;
176
+ }
177
+ if (typeof result === "boolean") {
178
+ settle(result);
179
+ return;
180
+ }
181
+ const watchdog = options.timers.setTimeout(() => {
182
+ if (activeAttemptToken !== thisAttemptToken) return;
183
+ activeAttemptToken = undefined;
184
+ watchdogHandle = undefined;
185
+ settleHead(details, false);
186
+ }, WORKFLOW_HEARTBEAT_DELIVERY_TIMEOUT_MS);
187
+ watchdogHandle = watchdog;
188
+ watchdog.unref?.();
189
+ void result.then(settle, () => settle(false));
147
190
  };
148
191
 
149
192
  const deliver = (details: WorkflowHeartbeatEventDetails): void => {
@@ -187,11 +230,12 @@ export function createWorkflowHeartbeatDelivery(options: WorkflowHeartbeatDelive
187
230
  discard,
188
231
  dispose() {
189
232
  active = false;
233
+ clearWatchdog();
190
234
  for (const handle of retryTimers) options.timers.clearTimeout(handle);
191
235
  retryTimers.clear();
192
236
  queue.length = 0;
193
237
  // An in-flight send is left to settle on its own; `active` keeps it from
194
- // starting a further retry.
238
+ // starting a further retry. Its watchdog is cleared with the other timers.
195
239
  },
196
240
  };
197
241
  }
@@ -1,4 +1,4 @@
1
- import { getSupportedThinkingLevels } from "@earendil-works/pi-ai/compat";
1
+ import { getSupportedThinkingLevels } from "@bastani/pi-ai/compat";
2
2
  import { inspectRun } from "../runs/background/status.js";
3
3
  import { store } from "../shared/store.js";
4
4
  import type { WorkflowExecutionPolicy } from "../shared/types.js";
@@ -274,6 +274,11 @@ export function createWorkflowStageFactory(input: {
274
274
  };
275
275
  const dropStageControlForCompletion = async (): Promise<void> => {
276
276
  runtime.dropStageControlHandle();
277
+ // A registry/session clear can release a confirmed-paused handle before
278
+ // its owner resumes. The handle is then ownerless, so normal completion
279
+ // must make the second disposal call that drains the controller's deferred
280
+ // cleanup instead of retaining the session and its listeners forever.
281
+ if (state.liveHandleReleased) await disposeInnerContext();
277
282
  };
278
283
  const throwIfStageMutationBlocked = (): void => {
279
284
  if (state.stageClosedByWorkflowExit) {
@@ -229,6 +229,8 @@ export class StageSessionController {
229
229
  private unresolvedContextOverflowMessage: string | undefined;
230
230
  private generationSealed = false;
231
231
  private disposed = false;
232
+ private pendingDisposal = false;
233
+ private disposalPromise: Promise<void> | undefined;
232
234
  private pendingThinkingLevel: Parameters<StageContext["setThinkingLevel"]>[0] | undefined;
233
235
  private readonly pendingListeners = new Set<(event: StageSessionEvent) => void>();
234
236
  private readonly listenerUnsubscribes = new Map<(event: StageSessionEvent) => void, () => void>();
@@ -530,6 +532,17 @@ export class StageSessionController {
530
532
  }
531
533
 
532
534
  async disposeAll(): Promise<void> {
535
+ if (this.disposalPromise !== undefined) return this.disposalPromise;
536
+ if (this.pauseControl.isConfirmedPaused()) {
537
+ this.pendingDisposal = true;
538
+ return;
539
+ }
540
+ this.pendingDisposal = false;
541
+ this.disposalPromise = this.finishDisposeAll();
542
+ return this.disposalPromise;
543
+ }
544
+
545
+ private async finishDisposeAll(): Promise<void> {
533
546
  this.disposed = true;
534
547
  const reason = new Error(`atomic-workflows: stage "${this.opts.stageName}" session has been disposed`);
535
548
  this.markAbort(reason);
@@ -546,11 +559,25 @@ export class StageSessionController {
546
559
  await disposeStageSession(this.session);
547
560
  }
548
561
 
562
+ /**
563
+ * A disposal deferred by a confirmed pause still has to happen once that
564
+ * pause is gone. Abort/kill rejects the parked waiter, so the session and its
565
+ * listeners must be torn down here rather than leaked.
566
+ */
567
+ private async drainPendingDisposal(): Promise<void> {
568
+ if (!this.pendingDisposal) return;
569
+ await this.disposeAll();
570
+ }
571
+
549
572
  async abort(): Promise<void> {
550
573
  const reason = new DOMException("stage aborted", "AbortError");
551
574
  this.markAbort(reason);
552
575
  this.pauseControl.reject(reason);
553
- await this.session?.abort();
576
+ try {
577
+ await this.session?.abort();
578
+ } finally {
579
+ await this.drainPendingDisposal();
580
+ }
554
581
  }
555
582
  requestPause(): Promise<void> {
556
583
  const pause = this.pauseControl.requestPause();
@@ -572,7 +599,12 @@ export class StageSessionController {
572
599
  beforeResolve?: (result: StageSessionPauseResumeResult) => void,
573
600
  beforeRelease?: () => void,
574
601
  ): Promise<StageSessionPauseResumeResult> {
575
- return this.pauseControl.resume(message, beforeResolve, beforeRelease);
602
+ return this.pauseControl.resume(message, beforeResolve, beforeRelease).then((result) => {
603
+ // Ownership has returned to live execution, but a handle released while
604
+ // paused may already be gone from the registry. Keep the deferred-disposal
605
+ // marker so terminal teardown can drain it for this ownerless execution.
606
+ return result;
607
+ });
576
608
  }
577
609
  isPaused(): boolean {
578
610
  return this.pauseControl.isPaused();
@@ -600,6 +632,7 @@ export class StageSessionController {
600
632
  this.markAbort(reason);
601
633
  void this.session?.abort().catch(() => {});
602
634
  this.pauseControl.reject(reason);
635
+ void this.drainPendingDisposal().catch(() => {});
603
636
  };
604
637
  if (signal.aborted) onAbort();
605
638
  else signal.addEventListener("abort", onAbort, { once: true });
@@ -19,7 +19,7 @@ function workflowOrchestrationContext(
19
19
  workflowRunId: meta.runId,
20
20
  workflowStageId: meta.stageId,
21
21
  workflowStageName: meta.stageName,
22
- constraints: { disableWorkflowTool: true as const, maxSubagentDepth: 5 },
22
+ constraints: { disableWorkflowTool: true as const },
23
23
  };
24
24
  const intercomGroup = stageHasIntercomAccess(stageOptions)
25
25
  ? resolveStageGroup(stageOptions, meta.workflowIntercomGroup)
@@ -29,6 +29,7 @@ interface PauseRequest {
29
29
  readonly abortBoundary: PromiseWithResolvers<void>;
30
30
  readonly runnerOwnedDeliveries: Set<Promise<void>>;
31
31
  readonly nativeQueuePause?: NativeQueuePauseControl;
32
+ confirmed: boolean;
32
33
  resumePromise?: Promise<StageSessionPauseResumeResult>;
33
34
  }
34
35
 
@@ -47,6 +48,9 @@ export class StageSessionPause {
47
48
  isPaused(): boolean {
48
49
  return this.request !== null;
49
50
  }
51
+ isConfirmedPaused(): boolean {
52
+ return this.request?.confirmed === true;
53
+ }
50
54
 
51
55
  async requestPause(): Promise<void> {
52
56
  if (this.request) return this.request.abortBoundary.promise;
@@ -56,6 +60,7 @@ export class StageSessionPause {
56
60
  deferred: Promise.withResolvers<PauseResumeResolution>(),
57
61
  abortBoundary: Promise.withResolvers<void>(),
58
62
  runnerOwnedDeliveries: new Set(),
63
+ confirmed: false,
59
64
  ...(nativeQueuePause === undefined ? {} : { nativeQueuePause }),
60
65
  };
61
66
  void request.deferred.promise.catch(() => {});
@@ -67,6 +72,7 @@ export class StageSessionPause {
67
72
  await session?.abort();
68
73
  request.abortBoundary.resolve();
69
74
  await request.abortBoundary.promise;
75
+ request.confirmed = true;
70
76
  } catch (error) {
71
77
  failed = true;
72
78
  request.abortBoundary.reject(error);
@@ -221,19 +221,21 @@ export function emitChatSurface(
221
221
  // the stored `content`. Default to a complete printable rendering so
222
222
  // headless `/workflow list|status|status <id>` is useful without a TUI.
223
223
  const content = options.content ?? renderChatSurfacePlainText(payload);
224
- (
225
- send as unknown as (msg: {
226
- customType: string;
227
- content: string;
228
- display: boolean;
229
- details: ChatSurfacePayload;
230
- }) => void
231
- ).call(pi, {
232
- customType: CHAT_SURFACE_CUSTOM_TYPE,
233
- content,
234
- display: true,
235
- details: payload,
236
- });
224
+ void send.call(
225
+ pi,
226
+ {
227
+ customType: CHAT_SURFACE_CUSTOM_TYPE,
228
+ content,
229
+ display: true,
230
+ details: payload,
231
+ },
232
+ // A workflow card is an already-rendered transcript surface, not a request
233
+ // for a model turn. Without this, a card emitted while a turn is streaming
234
+ // is queued as steering behind that turn and does not appear until the turn
235
+ // ends — so `/workflow` dispatch/list/status cards raced any lifecycle
236
+ // notice that had just started a turn.
237
+ { triggerTurn: false },
238
+ );
237
239
  }
238
240
 
239
241
  // ---------------------------------------------------------------------------
@@ -62,6 +62,8 @@ export type WidgetRenderState = ReactiveWidgetRenderState;
62
62
  interface UiSlice {
63
63
  setWidget?: (key: string, factory: WidgetFactory | undefined, opts?: { placement?: string }) => void;
64
64
  requestRender?: () => void;
65
+ onWidgetRelease?: (key: string, listener: () => void) => () => void;
66
+ notify?: (message: string, type?: "info" | "warning" | "error") => void;
65
67
  }
66
68
 
67
69
  interface TimerApi extends ReactiveWidgetTimerApi {}
@@ -82,6 +84,15 @@ export interface LiveWidgetAPI {
82
84
 
83
85
  const WIDGET_KEY = "workflow.run";
84
86
 
87
+ function reportWidgetFailure(ui: UiSlice | undefined, message: string): void {
88
+ if (ui?.notify) {
89
+ ui.notify.call(ui, message, "warning");
90
+ return;
91
+ }
92
+ console.error(message);
93
+ return;
94
+ }
95
+
85
96
  function liveWidgetSnapshot(storeInstance: Store): StoreSnapshot {
86
97
  return {
87
98
  runs: storeInstance.runs(),
@@ -100,13 +111,22 @@ export function installStoreWidget(
100
111
  timers: TimerApi = defaultTimerApi,
101
112
  ): () => void {
102
113
  const ui = pi.ui;
103
- if (!ui?.setWidget) return () => {};
114
+ if (!ui?.setWidget) {
115
+ // An absent ui slice is normal during extension load: factories run
116
+ // before the host binds ctx.ui, and session_start re-installs against
117
+ // the real UI. Only a present-but-widget-less ui names a degraded host.
118
+ if (ui) reportWidgetFailure(ui, "Workflow progress widget is unavailable in this host.");
119
+ return () => {};
120
+ }
121
+ const setWidget = ui.setWidget;
104
122
 
105
123
  const requestRender = ui.requestRender;
124
+ const onWidgetRelease = ui.onWidgetRelease;
106
125
  const controller = installReactiveWidget<StoreSnapshot, unknown>({
107
126
  ui: {
108
- setWidget: (key, factory, opts) => ui.setWidget?.(key, factory, opts),
127
+ setWidget: (key, factory, opts) => setWidget.call(ui, key, factory, opts),
109
128
  ...(requestRender ? { requestRender: () => requestRender.call(ui) } : {}),
129
+ ...(onWidgetRelease ? { onWidgetRelease: (key, listener) => onWidgetRelease.call(ui, key, listener) } : {}),
110
130
  },
111
131
  key: WIDGET_KEY,
112
132
  placement: "belowEditor",
@@ -121,6 +141,9 @@ export function installStoreWidget(
121
141
  // writes that fight native main-chat scrollback).
122
142
  requestRenderOnStateNoop: false,
123
143
  isStaleError: isStaleExtensionContextError,
144
+ onMountError: (error) => {
145
+ reportWidgetFailure(ui, `Workflow progress widget could not mount: ${error.message}`);
146
+ },
124
147
  });
125
148
 
126
149
  return () => controller.dispose();
package/dist/bun/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { registerBunOAuthFlows } from "@earendil-works/pi-ai/bun-oauth";
2
+ import { registerBunOAuthFlows } from "@bastani/pi-ai/bun-oauth";
3
3
  // Register before the application graph loads so Bun's standalone compiler embeds every login adapter.
4
4
  registerBunOAuthFlows();
5
5
  import { APP_NAME } from "../config.js";
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bun/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAExE,uGAAuG;AACvG,qBAAqB,EAAE,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;AACzB,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,GAAE,CAAC,CAA+B,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,iBAAiB,EAAE,CAAC;AAEpB,0EAA0E;AAC1E,mDAAmD;AACnD,KAAK,MAAM,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\nimport { registerBunOAuthFlows } from \"@earendil-works/pi-ai/bun-oauth\";\n\n// Register before the application graph loads so Bun's standalone compiler embeds every login adapter.\nregisterBunOAuthFlows();\n\nimport { APP_NAME } from \"../config.ts\";\n\nprocess.title = APP_NAME;\nprocess.emitWarning = (() => {}) as typeof process.emitWarning;\n\nimport { restoreSandboxEnv } from \"./restore-sandbox-env.ts\";\n\nrestoreSandboxEnv();\n\n// No top-level await: the compiled binary is built with --bytecode (CJS),\n// which forbids TLA anywhere in the bundled graph.\nvoid import(\"./register-bedrock.ts\").then(() => import(\"../cli.ts\"));\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bun/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,uGAAuG;AACvG,qBAAqB,EAAE,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;AACzB,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,GAAE,CAAC,CAA+B,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,iBAAiB,EAAE,CAAC;AAEpB,0EAA0E;AAC1E,mDAAmD;AACnD,KAAK,MAAM,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\nimport { registerBunOAuthFlows } from \"@bastani/pi-ai/bun-oauth\";\n\n// Register before the application graph loads so Bun's standalone compiler embeds every login adapter.\nregisterBunOAuthFlows();\n\nimport { APP_NAME } from \"../config.ts\";\n\nprocess.title = APP_NAME;\nprocess.emitWarning = (() => {}) as typeof process.emitWarning;\n\nimport { restoreSandboxEnv } from \"./restore-sandbox-env.ts\";\n\nrestoreSandboxEnv();\n\n// No top-level await: the compiled binary is built with --bytecode (CJS),\n// which forbids TLA anywhere in the bundled graph.\nvoid import(\"./register-bedrock.ts\").then(() => import(\"../cli.ts\"));\n"]}
@@ -1,4 +1,4 @@
1
- import { bedrockProviderModule } from "@earendil-works/pi-ai/bedrock-provider";
2
- import { setBedrockProviderModule } from "@earendil-works/pi-ai/compat";
1
+ import { bedrockProviderModule } from "@bastani/pi-ai/bedrock-provider";
2
+ import { setBedrockProviderModule } from "@bastani/pi-ai/compat";
3
3
  setBedrockProviderModule(bedrockProviderModule);
4
4
  //# sourceMappingURL=register-bedrock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-bedrock.js","sourceRoot":"","sources":["../../src/bun/register-bedrock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAExE,wBAAwB,CAAC,qBAAqB,CAAC,CAAC","sourcesContent":["import { bedrockProviderModule } from \"@earendil-works/pi-ai/bedrock-provider\";\nimport { setBedrockProviderModule } from \"@earendil-works/pi-ai/compat\";\n\nsetBedrockProviderModule(bedrockProviderModule);\n"]}
1
+ {"version":3,"file":"register-bedrock.js","sourceRoot":"","sources":["../../src/bun/register-bedrock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,wBAAwB,CAAC,qBAAqB,CAAC,CAAC","sourcesContent":["import { bedrockProviderModule } from \"@bastani/pi-ai/bedrock-provider\";\nimport { setBedrockProviderModule } from \"@bastani/pi-ai/compat\";\n\nsetBedrockProviderModule(bedrockProviderModule);\n"]}
@@ -1,4 +1,4 @@
1
- import { type CredentialStore } from "@earendil-works/pi-ai";
1
+ import { type CredentialStore } from "@bastani/pi-ai";
2
2
  import { ModelRuntime } from "../core/model-runtime.js";
3
3
  import type { Args } from "./args.ts";
4
4
  import { Secret } from "./credential-print.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"auth-check.d.ts","sourceRoot":"","sources":["../../src/cli/auth-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,eAAe,EAAe,MAAM,uBAAuB,CAAC;AAE3F,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAsC,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEnF,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC;AAChE,MAAM,MAAM,eAAe,GACxB,oBAAoB,GACpB,4BAA4B,GAC5B,oBAAoB,GACpB,0BAA0B,GAC1B,eAAe,CAAC;AAEnB,MAAM,MAAM,eAAe,GACxB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAA;CAAE,GACpE;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GAClE;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AAOrE,wBAAsB,iBAAiB,CACtC,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,eAAe,CAAA;CAAuB,GAC/E,OAAO,CAAC,eAAe,CAAC,CAqC1B;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMnH;AAUD,kGAAkG;AAClG,wBAAsB,qBAAqB,CAC1C,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,eAAe,EAC5B,OAAO,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAa7B;AAED,wBAAsB,2BAA2B,CAAC,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAarG"}
1
+ {"version":3,"file":"auth-check.d.ts","sourceRoot":"","sources":["../../src/cli/auth-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,eAAe,EAAe,MAAM,gBAAgB,CAAC;AAEpF,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAsC,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEnF,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC;AAChE,MAAM,MAAM,eAAe,GACxB,oBAAoB,GACpB,4BAA4B,GAC5B,oBAAoB,GACpB,0BAA0B,GAC1B,eAAe,CAAC;AAEnB,MAAM,MAAM,eAAe,GACxB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAA;CAAE,GACpE;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GAClE;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AAOrE,wBAAsB,iBAAiB,CACtC,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,eAAe,CAAA;CAAuB,GAC/E,OAAO,CAAC,eAAe,CAAC,CAqC1B;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMnH;AAUD,kGAAkG;AAClG,wBAAsB,qBAAqB,CAC1C,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,eAAe,EAC5B,OAAO,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAa7B;AAED,wBAAsB,2BAA2B,CAAC,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAarG"}
@@ -1,4 +1,4 @@
1
- import { ModelsError } from "@earendil-works/pi-ai";
1
+ import { ModelsError } from "@bastani/pi-ai";
2
2
  import { findExactModelReferenceMatch, resolveCliModel } from "../core/model-resolver.js";
3
3
  import { ModelRuntime } from "../core/model-runtime.js";
4
4
  import { InMemoryCodingAgentModelsStore } from "../core/models-store.js";
@@ -1 +1 @@
1
- {"version":3,"file":"auth-check.js","sourceRoot":"","sources":["../../src/cli/auth-check.ts"],"names":[],"mappings":"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","sourcesContent":["import { type AuthResult, type CredentialStore, ModelsError } from \"@earendil-works/pi-ai\";\nimport { findExactModelReferenceMatch, resolveCliModel } from \"../core/model-resolver.ts\";\nimport { ModelRuntime } from \"../core/model-runtime.js\";\nimport { InMemoryCodingAgentModelsStore } from \"../core/models-store.ts\";\nimport type { Args } from \"./args.ts\";\nimport { AuthCommandError, validateAuthCheckArgs } from \"./auth-command.ts\";\nimport { DEFAULT_BEARER_TOKEN_MIN_EXPIRY_MS, Secret } from \"./credential-print.ts\";\n\nexport type AuthCheckStatus = \"ready\" | \"not_ready\" | \"invalid\";\nexport type AuthCheckReason =\n\t| \"provider_not_found\"\n\t| \"credentials_not_configured\"\n\t| \"credential_expired\"\n\t| \"credential_not_available\"\n\t| \"invalid_state\";\n\nexport type AuthCheckResult =\n\t| { status: \"ready\"; provider: string; authType: \"api_key\" | \"oauth\" }\n\t| { status: \"not_ready\"; provider: string; reason: AuthCheckReason }\n\t| { status: \"invalid\"; provider?: string; reason: \"invalid_state\" };\n\nasync function storedOAuthIsExpired(providerId: string, credentials: CredentialStore | undefined): Promise<boolean> {\n\tconst credential = await credentials?.read(providerId);\n\treturn credential?.type === \"oauth\" && Date.now() >= credential.expires;\n}\n\nexport async function checkProviderAuth(\n\targs: Args,\n\tmodelRuntime: ModelRuntime,\n\toptions: { refresh: boolean; credentials?: CredentialStore } = { refresh: false },\n): Promise<AuthCheckResult> {\n\tconst { provider: cliProvider, model: cliModel } = validateAuthCheckArgs(args);\n\tlet provider = cliProvider;\n\tif (cliModel) {\n\t\tconst resolved = resolveCliModel({ cliProvider, cliModel, modelRuntime });\n\t\tif (resolved.error || !resolved.model) {\n\t\t\tthrow new AuthCommandError(resolved.error ?? `Unable to resolve model \"${cliModel}\"`);\n\t\t}\n\t\tprovider = resolved.model.provider;\n\t}\n\tif (!provider) throw new AuthCommandError(\"Unable to resolve an auth provider\");\n\tif (modelRuntime.getError()) {\n\t\treturn { status: \"invalid\", provider, reason: \"invalid_state\" };\n\t}\n\tif (!modelRuntime.getProvider(provider)) {\n\t\treturn { status: \"not_ready\", provider, reason: \"provider_not_found\" };\n\t}\n\ttry {\n\t\tconst auth = await modelRuntime.checkAuth(provider);\n\t\tif (!auth) return { status: \"not_ready\", provider, reason: \"credentials_not_configured\" };\n\t\tif (options.refresh) {\n\t\t\tif (!(await modelRuntime.getAuth(provider))) {\n\t\t\t\treturn { status: \"not_ready\", provider, reason: \"credentials_not_configured\" };\n\t\t\t}\n\t\t} else if (auth.type === \"oauth\" && (await storedOAuthIsExpired(provider, options.credentials))) {\n\t\t\t// checkAuth reports an OAuth credential's kind without considering its\n\t\t\t// expiry. A no-refresh probe cannot rescue an expired token, so report\n\t\t\t// it as not ready instead of claiming the next request would work.\n\t\t\treturn { status: \"not_ready\", provider, reason: \"credential_expired\" };\n\t\t}\n\t\treturn { status: \"ready\", provider, authType: auth.type };\n\t} catch (error) {\n\t\tif (error instanceof ModelsError && error.code === \"oauth\") {\n\t\t\treturn { status: \"not_ready\", provider, reason: \"credential_not_available\" };\n\t\t}\n\t\treturn { status: \"invalid\", provider, reason: \"invalid_state\" };\n\t}\n}\n\n/**\n * A credential export must name one target, not accept the CLI resolver's fuzzy\n * cross-provider match. Provider flags are explicit; a model-only export is\n * explicit only when its exact reference resolves uniquely to the provider.\n */\nexport function hasExplicitCredentialExportTarget(args: Args, modelRuntime: ModelRuntime, provider: string): boolean {\n\tconst { provider: cliProvider, model: cliModel } = validateAuthCheckArgs(args);\n\tif (cliProvider) return true;\n\tif (!cliModel) return false;\n\tconst exactModel = findExactModelReferenceMatch(cliModel, [...modelRuntime.getModels()]);\n\treturn exactModel?.provider.toLowerCase() === provider.toLowerCase();\n}\n\nfunction getAuthCredential(auth: AuthResult | undefined): string | undefined {\n\tif (auth?.auth.apiKey) return auth.auth.apiKey;\n\tconst authorization = Object.entries(auth?.auth.headers ?? {}).find(\n\t\t([name]) => name.toLowerCase() === \"authorization\",\n\t)?.[1];\n\treturn typeof authorization === \"string\" ? /^Bearer\\s+(.+)$/iu.exec(authorization)?.[1] : undefined;\n}\n\n/** Resolve the credential that the checked provider would use, without exposing it to callers. */\nexport async function getProviderCredential(\n\tproviderId: string,\n\tmodelRuntime: ModelRuntime,\n\tcredentials: CredentialStore,\n\toptions: { refresh: boolean },\n): Promise<Secret | undefined> {\n\tif (!options.refresh) {\n\t\tconst stored = await credentials.read(providerId);\n\t\tif (stored?.type === \"oauth\") {\n\t\t\treturn stored.expires - Date.now() >= DEFAULT_BEARER_TOKEN_MIN_EXPIRY_MS\n\t\t\t\t? new Secret(stored.access)\n\t\t\t\t: undefined;\n\t\t}\n\t}\n\tconst credential = getAuthCredential(\n\t\tawait modelRuntime.getAuth(providerId, { minOAuthValidityMs: DEFAULT_BEARER_TOKEN_MIN_EXPIRY_MS }),\n\t);\n\treturn credential === undefined ? undefined : new Secret(credential);\n}\n\nexport async function createAuthCheckModelRuntime(credentials: CredentialStore): Promise<ModelRuntime> {\n\tconst runtime = await ModelRuntime.create({\n\t\tcredentials,\n\t\tmodelsStore: new InMemoryCodingAgentModelsStore(),\n\t\tallowModelNetwork: false,\n\t\trefreshOnCreate: false,\n\t});\n\t// The create-time refresh is intentionally skipped, so the snapshot has not\n\t// yet learned which stored providers are configured. Publish that metadata\n\t// without a catalog refresh, provider probe, network call, or auth.json write:\n\t// resolveCliModel needs it to choose a provider for an unqualified model ID.\n\tawait runtime.reloadCredentials({ refreshAvailability: false });\n\treturn runtime;\n}\n"]}
1
+ {"version":3,"file":"auth-check.js","sourceRoot":"","sources":["../../src/cli/auth-check.ts"],"names":[],"mappings":"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","sourcesContent":["import { type AuthResult, type CredentialStore, ModelsError } from \"@bastani/pi-ai\";\nimport { findExactModelReferenceMatch, resolveCliModel } from \"../core/model-resolver.ts\";\nimport { ModelRuntime } from \"../core/model-runtime.js\";\nimport { InMemoryCodingAgentModelsStore } from \"../core/models-store.ts\";\nimport type { Args } from \"./args.ts\";\nimport { AuthCommandError, validateAuthCheckArgs } from \"./auth-command.ts\";\nimport { DEFAULT_BEARER_TOKEN_MIN_EXPIRY_MS, Secret } from \"./credential-print.ts\";\n\nexport type AuthCheckStatus = \"ready\" | \"not_ready\" | \"invalid\";\nexport type AuthCheckReason =\n\t| \"provider_not_found\"\n\t| \"credentials_not_configured\"\n\t| \"credential_expired\"\n\t| \"credential_not_available\"\n\t| \"invalid_state\";\n\nexport type AuthCheckResult =\n\t| { status: \"ready\"; provider: string; authType: \"api_key\" | \"oauth\" }\n\t| { status: \"not_ready\"; provider: string; reason: AuthCheckReason }\n\t| { status: \"invalid\"; provider?: string; reason: \"invalid_state\" };\n\nasync function storedOAuthIsExpired(providerId: string, credentials: CredentialStore | undefined): Promise<boolean> {\n\tconst credential = await credentials?.read(providerId);\n\treturn credential?.type === \"oauth\" && Date.now() >= credential.expires;\n}\n\nexport async function checkProviderAuth(\n\targs: Args,\n\tmodelRuntime: ModelRuntime,\n\toptions: { refresh: boolean; credentials?: CredentialStore } = { refresh: false },\n): Promise<AuthCheckResult> {\n\tconst { provider: cliProvider, model: cliModel } = validateAuthCheckArgs(args);\n\tlet provider = cliProvider;\n\tif (cliModel) {\n\t\tconst resolved = resolveCliModel({ cliProvider, cliModel, modelRuntime });\n\t\tif (resolved.error || !resolved.model) {\n\t\t\tthrow new AuthCommandError(resolved.error ?? `Unable to resolve model \"${cliModel}\"`);\n\t\t}\n\t\tprovider = resolved.model.provider;\n\t}\n\tif (!provider) throw new AuthCommandError(\"Unable to resolve an auth provider\");\n\tif (modelRuntime.getError()) {\n\t\treturn { status: \"invalid\", provider, reason: \"invalid_state\" };\n\t}\n\tif (!modelRuntime.getProvider(provider)) {\n\t\treturn { status: \"not_ready\", provider, reason: \"provider_not_found\" };\n\t}\n\ttry {\n\t\tconst auth = await modelRuntime.checkAuth(provider);\n\t\tif (!auth) return { status: \"not_ready\", provider, reason: \"credentials_not_configured\" };\n\t\tif (options.refresh) {\n\t\t\tif (!(await modelRuntime.getAuth(provider))) {\n\t\t\t\treturn { status: \"not_ready\", provider, reason: \"credentials_not_configured\" };\n\t\t\t}\n\t\t} else if (auth.type === \"oauth\" && (await storedOAuthIsExpired(provider, options.credentials))) {\n\t\t\t// checkAuth reports an OAuth credential's kind without considering its\n\t\t\t// expiry. A no-refresh probe cannot rescue an expired token, so report\n\t\t\t// it as not ready instead of claiming the next request would work.\n\t\t\treturn { status: \"not_ready\", provider, reason: \"credential_expired\" };\n\t\t}\n\t\treturn { status: \"ready\", provider, authType: auth.type };\n\t} catch (error) {\n\t\tif (error instanceof ModelsError && error.code === \"oauth\") {\n\t\t\treturn { status: \"not_ready\", provider, reason: \"credential_not_available\" };\n\t\t}\n\t\treturn { status: \"invalid\", provider, reason: \"invalid_state\" };\n\t}\n}\n\n/**\n * A credential export must name one target, not accept the CLI resolver's fuzzy\n * cross-provider match. Provider flags are explicit; a model-only export is\n * explicit only when its exact reference resolves uniquely to the provider.\n */\nexport function hasExplicitCredentialExportTarget(args: Args, modelRuntime: ModelRuntime, provider: string): boolean {\n\tconst { provider: cliProvider, model: cliModel } = validateAuthCheckArgs(args);\n\tif (cliProvider) return true;\n\tif (!cliModel) return false;\n\tconst exactModel = findExactModelReferenceMatch(cliModel, [...modelRuntime.getModels()]);\n\treturn exactModel?.provider.toLowerCase() === provider.toLowerCase();\n}\n\nfunction getAuthCredential(auth: AuthResult | undefined): string | undefined {\n\tif (auth?.auth.apiKey) return auth.auth.apiKey;\n\tconst authorization = Object.entries(auth?.auth.headers ?? {}).find(\n\t\t([name]) => name.toLowerCase() === \"authorization\",\n\t)?.[1];\n\treturn typeof authorization === \"string\" ? /^Bearer\\s+(.+)$/iu.exec(authorization)?.[1] : undefined;\n}\n\n/** Resolve the credential that the checked provider would use, without exposing it to callers. */\nexport async function getProviderCredential(\n\tproviderId: string,\n\tmodelRuntime: ModelRuntime,\n\tcredentials: CredentialStore,\n\toptions: { refresh: boolean },\n): Promise<Secret | undefined> {\n\tif (!options.refresh) {\n\t\tconst stored = await credentials.read(providerId);\n\t\tif (stored?.type === \"oauth\") {\n\t\t\treturn stored.expires - Date.now() >= DEFAULT_BEARER_TOKEN_MIN_EXPIRY_MS\n\t\t\t\t? new Secret(stored.access)\n\t\t\t\t: undefined;\n\t\t}\n\t}\n\tconst credential = getAuthCredential(\n\t\tawait modelRuntime.getAuth(providerId, { minOAuthValidityMs: DEFAULT_BEARER_TOKEN_MIN_EXPIRY_MS }),\n\t);\n\treturn credential === undefined ? undefined : new Secret(credential);\n}\n\nexport async function createAuthCheckModelRuntime(credentials: CredentialStore): Promise<ModelRuntime> {\n\tconst runtime = await ModelRuntime.create({\n\t\tcredentials,\n\t\tmodelsStore: new InMemoryCodingAgentModelsStore(),\n\t\tallowModelNetwork: false,\n\t\trefreshOnCreate: false,\n\t});\n\t// The create-time refresh is intentionally skipped, so the snapshot has not\n\t// yet learned which stored providers are configured. Publish that metadata\n\t// without a catalog refresh, provider probe, network call, or auth.json write:\n\t// resolveCliModel needs it to choose a provider for an unqualified model ID.\n\tawait runtime.reloadCredentials({ refreshAvailability: false });\n\treturn runtime;\n}\n"]}
@@ -22,7 +22,7 @@
22
22
  * candidate loop.
23
23
  */
24
24
  import { inspect } from "node:util";
25
- import { ModelsError } from "@earendil-works/pi-ai";
25
+ import { ModelsError } from "@bastani/pi-ai";
26
26
  import type { ModelRuntime } from "../core/model-runtime.js";
27
27
  import type { Args } from "./args.ts";
28
28
  export type CredentialPrintKind = "api_key" | "bearer_token";
@@ -1 +1 @@
1
- {"version":3,"file":"credential-print.d.ts","sourceRoot":"","sources":["../../src/cli/credential-print.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,cAAc,CAAC;AAE7D,8EAA8E;AAC9E,eAAO,MAAM,kCAAkC,QAAc,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GACjC,OAAO,GACP,wBAAwB,GACxB,mBAAmB,GACnB,4BAA4B,GAC5B,eAAe,GACf,wBAAwB,GACxB,kBAAkB,GAClB,sBAAsB,GACtB,qBAAqB,CAAC;AAEzB;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAU/D,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,wBAAwB,CAEtE,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,YAAY,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAKzF;CACD;AAED;;;;;;;;;;GAUG;AACH,qBAAa,MAAM;;IAGlB,YAAY,KAAK,EAAE,MAAM,EAExB;IAED,qEAAqE;IACrE,IAAI,IAAI,MAAM,CAOb;IAED,QAAQ,IAAI,KAAK,CAEhB;IAED,MAAM,IAAI,KAAK,CAEd;IAED,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,CAE5B;IAED,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAEzB;CACD;AAED,iGAAiG;AACjG,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAmCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAmChH;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAO3E;AA6BD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAiB5D;AAsDD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY3D;AAED;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,6BAA6B,CAAC;AAEtE;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,qBAAqB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,oBAAoB,CAe7E;AA8CD;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC9C,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,mBAAmB,EACzB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CA6GjB"}
1
+ {"version":3,"file":"credential-print.d.ts","sourceRoot":"","sources":["../../src/cli/credential-print.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,cAAc,CAAC;AAE7D,8EAA8E;AAC9E,eAAO,MAAM,kCAAkC,QAAc,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GACjC,OAAO,GACP,wBAAwB,GACxB,mBAAmB,GACnB,4BAA4B,GAC5B,eAAe,GACf,wBAAwB,GACxB,kBAAkB,GAClB,sBAAsB,GACtB,qBAAqB,CAAC;AAEzB;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAU/D,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,wBAAwB,CAEtE,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,YAAY,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAKzF;CACD;AAED;;;;;;;;;;GAUG;AACH,qBAAa,MAAM;;IAGlB,YAAY,KAAK,EAAE,MAAM,EAExB;IAED,qEAAqE;IACrE,IAAI,IAAI,MAAM,CAOb;IAED,QAAQ,IAAI,KAAK,CAEhB;IAED,MAAM,IAAI,KAAK,CAEd;IAED,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,CAE5B;IAED,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAEzB;CACD;AAED,iGAAiG;AACjG,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAmCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAmChH;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAO3E;AA6BD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAiB5D;AAsDD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY3D;AAED;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,6BAA6B,CAAC;AAEtE;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,qBAAqB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,oBAAoB,CAe7E;AA8CD;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC9C,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,mBAAmB,EACzB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CA6GjB"}
@@ -22,7 +22,7 @@
22
22
  * candidate loop.
23
23
  */
24
24
  import { inspect } from "node:util";
25
- import { ModelsError } from "@earendil-works/pi-ai";
25
+ import { ModelsError } from "@bastani/pi-ai";
26
26
  import { resolveCliModel } from "../core/model-resolver.js";
27
27
  import { flushRawStdout, RawStdoutWriteError, writeRawStdoutOnce } from "../core/output-guard.js";
28
28
  /** Bearer tokens are refreshed unless they still have this much life left. */
@@ -421,7 +421,7 @@ export async function resolveCredentialForPrint(args, modelRuntime, kind, minExp
421
421
  // `checkAuth()` is the only non-mutating probe and cannot tell a candidate
422
422
  // that will authenticate from one that will fail, which is what keeps
423
423
  // exits 5 and 6 reachable. Nor does resolving without refreshing exist —
424
- // `resolveStoredOAuth` in `@earendil-works/pi-ai` refreshes whenever the
424
+ // `resolveStoredOAuth` in `@bastani/pi-ai` refreshes whenever the
425
425
  // token falls inside `max(DEFAULT_OAUTH_MINIMUM_VALIDITY_MS,
426
426
  // minOAuthValidityMs ?? 0)`, so omitting `minOAuthValidityMs` only lowers
427
427
  // that window to five minutes and drops the post-refresh check exit 6 is