@aiden-ade/sandbox-agent 0.1.59 → 0.1.60

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 (342) hide show
  1. package/dist/__tests__/binding-switch-git.test.d.ts +2 -0
  2. package/dist/__tests__/binding-switch-git.test.d.ts.map +1 -0
  3. package/dist/__tests__/binding-switch-git.test.js +610 -0
  4. package/dist/__tests__/binding-switch-git.test.js.map +1 -0
  5. package/dist/__tests__/cli-ensure-install.test.d.ts +2 -0
  6. package/dist/__tests__/cli-ensure-install.test.d.ts.map +1 -0
  7. package/dist/__tests__/cli-ensure-install.test.js +109 -0
  8. package/dist/__tests__/cli-ensure-install.test.js.map +1 -0
  9. package/dist/__tests__/cli-executable.test.d.ts +2 -0
  10. package/dist/__tests__/cli-executable.test.d.ts.map +1 -0
  11. package/dist/__tests__/cli-executable.test.js +129 -0
  12. package/dist/__tests__/cli-executable.test.js.map +1 -0
  13. package/dist/__tests__/cli-help.test.d.ts +2 -0
  14. package/dist/__tests__/cli-help.test.d.ts.map +1 -0
  15. package/dist/__tests__/cli-help.test.js +34 -0
  16. package/dist/__tests__/cli-help.test.js.map +1 -0
  17. package/dist/__tests__/computer-readiness.test.d.ts +2 -0
  18. package/dist/__tests__/computer-readiness.test.d.ts.map +1 -0
  19. package/dist/__tests__/computer-readiness.test.js +63 -0
  20. package/dist/__tests__/computer-readiness.test.js.map +1 -0
  21. package/dist/__tests__/core-agent-workflow-context.test.d.ts +2 -0
  22. package/dist/__tests__/core-agent-workflow-context.test.d.ts.map +1 -0
  23. package/dist/__tests__/core-agent-workflow-context.test.js +139 -0
  24. package/dist/__tests__/core-agent-workflow-context.test.js.map +1 -0
  25. package/dist/__tests__/daemon-reconcile-ask.test.d.ts +2 -0
  26. package/dist/__tests__/daemon-reconcile-ask.test.d.ts.map +1 -0
  27. package/dist/__tests__/daemon-reconcile-ask.test.js +86 -0
  28. package/dist/__tests__/daemon-reconcile-ask.test.js.map +1 -0
  29. package/dist/__tests__/daemon-socket.integration.test.d.ts +2 -0
  30. package/dist/__tests__/daemon-socket.integration.test.d.ts.map +1 -0
  31. package/dist/__tests__/daemon-socket.integration.test.js +450 -0
  32. package/dist/__tests__/daemon-socket.integration.test.js.map +1 -0
  33. package/dist/__tests__/daemon.test.d.ts +2 -0
  34. package/dist/__tests__/daemon.test.d.ts.map +1 -0
  35. package/dist/__tests__/daemon.test.js +3975 -0
  36. package/dist/__tests__/daemon.test.js.map +1 -0
  37. package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts +2 -0
  38. package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts.map +1 -0
  39. package/dist/__tests__/ensure-shared-checkout-branch.test.js +129 -0
  40. package/dist/__tests__/ensure-shared-checkout-branch.test.js.map +1 -0
  41. package/dist/__tests__/event-outbox-persist-failure.test.d.ts +2 -0
  42. package/dist/__tests__/event-outbox-persist-failure.test.d.ts.map +1 -0
  43. package/dist/__tests__/event-outbox-persist-failure.test.js +84 -0
  44. package/dist/__tests__/event-outbox-persist-failure.test.js.map +1 -0
  45. package/dist/__tests__/event-outbox.test.d.ts +2 -0
  46. package/dist/__tests__/event-outbox.test.d.ts.map +1 -0
  47. package/dist/__tests__/event-outbox.test.js +256 -0
  48. package/dist/__tests__/event-outbox.test.js.map +1 -0
  49. package/dist/__tests__/fake-provider-cli.test.d.ts +2 -0
  50. package/dist/__tests__/fake-provider-cli.test.d.ts.map +1 -0
  51. package/dist/__tests__/fake-provider-cli.test.js +46 -0
  52. package/dist/__tests__/fake-provider-cli.test.js.map +1 -0
  53. package/dist/__tests__/generated-images.test.d.ts +2 -0
  54. package/dist/__tests__/generated-images.test.d.ts.map +1 -0
  55. package/dist/__tests__/generated-images.test.js +132 -0
  56. package/dist/__tests__/generated-images.test.js.map +1 -0
  57. package/dist/__tests__/lifecycle-logger.test.d.ts +2 -0
  58. package/dist/__tests__/lifecycle-logger.test.d.ts.map +1 -0
  59. package/dist/__tests__/lifecycle-logger.test.js +49 -0
  60. package/dist/__tests__/lifecycle-logger.test.js.map +1 -0
  61. package/dist/__tests__/local-skill-scan.test.d.ts +2 -0
  62. package/dist/__tests__/local-skill-scan.test.d.ts.map +1 -0
  63. package/dist/__tests__/local-skill-scan.test.js +91 -0
  64. package/dist/__tests__/local-skill-scan.test.js.map +1 -0
  65. package/dist/__tests__/local-workspace-migration.test.d.ts +2 -0
  66. package/dist/__tests__/local-workspace-migration.test.d.ts.map +1 -0
  67. package/dist/__tests__/local-workspace-migration.test.js +195 -0
  68. package/dist/__tests__/local-workspace-migration.test.js.map +1 -0
  69. package/dist/__tests__/mcp-inspect-timeout.test.d.ts +2 -0
  70. package/dist/__tests__/mcp-inspect-timeout.test.d.ts.map +1 -0
  71. package/dist/__tests__/mcp-inspect-timeout.test.js +97 -0
  72. package/dist/__tests__/mcp-inspect-timeout.test.js.map +1 -0
  73. package/dist/__tests__/mcp-readiness.test.d.ts +2 -0
  74. package/dist/__tests__/mcp-readiness.test.d.ts.map +1 -0
  75. package/dist/__tests__/mcp-readiness.test.js +267 -0
  76. package/dist/__tests__/mcp-readiness.test.js.map +1 -0
  77. package/dist/__tests__/mcp-registration-cli.test.d.ts +2 -0
  78. package/dist/__tests__/mcp-registration-cli.test.d.ts.map +1 -0
  79. package/dist/__tests__/mcp-registration-cli.test.js +71 -0
  80. package/dist/__tests__/mcp-registration-cli.test.js.map +1 -0
  81. package/dist/__tests__/mcp-registration.test.d.ts +2 -0
  82. package/dist/__tests__/mcp-registration.test.d.ts.map +1 -0
  83. package/dist/__tests__/mcp-registration.test.js +426 -0
  84. package/dist/__tests__/mcp-registration.test.js.map +1 -0
  85. package/dist/__tests__/model-scan-runner.test.d.ts +2 -0
  86. package/dist/__tests__/model-scan-runner.test.d.ts.map +1 -0
  87. package/dist/__tests__/model-scan-runner.test.js +67 -0
  88. package/dist/__tests__/model-scan-runner.test.js.map +1 -0
  89. package/dist/__tests__/network-diagnostics.test.d.ts +2 -0
  90. package/dist/__tests__/network-diagnostics.test.d.ts.map +1 -0
  91. package/dist/__tests__/network-diagnostics.test.js +26 -0
  92. package/dist/__tests__/network-diagnostics.test.js.map +1 -0
  93. package/dist/__tests__/observable-map.test.d.ts +2 -0
  94. package/dist/__tests__/observable-map.test.d.ts.map +1 -0
  95. package/dist/__tests__/observable-map.test.js +54 -0
  96. package/dist/__tests__/observable-map.test.js.map +1 -0
  97. package/dist/__tests__/provider-auth-preflight.test.d.ts +2 -0
  98. package/dist/__tests__/provider-auth-preflight.test.d.ts.map +1 -0
  99. package/dist/__tests__/provider-auth-preflight.test.js +123 -0
  100. package/dist/__tests__/provider-auth-preflight.test.js.map +1 -0
  101. package/dist/__tests__/provider-model-discovery.test.d.ts +2 -0
  102. package/dist/__tests__/provider-model-discovery.test.d.ts.map +1 -0
  103. package/dist/__tests__/provider-model-discovery.test.js +472 -0
  104. package/dist/__tests__/provider-model-discovery.test.js.map +1 -0
  105. package/dist/__tests__/remove-worktrees-if-clean.test.d.ts +2 -0
  106. package/dist/__tests__/remove-worktrees-if-clean.test.d.ts.map +1 -0
  107. package/dist/__tests__/remove-worktrees-if-clean.test.js +221 -0
  108. package/dist/__tests__/remove-worktrees-if-clean.test.js.map +1 -0
  109. package/dist/__tests__/resume-fallback-env.test.d.ts +2 -0
  110. package/dist/__tests__/resume-fallback-env.test.d.ts.map +1 -0
  111. package/dist/__tests__/resume-fallback-env.test.js +28 -0
  112. package/dist/__tests__/resume-fallback-env.test.js.map +1 -0
  113. package/dist/__tests__/run-journal.test.d.ts +2 -0
  114. package/dist/__tests__/run-journal.test.d.ts.map +1 -0
  115. package/dist/__tests__/run-journal.test.js +121 -0
  116. package/dist/__tests__/run-journal.test.js.map +1 -0
  117. package/dist/__tests__/run-start-gate.test.d.ts +2 -0
  118. package/dist/__tests__/run-start-gate.test.d.ts.map +1 -0
  119. package/dist/__tests__/run-start-gate.test.js +29 -0
  120. package/dist/__tests__/run-start-gate.test.js.map +1 -0
  121. package/dist/__tests__/runtime-capabilities-sync.test.d.ts +2 -0
  122. package/dist/__tests__/runtime-capabilities-sync.test.d.ts.map +1 -0
  123. package/dist/__tests__/runtime-capabilities-sync.test.js +66 -0
  124. package/dist/__tests__/runtime-capabilities-sync.test.js.map +1 -0
  125. package/dist/__tests__/runtime-config.test.d.ts +2 -0
  126. package/dist/__tests__/runtime-config.test.d.ts.map +1 -0
  127. package/dist/__tests__/runtime-config.test.js +102 -0
  128. package/dist/__tests__/runtime-config.test.js.map +1 -0
  129. package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts +2 -0
  130. package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts.map +1 -0
  131. package/dist/__tests__/runtime-presenter-heartbeat.test.js +159 -0
  132. package/dist/__tests__/runtime-presenter-heartbeat.test.js.map +1 -0
  133. package/dist/__tests__/sandbox-outbox.test.d.ts +2 -0
  134. package/dist/__tests__/sandbox-outbox.test.d.ts.map +1 -0
  135. package/dist/__tests__/sandbox-outbox.test.js +214 -0
  136. package/dist/__tests__/sandbox-outbox.test.js.map +1 -0
  137. package/dist/__tests__/sandbox-workflow-context.test.d.ts +2 -0
  138. package/dist/__tests__/sandbox-workflow-context.test.d.ts.map +1 -0
  139. package/dist/__tests__/sandbox-workflow-context.test.js +396 -0
  140. package/dist/__tests__/sandbox-workflow-context.test.js.map +1 -0
  141. package/dist/__tests__/service-manager.test.d.ts +2 -0
  142. package/dist/__tests__/service-manager.test.d.ts.map +1 -0
  143. package/dist/__tests__/service-manager.test.js +50 -0
  144. package/dist/__tests__/service-manager.test.js.map +1 -0
  145. package/dist/__tests__/sleep-inhibitor.test.d.ts +2 -0
  146. package/dist/__tests__/sleep-inhibitor.test.d.ts.map +1 -0
  147. package/dist/__tests__/sleep-inhibitor.test.js +236 -0
  148. package/dist/__tests__/sleep-inhibitor.test.js.map +1 -0
  149. package/dist/__tests__/status-local-workspace.test.d.ts +2 -0
  150. package/dist/__tests__/status-local-workspace.test.d.ts.map +1 -0
  151. package/dist/__tests__/status-local-workspace.test.js +121 -0
  152. package/dist/__tests__/status-local-workspace.test.js.map +1 -0
  153. package/dist/__tests__/suspension-detector.test.d.ts +2 -0
  154. package/dist/__tests__/suspension-detector.test.d.ts.map +1 -0
  155. package/dist/__tests__/suspension-detector.test.js +112 -0
  156. package/dist/__tests__/suspension-detector.test.js.map +1 -0
  157. package/dist/__tests__/web-presenter-parent-events.test.d.ts +2 -0
  158. package/dist/__tests__/web-presenter-parent-events.test.d.ts.map +1 -0
  159. package/dist/__tests__/web-presenter-parent-events.test.js +130 -0
  160. package/dist/__tests__/web-presenter-parent-events.test.js.map +1 -0
  161. package/dist/__tests__/workspace-relocation.test.d.ts +2 -0
  162. package/dist/__tests__/workspace-relocation.test.d.ts.map +1 -0
  163. package/dist/__tests__/workspace-relocation.test.js +66 -0
  164. package/dist/__tests__/workspace-relocation.test.js.map +1 -0
  165. package/dist/__tests__/workspace-run-lease.test.d.ts +2 -0
  166. package/dist/__tests__/workspace-run-lease.test.d.ts.map +1 -0
  167. package/dist/__tests__/workspace-run-lease.test.js +230 -0
  168. package/dist/__tests__/workspace-run-lease.test.js.map +1 -0
  169. package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts +2 -0
  170. package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts.map +1 -0
  171. package/dist/__tests__/ws-client-heartbeat-volatile.test.js +61 -0
  172. package/dist/__tests__/ws-client-heartbeat-volatile.test.js.map +1 -0
  173. package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts +2 -0
  174. package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts.map +1 -0
  175. package/dist/__tests__/ws-client-heartbeat.integration.test.js +109 -0
  176. package/dist/__tests__/ws-client-heartbeat.integration.test.js.map +1 -0
  177. package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts +2 -0
  178. package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts.map +1 -0
  179. package/dist/__tests__/ws-client-user-message-ack.integration.test.js +167 -0
  180. package/dist/__tests__/ws-client-user-message-ack.integration.test.js.map +1 -0
  181. package/dist/aiden-system-prompt.d.ts +6 -0
  182. package/dist/aiden-system-prompt.d.ts.map +1 -0
  183. package/dist/aiden-system-prompt.js +6 -0
  184. package/dist/aiden-system-prompt.js.map +1 -0
  185. package/dist/binding-switch-git.d.ts +26 -0
  186. package/dist/binding-switch-git.d.ts.map +1 -0
  187. package/dist/binding-switch-git.js +973 -0
  188. package/dist/binding-switch-git.js.map +1 -0
  189. package/dist/cli-ensure-install.d.ts +39 -0
  190. package/dist/cli-ensure-install.d.ts.map +1 -0
  191. package/dist/cli-ensure-install.js +133 -0
  192. package/dist/cli-ensure-install.js.map +1 -0
  193. package/dist/cli-executable.d.ts +97 -0
  194. package/dist/cli-executable.d.ts.map +1 -0
  195. package/dist/cli-executable.js +432 -0
  196. package/dist/cli-executable.js.map +1 -0
  197. package/dist/cli-help.d.ts +7 -0
  198. package/dist/cli-help.d.ts.map +1 -0
  199. package/dist/cli-help.js +49 -0
  200. package/dist/cli-help.js.map +1 -0
  201. package/dist/computer-readiness.d.ts +42 -0
  202. package/dist/computer-readiness.d.ts.map +1 -0
  203. package/dist/computer-readiness.js +191 -0
  204. package/dist/computer-readiness.js.map +1 -0
  205. package/dist/core-agent.d.ts +47 -0
  206. package/dist/core-agent.d.ts.map +1 -0
  207. package/dist/core-agent.js +364 -0
  208. package/dist/core-agent.js.map +1 -0
  209. package/dist/daemon.d.ts +392 -0
  210. package/dist/daemon.d.ts.map +1 -0
  211. package/dist/daemon.js +4711 -0
  212. package/dist/daemon.js.map +1 -0
  213. package/dist/event-outbox.d.ts +83 -0
  214. package/dist/event-outbox.d.ts.map +1 -0
  215. package/dist/event-outbox.js +440 -0
  216. package/dist/event-outbox.js.map +1 -0
  217. package/dist/fake-provider-cli.d.ts +13 -0
  218. package/dist/fake-provider-cli.d.ts.map +1 -0
  219. package/dist/fake-provider-cli.js +53 -0
  220. package/dist/fake-provider-cli.js.map +1 -0
  221. package/dist/generated-images.d.ts +2 -0
  222. package/dist/generated-images.d.ts.map +1 -0
  223. package/dist/generated-images.js +2 -0
  224. package/dist/generated-images.js.map +1 -0
  225. package/dist/index.cjs +129 -29
  226. package/dist/index.d.ts +6 -0
  227. package/dist/index.d.ts.map +1 -0
  228. package/dist/index.js +209 -0
  229. package/dist/index.js.map +1 -0
  230. package/dist/lifecycle-logger.d.ts +25 -0
  231. package/dist/lifecycle-logger.d.ts.map +1 -0
  232. package/dist/lifecycle-logger.js +73 -0
  233. package/dist/lifecycle-logger.js.map +1 -0
  234. package/dist/local-skill-scan.d.ts +21 -0
  235. package/dist/local-skill-scan.d.ts.map +1 -0
  236. package/dist/local-skill-scan.js +109 -0
  237. package/dist/local-skill-scan.js.map +1 -0
  238. package/dist/local-workspace-migration.d.ts +68 -0
  239. package/dist/local-workspace-migration.d.ts.map +1 -0
  240. package/dist/local-workspace-migration.js +157 -0
  241. package/dist/local-workspace-migration.js.map +1 -0
  242. package/dist/mcp-readiness.d.ts +59 -0
  243. package/dist/mcp-readiness.d.ts.map +1 -0
  244. package/dist/mcp-readiness.js +202 -0
  245. package/dist/mcp-readiness.js.map +1 -0
  246. package/dist/mcp-registration.d.ts +75 -0
  247. package/dist/mcp-registration.d.ts.map +1 -0
  248. package/dist/mcp-registration.js +563 -0
  249. package/dist/mcp-registration.js.map +1 -0
  250. package/dist/model-scan-runner.d.ts +15 -0
  251. package/dist/model-scan-runner.d.ts.map +1 -0
  252. package/dist/model-scan-runner.js +51 -0
  253. package/dist/model-scan-runner.js.map +1 -0
  254. package/dist/network-diagnostics.d.ts +8 -0
  255. package/dist/network-diagnostics.d.ts.map +1 -0
  256. package/dist/network-diagnostics.js +56 -0
  257. package/dist/network-diagnostics.js.map +1 -0
  258. package/dist/observable-map.d.ts +25 -0
  259. package/dist/observable-map.d.ts.map +1 -0
  260. package/dist/observable-map.js +42 -0
  261. package/dist/observable-map.js.map +1 -0
  262. package/dist/provider-auth-preflight.d.ts +22 -0
  263. package/dist/provider-auth-preflight.d.ts.map +1 -0
  264. package/dist/provider-auth-preflight.js +110 -0
  265. package/dist/provider-auth-preflight.js.map +1 -0
  266. package/dist/provider-model-discovery.d.ts +38 -0
  267. package/dist/provider-model-discovery.d.ts.map +1 -0
  268. package/dist/provider-model-discovery.js +519 -0
  269. package/dist/provider-model-discovery.js.map +1 -0
  270. package/dist/resume-fallback-env.d.ts +20 -0
  271. package/dist/resume-fallback-env.d.ts.map +1 -0
  272. package/dist/resume-fallback-env.js +30 -0
  273. package/dist/resume-fallback-env.js.map +1 -0
  274. package/dist/run-journal.d.ts +53 -0
  275. package/dist/run-journal.d.ts.map +1 -0
  276. package/dist/run-journal.js +193 -0
  277. package/dist/run-journal.js.map +1 -0
  278. package/dist/run-start-gate.d.ts +9 -0
  279. package/dist/run-start-gate.d.ts.map +1 -0
  280. package/dist/run-start-gate.js +24 -0
  281. package/dist/run-start-gate.js.map +1 -0
  282. package/dist/runtime-backends.d.ts +2 -0
  283. package/dist/runtime-backends.d.ts.map +1 -0
  284. package/dist/runtime-backends.js +2 -0
  285. package/dist/runtime-backends.js.map +1 -0
  286. package/dist/runtime-capabilities-sync.d.ts +33 -0
  287. package/dist/runtime-capabilities-sync.d.ts.map +1 -0
  288. package/dist/runtime-capabilities-sync.js +56 -0
  289. package/dist/runtime-capabilities-sync.js.map +1 -0
  290. package/dist/runtime-config.d.ts +24 -0
  291. package/dist/runtime-config.d.ts.map +1 -0
  292. package/dist/runtime-config.js +124 -0
  293. package/dist/runtime-config.js.map +1 -0
  294. package/dist/sandbox-outbox.d.ts +122 -0
  295. package/dist/sandbox-outbox.d.ts.map +1 -0
  296. package/dist/sandbox-outbox.js +180 -0
  297. package/dist/sandbox-outbox.js.map +1 -0
  298. package/dist/sandbox.d.ts +44 -0
  299. package/dist/sandbox.d.ts.map +1 -0
  300. package/dist/sandbox.js +438 -0
  301. package/dist/sandbox.js.map +1 -0
  302. package/dist/service-manager.d.ts +28 -0
  303. package/dist/service-manager.d.ts.map +1 -0
  304. package/dist/service-manager.js +259 -0
  305. package/dist/service-manager.js.map +1 -0
  306. package/dist/sleep-inhibitor.d.ts +111 -0
  307. package/dist/sleep-inhibitor.d.ts.map +1 -0
  308. package/dist/sleep-inhibitor.js +412 -0
  309. package/dist/sleep-inhibitor.js.map +1 -0
  310. package/dist/suspension-detector.d.ts +48 -0
  311. package/dist/suspension-detector.d.ts.map +1 -0
  312. package/dist/suspension-detector.js +89 -0
  313. package/dist/suspension-detector.js.map +1 -0
  314. package/dist/types.d.ts +6 -0
  315. package/dist/types.d.ts.map +1 -0
  316. package/dist/types.js +6 -0
  317. package/dist/types.js.map +1 -0
  318. package/dist/updater.d.ts +15 -0
  319. package/dist/updater.d.ts.map +1 -0
  320. package/dist/updater.js +50 -0
  321. package/dist/updater.js.map +1 -0
  322. package/dist/version.d.ts +2 -0
  323. package/dist/version.d.ts.map +1 -0
  324. package/dist/version.js +2 -0
  325. package/dist/version.js.map +1 -0
  326. package/dist/web-presenter.d.ts +55 -0
  327. package/dist/web-presenter.d.ts.map +1 -0
  328. package/dist/web-presenter.js +265 -0
  329. package/dist/web-presenter.js.map +1 -0
  330. package/dist/workspace-relocation.d.ts +22 -0
  331. package/dist/workspace-relocation.d.ts.map +1 -0
  332. package/dist/workspace-relocation.js +90 -0
  333. package/dist/workspace-relocation.js.map +1 -0
  334. package/dist/workspace-run-lease.d.ts +97 -0
  335. package/dist/workspace-run-lease.d.ts.map +1 -0
  336. package/dist/workspace-run-lease.js +241 -0
  337. package/dist/workspace-run-lease.js.map +1 -0
  338. package/dist/ws-client.d.ts +194 -0
  339. package/dist/ws-client.d.ts.map +1 -0
  340. package/dist/ws-client.js +282 -0
  341. package/dist/ws-client.js.map +1 -0
  342. package/package.json +1 -1
