@aiden-ade/sandbox-agent 0.1.60 → 0.1.61

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/index.cjs +436 -335
  2. package/package.json +3 -3
  3. package/dist/__tests__/binding-switch-git.test.d.ts +0 -2
  4. package/dist/__tests__/binding-switch-git.test.d.ts.map +0 -1
  5. package/dist/__tests__/binding-switch-git.test.js +0 -610
  6. package/dist/__tests__/binding-switch-git.test.js.map +0 -1
  7. package/dist/__tests__/cli-ensure-install.test.d.ts +0 -2
  8. package/dist/__tests__/cli-ensure-install.test.d.ts.map +0 -1
  9. package/dist/__tests__/cli-ensure-install.test.js +0 -109
  10. package/dist/__tests__/cli-ensure-install.test.js.map +0 -1
  11. package/dist/__tests__/cli-executable.test.d.ts +0 -2
  12. package/dist/__tests__/cli-executable.test.d.ts.map +0 -1
  13. package/dist/__tests__/cli-executable.test.js +0 -129
  14. package/dist/__tests__/cli-executable.test.js.map +0 -1
  15. package/dist/__tests__/cli-help.test.d.ts +0 -2
  16. package/dist/__tests__/cli-help.test.d.ts.map +0 -1
  17. package/dist/__tests__/cli-help.test.js +0 -34
  18. package/dist/__tests__/cli-help.test.js.map +0 -1
  19. package/dist/__tests__/computer-readiness.test.d.ts +0 -2
  20. package/dist/__tests__/computer-readiness.test.d.ts.map +0 -1
  21. package/dist/__tests__/computer-readiness.test.js +0 -63
  22. package/dist/__tests__/computer-readiness.test.js.map +0 -1
  23. package/dist/__tests__/core-agent-workflow-context.test.d.ts +0 -2
  24. package/dist/__tests__/core-agent-workflow-context.test.d.ts.map +0 -1
  25. package/dist/__tests__/core-agent-workflow-context.test.js +0 -139
  26. package/dist/__tests__/core-agent-workflow-context.test.js.map +0 -1
  27. package/dist/__tests__/daemon-reconcile-ask.test.d.ts +0 -2
  28. package/dist/__tests__/daemon-reconcile-ask.test.d.ts.map +0 -1
  29. package/dist/__tests__/daemon-reconcile-ask.test.js +0 -86
  30. package/dist/__tests__/daemon-reconcile-ask.test.js.map +0 -1
  31. package/dist/__tests__/daemon-socket.integration.test.d.ts +0 -2
  32. package/dist/__tests__/daemon-socket.integration.test.d.ts.map +0 -1
  33. package/dist/__tests__/daemon-socket.integration.test.js +0 -450
  34. package/dist/__tests__/daemon-socket.integration.test.js.map +0 -1
  35. package/dist/__tests__/daemon.test.d.ts +0 -2
  36. package/dist/__tests__/daemon.test.d.ts.map +0 -1
  37. package/dist/__tests__/daemon.test.js +0 -3975
  38. package/dist/__tests__/daemon.test.js.map +0 -1
  39. package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts +0 -2
  40. package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts.map +0 -1
  41. package/dist/__tests__/ensure-shared-checkout-branch.test.js +0 -129
  42. package/dist/__tests__/ensure-shared-checkout-branch.test.js.map +0 -1
  43. package/dist/__tests__/event-outbox-persist-failure.test.d.ts +0 -2
  44. package/dist/__tests__/event-outbox-persist-failure.test.d.ts.map +0 -1
  45. package/dist/__tests__/event-outbox-persist-failure.test.js +0 -84
  46. package/dist/__tests__/event-outbox-persist-failure.test.js.map +0 -1
  47. package/dist/__tests__/event-outbox.test.d.ts +0 -2
  48. package/dist/__tests__/event-outbox.test.d.ts.map +0 -1
  49. package/dist/__tests__/event-outbox.test.js +0 -256
  50. package/dist/__tests__/event-outbox.test.js.map +0 -1
  51. package/dist/__tests__/fake-provider-cli.test.d.ts +0 -2
  52. package/dist/__tests__/fake-provider-cli.test.d.ts.map +0 -1
  53. package/dist/__tests__/fake-provider-cli.test.js +0 -46
  54. package/dist/__tests__/fake-provider-cli.test.js.map +0 -1
  55. package/dist/__tests__/generated-images.test.d.ts +0 -2
  56. package/dist/__tests__/generated-images.test.d.ts.map +0 -1
  57. package/dist/__tests__/generated-images.test.js +0 -132
  58. package/dist/__tests__/generated-images.test.js.map +0 -1
  59. package/dist/__tests__/lifecycle-logger.test.d.ts +0 -2
  60. package/dist/__tests__/lifecycle-logger.test.d.ts.map +0 -1
  61. package/dist/__tests__/lifecycle-logger.test.js +0 -49
  62. package/dist/__tests__/lifecycle-logger.test.js.map +0 -1
  63. package/dist/__tests__/local-skill-scan.test.d.ts +0 -2
  64. package/dist/__tests__/local-skill-scan.test.d.ts.map +0 -1
  65. package/dist/__tests__/local-skill-scan.test.js +0 -91
  66. package/dist/__tests__/local-skill-scan.test.js.map +0 -1
  67. package/dist/__tests__/local-workspace-migration.test.d.ts +0 -2
  68. package/dist/__tests__/local-workspace-migration.test.d.ts.map +0 -1
  69. package/dist/__tests__/local-workspace-migration.test.js +0 -195
  70. package/dist/__tests__/local-workspace-migration.test.js.map +0 -1
  71. package/dist/__tests__/mcp-inspect-timeout.test.d.ts +0 -2
  72. package/dist/__tests__/mcp-inspect-timeout.test.d.ts.map +0 -1
  73. package/dist/__tests__/mcp-inspect-timeout.test.js +0 -97
  74. package/dist/__tests__/mcp-inspect-timeout.test.js.map +0 -1
  75. package/dist/__tests__/mcp-readiness.test.d.ts +0 -2
  76. package/dist/__tests__/mcp-readiness.test.d.ts.map +0 -1
  77. package/dist/__tests__/mcp-readiness.test.js +0 -267
  78. package/dist/__tests__/mcp-readiness.test.js.map +0 -1
  79. package/dist/__tests__/mcp-registration-cli.test.d.ts +0 -2
  80. package/dist/__tests__/mcp-registration-cli.test.d.ts.map +0 -1
  81. package/dist/__tests__/mcp-registration-cli.test.js +0 -71
  82. package/dist/__tests__/mcp-registration-cli.test.js.map +0 -1
  83. package/dist/__tests__/mcp-registration.test.d.ts +0 -2
  84. package/dist/__tests__/mcp-registration.test.d.ts.map +0 -1
  85. package/dist/__tests__/mcp-registration.test.js +0 -426
  86. package/dist/__tests__/mcp-registration.test.js.map +0 -1
  87. package/dist/__tests__/model-scan-runner.test.d.ts +0 -2
  88. package/dist/__tests__/model-scan-runner.test.d.ts.map +0 -1
  89. package/dist/__tests__/model-scan-runner.test.js +0 -67
  90. package/dist/__tests__/model-scan-runner.test.js.map +0 -1
  91. package/dist/__tests__/network-diagnostics.test.d.ts +0 -2
  92. package/dist/__tests__/network-diagnostics.test.d.ts.map +0 -1
  93. package/dist/__tests__/network-diagnostics.test.js +0 -26
  94. package/dist/__tests__/network-diagnostics.test.js.map +0 -1
  95. package/dist/__tests__/observable-map.test.d.ts +0 -2
  96. package/dist/__tests__/observable-map.test.d.ts.map +0 -1
  97. package/dist/__tests__/observable-map.test.js +0 -54
  98. package/dist/__tests__/observable-map.test.js.map +0 -1
  99. package/dist/__tests__/provider-auth-preflight.test.d.ts +0 -2
  100. package/dist/__tests__/provider-auth-preflight.test.d.ts.map +0 -1
  101. package/dist/__tests__/provider-auth-preflight.test.js +0 -123
  102. package/dist/__tests__/provider-auth-preflight.test.js.map +0 -1
  103. package/dist/__tests__/provider-model-discovery.test.d.ts +0 -2
  104. package/dist/__tests__/provider-model-discovery.test.d.ts.map +0 -1
  105. package/dist/__tests__/provider-model-discovery.test.js +0 -472
  106. package/dist/__tests__/provider-model-discovery.test.js.map +0 -1
  107. package/dist/__tests__/remove-worktrees-if-clean.test.d.ts +0 -2
  108. package/dist/__tests__/remove-worktrees-if-clean.test.d.ts.map +0 -1
  109. package/dist/__tests__/remove-worktrees-if-clean.test.js +0 -221
  110. package/dist/__tests__/remove-worktrees-if-clean.test.js.map +0 -1
  111. package/dist/__tests__/resume-fallback-env.test.d.ts +0 -2
  112. package/dist/__tests__/resume-fallback-env.test.d.ts.map +0 -1
  113. package/dist/__tests__/resume-fallback-env.test.js +0 -28
  114. package/dist/__tests__/resume-fallback-env.test.js.map +0 -1
  115. package/dist/__tests__/run-journal.test.d.ts +0 -2
  116. package/dist/__tests__/run-journal.test.d.ts.map +0 -1
  117. package/dist/__tests__/run-journal.test.js +0 -121
  118. package/dist/__tests__/run-journal.test.js.map +0 -1
  119. package/dist/__tests__/run-start-gate.test.d.ts +0 -2
  120. package/dist/__tests__/run-start-gate.test.d.ts.map +0 -1
  121. package/dist/__tests__/run-start-gate.test.js +0 -29
  122. package/dist/__tests__/run-start-gate.test.js.map +0 -1
  123. package/dist/__tests__/runtime-capabilities-sync.test.d.ts +0 -2
  124. package/dist/__tests__/runtime-capabilities-sync.test.d.ts.map +0 -1
  125. package/dist/__tests__/runtime-capabilities-sync.test.js +0 -66
  126. package/dist/__tests__/runtime-capabilities-sync.test.js.map +0 -1
  127. package/dist/__tests__/runtime-config.test.d.ts +0 -2
  128. package/dist/__tests__/runtime-config.test.d.ts.map +0 -1
  129. package/dist/__tests__/runtime-config.test.js +0 -102
  130. package/dist/__tests__/runtime-config.test.js.map +0 -1
  131. package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts +0 -2
  132. package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts.map +0 -1
  133. package/dist/__tests__/runtime-presenter-heartbeat.test.js +0 -159
  134. package/dist/__tests__/runtime-presenter-heartbeat.test.js.map +0 -1
  135. package/dist/__tests__/sandbox-outbox.test.d.ts +0 -2
  136. package/dist/__tests__/sandbox-outbox.test.d.ts.map +0 -1
  137. package/dist/__tests__/sandbox-outbox.test.js +0 -214
  138. package/dist/__tests__/sandbox-outbox.test.js.map +0 -1
  139. package/dist/__tests__/sandbox-workflow-context.test.d.ts +0 -2
  140. package/dist/__tests__/sandbox-workflow-context.test.d.ts.map +0 -1
  141. package/dist/__tests__/sandbox-workflow-context.test.js +0 -396
  142. package/dist/__tests__/sandbox-workflow-context.test.js.map +0 -1
  143. package/dist/__tests__/service-manager.test.d.ts +0 -2
  144. package/dist/__tests__/service-manager.test.d.ts.map +0 -1
  145. package/dist/__tests__/service-manager.test.js +0 -50
  146. package/dist/__tests__/service-manager.test.js.map +0 -1
  147. package/dist/__tests__/sleep-inhibitor.test.d.ts +0 -2
  148. package/dist/__tests__/sleep-inhibitor.test.d.ts.map +0 -1
  149. package/dist/__tests__/sleep-inhibitor.test.js +0 -236
  150. package/dist/__tests__/sleep-inhibitor.test.js.map +0 -1
  151. package/dist/__tests__/status-local-workspace.test.d.ts +0 -2
  152. package/dist/__tests__/status-local-workspace.test.d.ts.map +0 -1
  153. package/dist/__tests__/status-local-workspace.test.js +0 -121
  154. package/dist/__tests__/status-local-workspace.test.js.map +0 -1
  155. package/dist/__tests__/suspension-detector.test.d.ts +0 -2
  156. package/dist/__tests__/suspension-detector.test.d.ts.map +0 -1
  157. package/dist/__tests__/suspension-detector.test.js +0 -112
  158. package/dist/__tests__/suspension-detector.test.js.map +0 -1
  159. package/dist/__tests__/web-presenter-parent-events.test.d.ts +0 -2
  160. package/dist/__tests__/web-presenter-parent-events.test.d.ts.map +0 -1
  161. package/dist/__tests__/web-presenter-parent-events.test.js +0 -130
  162. package/dist/__tests__/web-presenter-parent-events.test.js.map +0 -1
  163. package/dist/__tests__/workspace-relocation.test.d.ts +0 -2
  164. package/dist/__tests__/workspace-relocation.test.d.ts.map +0 -1
  165. package/dist/__tests__/workspace-relocation.test.js +0 -66
  166. package/dist/__tests__/workspace-relocation.test.js.map +0 -1
  167. package/dist/__tests__/workspace-run-lease.test.d.ts +0 -2
  168. package/dist/__tests__/workspace-run-lease.test.d.ts.map +0 -1
  169. package/dist/__tests__/workspace-run-lease.test.js +0 -230
  170. package/dist/__tests__/workspace-run-lease.test.js.map +0 -1
  171. package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts +0 -2
  172. package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts.map +0 -1
  173. package/dist/__tests__/ws-client-heartbeat-volatile.test.js +0 -61
  174. package/dist/__tests__/ws-client-heartbeat-volatile.test.js.map +0 -1
  175. package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts +0 -2
  176. package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts.map +0 -1
  177. package/dist/__tests__/ws-client-heartbeat.integration.test.js +0 -109
  178. package/dist/__tests__/ws-client-heartbeat.integration.test.js.map +0 -1
  179. package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts +0 -2
  180. package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts.map +0 -1
  181. package/dist/__tests__/ws-client-user-message-ack.integration.test.js +0 -167
  182. package/dist/__tests__/ws-client-user-message-ack.integration.test.js.map +0 -1
  183. package/dist/aiden-system-prompt.d.ts +0 -6
  184. package/dist/aiden-system-prompt.d.ts.map +0 -1
  185. package/dist/aiden-system-prompt.js +0 -6
  186. package/dist/aiden-system-prompt.js.map +0 -1
  187. package/dist/binding-switch-git.d.ts +0 -26
  188. package/dist/binding-switch-git.d.ts.map +0 -1
  189. package/dist/binding-switch-git.js +0 -973
  190. package/dist/binding-switch-git.js.map +0 -1
  191. package/dist/cli-ensure-install.d.ts +0 -39
  192. package/dist/cli-ensure-install.d.ts.map +0 -1
  193. package/dist/cli-ensure-install.js +0 -133
  194. package/dist/cli-ensure-install.js.map +0 -1
  195. package/dist/cli-executable.d.ts +0 -97
  196. package/dist/cli-executable.d.ts.map +0 -1
  197. package/dist/cli-executable.js +0 -432
  198. package/dist/cli-executable.js.map +0 -1
  199. package/dist/cli-help.d.ts +0 -7
  200. package/dist/cli-help.d.ts.map +0 -1
  201. package/dist/cli-help.js +0 -49
  202. package/dist/cli-help.js.map +0 -1
  203. package/dist/computer-readiness.d.ts +0 -42
  204. package/dist/computer-readiness.d.ts.map +0 -1
  205. package/dist/computer-readiness.js +0 -191
  206. package/dist/computer-readiness.js.map +0 -1
  207. package/dist/core-agent.d.ts +0 -47
  208. package/dist/core-agent.d.ts.map +0 -1
  209. package/dist/core-agent.js +0 -364
  210. package/dist/core-agent.js.map +0 -1
  211. package/dist/daemon.d.ts +0 -392
  212. package/dist/daemon.d.ts.map +0 -1
  213. package/dist/daemon.js +0 -4711
  214. package/dist/daemon.js.map +0 -1
  215. package/dist/event-outbox.d.ts +0 -83
  216. package/dist/event-outbox.d.ts.map +0 -1
  217. package/dist/event-outbox.js +0 -440
  218. package/dist/event-outbox.js.map +0 -1
  219. package/dist/fake-provider-cli.d.ts +0 -13
  220. package/dist/fake-provider-cli.d.ts.map +0 -1
  221. package/dist/fake-provider-cli.js +0 -53
  222. package/dist/fake-provider-cli.js.map +0 -1
  223. package/dist/generated-images.d.ts +0 -2
  224. package/dist/generated-images.d.ts.map +0 -1
  225. package/dist/generated-images.js +0 -2
  226. package/dist/generated-images.js.map +0 -1
  227. package/dist/index.d.ts +0 -6
  228. package/dist/index.d.ts.map +0 -1
  229. package/dist/index.js +0 -209
  230. package/dist/index.js.map +0 -1
  231. package/dist/lifecycle-logger.d.ts +0 -25
  232. package/dist/lifecycle-logger.d.ts.map +0 -1
  233. package/dist/lifecycle-logger.js +0 -73
  234. package/dist/lifecycle-logger.js.map +0 -1
  235. package/dist/local-skill-scan.d.ts +0 -21
  236. package/dist/local-skill-scan.d.ts.map +0 -1
  237. package/dist/local-skill-scan.js +0 -109
  238. package/dist/local-skill-scan.js.map +0 -1
  239. package/dist/local-workspace-migration.d.ts +0 -68
  240. package/dist/local-workspace-migration.d.ts.map +0 -1
  241. package/dist/local-workspace-migration.js +0 -157
  242. package/dist/local-workspace-migration.js.map +0 -1
  243. package/dist/mcp-readiness.d.ts +0 -59
  244. package/dist/mcp-readiness.d.ts.map +0 -1
  245. package/dist/mcp-readiness.js +0 -202
  246. package/dist/mcp-readiness.js.map +0 -1
  247. package/dist/mcp-registration.d.ts +0 -75
  248. package/dist/mcp-registration.d.ts.map +0 -1
  249. package/dist/mcp-registration.js +0 -563
  250. package/dist/mcp-registration.js.map +0 -1
  251. package/dist/model-scan-runner.d.ts +0 -15
  252. package/dist/model-scan-runner.d.ts.map +0 -1
  253. package/dist/model-scan-runner.js +0 -51
  254. package/dist/model-scan-runner.js.map +0 -1
  255. package/dist/network-diagnostics.d.ts +0 -8
  256. package/dist/network-diagnostics.d.ts.map +0 -1
  257. package/dist/network-diagnostics.js +0 -56
  258. package/dist/network-diagnostics.js.map +0 -1
  259. package/dist/observable-map.d.ts +0 -25
  260. package/dist/observable-map.d.ts.map +0 -1
  261. package/dist/observable-map.js +0 -42
  262. package/dist/observable-map.js.map +0 -1
  263. package/dist/provider-auth-preflight.d.ts +0 -22
  264. package/dist/provider-auth-preflight.d.ts.map +0 -1
  265. package/dist/provider-auth-preflight.js +0 -110
  266. package/dist/provider-auth-preflight.js.map +0 -1
  267. package/dist/provider-model-discovery.d.ts +0 -38
  268. package/dist/provider-model-discovery.d.ts.map +0 -1
  269. package/dist/provider-model-discovery.js +0 -519
  270. package/dist/provider-model-discovery.js.map +0 -1
  271. package/dist/resume-fallback-env.d.ts +0 -20
  272. package/dist/resume-fallback-env.d.ts.map +0 -1
  273. package/dist/resume-fallback-env.js +0 -30
  274. package/dist/resume-fallback-env.js.map +0 -1
  275. package/dist/run-journal.d.ts +0 -53
  276. package/dist/run-journal.d.ts.map +0 -1
  277. package/dist/run-journal.js +0 -193
  278. package/dist/run-journal.js.map +0 -1
  279. package/dist/run-start-gate.d.ts +0 -9
  280. package/dist/run-start-gate.d.ts.map +0 -1
  281. package/dist/run-start-gate.js +0 -24
  282. package/dist/run-start-gate.js.map +0 -1
  283. package/dist/runtime-backends.d.ts +0 -2
  284. package/dist/runtime-backends.d.ts.map +0 -1
  285. package/dist/runtime-backends.js +0 -2
  286. package/dist/runtime-backends.js.map +0 -1
  287. package/dist/runtime-capabilities-sync.d.ts +0 -33
  288. package/dist/runtime-capabilities-sync.d.ts.map +0 -1
  289. package/dist/runtime-capabilities-sync.js +0 -56
  290. package/dist/runtime-capabilities-sync.js.map +0 -1
  291. package/dist/runtime-config.d.ts +0 -24
  292. package/dist/runtime-config.d.ts.map +0 -1
  293. package/dist/runtime-config.js +0 -124
  294. package/dist/runtime-config.js.map +0 -1
  295. package/dist/sandbox-outbox.d.ts +0 -122
  296. package/dist/sandbox-outbox.d.ts.map +0 -1
  297. package/dist/sandbox-outbox.js +0 -180
  298. package/dist/sandbox-outbox.js.map +0 -1
  299. package/dist/sandbox.d.ts +0 -44
  300. package/dist/sandbox.d.ts.map +0 -1
  301. package/dist/sandbox.js +0 -438
  302. package/dist/sandbox.js.map +0 -1
  303. package/dist/service-manager.d.ts +0 -28
  304. package/dist/service-manager.d.ts.map +0 -1
  305. package/dist/service-manager.js +0 -259
  306. package/dist/service-manager.js.map +0 -1
  307. package/dist/sleep-inhibitor.d.ts +0 -111
  308. package/dist/sleep-inhibitor.d.ts.map +0 -1
  309. package/dist/sleep-inhibitor.js +0 -412
  310. package/dist/sleep-inhibitor.js.map +0 -1
  311. package/dist/suspension-detector.d.ts +0 -48
  312. package/dist/suspension-detector.d.ts.map +0 -1
  313. package/dist/suspension-detector.js +0 -89
  314. package/dist/suspension-detector.js.map +0 -1
  315. package/dist/types.d.ts +0 -6
  316. package/dist/types.d.ts.map +0 -1
  317. package/dist/types.js +0 -6
  318. package/dist/types.js.map +0 -1
  319. package/dist/updater.d.ts +0 -15
  320. package/dist/updater.d.ts.map +0 -1
  321. package/dist/updater.js +0 -50
  322. package/dist/updater.js.map +0 -1
  323. package/dist/version.d.ts +0 -2
  324. package/dist/version.d.ts.map +0 -1
  325. package/dist/version.js +0 -2
  326. package/dist/version.js.map +0 -1
  327. package/dist/web-presenter.d.ts +0 -55
  328. package/dist/web-presenter.d.ts.map +0 -1
  329. package/dist/web-presenter.js +0 -265
  330. package/dist/web-presenter.js.map +0 -1
  331. package/dist/workspace-relocation.d.ts +0 -22
  332. package/dist/workspace-relocation.d.ts.map +0 -1
  333. package/dist/workspace-relocation.js +0 -90
  334. package/dist/workspace-relocation.js.map +0 -1
  335. package/dist/workspace-run-lease.d.ts +0 -97
  336. package/dist/workspace-run-lease.d.ts.map +0 -1
  337. package/dist/workspace-run-lease.js +0 -241
  338. package/dist/workspace-run-lease.js.map +0 -1
  339. package/dist/ws-client.d.ts +0 -194
  340. package/dist/ws-client.d.ts.map +0 -1
  341. package/dist/ws-client.js +0 -282
  342. package/dist/ws-client.js.map +0 -1
