@bastani/atomic 0.9.12 → 0.9.13-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1187) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/README.md +35 -17
  3. package/dist/builtin/i-have-adhd/CHANGELOG.md +17 -0
  4. package/dist/builtin/i-have-adhd/LICENSE +21 -0
  5. package/dist/builtin/i-have-adhd/README.md +18 -0
  6. package/dist/builtin/i-have-adhd/index.ts +238 -0
  7. package/dist/builtin/i-have-adhd/package.json +56 -0
  8. package/dist/builtin/i-have-adhd/skills/i-have-adhd/SKILL.md +140 -0
  9. package/dist/builtin/intercom/CHANGELOG.md +25 -0
  10. package/dist/builtin/intercom/README.md +30 -16
  11. package/dist/builtin/intercom/broker/bounded-stderr-install.ts +18 -0
  12. package/dist/builtin/intercom/broker/bounded-stderr.ts +132 -0
  13. package/dist/builtin/intercom/broker/broker.ts +12 -23
  14. package/dist/builtin/intercom/broker/client.ts +81 -5
  15. package/dist/builtin/intercom/broker/paths.ts +9 -0
  16. package/dist/builtin/intercom/broker/presence-handler.ts +103 -0
  17. package/dist/builtin/intercom/broker/spawn.ts +128 -29
  18. package/dist/builtin/intercom/contact-supervisor-tool.ts +13 -3
  19. package/dist/builtin/intercom/foreground-detach-handoff.ts +30 -14
  20. package/dist/builtin/intercom/group.ts +64 -25
  21. package/dist/builtin/intercom/index-heavy.ts +51 -8
  22. package/dist/builtin/intercom/index.ts +50 -22
  23. package/dist/builtin/intercom/intercom-tool.ts +82 -5
  24. package/dist/builtin/intercom/intercom-utils.ts +15 -29
  25. package/dist/builtin/intercom/lazy-subagent-ack.ts +11 -6
  26. package/dist/builtin/intercom/package.json +2 -3
  27. package/dist/builtin/intercom/runtime-group.ts +13 -0
  28. package/dist/builtin/intercom/skills/intercom/SKILL.md +30 -2
  29. package/dist/builtin/intercom/source-ownership.ts +9 -12
  30. package/dist/builtin/intercom/subagent-relay.ts +32 -16
  31. package/dist/builtin/intercom/terminal-ordering-barrier.ts +21 -4
  32. package/dist/builtin/intercom/types.ts +3 -1
  33. package/dist/builtin/intercom/ui/compose.ts +8 -6
  34. package/dist/builtin/intercom/ui/session-list.ts +7 -5
  35. package/dist/builtin/mcp/CHANGELOG.md +19 -0
  36. package/dist/builtin/mcp/README.md +3 -1
  37. package/dist/builtin/mcp/glimpse-ui.ts +2 -1
  38. package/dist/builtin/mcp/index.ts +10 -26
  39. package/dist/builtin/mcp/mcp-panel.ts +35 -34
  40. package/dist/builtin/mcp/mcp-setup-panel.ts +35 -33
  41. package/dist/builtin/mcp/npx-resolver.ts +3 -2
  42. package/dist/builtin/mcp/package.json +3 -3
  43. package/dist/builtin/mcp/sampling-handler.ts +5 -1
  44. package/dist/builtin/mcp/server-manager.ts +4 -7
  45. package/dist/builtin/mcp/startup-warmup.ts +20 -8
  46. package/dist/builtin/subagents/CHANGELOG.md +63 -0
  47. package/dist/builtin/subagents/README.md +144 -351
  48. package/dist/builtin/subagents/agents/worker.md +1 -1
  49. package/dist/builtin/subagents/package.json +5 -5
  50. package/dist/builtin/subagents/prompts/parallel-context-build.md +2 -2
  51. package/dist/builtin/subagents/prompts/parallel-handoff-plan.md +4 -4
  52. package/dist/builtin/subagents/prompts/review-loop.md +1 -1
  53. package/dist/builtin/subagents/skills/subagent/SKILL.md +39 -102
  54. package/dist/builtin/subagents/src/agents/agent-discovery.ts +1 -29
  55. package/dist/builtin/subagents/src/agents/agent-loaders.ts +1 -40
  56. package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +6 -135
  57. package/dist/builtin/subagents/src/agents/agent-management.ts +52 -282
  58. package/dist/builtin/subagents/src/agents/agent-paths.ts +0 -22
  59. package/dist/builtin/subagents/src/agents/agent-types.ts +0 -40
  60. package/dist/builtin/subagents/src/agents/agents.ts +0 -3
  61. package/dist/builtin/subagents/src/agents/identity.ts +2 -4
  62. package/dist/builtin/subagents/src/agents/skills-paths.ts +8 -1
  63. package/dist/builtin/subagents/src/extension/doctor.ts +4 -24
  64. package/dist/builtin/subagents/src/extension/fanout-child.ts +76 -56
  65. package/dist/builtin/subagents/src/extension/index.ts +32 -39
  66. package/dist/builtin/subagents/src/extension/prompt-guidance.ts +2 -2
  67. package/dist/builtin/subagents/src/extension/schemas.ts +1 -157
  68. package/dist/builtin/subagents/src/extension/startup-maintenance.ts +25 -46
  69. package/dist/builtin/subagents/src/extension/tool-description.ts +4 -13
  70. package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +6 -2
  71. package/dist/builtin/subagents/src/intercom/result-intercom.ts +27 -29
  72. package/dist/builtin/subagents/src/intercom/supervisor-authorization.ts +9 -2
  73. package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +248 -435
  74. package/dist/builtin/subagents/src/runs/background/completion-notification.ts +8 -3
  75. package/dist/builtin/subagents/src/runs/background/notify.ts +83 -26
  76. package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +1 -281
  77. package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +0 -5
  78. package/dist/builtin/subagents/src/runs/foreground/execution.ts +1 -4
  79. package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +559 -0
  80. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +103 -259
  81. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +29 -31
  82. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +10 -173
  83. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +7 -5
  84. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +13 -6
  85. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +1 -646
  86. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +2 -7
  87. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +14 -7
  88. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +39 -20
  89. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +16 -11
  90. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +1 -14
  91. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +194 -104
  92. package/dist/builtin/subagents/src/runs/inprocess/background-single.ts +195 -0
  93. package/dist/builtin/subagents/src/runs/inprocess/background.ts +90 -0
  94. package/dist/builtin/subagents/src/runs/inprocess/child-policy.ts +27 -0
  95. package/dist/builtin/subagents/src/runs/inprocess/control-registry.ts +55 -0
  96. package/dist/builtin/subagents/src/runs/inprocess/control-status.ts +106 -0
  97. package/dist/builtin/subagents/src/runs/inprocess/index.ts +50 -0
  98. package/dist/builtin/subagents/src/runs/inprocess/nested-routing.ts +218 -0
  99. package/dist/builtin/subagents/src/runs/{shared/subagent-prompt-runtime.ts → inprocess/prompt-behavior.ts} +37 -75
  100. package/dist/builtin/subagents/src/runs/inprocess/runner.ts +1392 -0
  101. package/dist/builtin/subagents/src/runs/{shared/nested-events.ts → inprocess/runtime-support/nested-api.ts} +13 -7
  102. package/dist/builtin/subagents/src/runs/{shared/nested-events-control.ts → inprocess/runtime-support/nested-control.ts} +18 -17
  103. package/dist/builtin/subagents/src/runs/{shared/nested-events-core.ts → inprocess/runtime-support/nested-core.ts} +14 -61
  104. package/dist/builtin/subagents/src/runs/{shared/nested-events-projection.ts → inprocess/runtime-support/nested-projection.ts} +4 -12
  105. package/dist/builtin/subagents/src/runs/{shared/nested-events-registry.ts → inprocess/runtime-support/nested-registry.ts} +19 -4
  106. package/dist/builtin/subagents/src/runs/{shared/nested-render.ts → inprocess/runtime-support/nested-rendering.ts} +3 -3
  107. package/dist/builtin/subagents/src/runs/{shared/nested-events-sanitize.ts → inprocess/runtime-support/nested-sanitize.ts} +4 -6
  108. package/dist/builtin/subagents/src/runs/inprocess.ts +1 -0
  109. package/dist/builtin/subagents/src/runs/shared/intercom-group.ts +23 -7
  110. package/dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts +0 -1
  111. package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +15 -492
  112. package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +13 -97
  113. package/dist/builtin/subagents/src/runs/shared/run-history.ts +3 -5
  114. package/dist/builtin/subagents/src/runs/shared/single-output.ts +4 -4
  115. package/dist/builtin/subagents/src/runs/shared/worktree.ts +7 -2
  116. package/dist/builtin/subagents/src/shared/formatters.ts +2 -56
  117. package/dist/builtin/subagents/src/shared/settings.ts +14 -350
  118. package/dist/builtin/subagents/src/shared/types-async.ts +8 -32
  119. package/dist/builtin/subagents/src/shared/types-config.ts +29 -13
  120. package/dist/builtin/subagents/src/shared/types-depth.ts +30 -56
  121. package/dist/builtin/subagents/src/shared/types-results.ts +18 -60
  122. package/dist/builtin/subagents/src/shared/types-runtime.ts +0 -1
  123. package/dist/builtin/subagents/src/shared/utils.ts +5 -0
  124. package/dist/builtin/subagents/src/slash/bridge-settlement.ts +87 -0
  125. package/dist/builtin/subagents/src/slash/prompt-template-bridge.ts +49 -10
  126. package/dist/builtin/subagents/src/slash/slash-bridge.ts +27 -7
  127. package/dist/builtin/subagents/src/slash/slash-commands.ts +37 -82
  128. package/dist/builtin/subagents/src/slash/slash-live-state.ts +3 -94
  129. package/dist/builtin/subagents/src/tui/render-event-formatting.ts +3 -35
  130. package/dist/builtin/subagents/src/tui/render-progress.ts +89 -0
  131. package/dist/builtin/subagents/src/tui/render-result-compact.ts +77 -68
  132. package/dist/builtin/subagents/src/tui/render-result.ts +79 -99
  133. package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -6
  134. package/dist/builtin/subagents/src/tui/render-status-progress.ts +8 -5
  135. package/dist/builtin/subagents/src/tui/render-widget-graph.ts +6 -63
  136. package/dist/builtin/subagents/src/tui/render-widget.ts +0 -24
  137. package/dist/builtin/web-access/CHANGELOG.md +14 -0
  138. package/dist/builtin/web-access/chrome-cookies.ts +3 -2
  139. package/dist/builtin/web-access/github-api.ts +7 -6
  140. package/dist/builtin/web-access/github-extract.ts +2 -1
  141. package/dist/builtin/web-access/package.json +3 -3
  142. package/dist/builtin/web-access/subprocess.ts +3 -1
  143. package/dist/builtin/web-access/summary-review.ts +2 -2
  144. package/dist/builtin/web-access/web-search-features.ts +38 -22
  145. package/dist/builtin/web-access/web-search-summary.ts +2 -2
  146. package/dist/builtin/workflows/CHANGELOG.md +70 -0
  147. package/dist/builtin/workflows/README.md +54 -4
  148. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +3 -0
  149. package/dist/builtin/workflows/builtin/ralph-models.ts +25 -20
  150. package/dist/builtin/workflows/builtin/shared-prompts.ts +5 -2
  151. package/dist/builtin/workflows/package.json +2 -2
  152. package/dist/builtin/workflows/src/durable/backend.ts +25 -1
  153. package/dist/builtin/workflows/src/durable/completed-catalog-stage-groups.ts +60 -3
  154. package/dist/builtin/workflows/src/durable/completed-catalog.ts +67 -1
  155. package/dist/builtin/workflows/src/durable/completed-subtree.ts +22 -7
  156. package/dist/builtin/workflows/src/durable/dbos-metadata.ts +15 -1
  157. package/dist/builtin/workflows/src/durable/local-command.ts +2 -1
  158. package/dist/builtin/workflows/src/durable/resume-runtime.ts +1 -0
  159. package/dist/builtin/workflows/src/durable/tool-primitive.ts +4 -28
  160. package/dist/builtin/workflows/src/durable/types.ts +22 -1
  161. package/dist/builtin/workflows/src/durable/workflow-child-result.ts +3 -1
  162. package/dist/builtin/workflows/src/engine/primitives/workflow.ts +1 -1
  163. package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +10 -2
  164. package/dist/builtin/workflows/src/engine/run-durable-topology.ts +9 -2
  165. package/dist/builtin/workflows/src/engine/run.ts +17 -1
  166. package/dist/builtin/workflows/src/extension/atomic-stage-session.ts +18 -39
  167. package/dist/builtin/workflows/src/extension/companions.ts +1 -1
  168. package/dist/builtin/workflows/src/extension/config-file-loader.ts +10 -1
  169. package/dist/builtin/workflows/src/extension/config-loader.ts +1 -1
  170. package/dist/builtin/workflows/src/extension/dispatcher.ts +4 -0
  171. package/dist/builtin/workflows/src/extension/index.bundle.mjs +2095 -1181
  172. package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +332 -39
  173. package/dist/builtin/workflows/src/extension/mcp.ts +13 -2
  174. package/dist/builtin/workflows/src/extension/render-result.ts +5 -0
  175. package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +6 -3
  176. package/dist/builtin/workflows/src/extension/runtime.ts +7 -1
  177. package/dist/builtin/workflows/src/extension/ui-surface.ts +7 -20
  178. package/dist/builtin/workflows/src/extension/wiring.ts +86 -17
  179. package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +12 -3
  180. package/dist/builtin/workflows/src/extension/workflow-durable-resume-command.ts +5 -2
  181. package/dist/builtin/workflows/src/extension/workflow-ports.ts +14 -6
  182. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +11 -6
  183. package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +17 -7
  184. package/dist/builtin/workflows/src/extension/workflow-status-summary.ts +11 -0
  185. package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +18 -1
  186. package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +12 -8
  187. package/dist/builtin/workflows/src/extension/workflow-tool.ts +9 -4
  188. package/dist/builtin/workflows/src/intercom/intercom-routing.ts +12 -6
  189. package/dist/builtin/workflows/src/intercom/result-intercom.ts +35 -4
  190. package/dist/builtin/workflows/src/runs/background/quit.ts +28 -4
  191. package/dist/builtin/workflows/src/runs/background/resume-acknowledgements.ts +2 -1
  192. package/dist/builtin/workflows/src/runs/background/status.ts +70 -8
  193. package/dist/builtin/workflows/src/runs/foreground/executor-abort.ts +11 -3
  194. package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +2 -1
  195. package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +4 -0
  196. package/dist/builtin/workflows/src/runs/foreground/executor-exit-manager.ts +26 -2
  197. package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +3 -1
  198. package/dist/builtin/workflows/src/runs/foreground/executor-run-finalizers.ts +3 -2
  199. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +1 -1
  200. package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +1 -1
  201. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +688 -38
  202. package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +3 -1
  203. package/dist/builtin/workflows/src/runs/shared/model-fallback-failures.ts +19 -514
  204. package/dist/builtin/workflows/src/runs/shared/retry.ts +44 -0
  205. package/dist/builtin/workflows/src/runs/shared/worktree-git-runner.ts +5 -2
  206. package/dist/builtin/workflows/src/runs/shared/worktree-setup.ts +2 -0
  207. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +10 -3
  208. package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +11 -3
  209. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +5 -1
  210. package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +5 -0
  211. package/dist/builtin/workflows/src/shared/graph-store-snapshot.ts +34 -2
  212. package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +28 -6
  213. package/dist/builtin/workflows/src/shared/persistence-restore.ts +3 -0
  214. package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +4 -0
  215. package/dist/builtin/workflows/src/shared/run-indicator-status.ts +75 -0
  216. package/dist/builtin/workflows/src/shared/stage-ui-broker.ts +10 -4
  217. package/dist/builtin/workflows/src/shared/store-public-types.ts +47 -9
  218. package/dist/builtin/workflows/src/shared/store-run-methods.ts +42 -8
  219. package/dist/builtin/workflows/src/shared/store-stage-methods.ts +31 -8
  220. package/dist/builtin/workflows/src/shared/store-types.ts +35 -1
  221. package/dist/builtin/workflows/src/shared/timing.ts +10 -0
  222. package/dist/builtin/workflows/src/shared/workflow-artifact-env.ts +21 -0
  223. package/dist/builtin/workflows/src/shared/workflow-artifacts.ts +2 -5
  224. package/dist/builtin/workflows/src/tui/chat-surface-message.ts +22 -2
  225. package/dist/builtin/workflows/src/tui/dispatch-confirm.ts +37 -2
  226. package/dist/builtin/workflows/src/tui/graph-view-constants.ts +0 -15
  227. package/dist/builtin/workflows/src/tui/graph-view-graph-render.ts +38 -47
  228. package/dist/builtin/workflows/src/tui/graph-view-input.ts +48 -45
  229. package/dist/builtin/workflows/src/tui/graph-view-layout.ts +266 -0
  230. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +1 -86
  231. package/dist/builtin/workflows/src/tui/graph-view-render.ts +209 -91
  232. package/dist/builtin/workflows/src/tui/graph-view-state.ts +5 -7
  233. package/dist/builtin/workflows/src/tui/graph-view-types.ts +13 -7
  234. package/dist/builtin/workflows/src/tui/inline-form-editor.ts +8 -6
  235. package/dist/builtin/workflows/src/tui/inline-form-overlay.ts +2 -1
  236. package/dist/builtin/workflows/src/tui/inputs-overlay.ts +7 -4
  237. package/dist/builtin/workflows/src/tui/inputs-picker-input.ts +66 -0
  238. package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +1 -0
  239. package/dist/builtin/workflows/src/tui/node-card.ts +1 -1
  240. package/dist/builtin/workflows/src/tui/overlay-adapter.ts +18 -46
  241. package/dist/builtin/workflows/src/tui/overlay-terminal-modes.ts +15 -26
  242. package/dist/builtin/workflows/src/tui/session-list.ts +1 -1
  243. package/dist/builtin/workflows/src/tui/session-overlays.ts +19 -12
  244. package/dist/builtin/workflows/src/tui/session-picker.ts +47 -4
  245. package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +5 -14
  246. package/dist/builtin/workflows/src/tui/stage-chat-view-input.ts +8 -7
  247. package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +12 -3
  248. package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +1 -11
  249. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +0 -8
  250. package/dist/builtin/workflows/src/tui/status-list.ts +32 -47
  251. package/dist/builtin/workflows/src/tui/store-widget-installer.ts +9 -5
  252. package/dist/builtin/workflows/src/tui/widget.ts +16 -46
  253. package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +0 -15
  254. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +2 -26
  255. package/dist/builtin/workflows/src/tui/workflow-status.ts +3 -3
  256. package/dist/bun/split-loader.js +2 -0
  257. package/dist/bun/split-loader.js.map +1 -1
  258. package/dist/cli/args.d.ts.map +1 -1
  259. package/dist/cli/args.js +6 -2
  260. package/dist/cli/args.js.map +1 -1
  261. package/dist/cli/auth-check.d.ts +35 -0
  262. package/dist/cli/auth-check.d.ts.map +1 -0
  263. package/dist/cli/auth-check.js +100 -0
  264. package/dist/cli/auth-check.js.map +1 -0
  265. package/dist/cli/auth-command.d.ts +27 -0
  266. package/dist/cli/auth-command.d.ts.map +1 -0
  267. package/dist/cli/auth-command.js +150 -0
  268. package/dist/cli/auth-command.js.map +1 -0
  269. package/dist/cli/config-selector.js +2 -2
  270. package/dist/cli/config-selector.js.map +1 -1
  271. package/dist/cli/credential-print.d.ts +18 -23
  272. package/dist/cli/credential-print.d.ts.map +1 -1
  273. package/dist/cli/credential-print.js +42 -88
  274. package/dist/cli/credential-print.js.map +1 -1
  275. package/dist/cli/experimental/auth.d.ts +16 -0
  276. package/dist/cli/experimental/auth.d.ts.map +1 -0
  277. package/dist/cli/experimental/auth.js +13 -0
  278. package/dist/cli/experimental/auth.js.map +1 -0
  279. package/dist/cli/experimental/cli.d.ts +6 -0
  280. package/dist/cli/experimental/cli.d.ts.map +1 -0
  281. package/dist/cli/experimental/cli.js +5 -0
  282. package/dist/cli/experimental/cli.js.map +1 -0
  283. package/dist/cli/experimental/command-options.d.ts +17 -0
  284. package/dist/cli/experimental/command-options.d.ts.map +1 -0
  285. package/dist/cli/experimental/command-options.js +35 -0
  286. package/dist/cli/experimental/command-options.js.map +1 -0
  287. package/dist/cli/experimental/command.d.ts +63 -0
  288. package/dist/cli/experimental/command.d.ts.map +1 -0
  289. package/dist/cli/experimental/command.js +127 -0
  290. package/dist/cli/experimental/command.js.map +1 -0
  291. package/dist/cli/experimental/commands/client.d.ts +13 -0
  292. package/dist/cli/experimental/commands/client.d.ts.map +1 -0
  293. package/dist/cli/experimental/commands/client.js +25 -0
  294. package/dist/cli/experimental/commands/client.js.map +1 -0
  295. package/dist/cli/experimental/commands/pi.d.ts +15 -0
  296. package/dist/cli/experimental/commands/pi.d.ts.map +1 -0
  297. package/dist/cli/experimental/commands/pi.js +28 -0
  298. package/dist/cli/experimental/commands/pi.js.map +1 -0
  299. package/dist/cli/experimental/commands/server.d.ts +13 -0
  300. package/dist/cli/experimental/commands/server.d.ts.map +1 -0
  301. package/dist/cli/experimental/commands/server.js +25 -0
  302. package/dist/cli/experimental/commands/server.js.map +1 -0
  303. package/dist/cli/experimental/transport-address.d.ts +10 -0
  304. package/dist/cli/experimental/transport-address.d.ts.map +1 -0
  305. package/dist/cli/experimental/transport-address.js +38 -0
  306. package/dist/cli/experimental/transport-address.js.map +1 -0
  307. package/dist/cli/session-picker.js +2 -2
  308. package/dist/cli/session-picker.js.map +1 -1
  309. package/dist/cli/startup-ui.d.ts.map +1 -1
  310. package/dist/cli/startup-ui.js +4 -10
  311. package/dist/cli/startup-ui.js.map +1 -1
  312. package/dist/cli.js +2 -0
  313. package/dist/cli.js.map +1 -1
  314. package/dist/client/index.d.ts +3 -0
  315. package/dist/client/index.d.ts.map +1 -0
  316. package/dist/client/index.js +3 -0
  317. package/dist/client/index.js.map +1 -0
  318. package/dist/client/remote-session.d.ts +64 -0
  319. package/dist/client/remote-session.d.ts.map +1 -0
  320. package/dist/client/remote-session.js +351 -0
  321. package/dist/client/remote-session.js.map +1 -0
  322. package/dist/client/transcript.d.ts +12 -0
  323. package/dist/client/transcript.d.ts.map +1 -0
  324. package/dist/client/transcript.js +98 -0
  325. package/dist/client/transcript.js.map +1 -0
  326. package/dist/core/agent-session-auto-compaction.d.ts +17 -13
  327. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  328. package/dist/core/agent-session-auto-compaction.js +192 -67
  329. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  330. package/dist/core/agent-session-bash.d.ts.map +1 -1
  331. package/dist/core/agent-session-bash.js +2 -0
  332. package/dist/core/agent-session-bash.js.map +1 -1
  333. package/dist/core/agent-session-compaction.d.ts +3 -6
  334. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  335. package/dist/core/agent-session-compaction.js +64 -28
  336. package/dist/core/agent-session-compaction.js.map +1 -1
  337. package/dist/core/agent-session-events.d.ts +1 -11
  338. package/dist/core/agent-session-events.d.ts.map +1 -1
  339. package/dist/core/agent-session-events.js +64 -37
  340. package/dist/core/agent-session-events.js.map +1 -1
  341. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  342. package/dist/core/agent-session-extension-bindings.js +4 -2
  343. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  344. package/dist/core/agent-session-methods.d.ts +19 -2
  345. package/dist/core/agent-session-methods.d.ts.map +1 -1
  346. package/dist/core/agent-session-methods.js.map +1 -1
  347. package/dist/core/agent-session-models.d.ts +1 -0
  348. package/dist/core/agent-session-models.d.ts.map +1 -1
  349. package/dist/core/agent-session-models.js +23 -5
  350. package/dist/core/agent-session-models.js.map +1 -1
  351. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
  352. package/dist/core/agent-session-post-tool-compaction.js +22 -6
  353. package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
  354. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  355. package/dist/core/agent-session-prompt.js +4 -0
  356. package/dist/core/agent-session-prompt.js.map +1 -1
  357. package/dist/core/agent-session-retry.d.ts +21 -4
  358. package/dist/core/agent-session-retry.d.ts.map +1 -1
  359. package/dist/core/agent-session-retry.js +232 -106
  360. package/dist/core/agent-session-retry.js.map +1 -1
  361. package/dist/core/agent-session-runtime-auth.d.ts.map +1 -1
  362. package/dist/core/agent-session-runtime-auth.js +3 -0
  363. package/dist/core/agent-session-runtime-auth.js.map +1 -1
  364. package/dist/core/agent-session-state.d.ts.map +1 -1
  365. package/dist/core/agent-session-state.js +2 -1
  366. package/dist/core/agent-session-state.js.map +1 -1
  367. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  368. package/dist/core/agent-session-tool-hooks.js +37 -14
  369. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  370. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  371. package/dist/core/agent-session-tool-registry.js +5 -1
  372. package/dist/core/agent-session-tool-registry.js.map +1 -1
  373. package/dist/core/agent-session-types.d.ts +5 -1
  374. package/dist/core/agent-session-types.d.ts.map +1 -1
  375. package/dist/core/agent-session-types.js.map +1 -1
  376. package/dist/core/agent-session.d.ts +18 -1
  377. package/dist/core/agent-session.d.ts.map +1 -1
  378. package/dist/core/agent-session.js +37 -0
  379. package/dist/core/agent-session.js.map +1 -1
  380. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  381. package/dist/core/atomic-guide-command.js +2 -3
  382. package/dist/core/atomic-guide-command.js.map +1 -1
  383. package/dist/core/auth-storage.d.ts +18 -1
  384. package/dist/core/auth-storage.d.ts.map +1 -1
  385. package/dist/core/auth-storage.js +83 -0
  386. package/dist/core/auth-storage.js.map +1 -1
  387. package/dist/core/bash-executor.d.ts +5 -0
  388. package/dist/core/bash-executor.d.ts.map +1 -1
  389. package/dist/core/bash-executor.js +43 -19
  390. package/dist/core/bash-executor.js.map +1 -1
  391. package/dist/core/builtin-packages.d.ts.map +1 -1
  392. package/dist/core/builtin-packages.js +6 -0
  393. package/dist/core/builtin-packages.js.map +1 -1
  394. package/dist/core/codex-fast-mode.d.ts.map +1 -1
  395. package/dist/core/codex-fast-mode.js +8 -3
  396. package/dist/core/codex-fast-mode.js.map +1 -1
  397. package/dist/core/exec.d.ts.map +1 -1
  398. package/dist/core/exec.js +4 -3
  399. package/dist/core/exec.js.map +1 -1
  400. package/dist/core/extensions/agent-events.d.ts +0 -1
  401. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  402. package/dist/core/extensions/agent-events.js.map +1 -1
  403. package/dist/core/extensions/api-types.d.ts +5 -3
  404. package/dist/core/extensions/api-types.d.ts.map +1 -1
  405. package/dist/core/extensions/api-types.js.map +1 -1
  406. package/dist/core/extensions/context-types.d.ts +40 -0
  407. package/dist/core/extensions/context-types.d.ts.map +1 -1
  408. package/dist/core/extensions/context-types.js.map +1 -1
  409. package/dist/core/extensions/event-results.d.ts +5 -0
  410. package/dist/core/extensions/event-results.d.ts.map +1 -1
  411. package/dist/core/extensions/event-results.js.map +1 -1
  412. package/dist/core/extensions/index.d.ts +2 -1
  413. package/dist/core/extensions/index.d.ts.map +1 -1
  414. package/dist/core/extensions/index.js +1 -0
  415. package/dist/core/extensions/index.js.map +1 -1
  416. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  417. package/dist/core/extensions/loader-api.js +14 -1
  418. package/dist/core/extensions/loader-api.js.map +1 -1
  419. package/dist/core/extensions/loader-discovery.d.ts.map +1 -1
  420. package/dist/core/extensions/loader-discovery.js +3 -23
  421. package/dist/core/extensions/loader-discovery.js.map +1 -1
  422. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  423. package/dist/core/extensions/loader-runtime.js +20 -3
  424. package/dist/core/extensions/loader-runtime.js.map +1 -1
  425. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  426. package/dist/core/extensions/loader-virtual-modules.js +7 -1
  427. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  428. package/dist/core/extensions/message-types.d.ts +6 -0
  429. package/dist/core/extensions/message-types.d.ts.map +1 -1
  430. package/dist/core/extensions/message-types.js.map +1 -1
  431. package/dist/core/extensions/provider-types.d.ts +9 -3
  432. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  433. package/dist/core/extensions/provider-types.js.map +1 -1
  434. package/dist/core/extensions/runner-context.d.ts +2 -1
  435. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  436. package/dist/core/extensions/runner-context.js +4 -0
  437. package/dist/core/extensions/runner-context.js.map +1 -1
  438. package/dist/core/extensions/runner-registries.d.ts +2 -1
  439. package/dist/core/extensions/runner-registries.d.ts.map +1 -1
  440. package/dist/core/extensions/runner-registries.js +3 -0
  441. package/dist/core/extensions/runner-registries.js.map +1 -1
  442. package/dist/core/extensions/runner-ui.d.ts.map +1 -1
  443. package/dist/core/extensions/runner-ui.js +1 -0
  444. package/dist/core/extensions/runner-ui.js.map +1 -1
  445. package/dist/core/extensions/runner.d.ts +4 -2
  446. package/dist/core/extensions/runner.d.ts.map +1 -1
  447. package/dist/core/extensions/runner.js +9 -3
  448. package/dist/core/extensions/runner.js.map +1 -1
  449. package/dist/core/extensions/runtime-types.d.ts +4 -1
  450. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  451. package/dist/core/extensions/runtime-types.js.map +1 -1
  452. package/dist/core/extensions/stale-context.d.ts +5 -0
  453. package/dist/core/extensions/stale-context.d.ts.map +1 -0
  454. package/dist/core/extensions/stale-context.js +11 -0
  455. package/dist/core/extensions/stale-context.js.map +1 -0
  456. package/dist/core/extensions/ui-types.d.ts +14 -11
  457. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  458. package/dist/core/extensions/ui-types.js.map +1 -1
  459. package/dist/core/footer-data-provider.d.ts.map +1 -1
  460. package/dist/core/footer-data-provider.js +3 -2
  461. package/dist/core/footer-data-provider.js.map +1 -1
  462. package/dist/core/index.d.ts +1 -1
  463. package/dist/core/index.d.ts.map +1 -1
  464. package/dist/core/index.js.map +1 -1
  465. package/dist/core/intercom-runtime-group.d.ts +13 -0
  466. package/dist/core/intercom-runtime-group.d.ts.map +1 -0
  467. package/dist/core/intercom-runtime-group.js +23 -0
  468. package/dist/core/intercom-runtime-group.js.map +1 -0
  469. package/dist/core/keybindings.d.ts +44 -4
  470. package/dist/core/keybindings.d.ts.map +1 -1
  471. package/dist/core/model-config.d.ts +39 -5
  472. package/dist/core/model-config.d.ts.map +1 -1
  473. package/dist/core/model-config.js +6 -0
  474. package/dist/core/model-config.js.map +1 -1
  475. package/dist/core/model-fallback-failures.d.ts +30 -0
  476. package/dist/core/model-fallback-failures.d.ts.map +1 -0
  477. package/dist/core/model-fallback-failures.js +610 -0
  478. package/dist/core/model-fallback-failures.js.map +1 -0
  479. package/dist/core/model-registry.d.ts +12 -5
  480. package/dist/core/model-registry.d.ts.map +1 -1
  481. package/dist/core/model-registry.js +20 -12
  482. package/dist/core/model-registry.js.map +1 -1
  483. package/dist/core/model-resolver-cli.d.ts.map +1 -1
  484. package/dist/core/model-resolver-cli.js +46 -14
  485. package/dist/core/model-resolver-cli.js.map +1 -1
  486. package/dist/core/model-resolver-defaults.d.ts.map +1 -1
  487. package/dist/core/model-resolver-defaults.js +2 -0
  488. package/dist/core/model-resolver-defaults.js.map +1 -1
  489. package/dist/core/model-resolver-scope.d.ts +2 -0
  490. package/dist/core/model-resolver-scope.d.ts.map +1 -1
  491. package/dist/core/model-resolver-scope.js +12 -9
  492. package/dist/core/model-resolver-scope.js.map +1 -1
  493. package/dist/core/model-resolver.d.ts +1 -1
  494. package/dist/core/model-resolver.d.ts.map +1 -1
  495. package/dist/core/model-resolver.js +1 -1
  496. package/dist/core/model-resolver.js.map +1 -1
  497. package/dist/core/model-runtime-snapshot.d.ts +10 -0
  498. package/dist/core/model-runtime-snapshot.d.ts.map +1 -1
  499. package/dist/core/model-runtime-snapshot.js +14 -1
  500. package/dist/core/model-runtime-snapshot.js.map +1 -1
  501. package/dist/core/model-runtime-streaming.d.ts +3 -1
  502. package/dist/core/model-runtime-streaming.d.ts.map +1 -1
  503. package/dist/core/model-runtime-streaming.js +16 -0
  504. package/dist/core/model-runtime-streaming.js.map +1 -1
  505. package/dist/core/model-runtime-types.d.ts +2 -0
  506. package/dist/core/model-runtime-types.d.ts.map +1 -1
  507. package/dist/core/model-runtime-types.js.map +1 -1
  508. package/dist/core/model-runtime.d.ts +37 -10
  509. package/dist/core/model-runtime.d.ts.map +1 -1
  510. package/dist/core/model-runtime.js +312 -113
  511. package/dist/core/model-runtime.js.map +1 -1
  512. package/dist/core/oauth-login.d.ts.map +1 -1
  513. package/dist/core/oauth-login.js +2 -1
  514. package/dist/core/oauth-login.js.map +1 -1
  515. package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -1
  516. package/dist/core/openai-responses-payload-sanitizer.js +18 -2
  517. package/dist/core/openai-responses-payload-sanitizer.js.map +1 -1
  518. package/dist/core/package-manager-git.d.ts.map +1 -1
  519. package/dist/core/package-manager-git.js +56 -10
  520. package/dist/core/package-manager-git.js.map +1 -1
  521. package/dist/core/package-manager-manifest.d.ts +1 -1
  522. package/dist/core/package-manager-manifest.d.ts.map +1 -1
  523. package/dist/core/package-manager-manifest.js +19 -9
  524. package/dist/core/package-manager-manifest.js.map +1 -1
  525. package/dist/core/package-manager-resource-collector.js.map +1 -1
  526. package/dist/core/package-manager-resource-files.d.ts.map +1 -1
  527. package/dist/core/package-manager-resource-files.js +1 -2
  528. package/dist/core/package-manager-resource-files.js.map +1 -1
  529. package/dist/core/provider-composer-internal.d.ts +10 -2
  530. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  531. package/dist/core/provider-composer-internal.js +7 -3
  532. package/dist/core/provider-composer-internal.js.map +1 -1
  533. package/dist/core/provider-composer.d.ts.map +1 -1
  534. package/dist/core/provider-composer.js +19 -12
  535. package/dist/core/provider-composer.js.map +1 -1
  536. package/dist/core/provider-display-names.d.ts.map +1 -1
  537. package/dist/core/provider-display-names.js +2 -0
  538. package/dist/core/provider-display-names.js.map +1 -1
  539. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  540. package/dist/core/remote-catalog-provider.js +77 -67
  541. package/dist/core/remote-catalog-provider.js.map +1 -1
  542. package/dist/core/resolve-config-value.d.ts.map +1 -1
  543. package/dist/core/resolve-config-value.js +3 -0
  544. package/dist/core/resolve-config-value.js.map +1 -1
  545. package/dist/core/resource-loader-context-files.d.ts.map +1 -1
  546. package/dist/core/resource-loader-context-files.js +13 -5
  547. package/dist/core/resource-loader-context-files.js.map +1 -1
  548. package/dist/core/retry-policy.d.ts +30 -0
  549. package/dist/core/retry-policy.d.ts.map +1 -0
  550. package/dist/core/retry-policy.js +25 -0
  551. package/dist/core/retry-policy.js.map +1 -0
  552. package/dist/core/runtime-credentials.d.ts +5 -5
  553. package/dist/core/runtime-credentials.d.ts.map +1 -1
  554. package/dist/core/runtime-credentials.js +8 -8
  555. package/dist/core/runtime-credentials.js.map +1 -1
  556. package/dist/core/sdk-types.d.ts +8 -2
  557. package/dist/core/sdk-types.d.ts.map +1 -1
  558. package/dist/core/sdk-types.js.map +1 -1
  559. package/dist/core/sdk.d.ts.map +1 -1
  560. package/dist/core/sdk.js +6 -1
  561. package/dist/core/sdk.js.map +1 -1
  562. package/dist/core/session-manager-core.d.ts +2 -0
  563. package/dist/core/session-manager-core.d.ts.map +1 -1
  564. package/dist/core/session-manager-core.js +7 -0
  565. package/dist/core/session-manager-core.js.map +1 -1
  566. package/dist/core/session-manager-list.d.ts.map +1 -1
  567. package/dist/core/session-manager-list.js +3 -1
  568. package/dist/core/session-manager-list.js.map +1 -1
  569. package/dist/core/settings-manager-ui-accessors.d.ts +8 -1
  570. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  571. package/dist/core/settings-manager-ui-accessors.js +31 -0
  572. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  573. package/dist/core/settings-manager.d.ts +2 -1
  574. package/dist/core/settings-manager.d.ts.map +1 -1
  575. package/dist/core/settings-manager.js.map +1 -1
  576. package/dist/core/settings-merge.d.ts.map +1 -1
  577. package/dist/core/settings-merge.js +13 -16
  578. package/dist/core/settings-merge.js.map +1 -1
  579. package/dist/core/settings-types.d.ts +5 -0
  580. package/dist/core/settings-types.d.ts.map +1 -1
  581. package/dist/core/settings-types.js.map +1 -1
  582. package/dist/core/slash-commands.d.ts.map +1 -1
  583. package/dist/core/slash-commands.js +0 -2
  584. package/dist/core/slash-commands.js.map +1 -1
  585. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts +2 -2
  586. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts.map +1 -1
  587. package/dist/core/tools/ask-user-question/state/questionnaire-session.js +39 -2
  588. package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
  589. package/dist/core/tools/bash-async-execution.d.ts +2 -0
  590. package/dist/core/tools/bash-async-execution.d.ts.map +1 -1
  591. package/dist/core/tools/bash-async-execution.js +4 -1
  592. package/dist/core/tools/bash-async-execution.js.map +1 -1
  593. package/dist/core/tools/bash-async-output.d.ts +1 -0
  594. package/dist/core/tools/bash-async-output.d.ts.map +1 -1
  595. package/dist/core/tools/bash-async-output.js +62 -27
  596. package/dist/core/tools/bash-async-output.js.map +1 -1
  597. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  598. package/dist/core/tools/bash-pty-native.js +2 -1
  599. package/dist/core/tools/bash-pty-native.js.map +1 -1
  600. package/dist/core/tools/bash.d.ts +9 -0
  601. package/dist/core/tools/bash.d.ts.map +1 -1
  602. package/dist/core/tools/bash.js +34 -16
  603. package/dist/core/tools/bash.js.map +1 -1
  604. package/dist/core/tools/directory-tree.d.ts +11 -0
  605. package/dist/core/tools/directory-tree.d.ts.map +1 -1
  606. package/dist/core/tools/directory-tree.js +26 -0
  607. package/dist/core/tools/directory-tree.js.map +1 -1
  608. package/dist/core/tools/edit.d.ts +4 -0
  609. package/dist/core/tools/edit.d.ts.map +1 -1
  610. package/dist/core/tools/edit.js +12 -8
  611. package/dist/core/tools/edit.js.map +1 -1
  612. package/dist/core/tools/errno.d.ts +25 -0
  613. package/dist/core/tools/errno.d.ts.map +1 -0
  614. package/dist/core/tools/errno.js +29 -0
  615. package/dist/core/tools/errno.js.map +1 -0
  616. package/dist/core/tools/find.d.ts +8 -1
  617. package/dist/core/tools/find.d.ts.map +1 -1
  618. package/dist/core/tools/find.js +20 -15
  619. package/dist/core/tools/find.js.map +1 -1
  620. package/dist/core/tools/grep.d.ts.map +1 -1
  621. package/dist/core/tools/grep.js +5 -1
  622. package/dist/core/tools/grep.js.map +1 -1
  623. package/dist/core/tools/index.d.ts +7 -7
  624. package/dist/core/tools/index.d.ts.map +1 -1
  625. package/dist/core/tools/index.js +7 -7
  626. package/dist/core/tools/index.js.map +1 -1
  627. package/dist/core/tools/ls.d.ts +4 -0
  628. package/dist/core/tools/ls.d.ts.map +1 -1
  629. package/dist/core/tools/ls.js +5 -1
  630. package/dist/core/tools/ls.js.map +1 -1
  631. package/dist/core/tools/output-accumulator.d.ts +8 -1
  632. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  633. package/dist/core/tools/output-accumulator.js +50 -28
  634. package/dist/core/tools/output-accumulator.js.map +1 -1
  635. package/dist/core/tools/oversized-tool-result.d.ts.map +1 -1
  636. package/dist/core/tools/oversized-tool-result.js +129 -22
  637. package/dist/core/tools/oversized-tool-result.js.map +1 -1
  638. package/dist/core/tools/persisted-output-file.d.ts +80 -0
  639. package/dist/core/tools/persisted-output-file.d.ts.map +1 -0
  640. package/dist/core/tools/persisted-output-file.js +284 -0
  641. package/dist/core/tools/persisted-output-file.js.map +1 -0
  642. package/dist/core/tools/read.d.ts +10 -0
  643. package/dist/core/tools/read.d.ts.map +1 -1
  644. package/dist/core/tools/read.js +20 -8
  645. package/dist/core/tools/read.js.map +1 -1
  646. package/dist/core/tools/search.d.ts +4 -0
  647. package/dist/core/tools/search.d.ts.map +1 -1
  648. package/dist/core/tools/search.js +5 -1
  649. package/dist/core/tools/search.js.map +1 -1
  650. package/dist/core/tools/session-temp-cleanup.d.ts +133 -0
  651. package/dist/core/tools/session-temp-cleanup.d.ts.map +1 -0
  652. package/dist/core/tools/session-temp-cleanup.js +669 -0
  653. package/dist/core/tools/session-temp-cleanup.js.map +1 -0
  654. package/dist/core/tools/session-temp-dir.d.ts +116 -0
  655. package/dist/core/tools/session-temp-dir.d.ts.map +1 -0
  656. package/dist/core/tools/session-temp-dir.js +409 -0
  657. package/dist/core/tools/session-temp-dir.js.map +1 -0
  658. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  659. package/dist/core/tools/tool-definition-wrapper.js +2 -0
  660. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  661. package/dist/core/tools/tool-limits.d.ts +11 -0
  662. package/dist/core/tools/tool-limits.d.ts.map +1 -1
  663. package/dist/core/tools/tool-limits.js +11 -0
  664. package/dist/core/tools/tool-limits.js.map +1 -1
  665. package/dist/core/tools/windows-directory-security.d.ts +82 -0
  666. package/dist/core/tools/windows-directory-security.d.ts.map +1 -0
  667. package/dist/core/tools/windows-directory-security.js +238 -0
  668. package/dist/core/tools/windows-directory-security.js.map +1 -0
  669. package/dist/core/tools/write.d.ts +4 -0
  670. package/dist/core/tools/write.d.ts.map +1 -1
  671. package/dist/core/tools/write.js +8 -4
  672. package/dist/core/tools/write.js.map +1 -1
  673. package/dist/core/trust-manager.js +1 -1
  674. package/dist/core/trust-manager.js.map +1 -1
  675. package/dist/extensions/llama/huggingface-ui.d.ts +1 -1
  676. package/dist/extensions/llama/huggingface-ui.d.ts.map +1 -1
  677. package/dist/extensions/llama/huggingface-ui.js +6 -5
  678. package/dist/extensions/llama/huggingface-ui.js.map +1 -1
  679. package/dist/extensions/llama/index.d.ts.map +1 -1
  680. package/dist/extensions/llama/index.js +11 -2
  681. package/dist/extensions/llama/index.js.map +1 -1
  682. package/dist/extensions/llama/provider.d.ts.map +1 -1
  683. package/dist/extensions/llama/provider.js +24 -8
  684. package/dist/extensions/llama/provider.js.map +1 -1
  685. package/dist/extensions/llama/ui.d.ts.map +1 -1
  686. package/dist/extensions/llama/ui.js +5 -2
  687. package/dist/extensions/llama/ui.js.map +1 -1
  688. package/dist/index-extensions.d.ts +2 -2
  689. package/dist/index-extensions.d.ts.map +1 -1
  690. package/dist/index-extensions.js +1 -1
  691. package/dist/index-extensions.js.map +1 -1
  692. package/dist/index.d.ts +8 -2
  693. package/dist/index.d.ts.map +1 -1
  694. package/dist/index.js +8 -2
  695. package/dist/index.js.map +1 -1
  696. package/dist/main-runtime-api-key.d.ts +2 -2
  697. package/dist/main-runtime-api-key.d.ts.map +1 -1
  698. package/dist/main-runtime-api-key.js +7 -2
  699. package/dist/main-runtime-api-key.js.map +1 -1
  700. package/dist/main-session.js +2 -2
  701. package/dist/main-session.js.map +1 -1
  702. package/dist/main.d.ts.map +1 -1
  703. package/dist/main.js +130 -26
  704. package/dist/main.js.map +1 -1
  705. package/dist/modes/index.d.ts +1 -0
  706. package/dist/modes/index.d.ts.map +1 -1
  707. package/dist/modes/index.js.map +1 -1
  708. package/dist/modes/interactive/components/assistant-message.d.ts +6 -2
  709. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  710. package/dist/modes/interactive/components/assistant-message.js +18 -5
  711. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  712. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  713. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  714. package/dist/modes/interactive/components/bordered-loader.js +5 -4
  715. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  716. package/dist/modes/interactive/components/branch-summary-message.d.ts +2 -1
  717. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  718. package/dist/modes/interactive/components/branch-summary-message.js +3 -2
  719. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  720. package/dist/modes/interactive/components/chat-message-renderer.d.ts +17 -7
  721. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  722. package/dist/modes/interactive/components/chat-message-renderer.js +35 -69
  723. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  724. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  725. package/dist/modes/interactive/components/chat-session-host-actions.js +11 -3
  726. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  727. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  728. package/dist/modes/interactive/components/chat-session-host-events.js +25 -15
  729. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  730. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
  731. package/dist/modes/interactive/components/chat-session-host-rendering.js +9 -4
  732. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  733. package/dist/modes/interactive/components/chat-session-host-state.d.ts +2 -0
  734. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  735. package/dist/modes/interactive/components/chat-session-host-state.js +2 -0
  736. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  737. package/dist/modes/interactive/components/chat-session-host.d.ts +9 -0
  738. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  739. package/dist/modes/interactive/components/chat-session-host.js +14 -0
  740. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  741. package/dist/modes/interactive/components/chat-transcript.d.ts +32 -0
  742. package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
  743. package/dist/modes/interactive/components/chat-transcript.js +173 -5
  744. package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
  745. package/dist/modes/interactive/components/config-selector-list.d.ts +1 -1
  746. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
  747. package/dist/modes/interactive/components/config-selector-list.js +9 -8
  748. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  749. package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
  750. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  751. package/dist/modes/interactive/components/custom-editor.js +32 -10
  752. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  753. package/dist/modes/interactive/components/custom-message.d.ts +2 -1
  754. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  755. package/dist/modes/interactive/components/custom-message.js +3 -2
  756. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  757. package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
  758. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  759. package/dist/modes/interactive/components/extension-editor.js +3 -2
  760. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  761. package/dist/modes/interactive/components/extension-input.d.ts +1 -1
  762. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  763. package/dist/modes/interactive/components/extension-input.js +1 -0
  764. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  765. package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
  766. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  767. package/dist/modes/interactive/components/extension-selector.js +4 -0
  768. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  769. package/dist/modes/interactive/components/fast-mode-selector.d.ts +1 -1
  770. package/dist/modes/interactive/components/fast-mode-selector.d.ts.map +1 -1
  771. package/dist/modes/interactive/components/fast-mode-selector.js +7 -5
  772. package/dist/modes/interactive/components/fast-mode-selector.js.map +1 -1
  773. package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
  774. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  775. package/dist/modes/interactive/components/first-time-setup.js +3 -0
  776. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  777. package/dist/modes/interactive/components/footer.js +1 -1
  778. package/dist/modes/interactive/components/footer.js.map +1 -1
  779. package/dist/modes/interactive/components/host-input-form.d.ts +1 -1
  780. package/dist/modes/interactive/components/host-input-form.d.ts.map +1 -1
  781. package/dist/modes/interactive/components/host-input-form.js +6 -5
  782. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  783. package/dist/modes/interactive/components/index.d.ts +1 -1
  784. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  785. package/dist/modes/interactive/components/index.js.map +1 -1
  786. package/dist/modes/interactive/components/login-dialog.d.ts +1 -1
  787. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  788. package/dist/modes/interactive/components/login-dialog.js +2 -1
  789. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  790. package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
  791. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  792. package/dist/modes/interactive/components/markdown-transform.js +19 -0
  793. package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
  794. package/dist/modes/interactive/components/mermaid.d.ts +11 -0
  795. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  796. package/dist/modes/interactive/components/mermaid.js +81 -0
  797. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  798. package/dist/modes/interactive/components/model-selector.d.ts +2 -2
  799. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  800. package/dist/modes/interactive/components/model-selector.js +9 -6
  801. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  802. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  803. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  804. package/dist/modes/interactive/components/oauth-selector.js +3 -2
  805. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  806. package/dist/modes/interactive/components/scoped-models-selector.d.ts +6 -2
  807. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  808. package/dist/modes/interactive/components/scoped-models-selector.js +39 -13
  809. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  810. package/dist/modes/interactive/components/session-selector-delete.d.ts.map +1 -1
  811. package/dist/modes/interactive/components/session-selector-delete.js +2 -1
  812. package/dist/modes/interactive/components/session-selector-delete.js.map +1 -1
  813. package/dist/modes/interactive/components/session-selector-list.d.ts +1 -1
  814. package/dist/modes/interactive/components/session-selector-list.d.ts.map +1 -1
  815. package/dist/modes/interactive/components/session-selector-list.js +12 -11
  816. package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
  817. package/dist/modes/interactive/components/session-selector.d.ts +1 -1
  818. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  819. package/dist/modes/interactive/components/session-selector.js +3 -3
  820. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  821. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  822. package/dist/modes/interactive/components/settings-selector-handlers.js +9 -0
  823. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  824. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  825. package/dist/modes/interactive/components/settings-selector-items.js +21 -0
  826. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  827. package/dist/modes/interactive/components/settings-selector-submenus.d.ts +3 -3
  828. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
  829. package/dist/modes/interactive/components/settings-selector-submenus.js +6 -1
  830. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  831. package/dist/modes/interactive/components/settings-selector-types.d.ts +8 -1
  832. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  833. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  834. package/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -1
  835. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  836. package/dist/modes/interactive/components/skill-invocation-message.js +3 -2
  837. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  838. package/dist/modes/interactive/components/tool-execution.d.ts +2 -0
  839. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  840. package/dist/modes/interactive/components/tool-execution.js +50 -27
  841. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  842. package/dist/modes/interactive/components/tree-selector-component.d.ts +1 -1
  843. package/dist/modes/interactive/components/tree-selector-component.d.ts.map +1 -1
  844. package/dist/modes/interactive/components/tree-selector-component.js +2 -3
  845. package/dist/modes/interactive/components/tree-selector-component.js.map +1 -1
  846. package/dist/modes/interactive/components/tree-selector-help.d.ts +1 -1
  847. package/dist/modes/interactive/components/tree-selector-help.d.ts.map +1 -1
  848. package/dist/modes/interactive/components/tree-selector-help.js +3 -1
  849. package/dist/modes/interactive/components/tree-selector-help.js.map +1 -1
  850. package/dist/modes/interactive/components/tree-selector-label-input.d.ts +1 -1
  851. package/dist/modes/interactive/components/tree-selector-label-input.d.ts.map +1 -1
  852. package/dist/modes/interactive/components/tree-selector-label-input.js +1 -0
  853. package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -1
  854. package/dist/modes/interactive/components/tree-selector-list.d.ts +1 -1
  855. package/dist/modes/interactive/components/tree-selector-list.d.ts.map +1 -1
  856. package/dist/modes/interactive/components/tree-selector-list.js +3 -0
  857. package/dist/modes/interactive/components/tree-selector-list.js.map +1 -1
  858. package/dist/modes/interactive/components/trust-selector.d.ts +1 -1
  859. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  860. package/dist/modes/interactive/components/trust-selector.js +4 -0
  861. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  862. package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
  863. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  864. package/dist/modes/interactive/components/user-message-selector.js +4 -0
  865. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  866. package/dist/modes/interactive/components/user-message.d.ts +4 -1
  867. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  868. package/dist/modes/interactive/components/user-message.js +10 -2
  869. package/dist/modes/interactive/components/user-message.js.map +1 -1
  870. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  871. package/dist/modes/interactive/external-editor.js +2 -1
  872. package/dist/modes/interactive/external-editor.js.map +1 -1
  873. package/dist/modes/interactive/interactive-agent-events.js +36 -18
  874. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  875. package/dist/modes/interactive/interactive-auth-login.js +9 -2
  876. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  877. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
  878. package/dist/modes/interactive/interactive-auth-routing.js +5 -1
  879. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  880. package/dist/modes/interactive/interactive-bash-compact.js +16 -4
  881. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
  882. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  883. package/dist/modes/interactive/interactive-deferred-startup.js +3 -0
  884. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  885. package/dist/modes/interactive/interactive-editor-actions.js +2 -0
  886. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  887. package/dist/modes/interactive/interactive-extension-context.js +12 -7
  888. package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
  889. package/dist/modes/interactive/interactive-extension-custom-ui.js +1 -0
  890. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  891. package/dist/modes/interactive/interactive-extension-dialogs.js +7 -0
  892. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  893. package/dist/modes/interactive/interactive-extension-widgets.js +7 -24
  894. package/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  895. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  896. package/dist/modes/interactive/interactive-input-handling.js +9 -8
  897. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  898. package/dist/modes/interactive/interactive-mode-base.d.ts +52 -3
  899. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  900. package/dist/modes/interactive/interactive-mode-base.js +143 -5
  901. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  902. package/dist/modes/interactive/interactive-mode-deps.d.ts +2 -2
  903. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  904. package/dist/modes/interactive/interactive-mode-deps.js +2 -2
  905. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  906. package/dist/modes/interactive/interactive-mode-surface.d.ts +9 -3
  907. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  908. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  909. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  910. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  911. package/dist/modes/interactive/interactive-mode.js +1 -0
  912. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  913. package/dist/modes/interactive/interactive-model-routing.js +107 -41
  914. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  915. package/dist/modes/interactive/interactive-process-lifecycle.js +1 -1
  916. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  917. package/dist/modes/interactive/interactive-render-chat.js +24 -6
  918. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  919. package/dist/modes/interactive/interactive-selectors.js +44 -5
  920. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  921. package/dist/modes/interactive/interactive-session-runtime.js +1 -0
  922. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  923. package/dist/modes/interactive/interactive-slash-commands.js +9 -4
  924. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  925. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  926. package/dist/modes/interactive/interactive-startup.js +37 -18
  927. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  928. package/dist/modes/interactive/interactive-tui.d.ts +21 -0
  929. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -0
  930. package/dist/modes/interactive/interactive-tui.js +279 -0
  931. package/dist/modes/interactive/interactive-tui.js.map +1 -0
  932. package/dist/modes/interactive/streaming-assistant-message.d.ts +34 -0
  933. package/dist/modes/interactive/streaming-assistant-message.d.ts.map +1 -0
  934. package/dist/modes/interactive/streaming-assistant-message.js +76 -0
  935. package/dist/modes/interactive/streaming-assistant-message.js.map +1 -0
  936. package/dist/modes/interactive/theme/catppuccin-frappe.json +1 -0
  937. package/dist/modes/interactive/theme/catppuccin-latte.json +1 -0
  938. package/dist/modes/interactive/theme/catppuccin-macchiato.json +1 -0
  939. package/dist/modes/interactive/theme/catppuccin-mocha.json +1 -0
  940. package/dist/modes/interactive/theme/dark.json +1 -0
  941. package/dist/modes/interactive/theme/light.json +1 -0
  942. package/dist/modes/interactive/theme/terminal-detection.d.ts +10 -0
  943. package/dist/modes/interactive/theme/terminal-detection.d.ts.map +1 -1
  944. package/dist/modes/interactive/theme/terminal-detection.js +19 -0
  945. package/dist/modes/interactive/theme/terminal-detection.js.map +1 -1
  946. package/dist/modes/interactive/theme/theme-class.d.ts +2 -2
  947. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  948. package/dist/modes/interactive/theme/theme-class.js +5 -1
  949. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  950. package/dist/modes/interactive/theme/theme-controller.d.ts +3 -1
  951. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  952. package/dist/modes/interactive/theme/theme-controller.js +10 -13
  953. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  954. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  955. package/dist/modes/interactive/theme/theme-loading.js +1 -0
  956. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  957. package/dist/modes/interactive/theme/theme-schema.d.ts +4 -0
  958. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  959. package/dist/modes/interactive/theme/theme-schema.js +2 -1
  960. package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  961. package/dist/modes/interactive/theme/theme-schema.json +5 -1
  962. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  963. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  964. package/dist/modes/interactive/theme/theme.js +1 -1
  965. package/dist/modes/interactive/theme/theme.js.map +1 -1
  966. package/dist/modes/interactive-engine/engine-custom-ui.d.ts +1 -1
  967. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  968. package/dist/modes/interactive-engine/engine-custom-ui.js +28 -11
  969. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  970. package/dist/modes/interactive-engine/engine-render-service.js +3 -3
  971. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  972. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +2 -1
  973. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  974. package/dist/modes/interactive-engine/extension-ui-bridge.js +2 -2
  975. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  976. package/dist/modes/interactive-engine/isolated-runtime.d.ts +7 -0
  977. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  978. package/dist/modes/interactive-engine/isolated-runtime.js +7 -0
  979. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  980. package/dist/modes/interactive-engine/protocol.d.ts +12 -10
  981. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  982. package/dist/modes/interactive-engine/protocol.js +14 -11
  983. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  984. package/dist/modes/interactive-engine/remote-component.d.ts +11 -1
  985. package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
  986. package/dist/modes/interactive-engine/remote-component.js +48 -8
  987. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  988. package/dist/modes/interactive-engine/terminal-mode-controller.d.ts +19 -12
  989. package/dist/modes/interactive-engine/terminal-mode-controller.d.ts.map +1 -1
  990. package/dist/modes/interactive-engine/terminal-mode-controller.js +54 -35
  991. package/dist/modes/interactive-engine/terminal-mode-controller.js.map +1 -1
  992. package/dist/modes/json-event.d.ts +28 -0
  993. package/dist/modes/json-event.d.ts.map +1 -0
  994. package/dist/modes/json-event.js +12 -0
  995. package/dist/modes/json-event.js.map +1 -0
  996. package/dist/modes/print-mode.d.ts.map +1 -1
  997. package/dist/modes/print-mode.js +2 -1
  998. package/dist/modes/print-mode.js.map +1 -1
  999. package/dist/modes/rpc/rpc-client-process.d.ts +1 -0
  1000. package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
  1001. package/dist/modes/rpc/rpc-client-process.js +5 -1
  1002. package/dist/modes/rpc/rpc-client-process.js.map +1 -1
  1003. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  1004. package/dist/modes/rpc/rpc-client.js +7 -2
  1005. package/dist/modes/rpc/rpc-client.js.map +1 -1
  1006. package/dist/modes/rpc/rpc-command-handler.js +1 -1
  1007. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  1008. package/dist/modes/rpc/rpc-event-buffer.d.ts +9 -0
  1009. package/dist/modes/rpc/rpc-event-buffer.d.ts.map +1 -1
  1010. package/dist/modes/rpc/rpc-event-buffer.js +10 -5
  1011. package/dist/modes/rpc/rpc-event-buffer.js.map +1 -1
  1012. package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
  1013. package/dist/modes/rpc/rpc-extension-ui.js +3 -0
  1014. package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
  1015. package/dist/modes/rpc/rpc-input.js +1 -1
  1016. package/dist/modes/rpc/rpc-input.js.map +1 -1
  1017. package/dist/modes/rpc/rpc-output-buffer.d.ts +9 -0
  1018. package/dist/modes/rpc/rpc-output-buffer.d.ts.map +1 -1
  1019. package/dist/modes/rpc/rpc-output-buffer.js +10 -5
  1020. package/dist/modes/rpc/rpc-output-buffer.js.map +1 -1
  1021. package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
  1022. package/dist/modes/rpc/rpc-provider-auth.js +3 -0
  1023. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  1024. package/dist/modes/rpc/rpc-responses.d.ts +1 -1
  1025. package/dist/modes/rpc/rpc-responses.d.ts.map +1 -1
  1026. package/dist/modes/rpc/rpc-responses.js +13 -1
  1027. package/dist/modes/rpc/rpc-responses.js.map +1 -1
  1028. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  1029. package/dist/modes/rpc/rpc-session-binding.js +2 -1
  1030. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  1031. package/dist/modes/rpc/rpc-types.d.ts +9 -2
  1032. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1033. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1034. package/dist/rpc-entry.js +2 -0
  1035. package/dist/rpc-entry.js.map +1 -1
  1036. package/dist/self-update-plan.d.ts.map +1 -1
  1037. package/dist/self-update-plan.js +5 -4
  1038. package/dist/self-update-plan.js.map +1 -1
  1039. package/dist/server/create-harness.d.ts +53 -0
  1040. package/dist/server/create-harness.d.ts.map +1 -0
  1041. package/dist/server/create-harness.js +349 -0
  1042. package/dist/server/create-harness.js.map +1 -0
  1043. package/dist/utils/agent-attribution.d.ts +2 -0
  1044. package/dist/utils/agent-attribution.d.ts.map +1 -0
  1045. package/dist/utils/agent-attribution.js +2 -0
  1046. package/dist/utils/agent-attribution.js.map +1 -0
  1047. package/dist/utils/child-process.d.ts +3 -1
  1048. package/dist/utils/child-process.d.ts.map +1 -1
  1049. package/dist/utils/child-process.js +24 -4
  1050. package/dist/utils/child-process.js.map +1 -1
  1051. package/dist/utils/clipboard-image.d.ts.map +1 -1
  1052. package/dist/utils/clipboard-image.js +2 -1
  1053. package/dist/utils/clipboard-image.js.map +1 -1
  1054. package/dist/utils/clipboard.d.ts.map +1 -1
  1055. package/dist/utils/clipboard.js +12 -3
  1056. package/dist/utils/clipboard.js.map +1 -1
  1057. package/dist/utils/management-http.d.ts +23 -0
  1058. package/dist/utils/management-http.d.ts.map +1 -0
  1059. package/dist/utils/management-http.js +50 -0
  1060. package/dist/utils/management-http.js.map +1 -0
  1061. package/dist/utils/open-browser.d.ts.map +1 -1
  1062. package/dist/utils/open-browser.js +2 -1
  1063. package/dist/utils/open-browser.js.map +1 -1
  1064. package/dist/utils/paths.d.ts +2 -0
  1065. package/dist/utils/paths.d.ts.map +1 -1
  1066. package/dist/utils/paths.js +13 -0
  1067. package/dist/utils/paths.js.map +1 -1
  1068. package/dist/utils/shell.d.ts.map +1 -1
  1069. package/dist/utils/shell.js +17 -4
  1070. package/dist/utils/shell.js.map +1 -1
  1071. package/dist/utils/tool-result-images.d.ts +17 -0
  1072. package/dist/utils/tool-result-images.d.ts.map +1 -0
  1073. package/dist/utils/tool-result-images.js +41 -0
  1074. package/dist/utils/tool-result-images.js.map +1 -0
  1075. package/dist/utils/tools-manager.d.ts.map +1 -1
  1076. package/dist/utils/tools-manager.js +7 -8
  1077. package/dist/utils/tools-manager.js.map +1 -1
  1078. package/dist/utils/version-check.d.ts +4 -0
  1079. package/dist/utils/version-check.d.ts.map +1 -1
  1080. package/dist/utils/version-check.js +20 -2
  1081. package/dist/utils/version-check.js.map +1 -1
  1082. package/docs/compaction.md +2 -1
  1083. package/docs/custom-provider.md +15 -7
  1084. package/docs/development.md +1 -0
  1085. package/docs/docs.json +1 -0
  1086. package/docs/environment-variables.md +4 -0
  1087. package/docs/extensions.md +102 -18
  1088. package/docs/i-have-adhd.md +36 -0
  1089. package/docs/intercom.md +31 -16
  1090. package/docs/json.md +2 -2
  1091. package/docs/keybindings.md +55 -12
  1092. package/docs/models/model-selection.md +34 -8
  1093. package/docs/models.md +28 -3
  1094. package/docs/providers.md +20 -2
  1095. package/docs/quickstart.md +5 -5
  1096. package/docs/rpc.md +18 -12
  1097. package/docs/sdk.md +43 -7
  1098. package/docs/security.md +10 -10
  1099. package/docs/sessions.md +2 -0
  1100. package/docs/settings.md +32 -6
  1101. package/docs/subagents.md +30 -45
  1102. package/docs/themes.md +5 -3
  1103. package/docs/tools.md +21 -1
  1104. package/docs/tui.md +41 -24
  1105. package/docs/usage.md +40 -14
  1106. package/docs/windows.md +2 -0
  1107. package/docs/workflows.md +237 -25
  1108. package/examples/extensions/custom-provider-anthropic/index.ts +9 -2
  1109. package/examples/extensions/custom-provider-gitlab-duo/index.ts +9 -2
  1110. package/examples/extensions/gondolin/package-lock.json +3 -3
  1111. package/examples/extensions/modal-editor.ts +8 -10
  1112. package/examples/extensions/rainbow-editor.ts +3 -2
  1113. package/examples/extensions/subagent/README.md +16 -45
  1114. package/examples/extensions/subagent/index.ts +6 -96
  1115. package/examples/extensions/subagent/render.ts +0 -78
  1116. package/examples/extensions/subagent/runner.ts +0 -3
  1117. package/examples/extensions/subagent/schemas.ts +0 -13
  1118. package/examples/extensions/subagent/types.ts +1 -2
  1119. package/examples/sdk/09-api-keys-and-oauth.ts +6 -2
  1120. package/examples/sdk/12-full-control.ts +8 -2
  1121. package/examples/sdk/README.md +4 -1
  1122. package/npm-shrinkwrap.json +191 -634
  1123. package/package.json +14 -7
  1124. package/dist/builtin/subagents/src/agents/chain-serializer.ts +0 -257
  1125. package/dist/builtin/subagents/src/runs/background/async-event-journal.ts +0 -112
  1126. package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +0 -543
  1127. package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +0 -140
  1128. package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +0 -279
  1129. package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +0 -99
  1130. package/dist/builtin/subagents/src/runs/background/async-execution.ts +0 -17
  1131. package/dist/builtin/subagents/src/runs/background/async-resume.ts +0 -402
  1132. package/dist/builtin/subagents/src/runs/background/async-status.ts +0 -411
  1133. package/dist/builtin/subagents/src/runs/background/completion-claims.ts +0 -196
  1134. package/dist/builtin/subagents/src/runs/background/completion-dedupe.ts +0 -102
  1135. package/dist/builtin/subagents/src/runs/background/parallel-groups.ts +0 -59
  1136. package/dist/builtin/subagents/src/runs/background/result-delivery-processor.ts +0 -300
  1137. package/dist/builtin/subagents/src/runs/background/result-file-claims.ts +0 -166
  1138. package/dist/builtin/subagents/src/runs/background/result-quarantine.ts +0 -77
  1139. package/dist/builtin/subagents/src/runs/background/result-retry-scheduler.ts +0 -48
  1140. package/dist/builtin/subagents/src/runs/background/result-status.ts +0 -87
  1141. package/dist/builtin/subagents/src/runs/background/result-watcher-data.ts +0 -72
  1142. package/dist/builtin/subagents/src/runs/background/result-watcher.ts +0 -320
  1143. package/dist/builtin/subagents/src/runs/background/run-id-resolver.ts +0 -105
  1144. package/dist/builtin/subagents/src/runs/background/run-status.ts +0 -358
  1145. package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +0 -457
  1146. package/dist/builtin/subagents/src/runs/background/subagent-runner-dynamic.ts +0 -376
  1147. package/dist/builtin/subagents/src/runs/background/subagent-runner-finalize.ts +0 -150
  1148. package/dist/builtin/subagents/src/runs/background/subagent-runner-output.ts +0 -109
  1149. package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel-helpers.ts +0 -128
  1150. package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel.ts +0 -309
  1151. package/dist/builtin/subagents/src/runs/background/subagent-runner-sequential.ts +0 -173
  1152. package/dist/builtin/subagents/src/runs/background/subagent-runner-state.ts +0 -578
  1153. package/dist/builtin/subagents/src/runs/background/subagent-runner-step.ts +0 -330
  1154. package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +0 -330
  1155. package/dist/builtin/subagents/src/runs/background/subagent-runner-types.ts +0 -210
  1156. package/dist/builtin/subagents/src/runs/background/subagent-runner-utils.ts +0 -69
  1157. package/dist/builtin/subagents/src/runs/background/subagent-runner.ts +0 -90
  1158. package/dist/builtin/subagents/src/runs/background/top-level-async.ts +0 -12
  1159. package/dist/builtin/subagents/src/runs/foreground/chain-execution-details.ts +0 -38
  1160. package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +0 -280
  1161. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +0 -217
  1162. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +0 -271
  1163. package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +0 -271
  1164. package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +0 -200
  1165. package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +0 -184
  1166. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-control.ts +0 -140
  1167. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +0 -108
  1168. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-types.ts +0 -17
  1169. package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +0 -558
  1170. package/dist/builtin/subagents/src/runs/foreground/execution-structured-retries.ts +0 -83
  1171. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +0 -109
  1172. package/dist/builtin/subagents/src/runs/shared/attempt-watchdog.ts +0 -126
  1173. package/dist/builtin/subagents/src/runs/shared/chain-outputs.ts +0 -126
  1174. package/dist/builtin/subagents/src/runs/shared/dynamic-fanout.ts +0 -387
  1175. package/dist/builtin/subagents/src/runs/shared/final-drain.ts +0 -39
  1176. package/dist/builtin/subagents/src/runs/shared/pi-args.ts +0 -339
  1177. package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +0 -165
  1178. package/dist/builtin/subagents/src/runs/shared/spawn-env.ts +0 -21
  1179. package/dist/builtin/subagents/src/runs/shared/structured-output.ts +0 -150
  1180. package/dist/builtin/subagents/src/runs/shared/workflow-graph.ts +0 -232
  1181. package/dist/builtin/subagents/src/shared/post-exit-stdio-guard.ts +0 -86
  1182. package/dist/builtin/subagents/src/slash/saved-chain-mapping.ts +0 -60
  1183. package/dist/builtin/subagents/src/tui/render-chain-graph.ts +0 -335
  1184. package/examples/extensions/subagent/prompts/implement-and-review.md +0 -10
  1185. package/examples/extensions/subagent/prompts/implement.md +0 -10
  1186. package/examples/extensions/subagent/prompts/scout-and-plan.md +0 -9
  1187. /package/dist/builtin/subagents/src/runs/{shared/nested-path.ts → inprocess/runtime-support/nested-paths.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"model-runtime.js","sourceRoot":"","sources":["../../src/core/model-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, join } from \"node:path\";\nimport {\n\ttype Api,\n\ttype AssistantMessage,\n\ttype AssistantMessageEventStream,\n\ttype AuthCheck,\n\ttype AuthInteraction,\n\ttype AuthResult,\n\ttype AuthType,\n\ttype Context,\n\ttype Credential,\n\ttype CredentialInfo,\n\tcreateModels,\n\ttype Model,\n\ttype Models,\n\ttype ModelsApiStreamOptions,\n\ttype ModelsRefreshOptions,\n\ttype ModelsRefreshResult,\n\ttype ModelsSimpleStreamOptions,\n\ttype ModelsStore,\n\ttype MutableModels,\n\ttype Provider,\n} from \"@earendil-works/pi-ai\";\nimport * as builtinProviderCatalog from \"@earendil-works/pi-ai/providers/all\";\nimport { getAgentDir } from \"../config.ts\";\nimport { AuthStorage as DefaultAuthStorage } from \"./auth-storage.ts\";\nimport { ModelConfig } from \"./model-config.ts\";\nimport { POST_LOGOUT_AUTH_CHECK_TIMEOUT_MS } from \"./model-refresh-timeout.ts\";\nimport {\n\taddRuntimeApiKeyProvider,\n\taddStoredCredentialProvider,\n\tcreateEmptyModelRuntimeSnapshot,\n\tcreateModelRuntimeSnapshot,\n\tgetSnapshotProviderAuthStatus,\n\ttype ModelRuntimeSnapshot,\n\tremoveStoredCredentialProvider,\n\treplaceStoredCredentialProviders,\n\tupdateSnapshotModels,\n} from \"./model-runtime-snapshot.ts\";\nimport { FileModelsStore, InMemoryCodingAgentModelsStore } from \"./models-store.ts\";\nimport { collectOAuthProviderMetadata } from \"./oauth-provider-metadata.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport {\n\ttype AuthStatus,\n\ttype CompatibilityRequestConfig,\n\tcomposeModelProvider,\n\tconfiguredRequestAuthStatus,\n\ttype ProviderConfigInput,\n\tresolveCompatibilityRequestConfig,\n\tvalidateExtensionProvider,\n} from \"./provider-composer.ts\";\nimport { withRemoteCatalog } from \"./remote-catalog-provider.ts\";\nimport { RuntimeCredentials } from \"./runtime-credentials.ts\";\n\nexport type { CreateModelRuntimeOptions, ModelRuntimeAuthOverrides } from \"./model-runtime-types.ts\";\n\nimport { mergeConfiguredAuthHeaders } from \"./model-runtime-auth.ts\";\nimport { configureBuiltinProviders } from \"./model-runtime-providers.ts\";\nimport { canRestoreUnknownModel as canRestoreUnknownModelProvider } from \"./model-runtime-restoration.ts\";\nimport { ModelRuntimeStreaming } from \"./model-runtime-streaming.ts\";\nimport type { CreateModelRuntimeOptions, ModelRuntimeAuthOverrides } from \"./model-runtime-types.ts\";\n/** Configured pi-ai Models collection used by coding-agent and SDK consumers. */\nexport class ModelRuntime implements Models {\n\tprivate readonly models: MutableModels;\n\tprivate readonly credentials: RuntimeCredentials;\n\tprivate readonly streaming: ModelRuntimeStreaming;\n\tprivate readonly defaultBuiltins: ReadonlyMap<string, Provider>;\n\tprivate readonly builtins = new Map<string, Provider>();\n\tprivate readonly nativeExtensionProviders = new Map<string, Provider>();\n\tprivate readonly extensionProviders = new Map<string, ProviderConfigInput>();\n\tprivate readonly compositionErrors = new Map<string, string>();\n\tprivate readonly modelsPath: string | undefined;\n\tprivate readonly modelNetworkEnabled: boolean;\n\tprivate config: ModelConfig;\n\tprivate snapshot: ModelRuntimeSnapshot = createEmptyModelRuntimeSnapshot();\n\tprivate snapshotGeneration = 0;\n\tprivate readonly externalProviderAuthStatuses = new Map<string, AuthStatus>();\n\tprivate availabilityRefresh: Promise<void> | undefined;\n\tprivate availabilityError: string | undefined;\n\tprivate constructor(\n\t\tcredentials: RuntimeCredentials,\n\t\tconfig: ModelConfig,\n\t\tmodelsPath: string | undefined,\n\t\tmodelsStore: ModelsStore,\n\t\tproviders: readonly Provider[],\n\t\tmodelNetworkEnabled: boolean,\n\t) {\n\t\tthis.credentials = credentials;\n\t\tthis.config = config;\n\t\tthis.modelsPath = modelsPath;\n\t\tthis.modelNetworkEnabled = modelNetworkEnabled;\n\t\tthis.defaultBuiltins = new Map(providers.map((provider) => [provider.id, provider]));\n\t\tfor (const [providerId, provider] of this.defaultBuiltins) this.builtins.set(providerId, provider);\n\t\tthis.models = createModels({ credentials, modelsStore });\n\t\tthis.streaming = new ModelRuntimeStreaming(this.models, (model, overrides) => this.getAuth(model, overrides));\n\t\tthis.rebuildProviders();\n\t}\n\tstatic async create(options: CreateModelRuntimeOptions = {}): Promise<ModelRuntime> {\n\t\tconst credentials = new RuntimeCredentials(options.credentials ?? DefaultAuthStorage.create(options.authPath));\n\t\tconst modelsPath =\n\t\t\toptions.modelsPath === null ? undefined : (options.modelsPath ?? join(getAgentDir(), \"models.json\"));\n\t\tconst config = await ModelConfig.load(modelsPath);\n\t\tconst modelsStore =\n\t\t\toptions.modelsStore ??\n\t\t\t(modelsPath\n\t\t\t\t? new FileModelsStore(options.modelsStorePath ?? join(dirname(modelsPath), \"models-store.json\"))\n\t\t\t\t: new InMemoryCodingAgentModelsStore());\n\t\tconst builtinModelDataGeneratedAt = builtinProviderCatalog.getBuiltinModelDataGeneratedAt();\n\t\tconst providers = builtinProviderCatalog\n\t\t\t.builtinProviders()\n\t\t\t.map((provider) =>\n\t\t\t\tprovider.id === \"radius\"\n\t\t\t\t\t? provider\n\t\t\t\t\t: withRemoteCatalog(provider, options.catalogBaseUrl, builtinModelDataGeneratedAt),\n\t\t\t);\n\t\tconst runtime = new ModelRuntime(\n\t\t\tcredentials,\n\t\t\tconfig,\n\t\t\tmodelsPath,\n\t\t\tmodelsStore,\n\t\t\tproviders,\n\t\t\t!isOfflineModeEnabled(),\n\t\t);\n\t\truntime.configureRadiusProviders();\n\t\truntime.rebuildProviders();\n\t\tconst refreshFromNetwork = runtime.modelNetworkEnabled && options.allowModelNetwork === true;\n\t\tconst controller = refreshFromNetwork ? new AbortController() : undefined;\n\t\tconst timeout = controller\n\t\t\t? setTimeout(() => controller.abort(), options.modelRefreshTimeoutMs ?? 15_000)\n\t\t\t: undefined;\n\t\ttry {\n\t\t\tawait runtime.refresh({ allowNetwork: refreshFromNetwork, signal: controller?.signal });\n\t\t} finally {\n\t\t\tif (timeout) clearTimeout(timeout);\n\t\t}\n\t\treturn runtime;\n\t}\n\tprivate configureRadiusProviders(): void {\n\t\tconfigureBuiltinProviders(this.builtins, this.defaultBuiltins, this.config);\n\t}\n\tprivate providerIds(): Set<string> {\n\t\treturn new Set([\n\t\t\t...this.builtins.keys(),\n\t\t\t...this.nativeExtensionProviders.keys(),\n\t\t\t...this.config.getProviderIds(),\n\t\t\t...this.extensionProviders.keys(),\n\t\t]);\n\t}\n\tprivate recomposeProvider(providerId: string): void {\n\t\tconst base = this.nativeExtensionProviders.get(providerId) ?? this.builtins.get(providerId);\n\t\tconst extension = this.extensionProviders.get(providerId);\n\t\tif (!base && !this.config.getProvider(providerId) && !extension) {\n\t\t\tthis.models.deleteProvider(providerId);\n\t\t\tthis.compositionErrors.delete(providerId);\n\t\t\treturn;\n\t\t}\n\t\tif (base && !this.config.getProvider(providerId) && !extension) {\n\t\t\t// No overlays: use the builtin untouched so its auth/login/stream behavior is exact.\n\t\t\tthis.models.setProvider(base);\n\t\t\tthis.compositionErrors.delete(providerId);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tthis.models.setProvider(composeModelProvider(providerId, base, this.config, extension));\n\t\t\tthis.compositionErrors.delete(providerId);\n\t\t} catch (error) {\n\t\t\tthis.compositionErrors.set(providerId, error instanceof Error ? error.message : String(error));\n\t\t\tif (base) this.models.setProvider(base);\n\t\t\telse this.models.deleteProvider(providerId);\n\t\t}\n\t}\n\tprivate rebuildProviders(): void {\n\t\tthis.models.clearProviders();\n\t\tthis.compositionErrors.clear();\n\t\tfor (const providerId of this.providerIds()) this.recomposeProvider(providerId);\n\t\tthis.updateModelSnapshot();\n\t}\n\tprivate updateModelSnapshot(): void {\n\t\tthis.snapshotGeneration += 1;\n\t\tthis.snapshot = updateSnapshotModels(this.snapshot, [...this.models.getModels()]);\n\t}\n\tprivate async runAvailabilityRefresh(generation: number): Promise<void> {\n\t\tconst providers = this.models.getProviders();\n\t\tconst [available, checks, credentials] = await Promise.all([\n\t\t\tthis.models.getAvailable(),\n\t\t\tPromise.all(\n\t\t\t\tproviders.map(\n\t\t\t\t\tasync (provider): Promise<[string, AuthCheck | undefined]> => [\n\t\t\t\t\t\tprovider.id,\n\t\t\t\t\t\tawait this.models.checkAuth(provider.id),\n\t\t\t\t\t],\n\t\t\t\t),\n\t\t\t),\n\t\t\tthis.credentials.list(),\n\t\t]);\n\t\t// Credential and provider mutations publish their own snapshot immediately.\n\t\t// A refresh started before that mutation must not overwrite newer state when\n\t\t// a slower machine eventually lets it finish.\n\t\tif (generation === this.snapshotGeneration) {\n\t\t\tthis.snapshot = createModelRuntimeSnapshot([...this.models.getModels()], [...available], checks, credentials);\n\t\t\tthis.availabilityError = undefined;\n\t\t}\n\t}\n\tprivate queueAvailabilityRefresh(after: Promise<void> | undefined): Promise<void> {\n\t\tconst generation = this.snapshotGeneration;\n\t\tconst refresh = (after ?? Promise.resolve()).catch(() => {}).then(() => this.runAvailabilityRefresh(generation));\n\t\tconst recorded = refresh.catch((error) => {\n\t\t\tif (generation === this.snapshotGeneration) {\n\t\t\t\tthis.availabilityError = error instanceof Error ? error.message : String(error);\n\t\t\t}\n\t\t\tthrow error;\n\t\t});\n\t\tconst tracked = recorded.finally(() => {\n\t\t\tif (this.availabilityRefresh === tracked) this.availabilityRefresh = undefined;\n\t\t});\n\t\tthis.availabilityRefresh = tracked;\n\t\treturn tracked;\n\t}\n\t/** Coalesce concurrent readers onto the pending refresh. */\n\tprivate refreshAvailability(): Promise<void> {\n\t\treturn this.availabilityRefresh ?? this.queueAvailabilityRefresh(undefined);\n\t}\n\t/** Mutations must not observe an in-flight refresh started before them. */\n\tprivate forceRefreshAvailability(): Promise<void> {\n\t\treturn this.queueAvailabilityRefresh(this.availabilityRefresh);\n\t}\n\tgetProviders(): readonly Provider[] {\n\t\treturn this.models.getProviders();\n\t}\n\tgetProvider(providerId: string): Provider | undefined {\n\t\treturn this.models.getProvider(providerId);\n\t}\n\t/** Whether an authenticated provider may reconstruct an absent saved model ID. */\n\tcanRestoreUnknownModel(providerId: string): boolean {\n\t\treturn canRestoreUnknownModelProvider(\n\t\t\tproviderId,\n\t\t\tthis.defaultBuiltins.get(providerId),\n\t\t\tthis.config.getProvider(providerId),\n\t\t\tthis.extensionProviders.get(providerId),\n\t\t\tthis.nativeExtensionProviders.get(providerId),\n\t\t);\n\t}\n\tgetModels(providerId?: string): readonly Model<Api>[] {\n\t\treturn this.models.getModels(providerId);\n\t}\n\tgetModel(providerId: string, modelId: string): Model<Api> | undefined {\n\t\treturn this.models.getModel(providerId, modelId);\n\t}\n\tasync checkAuth(providerId: string): Promise<AuthCheck | undefined> {\n\t\treturn this.models.checkAuth(providerId);\n\t}\n\tasync getAvailable(providerId?: string): Promise<readonly Model<Api>[]> {\n\t\tif (providerId) {\n\t\t\tif (this.availabilityRefresh) {\n\t\t\t\tawait this.availabilityRefresh;\n\t\t\t\treturn this.snapshot.available.filter((model) => model.provider === providerId);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\treturn await this.models.getAvailable(providerId);\n\t\t\t} catch (error) {\n\t\t\t\tthis.availabilityError = error instanceof Error ? error.message : String(error);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tawait this.refreshAvailability();\n\t\treturn this.snapshot.available;\n\t}\n\tgetAvailableSnapshot(): readonly Model<Api>[] {\n\t\treturn this.snapshot.available;\n\t}\n\tgetError(): string | undefined {\n\t\tconst errors: string[] = [];\n\t\tconst configError = this.config.getError();\n\t\tif (configError) errors.push(configError);\n\t\tfor (const [providerId, error] of this.compositionErrors) {\n\t\t\terrors.push(`Provider \"${providerId}\": ${error}`);\n\t\t}\n\t\tif (this.availabilityError) errors.push(`Availability refresh: ${this.availabilityError}`);\n\t\treturn errors.length > 0 ? errors.join(\"\\n\\n\") : undefined;\n\t}\n\n\tgetRegisteredProviderConfig(providerId: string): ProviderConfigInput | undefined {\n\t\treturn this.extensionProviders.get(providerId);\n\t}\n\n\tgetRegisteredProviderIds(): readonly string[] {\n\t\treturn [...new Set([...this.extensionProviders.keys(), ...this.nativeExtensionProviders.keys()])];\n\t}\n\n\tgetRegisteredNativeProvider(providerId: string): Provider | undefined {\n\t\treturn this.nativeExtensionProviders.get(providerId);\n\t}\n\tgetOAuthProviderMetadata() {\n\t\treturn collectOAuthProviderMetadata(this.getProviders(), this.extensionProviders);\n\t}\n\t/** @internal Compatibility fallback for ModelRegistry when provider auth is unconfigured. */\n\tgetCompatibilityRequestConfig(model: Model<Api>): CompatibilityRequestConfig {\n\t\treturn resolveCompatibilityRequestConfig(\n\t\t\tmodel,\n\t\t\tthis.config.getProvider(model.provider),\n\t\t\tthis.extensionProviders.get(model.provider),\n\t\t);\n\t}\n\n\tisUsingOAuth(providerId: string): boolean {\n\t\treturn this.snapshot.auth.get(providerId)?.type === \"oauth\";\n\t}\n\n\thasConfiguredAuth(providerId: string): boolean {\n\t\treturn this.snapshot.configuredProviders.has(providerId);\n\t}\n\n\tgetAuth(providerId: string, overrides?: ModelRuntimeAuthOverrides): Promise<AuthResult | undefined>;\n\tgetAuth(model: Model<Api>, overrides?: ModelRuntimeAuthOverrides): Promise<AuthResult | undefined>;\n\tasync getAuth(\n\t\tproviderOrModel: string | Model<Api>,\n\t\toverrides: ModelRuntimeAuthOverrides = {},\n\t): Promise<AuthResult | undefined> {\n\t\tif (typeof providerOrModel === \"string\") return this.models.getAuth(providerOrModel, overrides);\n\t\tconst resolution = await this.models.getAuth(providerOrModel, overrides);\n\t\tif (!resolution) return undefined;\n\t\treturn mergeConfiguredAuthHeaders(\n\t\t\tresolution,\n\t\t\tproviderOrModel,\n\t\t\tthis.config,\n\t\t\tthis.extensionProviders.get(providerOrModel.provider),\n\t\t\toverrides,\n\t\t);\n\t}\n\t/** Reload credentials changed by the authoritative isolated engine and update auth status snapshots. */\n\tasync reloadCredentials(options: { refreshAvailability?: boolean } = {}): Promise<void> {\n\t\tawait this.credentials.reload();\n\t\tif (options.refreshAvailability === false) {\n\t\t\tconst credentials = await this.credentials.list();\n\t\t\tfor (const credential of credentials) this.externalProviderAuthStatuses.delete(credential.providerId);\n\t\t\tthis.snapshotGeneration += 1;\n\t\t\tthis.snapshot = replaceStoredCredentialProviders(this.snapshot, credentials);\n\t\t\treturn;\n\t\t}\n\t\tawait this.forceRefreshAvailability();\n\t}\n\n\tasync saveCredential(providerId: string, credential: Credential): Promise<void> {\n\t\tawait this.credentials.modify(providerId, async () => credential);\n\t\tawait this.refresh();\n\t}\n\tasync setRuntimeApiKey(\n\t\tproviderId: string,\n\t\tapiKey: string,\n\t\trefreshOptions: ModelsRefreshOptions = {},\n\t): Promise<void> {\n\t\tthis.credentials.setRuntimeApiKey(providerId, apiKey);\n\t\tthis.snapshot = addRuntimeApiKeyProvider(this.snapshot, providerId);\n\t\tawait this.refresh(refreshOptions);\n\t}\n\n\tasync removeRuntimeApiKey(providerId: string): Promise<void> {\n\t\tthis.credentials.removeRuntimeApiKey(providerId);\n\t\tawait this.refresh({ allowNetwork: this.modelNetworkEnabled });\n\t}\n\n\tlistCredentials(): Promise<readonly CredentialInfo[]> {\n\t\treturn this.credentials.list();\n\t}\n\n\tgetStoredCredentialType(providerId: string): CredentialInfo[\"type\"] | undefined {\n\t\treturn this.snapshot.storedCredentialTypes.get(providerId);\n\t}\n\n\tgetProviderAuthStatus(providerId: string): AuthStatus {\n\t\tconst localStatus = getSnapshotProviderAuthStatus(\n\t\t\tthis.snapshot,\n\t\t\tproviderId,\n\t\t\tthis.credentials.hasRuntimeApiKey(providerId),\n\t\t\tconfiguredRequestAuthStatus(this.config.getProvider(providerId), this.extensionProviders.get(providerId)),\n\t\t);\n\t\tif (localStatus.source === \"stored\" || localStatus.source === \"runtime\") return localStatus;\n\t\treturn this.externalProviderAuthStatuses.get(providerId) ?? localStatus;\n\t}\n\n\t/** Apply authoritative auth state returned by an isolated engine mutation. */\n\tapplyExternalProviderAuthStatus(providerId: string, status: AuthStatus): void {\n\t\tthis.snapshotGeneration += 1;\n\t\tconst remainingAuth =\n\t\t\tstatus.configured && status.source === \"environment\"\n\t\t\t\t? ({ type: \"api_key\", source: status.label ?? \"environment\" } as const)\n\t\t\t\t: undefined;\n\t\tthis.snapshot = removeStoredCredentialProvider(this.snapshot, providerId, remainingAuth);\n\t\tthis.externalProviderAuthStatuses.set(providerId, status);\n\t}\n\n\tstream<TApi extends Api>(\n\t\tmodel: Model<TApi>,\n\t\tcontext: Context,\n\t\toptions?: ModelsApiStreamOptions<TApi>,\n\t): AssistantMessageEventStream {\n\t\treturn this.streaming.stream(model, context, options);\n\t}\n\n\tcomplete<TApi extends Api>(\n\t\tmodel: Model<TApi>,\n\t\tcontext: Context,\n\t\toptions?: ModelsApiStreamOptions<TApi>,\n\t): Promise<AssistantMessage> {\n\t\treturn this.streaming.complete(model, context, options);\n\t}\n\n\tstreamSimple(model: Model<Api>, context: Context, options?: ModelsSimpleStreamOptions): AssistantMessageEventStream {\n\t\treturn this.streaming.streamSimple(model, context, options);\n\t}\n\n\tcompleteSimple(model: Model<Api>, context: Context, options?: ModelsSimpleStreamOptions): Promise<AssistantMessage> {\n\t\treturn this.streaming.completeSimple(model, context, options);\n\t}\n\n\tasync login(providerId: string, type: AuthType, interaction: AuthInteraction): Promise<Credential> {\n\t\tconst credential = await this.models.login(providerId, type, interaction);\n\t\t// Credential acquisition and persistence are the login transaction. Publish\n\t\t// the provider against the current snapshot immediately; catalog restoration,\n\t\t// ambient availability checks, and networking belong to /model's bounded\n\t\t// background refresh and must never keep a successful login dialog open.\n\t\tthis.updateModelSnapshot();\n\t\tthis.externalProviderAuthStatuses.delete(providerId);\n\t\tthis.snapshot = addStoredCredentialProvider(this.snapshot, providerId, credential.type);\n\t\treturn credential;\n\t}\n\n\tasync logout(providerId: string): Promise<void> {\n\t\tawait this.models.logout(providerId);\n\t\t// Reset credential-dependent compatibility projections, then publish the\n\t\t// persisted deletion without waiting for model stores or remote catalogs.\n\t\tthis.recomposeProvider(providerId);\n\t\tthis.updateModelSnapshot();\n\t\tthis.externalProviderAuthStatuses.delete(providerId);\n\t\tthis.snapshot = removeStoredCredentialProvider(this.snapshot, providerId);\n\t\tconst logoutGeneration = this.snapshotGeneration;\n\n\t\t// Environment/runtime auth can remain after stored auth is removed. The\n\t\t// probe is normally synchronous, but its deadline is authoritative because\n\t\t// extension checks are third-party code and need not honor cancellation.\n\t\tlet timeout: number | undefined;\n\t\ttry {\n\t\t\tconst remainingAuth = await Promise.race([\n\t\t\t\tthis.checkAuth(providerId).catch(() => undefined),\n\t\t\t\tnew Promise<undefined>((resolve) => {\n\t\t\t\t\ttimeout = setTimeout(resolve, POST_LOGOUT_AUTH_CHECK_TIMEOUT_MS);\n\t\t\t\t}),\n\t\t\t]);\n\t\t\tif (logoutGeneration === this.snapshotGeneration && !this.snapshot.storedProviders.has(providerId)) {\n\t\t\t\tthis.snapshot = removeStoredCredentialProvider(this.snapshot, providerId, remainingAuth);\n\t\t\t}\n\t\t} finally {\n\t\t\tif (timeout) clearTimeout(timeout);\n\t\t}\n\t}\n\n\tasync refresh(options: ModelsRefreshOptions = {}): Promise<ModelsRefreshResult> {\n\t\tthis.config = await ModelConfig.load(this.modelsPath);\n\t\tthis.configureRadiusProviders();\n\t\tthis.rebuildProviders();\n\t\tconst refreshOptions = {\n\t\t\t...options,\n\t\t\tallowNetwork: options.allowNetwork ?? this.modelNetworkEnabled,\n\t\t};\n\t\t// Published pi-ai builds before ModelsStore returned void and accepted a provider ID.\n\t\t// The fallback keeps source-mode CLI tests working without rebuilding workspace dependencies.\n\t\tconst result = ((await this.models.refresh(refreshOptions)) as ModelsRefreshResult | undefined) ?? {\n\t\t\taborted: refreshOptions.signal?.aborted ?? false,\n\t\t\terrors: new Map(),\n\t\t};\n\t\tthis.updateModelSnapshot();\n\t\ttry {\n\t\t\tawait this.forceRefreshAvailability();\n\t\t} catch {\n\t\t\t// Availability errors are recorded by forceRefreshAvailability; refreshed models remain usable.\n\t\t}\n\t\treturn result;\n\t}\n\n\tregisterNativeProvider(provider: Provider): void {\n\t\tif (!provider.id.trim()) throw new Error(\"Provider id must not be empty.\");\n\t\tthis.extensionProviders.delete(provider.id);\n\t\tthis.nativeExtensionProviders.set(provider.id, provider);\n\t\tthis.recomposeProvider(provider.id);\n\t\tthis.updateModelSnapshot();\n\t\tvoid this.refresh({ allowNetwork: false });\n\t}\n\n\tregisterProvider(providerId: string, config: ProviderConfigInput): void {\n\t\t// Validate the incoming registration on its own, like the legacy registry:\n\t\t// a broken re-registration must throw without touching the stored config.\n\t\tvalidateExtensionProvider(providerId, this.builtins.get(providerId), this.config.getProvider(providerId), config);\n\t\tthis.nativeExtensionProviders.delete(providerId);\n\t\t// Re-registration merges defined values over the previous registration and\n\t\t// preserves undefined ones, matching the legacy ModelRegistry contract.\n\t\tconst previous = this.extensionProviders.get(providerId);\n\t\tconst effective: ProviderConfigInput = { ...previous };\n\t\tfor (const [key, value] of Object.entries(config)) {\n\t\t\tif (value !== undefined) (effective as Record<string, unknown>)[key] = value;\n\t\t}\n\t\tthis.extensionProviders.set(providerId, effective);\n\t\tthis.recomposeProvider(providerId);\n\t\tthis.updateModelSnapshot();\n\t\tif (\n\t\t\tthis.snapshot.storedProviders.has(providerId) ||\n\t\t\tconfiguredRequestAuthStatus(this.config.getProvider(providerId), effective)?.configured\n\t\t) {\n\t\t\tconst configuredProviders = new Set(this.snapshot.configuredProviders).add(providerId);\n\t\t\tconst auth = new Map(this.snapshot.auth);\n\t\t\t// Provisional entry until the async refresh lands; never clobber a real check result.\n\t\t\tif (!auth.get(providerId)) {\n\t\t\t\tauth.set(providerId, {\n\t\t\t\t\ttype: effective.oauth && !effective.apiKey ? \"oauth\" : \"api_key\",\n\t\t\t\t\tsource: \"configured provider\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.snapshot = {\n\t\t\t\t...this.snapshot,\n\t\t\t\tauth,\n\t\t\t\tconfiguredProviders,\n\t\t\t\tavailable: this.snapshot.all.filter((model) => configuredProviders.has(model.provider)),\n\t\t\t};\n\t\t}\n\t\tvoid this.refresh({ allowNetwork: false });\n\t}\n\n\tunregisterProvider(providerId: string): void {\n\t\tthis.extensionProviders.delete(providerId);\n\t\tthis.nativeExtensionProviders.delete(providerId);\n\t\tthis.recomposeProvider(providerId);\n\t\tthis.updateModelSnapshot();\n\t\tvoid this.refresh({ allowNetwork: false });\n\t}\n}\n"]}
