@aiden-ade/sandbox-agent 0.1.60 → 0.1.62

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 +465 -342
  2. package/package.json +1 -1
  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
@@ -1,193 +0,0 @@
1
- import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
2
- import { dirname } from "node:path";
3
- const JOURNAL_VERSION = 1;
4
- const INTERRUPTED_ENTRY_TTL_MS = 24 * 60 * 60_000;
5
- function isEntry(value) {
6
- if (!value || typeof value !== "object")
7
- return false;
8
- const entry = value;
9
- const baseValid = typeof entry.runId === "string" &&
10
- entry.runId.length > 0 &&
11
- typeof entry.conversationId === "string" &&
12
- entry.conversationId.length > 0 &&
13
- typeof entry.acceptedAtMs === "number" &&
14
- Number.isFinite(entry.acceptedAtMs);
15
- if (!baseValid)
16
- return false;
17
- const hasProviderPid = entry.providerPid !== undefined;
18
- const hasProviderSpawnedAt = entry.providerSpawnedAtMs !== undefined;
19
- if (hasProviderPid !== hasProviderSpawnedAt)
20
- return false;
21
- const interruptionValid = entry.interruptedAtMs === undefined ||
22
- (typeof entry.interruptedAtMs === "number" && Number.isFinite(entry.interruptedAtMs));
23
- if (!hasProviderPid)
24
- return interruptionValid;
25
- const providerEvidenceValid = Number.isSafeInteger(entry.providerPid) &&
26
- entry.providerPid > 0 &&
27
- typeof entry.providerSpawnedAtMs === "number" &&
28
- Number.isFinite(entry.providerSpawnedAtMs);
29
- return providerEvidenceValid && interruptionValid;
30
- }
31
- /**
32
- * Durable accepted-run inbox. It stores identifiers only—never prompts, tool
33
- * payloads, credentials, or provider output—and is persisted before the daemon
34
- * acknowledges acceptance so a restart cannot turn redelivery into a second run.
35
- */
36
- export class RuntimeRunJournal {
37
- path;
38
- entries = new Map();
39
- recoveredIds = new Set();
40
- recoveryPersistencePending = false;
41
- constructor(path, nowMs = Date.now()) {
42
- this.path = path;
43
- if (!existsSync(path))
44
- return;
45
- try {
46
- const parsed = JSON.parse(readFileSync(path, "utf8"));
47
- if (parsed.version !== JOURNAL_VERSION || !Array.isArray(parsed.entries)) {
48
- throw new Error("unsupported run journal format");
49
- }
50
- for (const entry of parsed.entries) {
51
- if (!isEntry(entry))
52
- throw new Error("invalid run journal entry");
53
- if (entry.interruptedAtMs !== undefined &&
54
- nowMs - entry.interruptedAtMs > INTERRUPTED_ENTRY_TTL_MS) {
55
- this.recoveryPersistencePending = true;
56
- continue;
57
- }
58
- this.entries.set(entry.runId, entry);
59
- }
60
- }
61
- catch (error) {
62
- throw new Error(`Cannot safely read accepted-run journal: ${error instanceof Error ? error.message : String(error)}`);
63
- }
64
- }
65
- get(runId) {
66
- return this.entries.get(runId);
67
- }
68
- recoveredRunIds() {
69
- return [...this.recoveredIds];
70
- }
71
- /**
72
- * Mark entries from an earlier daemon as interrupted only after this process
73
- * has proved exclusive ownership of the config's local API endpoint.
74
- */
75
- confirmRecoveryOwnership(nowMs = Date.now()) {
76
- const previousEntries = new Map(this.entries);
77
- const previousRecoveredIds = new Set(this.recoveredIds);
78
- const persistenceWasPending = this.recoveryPersistencePending;
79
- let changed = persistenceWasPending;
80
- try {
81
- for (const [runId, entry] of this.entries) {
82
- this.recoveredIds.add(runId);
83
- if (entry.interruptedAtMs !== undefined)
84
- continue;
85
- this.entries.set(runId, { ...entry, interruptedAtMs: nowMs });
86
- changed = true;
87
- }
88
- if (changed)
89
- this.persist();
90
- this.recoveryPersistencePending = false;
91
- }
92
- catch (error) {
93
- this.entries.clear();
94
- for (const [runId, entry] of previousEntries)
95
- this.entries.set(runId, entry);
96
- this.recoveredIds.clear();
97
- for (const runId of previousRecoveredIds)
98
- this.recoveredIds.add(runId);
99
- this.recoveryPersistencePending = persistenceWasPending;
100
- throw error;
101
- }
102
- }
103
- record(entry) {
104
- const previous = this.entries.get(entry.runId);
105
- this.entries.set(entry.runId, entry);
106
- try {
107
- this.persist();
108
- }
109
- catch (error) {
110
- if (previous)
111
- this.entries.set(entry.runId, previous);
112
- else
113
- this.entries.delete(entry.runId);
114
- throw error;
115
- }
116
- }
117
- recordProviderSpawned(runId, providerPid, providerSpawnedAtMs) {
118
- const previous = this.entries.get(runId);
119
- if (!previous)
120
- throw new Error(`Cannot attach provider evidence to unknown run ${runId}`);
121
- if (!Number.isSafeInteger(providerPid) || providerPid <= 0) {
122
- throw new Error("Cannot record an invalid provider PID");
123
- }
124
- if (!Number.isFinite(providerSpawnedAtMs)) {
125
- throw new Error("Cannot record an invalid provider spawn time");
126
- }
127
- this.entries.set(runId, { ...previous, providerPid, providerSpawnedAtMs });
128
- try {
129
- this.persist();
130
- }
131
- catch (error) {
132
- this.entries.set(runId, previous);
133
- throw error;
134
- }
135
- }
136
- /**
137
- * A live PID is insufficient for reattachment: operating systems can reuse
138
- * PIDs, and the daemon cannot recover the provider's anonymous stdio pipes.
139
- * Keep the exact interruption outcome until a durable authenticated control
140
- * channel can prove both identity and ownership.
141
- */
142
- assessRecovery(runId, isProcessAlive) {
143
- const entry = this.entries.get(runId);
144
- if (!entry)
145
- return undefined;
146
- if (entry.providerPid === undefined) {
147
- return { reattachable: false, reason: "provider_not_recorded" };
148
- }
149
- if (!isProcessAlive(entry.providerPid)) {
150
- return {
151
- reattachable: false,
152
- reason: "provider_not_running",
153
- providerPid: entry.providerPid,
154
- };
155
- }
156
- return {
157
- reattachable: false,
158
- reason: "provider_identity_unverified",
159
- providerPid: entry.providerPid,
160
- };
161
- }
162
- remove(runId) {
163
- const previous = this.entries.get(runId);
164
- if (!previous)
165
- return;
166
- const wasRecovered = this.recoveredIds.has(runId);
167
- this.entries.delete(runId);
168
- this.recoveredIds.delete(runId);
169
- try {
170
- this.persist();
171
- }
172
- catch (error) {
173
- this.entries.set(runId, previous);
174
- if (wasRecovered)
175
- this.recoveredIds.add(runId);
176
- throw error;
177
- }
178
- }
179
- persist() {
180
- const pendingPath = `${this.path}.pending`;
181
- mkdirSync(dirname(this.path), { recursive: true });
182
- try {
183
- writeFileSync(pendingPath, `${JSON.stringify({ version: JOURNAL_VERSION, entries: [...this.entries.values()] })}\n`, { mode: 0o600 });
184
- chmodSync(pendingPath, 0o600);
185
- renameSync(pendingPath, this.path);
186
- }
187
- catch (error) {
188
- rmSync(pendingPath, { force: true });
189
- throw error;
190
- }
191
- }
192
- }
193
- //# sourceMappingURL=run-journal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-journal.js","sourceRoot":"","sources":["../src/run-journal.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * FIFO mutex for the short global-config-to-provider-spawn critical section.
3
- * Providers may run concurrently after spawn; only startup is serialized.
4
- */
5
- export declare class RunStartGate {
6
- private tail;
7
- acquire(): Promise<() => void>;
8
- }
9
- //# sourceMappingURL=run-start-gate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-start-gate.d.ts","sourceRoot":"","sources":["../src/run-start-gate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAoC;IAE1C,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;CAgBrC"}
@@ -1,24 +0,0 @@
1
- /**
2
- * FIFO mutex for the short global-config-to-provider-spawn critical section.
3
- * Providers may run concurrently after spawn; only startup is serialized.
4
- */
5
- export class RunStartGate {
6
- tail = Promise.resolve();
7
- async acquire() {
8
- const previous = this.tail;
9
- let releaseCurrent;
10
- const current = new Promise((resolve) => {
11
- releaseCurrent = resolve;
12
- });
13
- this.tail = previous.then(() => current);
14
- await previous;
15
- let released = false;
16
- return () => {
17
- if (released)
18
- return;
19
- released = true;
20
- releaseCurrent();
21
- };
22
- }
23
- }
24
- //# sourceMappingURL=run-start-gate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-start-gate.js","sourceRoot":"","sources":["../src/run-start-gate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,YAAY;IACf,IAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEhD,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,cAA2B,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC5C,cAAc,GAAG,OAAO,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,QAAQ,CAAC;QAEf,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC;CACF"}
@@ -1,2 +0,0 @@
1
- export * from "@alan-ai/agent-core";
2
- //# sourceMappingURL=runtime-backends.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-backends.d.ts","sourceRoot":"","sources":["../src/runtime-backends.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -1,2 +0,0 @@
1
- export * from "@alan-ai/agent-core";
2
- //# sourceMappingURL=runtime-backends.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-backends.js","sourceRoot":"","sources":["../src/runtime-backends.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -1,33 +0,0 @@
1
- import type { Socket } from "socket.io-client";
2
- export type ModelsScanStatus = "pending" | "complete" | "failed";
3
- export interface RuntimeCapabilitiesPayload {
4
- agents: Array<{
5
- provider: string;
6
- available: boolean;
7
- version?: string;
8
- models?: string[];
9
- lastCheckedAt: string;
10
- }>;
11
- hasGit: boolean;
12
- hasTerminal: boolean;
13
- supportsFilesystem: boolean;
14
- }
15
- export declare function buildModelsScanMetadata(status: ModelsScanStatus, error?: string): Record<string, unknown>;
16
- export declare function patchRuntimeCapabilitiesSelf(input: {
17
- apiUrl: string;
18
- runtimeId: string;
19
- runtimeToken: string;
20
- capabilities: RuntimeCapabilitiesPayload;
21
- metadata?: Record<string, unknown>;
22
- }): Promise<void>;
23
- export declare function setConnectedRuntimeSocket(socket: Socket | null): void;
24
- export declare function publishRuntimeCapabilities(input: {
25
- capabilities: RuntimeCapabilitiesPayload;
26
- metadata?: Record<string, unknown>;
27
- apiUrl?: string;
28
- runtimeId?: string;
29
- runtimeToken?: string;
30
- }): Promise<void>;
31
- export declare function getModelScanInFlight(): Promise<void> | null;
32
- export declare function setModelScanInFlight(promise: Promise<void> | null): void;
33
- //# sourceMappingURL=runtime-capabilities-sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-capabilities-sync.d.ts","sourceRoot":"","sources":["../src/runtime-capabilities-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEjE,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,KAAK,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,gBAAgB,EACxB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB;AAED,wBAAsB,4BAA4B,CAAC,KAAK,EAAE;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,0BAA0B,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhB;AAID,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAErE;AAED,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,YAAY,EAAE,0BAA0B,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhB;AAID,wBAAgB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAE3D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAExE"}
@@ -1,56 +0,0 @@
1
- export function buildModelsScanMetadata(status, error) {
2
- const metadata = {
3
- modelsScanStatus: status,
4
- modelsScannedAt: new Date().toISOString(),
5
- };
6
- if (error)
7
- metadata.modelsScanError = error;
8
- else
9
- delete metadata.modelsScanError;
10
- return metadata;
11
- }
12
- export async function patchRuntimeCapabilitiesSelf(input) {
13
- const response = await fetch(`${input.apiUrl}/public/runtimes/${input.runtimeId}/capabilities/self`, {
14
- method: "PATCH",
15
- headers: {
16
- "content-type": "application/json",
17
- authorization: `Bearer ${input.runtimeToken}`,
18
- },
19
- body: JSON.stringify({
20
- capabilities: input.capabilities,
21
- ...(input.metadata ? { metadata: input.metadata } : {}),
22
- }),
23
- });
24
- if (!response.ok) {
25
- throw new Error(`runtime capabilities update failed: ${response.status} ${await response.text()}`);
26
- }
27
- }
28
- let connectedRuntimeSocket = null;
29
- export function setConnectedRuntimeSocket(socket) {
30
- connectedRuntimeSocket = socket;
31
- }
32
- export async function publishRuntimeCapabilities(input) {
33
- if (connectedRuntimeSocket?.connected) {
34
- connectedRuntimeSocket.emit("runtime.capabilities", {
35
- capabilities: input.capabilities,
36
- ...(input.metadata ? { metadata: input.metadata } : {}),
37
- });
38
- }
39
- if (input.apiUrl && input.runtimeId && input.runtimeToken) {
40
- await patchRuntimeCapabilitiesSelf({
41
- apiUrl: input.apiUrl,
42
- runtimeId: input.runtimeId,
43
- runtimeToken: input.runtimeToken,
44
- capabilities: input.capabilities,
45
- metadata: input.metadata,
46
- });
47
- }
48
- }
49
- let modelScanInFlight = null;
50
- export function getModelScanInFlight() {
51
- return modelScanInFlight;
52
- }
53
- export function setModelScanInFlight(promise) {
54
- modelScanInFlight = promise;
55
- }
56
- //# sourceMappingURL=runtime-capabilities-sync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-capabilities-sync.js","sourceRoot":"","sources":["../src/runtime-capabilities-sync.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,uBAAuB,CACrC,MAAwB,EACxB,KAAc;IAEd,MAAM,QAAQ,GAA4B;QACxC,gBAAgB,EAAE,MAAM;QACxB,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAC1C,CAAC;IACF,IAAI,KAAK;QAAE,QAAQ,CAAC,eAAe,GAAG,KAAK,CAAC;;QACvC,OAAO,QAAQ,CAAC,eAAe,CAAC;IACrC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,KAMlD;IACC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,KAAK,CAAC,MAAM,oBAAoB,KAAK,CAAC,SAAS,oBAAoB,EACtE;QACE,MAAM,EAAE,OAAO;QACf,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,KAAK,CAAC,YAAY,EAAE;SAC9C;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC;KACH,CACF,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,uCAAuC,QAAQ,CAAC,MAAM,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAClF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,IAAI,sBAAsB,GAAkB,IAAI,CAAC;AAEjD,MAAM,UAAU,yBAAyB,CAAC,MAAqB;IAC7D,sBAAsB,GAAG,MAAM,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,KAMhD;IACC,IAAI,sBAAsB,EAAE,SAAS,EAAE,CAAC;QACtC,sBAAsB,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAClD,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1D,MAAM,4BAA4B,CAAC;YACjC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,IAAI,iBAAiB,GAAyB,IAAI,CAAC;AAEnD,MAAM,UAAU,oBAAoB;IAClC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAA6B;IAChE,iBAAiB,GAAG,OAAO,CAAC;AAC9B,CAAC"}
@@ -1,24 +0,0 @@
1
- import { type AgentEndpointProfile } from "@alan-ai/shared/runtime-runner-status";
2
- export type { AgentEndpointProfile };
3
- /** Remove obsolete renderer tenant selection from durable daemon identity. */
4
- export declare function sanitizeAgentConfig<T extends Record<string, unknown>>(config: T): T;
5
- export declare function migrateLegacyAgentConfig(input?: {
6
- profile?: AgentEndpointProfile | string | null;
7
- alanBaseDir?: string;
8
- legacyBaseDir?: string;
9
- }): boolean;
10
- export declare function resolveAgentConfigDirectory(baseDir?: string): string;
11
- export declare function resolveAgentConfigPath(input?: {
12
- profile?: AgentEndpointProfile | string | null;
13
- explicitPath?: string | null;
14
- baseDir?: string;
15
- }): string;
16
- export declare function readConfiguredConfigPath(): string;
17
- export declare function configExistsAtPath(configPath: string): boolean;
18
- export declare function resolveEndpointProfileFromArgs(args: string[]): AgentEndpointProfile;
19
- /**
20
- * Pin the active config file from `--profile` / `ALAN_AGENT_PROFILE` when the
21
- * caller has not already set `ALAN_AGENT_CONFIG_PATH` (desktop supervisor does).
22
- */
23
- export declare function bindAgentConfigPathFromArgs(args: string[]): string;
24
- //# sourceMappingURL=runtime-config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-config.d.ts","sourceRoot":"","sources":["../src/runtime-config.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,KAAK,oBAAoB,EAG1B,MAAM,uCAAuC,CAAC;AAE/C,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAiBrC,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAOnF;AAqBD,wBAAgB,wBAAwB,CAAC,KAAK,CAAC,EAAE;IAC/C,OAAO,CAAC,EAAE,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAsCV;AAED,wBAAgB,2BAA2B,CAAC,OAAO,SAAoB,GAAG,MAAM,CAE/E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,CAAC,EAAE;IAC7C,OAAO,CAAC,EAAE,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/C,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAST;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAInF;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAOlE"}
@@ -1,124 +0,0 @@
1
- import { chmodSync, constants, copyFileSync, existsSync, lstatSync, mkdirSync, readFileSync, unlinkSync, utimesSync, writeFileSync, } from "node:fs";
2
- import { homedir } from "node:os";
3
- import { join } from "node:path";
4
- import { normalizeAgentEndpointProfile, resolveAgentConfigFileName, } from "@alan-ai/shared/runtime-runner-status";
5
- const DEFAULT_AGENT_DIR = join(homedir(), ".alan", "agent");
6
- const LEGACY_AGENT_DIR = join(homedir(), ".aiden", "agent");
7
- const AGENT_CONFIG_KEYS = new Map([
8
- ["apiUrl", "string"],
9
- ["wsUrl", "string"],
10
- ["endpointProfile", "string"],
11
- ["teamId", "string"],
12
- ["runtimeId", "string"],
13
- ["runtimeToken", "string"],
14
- ["localApiPort", "number"],
15
- ["localApiToken", "string"],
16
- ["displayName", "string"],
17
- ]);
18
- /** Remove obsolete renderer tenant selection from durable daemon identity. */
19
- export function sanitizeAgentConfig(config) {
20
- const sanitized = { ...config };
21
- delete sanitized.teamId;
22
- delete sanitized.organizationId;
23
- delete sanitized.currentTeamId;
24
- delete sanitized.currentOrganizationId;
25
- return sanitized;
26
- }
27
- function isValidAgentConfig(configPath) {
28
- try {
29
- const stat = lstatSync(configPath);
30
- if (!stat.isFile() || stat.isSymbolicLink())
31
- return false;
32
- const parsed = JSON.parse(readFileSync(configPath, "utf8"));
33
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
34
- return false;
35
- const entries = Object.entries(parsed);
36
- return (entries.some(([key]) => AGENT_CONFIG_KEYS.has(key)) &&
37
- entries.every(([key, value]) => {
38
- const expectedType = AGENT_CONFIG_KEYS.get(key);
39
- return expectedType === undefined || typeof value === expectedType;
40
- }));
41
- }
42
- catch {
43
- return false;
44
- }
45
- }
46
- export function migrateLegacyAgentConfig(input) {
47
- const profile = normalizeAgentEndpointProfile(input?.profile ?? null) ?? "production";
48
- const alanBaseDir = input?.alanBaseDir ?? DEFAULT_AGENT_DIR;
49
- const legacyBaseDir = input?.legacyBaseDir ?? LEGACY_AGENT_DIR;
50
- const fileName = resolveAgentConfigFileName(profile);
51
- const legacyPath = join(legacyBaseDir, fileName);
52
- const alanPath = join(alanBaseDir, fileName);
53
- if (existsSync(alanPath) || !isValidAgentConfig(legacyPath))
54
- return false;
55
- let copied = false;
56
- try {
57
- const sourceDirectoryStat = lstatSync(legacyBaseDir);
58
- const sourceFileStat = lstatSync(legacyPath);
59
- if (!sourceDirectoryStat.isDirectory() || sourceDirectoryStat.isSymbolicLink())
60
- return false;
61
- const alanDirectoryExisted = existsSync(alanBaseDir);
62
- if (alanDirectoryExisted) {
63
- const alanDirectoryStat = lstatSync(alanBaseDir);
64
- if (!alanDirectoryStat.isDirectory() || alanDirectoryStat.isSymbolicLink())
65
- return false;
66
- }
67
- mkdirSync(alanBaseDir, { recursive: true, mode: sourceDirectoryStat.mode & 0o777 });
68
- if (!alanDirectoryExisted)
69
- chmodSync(alanBaseDir, sourceDirectoryStat.mode & 0o777);
70
- copyFileSync(legacyPath, alanPath, constants.COPYFILE_EXCL);
71
- copied = true;
72
- const migrated = sanitizeAgentConfig(JSON.parse(readFileSync(alanPath, "utf8")));
73
- writeFileSync(alanPath, JSON.stringify(migrated, null, 2));
74
- chmodSync(alanPath, sourceFileStat.mode & 0o777);
75
- utimesSync(alanPath, sourceFileStat.atime, sourceFileStat.mtime);
76
- if (!isValidAgentConfig(alanPath)) {
77
- unlinkSync(alanPath);
78
- return false;
79
- }
80
- return true;
81
- }
82
- catch {
83
- if (copied && existsSync(alanPath))
84
- unlinkSync(alanPath);
85
- return false;
86
- }
87
- }
88
- export function resolveAgentConfigDirectory(baseDir = DEFAULT_AGENT_DIR) {
89
- return baseDir;
90
- }
91
- export function resolveAgentConfigPath(input) {
92
- if (input?.explicitPath?.trim())
93
- return input.explicitPath.trim();
94
- const profile = normalizeAgentEndpointProfile(typeof input?.profile === "string" ? input.profile : (input?.profile ?? null)) ?? "production";
95
- const baseDir = input?.baseDir ?? DEFAULT_AGENT_DIR;
96
- if (input?.baseDir === undefined)
97
- migrateLegacyAgentConfig({ profile });
98
- return join(baseDir, resolveAgentConfigFileName(profile));
99
- }
100
- export function readConfiguredConfigPath() {
101
- return process.env.ALAN_AGENT_CONFIG_PATH ?? resolveAgentConfigPath({ profile: "production" });
102
- }
103
- export function configExistsAtPath(configPath) {
104
- return existsSync(configPath);
105
- }
106
- export function resolveEndpointProfileFromArgs(args) {
107
- const index = args.indexOf("--profile");
108
- const raw = index === -1 ? process.env.ALAN_AGENT_PROFILE : args[index + 1];
109
- return normalizeAgentEndpointProfile(raw) ?? "production";
110
- }
111
- /**
112
- * Pin the active config file from `--profile` / `ALAN_AGENT_PROFILE` when the
113
- * caller has not already set `ALAN_AGENT_CONFIG_PATH` (desktop supervisor does).
114
- */
115
- export function bindAgentConfigPathFromArgs(args) {
116
- const explicit = process.env.ALAN_AGENT_CONFIG_PATH?.trim();
117
- if (explicit)
118
- return explicit;
119
- const profile = resolveEndpointProfileFromArgs(args);
120
- const configPath = resolveAgentConfigPath({ profile });
121
- process.env.ALAN_AGENT_CONFIG_PATH = configPath;
122
- return configPath;
123
- }
124
- //# sourceMappingURL=runtime-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-config.js","sourceRoot":"","sources":["../src/runtime-config.ts"],"names":[],"mappings":"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"}
@@ -1,122 +0,0 @@
1
- /**
2
- * Durable, at-least-once event delivery for the CLOUD sandbox agent path.
3
- *
4
- * The local daemon already hardens its `agent.event` stream with
5
- * {@link EncryptedEventOutbox} (spool-before-send, ack-to-remove, replay on
6
- * reconnect). The cloud sandbox agent historically emitted `agent_event`
7
- * fire-and-forget, so a socket blip mid-turn silently dropped stream events.
8
- *
9
- * This module reuses the daemon's battle-tested outbox crypto/spool/cap logic
10
- * and adapts it to the cloud `agent_event` channel WITHOUT touching the daemon
11
- * path:
12
- * - key material derives from ALAN_SESSION_TOKEN (the daemon derives from its
13
- * persisted config key — same 32-byte AES-256-GCM strength, different entry
14
- * point);
15
- * - the spool lives at `/tmp/alan-agent-outbox-${conversationId}.enc`;
16
- * - {@link SandboxOutboxSocket} translates the daemon envelope onto the cloud
17
- * `agent_event` wire format (event + stable `eventId` + monotonic `seq`) and
18
- * maps the server's `{ ok, duplicate?, retryable? }` ack back to the outbox's
19
- * `{ ok, retryable? }` contract.
20
- *
21
- * The whole behaviour is gated behind `ALAN_EVENT_OUTBOX_ENABLED === "true"` so
22
- * the published npm package stays byte-for-byte fire-and-forget until ops turns
23
- * it on fleet-wide.
24
- */
25
- import { type AgentEventAck, EncryptedEventOutbox, type EventOutboxOptions, type OutboxSocket } from "./event-outbox.js";
26
- import type { AgentEvent } from "./types.js";
27
- /** Env flag that activates durable delivery inside the agent process. */
28
- export declare const SANDBOX_EVENT_OUTBOX_ENV = "ALAN_EVENT_OUTBOX_ENABLED";
29
- /** True only when ops has explicitly opted the process into durable delivery. */
30
- export declare function isSandboxEventOutboxEnabled(env?: NodeJS.ProcessEnv): boolean;
31
- /**
32
- * Derive the 32-byte AES-256-GCM key for the sandbox outbox from the per-session
33
- * token. The daemon persists a random key in its config file; the cloud agent is
34
- * ephemeral and has no such store, so we derive deterministically from the
35
- * session token it already holds. SHA-256 yields exactly 32 bytes, which is what
36
- * {@link EncryptedEventOutbox} requires — the crypto strength is unchanged.
37
- */
38
- export declare function deriveSandboxOutboxKey(sessionToken: string): string;
39
- /** Per-conversation spool location inside the sandbox VM. */
40
- export declare function sandboxOutboxSpoolPath(conversationId: string): string;
41
- /**
42
- * Construct the durable outbox for one conversation. If a prior process left an
43
- * undecryptable spool (corruption, or a rotated session token), the stale file
44
- * is removed and a fresh outbox is created so delivery is still hardened going
45
- * forward instead of crashing the agent.
46
- */
47
- export declare function createSandboxEventOutbox(input: {
48
- conversationId: string;
49
- sessionToken: string;
50
- pushLog?: (message: string) => void;
51
- options?: EventOutboxOptions;
52
- spoolPath?: string;
53
- }): EncryptedEventOutbox;
54
- /** Server ack shape for the cloud `agent_event` channel (with dedupe signal). */
55
- export interface SandboxAgentEventAck {
56
- ok: boolean;
57
- duplicate?: boolean;
58
- retryable?: boolean;
59
- }
60
- /** Minimal socket.io surface the adapter needs from the live sandbox socket. */
61
- export interface SandboxEmitSocket {
62
- readonly connected: boolean;
63
- emit(event: "agent_event", payload: unknown, ack: (result: SandboxAgentEventAck) => void): unknown;
64
- }
65
- /**
66
- * Bridges {@link EncryptedEventOutbox} (which speaks the daemon's
67
- * `agent.event` envelope) onto the cloud `agent_event` channel.
68
- *
69
- * Every wire payload carries the outbox `eventId` (for server-side dedupe) plus
70
- * a monotonic `seq` that is stable per event across retries and reconnect
71
- * replays, so the server can order and de-duplicate an at-least-once stream.
72
- */
73
- export declare class SandboxOutboxSocket implements OutboxSocket {
74
- private readonly socket;
75
- private readonly seqByEventId;
76
- private seqCounter;
77
- constructor(socket: SandboxEmitSocket);
78
- get connected(): boolean;
79
- emit(_event: "agent.event", payload: {
80
- eventId: string;
81
- conversationId: string;
82
- runId: string;
83
- event: AgentEvent;
84
- }, acknowledge: (result: AgentEventAck) => void): void;
85
- }
86
- /**
87
- * Owns the durable outbox for a single sandbox conversation and routes every
88
- * agent event through it when enabled. When disabled (the default) callers fall
89
- * back to today's fire-and-forget emit — byte-for-byte the prior behaviour.
90
- */
91
- export declare class SandboxEventDispatcher {
92
- private readonly conversationId;
93
- private readonly outbox?;
94
- private readonly outboxSocket?;
95
- private currentRunId?;
96
- constructor(input: {
97
- conversationId: string;
98
- sessionToken: string;
99
- enabled: boolean;
100
- socket: SandboxEmitSocket;
101
- pushLog?: (message: string) => void;
102
- onInitError?: (error: unknown) => void;
103
- options?: EventOutboxOptions;
104
- spoolPath?: string;
105
- });
106
- /** True when events are being durably queued rather than fired-and-forgotten. */
107
- get active(): boolean;
108
- /** Set the run id used to bucket per-run caps / terminal condensation. */
109
- setRunId(runId: string | undefined): void;
110
- /**
111
- * Durably deliver one event (enqueue-before-send, remove-on-ack). When the
112
- * outbox is inactive, defers to `fireAndForget` so behaviour is unchanged.
113
- */
114
- emit(event: AgentEvent, fireAndForget: (event: AgentEvent) => void): void;
115
- /** Replay un-acked events in order — called on (re)connect before new events. */
116
- flush(): void;
117
- /** Reset in-flight state on disconnect so the next flush replays from the head. */
118
- disconnect(): void;
119
- /** Diagnostics: number of events still awaiting a server ack. */
120
- pendingCount(): number;
121
- }
122
- //# sourceMappingURL=sandbox-outbox.d.ts.map