@agent-vm/agent-vm 0.0.20

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 (366) hide show
  1. package/LICENSE +21 -0
  2. package/dist/backup/backup-archive-layout.d.ts +15 -0
  3. package/dist/backup/backup-archive-layout.d.ts.map +1 -0
  4. package/dist/backup/backup-archive-layout.js +34 -0
  5. package/dist/backup/backup-archive-layout.js.map +1 -0
  6. package/dist/backup/backup-create-operation.d.ts +9 -0
  7. package/dist/backup/backup-create-operation.d.ts.map +1 -0
  8. package/dist/backup/backup-create-operation.js +50 -0
  9. package/dist/backup/backup-create-operation.js.map +1 -0
  10. package/dist/backup/backup-encryption.d.ts +20 -0
  11. package/dist/backup/backup-encryption.d.ts.map +1 -0
  12. package/dist/backup/backup-encryption.js +93 -0
  13. package/dist/backup/backup-encryption.js.map +1 -0
  14. package/dist/backup/backup-manager.d.ts +42 -0
  15. package/dist/backup/backup-manager.d.ts.map +1 -0
  16. package/dist/backup/backup-manager.js +37 -0
  17. package/dist/backup/backup-manager.js.map +1 -0
  18. package/dist/backup/backup-restore-operation.d.ts +8 -0
  19. package/dist/backup/backup-restore-operation.d.ts.map +1 -0
  20. package/dist/backup/backup-restore-operation.js +53 -0
  21. package/dist/backup/backup-restore-operation.js.map +1 -0
  22. package/dist/build/docker-image-builder.d.ts +11 -0
  23. package/dist/build/docker-image-builder.d.ts.map +1 -0
  24. package/dist/build/docker-image-builder.js +24 -0
  25. package/dist/build/docker-image-builder.js.map +1 -0
  26. package/dist/build/gondolin-image-builder.d.ts +16 -0
  27. package/dist/build/gondolin-image-builder.d.ts.map +1 -0
  28. package/dist/build/gondolin-image-builder.js +52 -0
  29. package/dist/build/gondolin-image-builder.js.map +1 -0
  30. package/dist/build/runtime-versions.d.ts +13 -0
  31. package/dist/build/runtime-versions.d.ts.map +1 -0
  32. package/dist/build/runtime-versions.js +100 -0
  33. package/dist/build/runtime-versions.js.map +1 -0
  34. package/dist/build/stale-image-cleaner.d.ts +17 -0
  35. package/dist/build/stale-image-cleaner.d.ts.map +1 -0
  36. package/dist/build/stale-image-cleaner.js +70 -0
  37. package/dist/build/stale-image-cleaner.js.map +1 -0
  38. package/dist/cli/agent-vm-cli-support.d.ts +78 -0
  39. package/dist/cli/agent-vm-cli-support.d.ts.map +1 -0
  40. package/dist/cli/agent-vm-cli-support.js +77 -0
  41. package/dist/cli/agent-vm-cli-support.js.map +1 -0
  42. package/dist/cli/agent-vm-entrypoint.d.ts +9 -0
  43. package/dist/cli/agent-vm-entrypoint.d.ts.map +1 -0
  44. package/dist/cli/agent-vm-entrypoint.js +59 -0
  45. package/dist/cli/agent-vm-entrypoint.js.map +1 -0
  46. package/dist/cli/auth-interactive-command.d.ts +27 -0
  47. package/dist/cli/auth-interactive-command.d.ts.map +1 -0
  48. package/dist/cli/auth-interactive-command.js +83 -0
  49. package/dist/cli/auth-interactive-command.js.map +1 -0
  50. package/dist/cli/backup-commands.d.ts +11 -0
  51. package/dist/cli/backup-commands.d.ts.map +1 -0
  52. package/dist/cli/backup-commands.js +46 -0
  53. package/dist/cli/backup-commands.js.map +1 -0
  54. package/dist/cli/build-command.d.ts +24 -0
  55. package/dist/cli/build-command.d.ts.map +1 -0
  56. package/dist/cli/build-command.js +132 -0
  57. package/dist/cli/build-command.js.map +1 -0
  58. package/dist/cli/cache-commands.d.ts +32 -0
  59. package/dist/cli/cache-commands.d.ts.map +1 -0
  60. package/dist/cli/cache-commands.js +106 -0
  61. package/dist/cli/cache-commands.js.map +1 -0
  62. package/dist/cli/commands/auth-interactive-definition.d.ts +15 -0
  63. package/dist/cli/commands/auth-interactive-definition.d.ts.map +1 -0
  64. package/dist/cli/commands/auth-interactive-definition.js +36 -0
  65. package/dist/cli/commands/auth-interactive-definition.js.map +1 -0
  66. package/dist/cli/commands/backup-definition.d.ts +63 -0
  67. package/dist/cli/commands/backup-definition.d.ts.map +1 -0
  68. package/dist/cli/commands/backup-definition.js +73 -0
  69. package/dist/cli/commands/backup-definition.js.map +1 -0
  70. package/dist/cli/commands/build-definition.d.ts +13 -0
  71. package/dist/cli/commands/build-definition.d.ts.map +1 -0
  72. package/dist/cli/commands/build-definition.js +27 -0
  73. package/dist/cli/commands/build-definition.js.map +1 -0
  74. package/dist/cli/commands/cache-definition.d.ts +41 -0
  75. package/dist/cli/commands/cache-definition.d.ts.map +1 -0
  76. package/dist/cli/commands/cache-definition.js +41 -0
  77. package/dist/cli/commands/cache-definition.js.map +1 -0
  78. package/dist/cli/commands/command-definition-support.d.ts +26 -0
  79. package/dist/cli/commands/command-definition-support.d.ts.map +1 -0
  80. package/dist/cli/commands/command-definition-support.js +85 -0
  81. package/dist/cli/commands/command-definition-support.js.map +1 -0
  82. package/dist/cli/commands/config-definition.d.ts +27 -0
  83. package/dist/cli/commands/config-definition.d.ts.map +1 -0
  84. package/dist/cli/commands/config-definition.js +60 -0
  85. package/dist/cli/commands/config-definition.js.map +1 -0
  86. package/dist/cli/commands/controller-definition.d.ts +225 -0
  87. package/dist/cli/commands/controller-definition.d.ts.map +1 -0
  88. package/dist/cli/commands/controller-definition.js +211 -0
  89. package/dist/cli/commands/controller-definition.js.map +1 -0
  90. package/dist/cli/commands/create-app.d.ts +541 -0
  91. package/dist/cli/commands/create-app.d.ts.map +1 -0
  92. package/dist/cli/commands/create-app.js +32 -0
  93. package/dist/cli/commands/create-app.js.map +1 -0
  94. package/dist/cli/commands/doctor-definition.d.ts +11 -0
  95. package/dist/cli/commands/doctor-definition.d.ts.map +1 -0
  96. package/dist/cli/commands/doctor-definition.js +23 -0
  97. package/dist/cli/commands/doctor-definition.js.map +1 -0
  98. package/dist/cli/commands/init-definition.d.ts +34 -0
  99. package/dist/cli/commands/init-definition.d.ts.map +1 -0
  100. package/dist/cli/commands/init-definition.js +134 -0
  101. package/dist/cli/commands/init-definition.js.map +1 -0
  102. package/dist/cli/commands/resources-definition.d.ts +55 -0
  103. package/dist/cli/commands/resources-definition.d.ts.map +1 -0
  104. package/dist/cli/commands/resources-definition.js +93 -0
  105. package/dist/cli/commands/resources-definition.js.map +1 -0
  106. package/dist/cli/commands/validate-definition.d.ts +11 -0
  107. package/dist/cli/commands/validate-definition.d.ts.map +1 -0
  108. package/dist/cli/commands/validate-definition.js +20 -0
  109. package/dist/cli/commands/validate-definition.js.map +1 -0
  110. package/dist/cli/config-commands.d.ts +10 -0
  111. package/dist/cli/config-commands.d.ts.map +1 -0
  112. package/dist/cli/config-commands.js +103 -0
  113. package/dist/cli/config-commands.js.map +1 -0
  114. package/dist/cli/controller-operation-commands.d.ts +12 -0
  115. package/dist/cli/controller-operation-commands.d.ts.map +1 -0
  116. package/dist/cli/controller-operation-commands.js +133 -0
  117. package/dist/cli/controller-operation-commands.js.map +1 -0
  118. package/dist/cli/format-zod-error.d.ts +3 -0
  119. package/dist/cli/format-zod-error.d.ts.map +1 -0
  120. package/dist/cli/format-zod-error.js +18 -0
  121. package/dist/cli/format-zod-error.js.map +1 -0
  122. package/dist/cli/init-command.d.ts +52 -0
  123. package/dist/cli/init-command.d.ts.map +1 -0
  124. package/dist/cli/init-command.js +645 -0
  125. package/dist/cli/init-command.js.map +1 -0
  126. package/dist/cli/keychain-credential.d.ts +19 -0
  127. package/dist/cli/keychain-credential.d.ts.map +1 -0
  128. package/dist/cli/keychain-credential.js +52 -0
  129. package/dist/cli/keychain-credential.js.map +1 -0
  130. package/dist/cli/lease-commands.d.ts +11 -0
  131. package/dist/cli/lease-commands.d.ts.map +1 -0
  132. package/dist/cli/lease-commands.js +22 -0
  133. package/dist/cli/lease-commands.js.map +1 -0
  134. package/dist/cli/openclaw-plugin-bundle.d.ts +10 -0
  135. package/dist/cli/openclaw-plugin-bundle.d.ts.map +1 -0
  136. package/dist/cli/openclaw-plugin-bundle.js +37 -0
  137. package/dist/cli/openclaw-plugin-bundle.js.map +1 -0
  138. package/dist/cli/resource-contract-templates.d.ts +8 -0
  139. package/dist/cli/resource-contract-templates.d.ts.map +1 -0
  140. package/dist/cli/resource-contract-templates.js +157 -0
  141. package/dist/cli/resource-contract-templates.js.map +1 -0
  142. package/dist/cli/resources-commands.d.ts +19 -0
  143. package/dist/cli/resources-commands.d.ts.map +1 -0
  144. package/dist/cli/resources-commands.js +158 -0
  145. package/dist/cli/resources-commands.js.map +1 -0
  146. package/dist/cli/run-task.d.ts +4 -0
  147. package/dist/cli/run-task.d.ts.map +1 -0
  148. package/dist/cli/run-task.js +17 -0
  149. package/dist/cli/run-task.js.map +1 -0
  150. package/dist/cli/ssh-commands.d.ts +20 -0
  151. package/dist/cli/ssh-commands.d.ts.map +1 -0
  152. package/dist/cli/ssh-commands.js +72 -0
  153. package/dist/cli/ssh-commands.js.map +1 -0
  154. package/dist/cli/vm-host-system-templates.d.ts +12 -0
  155. package/dist/cli/vm-host-system-templates.d.ts.map +1 -0
  156. package/dist/cli/vm-host-system-templates.js +186 -0
  157. package/dist/cli/vm-host-system-templates.js.map +1 -0
  158. package/dist/config/resource-contracts/index.d.ts +3 -0
  159. package/dist/config/resource-contracts/index.d.ts.map +1 -0
  160. package/dist/config/resource-contracts/index.js +2 -0
  161. package/dist/config/resource-contracts/index.js.map +1 -0
  162. package/dist/config/resource-contracts/repo-resource-contract-types.d.ts +110 -0
  163. package/dist/config/resource-contracts/repo-resource-contract-types.d.ts.map +1 -0
  164. package/dist/config/resource-contracts/repo-resource-contract-types.js +2 -0
  165. package/dist/config/resource-contracts/repo-resource-contract-types.js.map +1 -0
  166. package/dist/config/resource-contracts/resource-contract-schemas.d.ts +198 -0
  167. package/dist/config/resource-contracts/resource-contract-schemas.d.ts.map +1 -0
  168. package/dist/config/resource-contracts/resource-contract-schemas.js +163 -0
  169. package/dist/config/resource-contracts/resource-contract-schemas.js.map +1 -0
  170. package/dist/config/system-cache-identifier.d.ts +22 -0
  171. package/dist/config/system-cache-identifier.d.ts.map +1 -0
  172. package/dist/config/system-cache-identifier.js +49 -0
  173. package/dist/config/system-cache-identifier.js.map +1 -0
  174. package/dist/config/system-config.d.ts +111 -0
  175. package/dist/config/system-config.d.ts.map +1 -0
  176. package/dist/config/system-config.js +267 -0
  177. package/dist/config/system-config.js.map +1 -0
  178. package/dist/controller/active-task-registry.d.ts +32 -0
  179. package/dist/controller/active-task-registry.d.ts.map +1 -0
  180. package/dist/controller/active-task-registry.js +83 -0
  181. package/dist/controller/active-task-registry.js.map +1 -0
  182. package/dist/controller/composite-secret-resolver.d.ts +3 -0
  183. package/dist/controller/composite-secret-resolver.d.ts.map +1 -0
  184. package/dist/controller/composite-secret-resolver.js +38 -0
  185. package/dist/controller/composite-secret-resolver.js.map +1 -0
  186. package/dist/controller/controller-runtime-operations.d.ts +62 -0
  187. package/dist/controller/controller-runtime-operations.d.ts.map +1 -0
  188. package/dist/controller/controller-runtime-operations.js +99 -0
  189. package/dist/controller/controller-runtime-operations.js.map +1 -0
  190. package/dist/controller/controller-runtime-support.d.ts +10 -0
  191. package/dist/controller/controller-runtime-support.d.ts.map +1 -0
  192. package/dist/controller/controller-runtime-support.js +36 -0
  193. package/dist/controller/controller-runtime-support.js.map +1 -0
  194. package/dist/controller/controller-runtime-types.d.ts +58 -0
  195. package/dist/controller/controller-runtime-types.d.ts.map +1 -0
  196. package/dist/controller/controller-runtime-types.js +2 -0
  197. package/dist/controller/controller-runtime-types.js.map +1 -0
  198. package/dist/controller/controller-runtime.d.ts +3 -0
  199. package/dist/controller/controller-runtime.d.ts.map +1 -0
  200. package/dist/controller/controller-runtime.js +326 -0
  201. package/dist/controller/controller-runtime.js.map +1 -0
  202. package/dist/controller/git-auth-support.d.ts +3 -0
  203. package/dist/controller/git-auth-support.d.ts.map +1 -0
  204. package/dist/controller/git-auth-support.js +11 -0
  205. package/dist/controller/git-auth-support.js.map +1 -0
  206. package/dist/controller/git-pull-default-operations.d.ts +34 -0
  207. package/dist/controller/git-pull-default-operations.d.ts.map +1 -0
  208. package/dist/controller/git-pull-default-operations.js +175 -0
  209. package/dist/controller/git-pull-default-operations.js.map +1 -0
  210. package/dist/controller/git-push-operations.d.ts +38 -0
  211. package/dist/controller/git-push-operations.d.ts.map +1 -0
  212. package/dist/controller/git-push-operations.js +247 -0
  213. package/dist/controller/git-push-operations.js.map +1 -0
  214. package/dist/controller/heartbeat-sender.d.ts +13 -0
  215. package/dist/controller/heartbeat-sender.d.ts.map +1 -0
  216. package/dist/controller/heartbeat-sender.js +94 -0
  217. package/dist/controller/heartbeat-sender.js.map +1 -0
  218. package/dist/controller/http/controller-client.d.ts +17 -0
  219. package/dist/controller/http/controller-client.d.ts.map +1 -0
  220. package/dist/controller/http/controller-client.js +76 -0
  221. package/dist/controller/http/controller-client.js.map +1 -0
  222. package/dist/controller/http/controller-http-route-support.d.ts +46 -0
  223. package/dist/controller/http/controller-http-route-support.d.ts.map +1 -0
  224. package/dist/controller/http/controller-http-route-support.js +25 -0
  225. package/dist/controller/http/controller-http-route-support.js.map +1 -0
  226. package/dist/controller/http/controller-http-routes.d.ts +22 -0
  227. package/dist/controller/http/controller-http-routes.d.ts.map +1 -0
  228. package/dist/controller/http/controller-http-routes.js +107 -0
  229. package/dist/controller/http/controller-http-routes.js.map +1 -0
  230. package/dist/controller/http/controller-http-server.d.ts +8 -0
  231. package/dist/controller/http/controller-http-server.d.ts.map +1 -0
  232. package/dist/controller/http/controller-http-server.js +21 -0
  233. package/dist/controller/http/controller-http-server.js.map +1 -0
  234. package/dist/controller/http/controller-request-schemas.d.ts +102 -0
  235. package/dist/controller/http/controller-request-schemas.d.ts.map +1 -0
  236. package/dist/controller/http/controller-request-schemas.js +66 -0
  237. package/dist/controller/http/controller-request-schemas.js.map +1 -0
  238. package/dist/controller/http/controller-zone-operation-routes.d.ts +4 -0
  239. package/dist/controller/http/controller-zone-operation-routes.d.ts.map +1 -0
  240. package/dist/controller/http/controller-zone-operation-routes.js +223 -0
  241. package/dist/controller/http/controller-zone-operation-routes.js.map +1 -0
  242. package/dist/controller/leases/idle-reaper.d.ts +12 -0
  243. package/dist/controller/leases/idle-reaper.d.ts.map +1 -0
  244. package/dist/controller/leases/idle-reaper.js +15 -0
  245. package/dist/controller/leases/idle-reaper.js.map +1 -0
  246. package/dist/controller/leases/lease-manager.d.ts +58 -0
  247. package/dist/controller/leases/lease-manager.d.ts.map +1 -0
  248. package/dist/controller/leases/lease-manager.js +81 -0
  249. package/dist/controller/leases/lease-manager.js.map +1 -0
  250. package/dist/controller/leases/tcp-pool.d.ts +11 -0
  251. package/dist/controller/leases/tcp-pool.d.ts.map +1 -0
  252. package/dist/controller/leases/tcp-pool.js +26 -0
  253. package/dist/controller/leases/tcp-pool.js.map +1 -0
  254. package/dist/controller/request-heartbeat-registry.d.ts +15 -0
  255. package/dist/controller/request-heartbeat-registry.d.ts.map +1 -0
  256. package/dist/controller/request-heartbeat-registry.js +54 -0
  257. package/dist/controller/request-heartbeat-registry.js.map +1 -0
  258. package/dist/controller/task-config-builder.d.ts +14 -0
  259. package/dist/controller/task-config-builder.d.ts.map +1 -0
  260. package/dist/controller/task-config-builder.js +14 -0
  261. package/dist/controller/task-config-builder.js.map +1 -0
  262. package/dist/controller/task-state-reader.d.ts +17 -0
  263. package/dist/controller/task-state-reader.d.ts.map +1 -0
  264. package/dist/controller/task-state-reader.js +87 -0
  265. package/dist/controller/task-state-reader.js.map +1 -0
  266. package/dist/controller/worker-task-runner.d.ts +67 -0
  267. package/dist/controller/worker-task-runner.d.ts.map +1 -0
  268. package/dist/controller/worker-task-runner.js +497 -0
  269. package/dist/controller/worker-task-runner.js.map +1 -0
  270. package/dist/gateway/credential-manager.d.ts +8 -0
  271. package/dist/gateway/credential-manager.d.ts.map +1 -0
  272. package/dist/gateway/credential-manager.js +65 -0
  273. package/dist/gateway/credential-manager.js.map +1 -0
  274. package/dist/gateway/gateway-image-builder.d.ts +14 -0
  275. package/dist/gateway/gateway-image-builder.d.ts.map +1 -0
  276. package/dist/gateway/gateway-image-builder.js +33 -0
  277. package/dist/gateway/gateway-image-builder.js.map +1 -0
  278. package/dist/gateway/gateway-lifecycle-loader.d.ts +3 -0
  279. package/dist/gateway/gateway-lifecycle-loader.d.ts.map +1 -0
  280. package/dist/gateway/gateway-lifecycle-loader.js +10 -0
  281. package/dist/gateway/gateway-lifecycle-loader.js.map +1 -0
  282. package/dist/gateway/gateway-recovery.d.ts +19 -0
  283. package/dist/gateway/gateway-recovery.d.ts.map +1 -0
  284. package/dist/gateway/gateway-recovery.js +147 -0
  285. package/dist/gateway/gateway-recovery.js.map +1 -0
  286. package/dist/gateway/gateway-runtime-record.d.ts +33 -0
  287. package/dist/gateway/gateway-runtime-record.d.ts.map +1 -0
  288. package/dist/gateway/gateway-runtime-record.js +114 -0
  289. package/dist/gateway/gateway-runtime-record.js.map +1 -0
  290. package/dist/gateway/gateway-zone-orchestrator.d.ts +14 -0
  291. package/dist/gateway/gateway-zone-orchestrator.d.ts.map +1 -0
  292. package/dist/gateway/gateway-zone-orchestrator.js +161 -0
  293. package/dist/gateway/gateway-zone-orchestrator.js.map +1 -0
  294. package/dist/gateway/gateway-zone-support.d.ts +55 -0
  295. package/dist/gateway/gateway-zone-support.d.ts.map +1 -0
  296. package/dist/gateway/gateway-zone-support.js +42 -0
  297. package/dist/gateway/gateway-zone-support.js.map +1 -0
  298. package/dist/gateway-api-client/gateway-api-client.d.ts +34 -0
  299. package/dist/gateway-api-client/gateway-api-client.d.ts.map +1 -0
  300. package/dist/gateway-api-client/gateway-api-client.js +29 -0
  301. package/dist/gateway-api-client/gateway-api-client.js.map +1 -0
  302. package/dist/gateway-api-client/gateway-websocket-client.d.ts +45 -0
  303. package/dist/gateway-api-client/gateway-websocket-client.d.ts.map +1 -0
  304. package/dist/gateway-api-client/gateway-websocket-client.js +140 -0
  305. package/dist/gateway-api-client/gateway-websocket-client.js.map +1 -0
  306. package/dist/index.d.ts +17 -0
  307. package/dist/index.d.ts.map +1 -0
  308. package/dist/index.js +17 -0
  309. package/dist/index.js.map +1 -0
  310. package/dist/operations/config-validation.d.ts +15 -0
  311. package/dist/operations/config-validation.d.ts.map +1 -0
  312. package/dist/operations/config-validation.js +126 -0
  313. package/dist/operations/config-validation.js.map +1 -0
  314. package/dist/operations/controller-status.d.ts +13 -0
  315. package/dist/operations/controller-status.d.ts.map +1 -0
  316. package/dist/operations/controller-status.js +13 -0
  317. package/dist/operations/controller-status.js.map +1 -0
  318. package/dist/operations/credentials-refresh.d.ts +10 -0
  319. package/dist/operations/credentials-refresh.d.ts.map +1 -0
  320. package/dist/operations/credentials-refresh.js +9 -0
  321. package/dist/operations/credentials-refresh.js.map +1 -0
  322. package/dist/operations/destroy-zone.d.ts +14 -0
  323. package/dist/operations/destroy-zone.d.ts.map +1 -0
  324. package/dist/operations/destroy-zone.js +19 -0
  325. package/dist/operations/destroy-zone.js.map +1 -0
  326. package/dist/operations/doctor.d.ts +23 -0
  327. package/dist/operations/doctor.d.ts.map +1 -0
  328. package/dist/operations/doctor.js +148 -0
  329. package/dist/operations/doctor.js.map +1 -0
  330. package/dist/operations/upgrade-zone.d.ts +12 -0
  331. package/dist/operations/upgrade-zone.d.ts.map +1 -0
  332. package/dist/operations/upgrade-zone.js +10 -0
  333. package/dist/operations/upgrade-zone.js.map +1 -0
  334. package/dist/operations/zone-logs.d.ts +9 -0
  335. package/dist/operations/zone-logs.d.ts.map +1 -0
  336. package/dist/operations/zone-logs.js +7 -0
  337. package/dist/operations/zone-logs.js.map +1 -0
  338. package/dist/resources/repo-resource-contract-loader.d.ts +12 -0
  339. package/dist/resources/repo-resource-contract-loader.d.ts.map +1 -0
  340. package/dist/resources/repo-resource-contract-loader.js +100 -0
  341. package/dist/resources/repo-resource-contract-loader.js.map +1 -0
  342. package/dist/resources/repo-resource-provider-runner.d.ts +32 -0
  343. package/dist/resources/repo-resource-provider-runner.d.ts.map +1 -0
  344. package/dist/resources/repo-resource-provider-runner.js +415 -0
  345. package/dist/resources/repo-resource-provider-runner.js.map +1 -0
  346. package/dist/resources/resource-compiler.d.ts +18 -0
  347. package/dist/resources/resource-compiler.d.ts.map +1 -0
  348. package/dist/resources/resource-compiler.js +51 -0
  349. package/dist/resources/resource-compiler.js.map +1 -0
  350. package/dist/resources/resource-resolver.d.ts +25 -0
  351. package/dist/resources/resource-resolver.d.ts.map +1 -0
  352. package/dist/resources/resource-resolver.js +90 -0
  353. package/dist/resources/resource-resolver.js.map +1 -0
  354. package/dist/runtime/project-namespace.d.ts +5 -0
  355. package/dist/runtime/project-namespace.d.ts.map +1 -0
  356. package/dist/runtime/project-namespace.js +22 -0
  357. package/dist/runtime/project-namespace.js.map +1 -0
  358. package/dist/shared/run-task.d.ts +3 -0
  359. package/dist/shared/run-task.d.ts.map +1 -0
  360. package/dist/shared/run-task.js +12 -0
  361. package/dist/shared/run-task.js.map +1 -0
  362. package/dist/tool-vm/tool-vm-lifecycle.d.ts +28 -0
  363. package/dist/tool-vm/tool-vm-lifecycle.d.ts.map +1 -0
  364. package/dist/tool-vm/tool-vm-lifecycle.js +60 -0
  365. package/dist/tool-vm/tool-vm-lifecycle.js.map +1 -0
  366. package/package.json +52 -0