1
+ {"version":3,"file":"model-runtime.js","sourceRoot":"","sources":["../../src/core/model-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, join } from \"node:path\";\nimport {\n\ttype Api,\n\ttype AssistantMessage,\n\ttype AssistantMessageEventStream,\n\ttype AuthCheck,\n\ttype AuthInteraction,\n\ttype AuthOperationOptions,\n\ttype AuthResult,\n\ttype AuthType,\n\ttype Context,\n\ttype Credential,\n\ttype CredentialInfo,\n\tcreateModels,\n\ttype DeferredHandle,\n\ttype Model,\n\ttype Models,\n\ttype ModelsApiStreamOptions,\n\ttype ModelsDeferredCancelOptions,\n\ttype ModelsDeferredFetchOptions,\n\ttype ModelsRefreshOptions,\n\ttype ModelsRefreshResult,\n\ttype ModelsSimpleStreamOptions,\n\ttype ModelsStore,\n\ttype MutableModels,\n\ttype Provider,\n} from \"@earendil-works/pi-ai\";\nimport * as builtinProviderCatalog from \"@earendil-works/pi-ai/providers/all\";\nimport { getAgentDir } from \"../config.ts\";\nimport { AuthStorage as DefaultAuthStorage } from \"./auth-storage.ts\";\nimport { ModelConfig } from \"./model-config.ts\";\nimport { POST_LOGOUT_AUTH_CHECK_TIMEOUT_MS } from \"./model-refresh-timeout.ts\";\nimport {\n\taddRuntimeApiKeyProvider,\n\taddStoredCredentialProvider,\n\tcreateEmptyModelRuntimeSnapshot,\n\tcreateModelRuntimeSnapshot,\n\tgetSnapshotProviderAuthStatus,\n\ttype ModelRuntimeSnapshot,\n\tremoveStoredCredentialProvider,\n\treplaceStoredCredentialProviders,\n\tsnapshotModelKey,\n\tupdateSnapshotModels,\n} from \"./model-runtime-snapshot.ts\";\nimport { FileModelsStore, InMemoryCodingAgentModelsStore } from \"./models-store.ts\";\nimport { collectOAuthProviderMetadata } from \"./oauth-provider-metadata.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport {\n\ttype AuthStatus,\n\ttype CompatibilityRequestConfig,\n\tcomposeModelProvider,\n\tconfiguredRequestAuthStatus,\n\ttype ProviderConfigInput,\n\tresolveCompatibilityRequestConfig,\n\tvalidateExtensionProvider,\n} from \"./provider-composer.ts\";\nimport { withRemoteCatalog } from \"./remote-catalog-provider.ts\";\nimport { RuntimeCredentials } from \"./runtime-credentials.ts\";\n\nexport type { CreateModelRuntimeOptions, ModelRuntimeAuthOverrides } from \"./model-runtime-types.ts\";\n\nimport { mergeConfiguredAuthHeaders } from \"./model-runtime-auth.ts\";\nimport { configureBuiltinProviders } from \"./model-runtime-providers.ts\";\nimport { canRestoreUnknownModel as canRestoreUnknownModelProvider } from \"./model-runtime-restoration.ts\";\nimport { ModelRuntimeStreaming } from \"./model-runtime-streaming.ts\";\nimport type { CreateModelRuntimeOptions, ModelRuntimeAuthOverrides } from \"./model-runtime-types.ts\";\n\nexport type CredentialSynchronizationOperation =\n\t| \"login\"\n\t| \"logout\"\n\t| \"saveCredential\"\n\t| \"setRuntimeApiKey\"\n\t| \"removeRuntimeApiKey\";\n\n/** Credentials changed successfully, but local model state could not be synchronized. */\nexport class CredentialSynchronizationError extends Error {\n\treadonly providerId: string;\n\treadonly operation: CredentialSynchronizationOperation;\n\treadonly credential: Credential | undefined;\n\n\tconstructor(\n\t\tproviderId: string,\n\t\toperation: CredentialSynchronizationOperation,\n\t\tcredential: Credential | undefined,\n\t\toptions: ErrorOptions,\n\t) {\n\t\tsuper(`Credential ${operation} committed for ${providerId}, but local synchronization failed`, options);\n\t\tthis.name = \"CredentialSynchronizationError\";\n\t\tthis.providerId = providerId;\n\t\tthis.operation = operation;\n\t\t// One call rather than assign-then-redefine: the two-step form is\n\t\t// equivalent (defineProperty with only `enumerable` preserves the existing\n\t\t// value) but reads as a redundant write and trips static analysis. The\n\t\t// non-enumerable descriptor is the load-bearing part — it keeps the\n\t\t// credential out of JSON.stringify, console.log, and structured error\n\t\t// reporting.\n\t\tObject.defineProperty(this, \"credential\", {\n\t\t\tvalue: credential,\n\t\t\tenumerable: false,\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n}\n\nfunction operationSignal(signal: AbortSignal | undefined): AbortSignal {\n\treturn signal ?? new AbortController().signal;\n}\n\nfunction raceWithAbortSignal<T>(promise: Promise<T>, signal: AbortSignal): Promise<T> {\n\tif (signal.aborted)\n\t\treturn Promise.reject(signal.reason ?? new DOMException(\"The operation was aborted\", \"AbortError\"));\n\treturn new Promise<T>((resolve, reject) => {\n\t\tconst onAbort = () => reject(signal.reason ?? new DOMException(\"The operation was aborted\", \"AbortError\"));\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\tpromise.then(resolve, reject).finally(() => signal.removeEventListener(\"abort\", onAbort));\n\t});\n}\n\n/** Configured pi-ai Models collection used by coding-agent and SDK consumers. */\nexport class ModelRuntime implements Models {\n\tprivate readonly models: MutableModels;\n\tprivate readonly credentials: RuntimeCredentials;\n\tprivate readonly streaming: ModelRuntimeStreaming;\n\tprivate readonly defaultBuiltins: ReadonlyMap<string, Provider>;\n\tprivate readonly builtins = new Map<string, Provider>();\n\tprivate readonly nativeExtensionProviders = new Map<string, Provider>();\n\tprivate readonly extensionProviders = new Map<string, ProviderConfigInput>();\n\tprivate readonly compositionErrors = new Map<string, string>();\n\tprivate readonly modelsPath: string | undefined;\n\tprivate readonly modelNetworkEnabled: boolean;\n\tprivate config: ModelConfig;\n\tprivate snapshot: ModelRuntimeSnapshot = createEmptyModelRuntimeSnapshot();\n\tprivate snapshotGeneration = 0;\n\tprivate readonly externalProviderAuthStatuses = new Map<string, AuthStatus>();\n\tprivate availabilityRefreshSeq = 0;\n\tprivate availabilityErrorSeq = 0;\n\tprivate readonly providerAvailabilitySeq = new Map<string, number>();\n\tprivate readonly credentialOperations = new Map<string, Promise<unknown>>();\n\tprivate availabilityError: string | undefined;\n\tprivate refreshSequence = 0;\n\tprivate constructor(\n\t\tcredentials: RuntimeCredentials,\n\t\tconfig: ModelConfig,\n\t\tmodelsPath: string | undefined,\n\t\tmodelsStore: ModelsStore,\n\t\tproviders: readonly Provider[],\n\t\tmodelNetworkEnabled: boolean,\n\t) {\n\t\tthis.credentials = credentials;\n\t\tthis.config = config;\n\t\tthis.modelsPath = modelsPath;\n\t\tthis.modelNetworkEnabled = modelNetworkEnabled;\n\t\tthis.defaultBuiltins = new Map(providers.map((provider) => [provider.id, provider]));\n\t\tfor (const [providerId, provider] of this.defaultBuiltins) this.builtins.set(providerId, provider);\n\t\tthis.models = createModels({ credentials, modelsStore });\n\t\tthis.streaming = new ModelRuntimeStreaming(this.models, (model, overrides) => this.getAuth(model, overrides));\n\t\tthis.rebuildProviders();\n\t}\n\tstatic async create(options: CreateModelRuntimeOptions = {}): Promise<ModelRuntime> {\n\t\tconst credentials = new RuntimeCredentials(options.credentials ?? DefaultAuthStorage.create(options.authPath));\n\t\tconst modelsPath =\n\t\t\toptions.modelsPath === null ? undefined : (options.modelsPath ?? join(getAgentDir(), \"models.json\"));\n\t\tconst config = await ModelConfig.load(modelsPath);\n\t\tconst modelsStore =\n\t\t\toptions.modelsStore ??\n\t\t\t(modelsPath\n\t\t\t\t? new FileModelsStore(options.modelsStorePath ?? join(dirname(modelsPath), \"models-store.json\"))\n\t\t\t\t: new InMemoryCodingAgentModelsStore());\n\t\tconst builtinModelDataGeneratedAt = builtinProviderCatalog.getBuiltinModelDataGeneratedAt();\n\t\tconst providers = builtinProviderCatalog\n\t\t\t.builtinProviders()\n\t\t\t.map((provider) =>\n\t\t\t\tprovider.id === \"radius\"\n\t\t\t\t\t? provider\n\t\t\t\t\t: withRemoteCatalog(provider, options.catalogBaseUrl, builtinModelDataGeneratedAt),\n\t\t\t);\n\t\tconst runtime = new ModelRuntime(\n\t\t\tcredentials,\n\t\t\tconfig,\n\t\t\tmodelsPath,\n\t\t\tmodelsStore,\n\t\t\tproviders,\n\t\t\t!isOfflineModeEnabled(),\n\t\t);\n\t\truntime.configureRadiusProviders();\n\t\truntime.rebuildProviders();\n\t\tconst refreshFromNetwork = runtime.modelNetworkEnabled && options.allowModelNetwork === true;\n\t\tconst controller = refreshFromNetwork ? new AbortController() : undefined;\n\t\tconst timeout = controller\n\t\t\t? setTimeout(() => controller.abort(), options.modelRefreshTimeoutMs ?? 15_000)\n\t\t\t: undefined;\n\t\ttry {\n\t\t\tif (options.refreshOnCreate !== false) {\n\t\t\t\tawait runtime.refresh({ allowNetwork: refreshFromNetwork, signal: controller?.signal });\n\t\t\t}\n\t\t} finally {\n\t\t\tif (timeout) clearTimeout(timeout);\n\t\t}\n\t\treturn runtime;\n\t}\n\tprivate configureRadiusProviders(): void {\n\t\tconfigureBuiltinProviders(this.builtins, this.defaultBuiltins, this.config);\n\t}\n\tprivate providerIds(): Set<string> {\n\t\treturn new Set([\n\t\t\t...this.builtins.keys(),\n\t\t\t...this.nativeExtensionProviders.keys(),\n\t\t\t...this.config.getProviderIds(),\n\t\t\t...this.extensionProviders.keys(),\n\t\t]);\n\t}\n\tprivate recomposeProvider(providerId: string): void {\n\t\tconst base = this.nativeExtensionProviders.get(providerId) ?? this.builtins.get(providerId);\n\t\tconst extension = this.extensionProviders.get(providerId);\n\t\tif (!base && !this.config.getProvider(providerId) && !extension) {\n\t\t\tthis.models.deleteProvider(providerId);\n\t\t\tthis.compositionErrors.delete(providerId);\n\t\t\treturn;\n\t\t}\n\t\tif (base && !this.config.getProvider(providerId) && !extension) {\n\t\t\t// No overlays: use the builtin untouched so its auth/login/stream behavior is exact.\n\t\t\tthis.models.setProvider(base);\n\t\t\tthis.compositionErrors.delete(providerId);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tthis.models.setProvider(composeModelProvider(providerId, base, this.config, extension));\n\t\t\tthis.compositionErrors.delete(providerId);\n\t\t} catch (error) {\n\t\t\tthis.compositionErrors.set(providerId, error instanceof Error ? error.message : String(error));\n\t\t\tif (base) this.models.setProvider(base);\n\t\t\telse this.models.deleteProvider(providerId);\n\t\t}\n\t}\n\tprivate rebuildProviders(): void {\n\t\tthis.models.clearProviders();\n\t\tthis.compositionErrors.clear();\n\t\tfor (const providerId of this.providerIds()) this.recomposeProvider(providerId);\n\t\tthis.updateModelSnapshot();\n\t}\n\tprivate updateModelSnapshot(): void {\n\t\tthis.snapshotGeneration += 1;\n\t\tthis.snapshot = updateSnapshotModels(this.snapshot, [...this.models.getModels()]);\n\t}\n\tprivate async runAvailabilityRefresh(seq: number, errorSeq: number, signal: AbortSignal): Promise<void> {\n\t\tconst providers = this.models.getProviders();\n\t\tconst [available, checks, credentials] = await Promise.all([\n\t\t\tthis.models.getAvailable(undefined, { signal }),\n\t\t\tPromise.all(\n\t\t\t\tproviders.map(\n\t\t\t\t\tasync (provider): Promise<[string, AuthCheck | undefined]> => [\n\t\t\t\t\t\tprovider.id,\n\t\t\t\t\t\tawait this.models.checkAuth(provider.id, { signal }),\n\t\t\t\t\t],\n\t\t\t\t),\n\t\t\t),\n\t\t\tthis.credentials.list({ signal }),\n\t\t]);\n\t\tif (seq !== this.availabilityRefreshSeq) return;\n\t\tthis.snapshot = createModelRuntimeSnapshot([...this.models.getModels()], [...available], checks, credentials);\n\t\tif (errorSeq === this.availabilityErrorSeq) this.availabilityError = undefined;\n\t}\n\tprivate queueAvailabilityRefresh(signal?: AbortSignal): Promise<void> {\n\t\tconst seq = ++this.availabilityRefreshSeq;\n\t\tfor (const [providerId, providerSeq] of this.providerAvailabilitySeq)\n\t\t\tthis.providerAvailabilitySeq.set(providerId, providerSeq + 1);\n\t\tconst errorSeq = ++this.availabilityErrorSeq;\n\t\tconst effectiveSignal = operationSignal(signal);\n\t\treturn this.runAvailabilityRefresh(seq, errorSeq, effectiveSignal).catch((error) => {\n\t\t\tif (errorSeq === this.availabilityErrorSeq && !effectiveSignal.aborted)\n\t\t\t\tthis.availabilityError = error instanceof Error ? error.message : String(error);\n\t\t\tthrow error;\n\t\t});\n\t}\n\tprivate async refreshProviderAvailability(providerId: string, signal: AbortSignal): Promise<void> {\n\t\t++this.availabilityRefreshSeq;\n\t\tconst providerSeq = (this.providerAvailabilitySeq.get(providerId) ?? 0) + 1;\n\t\tthis.providerAvailabilitySeq.set(providerId, providerSeq);\n\t\tconst errorSeq = ++this.availabilityErrorSeq;\n\t\ttry {\n\t\t\tconst [available, auth, credential] = await Promise.all([\n\t\t\t\tthis.models.getAvailable(providerId, { signal }),\n\t\t\t\tthis.models.checkAuth(providerId, { signal }),\n\t\t\t\tthis.credentials.read(providerId, { signal }),\n\t\t\t]);\n\t\t\tsignal.throwIfAborted();\n\t\t\tif (this.providerAvailabilitySeq.get(providerId) !== providerSeq) return;\n\t\t\tconst configuredProviders = new Set(this.snapshot.configuredProviders),\n\t\t\t\tstoredProviders = new Set(this.snapshot.storedProviders),\n\t\t\t\tstoredCredentialTypes = new Map(this.snapshot.storedCredentialTypes),\n\t\t\t\tauthByProvider = new Map(this.snapshot.auth);\n\t\t\tif (auth) {\n\t\t\t\tconfiguredProviders.add(providerId);\n\t\t\t\tauthByProvider.set(providerId, auth);\n\t\t\t} else {\n\t\t\t\tconfiguredProviders.delete(providerId);\n\t\t\t\tauthByProvider.delete(providerId);\n\t\t\t}\n\t\t\tif (credential) {\n\t\t\t\tstoredProviders.add(providerId);\n\t\t\t\tstoredCredentialTypes.set(providerId, credential.type);\n\t\t\t} else {\n\t\t\t\tstoredProviders.delete(providerId);\n\t\t\t\tstoredCredentialTypes.delete(providerId);\n\t\t\t}\n\t\t\tconst all = [...this.models.getModels()];\n\t\t\tconst availableById = new Map(\n\t\t\t\t[...this.snapshot.available.filter((model) => model.provider !== providerId), ...available].map((model) => [\n\t\t\t\t\t`${model.provider}\\0${model.id}`,\n\t\t\t\t\tmodel,\n\t\t\t\t]),\n\t\t\t);\n\t\t\tthis.snapshot = {\n\t\t\t\tall,\n\t\t\t\tavailable: all.flatMap((model) => availableById.get(`${model.provider}\\0${model.id}`) ?? []),\n\t\t\t\tconfiguredProviders,\n\t\t\t\tstoredProviders,\n\t\t\t\tstoredCredentialTypes,\n\t\t\t\tauth: authByProvider,\n\t\t\t};\n\t\t\tif (errorSeq === this.availabilityErrorSeq) this.availabilityError = undefined;\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\tthis.providerAvailabilitySeq.get(providerId) === providerSeq &&\n\t\t\t\terrorSeq === this.availabilityErrorSeq &&\n\t\t\t\t!signal.aborted\n\t\t\t)\n\t\t\t\tthis.availabilityError = error instanceof Error ? error.message : String(error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tgetProviders(): readonly Provider[] {\n\t\treturn this.models.getProviders();\n\t}\n\tgetProvider(providerId: string): Provider | undefined {\n\t\treturn this.models.getProvider(providerId);\n\t}\n\t/** Whether an authenticated provider may reconstruct an absent saved model ID. */\n\tcanRestoreUnknownModel(providerId: string): boolean {\n\t\treturn canRestoreUnknownModelProvider(\n\t\t\tproviderId,\n\t\t\tthis.defaultBuiltins.get(providerId),\n\t\t\tthis.config.getProvider(providerId),\n\t\t\tthis.extensionProviders.get(providerId),\n\t\t\tthis.nativeExtensionProviders.get(providerId),\n\t\t);\n\t}\n\tgetModels(providerId?: string): readonly Model<Api>[] {\n\t\treturn this.models.getModels(providerId);\n\t}\n\tgetModel(providerId: string, modelId: string): Model<Api> | undefined {\n\t\treturn this.models.getModel(providerId, modelId);\n\t}\n\tasync checkAuth(providerId: string): Promise<AuthCheck | undefined> {\n\t\treturn this.models.checkAuth(providerId);\n\t}\n\tasync getAvailable(providerId?: string, options?: AuthOperationOptions): Promise<readonly Model<Api>[]> {\n\t\tif (providerId) {\n\t\t\tconst errorSeq = ++this.availabilityErrorSeq;\n\t\t\ttry {\n\t\t\t\tconst available = await this.models.getAvailable(providerId, options);\n\t\t\t\tif (errorSeq === this.availabilityErrorSeq) this.availabilityError = undefined;\n\t\t\t\treturn available;\n\t\t\t} catch (error) {\n\t\t\t\tif (errorSeq === this.availabilityErrorSeq && !options?.signal?.aborted)\n\t\t\t\t\tthis.availabilityError = error instanceof Error ? error.message : String(error);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tawait this.queueAvailabilityRefresh(options?.signal);\n\t\treturn this.snapshot.available;\n\t}\n\tgetAvailableSnapshot(): readonly Model<Api>[] {\n\t\treturn this.snapshot.available;\n\t}\n\tgetError(): string | undefined {\n\t\tconst errors: string[] = [];\n\t\tconst configError = this.config.getError();\n\t\tif (configError) errors.push(configError);\n\t\tfor (const [providerId, error] of this.compositionErrors) {\n\t\t\terrors.push(`Provider \"${providerId}\": ${error}`);\n\t\t}\n\t\tif (this.availabilityError) errors.push(`Availability refresh: ${this.availabilityError}`);\n\t\treturn errors.length > 0 ? errors.join(\"\\n\\n\") : undefined;\n\t}\n\n\tgetRegisteredProviderConfig(providerId: string): ProviderConfigInput | undefined {\n\t\treturn this.extensionProviders.get(providerId);\n\t}\n\n\tgetRegisteredProviderIds(): readonly string[] {\n\t\treturn [...new Set([...this.extensionProviders.keys(), ...this.nativeExtensionProviders.keys()])];\n\t}\n\n\tgetRegisteredNativeProvider(providerId: string): Provider | undefined {\n\t\treturn this.nativeExtensionProviders.get(providerId);\n\t}\n\tgetOAuthProviderMetadata() {\n\t\treturn collectOAuthProviderMetadata(this.getProviders(), this.extensionProviders);\n\t}\n\t/** @internal Compatibility fallback for ModelRegistry when provider auth is unconfigured. */\n\tgetCompatibilityRequestConfig(model: Model<Api>): CompatibilityRequestConfig {\n\t\treturn resolveCompatibilityRequestConfig(\n\t\t\tmodel,\n\t\t\tthis.config.getProvider(model.provider),\n\t\t\tthis.extensionProviders.get(model.provider),\n\t\t);\n\t}\n\n\tisUsingOAuth(providerId: string): boolean {\n\t\treturn this.snapshot.auth.get(providerId)?.type === \"oauth\";\n\t}\n\n\thasConfiguredAuth(providerId: string): boolean {\n\t\treturn this.snapshot.configuredProviders.has(providerId);\n\t}\n\n\tgetAuth(providerId: string, overrides?: ModelRuntimeAuthOverrides): Promise<AuthResult | undefined>;\n\tgetAuth(model: Model<Api>, overrides?: ModelRuntimeAuthOverrides): Promise<AuthResult | undefined>;\n\tasync getAuth(\n\t\tproviderOrModel: string | Model<Api>,\n\t\toverrides: ModelRuntimeAuthOverrides = {},\n\t): Promise<AuthResult | undefined> {\n\t\tif (typeof providerOrModel === \"string\") return this.models.getAuth(providerOrModel, overrides);\n\t\tconst resolution = await this.models.getAuth(providerOrModel, overrides);\n\t\tif (!resolution) return undefined;\n\t\treturn mergeConfiguredAuthHeaders(\n\t\t\tresolution,\n\t\t\tproviderOrModel,\n\t\t\tthis.config,\n\t\t\tthis.extensionProviders.get(providerOrModel.provider),\n\t\t\toverrides,\n\t\t);\n\t}\n\t/** Reload credentials changed by the authoritative isolated engine and update auth status snapshots. */\n\tasync reloadCredentials(options: { refreshAvailability?: boolean } = {}): Promise<void> {\n\t\tawait this.credentials.reload();\n\t\tif (options.refreshAvailability === false) {\n\t\t\tconst credentials = await this.credentials.list();\n\t\t\tfor (const credential of credentials) this.externalProviderAuthStatuses.delete(credential.providerId);\n\t\t\tthis.snapshotGeneration += 1;\n\t\t\tthis.snapshot = replaceStoredCredentialProviders(this.snapshot, credentials);\n\t\t\treturn;\n\t\t}\n\t\tawait this.queueAvailabilityRefresh();\n\t}\n\n\tprivate assertCredentialRefreshSucceeded(\n\t\tproviderId: string,\n\t\tresult: ModelsRefreshResult,\n\t\tsignal?: AbortSignal,\n\t): void {\n\t\tif (result.aborted) {\n\t\t\tsignal?.throwIfAborted();\n\t\t\tthrow new Error(`Model refresh aborted for ${providerId}`);\n\t\t}\n\t\tconst refreshError = result.errors.get(providerId);\n\t\tif (refreshError) throw refreshError;\n\t\tconst compositionError = this.compositionErrors.get(providerId);\n\t\tif (compositionError) throw new Error(compositionError);\n\t}\n\n\tprivate enqueueCredentialOperation<T>(providerId: string, signal: AbortSignal, task: () => Promise<T>): Promise<T> {\n\t\tconst previous = this.credentialOperations.get(providerId) ?? Promise.resolve();\n\t\tlet markStarted: (() => void) | undefined;\n\t\tconst started = new Promise<void>((resolve) => {\n\t\t\tmarkStarted = resolve;\n\t\t});\n\t\tconst operation = (async () => {\n\t\t\tawait previous.catch(() => {});\n\t\t\tsignal.throwIfAborted();\n\t\t\tmarkStarted?.();\n\t\t\treturn task();\n\t\t})();\n\t\tconst tail = operation.catch(() => {});\n\t\tthis.credentialOperations.set(providerId, tail);\n\t\tvoid tail.then(() => {\n\t\t\tif (this.credentialOperations.get(providerId) === tail) this.credentialOperations.delete(providerId);\n\t\t});\n\t\treturn raceWithAbortSignal(started, signal).then(() => operation);\n\t}\n\tprivate async synchronizeCredentialState(\n\t\tproviderId: string,\n\t\toperation: CredentialSynchronizationOperation,\n\t\tcredential: Credential | undefined,\n\t\tsynchronize: () => void | Promise<void>,\n\t): Promise<void> {\n\t\ttry {\n\t\t\tawait synchronize();\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof CredentialSynchronizationError) throw cause;\n\t\t\tthrow new CredentialSynchronizationError(providerId, operation, credential, { cause });\n\t\t}\n\t}\n\tprivate async refreshRemainingAuthAfterLogout(providerId: string, logoutGeneration: number): Promise<void> {\n\t\t// Environment/runtime auth can remain after stored auth is removed. The\n\t\t// probe is normally synchronous, but its deadline is authoritative because\n\t\t// extension checks are third-party code and need not honor cancellation.\n\t\tlet timeout: number | undefined;\n\t\ttry {\n\t\t\tconst remainingAuth = await Promise.race([\n\t\t\t\tthis.checkAuth(providerId).catch(() => undefined),\n\t\t\t\tnew Promise<undefined>((resolve) => {\n\t\t\t\t\ttimeout = setTimeout(resolve, POST_LOGOUT_AUTH_CHECK_TIMEOUT_MS);\n\t\t\t\t}),\n\t\t\t]);\n\t\t\tif (logoutGeneration === this.snapshotGeneration && !this.snapshot.storedProviders.has(providerId)) {\n\t\t\t\tthis.snapshot = removeStoredCredentialProvider(this.snapshot, providerId, remainingAuth);\n\t\t\t}\n\t\t} finally {\n\t\t\tif (timeout) clearTimeout(timeout);\n\t\t}\n\t}\n\n\tasync saveCredential(providerId: string, credential: Credential): Promise<void> {\n\t\tconst signal = operationSignal(undefined);\n\t\tawait this.enqueueCredentialOperation(providerId, signal, async () => {\n\t\t\tawait this.credentials.modify(providerId, async () => credential);\n\t\t\tawait this.synchronizeCredentialState(providerId, \"saveCredential\", credential, async () => {\n\t\t\t\tconst result = await this.refresh({ providers: [providerId] });\n\t\t\t\tthis.assertCredentialRefreshSucceeded(providerId, result);\n\t\t\t});\n\t\t});\n\t}\n\t/**\n\t * Apply a process-scoped API key override. This publishes the provider against\n\t * the current snapshot and deliberately does not refresh the model catalog;\n\t * callers needing catalog freshness call refresh({ providers: [providerId], signal })\n\t * separately.\n\t */\n\tasync setRuntimeApiKey(providerId: string, apiKey: string, options: AuthOperationOptions): Promise<void> {\n\t\tconst signal = operationSignal(options.signal);\n\t\tawait this.enqueueCredentialOperation(providerId, signal, async () => {\n\t\t\tthis.credentials.setRuntimeApiKey(providerId, apiKey);\n\t\t\tawait this.synchronizeCredentialState(providerId, \"setRuntimeApiKey\", { type: \"api_key\", key: apiKey }, () => {\n\t\t\t\tthis.snapshot = addRuntimeApiKeyProvider(this.snapshot, providerId);\n\t\t\t});\n\t\t});\n\t}\n\n\tasync removeRuntimeApiKey(providerId: string, options: AuthOperationOptions = {}): Promise<void> {\n\t\tconst signal = operationSignal(options.signal);\n\t\tawait this.enqueueCredentialOperation(providerId, signal, async () => {\n\t\t\tthis.credentials.removeRuntimeApiKey(providerId);\n\t\t\tawait this.synchronizeCredentialState(providerId, \"removeRuntimeApiKey\", undefined, async () => {\n\t\t\t\tconst result = await this.refresh({ allowNetwork: this.modelNetworkEnabled, signal });\n\t\t\t\tthis.assertCredentialRefreshSucceeded(providerId, result, signal);\n\t\t\t});\n\t\t});\n\t}\n\n\tlistCredentials(): Promise<readonly CredentialInfo[]> {\n\t\treturn this.credentials.list();\n\t}\n\n\tgetStoredCredentialType(providerId: string): CredentialInfo[\"type\"] | undefined {\n\t\treturn this.snapshot.storedCredentialTypes.get(providerId);\n\t}\n\n\tgetProviderAuthStatus(providerId: string): AuthStatus {\n\t\tconst localStatus = getSnapshotProviderAuthStatus(\n\t\t\tthis.snapshot,\n\t\t\tproviderId,\n\t\t\tthis.credentials.hasRuntimeApiKey(providerId),\n\t\t\tconfiguredRequestAuthStatus(this.config.getProvider(providerId), this.extensionProviders.get(providerId)),\n\t\t);\n\t\tif (localStatus.source === \"stored\" || localStatus.source === \"runtime\") return localStatus;\n\t\treturn this.externalProviderAuthStatuses.get(providerId) ?? localStatus;\n\t}\n\n\t/** Apply authoritative auth state returned by an isolated engine mutation. */\n\tapplyExternalProviderAuthStatus(providerId: string, status: AuthStatus): void {\n\t\tthis.snapshotGeneration += 1;\n\t\tconst remainingAuth =\n\t\t\tstatus.configured && status.source === \"environment\"\n\t\t\t\t? ({ type: \"api_key\", source: status.label ?? \"environment\" } as const)\n\t\t\t\t: undefined;\n\t\tthis.snapshot = removeStoredCredentialProvider(this.snapshot, providerId, remainingAuth);\n\t\tthis.externalProviderAuthStatuses.set(providerId, status);\n\t}\n\n\tstream<TApi extends Api>(\n\t\tmodel: Model<TApi>,\n\t\tcontext: Context,\n\t\toptions?: ModelsApiStreamOptions<TApi>,\n\t): AssistantMessageEventStream {\n\t\treturn this.streaming.stream(model, context, options);\n\t}\n\n\tcomplete<TApi extends Api>(\n\t\tmodel: Model<TApi>,\n\t\tcontext: Context,\n\t\toptions?: ModelsApiStreamOptions<TApi>,\n\t): Promise<AssistantMessage> {\n\t\treturn this.streaming.complete(model, context, options);\n\t}\n\n\tstreamSimple(model: Model<Api>, context: Context, options?: ModelsSimpleStreamOptions): AssistantMessageEventStream {\n\t\treturn this.streaming.streamSimple(model, context, options);\n\t}\n\n\tcompleteSimple(model: Model<Api>, context: Context, options?: ModelsSimpleStreamOptions): Promise<AssistantMessage> {\n\t\treturn this.streaming.completeSimple(model, context, options);\n\t}\n\n\tfetchDeferred(\n\t\tmodel: Model<Api>,\n\t\thandle: DeferredHandle,\n\t\toptions?: ModelsDeferredFetchOptions,\n\t): Promise<AssistantMessage> {\n\t\treturn this.streaming.fetchDeferred(model, handle, options);\n\t}\n\n\tcancelDeferred(model: Model<Api>, handle: DeferredHandle, options?: ModelsDeferredCancelOptions): Promise<void> {\n\t\treturn this.streaming.cancelDeferred(model, handle, options);\n\t}\n\n\tasync login(providerId: string, type: AuthType, interaction: AuthInteraction): Promise<Credential> {\n\t\tconst signal = operationSignal(interaction.signal);\n\t\treturn this.enqueueCredentialOperation(providerId, signal, async () => {\n\t\t\tconst credential = await this.models.login(providerId, type, { ...interaction, signal });\n\t\t\tawait this.synchronizeCredentialState(providerId, \"login\", credential, () => {\n\t\t\t\t// Credential acquisition and persistence are the login transaction. Publish\n\t\t\t\t// the provider against the current snapshot immediately; catalog restoration,\n\t\t\t\t// ambient availability checks, and networking belong to /model's bounded\n\t\t\t\t// background refresh and must never keep a successful login dialog open.\n\t\t\t\tthis.updateModelSnapshot();\n\t\t\t\tthis.externalProviderAuthStatuses.delete(providerId);\n\t\t\t\tthis.snapshot = addStoredCredentialProvider(this.snapshot, providerId, credential.type);\n\t\t\t});\n\t\t\treturn credential;\n\t\t});\n\t}\n\n\tasync logout(providerId: string, options: AuthOperationOptions = {}): Promise<void> {\n\t\tconst signal = operationSignal(options.signal);\n\t\tconst logoutGeneration = await this.enqueueCredentialOperation(providerId, signal, async () => {\n\t\t\tawait this.models.logout(providerId, { signal });\n\t\t\tlet generation = 0;\n\t\t\tawait this.synchronizeCredentialState(providerId, \"logout\", undefined, () => {\n\t\t\t\t// Reset credential-dependent compatibility projections, then publish the\n\t\t\t\t// persisted deletion without waiting for model stores or remote catalogs.\n\t\t\t\tthis.recomposeProvider(providerId);\n\t\t\t\tthis.updateModelSnapshot();\n\t\t\t\tthis.externalProviderAuthStatuses.delete(providerId);\n\t\t\t\tthis.snapshot = removeStoredCredentialProvider(this.snapshot, providerId);\n\t\t\t\tgeneration = this.snapshotGeneration;\n\t\t\t});\n\t\t\treturn generation;\n\t\t});\n\t\tawait this.refreshRemainingAuthAfterLogout(providerId, logoutGeneration);\n\t}\n\n\tasync refresh(options: ModelsRefreshOptions = {}): Promise<ModelsRefreshResult> {\n\t\treturn this.runRefresh(options, ++this.refreshSequence);\n\t}\n\n\t/**\n\t * A registration's offline catalog pass must not publish after a newer refresh\n\t * that resolves configured credentials.\n\t */\n\tprivate scheduleRegistrationRefresh(): void {\n\t\tconst sequence = ++this.refreshSequence;\n\t\tvoid this.runRefresh({ allowNetwork: false }, sequence, true);\n\t}\n\n\tprivate async runRefresh(\n\t\toptions: ModelsRefreshOptions,\n\t\tsequence: number,\n\t\tdiscardIfSuperseded = false,\n\t): Promise<ModelsRefreshResult> {\n\t\tconst config = await ModelConfig.load(this.modelsPath);\n\t\tif (discardIfSuperseded && sequence !== this.refreshSequence) {\n\t\t\treturn { aborted: true, errors: new Map<string, Error>() };\n\t\t}\n\t\tthis.config = config;\n\t\tthis.configureRadiusProviders();\n\t\tif (options.providers) {\n\t\t\tfor (const providerId of new Set(options.providers)) this.recomposeProvider(providerId);\n\t\t\tthis.updateModelSnapshot();\n\t\t} else this.rebuildProviders();\n\t\tconst refreshOptions = { ...options, allowNetwork: options.allowNetwork ?? this.modelNetworkEnabled };\n\t\tconst result = await this.models.refresh(refreshOptions);\n\t\tconst errors = new Map(result.errors);\n\t\tthis.updateModelSnapshot();\n\t\tif (options.providers) {\n\t\t\tawait Promise.all(\n\t\t\t\t[...new Set(options.providers)].map(async (providerId) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.refreshProviderAvailability(providerId, operationSignal(options.signal));\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (!options.signal?.aborted)\n\t\t\t\t\t\t\terrors.set(providerId, error instanceof Error ? error : new Error(String(error)));\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tawait this.queueAvailabilityRefresh(options.signal);\n\t\t\t} catch {\n\t\t\t\t// Availability errors are recorded by the latest pass; refreshed models remain usable.\n\t\t\t}\n\t\t}\n\t\treturn { aborted: result.aborted || (options.signal?.aborted ?? false), errors };\n\t}\n\n\tregisterNativeProvider(provider: Provider): void {\n\t\tif (!provider.id.trim()) throw new Error(\"Provider id must not be empty.\");\n\t\tthis.extensionProviders.delete(provider.id);\n\t\tthis.nativeExtensionProviders.set(provider.id, provider);\n\t\tthis.recomposeProvider(provider.id);\n\t\tthis.updateModelSnapshot();\n\t\tthis.scheduleRegistrationRefresh();\n\t}\n\n\tregisterProvider(providerId: string, config: ProviderConfigInput): void {\n\t\t// Validate the incoming registration on its own, like the legacy registry:\n\t\t// a broken re-registration must throw without touching the stored config.\n\t\tvalidateExtensionProvider(providerId, this.builtins.get(providerId), this.config.getProvider(providerId), config);\n\t\tthis.nativeExtensionProviders.delete(providerId);\n\t\t// Re-registration merges defined values over the previous registration and\n\t\t// preserves undefined ones, matching the legacy ModelRegistry contract.\n\t\tconst previous = this.extensionProviders.get(providerId);\n\t\tconst effective: ProviderConfigInput = { ...previous };\n\t\tfor (const [key, value] of Object.entries(config)) {\n\t\t\tif (value !== undefined) (effective as Record<string, unknown>)[key] = value;\n\t\t}\n\t\tthis.extensionProviders.set(providerId, effective);\n\t\tthis.recomposeProvider(providerId);\n\t\tthis.updateModelSnapshot();\n\t\tif (\n\t\t\tthis.snapshot.storedProviders.has(providerId) ||\n\t\t\tconfiguredRequestAuthStatus(this.config.getProvider(providerId), effective)?.configured\n\t\t) {\n\t\t\tconst configuredProviders = new Set(this.snapshot.configuredProviders).add(providerId);\n\t\t\tconst auth = new Map(this.snapshot.auth);\n\t\t\t// Provisional entry until the async refresh lands; never clobber a real check result.\n\t\t\tif (!auth.get(providerId)) {\n\t\t\t\tauth.set(providerId, {\n\t\t\t\t\ttype: effective.oauth && !effective.apiKey ? \"oauth\" : \"api_key\",\n\t\t\t\t\tsource: \"configured provider\",\n\t\t\t\t});\n\t\t\t}\n\t\t\t// A provider that was already configured has an availability result — possibly\n\t\t\t// a credential-filtered subset of its catalog, as with an additive GitHub\n\t\t\t// Copilot override — and keeps it until the refresh this registration schedules\n\t\t\t// republishes it. Only a provider this registration newly configures has no\n\t\t\t// result to keep, so only its catalog is exposed provisionally.\n\t\t\tlet available = this.snapshot.available;\n\t\t\tif (!this.snapshot.configuredProviders.has(providerId)) {\n\t\t\t\tconst preserved = new Set(available.map(snapshotModelKey));\n\t\t\t\tavailable = this.snapshot.all.filter(\n\t\t\t\t\t(model) => model.provider === providerId || preserved.has(snapshotModelKey(model)),\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.snapshot = { ...this.snapshot, auth, configuredProviders, available };\n\t\t}\n\t\tthis.scheduleRegistrationRefresh();\n\t}\n\n\tunregisterProvider(providerId: string): void {\n\t\tthis.extensionProviders.delete(providerId);\n\t\tthis.nativeExtensionProviders.delete(providerId);\n\t\tthis.recomposeProvider(providerId);\n\t\tthis.updateModelSnapshot();\n\t\tthis.scheduleRegistrationRefresh();\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-login.d.ts","sourceRoot":"","sources":["../../src/core/oauth-login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEhG,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACrE,kBAAkB,CAAC,IAAI,IAAI,CAAC;IAC5B,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,IAAI,CAAC;CAC/D;AAED,6FAA6F;AAC7F,MAAM,WAAW,qBAAqB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,sHAAsH;AACtH,qBAAa,0BAA2B,SAAQ,KAAK;IACpD,YAAY,KAAK,EAAE,OAAO,EAGzB;CACD;AAED,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC7C,OAAO,CAiBT;AAED,wBAAgB,wBAAwB,CACvC,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAE,GACzC,OAAO,CAIT;AAkBD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,yBAAyB,GAAG,eAAe,CAyC3F"}
1
+ {"version":3,"file":"oauth-login.d.ts","sourceRoot":"","sources":["../../src/core/oauth-login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGhG,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACrE,kBAAkB,CAAC,IAAI,IAAI,CAAC;IAC5B,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,IAAI,CAAC;CAC/D;AAED,6FAA6F;AAC7F,MAAM,WAAW,qBAAqB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,sHAAsH;AACtH,qBAAa,0BAA2B,SAAQ,KAAK;IACpD,YAAY,KAAK,EAAE,OAAO,EAGzB;CACD;AAED,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC7C,OAAO,CAiBT;AAED,wBAAgB,wBAAwB,CACvC,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAE,GACzC,OAAO,CAIT;AAkBD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,yBAAyB,GAAG,eAAe,CAyC3F"}
@@ -1,3 +1,4 @@
1
+ import { CredentialSynchronizationError } from "./model-runtime.js";
1
2
  /** Marks failures after credential acquisition so presentation never mistakes nested AbortErrors for cancellation. */
2
3
  export class OAuthLoginTransactionError extends Error {
3
4
  constructor(cause) {
@@ -6,7 +7,7 @@ export class OAuthLoginTransactionError extends Error {
6
7
  }
7
8
  }
8
9
  export function isOAuthLoginCancelled(error, signal, options = {}) {
9
- if (error instanceof OAuthLoginTransactionError)
10
+ if (error instanceof OAuthLoginTransactionError || error instanceof CredentialSynchronizationError)
10
11
  return false;
11
12
  if (options.includeActiveSignal !== false && signal?.aborted)
12
13
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-login.js","sourceRoot":"","sources":["../../src/core/oauth-login.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AuthInfoLink, AuthInteraction, OAuthLoginCallbacks } from \"@earendil-works/pi-ai\";\n\nexport interface AtomicOAuthLoginCallbacks extends OAuthLoginCallbacks {\n\tonManualCodeCancel?(): void;\n\tonInfo?(message: string, links: readonly AuthInfoLink[]): void;\n}\n\n/** JSON-safe provider-owned OAuth metadata transported across isolated-engine boundaries. */\nexport interface OAuthProviderMetadata {\n\tid: string;\n\tname: string;\n\tloginLabel?: string;\n\tusesCallbackServer?: boolean;\n}\n\n/** Marks failures after credential acquisition so presentation never mistakes nested AbortErrors for cancellation. */\nexport class OAuthLoginTransactionError extends Error {\n\tconstructor(cause: unknown) {\n\t\tsuper(cause instanceof Error ? cause.message : String(cause), { cause });\n\t\tthis.name = \"OAuthLoginTransactionError\";\n\t}\n}\n\nexport function isOAuthLoginCancelled(\n\terror: unknown,\n\tsignal?: AbortSignal,\n\toptions: { includeActiveSignal?: boolean } = {},\n): boolean {\n\tif (error instanceof OAuthLoginTransactionError) return false;\n\tif (options.includeActiveSignal !== false && signal?.aborted) return true;\n\tconst reason = signal?.reason;\n\tconst seen = new Set<object>();\n\tlet current: unknown = error;\n\twhile (current !== undefined && current !== null) {\n\t\tif (current === reason && reason !== undefined) return true;\n\t\tif (current === \"Login cancelled\") return true;\n\t\tif (typeof current !== \"object\") return false;\n\t\tif (seen.has(current)) return false;\n\t\tseen.add(current);\n\t\tconst candidate = current as { name?: unknown; message?: unknown; cause?: unknown };\n\t\tif (candidate.name === \"AbortError\" || candidate.message === \"Login cancelled\") return true;\n\t\tcurrent = candidate.cause;\n\t}\n\treturn false;\n}\n\nexport function normalizeOAuthLoginError(\n\terror: unknown,\n\tsignal?: AbortSignal,\n\toptions?: { includeActiveSignal?: boolean },\n): unknown {\n\tif (error instanceof Error && error.message === \"Login cancelled\" && error.cause !== undefined) return error;\n\tif (!isOAuthLoginCancelled(error, signal, options)) return error;\n\treturn new Error(\"Login cancelled\", { cause: error });\n}\n\nfunction abortable<T>(promise: Promise<T>, signal: AbortSignal | undefined, onAbort?: () => void): Promise<T> {\n\tif (!signal) return promise;\n\tif (signal.aborted) {\n\t\tonAbort?.();\n\t\treturn Promise.reject(signal.reason ?? new Error(\"Authentication prompt cancelled\"));\n\t}\n\treturn new Promise<T>((resolve, reject) => {\n\t\tconst abort = () => {\n\t\t\tonAbort?.();\n\t\t\treject(signal.reason ?? new Error(\"Authentication prompt cancelled\"));\n\t\t};\n\t\tsignal.addEventListener(\"abort\", abort, { once: true });\n\t\tpromise.then(resolve, reject).finally(() => signal.removeEventListener(\"abort\", abort));\n\t});\n}\n\nexport function createAuthInteraction(callbacks: AtomicOAuthLoginCallbacks): AuthInteraction {\n\treturn {\n\t\tsignal: callbacks.signal,\n\t\tprompt: async (prompt) => {\n\t\t\tswitch (prompt.type) {\n\t\t\t\tcase \"select\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t(await callbacks.onSelect({\n\t\t\t\t\t\t\tmessage: prompt.message,\n\t\t\t\t\t\t\toptions: prompt.options.map(({ id, label }) => ({ id, label })),\n\t\t\t\t\t\t})) ?? \"\"\n\t\t\t\t\t);\n\t\t\t\tcase \"manual_code\":\n\t\t\t\t\treturn abortable(\n\t\t\t\t\t\tcallbacks.onManualCodeInput\n\t\t\t\t\t\t\t? callbacks.onManualCodeInput()\n\t\t\t\t\t\t\t: callbacks.onPrompt({ message: prompt.message, placeholder: prompt.placeholder }),\n\t\t\t\t\t\tprompt.signal,\n\t\t\t\t\t\tcallbacks.onManualCodeCancel,\n\t\t\t\t\t);\n\t\t\t\tdefault:\n\t\t\t\t\treturn callbacks.onPrompt({ message: prompt.message, placeholder: prompt.placeholder });\n\t\t\t}\n\t\t},\n\t\tnotify: (event) => {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase \"auth_url\":\n\t\t\t\t\tcallbacks.onAuth({ url: event.url, instructions: event.instructions });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"device_code\":\n\t\t\t\t\tcallbacks.onDeviceCode(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"progress\":\n\t\t\t\t\tcallbacks.onProgress?.(event.message);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"info\":\n\t\t\t\t\tcallbacks.onInfo?.(event.message, event.links ?? []);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"oauth-login.js","sourceRoot":"","sources":["../../src/core/oauth-login.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAepE,sHAAsH;AACtH,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACpD,YAAY,KAAc;QACzB,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC1C,CAAC;CACD;AAED,MAAM,UAAU,qBAAqB,CACpC,KAAc,EACd,MAAoB,EACpB,OAAO,GAAsC,EAAE;IAE/C,IAAI,KAAK,YAAY,0BAA0B,IAAI,KAAK,YAAY,8BAA8B;QAAE,OAAO,KAAK,CAAC;IACjH,IAAI,OAAO,CAAC,mBAAmB,KAAK,KAAK,IAAI,MAAM,EAAE,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1E,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,OAAO,GAAY,KAAK,CAAC;IAC7B,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAClD,IAAI,OAAO,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5D,IAAI,OAAO,KAAK,iBAAiB;YAAE,OAAO,IAAI,CAAC;QAC/C,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,MAAM,SAAS,GAAG,OAAiE,CAAC;QACpF,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,IAAI,SAAS,CAAC,OAAO,KAAK,iBAAiB;YAAE,OAAO,IAAI,CAAC;QAC5F,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,wBAAwB,CACvC,KAAc,EACd,MAAoB,EACpB,OAA2C;IAE3C,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,iBAAiB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7G,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,IAAI,KAAK,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,SAAS,CAAI,OAAmB,EAAE,MAA+B,EAAE,OAAoB;IAC/F,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACzC,MAAM,KAAK,GAAG,GAAG,EAAE;YAClB,OAAO,EAAE,EAAE,CAAC;YACZ,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAoC;IACzE,OAAO;QACN,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACxB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;gBACrB,KAAK,QAAQ;oBACZ,OAAO,CACN,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC;wBACzB,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;qBAC/D,CAAC,CAAC,IAAI,EAAE,CACT,CAAC;gBACH,KAAK,aAAa;oBACjB,OAAO,SAAS,CACf,SAAS,CAAC,iBAAiB;wBAC1B,CAAC,CAAC,SAAS,CAAC,iBAAiB,EAAE;wBAC/B,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,EACnF,MAAM,CAAC,MAAM,EACb,SAAS,CAAC,kBAAkB,CAC5B,CAAC;gBACH;oBACC,OAAO,SAAS,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1F,CAAC;QACF,CAAC;QACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,UAAU;oBACd,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;oBACvE,MAAM;gBACP,KAAK,aAAa;oBACjB,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC9B,MAAM;gBACP,KAAK,UAAU;oBACd,SAAS,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACtC,MAAM;gBACP,KAAK,MAAM;oBACV,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;oBACrD,MAAM;YACR,CAAC;QACF,CAAC;KACD,CAAC;AACH,CAAC","sourcesContent":["import type { AuthInfoLink, AuthInteraction, OAuthLoginCallbacks } from \"@earendil-works/pi-ai\";\nimport { CredentialSynchronizationError } from \"./model-runtime.ts\";\n\nexport interface AtomicOAuthLoginCallbacks extends OAuthLoginCallbacks {\n\tonManualCodeCancel?(): void;\n\tonInfo?(message: string, links: readonly AuthInfoLink[]): void;\n}\n\n/** JSON-safe provider-owned OAuth metadata transported across isolated-engine boundaries. */\nexport interface OAuthProviderMetadata {\n\tid: string;\n\tname: string;\n\tloginLabel?: string;\n\tusesCallbackServer?: boolean;\n}\n\n/** Marks failures after credential acquisition so presentation never mistakes nested AbortErrors for cancellation. */\nexport class OAuthLoginTransactionError extends Error {\n\tconstructor(cause: unknown) {\n\t\tsuper(cause instanceof Error ? cause.message : String(cause), { cause });\n\t\tthis.name = \"OAuthLoginTransactionError\";\n\t}\n}\n\nexport function isOAuthLoginCancelled(\n\terror: unknown,\n\tsignal?: AbortSignal,\n\toptions: { includeActiveSignal?: boolean } = {},\n): boolean {\n\tif (error instanceof OAuthLoginTransactionError || error instanceof CredentialSynchronizationError) return false;\n\tif (options.includeActiveSignal !== false && signal?.aborted) return true;\n\tconst reason = signal?.reason;\n\tconst seen = new Set<object>();\n\tlet current: unknown = error;\n\twhile (current !== undefined && current !== null) {\n\t\tif (current === reason && reason !== undefined) return true;\n\t\tif (current === \"Login cancelled\") return true;\n\t\tif (typeof current !== \"object\") return false;\n\t\tif (seen.has(current)) return false;\n\t\tseen.add(current);\n\t\tconst candidate = current as { name?: unknown; message?: unknown; cause?: unknown };\n\t\tif (candidate.name === \"AbortError\" || candidate.message === \"Login cancelled\") return true;\n\t\tcurrent = candidate.cause;\n\t}\n\treturn false;\n}\n\nexport function normalizeOAuthLoginError(\n\terror: unknown,\n\tsignal?: AbortSignal,\n\toptions?: { includeActiveSignal?: boolean },\n): unknown {\n\tif (error instanceof Error && error.message === \"Login cancelled\" && error.cause !== undefined) return error;\n\tif (!isOAuthLoginCancelled(error, signal, options)) return error;\n\treturn new Error(\"Login cancelled\", { cause: error });\n}\n\nfunction abortable<T>(promise: Promise<T>, signal: AbortSignal | undefined, onAbort?: () => void): Promise<T> {\n\tif (!signal) return promise;\n\tif (signal.aborted) {\n\t\tonAbort?.();\n\t\treturn Promise.reject(signal.reason ?? new Error(\"Authentication prompt cancelled\"));\n\t}\n\treturn new Promise<T>((resolve, reject) => {\n\t\tconst abort = () => {\n\t\t\tonAbort?.();\n\t\t\treject(signal.reason ?? new Error(\"Authentication prompt cancelled\"));\n\t\t};\n\t\tsignal.addEventListener(\"abort\", abort, { once: true });\n\t\tpromise.then(resolve, reject).finally(() => signal.removeEventListener(\"abort\", abort));\n\t});\n}\n\nexport function createAuthInteraction(callbacks: AtomicOAuthLoginCallbacks): AuthInteraction {\n\treturn {\n\t\tsignal: callbacks.signal,\n\t\tprompt: async (prompt) => {\n\t\t\tswitch (prompt.type) {\n\t\t\t\tcase \"select\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t(await callbacks.onSelect({\n\t\t\t\t\t\t\tmessage: prompt.message,\n\t\t\t\t\t\t\toptions: prompt.options.map(({ id, label }) => ({ id, label })),\n\t\t\t\t\t\t})) ?? \"\"\n\t\t\t\t\t);\n\t\t\t\tcase \"manual_code\":\n\t\t\t\t\treturn abortable(\n\t\t\t\t\t\tcallbacks.onManualCodeInput\n\t\t\t\t\t\t\t? callbacks.onManualCodeInput()\n\t\t\t\t\t\t\t: callbacks.onPrompt({ message: prompt.message, placeholder: prompt.placeholder }),\n\t\t\t\t\t\tprompt.signal,\n\t\t\t\t\t\tcallbacks.onManualCodeCancel,\n\t\t\t\t\t);\n\t\t\t\tdefault:\n\t\t\t\t\treturn callbacks.onPrompt({ message: prompt.message, placeholder: prompt.placeholder });\n\t\t\t}\n\t\t},\n\t\tnotify: (event) => {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase \"auth_url\":\n\t\t\t\t\tcallbacks.onAuth({ url: event.url, instructions: event.instructions });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"device_code\":\n\t\t\t\t\tcallbacks.onDeviceCode(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"progress\":\n\t\t\t\t\tcallbacks.onProgress?.(event.message);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"info\":\n\t\t\t\t\tcallbacks.onInfo?.(event.message, event.links ?? []);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"openai-responses-payload-sanitizer.d.ts","sourceRoot":"","sources":["../../src/core/openai-responses-payload-sanitizer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAQ/D,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAMlD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAE9E;AAED,wBAAgB,8BAA8B,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAExE;AAUD,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUpF;AAeD,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CA+BxG"}
1
+ {"version":3,"file":"openai-responses-payload-sanitizer.d.ts","sourceRoot":"","sources":["../../src/core/openai-responses-payload-sanitizer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAqB/D,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAMlD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAE9E;AAED,wBAAgB,8BAA8B,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAExE;AAUD,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUpF;AAqBD,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CA+BxG"}
@@ -1,7 +1,16 @@
1
1
  import { createHash } from "node:crypto";
2
- const RESPONSES_FUNCTION_CALL_ID = /^fc_[A-Za-z0-9_-]{1,61}$/;
3
2
  const RESPONSES_FUNCTION_CALL_ID_PREFIX = "fc_";
4
- const MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH = 64;
3
+ // Upper bound for a synthesized Responses `function_call.id`, shared by the validator below
4
+ // and by the generator budget in `responsesFunctionCallIdForCallId`.
5
+ //
6
+ // The server's real bound is UNCONFIRMED: the live API was never probed. The only hard datum
7
+ // is that a 64-character `fc_*` value was deterministically rejected with 400
8
+ // invalid_request_body (issue #2204), while its characters were all within the class the
9
+ // error text named. 63 is therefore a deliberately conservative margin that sits below the
10
+ // one length known to fail rather than on it. Revise only against a confirmed live bound.
11
+ const MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH = 63;
12
+ // Derived from the maximum above so the validator and the generator can never disagree.
13
+ const RESPONSES_FUNCTION_CALL_ID = new RegExp(`^${RESPONSES_FUNCTION_CALL_ID_PREFIX}[A-Za-z0-9_-]{1,${MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH - RESPONSES_FUNCTION_CALL_ID_PREFIX.length}}$`);
5
14
  export const MIN_RESPONSES_MAX_OUTPUT_TOKENS = 16;
6
15
  function isPlainObject(value) {
7
16
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -33,6 +42,13 @@ export function responsesFunctionCallIdForCallId(callId) {
33
42
  function sanitizeResponsesFunctionCall(item) {
34
43
  if (item.type !== "function_call")
35
44
  return false;
45
+ // An absent id stays absent. The conversion layer below either omits it deliberately, to
46
+ // avoid the Responses fc_/rs_ pairing validation, or omits it because the composite
47
+ // tool-call id was already flattened — and in that case `call_id` has been mangled too and
48
+ // cannot yield the real item id. Synthesizing a replacement here is what manufactured the
49
+ // identifier the server rejected in issue #2204. Only a *present* id may be repaired.
50
+ if (!("id" in item) || item.id === undefined)
51
+ return false;
36
52
  if (isValidResponsesFunctionCallId(item.id))
37
53
  return false;
38
54
  const synthesized = responsesFunctionCallIdForCallId(item.call_id);
@@ -1 +1 @@
1
- {"version":3,"file":"openai-responses-payload-sanitizer.js","sourceRoot":"","sources":["../../src/core/openai-responses-payload-sanitizer.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport type { Api, Model } from \"@earendil-works/pi-ai/compat\";\n\ntype JsonObject = { [key: string]: JsonValue };\ntype JsonValue = string | number | boolean | null | JsonValue[] | JsonObject;\n\nconst RESPONSES_FUNCTION_CALL_ID = /^fc_[A-Za-z0-9_-]{1,61}$/;\nconst RESPONSES_FUNCTION_CALL_ID_PREFIX = \"fc_\";\nconst MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH = 64;\nexport const MIN_RESPONSES_MAX_OUTPUT_TOKENS = 16;\n\nfunction isPlainObject(value: unknown): value is JsonObject {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isOpenAIResponsesModel(model: Pick<Model<Api>, \"api\">): boolean {\n\treturn model.api === \"openai-responses\";\n}\n\nexport function isValidResponsesFunctionCallId(id: unknown): id is string {\n\treturn typeof id === \"string\" && RESPONSES_FUNCTION_CALL_ID.test(id);\n}\n\nfunction sha256Base64Url(value: string): string {\n\treturn createHash(\"sha256\").update(value).digest(\"base64url\");\n}\n\nfunction sanitizedCallIdFragment(callId: string): string {\n\treturn callId.replace(/[^A-Za-z0-9_-]/g, \"_\").replace(/^_+|_+$/g, \"\");\n}\n\nexport function responsesFunctionCallIdForCallId(callId: unknown): string | undefined {\n\tif (typeof callId !== \"string\" || callId.length === 0) return undefined;\n\tconst direct = `${RESPONSES_FUNCTION_CALL_ID_PREFIX}${callId}`;\n\tif (isValidResponsesFunctionCallId(direct)) return direct;\n\n\tconst sanitized = sanitizedCallIdFragment(callId);\n\tconst hash = sha256Base64Url(callId).slice(0, 16);\n\tconst suffixBudget = MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH - RESPONSES_FUNCTION_CALL_ID_PREFIX.length;\n\tconst suffix = sanitized.length > 0 ? `${sanitized.slice(0, suffixBudget - hash.length - 1)}_${hash}` : hash;\n\treturn `${RESPONSES_FUNCTION_CALL_ID_PREFIX}${suffix}`;\n}\n\nfunction sanitizeResponsesFunctionCall(item: JsonObject): boolean {\n\tif (item.type !== \"function_call\") return false;\n\tif (isValidResponsesFunctionCallId(item.id)) return false;\n\n\tconst synthesized = responsesFunctionCallIdForCallId(item.call_id);\n\tif (synthesized) {\n\t\titem.id = synthesized;\n\t} else {\n\t\tdelete item.id;\n\t}\n\treturn true;\n}\n\nexport function sanitizeOpenAIResponsesPayload(payload: unknown, model: Pick<Model<Api>, \"api\">): unknown {\n\tif (!isOpenAIResponsesModel(model) || !isPlainObject(payload)) return payload;\n\n\tlet changed = false;\n\tlet sanitizedPayload: JsonObject = payload;\n\n\tif (\n\t\ttypeof payload.max_output_tokens === \"number\" &&\n\t\tNumber.isFinite(payload.max_output_tokens) &&\n\t\tpayload.max_output_tokens < MIN_RESPONSES_MAX_OUTPUT_TOKENS\n\t) {\n\t\tchanged = true;\n\t\tsanitizedPayload = { ...sanitizedPayload, max_output_tokens: MIN_RESPONSES_MAX_OUTPUT_TOKENS };\n\t}\n\n\tif (Array.isArray(payload.input)) {\n\t\tlet inputChanged = false;\n\t\tconst input = payload.input.map((item) => {\n\t\t\tif (!isPlainObject(item)) return item;\n\t\t\tconst cloned = { ...item };\n\t\t\tinputChanged = sanitizeResponsesFunctionCall(cloned) || inputChanged;\n\t\t\treturn cloned;\n\t\t});\n\n\t\tif (inputChanged) {\n\t\t\tchanged = true;\n\t\t\tsanitizedPayload = { ...sanitizedPayload, input };\n\t\t}\n\t}\n\n\treturn changed ? sanitizedPayload : payload;\n}\n"]}
1
+ {"version":3,"file":"openai-responses-payload-sanitizer.js","sourceRoot":"","sources":["../../src/core/openai-responses-payload-sanitizer.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport type { Api, Model } from \"@earendil-works/pi-ai/compat\";\n\ntype JsonObject = { [key: string]: JsonValue };\ntype JsonValue = string | number | boolean | null | JsonValue[] | JsonObject;\n\nconst RESPONSES_FUNCTION_CALL_ID_PREFIX = \"fc_\";\n// Upper bound for a synthesized Responses `function_call.id`, shared by the validator below\n// and by the generator budget in `responsesFunctionCallIdForCallId`.\n//\n// The server's real bound is UNCONFIRMED: the live API was never probed. The only hard datum\n// is that a 64-character `fc_*` value was deterministically rejected with 400\n// invalid_request_body (issue #2204), while its characters were all within the class the\n// error text named. 63 is therefore a deliberately conservative margin that sits below the\n// one length known to fail rather than on it. Revise only against a confirmed live bound.\nconst MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH = 63;\n// Derived from the maximum above so the validator and the generator can never disagree.\nconst RESPONSES_FUNCTION_CALL_ID = new RegExp(\n\t`^${RESPONSES_FUNCTION_CALL_ID_PREFIX}[A-Za-z0-9_-]{1,${\n\t\tMAX_RESPONSES_FUNCTION_CALL_ID_LENGTH - RESPONSES_FUNCTION_CALL_ID_PREFIX.length\n\t}}$`,\n);\nexport const MIN_RESPONSES_MAX_OUTPUT_TOKENS = 16;\n\nfunction isPlainObject(value: unknown): value is JsonObject {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isOpenAIResponsesModel(model: Pick<Model<Api>, \"api\">): boolean {\n\treturn model.api === \"openai-responses\";\n}\n\nexport function isValidResponsesFunctionCallId(id: unknown): id is string {\n\treturn typeof id === \"string\" && RESPONSES_FUNCTION_CALL_ID.test(id);\n}\n\nfunction sha256Base64Url(value: string): string {\n\treturn createHash(\"sha256\").update(value).digest(\"base64url\");\n}\n\nfunction sanitizedCallIdFragment(callId: string): string {\n\treturn callId.replace(/[^A-Za-z0-9_-]/g, \"_\").replace(/^_+|_+$/g, \"\");\n}\n\nexport function responsesFunctionCallIdForCallId(callId: unknown): string | undefined {\n\tif (typeof callId !== \"string\" || callId.length === 0) return undefined;\n\tconst direct = `${RESPONSES_FUNCTION_CALL_ID_PREFIX}${callId}`;\n\tif (isValidResponsesFunctionCallId(direct)) return direct;\n\n\tconst sanitized = sanitizedCallIdFragment(callId);\n\tconst hash = sha256Base64Url(callId).slice(0, 16);\n\tconst suffixBudget = MAX_RESPONSES_FUNCTION_CALL_ID_LENGTH - RESPONSES_FUNCTION_CALL_ID_PREFIX.length;\n\tconst suffix = sanitized.length > 0 ? `${sanitized.slice(0, suffixBudget - hash.length - 1)}_${hash}` : hash;\n\treturn `${RESPONSES_FUNCTION_CALL_ID_PREFIX}${suffix}`;\n}\n\nfunction sanitizeResponsesFunctionCall(item: JsonObject): boolean {\n\tif (item.type !== \"function_call\") return false;\n\t// An absent id stays absent. The conversion layer below either omits it deliberately, to\n\t// avoid the Responses fc_/rs_ pairing validation, or omits it because the composite\n\t// tool-call id was already flattened — and in that case `call_id` has been mangled too and\n\t// cannot yield the real item id. Synthesizing a replacement here is what manufactured the\n\t// identifier the server rejected in issue #2204. Only a *present* id may be repaired.\n\tif (!(\"id\" in item) || item.id === undefined) return false;\n\tif (isValidResponsesFunctionCallId(item.id)) return false;\n\n\tconst synthesized = responsesFunctionCallIdForCallId(item.call_id);\n\tif (synthesized) {\n\t\titem.id = synthesized;\n\t} else {\n\t\tdelete item.id;\n\t}\n\treturn true;\n}\n\nexport function sanitizeOpenAIResponsesPayload(payload: unknown, model: Pick<Model<Api>, \"api\">): unknown {\n\tif (!isOpenAIResponsesModel(model) || !isPlainObject(payload)) return payload;\n\n\tlet changed = false;\n\tlet sanitizedPayload: JsonObject = payload;\n\n\tif (\n\t\ttypeof payload.max_output_tokens === \"number\" &&\n\t\tNumber.isFinite(payload.max_output_tokens) &&\n\t\tpayload.max_output_tokens < MIN_RESPONSES_MAX_OUTPUT_TOKENS\n\t) {\n\t\tchanged = true;\n\t\tsanitizedPayload = { ...sanitizedPayload, max_output_tokens: MIN_RESPONSES_MAX_OUTPUT_TOKENS };\n\t}\n\n\tif (Array.isArray(payload.input)) {\n\t\tlet inputChanged = false;\n\t\tconst input = payload.input.map((item) => {\n\t\t\tif (!isPlainObject(item)) return item;\n\t\t\tconst cloned = { ...item };\n\t\t\tinputChanged = sanitizeResponsesFunctionCall(cloned) || inputChanged;\n\t\t\treturn cloned;\n\t\t});\n\n\t\tif (inputChanged) {\n\t\t\tchanged = true;\n\t\t\tsanitizedPayload = { ...sanitizedPayload, input };\n\t\t}\n\t}\n\n\treturn changed ? sanitizedPayload : payload;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-git.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-git.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAOjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AA4C1G,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,MAAM,GAAG,SAAS,CAepB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CrH;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAepH;AAgCD,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpH;AAsBD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcnH;AAkBD,wBAAsB,uBAAuB,CAC5C,OAAO,EAAE,qBAAqB,EAC9B,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,mBAAmB,CAAC,CAmD9B"}
1
+ {"version":3,"file":"package-manager-git.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-git.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAOjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AA4C1G,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,MAAM,GAAG,SAAS,CAepB;AA+CD,wBAAsB,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CrH;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAepH;AAkCD,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpH;AAsBD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcnH;AAkBD,wBAAsB,uBAAuB,CAC5C,OAAO,EAAE,qBAAqB,EAC9B,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,mBAAmB,CAAC,CAmD9B"}
@@ -1,6 +1,6 @@
1
- import { existsSync, mkdirSync, readdirSync, rmSync } from "node:fs";
2
- import { dirname, join, resolve } from "node:path";
3
- import { getProjectConfigDirs } from "../config.js";
1
+ import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
+ import { basename, dirname, join, resolve, sep } from "node:path";
3
+ import { APP_NAME, getProjectConfigDirs } from "../config.js";
4
4
  import { runCommand, runCommandCapture } from "./package-manager-command.js";
5
5
  import { NETWORK_TIMEOUT_MS } from "./package-manager-constants.js";
6
6
  import { isOfflineModeEnabled } from "./package-manager-env.js";
@@ -53,6 +53,48 @@ export function getExistingGitInstallPath(context, source, scope) {
53
53
  }
54
54
  return undefined;
55
55
  }
56
+ function getGitUpdateMarkerPath(targetDir) {
57
+ return join(dirname(targetDir), `.${basename(targetDir)}.${APP_NAME}-update-incomplete`);
58
+ }
59
+ function hasMissingGitDependencies(targetDir) {
60
+ const packageJsonPath = join(targetDir, "package.json");
61
+ if (!existsSync(packageJsonPath))
62
+ return false;
63
+ try {
64
+ const manifest = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
65
+ if (!manifest.dependencies || typeof manifest.dependencies !== "object" || Array.isArray(manifest.dependencies)) {
66
+ return false;
67
+ }
68
+ const nodeModulesDir = resolve(targetDir, "node_modules");
69
+ return Object.keys(manifest.dependencies).some((name) => {
70
+ const dependencyPath = resolve(nodeModulesDir, name);
71
+ if (!dependencyPath.startsWith(`${nodeModulesDir}${sep}`))
72
+ return false;
73
+ return !existsSync(dependencyPath);
74
+ });
75
+ }
76
+ catch {
77
+ return false;
78
+ }
79
+ }
80
+ async function repairMissingGitDependencies(context, targetDir) {
81
+ if (!hasMissingGitDependencies(targetDir))
82
+ return;
83
+ await runNpmCommand(context, getGitDependencyInstallArgs(context), { cwd: targetDir });
84
+ }
85
+ async function cleanAndInstallGitDependencies(context, targetDir, markerPath) {
86
+ try {
87
+ await runGitProcess(context, "git", ["clean", "-fdx"], { cwd: targetDir });
88
+ }
89
+ catch (error) {
90
+ await repairMissingGitDependencies(context, targetDir).catch(() => { });
91
+ throw error;
92
+ }
93
+ if (existsSync(join(targetDir, "package.json"))) {
94
+ await runNpmCommand(context, getGitDependencyInstallArgs(context), { cwd: targetDir });
95
+ }
96
+ rmSync(markerPath, { force: true });
97
+ }
56
98
  export async function installGit(context, source, scope) {
57
99
  const safeRef = source.ref ? getSafeGitRef(source.ref) : undefined;
58
100
  const targetDir = getGitInstallPath(context, source, scope);
@@ -72,6 +114,7 @@ export async function installGit(context, source, scope) {
72
114
  ensureGitIgnore(gitRoot);
73
115
  }
74
116
  mkdirSync(dirname(targetDir), { recursive: true });
117
+ rmSync(getGitUpdateMarkerPath(targetDir), { force: true });
75
118
  // Defense-in-depth: the clone URL is already parsed/validated upstream, but
76
119
  // assert it contains only shell-safe characters immediately before it reaches
77
120
  // `git clone`, so no metacharacter can ever reach a shell even on platforms
@@ -127,15 +170,19 @@ async function ensureGitRef(context, targetDir, fetchArgs, ref) {
127
170
  cwd: targetDir,
128
171
  timeoutMs: NETWORK_TIMEOUT_MS,
129
172
  });
173
+ const markerPath = getGitUpdateMarkerPath(targetDir);
130
174
  if (localHead.trim() === targetHead.trim()) {
175
+ if (existsSync(markerPath)) {
176
+ await cleanAndInstallGitDependencies(context, targetDir, markerPath);
177
+ }
178
+ else {
179
+ await repairMissingGitDependencies(context, targetDir);
180
+ }
131
181
  return;
132
182
  }
183
+ writeFileSync(markerPath, "", "utf-8");
133
184
  await runGitProcess(context, "git", ["reset", "--hard", commitRef], { cwd: targetDir });
134
- await runGitProcess(context, "git", ["clean", "-fdx"], { cwd: targetDir });
135
- const packageJsonPath = join(targetDir, "package.json");
136
- if (existsSync(packageJsonPath)) {
137
- await runNpmCommand(context, getGitDependencyInstallArgs(context), { cwd: targetDir });
138
- }
185
+ await cleanAndInstallGitDependencies(context, targetDir, markerPath);
139
186
  }
140
187
  export async function refreshTemporaryGitSource(context, source, sourceStr) {
141
188
  if (isOfflineModeEnabled()) {
@@ -150,9 +197,8 @@ export async function refreshTemporaryGitSource(context, source, sourceStr) {
150
197
  }
151
198
  export async function removeGit(context, source, scope) {
152
199
  const targetDir = getGitInstallPath(context, source, scope);
153
- if (!existsSync(targetDir))
154
- return;
155
200
  rmSync(targetDir, { recursive: true, force: true });
201
+ rmSync(getGitUpdateMarkerPath(targetDir), { force: true });
156
202
  pruneEmptyGitParents(targetDir, getGitInstallRoot(context, scope));
157
203
  }
158
204
  function pruneEmptyGitParents(targetDir, installRoot) {