@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,247 @@
1
+ import { execa } from 'execa';
2
+ import { scrubGithubTokenFromOutput } from './git-auth-support.js';
3
+ const GIT_OPERATION_TIMEOUT_MS = 120_000;
4
+ export class PushBranchesValidationError extends Error {
5
+ }
6
+ function writePushFlowLog(message) {
7
+ process.stderr.write(`[git-push-operations] ${message}\n`);
8
+ }
9
+ function parseRepoFromUrl(repoUrl) {
10
+ const cleaned = repoUrl.replace(/\.git$/, '');
11
+ const urlPattern = /(?:https?:\/\/)?github\.com\/([^/]+\/[^/]+)$/u;
12
+ const match = urlPattern.exec(cleaned);
13
+ if (match?.[1]) {
14
+ return match[1];
15
+ }
16
+ if (/^[^\s/]+\/[^\s/]+$/u.test(cleaned)) {
17
+ return cleaned;
18
+ }
19
+ throw new PushBranchesValidationError(`Invalid GitHub repository: ${repoUrl}`);
20
+ }
21
+ function buildPushUrl(repoUrl, githubToken) {
22
+ return `https://x-access-token:${githubToken}@github.com/${parseRepoFromUrl(repoUrl)}.git`;
23
+ }
24
+ function sanitizeBranchName(name) {
25
+ return name.replace(/[^a-zA-Z0-9\-_./]/gu, '-');
26
+ }
27
+ async function git(options) {
28
+ const result = await execa('git', [...options.args], {
29
+ cwd: options.cwd,
30
+ reject: false,
31
+ timeout: GIT_OPERATION_TIMEOUT_MS,
32
+ });
33
+ const normalized = {
34
+ stdout: result.stdout,
35
+ stderr: result.stderr,
36
+ exitCode: result.exitCode ?? 0,
37
+ };
38
+ if (options.reject === true && normalized.exitCode !== 0) {
39
+ throw new Error(`git ${options.args.join(' ')} failed\n${normalized.stdout}\n${normalized.stderr}`.trim());
40
+ }
41
+ return normalized;
42
+ }
43
+ async function gitStdout(cwd, args) {
44
+ return (await git({ args, cwd, reject: true })).stdout.trim();
45
+ }
46
+ function parseCommitSummaries(output) {
47
+ if (output.trim().length === 0)
48
+ return [];
49
+ return output
50
+ .trim()
51
+ .split('\n')
52
+ .map((line) => {
53
+ const [sha = '', subject = '', author = '', date = ''] = line.split('\t');
54
+ const summary = {
55
+ sha,
56
+ subject,
57
+ };
58
+ if (author) {
59
+ summary.author = author;
60
+ }
61
+ if (date) {
62
+ summary.date = date;
63
+ }
64
+ return summary;
65
+ });
66
+ }
67
+ async function commitSummaries(cwd, range, options) {
68
+ const format = options?.includeAuthorDate === true ? '%H%x09%s%x09%an%x09%aI' : '%H%x09%s';
69
+ const result = await git({ cwd, args: ['log', range, `--format=${format}`], reject: false });
70
+ if (result.exitCode !== 0)
71
+ return [];
72
+ return parseCommitSummaries(result.stdout);
73
+ }
74
+ async function refExists(cwd, ref) {
75
+ return ((await git({ cwd, args: ['rev-parse', '--verify', '--quiet', ref], reject: false }))
76
+ .exitCode === 0);
77
+ }
78
+ async function countRange(cwd, range) {
79
+ const result = await git({ cwd, args: ['rev-list', '--count', range], reject: false });
80
+ if (result.exitCode !== 0)
81
+ return 0;
82
+ return Number.parseInt(result.stdout.trim(), 10) || 0;
83
+ }
84
+ async function fetchRemoteRefs(options) {
85
+ const pushUrl = buildPushUrl(options.repoUrl, options.githubToken);
86
+ const result = await git({
87
+ cwd: options.cwd,
88
+ args: [
89
+ 'fetch',
90
+ '--prune',
91
+ pushUrl,
92
+ `${options.defaultBranch}:refs/remotes/origin/${options.defaultBranch}`,
93
+ ],
94
+ reject: false,
95
+ });
96
+ if (result.exitCode !== 0) {
97
+ const detail = scrubGithubTokenFromOutput(`${result.stdout}\n${result.stderr}`).trim();
98
+ throw new Error(`git fetch failed\n${detail}`);
99
+ }
100
+ }
101
+ async function remoteBranchHead(cwd, branchName) {
102
+ if (!(await refExists(cwd, `refs/remotes/origin/${branchName}`)))
103
+ return null;
104
+ return await gitStdout(cwd, ['rev-parse', `refs/remotes/origin/${branchName}`]);
105
+ }
106
+ async function pushBranch(options) {
107
+ const result = await git({
108
+ cwd: options.cwd,
109
+ args: [
110
+ 'push',
111
+ buildPushUrl(options.repoUrl, options.githubToken),
112
+ `${sanitizeBranchName(options.branchName)}:refs/heads/${sanitizeBranchName(options.branchName)}`,
113
+ ],
114
+ reject: false,
115
+ });
116
+ if (result.exitCode !== 0) {
117
+ const errorDetail = scrubGithubTokenFromOutput(`${result.stdout}\n${result.stderr}`).trim();
118
+ writePushFlowLog(`git push failed for ${options.repoUrl} ${sanitizeBranchName(options.branchName)}: ${errorDetail}`);
119
+ throw new Error(`git push failed\n${errorDetail}`);
120
+ }
121
+ }
122
+ async function buildBranchState(options) {
123
+ const localHead = await gitStdout(options.cwd, ['rev-parse', 'HEAD']);
124
+ const pushedRemoteBranchHead = await remoteBranchHead(options.cwd, options.branchName);
125
+ const remoteDefaultRef = `refs/remotes/origin/${options.defaultBranch}`;
126
+ const remoteDefaultHead = (await refExists(options.cwd, remoteDefaultRef))
127
+ ? await gitStdout(options.cwd, ['rev-parse', remoteDefaultRef])
128
+ : '';
129
+ const defaultRange = remoteDefaultHead ? `${remoteDefaultRef}..HEAD` : '';
130
+ const commitsOnBranch = defaultRange
131
+ ? await commitSummaries(options.cwd, defaultRange, { includeAuthorDate: true })
132
+ : [];
133
+ const pushedRange = options.previousRemoteBranchHead
134
+ ? `${options.previousRemoteBranchHead}..HEAD`
135
+ : defaultRange;
136
+ const pushedInThisCall = pushedRange ? await commitSummaries(options.cwd, pushedRange) : [];
137
+ const divergence = remoteDefaultHead
138
+ ? {
139
+ aheadOfDefault: await countRange(options.cwd, `${remoteDefaultRef}..HEAD`),
140
+ behindDefault: await countRange(options.cwd, `HEAD..${remoteDefaultRef}`),
141
+ }
142
+ : { aheadOfDefault: 0, behindDefault: 0 };
143
+ return {
144
+ localHead,
145
+ ...(pushedRemoteBranchHead ? { remoteBranchHead: pushedRemoteBranchHead } : {}),
146
+ defaultBranch: options.defaultBranch,
147
+ remoteDefaultHead,
148
+ commitsOnBranch,
149
+ pushedInThisCall,
150
+ remoteAlreadyHadBranch: options.previousRemoteBranchHead !== null,
151
+ divergence,
152
+ };
153
+ }
154
+ export async function pushBranchesForTask(options) {
155
+ for (const branch of options.branches) {
156
+ if (!branch.branchName.startsWith(options.activeTask.branchPrefix)) {
157
+ throw new PushBranchesValidationError(`Branch '${branch.branchName}' must start with '${options.activeTask.branchPrefix}'.`);
158
+ }
159
+ const repo = options.activeTask.repos.find((candidate) => candidate.repoUrl === branch.repoUrl);
160
+ if (!repo) {
161
+ throw new PushBranchesValidationError(`Repo '${branch.repoUrl}' is not registered for active task '${options.activeTask.taskId}'.`);
162
+ }
163
+ }
164
+ const results = [];
165
+ for (const branch of options.branches) {
166
+ // Push flow intentionally stays sequential so git state observation,
167
+ // remote ref fetches, and error reporting remain easy to reason about.
168
+ // oxlint-disable-next-line eslint/no-await-in-loop
169
+ const repo = options.activeTask.repos.find((candidate) => candidate.repoUrl === branch.repoUrl);
170
+ if (!repo) {
171
+ throw new PushBranchesValidationError(`Repo '${branch.repoUrl}' is not registered for active task '${options.activeTask.taskId}'.`);
172
+ }
173
+ const branchName = sanitizeBranchName(branch.branchName);
174
+ try {
175
+ if (branchName === repo.baseBranch) {
176
+ results.push({
177
+ repoUrl: branch.repoUrl,
178
+ branch: branchName,
179
+ success: false,
180
+ error: `Refusing to push: you are on the default branch "${repo.baseBranch}". Create an ${options.activeTask.branchPrefix} branch first and move your commits to it.`,
181
+ });
182
+ continue;
183
+ }
184
+ // oxlint-disable-next-line eslint/no-await-in-loop
185
+ await fetchRemoteRefs({
186
+ cwd: repo.hostWorkspacePath,
187
+ defaultBranch: repo.baseBranch,
188
+ repoUrl: branch.repoUrl,
189
+ githubToken: options.githubToken,
190
+ });
191
+ // oxlint-disable-next-line eslint/no-await-in-loop
192
+ const previousRemoteBranchHead = await remoteBranchHead(repo.hostWorkspacePath, branchName);
193
+ // oxlint-disable-next-line eslint/no-await-in-loop
194
+ const localHead = await gitStdout(repo.hostWorkspacePath, ['rev-parse', 'HEAD']);
195
+ if (previousRemoteBranchHead === localHead) {
196
+ results.push({
197
+ repoUrl: branch.repoUrl,
198
+ branch: branchName,
199
+ success: false,
200
+ error: `Nothing new to push on ${branchName}. Local HEAD matches origin/${branchName} (${localHead}). Commit your work and call git-push again.`,
201
+ });
202
+ continue;
203
+ }
204
+ // oxlint-disable-next-line eslint/no-await-in-loop
205
+ await pushBranch({
206
+ repoUrl: branch.repoUrl,
207
+ branchName,
208
+ cwd: repo.hostWorkspacePath,
209
+ githubToken: options.githubToken,
210
+ });
211
+ // oxlint-disable-next-line eslint/no-await-in-loop
212
+ await git({
213
+ cwd: repo.hostWorkspacePath,
214
+ args: [
215
+ 'fetch',
216
+ '--prune',
217
+ buildPushUrl(branch.repoUrl, options.githubToken),
218
+ `${branchName}:refs/remotes/origin/${branchName}`,
219
+ ],
220
+ reject: false,
221
+ });
222
+ // oxlint-disable-next-line eslint/no-await-in-loop
223
+ const state = await buildBranchState({
224
+ cwd: repo.hostWorkspacePath,
225
+ branchName,
226
+ defaultBranch: repo.baseBranch,
227
+ previousRemoteBranchHead,
228
+ });
229
+ results.push({
230
+ repoUrl: branch.repoUrl,
231
+ branch: branchName,
232
+ success: true,
233
+ ...state,
234
+ });
235
+ }
236
+ catch (error) {
237
+ results.push({
238
+ repoUrl: branch.repoUrl,
239
+ branch: branchName,
240
+ success: false,
241
+ error: error instanceof Error ? error.message : String(error),
242
+ });
243
+ }
244
+ }
245
+ return { results };
246
+ }
247
+ //# sourceMappingURL=git-push-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-push-operations.js","sourceRoot":"","sources":["../../src/controller/git-push-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface HeartbeatSenderProps {
2
+ readonly callerUrl: string;
3
+ readonly cadenceMs?: number;
4
+ readonly setIntervalImpl?: (callback: () => void | Promise<void>, delayMs: number) => NodeJS.Timeout;
5
+ readonly clearIntervalImpl?: (handle: NodeJS.Timeout) => void;
6
+ readonly fetchImpl?: typeof fetch;
7
+ readonly logWarning?: (message: string) => void;
8
+ }
9
+ export interface HeartbeatHandle {
10
+ readonly stop: () => void;
11
+ }
12
+ export declare function startHeartbeatSender(requestTaskId: string, props: HeartbeatSenderProps): HeartbeatHandle;
13
+ //# sourceMappingURL=heartbeat-sender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat-sender.d.ts","sourceRoot":"","sources":["../../src/controller/heartbeat-sender.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,CAC1B,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACpC,OAAO,EAAE,MAAM,KACX,MAAM,CAAC,OAAO,CAAC;IACpB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;IAC9D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;CAC1B;AAMD,wBAAgB,oBAAoB,CACnC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,oBAAoB,GACzB,eAAe,CAiGjB"}
@@ -0,0 +1,94 @@
1
+ const HEARTBEAT_CADENCE_MS_DEFAULT = 10_000;
2
+ const HEARTBEAT_REQUEST_TIMEOUT_MS = 5_000;
3
+ const TERMINAL_STATUS_CODES = new Set([404, 410]);
4
+ function defaultLogWarning(message) {
5
+ process.stderr.write(`[heartbeat] ${message}\n`);
6
+ }
7
+ export function startHeartbeatSender(requestTaskId, props) {
8
+ const cadenceMs = props.cadenceMs ?? HEARTBEAT_CADENCE_MS_DEFAULT;
9
+ const setIntervalFn = props.setIntervalImpl ?? setInterval;
10
+ const clearIntervalFn = props.clearIntervalImpl ?? clearInterval;
11
+ const fetchFn = props.fetchImpl ?? fetch;
12
+ const logWarning = props.logWarning ?? defaultLogWarning;
13
+ const url = `${props.callerUrl.replace(/\/$/, '')}/tasks/${encodeURIComponent(requestTaskId)}/heartbeat`;
14
+ let stopped = false;
15
+ const timer = setIntervalFn(() => void tick(), cadenceMs);
16
+ let consecutiveFailureCount = 0;
17
+ let inFlight = false;
18
+ let activeAbort;
19
+ let activeTimeoutHandle;
20
+ function stopTicker() {
21
+ if (stopped) {
22
+ return;
23
+ }
24
+ stopped = true;
25
+ clearIntervalFn(timer);
26
+ activeAbort?.abort();
27
+ if (activeTimeoutHandle) {
28
+ clearTimeout(activeTimeoutHandle);
29
+ }
30
+ }
31
+ function recordHeartbeatFailure(message) {
32
+ consecutiveFailureCount += 1;
33
+ if (consecutiveFailureCount === 1) {
34
+ logWarning(message);
35
+ return;
36
+ }
37
+ if (consecutiveFailureCount === 3) {
38
+ logWarning(`task ${requestTaskId}: heartbeat has failed 3 consecutive times; the caller may treat this run as stalled`);
39
+ }
40
+ }
41
+ function resetHeartbeatFailures() {
42
+ consecutiveFailureCount = 0;
43
+ }
44
+ async function tick() {
45
+ if (stopped || inFlight) {
46
+ return;
47
+ }
48
+ inFlight = true;
49
+ const abort = new AbortController();
50
+ const timeoutHandle = setTimeout(() => abort.abort(), HEARTBEAT_REQUEST_TIMEOUT_MS);
51
+ activeAbort = abort;
52
+ activeTimeoutHandle = timeoutHandle;
53
+ try {
54
+ const response = await fetchFn(url, {
55
+ method: 'POST',
56
+ signal: abort.signal,
57
+ });
58
+ if (TERMINAL_STATUS_CODES.has(response.status)) {
59
+ logWarning(`task ${requestTaskId}: caller returned HTTP ${String(response.status)} from ${url} - stopping heartbeat permanently`);
60
+ stopTicker();
61
+ return;
62
+ }
63
+ if (!response.ok) {
64
+ recordHeartbeatFailure(`task ${requestTaskId}: caller returned HTTP ${String(response.status)} from ${url}`);
65
+ return;
66
+ }
67
+ resetHeartbeatFailures();
68
+ }
69
+ catch (error) {
70
+ if (stopped && abort.signal.aborted) {
71
+ return;
72
+ }
73
+ const message = error instanceof Error ? error.message : String(error);
74
+ recordHeartbeatFailure(`task ${requestTaskId}: heartbeat POST failed to ${url}: ${message}`);
75
+ }
76
+ finally {
77
+ clearTimeout(timeoutHandle);
78
+ if (activeTimeoutHandle === timeoutHandle) {
79
+ activeTimeoutHandle = undefined;
80
+ }
81
+ if (activeAbort === abort) {
82
+ activeAbort = undefined;
83
+ }
84
+ inFlight = false;
85
+ }
86
+ }
87
+ void tick();
88
+ return {
89
+ stop() {
90
+ stopTicker();
91
+ },
92
+ };
93
+ }
94
+ //# sourceMappingURL=heartbeat-sender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat-sender.js","sourceRoot":"","sources":["../../src/controller/heartbeat-sender.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface ControllerClient {
2
+ destroyZone(zoneId: string, purge: boolean): Promise<unknown>;
3
+ enableZoneSsh(zoneId: string): Promise<unknown>;
4
+ execInZone?(zoneId: string, command: string): Promise<unknown>;
5
+ getControllerStatus(): Promise<unknown>;
6
+ getZoneLogs(zoneId: string): Promise<unknown>;
7
+ listLeases(): Promise<unknown>;
8
+ refreshZoneCredentials(zoneId: string): Promise<unknown>;
9
+ releaseLease(leaseId: string): Promise<void>;
10
+ stopController(): Promise<unknown>;
11
+ upgradeZone(zoneId: string): Promise<unknown>;
12
+ }
13
+ export declare function createControllerClient(options: {
14
+ readonly baseUrl: string;
15
+ readonly fetchImpl?: (input: string | URL, init?: RequestInit) => Promise<Response>;
16
+ }): ControllerClient;
17
+ //# sourceMappingURL=controller-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller-client.d.ts","sourceRoot":"","sources":["../../../src/controller/http/controller-client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9C;AAkBD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACpF,GAAG,gBAAgB,CA+DnB"}
@@ -0,0 +1,76 @@
1
+ async function readJsonResponse(response, context) {
2
+ const responseBody = await response.text().catch(() => '(unreadable)');
3
+ if (!response.ok) {
4
+ throw new Error(`${context} failed with HTTP ${response.status}: ${responseBody}`);
5
+ }
6
+ try {
7
+ return JSON.parse(responseBody);
8
+ }
9
+ catch (error) {
10
+ throw new Error(`${context} returned invalid JSON: ${error instanceof Error ? error.message : String(error)}. Body: ${responseBody}`, { cause: error });
11
+ }
12
+ }
13
+ export function createControllerClient(options) {
14
+ const fetchImpl = options.fetchImpl ?? fetch;
15
+ const baseUrl = options.baseUrl.replace(/\/$/u, '');
16
+ return {
17
+ enableZoneSsh: async (zoneId) => {
18
+ const response = await fetchImpl(`${baseUrl}/zones/${zoneId}/enable-ssh`, {
19
+ method: 'POST',
20
+ });
21
+ return await readJsonResponse(response, `Enable SSH for zone '${zoneId}'`);
22
+ },
23
+ execInZone: async (zoneId, command) => {
24
+ const response = await fetchImpl(`${baseUrl}/zones/${zoneId}/execute-command`, {
25
+ body: JSON.stringify({ command }),
26
+ headers: {
27
+ 'content-type': 'application/json',
28
+ },
29
+ method: 'POST',
30
+ });
31
+ return await readJsonResponse(response, `Execute command in zone '${zoneId}'`);
32
+ },
33
+ destroyZone: async (zoneId, purge) => {
34
+ const response = await fetchImpl(`${baseUrl}/zones/${zoneId}/destroy`, {
35
+ body: JSON.stringify({ purge }),
36
+ headers: {
37
+ 'content-type': 'application/json',
38
+ },
39
+ method: 'POST',
40
+ });
41
+ return await readJsonResponse(response, `Destroy zone '${zoneId}'`);
42
+ },
43
+ getControllerStatus: async () => {
44
+ const response = await fetchImpl(`${baseUrl}/controller-status`);
45
+ return await readJsonResponse(response, 'Get controller status');
46
+ },
47
+ getZoneLogs: async (zoneId) => {
48
+ const response = await fetchImpl(`${baseUrl}/zones/${zoneId}/logs`);
49
+ return await readJsonResponse(response, `Get logs for zone '${zoneId}'`);
50
+ },
51
+ refreshZoneCredentials: async (zoneId) => {
52
+ const response = await fetchImpl(`${baseUrl}/zones/${zoneId}/credentials/refresh`, {
53
+ method: 'POST',
54
+ });
55
+ return await readJsonResponse(response, `Refresh credentials for zone '${zoneId}'`);
56
+ },
57
+ listLeases: async () => {
58
+ const response = await fetchImpl(`${baseUrl}/leases`);
59
+ return await readJsonResponse(response, 'List leases');
60
+ },
61
+ releaseLease: async (leaseId) => {
62
+ await fetchImpl(`${baseUrl}/lease/${leaseId}`, { method: 'DELETE' });
63
+ },
64
+ stopController: async () => {
65
+ const response = await fetchImpl(`${baseUrl}/stop-controller`, { method: 'POST' });
66
+ return await readJsonResponse(response, 'Stop controller');
67
+ },
68
+ upgradeZone: async (zoneId) => {
69
+ const response = await fetchImpl(`${baseUrl}/zones/${zoneId}/upgrade`, {
70
+ method: 'POST',
71
+ });
72
+ return await readJsonResponse(response, `Upgrade zone '${zoneId}'`);
73
+ },
74
+ };
75
+ }
76
+ //# sourceMappingURL=controller-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller-client.js","sourceRoot":"","sources":["../../../src/controller/http/controller-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { Lease, LeaseManager } from '../leases/lease-manager.js';
2
+ import type { PreparedWorkerTask, WorkerTaskInput } from '../worker-task-runner.js';
3
+ export declare class ControllerTaskNotReadyError extends Error {
4
+ }
5
+ export declare class ControllerRuntimeAtCapacityError extends Error {
6
+ }
7
+ export interface ControllerRouteOperations {
8
+ readonly destroyZone: (zoneId: string, purge: boolean) => Promise<unknown>;
9
+ readonly enableSshForZone?: (zoneId: string) => Promise<unknown>;
10
+ readonly execInZone?: (zoneId: string, command: string) => Promise<unknown>;
11
+ readonly getStatus: () => Promise<unknown>;
12
+ readonly getTaskState?: (zoneId: string, taskId: string) => Promise<unknown>;
13
+ readonly getZoneLogs: (zoneId: string) => Promise<unknown>;
14
+ readonly refreshZoneCredentials: (zoneId: string) => Promise<unknown>;
15
+ readonly prepareWorkerTask?: (zoneId: string, input: WorkerTaskInput) => Promise<PreparedWorkerTask>;
16
+ readonly executeWorkerTask?: (prepared: PreparedWorkerTask) => Promise<unknown>;
17
+ readonly closeTaskForZone?: (zoneId: string, taskId: string) => Promise<{
18
+ readonly status: 'closed';
19
+ }>;
20
+ readonly pushTaskBranches?: (zoneId: string, taskId: string, input: {
21
+ readonly branches: readonly {
22
+ readonly repoUrl: string;
23
+ readonly branchName: string;
24
+ }[];
25
+ }) => Promise<unknown>;
26
+ readonly pullDefaultForTask?: (zoneId: string, taskId: string, input: {
27
+ readonly repoUrl: string;
28
+ }) => Promise<unknown>;
29
+ readonly stopController?: () => Promise<unknown>;
30
+ readonly upgradeZone: (zoneId: string) => Promise<unknown>;
31
+ }
32
+ export type ControllerLeaseManager = Pick<LeaseManager, 'createLease' | 'getLease' | 'listLeases' | 'releaseLease'>;
33
+ export declare function readIdentityPemFromFile(identityFilePath: string): Promise<string>;
34
+ export declare function serializeLeaseForResponse(lease: Lease, readIdentityPem: (identityFilePath: string) => Promise<string>): Promise<{
35
+ readonly leaseId: string;
36
+ readonly ssh: {
37
+ readonly host: string;
38
+ readonly identityPem: string;
39
+ readonly knownHostsLine: string;
40
+ readonly port: number;
41
+ readonly user: string;
42
+ };
43
+ readonly tcpSlot: number;
44
+ readonly workdir: '/workspace';
45
+ }>;
46
+ //# sourceMappingURL=controller-http-route-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller-http-route-support.d.ts","sourceRoot":"","sources":["../../../src/controller/http/controller-http-route-support.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEpF,qBAAa,2BAA4B,SAAQ,KAAK;CAAG;AACzD,qBAAa,gCAAiC,SAAQ,KAAK;CAAG;AAE9D,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7E,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,QAAQ,CAAC,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAC5B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,eAAe,KAClB,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACV,OAAO,CAAC;QAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;QACN,QAAQ,CAAC,QAAQ,EAAE,SAAS;YAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;YACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;SAC5B,EAAE,CAAC;KACJ,KACG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;QACN,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KACzB,KACG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3D;AAED,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACxC,YAAY,EACZ,aAAa,GAAG,UAAU,GAAG,YAAY,GAAG,cAAc,CAC1D,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEvF;AAED,wBAAsB,yBAAyB,CAC9C,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC5D,OAAO,CAAC;IACV,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAC/B,CAAC,CAeD"}
@@ -0,0 +1,25 @@
1
+ import fs from 'node:fs/promises';
2
+ export class ControllerTaskNotReadyError extends Error {
3
+ }
4
+ export class ControllerRuntimeAtCapacityError extends Error {
5
+ }
6
+ export async function readIdentityPemFromFile(identityFilePath) {
7
+ return await fs.readFile(identityFilePath, 'utf8');
8
+ }
9
+ export async function serializeLeaseForResponse(lease, readIdentityPem) {
10
+ return {
11
+ leaseId: lease.id,
12
+ ssh: {
13
+ host: `tool-${lease.tcpSlot}.vm.host`,
14
+ identityPem: lease.sshAccess.identityFile
15
+ ? await readIdentityPem(lease.sshAccess.identityFile)
16
+ : '',
17
+ knownHostsLine: '',
18
+ port: 22,
19
+ user: lease.sshAccess.user ?? 'root',
20
+ },
21
+ tcpSlot: lease.tcpSlot,
22
+ workdir: '/workspace',
23
+ };
24
+ }
25
+ //# sourceMappingURL=controller-http-route-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller-http-route-support.js","sourceRoot":"","sources":["../../../src/controller/http/controller-http-route-support.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAKlC,MAAM,OAAO,2BAA4B,SAAQ,KAAK;CAAG;AACzD,MAAM,OAAO,gCAAiC,SAAQ,KAAK;CAAG;AA6C9D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,gBAAwB;IACrE,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC9C,KAAY,EACZ,eAA8D;IAa9D,OAAO;QACN,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,GAAG,EAAE;YACJ,IAAI,EAAE,QAAQ,KAAK,CAAC,OAAO,UAAU;YACrC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,YAAY;gBACxC,CAAC,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC;gBACrD,CAAC,CAAC,EAAE;YACL,cAAc,EAAE,EAAE;YAClB,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,MAAM;SACpC;QACD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,YAAY;KACrB,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { Hono } from 'hono';
2
+ import type { SystemConfig } from '../../config/system-config.js';
3
+ import { type ControllerLeaseManager, type ControllerRouteOperations } from './controller-http-route-support.js';
4
+ export declare function createControllerApp(options: {
5
+ readonly leaseManager: ControllerLeaseManager;
6
+ readonly readIdentityPem?: (identityFilePath: string) => Promise<string>;
7
+ readonly toolProfiles?: Record<string, {
8
+ readonly cpus: number;
9
+ readonly imageProfile: string;
10
+ readonly memory: string;
11
+ readonly workspaceRoot: string;
12
+ }>;
13
+ readonly zoneToolProfiles?: Record<string, string>;
14
+ readonly zoneIds?: ReadonlySet<string>;
15
+ readonly operations?: Partial<ControllerRouteOperations>;
16
+ }): Hono;
17
+ export declare function createControllerService(options: {
18
+ readonly leaseManager: ControllerLeaseManager;
19
+ readonly operations?: Partial<ControllerRouteOperations>;
20
+ readonly systemConfig: SystemConfig;
21
+ }): Hono;
22
+ //# sourceMappingURL=controller-http-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller-http-routes.d.ts","sourceRoot":"","sources":["../../../src/controller/http/controller-http-routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EACN,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAG9B,MAAM,oCAAoC,CAAC;AAI5C,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC5C,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAC9C,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAC7B,MAAM,EACN;QACC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;KAC/B,CACD,CAAC;IACF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACzD,GAAG,IAAI,CAuGP;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAChD,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACzD,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;CACpC,GAAG,IAAI,CAqBP"}