@@ -0,0 +1,33 @@
1
+ import fs from 'node:fs/promises';
2
+ import { buildGondolinImage as buildGondolinImageDefault, } from '../build/gondolin-image-builder.js';
3
+ async function loadBuildConfigFromJson(buildConfigPath) {
4
+ return JSON.parse(await fs.readFile(buildConfigPath, 'utf8'));
5
+ }
6
+ export async function buildGatewayImage(options, dependencies = {}) {
7
+ const buildImage = dependencies.buildImage;
8
+ if (buildImage) {
9
+ const loadBuildConfig = dependencies.loadBuildConfig ?? loadBuildConfigFromJson;
10
+ return await buildGondolinImageDefault({
11
+ buildConfigPath: options.buildConfigPath,
12
+ systemCacheIdentifierPath: options.systemCacheIdentifierPath,
13
+ cacheDir: options.cacheDir,
14
+ }, {
15
+ buildImage: async (buildImageOptions) => await buildImage({
16
+ buildConfig: buildImageOptions.buildConfig,
17
+ cacheDir: buildImageOptions.cacheDir,
18
+ fingerprintInput: buildImageOptions.fingerprintInput,
19
+ ...(buildImageOptions.fullReset ? { fullReset: true } : {}),
20
+ }),
21
+ loadBuildConfig,
22
+ });
23
+ }
24
+ return await buildGondolinImageDefault({
25
+ buildConfigPath: options.buildConfigPath,
26
+ systemCacheIdentifierPath: options.systemCacheIdentifierPath,
27
+ cacheDir: options.cacheDir,
28
+ }, {
29
+ ...(dependencies.buildGondolinImage ? { buildImage: dependencies.buildGondolinImage } : {}),
30
+ ...(dependencies.loadBuildConfig ? { loadBuildConfig: dependencies.loadBuildConfig } : {}),
31
+ });
32
+ }
33
+ //# sourceMappingURL=gateway-image-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-image-builder.js","sourceRoot":"","sources":["../../src/gateway/gateway-image-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAIlC,OAAO,EACN,kBAAkB,IAAI,yBAAyB,GAE/C,MAAM,oCAAoC,CAAC;AAS5C,KAAK,UAAU,uBAAuB,CAAC,eAAuB;IAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAgB,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,OAIC,EACD,eAAgD,EAAE;IAElD,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;IAC3C,IAAI,UAAU,EAAE,CAAC;QAChB,MAAM,eAAe,GAAG,YAAY,CAAC,eAAe,IAAI,uBAAuB,CAAC;QAChF,OAAO,MAAM,yBAAyB,CACrC;YACC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,yBAAyB,EAAE,OAAO,CAAC,yBAAyB;YAC5D,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC1B,EACD;YACC,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,CACvC,MAAM,UAAU,CAAC;gBAChB,WAAW,EAAE,iBAAiB,CAAC,WAAW;gBAC1C,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;gBACpC,gBAAgB,EAAE,iBAAiB,CAAC,gBAAgB;gBACpD,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3D,CAAC;YACH,eAAe;SACf,CACD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,yBAAyB,CACrC;QACC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,yBAAyB,EAAE,OAAO,CAAC,yBAAyB;QAC5D,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC1B,EACD;QACC,GAAG,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1F,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GatewayLifecycle, GatewayZoneConfig } from '@agent-vm/gateway-interface';
2
+ export declare function loadGatewayLifecycle(type: GatewayZoneConfig['gateway']['type']): GatewayLifecycle;
3
+ //# sourceMappingURL=gateway-lifecycle-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-lifecycle-loader.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-lifecycle-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AASvF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAEjG"}
@@ -0,0 +1,10 @@
1
+ import { openclawLifecycle } from '@agent-vm/openclaw-gateway';
2
+ import { workerLifecycle } from '@agent-vm/worker-gateway';
3
+ const lifecycleByType = {
4
+ worker: workerLifecycle,
5
+ openclaw: openclawLifecycle,
6
+ };
7
+ export function loadGatewayLifecycle(type) {
8
+ return lifecycleByType[type];
9
+ }
10
+ //# sourceMappingURL=gateway-lifecycle-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-lifecycle-loader.js","sourceRoot":"","sources":["../../src/gateway/gateway-lifecycle-loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,eAAe,GAAG;IACvB,MAAM,EAAE,eAAe;IACvB,QAAQ,EAAE,iBAAiB;CACgB,CAAC;AAE7C,MAAM,UAAU,oBAAoB,CAAC,IAA0C;IAC9E,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { deleteGatewayRuntimeRecord, loadGatewayRuntimeRecord } from './gateway-runtime-record.js';
2
+ export interface GatewayRecoveryDependencies {
3
+ readonly deleteGatewayRuntimeRecord?: typeof deleteGatewayRuntimeRecord;
4
+ readonly isProcessAlive?: (pid: number) => boolean;
5
+ readonly killProcess?: (pid: number, signal: NodeJS.Signals) => void;
6
+ readonly loadGatewayRuntimeRecord?: typeof loadGatewayRuntimeRecord;
7
+ readonly log?: (message: string) => void;
8
+ readonly readProcessCommand?: (pid: number) => Promise<string | null>;
9
+ readonly sleep?: (delayMs: number) => Promise<void>;
10
+ }
11
+ export declare function cleanupOrphanedGatewayIfPresent(options: {
12
+ readonly stateDir: string;
13
+ readonly zoneId: string;
14
+ }, dependencies?: GatewayRecoveryDependencies): Promise<{
15
+ readonly cleanedUp: boolean;
16
+ readonly cleanupWarning?: string;
17
+ readonly killedPid: number | null;
18
+ }>;
19
+ //# sourceMappingURL=gateway-recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-recovery.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-recovery.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAiJnG,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,0BAA0B,CAAC;IACxE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,wBAAwB,CAAC;IACpE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED,wBAAsB,+BAA+B,CACpD,OAAO,EAAE;IACR,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB,EACD,YAAY,GAAE,2BAAgC,GAC5C,OAAO,CAAC;IACV,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC,CAwCD"}
@@ -0,0 +1,147 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ import { deleteGatewayRuntimeRecord, loadGatewayRuntimeRecord } from './gateway-runtime-record.js';
4
+ const execFileAsync = promisify(execFile);
5
+ function isProcessAlive(pid) {
6
+ try {
7
+ process.kill(pid, 0);
8
+ return true;
9
+ }
10
+ catch (error) {
11
+ if (typeof error === 'object' && error !== null && 'code' in error) {
12
+ if (error.code === 'EPERM') {
13
+ return true;
14
+ }
15
+ if (error.code === 'ESRCH') {
16
+ return false;
17
+ }
18
+ }
19
+ throw error;
20
+ }
21
+ }
22
+ async function readProcessCommand(pid) {
23
+ try {
24
+ const { stdout } = await execFileAsync('ps', ['-p', String(pid), '-o', 'command=']);
25
+ const command = stdout.trim();
26
+ return command.length > 0 ? command : null;
27
+ }
28
+ catch (error) {
29
+ if (typeof error === 'object' && error !== null && 'code' in error && error.code === 1) {
30
+ return null;
31
+ }
32
+ throw error;
33
+ }
34
+ }
35
+ function isManagedGatewayProcess(command) {
36
+ return /\b(qemu-system|krun)\b/u.test(command);
37
+ }
38
+ function writeRecoveryLog(message) {
39
+ process.stderr.write(`[agent-vm] ${message}\n`);
40
+ }
41
+ function killProcess(pid, signal) {
42
+ try {
43
+ process.kill(pid, signal);
44
+ }
45
+ catch (error) {
46
+ if (typeof error === 'object' && error !== null && 'code' in error && error.code === 'ESRCH') {
47
+ return;
48
+ }
49
+ if (typeof error === 'object' && error !== null && 'code' in error && error.code === 'EPERM') {
50
+ throw new Error(`Permission denied while sending ${signal} to orphaned gateway pid ${pid}. The process is still running and may require elevated privileges to terminate.`, { cause: error });
51
+ }
52
+ throw error;
53
+ }
54
+ }
55
+ function isNoSuchProcessError(error) {
56
+ return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ESRCH';
57
+ }
58
+ async function sleep(delayMs) {
59
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
60
+ }
61
+ async function waitForExit(options) {
62
+ const deadline = Date.now() + options.timeoutMs;
63
+ while (Date.now() < deadline) {
64
+ if (!options.processIsAlive(options.pid)) {
65
+ return true;
66
+ }
67
+ // oxlint-disable-next-line no-await-in-loop -- polling loop must wait between liveness checks
68
+ await options.sleep(100);
69
+ }
70
+ return !options.processIsAlive(options.pid);
71
+ }
72
+ async function killOrphanedGatewayProcess(runtimeRecord, dependencies) {
73
+ if (!dependencies.isProcessAlive(runtimeRecord.qemuPid)) {
74
+ return null;
75
+ }
76
+ const processCommand = await dependencies.readProcessCommand(runtimeRecord.qemuPid);
77
+ if (!processCommand || !isManagedGatewayProcess(processCommand)) {
78
+ throw new Error(`Gateway runtime record for zone '${runtimeRecord.zoneId}' points at unexpected live process ${runtimeRecord.qemuPid}: ${processCommand ?? '(command unavailable)'}.`);
79
+ }
80
+ try {
81
+ dependencies.killProcess(runtimeRecord.qemuPid, 'SIGTERM');
82
+ }
83
+ catch (error) {
84
+ if (!isNoSuchProcessError(error)) {
85
+ throw error;
86
+ }
87
+ }
88
+ if (await waitForExit({
89
+ pid: runtimeRecord.qemuPid,
90
+ processIsAlive: dependencies.isProcessAlive,
91
+ sleep: dependencies.sleep,
92
+ timeoutMs: 2_000,
93
+ })) {
94
+ return runtimeRecord.qemuPid;
95
+ }
96
+ try {
97
+ dependencies.killProcess(runtimeRecord.qemuPid, 'SIGKILL');
98
+ }
99
+ catch (error) {
100
+ if (!isNoSuchProcessError(error)) {
101
+ throw error;
102
+ }
103
+ }
104
+ if (await waitForExit({
105
+ pid: runtimeRecord.qemuPid,
106
+ processIsAlive: dependencies.isProcessAlive,
107
+ sleep: dependencies.sleep,
108
+ timeoutMs: 2_000,
109
+ })) {
110
+ return runtimeRecord.qemuPid;
111
+ }
112
+ throw new Error(`Failed to terminate orphaned gateway VM process ${runtimeRecord.qemuPid} for zone '${runtimeRecord.zoneId}'.`);
113
+ }
114
+ export async function cleanupOrphanedGatewayIfPresent(options, dependencies = {}) {
115
+ const log = dependencies.log ?? writeRecoveryLog;
116
+ const runtimeRecord = await (dependencies.loadGatewayRuntimeRecord ?? loadGatewayRuntimeRecord)(options.stateDir, { log });
117
+ if (!runtimeRecord) {
118
+ return { cleanedUp: false, killedPid: null };
119
+ }
120
+ log(`Found persisted gateway runtime for zone '${runtimeRecord.zoneId}' (pid ${runtimeRecord.qemuPid}, vm ${runtimeRecord.vmId}).`);
121
+ const killedPid = await killOrphanedGatewayProcess(runtimeRecord, {
122
+ isProcessAlive: dependencies.isProcessAlive ?? isProcessAlive,
123
+ killProcess: dependencies.killProcess ?? killProcess,
124
+ readProcessCommand: dependencies.readProcessCommand ?? readProcessCommand,
125
+ sleep: dependencies.sleep ?? sleep,
126
+ });
127
+ try {
128
+ await (dependencies.deleteGatewayRuntimeRecord ?? deleteGatewayRuntimeRecord)(options.stateDir);
129
+ }
130
+ catch (error) {
131
+ const cleanupWarning = `Failed to remove stale gateway runtime record for zone '${runtimeRecord.zoneId}' at '${options.stateDir}': ${error instanceof Error ? error.message : JSON.stringify(error)}`;
132
+ log(cleanupWarning);
133
+ return {
134
+ cleanedUp: false,
135
+ cleanupWarning,
136
+ killedPid,
137
+ };
138
+ }
139
+ log(killedPid === null
140
+ ? `Removed stale gateway runtime record for zone '${runtimeRecord.zoneId}' after confirming the orphaned process was already gone.`
141
+ : `Removed stale gateway runtime record for zone '${runtimeRecord.zoneId}' after terminating orphaned gateway pid ${killedPid}.`);
142
+ return {
143
+ cleanedUp: true,
144
+ killedPid,
145
+ };
146
+ }
147
+ //# sourceMappingURL=gateway-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-recovery.js","sourceRoot":"","sources":["../../src/gateway/gateway-recovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type GatewayProcessSpec, type GatewayType } from '@agent-vm/gateway-interface';
2
+ import { type ManagedVm } from '@agent-vm/gondolin-adapter';
3
+ import { z } from 'zod';
4
+ export declare const gatewayRuntimeRecordSchema: z.ZodObject<{
5
+ createdAt: z.ZodString;
6
+ gatewayType: z.ZodEnum<{
7
+ openclaw: "openclaw";
8
+ worker: "worker";
9
+ }>;
10
+ guestListenPort: z.ZodNumber;
11
+ ingressPort: z.ZodNumber;
12
+ projectNamespace: z.ZodString;
13
+ qemuPid: z.ZodNumber;
14
+ sessionLabel: z.ZodString;
15
+ vmId: z.ZodString;
16
+ zoneId: z.ZodString;
17
+ }, z.core.$strip>;
18
+ export type GatewayRuntimeRecord = z.infer<typeof gatewayRuntimeRecordSchema>;
19
+ export type GatewayRuntimeLog = (message: string) => void;
20
+ export declare function loadGatewayRuntimeRecord(stateDirectory: string, options?: {
21
+ readonly log?: GatewayRuntimeLog;
22
+ }): Promise<GatewayRuntimeRecord | null>;
23
+ export declare function writeGatewayRuntimeRecord(stateDirectory: string, record: GatewayRuntimeRecord): Promise<void>;
24
+ export declare function deleteGatewayRuntimeRecord(stateDirectory: string): Promise<void>;
25
+ export declare function buildGatewayRuntimeRecord(options: {
26
+ readonly gatewayType: GatewayType;
27
+ readonly ingressPort: number;
28
+ readonly managedVm: ManagedVm;
29
+ readonly processSpec: GatewayProcessSpec;
30
+ readonly projectNamespace: string;
31
+ readonly zoneId: string;
32
+ }): GatewayRuntimeRecord;
33
+ //# sourceMappingURL=gateway-runtime-record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-runtime-record.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-runtime-record.ts"],"names":[],"mappings":"AAGA,OAAO,EAGN,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAY,CAAC,EAAE,MAAM,KAAK,CAAC;AAElC,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;iBAUrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAwC1D,wBAAsB,wBAAwB,CAC7C,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE;IACR,QAAQ,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC;CAC5B,GACJ,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAyBtC;AAED,wBAAsB,yBAAyB,CAC9C,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAsB,0BAA0B,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtF;AAmCD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IAClD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB,GAAG,oBAAoB,CAcvB"}
@@ -0,0 +1,114 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { buildGatewaySessionLabel, gatewayTypeValues, } from '@agent-vm/gateway-interface';
4
+ import { writeFileAtomically } from '@agent-vm/gondolin-adapter';
5
+ import { ZodError, z } from 'zod';
6
+ export const gatewayRuntimeRecordSchema = z.object({
7
+ createdAt: z.string().datetime(),
8
+ gatewayType: z.enum(gatewayTypeValues),
9
+ guestListenPort: z.number().int().positive(),
10
+ ingressPort: z.number().int().positive(),
11
+ projectNamespace: z.string().min(1),
12
+ qemuPid: z.number().int().positive(),
13
+ sessionLabel: z.string().min(1),
14
+ vmId: z.string().min(1),
15
+ zoneId: z.string().min(1),
16
+ });
17
+ const gatewayRuntimeRecordFileName = 'gateway-runtime.json';
18
+ function resolveGatewayRuntimeRecordPath(stateDirectory) {
19
+ return path.join(stateDirectory, gatewayRuntimeRecordFileName);
20
+ }
21
+ function resolveInvalidGatewayRuntimeRecordPath(stateDirectory) {
22
+ return path.join(stateDirectory, `gateway-runtime.invalid.${Date.now()}.json`);
23
+ }
24
+ function isObjectRecord(value) {
25
+ return typeof value === 'object' && value !== null;
26
+ }
27
+ async function quarantineMalformedGatewayRuntimeRecord(stateDirectory, runtimeRecordPath, log) {
28
+ const invalidRuntimeRecordPath = resolveInvalidGatewayRuntimeRecordPath(stateDirectory);
29
+ try {
30
+ await fs.rename(runtimeRecordPath, invalidRuntimeRecordPath);
31
+ log(`Quarantined malformed gateway runtime record '${runtimeRecordPath}' to '${invalidRuntimeRecordPath}'.`);
32
+ return;
33
+ }
34
+ catch (error) {
35
+ await fs.rm(runtimeRecordPath, { force: true });
36
+ log(`Deleted malformed gateway runtime record '${runtimeRecordPath}' after quarantine rename failed: ${error instanceof Error ? error.message : JSON.stringify(error)}`);
37
+ }
38
+ }
39
+ function writeGatewayRuntimeLog(message) {
40
+ process.stderr.write(`[agent-vm] ${message}\n`);
41
+ }
42
+ export async function loadGatewayRuntimeRecord(stateDirectory, options = {}) {
43
+ const runtimeRecordPath = resolveGatewayRuntimeRecordPath(stateDirectory);
44
+ let rawRuntimeRecord;
45
+ try {
46
+ rawRuntimeRecord = await fs.readFile(runtimeRecordPath, 'utf8');
47
+ }
48
+ catch (error) {
49
+ if (typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT') {
50
+ return null;
51
+ }
52
+ throw error;
53
+ }
54
+ try {
55
+ return gatewayRuntimeRecordSchema.parse(JSON.parse(rawRuntimeRecord));
56
+ }
57
+ catch (error) {
58
+ if (!(error instanceof SyntaxError) && !(error instanceof ZodError)) {
59
+ throw error;
60
+ }
61
+ await quarantineMalformedGatewayRuntimeRecord(stateDirectory, runtimeRecordPath, options.log ?? writeGatewayRuntimeLog);
62
+ return null;
63
+ }
64
+ }
65
+ export async function writeGatewayRuntimeRecord(stateDirectory, record) {
66
+ const runtimeRecordPath = resolveGatewayRuntimeRecordPath(stateDirectory);
67
+ await fs.mkdir(stateDirectory, { recursive: true });
68
+ await writeFileAtomically(runtimeRecordPath, `${JSON.stringify(gatewayRuntimeRecordSchema.parse(record), null, 2)}\n`, { mode: 0o600 });
69
+ }
70
+ export async function deleteGatewayRuntimeRecord(stateDirectory) {
71
+ await fs.rm(resolveGatewayRuntimeRecordPath(stateDirectory), { force: true });
72
+ }
73
+ function resolveManagedVmQemuPid(managedVm) {
74
+ const vmInstance = managedVm.getVmInstance();
75
+ if (!isObjectRecord(vmInstance)) {
76
+ throw new Error('Gateway VM runtime is missing its live VM instance.');
77
+ }
78
+ // Level 1 currently relies on Gondolin's live runtime object graph:
79
+ // VM -> SandboxServer -> SandboxController -> child_process.ChildProcess.
80
+ // If Gondolin refactors that structure, we fail closed here instead of
81
+ // silently persisting an invalid pid into gateway-runtime.json.
82
+ const server = vmInstance.server;
83
+ if (!isObjectRecord(server)) {
84
+ throw new Error('Gateway VM runtime is missing its live sandbox server.');
85
+ }
86
+ const controller = server.controller;
87
+ if (!isObjectRecord(controller)) {
88
+ throw new Error('Gateway VM runtime is missing its live sandbox controller.');
89
+ }
90
+ const child = controller.child;
91
+ if (!isObjectRecord(child)) {
92
+ throw new Error('Gateway VM runtime is missing its live QEMU child process.');
93
+ }
94
+ const qemuPid = child.pid;
95
+ if (typeof qemuPid !== 'number' || !Number.isInteger(qemuPid) || qemuPid <= 0) {
96
+ throw new Error('Gateway VM runtime is missing its live QEMU pid.');
97
+ }
98
+ return qemuPid;
99
+ }
100
+ export function buildGatewayRuntimeRecord(options) {
101
+ const gatewayType = gatewayRuntimeRecordSchema.shape.gatewayType.parse(options.gatewayType);
102
+ return {
103
+ createdAt: new Date().toISOString(),
104
+ gatewayType,
105
+ guestListenPort: options.processSpec.guestListenPort,
106
+ ingressPort: options.ingressPort,
107
+ projectNamespace: options.projectNamespace,
108
+ qemuPid: resolveManagedVmQemuPid(options.managedVm),
109
+ sessionLabel: buildGatewaySessionLabel(options.projectNamespace, options.zoneId),
110
+ vmId: options.managedVm.id,
111
+ zoneId: options.zoneId,
112
+ };
113
+ }
114
+ //# sourceMappingURL=gateway-runtime-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-runtime-record.js","sourceRoot":"","sources":["../../src/gateway/gateway-runtime-record.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { GatewayLifecycle, GatewayZoneConfig } from '@agent-vm/gateway-interface';
2
+ import { type ManagedVm } from '@agent-vm/gondolin-adapter';
3
+ import { type GatewayImageBuilderDependencies } from './gateway-image-builder.js';
4
+ import { cleanupOrphanedGatewayIfPresent } from './gateway-recovery.js';
5
+ import { type GatewayRuntimeRecord } from './gateway-runtime-record.js';
6
+ import { type GatewayManagedVmFactoryOptions, type GatewayZoneStartResult, type StartGatewayZoneOptions } from './gateway-zone-support.js';
7
+ export interface GatewayManagerDependencies extends GatewayImageBuilderDependencies {
8
+ readonly cleanupOrphanedGatewayIfPresent?: typeof cleanupOrphanedGatewayIfPresent;
9
+ readonly createManagedVm?: (options: GatewayManagedVmFactoryOptions) => Promise<ManagedVm>;
10
+ readonly loadGatewayLifecycle?: (type: GatewayZoneConfig['gateway']['type']) => GatewayLifecycle;
11
+ readonly writeGatewayRuntimeRecord?: (stateDirectory: string, record: GatewayRuntimeRecord) => Promise<void>;
12
+ }
13
+ export declare function startGatewayZone(options: StartGatewayZoneOptions, dependencies?: GatewayManagerDependencies): Promise<GatewayZoneStartResult>;
14
+ //# sourceMappingURL=gateway-zone-orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-zone-orchestrator.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-zone-orchestrator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEX,gBAAgB,EAChB,iBAAiB,EACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEN,KAAK,SAAS,EACd,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EAEN,KAAK,+BAA+B,EACpC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAGN,KAAK,oBAAoB,EACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAIN,KAAK,8BAA8B,EACnC,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,0BAA2B,SAAQ,+BAA+B;IAClF,QAAQ,CAAC,+BAA+B,CAAC,EAAE,OAAO,+BAA+B,CAAC;IAClF,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3F,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,gBAAgB,CAAC;IACjG,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CACpC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,oBAAoB,KACxB,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAyDD,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,uBAAuB,EAChC,YAAY,GAAE,0BAA+B,GAC3C,OAAO,CAAC,sBAAsB,CAAC,CA0IjC"}
@@ -0,0 +1,161 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { createManagedVm as createManagedVmFromCore, } from '@agent-vm/gondolin-adapter';
4
+ import { runTaskWithResult } from '../shared/run-task.js';
5
+ import { resolveZoneSecrets } from './credential-manager.js';
6
+ import { buildGatewayImage, } from './gateway-image-builder.js';
7
+ import { loadGatewayLifecycle } from './gateway-lifecycle-loader.js';
8
+ import { cleanupOrphanedGatewayIfPresent } from './gateway-recovery.js';
9
+ import { buildGatewayRuntimeRecord, writeGatewayRuntimeRecord, } from './gateway-runtime-record.js';
10
+ import { findGatewayZone, mapSystemGatewayZoneToLifecycleZone, } from './gateway-zone-support.js';
11
+ function selectGatewayImageProfile(options) {
12
+ const profile = options.systemConfig.imageProfiles.gateways[options.zone.gateway.imageProfile];
13
+ if (!profile) {
14
+ throw new Error(`Gateway image profile '${options.zone.gateway.imageProfile}' is not configured.`);
15
+ }
16
+ return profile;
17
+ }
18
+ async function waitForHealth(options) {
19
+ const attempt = options.attempt ?? 0;
20
+ const maxAttempts = options.maxAttempts ?? 30;
21
+ const lastObservation = options.lastObservation ?? 'none';
22
+ if (attempt >= maxAttempts) {
23
+ throw new Error(`Gateway readiness check failed after ${maxAttempts} attempts. Last observation: ${lastObservation}.`);
24
+ }
25
+ const healthCommand = options.healthCheck.type === 'http'
26
+ ? `curl -sS -o /dev/null -w "%{http_code}" --max-time 2 http://127.0.0.1:${options.healthCheck.port}${options.healthCheck.path} 2>/dev/null || echo 000`
27
+ : options.healthCheck.command;
28
+ const result = await options.managedVm.exec(healthCommand);
29
+ const currentObservation = options.healthCheck.type === 'http'
30
+ ? `http ${result.stdout.trim() || '(empty)'}`
31
+ : `exit ${result.exitCode}`;
32
+ if ((options.healthCheck.type === 'http' && result.stdout.trim().startsWith('2')) ||
33
+ (options.healthCheck.type === 'command' && result.exitCode === 0)) {
34
+ return;
35
+ }
36
+ await new Promise((resolve) => setTimeout(resolve, 500));
37
+ await waitForHealth({
38
+ attempt: attempt + 1,
39
+ healthCheck: options.healthCheck,
40
+ lastObservation: currentObservation,
41
+ managedVm: options.managedVm,
42
+ maxAttempts,
43
+ });
44
+ }
45
+ export async function startGatewayZone(options, dependencies = {}) {
46
+ const runTaskStep = options.runTask ?? (async (_title, fn) => await fn());
47
+ const zone = options.zoneOverride ?? findGatewayZone(options.systemConfig, options.zoneId);
48
+ const lifecycleZone = mapSystemGatewayZoneToLifecycleZone(zone);
49
+ await runTaskStep('Cleaning orphaned gateway runtime', async () => {
50
+ await (dependencies.cleanupOrphanedGatewayIfPresent ?? cleanupOrphanedGatewayIfPresent)({
51
+ stateDir: zone.gateway.stateDir,
52
+ zoneId: zone.id,
53
+ });
54
+ });
55
+ const lifecycle = (dependencies.loadGatewayLifecycle ?? loadGatewayLifecycle)(zone.gateway.type);
56
+ const resolvedSecrets = await runTaskWithResult(runTaskStep, 'Resolving zone secrets', async () => await resolveZoneSecrets({
57
+ systemConfig: options.systemConfig,
58
+ zoneId: zone.id,
59
+ secretResolver: options.secretResolver,
60
+ }));
61
+ const image = await runTaskWithResult(runTaskStep, 'Building gateway image', async () => {
62
+ const gatewayImageProfile = selectGatewayImageProfile({
63
+ systemConfig: options.systemConfig,
64
+ zone,
65
+ });
66
+ return await buildGatewayImage({
67
+ buildConfigPath: gatewayImageProfile.buildConfig,
68
+ systemCacheIdentifierPath: options.systemConfig.systemCacheIdentifierPath,
69
+ cacheDir: path.join(options.systemConfig.cacheDir, 'gateway-images', zone.gateway.imageProfile),
70
+ }, {
71
+ ...(dependencies.buildImage ? { buildImage: dependencies.buildImage } : {}),
72
+ ...(dependencies.loadBuildConfig ? { loadBuildConfig: dependencies.loadBuildConfig } : {}),
73
+ });
74
+ });
75
+ await fs.mkdir(zone.gateway.stateDir, { recursive: true });
76
+ await fs.mkdir(zone.gateway.workspaceDir, { recursive: true });
77
+ await runTaskStep('Preparing host state', async () => {
78
+ await lifecycle.prepareHostState?.(lifecycleZone, options.secretResolver);
79
+ });
80
+ const vmSpec = lifecycle.buildVmSpec({
81
+ controllerPort: options.systemConfig.host.controllerPort,
82
+ projectNamespace: options.systemConfig.host.projectNamespace,
83
+ resolvedSecrets,
84
+ tcpPool: options.systemConfig.tcpPool,
85
+ zone: lifecycleZone,
86
+ });
87
+ const processSpec = lifecycle.buildProcessSpec(lifecycleZone, resolvedSecrets);
88
+ const environment = {
89
+ ...vmSpec.environment,
90
+ ...options.environmentOverride,
91
+ };
92
+ const tcpHosts = {
93
+ ...vmSpec.tcpHosts,
94
+ ...options.tcpHostsOverride,
95
+ };
96
+ const vfsMounts = {
97
+ ...vmSpec.vfsMounts,
98
+ ...options.vfsMountsOverride,
99
+ };
100
+ const createManagedVm = dependencies.createManagedVm ?? createManagedVmFromCore;
101
+ const managedVm = await runTaskWithResult(runTaskStep, 'Booting gateway VM', async () => await createManagedVm({
102
+ allowedHosts: vmSpec.allowedHosts,
103
+ cpus: zone.gateway.cpus,
104
+ env: environment,
105
+ imagePath: image.imagePath,
106
+ memory: zone.gateway.memory,
107
+ rootfsMode: vmSpec.rootfsMode,
108
+ secrets: vmSpec.mediatedSecrets,
109
+ sessionLabel: vmSpec.sessionLabel,
110
+ tcpHosts,
111
+ vfsMounts,
112
+ }));
113
+ await runTaskStep('Configuring gateway', async () => {
114
+ await managedVm.exec(processSpec.bootstrapCommand);
115
+ });
116
+ await runTaskStep('Starting gateway', async () => {
117
+ await managedVm.exec(processSpec.startCommand);
118
+ });
119
+ await runTaskStep('Waiting for readiness', async () => {
120
+ await waitForHealth({
121
+ healthCheck: processSpec.healthCheck,
122
+ managedVm,
123
+ });
124
+ });
125
+ managedVm.setIngressRoutes([
126
+ {
127
+ port: processSpec.guestListenPort,
128
+ prefix: '/',
129
+ stripPrefix: true,
130
+ },
131
+ ]);
132
+ const ingress = await managedVm.enableIngress({
133
+ listenPort: zone.gateway.port,
134
+ });
135
+ try {
136
+ await runTaskStep('Recording gateway runtime', async () => {
137
+ await (dependencies.writeGatewayRuntimeRecord ?? writeGatewayRuntimeRecord)(zone.gateway.stateDir, buildGatewayRuntimeRecord({
138
+ gatewayType: zone.gateway.type,
139
+ ingressPort: ingress.port,
140
+ managedVm,
141
+ processSpec,
142
+ projectNamespace: options.systemConfig.host.projectNamespace,
143
+ zoneId: zone.id,
144
+ }));
145
+ });
146
+ }
147
+ catch (error) {
148
+ await managedVm.close().catch((closeError) => {
149
+ process.stderr.write(`[agent-vm] Failed to close gateway VM after runtime-record write failure: ${closeError instanceof Error ? closeError.message : JSON.stringify(closeError)}\n`);
150
+ });
151
+ throw error;
152
+ }
153
+ return {
154
+ image,
155
+ ingress,
156
+ processSpec,
157
+ vm: managedVm,
158
+ zone,
159
+ };
160
+ }
161
+ //# sourceMappingURL=gateway-zone-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-zone-orchestrator.js","sourceRoot":"","sources":["../../src/gateway/gateway-zone-orchestrator.ts"],"names":[],"mappings":"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"}