package/dist/ws-client.js DELETED
@@ -1,282 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import { AGENT_HEARTBEAT_INTERVAL_MS, AGENT_LIVENESS_PROTOCOL_VERSION, } from "@alan-ai/shared/agent-liveness";
3
- import { io } from "socket.io-client";
4
- import { isSandboxEventOutboxEnabled, SandboxEventDispatcher, } from "./sandbox-outbox.js";
5
- /**
6
- * Cap on the recently-accepted `messageId` cache (see
7
- * {@link WSClient.acceptedMessageIds}). Sized well above the server's max
8
- * redelivery attempts for a single send (5, see `MAX_REDELIVERY_ATTEMPTS` in
9
- * `apps/api/src/ws-server/handlers/dispatch.ts`) — this only needs to outlive
10
- * one send's redelivery window, not the whole session.
11
- */
12
- const ACCEPTED_MESSAGE_ID_CACHE_SIZE = 200;
13
- export class WSClient {
14
- lifecycle;
15
- socket;
16
- /** Stable id for this agent process; fences stale heartbeats server-side. */
17
- agentSessionId = randomUUID();
18
- /** Monotonic heartbeat sequence — advances on every hello + heartbeat. */
19
- heartbeatSeq = 0;
20
- heartbeatTimer = null;
21
- agentVersion;
22
- getRunState;
23
- /**
24
- * Durable at-least-once delivery for stream events. Active only when
25
- * `ALAN_EVENT_OUTBOX_ENABLED === "true"`; otherwise events are fired-and-
26
- * forgotten exactly as before (see {@link SandboxEventDispatcher}).
27
- */
28
- eventDispatcher;
29
- /**
30
- * Bounded record of `messageId`s whose handoff to `onUserMessage` already
31
- * completed successfully. A redelivered `user_message` for one of these ids
32
- * (e.g. the original `ok:true` ack was lost in transit and the server's
33
- * ≤5-attempt redelivery re-armed the run) is re-acked `{ ok: true }`
34
- * without invoking the handler again, so the message is never processed
35
- * twice. A `Set`'s insertion order doubles as recency, so eviction is just
36
- * "drop the oldest key" — a minimal LRU without extra bookkeeping.
37
- */
38
- acceptedMessageIds = new Set();
39
- constructor(wsUrl, sessionId, // conversationId
40
- taskId, token, // sandboxSessionToken
41
- callbacks, agentVersion, lifecycle) {
42
- this.lifecycle = lifecycle;
43
- this.lifecycle?.info("sandbox_agent_ws_socket_create", { wsUrl });
44
- this.agentVersion = agentVersion ?? "";
45
- this.getRunState = callbacks.getRunState;
46
- this.socket = io(wsUrl, {
47
- query: { type: "agent", sessionId, taskId, agentVersion: agentVersion ?? "" },
48
- auth: { token },
49
- transports: ["websocket"],
50
- reconnection: true,
51
- reconnectionAttempts: Infinity,
52
- reconnectionDelay: 1000,
53
- reconnectionDelayMax: 5000,
54
- timeout: 20_000,
55
- upgrade: false,
56
- extraHeaders: { "ngrok-skip-browser-warning": "1" },
57
- });
58
- const outboxEnabled = isSandboxEventOutboxEnabled();
59
- this.eventDispatcher = new SandboxEventDispatcher({
60
- conversationId: sessionId,
61
- sessionToken: token,
62
- enabled: outboxEnabled,
63
- socket: this.socket,
64
- pushLog: (message) => this.lifecycle?.info("sandbox_agent_event_outbox", { detail: message }),
65
- onInitError: (error) => this.lifecycle?.warn("sandbox_agent_event_outbox_init_failed", {
66
- error: error instanceof Error ? error : new Error(String(error)),
67
- }),
68
- });
69
- if (this.eventDispatcher.active) {
70
- this.lifecycle?.info("sandbox_agent_event_outbox_enabled", { conversationId: sessionId });
71
- }
72
- this.setupListeners(callbacks);
73
- }
74
- /** Record a successfully-handed-off messageId, evicting the oldest entry past the cap. */
75
- rememberAcceptedMessageId(messageId) {
76
- this.acceptedMessageIds.delete(messageId);
77
- this.acceptedMessageIds.add(messageId);
78
- if (this.acceptedMessageIds.size > ACCEPTED_MESSAGE_ID_CACHE_SIZE) {
79
- const oldest = this.acceptedMessageIds.keys().next().value;
80
- if (oldest !== undefined)
81
- this.acceptedMessageIds.delete(oldest);
82
- }
83
- }
84
- /**
85
- * Record the run id for events emitted from here on, so the durable outbox can
86
- * bucket per-run caps and terminal-event condensation correctly. No-op when the
87
- * outbox is disabled.
88
- */
89
- setCurrentRunId(runId) {
90
- this.eventDispatcher.setRunId(runId);
91
- }
92
- currentRunState() {
93
- try {
94
- return this.getRunState?.() ?? { idle: true, activeRunIds: [] };
95
- }
96
- catch {
97
- return { idle: true, activeRunIds: [] };
98
- }
99
- }
100
- buildHeartbeat() {
101
- this.heartbeatSeq += 1;
102
- return {
103
- agentSessionId: this.agentSessionId,
104
- seq: this.heartbeatSeq,
105
- protocolVersion: AGENT_LIVENESS_PROTOCOL_VERSION,
106
- runState: this.currentRunState(),
107
- agentVersion: this.agentVersion || undefined,
108
- };
109
- }
110
- /** Emit `agent.hello` on (re)connect and (re)start the heartbeat interval. */
111
- startHeartbeat() {
112
- if (this.socket.connected) {
113
- // `hello` establishes the protocol marker on (re)connect — send it reliably.
114
- this.socket.emit("agent.hello", this.buildHeartbeat());
115
- }
116
- if (this.heartbeatTimer)
117
- clearInterval(this.heartbeatTimer);
118
- this.heartbeatTimer = setInterval(() => {
119
- if (!this.socket.connected)
120
- return;
121
- // Periodic heartbeats are emitted `volatile`: on a slow uplink a large
122
- // `agent_event` can occupy the engine.io write buffer for seconds, and a
123
- // reliable heartbeat queued behind it would pile up N deep and arrive as a
124
- // stale burst. Volatile drops the heartbeat rather than buffering it when
125
- // the transport is not ready, so it never head-of-line-stacks behind bulk
126
- // payloads — and a dropped heartbeat is harmless: the large frame's own
127
- // arrival is liveness evidence server-side, and the next beat is ~15s away.
128
- this.socket.volatile.emit("agent.heartbeat", this.buildHeartbeat());
129
- }, AGENT_HEARTBEAT_INTERVAL_MS);
130
- this.heartbeatTimer.unref?.();
131
- }
132
- stopHeartbeat() {
133
- if (this.heartbeatTimer) {
134
- clearInterval(this.heartbeatTimer);
135
- this.heartbeatTimer = null;
136
- }
137
- }
138
- emitEvent(event) {
139
- this.eventDispatcher.emit(event, (payload) => {
140
- this.socket.emit("agent_event", payload);
141
- });
142
- }
143
- waitForConnection(timeoutMs = 15000) {
144
- return new Promise((resolve, reject) => {
145
- if (this.socket.connected) {
146
- resolve();
147
- return;
148
- }
149
- const timeout = setTimeout(() => reject(new Error(`WSClient connection timeout after ${timeoutMs}ms`)), timeoutMs);
150
- this.socket.once("connect", () => {
151
- clearTimeout(timeout);
152
- resolve();
153
- });
154
- this.socket.once("connect_error", (err) => {
155
- clearTimeout(timeout);
156
- reject(new Error(`WSClient connection failed: ${err.message}`));
157
- });
158
- });
159
- }
160
- get connected() {
161
- return this.socket.connected;
162
- }
163
- setLifecycleContext(context) {
164
- this.lifecycle?.setContext(context);
165
- }
166
- close() {
167
- this.lifecycle?.info("sandbox_agent_ws_close_requested");
168
- this.stopHeartbeat();
169
- this.socket.disconnect();
170
- }
171
- setupListeners(callbacks) {
172
- this.socket.on("connect", () => {
173
- this.lifecycle?.info("sandbox_agent_ws_socket_connected", { socketId: this.socket.id });
174
- // Announce liveness immediately on every (re)connect so the server can
175
- // distinguish a genuinely-live agent from a frozen zombie socket.
176
- this.startHeartbeat();
177
- // Replay any events that were spooled while the socket was down, in order,
178
- // before new events are emitted (no-op when the outbox is disabled).
179
- this.eventDispatcher.flush();
180
- callbacks.onConnect?.();
181
- });
182
- this.socket.on("disconnect", (reason) => {
183
- this.lifecycle?.info("sandbox_agent_ws_socket_disconnected", { reason });
184
- this.stopHeartbeat();
185
- // Drop in-flight/ack timers so the next connect replays from the queue head.
186
- this.eventDispatcher.disconnect();
187
- callbacks.onDisconnect?.(reason);
188
- });
189
- // Server-initiated liveness probe (marginal heartbeat freshness). A frozen
190
- // sandbox VM cannot run this handler, so a missing ack tells the server to
191
- // route the run to the wake path instead of a dead socket.
192
- this.socket.on("agent.probe", (_data, ack) => {
193
- ack?.({
194
- agentSessionId: this.agentSessionId,
195
- seq: this.heartbeatSeq,
196
- protocolVersion: AGENT_LIVENESS_PROTOCOL_VERSION,
197
- });
198
- });
199
- this.socket.on("connect_error", (error) => {
200
- this.lifecycle?.warn("sandbox_agent_ws_socket_connect_error", {
201
- error: error instanceof Error ? error : new Error(String(error)),
202
- });
203
- });
204
- this.socket.on("user_message", (data, ack) => {
205
- // Redelivery of a message this agent already durably accepted — e.g. the
206
- // original ok:true ack was lost in transit and the server's redelivery
207
- // logic re-armed the run and resent the same messageId. Ack ok without
208
- // re-invoking the handler so the message is never processed twice.
209
- if (data.messageId && this.acceptedMessageIds.has(data.messageId)) {
210
- ack?.({ ok: true });
211
- return;
212
- }
213
- const payload = {
214
- text: data.text,
215
- images: data.images,
216
- files: data.files,
217
- providerSessionId: data.providerSessionId,
218
- resumeFallbackContext: data.resumeFallbackContext,
219
- backendKind: data.backendKind,
220
- agentId: data.agentId,
221
- agentPrompt: data.agentPrompt,
222
- selectedModel: data.selectedModel,
223
- selectedContextWindow: data.selectedContextWindow,
224
- selectedEffortLevel: data.selectedEffortLevel,
225
- mode: data.mode,
226
- taskMeta: data.taskMeta,
227
- prMeta: data.prMeta,
228
- workflowTools: data.workflowTools,
229
- alanMcp: data.alanMcp,
230
- runId: data.runId,
231
- messageId: data.messageId,
232
- maxIterations: data.maxIterations,
233
- taskId: data.taskId,
234
- cloudEnvironmentId: data.cloudEnvironmentId,
235
- conversationId: data.conversationId,
236
- teamId: data.teamId,
237
- currentUser: data.currentUser,
238
- };
239
- const acceptDelivery = () => {
240
- if (data.messageId)
241
- this.rememberAcceptedMessageId(data.messageId);
242
- ack?.({ ok: true });
243
- };
244
- const rejectDelivery = (error) => {
245
- ack?.({ ok: false, message: error instanceof Error ? error.message : String(error) });
246
- };
247
- // Ack only once the handoff is durably accepted (the handler returned
248
- // or its promise resolved), not immediately on receipt. Acking first
249
- // would tell the server the message was delivered even if the handler
250
- // then threw or the process died before the message actually reached
251
- // the run loop — the server never redelivers on an ok ack, so an
252
- // early ack risks silently losing the message.
253
- try {
254
- const result = callbacks.onUserMessage(payload);
255
- if (result instanceof Promise) {
256
- result.then(acceptDelivery, rejectDelivery);
257
- }
258
- else {
259
- acceptDelivery();
260
- }
261
- }
262
- catch (error) {
263
- rejectDelivery(error);
264
- }
265
- });
266
- this.socket.on("stop", () => {
267
- callbacks.onStop();
268
- });
269
- this.socket.on("tool_response", (data) => {
270
- if (data?.toolId && typeof data.response === "string") {
271
- callbacks.onToolResponse?.(data.toolId, data.response);
272
- }
273
- });
274
- this.socket.on("error", (data) => {
275
- this.lifecycle?.error("sandbox_agent_ws_server_error", {
276
- message: data.message,
277
- code: data.code,
278
- });
279
- });
280
- }
281
- }
282
- //# sourceMappingURL=ws-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ws-client.js","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"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"}