@@ -0,0 +1,519 @@
1
+ import { readFileSync, realpathSync } from "node:fs";
2
+ import { AVAILABLE_MODELS, OPENCODE_ZEN_MODELS, PROVIDER_MODELS } from "@alan-ai/shared/frontend";
3
+ import { collapseCursorDiscoveredModelIds } from "@alan-ai/shared/runtime-discovered-models";
4
+ import { runCliProbeAsync } from "./cli-executable.js";
5
+ export const MODEL_DISCOVERY_TIMEOUT_MS = 8_000;
6
+ const ANTIGRAVITY_MODEL_DISCOVERY_TIMEOUT_MS = 12_000;
7
+ const OPENCODE_ZEN_MODEL_IDS = OPENCODE_ZEN_MODELS.map((model) => model.id);
8
+ const CLAUDE_MODEL_ID_PATTERN = /claude-(?:sonnet|opus|haiku|fable)-[a-z0-9][a-z0-9-]*/g;
9
+ const CLAUDE_MODEL_ALIASES = ["sonnet", "opus", "haiku", "fable"];
10
+ /**
11
+ * Non-numeric segments allowed after the family/version in a Claude model id (e.g.
12
+ * `claude-opus-4-6-fast`, `claude-sonnet-5-thinking`). Any OTHER alphabetic segment is an
13
+ * internal binary codename, not a dispatchable model — the scrape regex greedily runs
14
+ * across hyphens, so `claude-fable-5-mythos-5` matched an internal string. Rejecting
15
+ * unknown word segments keeps such codenames out of the picker.
16
+ */
17
+ const CLAUDE_MODEL_QUALIFIER_SEGMENTS = new Set(["fast", "thinking", "latest", "preview"]);
18
+ /** Curated catalogue ids that a longer scraped sibling must never evict. */
19
+ const PROTECTED_CATALOG_MODEL_IDS = new Set(AVAILABLE_MODELS.map((model) => model.id).filter((id) => id.length > 0));
20
+ const CATALOG_MODEL_IDS_BY_PROVIDER = Object.fromEntries(Object.entries(PROVIDER_MODELS).map(([provider, models]) => [
21
+ provider,
22
+ models.map((model) => model.id),
23
+ ]));
24
+ function readModelId(value) {
25
+ if (typeof value === "string") {
26
+ const trimmed = value.trim();
27
+ return trimmed.length > 0 ? trimmed : null;
28
+ }
29
+ if (!value || typeof value !== "object")
30
+ return null;
31
+ const record = value;
32
+ return (readModelId(record.slug) ??
33
+ readModelId(record.id) ??
34
+ readModelId(record.model) ??
35
+ readModelId(record.name) ??
36
+ readModelId(record.value));
37
+ }
38
+ export function extractModelIdsFromJson(value) {
39
+ if (Array.isArray(value)) {
40
+ return [...new Set(value.map(readModelId).filter((model) => Boolean(model)))];
41
+ }
42
+ if (!value || typeof value !== "object")
43
+ return [];
44
+ const record = value;
45
+ for (const key of ["models", "data", "items"]) {
46
+ const nested = extractModelIdsFromJson(record[key]);
47
+ if (nested.length > 0)
48
+ return nested;
49
+ }
50
+ const byProvider = record.opencode ?? record.providers;
51
+ if (byProvider) {
52
+ const nested = extractModelIdsFromJson(byProvider);
53
+ if (nested.length > 0)
54
+ return nested;
55
+ }
56
+ return [];
57
+ }
58
+ /** Parse `codex debug models` JSON — only slugs the CLI exposes in the picker. */
59
+ export function extractCodexModelSlugsFromDebugJson(value) {
60
+ if (!value || typeof value !== "object")
61
+ return [];
62
+ const models = value.models;
63
+ if (!Array.isArray(models))
64
+ return [];
65
+ const slugs = [];
66
+ for (const entry of models) {
67
+ if (!entry || typeof entry !== "object")
68
+ continue;
69
+ const record = entry;
70
+ const visibility = typeof record.visibility === "string" ? record.visibility.toLowerCase() : "list";
71
+ if (visibility === "hidden" || visibility === "hide")
72
+ continue;
73
+ const slug = readModelId(record.slug);
74
+ if (slug)
75
+ slugs.push(slug);
76
+ }
77
+ return [...new Set(slugs)];
78
+ }
79
+ function normalizeCodexReasoningEffort(effort) {
80
+ const normalized = effort.trim().toLowerCase();
81
+ if (!normalized)
82
+ return null;
83
+ // Codex/OpenAI use `none`; Alan's picker label is `minimal`.
84
+ if (normalized === "none")
85
+ return "minimal";
86
+ if (normalized === "minimal" ||
87
+ normalized === "low" ||
88
+ normalized === "medium" ||
89
+ normalized === "high" ||
90
+ normalized === "xhigh" ||
91
+ normalized === "max" ||
92
+ normalized === "ultra") {
93
+ return normalized;
94
+ }
95
+ return null;
96
+ }
97
+ /** Parse `codex debug models` JSON and expand supported reasoning levels for effort merge. */
98
+ export function extractCodexDiscoveredModelIdsFromDebugJson(value) {
99
+ if (!value || typeof value !== "object")
100
+ return [];
101
+ const models = value.models;
102
+ if (!Array.isArray(models))
103
+ return [];
104
+ const ids = [];
105
+ for (const entry of models) {
106
+ if (!entry || typeof entry !== "object")
107
+ continue;
108
+ const record = entry;
109
+ const visibility = typeof record.visibility === "string" ? record.visibility.toLowerCase() : "list";
110
+ if (visibility === "hidden" || visibility === "hide")
111
+ continue;
112
+ const slug = readModelId(record.slug);
113
+ if (!slug)
114
+ continue;
115
+ const reasoningLevels = record.supported_reasoning_levels;
116
+ if (Array.isArray(reasoningLevels) && reasoningLevels.length > 0) {
117
+ for (const levelEntry of reasoningLevels) {
118
+ if (!levelEntry || typeof levelEntry !== "object")
119
+ continue;
120
+ const effort = typeof levelEntry.effort === "string"
121
+ ? levelEntry.effort
122
+ : null;
123
+ const normalized = effort ? normalizeCodexReasoningEffort(effort) : null;
124
+ if (normalized)
125
+ ids.push(`${slug}-${normalized}`);
126
+ }
127
+ continue;
128
+ }
129
+ ids.push(slug);
130
+ }
131
+ return [...new Set(ids)];
132
+ }
133
+ /**
134
+ * OpenCode's real reasoning-capability scan.
135
+ *
136
+ * `opencode models --verbose` (verified against opencode 1.17.18 — `opencode models
137
+ * --json`/`models list --json`/`model list --json`, tried below as a fallback, all
138
+ * fail with exit code 1 against the real CLI) prints, per model, an id line
139
+ * (`opencode/<model>`) followed by a pretty-printed JSON object carrying
140
+ * `capabilities.reasoning` (boolean) and `variants` (a map of tunable reasoning-effort
141
+ * tiers, e.g. `{ low: {...}, medium: {...}, high: {...} }`). This is NOT single-blob
142
+ * JSON — it's a stream of id-line + JSON-object pairs — so it needs its own parser
143
+ * rather than `JSON.parse` over the whole stdout.
144
+ *
145
+ * This is the live source of truth for which OpenCode models (including the free zen
146
+ * models) actually support tunable reasoning effort — do not hardcode a per-model
147
+ * effort matrix; scan it here the same way Codex's `debug models` scan and Cursor's
148
+ * `models --json` scan are the source of truth for their own effort tiers.
149
+ */
150
+ const OPENCODE_MODEL_ID_LINE_PATTERN = /^[a-z0-9][\w.-]*\/[\w.-]+$/i;
151
+ /** Effort suffix tokens `parseModelEffortSuffix` (packages/shared/src/effort.ts) recognizes. */
152
+ const OPENCODE_KNOWN_VARIANT_KEYS = new Set([
153
+ "minimal",
154
+ "none",
155
+ "low",
156
+ "medium",
157
+ "high",
158
+ "xhigh",
159
+ "extra-high",
160
+ "max",
161
+ "ultra",
162
+ ]);
163
+ /**
164
+ * Parse the `opencode models --verbose` hybrid text+JSON stream into structured
165
+ * entries. Tracks brace depth with string/escape awareness (not a naive count) so a
166
+ * brace inside a JSON string value can never desync parsing. Skips any block that
167
+ * fails to parse rather than aborting the whole scan — a single malformed model entry
168
+ * (future CLI schema tweak) should not blank out live effort discovery for every
169
+ * other model in the same scan.
170
+ */
171
+ function parseOpenCodeVerboseModelOutput(text) {
172
+ const entries = [];
173
+ const lines = text.split(/\r?\n/);
174
+ let i = 0;
175
+ while (i < lines.length) {
176
+ const line = (lines[i] ?? "").trim();
177
+ i += 1;
178
+ if (!OPENCODE_MODEL_ID_LINE_PATTERN.test(line))
179
+ continue;
180
+ let jsonStart = i;
181
+ while (jsonStart < lines.length && (lines[jsonStart] ?? "").trim() === "")
182
+ jsonStart += 1;
183
+ if (jsonStart >= lines.length || !(lines[jsonStart] ?? "").trim().startsWith("{"))
184
+ continue;
185
+ let depth = 0;
186
+ let inString = false;
187
+ let escaped = false;
188
+ let endLineIdx = -1;
189
+ let buffer = "";
190
+ for (let j = jsonStart; j < lines.length; j += 1) {
191
+ const raw = lines[j] ?? "";
192
+ buffer += (buffer ? "\n" : "") + raw;
193
+ for (const ch of raw) {
194
+ if (escaped) {
195
+ escaped = false;
196
+ continue;
197
+ }
198
+ if (ch === "\\" && inString) {
199
+ escaped = true;
200
+ continue;
201
+ }
202
+ if (ch === '"') {
203
+ inString = !inString;
204
+ continue;
205
+ }
206
+ if (inString)
207
+ continue;
208
+ if (ch === "{")
209
+ depth += 1;
210
+ else if (ch === "}")
211
+ depth -= 1;
212
+ }
213
+ if (depth === 0) {
214
+ endLineIdx = j;
215
+ break;
216
+ }
217
+ }
218
+ if (endLineIdx === -1)
219
+ break; // truncated/malformed tail — stop parsing safely
220
+ try {
221
+ const obj = JSON.parse(buffer);
222
+ entries.push({
223
+ id: line,
224
+ reasoning: obj.capabilities?.reasoning === true,
225
+ variants: obj.variants ? Object.keys(obj.variants) : [],
226
+ });
227
+ }
228
+ catch {
229
+ // Skip this one malformed entry; keep scanning the rest of the stream.
230
+ }
231
+ i = endLineIdx + 1;
232
+ }
233
+ return entries;
234
+ }
235
+ export function extractOpenCodeModelCapabilitiesFromVerboseOutput(text) {
236
+ return parseOpenCodeVerboseModelOutput(text)
237
+ .filter((entry) => entry.id.startsWith("opencode/"))
238
+ .map((entry) => ({
239
+ id: entry.id,
240
+ variants: entry.reasoning
241
+ ? entry.variants.filter((variant) => {
242
+ const trimmed = variant.trim();
243
+ return (Boolean(trimmed) &&
244
+ trimmed.length <= 256 &&
245
+ !Array.from(trimmed).some((character) => {
246
+ const code = character.charCodeAt(0);
247
+ return code <= 31 || code === 127;
248
+ }));
249
+ })
250
+ : [],
251
+ }));
252
+ }
253
+ /**
254
+ * Expand `opencode models --verbose` output into discovery ids. A reasoning-capable
255
+ * model with tunable variants emits one `<id>-<variant>` per known variant (e.g.
256
+ * `opencode/deepseek-v4-flash-free-low`, `...-medium`, `...-high`, `...-max`) — these
257
+ * collapse back to base + effort via the existing `parseModelEffortSuffix` machinery,
258
+ * exactly like Codex's `debug models` reasoning-tier expansion. A model with
259
+ * `reasoning: true` but no (recognized) tunable variant — e.g. `big-pickle`, which
260
+ * always reasons with no selectable level — emits its bare id only, so it is never
261
+ * treated as effort-tunable. An unrecognized variant key is dropped rather than
262
+ * guessed at, so it can never corrupt a base model id.
263
+ */
264
+ export function extractOpenCodeDiscoveredModelIdsFromVerboseOutput(text) {
265
+ const entries = extractOpenCodeModelCapabilitiesFromVerboseOutput(text);
266
+ const ids = [];
267
+ for (const entry of entries) {
268
+ const knownVariants = entry.variants.filter((variant) => OPENCODE_KNOWN_VARIANT_KEYS.has(variant));
269
+ if (knownVariants.length === 0) {
270
+ ids.push(entry.id);
271
+ continue;
272
+ }
273
+ for (const variant of knownVariants) {
274
+ ids.push(`${entry.id}-${variant}`);
275
+ }
276
+ }
277
+ return [...new Set(ids)];
278
+ }
279
+ export function extractModelIdsFromText(value) {
280
+ const ansiPattern = new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*m`, "g");
281
+ const ignoredLinePattern = /^(available models|models|usage|error|flag provided|try |agy\b|warning:)/i;
282
+ const ids = value
283
+ .split(/\r?\n/)
284
+ .map((line) => line
285
+ .replace(ansiPattern, "")
286
+ .replace(/^[-*•]\s*/, "")
287
+ .trim())
288
+ .filter((line) => line.length > 0 && !ignoredLinePattern.test(line));
289
+ return [...new Set(ids)];
290
+ }
291
+ /** Parse `cursor-agent models` lines like `gpt-5.3-codex - Codex 5.3`. */
292
+ export function extractModelIdsFromLabeledList(value) {
293
+ const ansiPattern = new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*m`, "g");
294
+ const ignoredLinePattern = /^(available models|models|usage|error|warning:)/i;
295
+ const ids = [];
296
+ for (const rawLine of value.split(/\r?\n/)) {
297
+ const line = rawLine.replace(ansiPattern, "").trim();
298
+ if (!line || ignoredLinePattern.test(line))
299
+ continue;
300
+ const dashIdx = line.indexOf(" - ");
301
+ const id = (dashIdx >= 0 ? line.slice(0, dashIdx) : line).trim();
302
+ if (id)
303
+ ids.push(id);
304
+ }
305
+ return [...new Set(ids)];
306
+ }
307
+ export function isValidClaudeModelId(id) {
308
+ if (CLAUDE_MODEL_ALIASES.includes(id))
309
+ return true;
310
+ const match = id.match(/^claude-(sonnet|opus|haiku|fable)-([a-z0-9][a-z0-9-]*)$/);
311
+ if (!match)
312
+ return false;
313
+ if (id.includes("."))
314
+ return false;
315
+ if (/-\d{8}$/.test(id))
316
+ return false;
317
+ if (/-v\d+$/.test(id))
318
+ return false;
319
+ // Every segment after the family token must be a version number or a known qualifier.
320
+ // An unknown alphabetic segment (e.g. "mythos") is an internal binary codename that the
321
+ // greedy scrape regex ran into, not a real model id.
322
+ for (const segment of match[2].split("-")) {
323
+ if (/^\d+$/.test(segment))
324
+ continue;
325
+ if (CLAUDE_MODEL_QUALIFIER_SEGMENTS.has(segment))
326
+ continue;
327
+ return false;
328
+ }
329
+ return true;
330
+ }
331
+ /** Drop short Claude id prefixes when a longer sibling exists (e.g. claude-opus-4 vs claude-opus-4-6). */
332
+ export function filterClaudePrefixModelIds(ids) {
333
+ const set = new Set(ids);
334
+ return ids.filter((id) => {
335
+ // A curated catalogue id is never evicted by a longer scraped sibling — defense in
336
+ // depth so a future internal codename can't hide a real, shipped model.
337
+ if (PROTECTED_CATALOG_MODEL_IDS.has(id))
338
+ return true;
339
+ for (const other of set) {
340
+ if (other !== id && other.startsWith(`${id}-`))
341
+ return false;
342
+ }
343
+ return true;
344
+ });
345
+ }
346
+ /** Drop dated API snapshot ids when the undated sibling is present. */
347
+ export function filterClaudeDatedModelIds(ids) {
348
+ const set = new Set(ids);
349
+ return ids.filter((id) => {
350
+ const dated = id.match(/^(claude-(?:sonnet|opus|haiku|fable)-[a-z0-9][a-z0-9-]*)-\d{8}$/);
351
+ if (!dated)
352
+ return true;
353
+ return !set.has(dated[1]);
354
+ });
355
+ }
356
+ function resolveExecutableForModelScan(executable) {
357
+ try {
358
+ return realpathSync(executable);
359
+ }
360
+ catch {
361
+ return executable;
362
+ }
363
+ }
364
+ /** Claude Code has no non-interactive model list yet; scrape embedded ids from the binary. */
365
+ export function extractClaudeModelIdsFromExecutable(executable) {
366
+ try {
367
+ const resolved = resolveExecutableForModelScan(executable);
368
+ const text = readFileSync(resolved).toString("latin1");
369
+ const matches = text.match(CLAUDE_MODEL_ID_PATTERN) ?? [];
370
+ const unique = [
371
+ ...new Set(matches.map((id) => id.trim()).filter((id) => isValidClaudeModelId(id))),
372
+ ...CLAUDE_MODEL_ALIASES,
373
+ ];
374
+ return filterClaudeDatedModelIds(filterClaudePrefixModelIds(unique));
375
+ }
376
+ catch {
377
+ return [];
378
+ }
379
+ }
380
+ export function getCatalogModelIds(provider) {
381
+ const catalogProvider = provider === "opencode_serve" ? "opencode_cli" : provider;
382
+ return [...(CATALOG_MODEL_IDS_BY_PROVIDER[catalogProvider] ?? [])];
383
+ }
384
+ function withModelProbeEnv(env) {
385
+ const term = env.TERM;
386
+ if (term && term !== "dumb")
387
+ return env;
388
+ return { ...env, TERM: "xterm-256color" };
389
+ }
390
+ async function probeJsonOrTextModels(executable, env, argSets, options) {
391
+ const probeEnv = withModelProbeEnv(env);
392
+ const timeoutMs = options?.timeoutMs ?? MODEL_DISCOVERY_TIMEOUT_MS;
393
+ for (const args of argSets) {
394
+ const result = await runCliProbeAsync(executable, probeEnv, args, timeoutMs, options?.closeStdin ? { closeStdin: true } : undefined);
395
+ if (!result || result.error || result.status !== 0 || !result.stdout.trim())
396
+ continue;
397
+ try {
398
+ const parsed = JSON.parse(result.stdout);
399
+ const codexModels = extractCodexDiscoveredModelIdsFromDebugJson(parsed);
400
+ if (codexModels.length > 0)
401
+ return codexModels;
402
+ const models = extractModelIdsFromJson(parsed);
403
+ if (models.length > 0)
404
+ return models;
405
+ }
406
+ catch {
407
+ const labeled = extractModelIdsFromLabeledList(result.stdout);
408
+ if (labeled.length > 0)
409
+ return labeled;
410
+ const models = extractModelIdsFromText(result.stdout);
411
+ if (models.length > 0)
412
+ return models;
413
+ }
414
+ }
415
+ return [];
416
+ }
417
+ async function discoverOpenCodeModels(executable, env) {
418
+ // Real command (verified live): `opencode models --verbose` prints per-model
419
+ // reasoning/variant capability — see extractOpenCodeDiscoveredModelIdsFromVerboseOutput.
420
+ // `--json`/`list --json` variants below are NOT real opencode flags (they exit 1 with
421
+ // opencode's own --help text); kept only as a last-resort probe in case some other
422
+ // OpenCode-compatible CLI build genuinely supports them.
423
+ const verbose = await runCliProbeAsync(executable, withModelProbeEnv(env), ["models", "--verbose"], MODEL_DISCOVERY_TIMEOUT_MS);
424
+ if (verbose && !verbose.error && verbose.status === 0 && verbose.stdout.trim()) {
425
+ const withEffort = extractOpenCodeDiscoveredModelIdsFromVerboseOutput(verbose.stdout);
426
+ if (withEffort.length > 0)
427
+ return withEffort;
428
+ }
429
+ const plain = await probeJsonOrTextModels(executable, env, [["models"]]);
430
+ if (plain.length > 0)
431
+ return plain;
432
+ const legacy = await probeJsonOrTextModels(executable, env, [
433
+ ["models", "--json"],
434
+ ["models", "list", "--json"],
435
+ ["model", "list", "--json"],
436
+ ]);
437
+ return legacy.length > 0 ? legacy : OPENCODE_ZEN_MODEL_IDS;
438
+ }
439
+ async function discoverAntigravityModels(executable, env) {
440
+ return probeJsonOrTextModels(executable, env, [["models"]], {
441
+ closeStdin: true,
442
+ timeoutMs: ANTIGRAVITY_MODEL_DISCOVERY_TIMEOUT_MS,
443
+ });
444
+ }
445
+ async function discoverCursorAgentModels(executable, env) {
446
+ return probeJsonOrTextModels(executable, env, [
447
+ ["models", "--json"],
448
+ ["models"],
449
+ ["--list-models"],
450
+ ]);
451
+ }
452
+ async function discoverCodexModels(executable, env) {
453
+ return probeJsonOrTextModels(executable, env, [["debug", "models"]]);
454
+ }
455
+ async function discoverClaudeModels(executable, env) {
456
+ const fromCli = await probeJsonOrTextModels(executable, env, [
457
+ ["model", "list", "--json"],
458
+ ["models", "--json"],
459
+ ["models", "list", "--json"],
460
+ ]);
461
+ if (fromCli.length > 0) {
462
+ return collapseCursorDiscoveredModelIds(fromCli);
463
+ }
464
+ return extractClaudeModelIdsFromExecutable(executable);
465
+ }
466
+ async function discoverGenericModels(executable, env) {
467
+ return probeJsonOrTextModels(executable, env, [
468
+ ["models", "--json"],
469
+ ["models", "list", "--json"],
470
+ ["models"],
471
+ ]);
472
+ }
473
+ /**
474
+ * Providers with no non-interactive model list at all — probing would just burn the
475
+ * discovery timeout on guaranteed-failing commands, so skip straight to the catalog.
476
+ *
477
+ * `copilot_cli` verified against Copilot CLI 1.0.75: `copilot models`/`models --json`/
478
+ * `models list --json` are not real subcommands (`error: unknown option '--json'`),
479
+ * there is no `models`-listing entry under `copilot --help`'s `Commands:`, and
480
+ * `~/.copilot/config.json` only caches login/session state, not the model catalog.
481
+ * The only place the real list is enumerated is the interactive `/model` picker inside
482
+ * a live TUI session, which `runCliProbeAsync` (plain stdio, no PTY) cannot drive.
483
+ */
484
+ const CATALOG_ONLY_PROVIDERS = new Set(["supatest_cli", "droid_cli", "copilot_cli"]);
485
+ export function supportsProviderModelDiscovery(provider) {
486
+ return provider === "opencode_serve" || provider in CATALOG_MODEL_IDS_BY_PROVIDER;
487
+ }
488
+ export async function discoverProviderModels(provider, executable, env) {
489
+ if (CATALOG_ONLY_PROVIDERS.has(provider)) {
490
+ return getCatalogModelIds(provider);
491
+ }
492
+ let probed = [];
493
+ if (provider === "opencode_cli" || provider === "opencode_serve") {
494
+ probed = await discoverOpenCodeModels(executable, env);
495
+ }
496
+ else if (provider === "antigravity_cli") {
497
+ probed = await discoverAntigravityModels(executable, env);
498
+ }
499
+ else if (provider === "cursor_agent_cli") {
500
+ probed = await discoverCursorAgentModels(executable, env);
501
+ }
502
+ else if (provider === "codex_app_server") {
503
+ probed = await discoverCodexModels(executable, env);
504
+ }
505
+ else if (provider === "claude_cli") {
506
+ probed = await discoverClaudeModels(executable, env);
507
+ }
508
+ else if (provider === "kimi_cli" || provider === "grok_cli") {
509
+ // kimi_cli/grok_cli are not installed in this environment and their real
510
+ // non-interactive interface (if any) has not been verified — left on the
511
+ // generic best-effort prober rather than guessing a new one. See the plan
512
+ // doc / PR description for the verification gap.
513
+ probed = await discoverGenericModels(executable, env);
514
+ }
515
+ if (probed.length > 0)
516
+ return probed;
517
+ return getCatalogModelIds(provider);
518
+ }
519
+ //# sourceMappingURL=provider-model-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-model-discovery.js","sourceRoot":"","sources":["../src/provider-model-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Transport for the resume-failure fallback transcript from the backend resume
3
+ * pipeline into the sandbox agent process.
4
+ *
5
+ * The API resume pipeline base64-encodes a compact recent transcript and injects
6
+ * it as `ALAN_RESUME_FALLBACK_CONTEXT_B64`. Base64 keeps the multi-line block
7
+ * intact across every provider env-injection path (E2B real env map; Daytona
8
+ * `su -c` shell interpolation), mirroring the existing `ALAN_ENV_FILE_B64`
9
+ * convention. The agent decodes it here and, if native resume of the provider
10
+ * session fails, rehydrates a fresh session from it instead of starting amnesiac.
11
+ */
12
+ /** Env var carrying the base64 recent-transcript for resume-failure fallback. */
13
+ export declare const RESUME_FALLBACK_CONTEXT_ENV = "ALAN_RESUME_FALLBACK_CONTEXT_B64";
14
+ /**
15
+ * Decode the base64 resume-fallback transcript. Returns undefined for an absent,
16
+ * empty, or undecodable value so a malformed env var never crashes bootstrap —
17
+ * the agent simply falls back to amnesiac resume.
18
+ */
19
+ export declare function decodeResumeFallbackContext(encoded: string | undefined): string | undefined;
20
+ //# sourceMappingURL=resume-fallback-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume-fallback-env.d.ts","sourceRoot":"","sources":["../src/resume-fallback-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,iFAAiF;AACjF,eAAO,MAAM,2BAA2B,qCAAqC,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAQ3F"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Transport for the resume-failure fallback transcript from the backend resume
3
+ * pipeline into the sandbox agent process.
4
+ *
5
+ * The API resume pipeline base64-encodes a compact recent transcript and injects
6
+ * it as `ALAN_RESUME_FALLBACK_CONTEXT_B64`. Base64 keeps the multi-line block
7
+ * intact across every provider env-injection path (E2B real env map; Daytona
8
+ * `su -c` shell interpolation), mirroring the existing `ALAN_ENV_FILE_B64`
9
+ * convention. The agent decodes it here and, if native resume of the provider
10
+ * session fails, rehydrates a fresh session from it instead of starting amnesiac.
11
+ */
12
+ /** Env var carrying the base64 recent-transcript for resume-failure fallback. */
13
+ export const RESUME_FALLBACK_CONTEXT_ENV = "ALAN_RESUME_FALLBACK_CONTEXT_B64";
14
+ /**
15
+ * Decode the base64 resume-fallback transcript. Returns undefined for an absent,
16
+ * empty, or undecodable value so a malformed env var never crashes bootstrap —
17
+ * the agent simply falls back to amnesiac resume.
18
+ */
19
+ export function decodeResumeFallbackContext(encoded) {
20
+ if (!encoded)
21
+ return undefined;
22
+ try {
23
+ const decoded = Buffer.from(encoded, "base64").toString("utf8").trim();
24
+ return decoded.length > 0 ? decoded : undefined;
25
+ }
26
+ catch {
27
+ return undefined;
28
+ }
29
+ }
30
+ //# sourceMappingURL=resume-fallback-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume-fallback-env.js","sourceRoot":"","sources":["../src/resume-fallback-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,iFAAiF;AACjF,MAAM,CAAC,MAAM,2BAA2B,GAAG,kCAAkC,CAAC;AAE9E;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAA2B;IACrE,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACvE,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,53 @@
1
+ export interface RuntimeRunJournalEntry {
2
+ runId: string;
3
+ conversationId: string;
4
+ acceptedAtMs: number;
5
+ /** Set when a later daemon process recovers this entry after interruption. */
6
+ interruptedAtMs?: number;
7
+ /** Diagnostic evidence only. A PID is not a durable process identity. */
8
+ providerPid?: number;
9
+ providerSpawnedAtMs?: number;
10
+ }
11
+ export type RuntimeRunRecoveryAssessment = {
12
+ reattachable: false;
13
+ reason: "provider_not_recorded";
14
+ } | {
15
+ reattachable: false;
16
+ reason: "provider_not_running";
17
+ providerPid: number;
18
+ } | {
19
+ reattachable: false;
20
+ reason: "provider_identity_unverified";
21
+ providerPid: number;
22
+ };
23
+ /**
24
+ * Durable accepted-run inbox. It stores identifiers only—never prompts, tool
25
+ * payloads, credentials, or provider output—and is persisted before the daemon
26
+ * acknowledges acceptance so a restart cannot turn redelivery into a second run.
27
+ */
28
+ export declare class RuntimeRunJournal {
29
+ private readonly path;
30
+ private readonly entries;
31
+ private readonly recoveredIds;
32
+ private recoveryPersistencePending;
33
+ constructor(path: string, nowMs?: number);
34
+ get(runId: string): RuntimeRunJournalEntry | undefined;
35
+ recoveredRunIds(): string[];
36
+ /**
37
+ * Mark entries from an earlier daemon as interrupted only after this process
38
+ * has proved exclusive ownership of the config's local API endpoint.
39
+ */
40
+ confirmRecoveryOwnership(nowMs?: number): void;
41
+ record(entry: RuntimeRunJournalEntry): void;
42
+ recordProviderSpawned(runId: string, providerPid: number, providerSpawnedAtMs: number): void;
43
+ /**
44
+ * A live PID is insufficient for reattachment: operating systems can reuse
45
+ * PIDs, and the daemon cannot recover the provider's anonymous stdio pipes.
46
+ * Keep the exact interruption outcome until a durable authenticated control
47
+ * channel can prove both identity and ownership.
48
+ */
49
+ assessRecovery(runId: string, isProcessAlive: (pid: number) => boolean): RuntimeRunRecoveryAssessment | undefined;
50
+ remove(runId: string): void;
51
+ private persist;
52
+ }
53
+ //# sourceMappingURL=run-journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-journal.d.ts","sourceRoot":"","sources":["../src/run-journal.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,4BAA4B,GACpC;IAAE,YAAY,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,uBAAuB,CAAA;CAAE,GACxD;IAAE,YAAY,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,YAAY,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,8BAA8B,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAkCzF;;;;GAIG;AACH,qBAAa,iBAAiB;IAM1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IALvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IACrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,0BAA0B,CAAS;gBAGxB,IAAI,EAAE,MAAM,EAC7B,KAAK,SAAa;IA0BpB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAItD,eAAe,IAAI,MAAM,EAAE;IAI3B;;;OAGG;IACH,wBAAwB,CAAC,KAAK,SAAa,GAAG,IAAI;IAwBlD,MAAM,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAY3C,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,IAAI;IAmB5F;;;;;OAKG;IACH,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GACvC,4BAA4B,GAAG,SAAS;IAoB3C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAe3B,OAAO,CAAC,OAAO;CAgBhB"}