@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,259 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { chmodSync, mkdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
3
+ import { homedir, platform } from "node:os";
4
+ import { dirname, join, resolve } from "node:path";
5
+ import { configExistsAtPath, resolveAgentConfigPath, resolveEndpointProfileFromArgs, } from "./runtime-config.js";
6
+ const SERVICE_LABEL = "ai.tryalan.agent";
7
+ const SYSTEMD_UNIT = "alan-agent.service";
8
+ const WINDOWS_TASK = "Alan Agent";
9
+ function xml(value) {
10
+ return value
11
+ .replaceAll("&", "&")
12
+ .replaceAll("<", "&lt;")
13
+ .replaceAll(">", "&gt;")
14
+ .replaceAll('"', "&quot;")
15
+ .replaceAll("'", "&apos;");
16
+ }
17
+ function systemdArg(value) {
18
+ return `"${value.replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`;
19
+ }
20
+ function powershellLiteral(value) {
21
+ return `'${value.replaceAll("'", "''")}'`;
22
+ }
23
+ export function buildDaemonServicePlan(input) {
24
+ const daemonArgs = [input.nodeExecutable, input.cliEntry, "daemon", "--profile", input.profile];
25
+ if (input.platform === "darwin") {
26
+ const userId = input.userId ?? process.getuid?.();
27
+ if (userId === undefined)
28
+ throw new Error("Cannot determine the current macOS user ID");
29
+ const domain = `gui/${userId}`;
30
+ const serviceTarget = `${domain}/${SERVICE_LABEL}`;
31
+ const manifestPath = join(input.homeDir, "Library", "LaunchAgents", `${SERVICE_LABEL}.plist`);
32
+ const logDir = join(input.homeDir, ".alan", "agent", "logs");
33
+ const programArguments = daemonArgs.map((arg) => ` <string>${xml(arg)}</string>`).join("\n");
34
+ const manifest = `<?xml version="1.0" encoding="UTF-8"?>
35
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
36
+ <plist version="1.0">
37
+ <dict>
38
+ <key>Label</key>
39
+ <string>${SERVICE_LABEL}</string>
40
+ <key>ProgramArguments</key>
41
+ <array>
42
+ ${programArguments}
43
+ </array>
44
+ <key>RunAtLoad</key>
45
+ <true/>
46
+ <key>KeepAlive</key>
47
+ <dict>
48
+ <key>SuccessfulExit</key>
49
+ <false/>
50
+ </dict>
51
+ <key>ThrottleInterval</key>
52
+ <integer>5</integer>
53
+ <key>StandardOutPath</key>
54
+ <string>${xml(join(logDir, "daemon.log"))}</string>
55
+ <key>StandardErrorPath</key>
56
+ <string>${xml(join(logDir, "daemon-error.log"))}</string>
57
+ </dict>
58
+ </plist>
59
+ `;
60
+ return {
61
+ manifestPath,
62
+ manifest,
63
+ installCommands: [
64
+ {
65
+ command: "launchctl",
66
+ args: ["bootout", domain, manifestPath],
67
+ tolerateFailure: true,
68
+ },
69
+ {
70
+ command: "launchctl",
71
+ args: ["bootstrap", domain, manifestPath],
72
+ tolerateFailure: false,
73
+ },
74
+ {
75
+ command: "launchctl",
76
+ args: ["kickstart", "-k", serviceTarget],
77
+ tolerateFailure: false,
78
+ },
79
+ ],
80
+ uninstallCommands: [
81
+ {
82
+ command: "launchctl",
83
+ args: ["bootout", domain, manifestPath],
84
+ tolerateFailure: true,
85
+ },
86
+ ],
87
+ statusCommand: {
88
+ command: "launchctl",
89
+ args: ["print", serviceTarget],
90
+ tolerateFailure: false,
91
+ },
92
+ };
93
+ }
94
+ if (input.platform === "linux") {
95
+ const manifestPath = join(input.homeDir, ".config", "systemd", "user", SYSTEMD_UNIT);
96
+ const manifest = `[Unit]
97
+ Description=Alan local agent daemon
98
+ After=network-online.target
99
+ Wants=network-online.target
100
+ StartLimitIntervalSec=300
101
+ StartLimitBurst=3
102
+
103
+ [Service]
104
+ Type=simple
105
+ ExecStart=${daemonArgs.map(systemdArg).join(" ")}
106
+ Restart=on-failure
107
+ RestartSec=5
108
+
109
+ [Install]
110
+ WantedBy=default.target
111
+ `;
112
+ return {
113
+ manifestPath,
114
+ manifest,
115
+ installCommands: [
116
+ {
117
+ command: "systemctl",
118
+ args: ["--user", "daemon-reload"],
119
+ tolerateFailure: false,
120
+ },
121
+ {
122
+ command: "systemctl",
123
+ args: ["--user", "enable", "--now", SYSTEMD_UNIT],
124
+ tolerateFailure: false,
125
+ },
126
+ ],
127
+ uninstallCommands: [
128
+ {
129
+ command: "systemctl",
130
+ args: ["--user", "disable", "--now", SYSTEMD_UNIT],
131
+ tolerateFailure: true,
132
+ },
133
+ {
134
+ command: "systemctl",
135
+ args: ["--user", "daemon-reload"],
136
+ tolerateFailure: false,
137
+ },
138
+ ],
139
+ statusCommand: {
140
+ command: "systemctl",
141
+ args: ["--user", "status", SYSTEMD_UNIT, "--no-pager"],
142
+ tolerateFailure: false,
143
+ },
144
+ };
145
+ }
146
+ const executable = powershellLiteral(input.nodeExecutable);
147
+ const argument = powershellLiteral([input.cliEntry, "daemon", "--profile", input.profile]
148
+ .map((part) => (part.includes(" ") ? `"${part}"` : part))
149
+ .join(" "));
150
+ const installScript = [
151
+ `$action = New-ScheduledTaskAction -Execute ${executable} -Argument ${argument}`,
152
+ "$trigger = New-ScheduledTaskTrigger -AtLogOn",
153
+ "$settings = New-ScheduledTaskSettingsSet -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1) -ExecutionTimeLimit ([TimeSpan]::Zero)",
154
+ `Register-ScheduledTask -TaskName ${powershellLiteral(WINDOWS_TASK)} -Action $action -Trigger $trigger -Settings $settings -Force | Out-Null`,
155
+ `Start-ScheduledTask -TaskName ${powershellLiteral(WINDOWS_TASK)}`,
156
+ ].join("; ");
157
+ return {
158
+ manifestPath: null,
159
+ manifest: null,
160
+ installCommands: [
161
+ {
162
+ command: "powershell.exe",
163
+ args: ["-NoProfile", "-NonInteractive", "-Command", installScript],
164
+ tolerateFailure: false,
165
+ },
166
+ ],
167
+ uninstallCommands: [
168
+ {
169
+ command: "powershell.exe",
170
+ args: [
171
+ "-NoProfile",
172
+ "-NonInteractive",
173
+ "-Command",
174
+ `Unregister-ScheduledTask -TaskName ${powershellLiteral(WINDOWS_TASK)} -Confirm:$false -ErrorAction SilentlyContinue`,
175
+ ],
176
+ tolerateFailure: true,
177
+ },
178
+ ],
179
+ statusCommand: {
180
+ command: "powershell.exe",
181
+ args: [
182
+ "-NoProfile",
183
+ "-NonInteractive",
184
+ "-Command",
185
+ `Get-ScheduledTask -TaskName ${powershellLiteral(WINDOWS_TASK)} | Format-List TaskName,State`,
186
+ ],
187
+ tolerateFailure: false,
188
+ },
189
+ };
190
+ }
191
+ function currentServicePlan(args) {
192
+ const currentPlatform = platform();
193
+ if (currentPlatform !== "darwin" && currentPlatform !== "linux" && currentPlatform !== "win32") {
194
+ throw new Error(`Daemon service installation is not supported on ${currentPlatform}`);
195
+ }
196
+ const profile = resolveEndpointProfileFromArgs(args);
197
+ const cliEntry = process.argv[1];
198
+ if (!cliEntry)
199
+ throw new Error("Cannot determine the alan-agent executable path");
200
+ return buildDaemonServicePlan({
201
+ platform: currentPlatform,
202
+ homeDir: homedir(),
203
+ nodeExecutable: process.execPath,
204
+ cliEntry: resolve(cliEntry),
205
+ profile,
206
+ });
207
+ }
208
+ function writeManifest(path, contents) {
209
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
210
+ const pendingPath = `${path}.pending-${process.pid}`;
211
+ try {
212
+ writeFileSync(pendingPath, contents, { mode: 0o600 });
213
+ chmodSync(pendingPath, 0o600);
214
+ renameSync(pendingPath, path);
215
+ }
216
+ finally {
217
+ rmSync(pendingPath, { force: true });
218
+ }
219
+ }
220
+ function runServiceCommand(command) {
221
+ const result = spawnSync(command.command, command.args, { encoding: "utf8" });
222
+ const status = result.status ?? 1;
223
+ const output = `${result.stdout ?? ""}${result.stderr ?? ""}`.trim();
224
+ if (status !== 0 && !command.tolerateFailure) {
225
+ throw new Error(`Service command failed (${command.command} ${command.args.join(" ")}): ${output || `exit ${status}`}`);
226
+ }
227
+ return { status, output };
228
+ }
229
+ export function installDaemonService(args = []) {
230
+ const profile = resolveEndpointProfileFromArgs(args);
231
+ const configPath = resolveAgentConfigPath({ profile });
232
+ if (!configExistsAtPath(configPath)) {
233
+ throw new Error(`No ${profile} runtime is configured. Run alan-agent setup or login first.`);
234
+ }
235
+ const plan = currentServicePlan(args);
236
+ if (plan.manifestPath && plan.manifest) {
237
+ if (platform() === "darwin") {
238
+ mkdirSync(join(homedir(), ".alan", "agent", "logs"), { recursive: true, mode: 0o700 });
239
+ }
240
+ writeManifest(plan.manifestPath, plan.manifest);
241
+ }
242
+ for (const command of plan.installCommands)
243
+ runServiceCommand(command);
244
+ console.info("[alan-agent] Per-user daemon service installed", { profile });
245
+ }
246
+ export function uninstallDaemonService(args = []) {
247
+ const plan = currentServicePlan(args);
248
+ for (const command of plan.uninstallCommands)
249
+ runServiceCommand(command);
250
+ if (plan.manifestPath)
251
+ rmSync(plan.manifestPath, { force: true });
252
+ console.info("[alan-agent] Per-user daemon service removed");
253
+ }
254
+ export function printDaemonServiceStatus(args = []) {
255
+ const plan = currentServicePlan(args);
256
+ const result = runServiceCommand(plan.statusCommand);
257
+ process.stdout.write(`${result.output}\n`);
258
+ }
259
+ //# sourceMappingURL=service-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-manager.js","sourceRoot":"","sources":["../src/service-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Cross-platform sleep prevention for the duration of active local agent runs.
3
+ *
4
+ * Why this exists: a local run executes in-process with the daemon. When the
5
+ * machine idle-sleeps, the socket, the runtime heartbeat and the provider CLI
6
+ * all freeze together; the backend watchdog then fails the run as "Agent
7
+ * unresponsive". Holding an OS-level sleep assertion while at least one run is
8
+ * active removes the most common cause of that failure.
9
+ *
10
+ * Design constraints learned the hard way:
11
+ *
12
+ * - **Never throw, never reject a run.** Sleep prevention is best-effort. A
13
+ * missing `caffeinate`/`systemd-inhibit` binary, a sandboxed environment, or
14
+ * a spawn failure must degrade to "machine may sleep", never to a failed run.
15
+ * - **Self-heal.** The helper process can die mid-run (OOM, user kill, session
16
+ * teardown). Acquiring once at run start is not enough, so a low-frequency
17
+ * watchdog re-checks and respawns while runs are active.
18
+ * - **Never outlive the daemon.** A leaked `caffeinate` keeps a laptop awake
19
+ * forever, which is a far worse bug than the one being fixed. Every backend
20
+ * is tied to this process's lifetime by the OS itself (see below), in
21
+ * addition to explicit release.
22
+ *
23
+ * Platform coverage:
24
+ *
25
+ * | Platform | Mechanism |
26
+ * |----------|------------------------------------------------------|
27
+ * | macOS | `caffeinate -i -s -w <pid>` |
28
+ * | Linux | `systemd-inhibit`, falling back to `gnome-session-inhibit` |
29
+ * | Windows | desktop: Electron's `powerSaveBlocker`, registered externally. Standalone/headless daemon (e.g. installed as a Windows Scheduled Task via service-manager.ts): a PowerShell `SetThreadExecutionState` helper, used only when nothing else is already registered |
30
+ *
31
+ * `-w <pid>` (macOS) and the `kill -0`/`Get-Process` guard loops (Linux,
32
+ * Windows) make the OS release the assertion when *this* process exits, even
33
+ * on SIGKILL where no JS cleanup handler can run. That is the Node-reachable
34
+ * equivalent of the `PR_SET_PDEATHSIG` guard the Codex sleep-inhibitor uses.
35
+ *
36
+ * Known limitation: on macOS the `-s` assertion is only honoured while the
37
+ * machine is on AC power (see `man caffeinate`). A laptop on battery with the
38
+ * lid closed will still sleep, and no userspace assertion can prevent that.
39
+ * Surviving that case is the job of wake-recovery, not of this module.
40
+ */
41
+ /**
42
+ * Set to `1`/`true` to disable sleep prevention entirely. An escape hatch for
43
+ * users who would rather have their machine sleep than have runs survive.
44
+ */
45
+ export declare const SLEEP_PREVENTION_DISABLED_ENV = "ALAN_DISABLE_SLEEP_PREVENTION";
46
+ /**
47
+ * A single OS-level "keep the machine awake" mechanism.
48
+ *
49
+ * Implementations must be idempotent: `acquire()` on an already-held assertion
50
+ * is a no-op, and `release()` on a released one is a no-op.
51
+ */
52
+ export interface SleepInhibitorBackend {
53
+ readonly name: string;
54
+ /** Take the assertion. Must not throw. */
55
+ acquire(): void;
56
+ /** Drop the assertion. Must not throw. */
57
+ release(): void;
58
+ /** False when the assertion was expected to be held but is not (e.g. helper died). */
59
+ isHealthy(): boolean;
60
+ }
61
+ type Logger = (message: string) => void;
62
+ export declare function isSleepPreventionDisabled(env?: NodeJS.ProcessEnv): boolean;
63
+ /**
64
+ * Register an additional backend. Returns a disposer that unregisters it.
65
+ *
66
+ * Registration must happen before the daemon starts to affect its inhibitor;
67
+ * inhibitors snapshot the registry at construction time.
68
+ */
69
+ export declare function registerSleepInhibitorBackend(backend: SleepInhibitorBackend): () => void;
70
+ /**
71
+ * Holds an OS sleep assertion while `setActive(true)` is in effect.
72
+ *
73
+ * Mirrors the Codex `SleepInhibitor` contract: idempotent, self-healing, and
74
+ * silent on platforms where nothing is available.
75
+ */
76
+ export declare class SleepInhibitor {
77
+ private readonly backends;
78
+ private readonly log;
79
+ private readonly enabled;
80
+ private active;
81
+ private healthTimer;
82
+ private exitHandler;
83
+ private disposed;
84
+ constructor(options?: {
85
+ log?: Logger;
86
+ env?: NodeJS.ProcessEnv;
87
+ });
88
+ isActive(): boolean;
89
+ /** Names of the backends this inhibitor will drive. Exposed for diagnostics. */
90
+ backendNames(): string[];
91
+ /**
92
+ * Turn sleep prevention on or off. Safe to call repeatedly with the same
93
+ * value; only edges do work.
94
+ */
95
+ setActive(active: boolean): void;
96
+ /** Release everything and detach timers/handlers. Idempotent. */
97
+ dispose(): void;
98
+ private start;
99
+ private stop;
100
+ /**
101
+ * Acquire anything not currently held. This is the self-healing step: a
102
+ * backend whose helper died is respawned here.
103
+ *
104
+ * Healthy backends are skipped rather than re-acquired, so concurrent runs
105
+ * can never stack assertions even if a backend's own `acquire()` is not
106
+ * defensively idempotent.
107
+ */
108
+ private healBackends;
109
+ }
110
+ export {};
111
+ //# sourceMappingURL=sleep-inhibitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep-inhibitor.d.ts","sourceRoot":"","sources":["../src/sleep-inhibitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAIH;;;GAGG;AACH,eAAO,MAAM,6BAA6B,kCAAkC,CAAC;AAK7E;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,OAAO,IAAI,IAAI,CAAC;IAChB,0CAA0C;IAC1C,OAAO,IAAI,IAAI,CAAC;IAChB,sFAAsF;IACtF,SAAS,IAAI,OAAO,CAAC;CACtB;AAED,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAIxC,wBAAgB,yBAAyB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAKvF;AA8ND;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAKxF;AAmBD;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;KAAO;IAWnE,QAAQ,IAAI,OAAO;IAInB,gFAAgF;IAChF,YAAY,IAAI,MAAM,EAAE;IAIxB;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAahC,iEAAiE;IACjE,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,KAAK;IAkBb,OAAO,CAAC,IAAI;IAkBZ;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;CAUrB"}