@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,645 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import fs from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import readline from 'node:readline/promises';
5
+ import { DEFAULT_BASE_INSTRUCTIONS, DEFAULT_PLAN_AGENT_INSTRUCTIONS, DEFAULT_PLAN_REVIEWER_INSTRUCTIONS, DEFAULT_WORK_AGENT_INSTRUCTIONS, DEFAULT_WORK_REVIEWER_INSTRUCTIONS, DEFAULT_WRAPUP_INSTRUCTIONS, } from '@agent-vm/agent-vm-worker';
6
+ import { resolveGondolinMinimumZigVersion, resolveGondolinPackageSpec, } from '@agent-vm/gondolin-adapter';
7
+ import { z } from 'zod';
8
+ import { SYSTEM_CACHE_IDENTIFIER_FILENAME, buildDefaultSystemCacheIdentifier, } from '../config/system-cache-identifier.js';
9
+ import { buildDefaultProjectNamespace } from '../runtime/project-namespace.js';
10
+ import { getKeychainTokenSource, hasServiceAccountToken, storeServiceAccountToken, } from './keychain-credential.js';
11
+ import { openClawPluginVendorDirectory, syncBundledOpenClawPluginBundle, } from './openclaw-plugin-bundle.js';
12
+ import { renderVmHostSystemDockerfile, renderVmHostSystemReadme, renderVmHostSystemStartScript, renderVmHostSystemSystemdUnit, } from './vm-host-system-templates.js';
13
+ export const secretsProviderSchema = z.enum(['1password', 'environment']);
14
+ export const imageArchitectureSchema = z.enum(['aarch64', 'x86_64']);
15
+ const defaultGatewayIngressPort = 18791;
16
+ const defaultOpenClawExtensionsPath = '/home/openclaw/.openclaw/extensions';
17
+ function resolveGatewayConfigFileName(gatewayType) {
18
+ return gatewayType === 'worker' ? 'worker.json' : 'openclaw.json';
19
+ }
20
+ const localPathProfile = {
21
+ cacheDir: '../cache',
22
+ createLocalRuntimeDirectories: true,
23
+ gatewayConfig: (zoneId, gatewayType) => `./gateways/${zoneId}/${resolveGatewayConfigFileName(gatewayType)}`,
24
+ gatewayStateDir: (zoneId) => `../state/${zoneId}`,
25
+ gatewayWorkspaceDir: (zoneId) => `../workspaces/${zoneId}`,
26
+ gatewayBuildConfig: (gatewayType) => `../vm-images/gateways/${gatewayType}/build-config.json`,
27
+ gatewayDockerfile: (gatewayType) => `../vm-images/gateways/${gatewayType}/Dockerfile`,
28
+ toolVmBuildConfig: '../vm-images/tool-vms/default/build-config.json',
29
+ toolWorkspaceRoot: '../workspaces/tools',
30
+ };
31
+ const podPathProfile = {
32
+ cacheDir: '/var/agent-vm/cache',
33
+ createLocalRuntimeDirectories: false,
34
+ gatewayConfig: (zoneId, gatewayType) => `/etc/agent-vm/gateways/${zoneId}/${resolveGatewayConfigFileName(gatewayType)}`,
35
+ gatewayStateDir: () => '/var/agent-vm/state',
36
+ gatewayWorkspaceDir: () => '/var/agent-vm/workspace',
37
+ gatewayBuildConfig: (gatewayType) => `/etc/agent-vm/vm-images/gateways/${gatewayType}/build-config.json`,
38
+ gatewayDockerfile: (gatewayType) => `/etc/agent-vm/vm-images/gateways/${gatewayType}/Dockerfile`,
39
+ toolVmBuildConfig: '/etc/agent-vm/vm-images/tool-vms/default/build-config.json',
40
+ toolWorkspaceRoot: '/var/agent-vm/workspace/tools',
41
+ };
42
+ function resolveScaffoldPathProfile(paths) {
43
+ return paths === 'pod' ? podPathProfile : localPathProfile;
44
+ }
45
+ function defaultToolVmImageProfiles(gatewayType, pathProfile) {
46
+ if (gatewayType !== 'openclaw') {
47
+ return {};
48
+ }
49
+ return {
50
+ default: {
51
+ type: 'toolVm',
52
+ buildConfig: pathProfile.toolVmBuildConfig,
53
+ },
54
+ };
55
+ }
56
+ function defaultToolProfiles(gatewayType, pathProfile) {
57
+ if (gatewayType !== 'openclaw') {
58
+ return {};
59
+ }
60
+ return {
61
+ standard: {
62
+ memory: '1G',
63
+ cpus: 1,
64
+ workspaceRoot: pathProfile.toolWorkspaceRoot,
65
+ imageProfile: 'default',
66
+ },
67
+ };
68
+ }
69
+ const defaultSystemConfig = (zoneId, gatewayType, projectNamespace, secretsProvider, pathProfile) => ({
70
+ host: {
71
+ controllerPort: 18800,
72
+ projectNamespace,
73
+ githubToken: defaultHostGithubToken(secretsProvider),
74
+ ...(secretsProvider === '1password'
75
+ ? {
76
+ secretsProvider: {
77
+ type: '1password',
78
+ tokenSource: getKeychainTokenSource(),
79
+ },
80
+ }
81
+ : {}),
82
+ },
83
+ cacheDir: pathProfile.cacheDir,
84
+ imageProfiles: {
85
+ gateways: {
86
+ [gatewayType]: {
87
+ type: gatewayType,
88
+ buildConfig: pathProfile.gatewayBuildConfig(gatewayType),
89
+ dockerfile: pathProfile.gatewayDockerfile(gatewayType),
90
+ },
91
+ },
92
+ toolVms: defaultToolVmImageProfiles(gatewayType, pathProfile),
93
+ },
94
+ zones: [
95
+ {
96
+ id: zoneId,
97
+ gateway: {
98
+ type: gatewayType,
99
+ memory: '2G',
100
+ cpus: 2,
101
+ port: defaultGatewayIngressPort,
102
+ config: pathProfile.gatewayConfig(zoneId, gatewayType),
103
+ imageProfile: gatewayType,
104
+ stateDir: pathProfile.gatewayStateDir(zoneId),
105
+ workspaceDir: pathProfile.gatewayWorkspaceDir(zoneId),
106
+ },
107
+ secrets: defaultSecretsForGatewayType(zoneId, gatewayType, secretsProvider),
108
+ allowedHosts: defaultAllowedHostsForGatewayType(gatewayType),
109
+ websocketBypass: defaultWebsocketBypassForGatewayType(gatewayType),
110
+ ...(gatewayType === 'openclaw' ? { toolProfile: 'standard' } : {}),
111
+ },
112
+ ],
113
+ toolProfiles: defaultToolProfiles(gatewayType, pathProfile),
114
+ tcpPool: {
115
+ basePort: 19000,
116
+ size: 5,
117
+ },
118
+ });
119
+ function assertNeverSecretsProvider(value) {
120
+ throw new Error(`Unhandled secrets provider: ${String(value)}`);
121
+ }
122
+ function defaultHostGithubToken(secretsProvider) {
123
+ switch (secretsProvider) {
124
+ case '1password':
125
+ return { source: '1password', ref: 'op://agent-vm/github-token/credential' };
126
+ case 'environment':
127
+ return { source: 'environment', envVar: 'GITHUB_TOKEN' };
128
+ default:
129
+ return assertNeverSecretsProvider(secretsProvider);
130
+ }
131
+ }
132
+ function secretFromShape(shape, secretsProvider) {
133
+ const hostsField = shape.hosts ? { hosts: shape.hosts } : {};
134
+ switch (secretsProvider) {
135
+ case '1password':
136
+ return {
137
+ source: '1password',
138
+ ref: shape.opRef,
139
+ injection: shape.injection,
140
+ ...hostsField,
141
+ };
142
+ case 'environment':
143
+ return {
144
+ source: 'environment',
145
+ envVar: shape.envVar,
146
+ injection: shape.injection,
147
+ ...hostsField,
148
+ };
149
+ default:
150
+ return assertNeverSecretsProvider(secretsProvider);
151
+ }
152
+ }
153
+ function defaultSecretsForGatewayType(zoneId, gatewayType, secretsProvider) {
154
+ if (gatewayType === 'worker') {
155
+ return {
156
+ GITHUB_TOKEN: secretFromShape({
157
+ envVar: 'GITHUB_TOKEN',
158
+ opRef: 'op://agent-vm/github-token/credential',
159
+ injection: 'http-mediation',
160
+ hosts: ['api.github.com'],
161
+ }, secretsProvider),
162
+ OPENAI_API_KEY: secretFromShape({
163
+ envVar: 'OPENAI_API_KEY',
164
+ opRef: 'op://agent-vm/workers-openai/credential',
165
+ injection: 'http-mediation',
166
+ hosts: ['api.openai.com'],
167
+ }, secretsProvider),
168
+ };
169
+ }
170
+ return {
171
+ DISCORD_BOT_TOKEN: secretFromShape({
172
+ envVar: 'DISCORD_BOT_TOKEN',
173
+ opRef: `op://agent-vm/${zoneId}-discord/bot-token`,
174
+ injection: 'env',
175
+ }, secretsProvider),
176
+ PERPLEXITY_API_KEY: secretFromShape({
177
+ envVar: 'PERPLEXITY_API_KEY',
178
+ opRef: `op://agent-vm/${zoneId}-perplexity/credential`,
179
+ injection: 'http-mediation',
180
+ hosts: ['api.perplexity.ai'],
181
+ }, secretsProvider),
182
+ OPENCLAW_GATEWAY_TOKEN: secretFromShape({
183
+ envVar: 'OPENCLAW_GATEWAY_TOKEN',
184
+ opRef: `op://agent-vm/${zoneId}-gateway-auth/password`,
185
+ injection: 'env',
186
+ }, secretsProvider),
187
+ };
188
+ }
189
+ function defaultAllowedHostsForGatewayType(gatewayType) {
190
+ if (gatewayType === 'worker') {
191
+ return [
192
+ 'api.anthropic.com',
193
+ 'api.openai.com',
194
+ 'auth.openai.com',
195
+ 'api.github.com',
196
+ 'github.com',
197
+ 'registry.npmjs.org',
198
+ ];
199
+ }
200
+ return [
201
+ 'api.openai.com',
202
+ 'auth.openai.com',
203
+ 'api.perplexity.ai',
204
+ 'discord.com',
205
+ 'cdn.discordapp.com',
206
+ 'api.github.com',
207
+ 'registry.npmjs.org',
208
+ ];
209
+ }
210
+ function defaultWebsocketBypassForGatewayType(gatewayType) {
211
+ if (gatewayType === 'worker') {
212
+ return [];
213
+ }
214
+ return [
215
+ 'gateway.discord.gg:443',
216
+ 'web.whatsapp.com:443',
217
+ 'g.whatsapp.net:443',
218
+ 'mmg.whatsapp.net:443',
219
+ ];
220
+ }
221
+ function envVarsForGatewayType(gatewayType) {
222
+ switch (gatewayType) {
223
+ case 'worker':
224
+ return ['GITHUB_TOKEN', 'OPENAI_API_KEY'];
225
+ case 'openclaw':
226
+ return ['GITHUB_TOKEN', 'DISCORD_BOT_TOKEN', 'PERPLEXITY_API_KEY', 'OPENCLAW_GATEWAY_TOKEN'];
227
+ default: {
228
+ const exhaustive = gatewayType;
229
+ throw new Error(`Unhandled gateway type: ${String(exhaustive)}`);
230
+ }
231
+ }
232
+ }
233
+ function defaultEnvTemplate(gatewayType, secretsProvider) {
234
+ switch (secretsProvider) {
235
+ case '1password':
236
+ return `# agent-vm environment configuration
237
+ # 1Password token is stored in macOS Keychain by agent-vm init.
238
+ # Only set this for CI or non-macOS environments:
239
+ # OP_SERVICE_ACCOUNT_TOKEN=
240
+ `;
241
+ case 'environment': {
242
+ const lines = [
243
+ '# agent-vm environment configuration (environment-backed secrets)',
244
+ '# Populate these variables in your runtime (container env, CI, shell, etc.).',
245
+ '',
246
+ ...envVarsForGatewayType(gatewayType).map((name) => `# ${name}=`),
247
+ ];
248
+ return `${lines.join('\n')}\n`;
249
+ }
250
+ default:
251
+ return assertNeverSecretsProvider(secretsProvider);
252
+ }
253
+ }
254
+ const gatewayDockerfileAuthBoundaryNote = `# NOTE: Do not bake auth tokens or credential material into this gateway image.
255
+ # Runtime auth must flow through controller HTTP mediation. Keep token env
256
+ # names, registry auth files, and build args out of this Dockerfile so a
257
+ # future edit cannot accidentally turn a runtime secret into image state.`;
258
+ const defaultGatewayDockerfile = `FROM node:24-slim
259
+
260
+ ${gatewayDockerfileAuthBoundaryNote}
261
+
262
+ ENV PNPM_HOME=/pnpm
263
+ ENV PATH=\${PNPM_HOME}:\${PATH}
264
+
265
+ RUN apt-get update && \\
266
+ apt-get install -y --no-install-recommends \\
267
+ openssh-server \\
268
+ ca-certificates \\
269
+ git \\
270
+ curl \\
271
+ python3 && \\
272
+ rm -rf /var/lib/apt/lists/* && \\
273
+ update-ca-certificates && \\
274
+ corepack enable && \\
275
+ pnpm add -g openclaw@2026.4.2 && \\
276
+ OPENCLAW_PACKAGE_ROOT="$(pnpm root -g)/openclaw" && \\
277
+ (cd "$OPENCLAW_PACKAGE_ROOT" && node scripts/postinstall-bundled-plugins.mjs) && \\
278
+ mkdir -p /opt/openclaw-sdk && \\
279
+ ln -sf "$OPENCLAW_PACKAGE_ROOT/dist/plugin-sdk/sandbox.js" /opt/openclaw-sdk/sandbox.js && \\
280
+ printf '#!/bin/sh\\nexec /pnpm/openclaw "$@"\\n' > /usr/local/bin/openclaw && \\
281
+ chmod 755 /usr/local/bin/openclaw && \\
282
+ useradd -m -s /bin/bash openclaw && \\
283
+ mkdir -p ${defaultOpenClawExtensionsPath} /home/openclaw/workspace /run/sshd /root && \\
284
+ chown -R openclaw:openclaw /home/openclaw && \\
285
+ ln -sf /proc/self/fd /dev/fd 2>/dev/null || true
286
+
287
+ COPY vendor/gondolin ${defaultOpenClawExtensionsPath}/gondolin
288
+ `;
289
+ const defaultLocalWorkerGatewayDockerfile = `FROM node:24-slim
290
+
291
+ ${gatewayDockerfileAuthBoundaryNote}
292
+
293
+ RUN apt-get update && \\
294
+ apt-get install -y --no-install-recommends \\
295
+ openssh-server \\
296
+ ca-certificates \\
297
+ git \\
298
+ curl \\
299
+ python3 && \\
300
+ rm -rf /var/lib/apt/lists/* && \\
301
+ update-ca-certificates && \\
302
+ npm install -g @openai/codex @agent-vm/agent-vm-worker && \\
303
+ mkdir -p /opt/agent-vm-worker && \\
304
+ ln -s /usr/local/lib/node_modules/@agent-vm/agent-vm-worker /opt/agent-vm-worker && \\
305
+ useradd -m -s /bin/bash coder && \\
306
+ mkdir -p /workspace /run/sshd /state && \\
307
+ chown -R coder:coder /workspace /state && \\
308
+ ln -sf /proc/self/fd /dev/fd 2>/dev/null || true
309
+ `;
310
+ const defaultPodWorkerGatewayDockerfile = `FROM node:24-slim
311
+
312
+ ${gatewayDockerfileAuthBoundaryNote}
313
+
314
+ RUN apt-get update && \\
315
+ apt-get install -y --no-install-recommends \\
316
+ openssh-server \\
317
+ ca-certificates \\
318
+ git \\
319
+ curl \\
320
+ python3 && \\
321
+ rm -rf /var/lib/apt/lists/* && \\
322
+ update-ca-certificates && \\
323
+ npm install -g @openai/codex && \\
324
+ useradd -m -s /bin/bash coder && \\
325
+ mkdir -p /workspace /run/sshd /state && \\
326
+ chown -R coder:coder /workspace /state && \\
327
+ ln -sf /proc/self/fd /dev/fd 2>/dev/null || true
328
+
329
+ # Install GitHub CLI. The agent uses gh for PR creation; GitHub
330
+ # auth is mediated by the controller proxy rather than exposed in
331
+ # the VM environment.
332
+ RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \\
333
+ -o /usr/share/keyrings/githubcli-archive-keyring.gpg && \\
334
+ chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg && \\
335
+ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" \\
336
+ > /etc/apt/sources.list.d/github-cli.list && \\
337
+ apt-get update && \\
338
+ apt-get install -y --no-install-recommends gh && \\
339
+ rm -rf /var/lib/apt/lists/*
340
+
341
+ # Install agent-vm-worker from deploy output copied into this directory
342
+ # by the container-host runtime stage at build time.
343
+ # pnpm deploy does not create a .bin entry for the deployed package itself,
344
+ # so point directly at the package bin entrypoint.
345
+ COPY agent-vm-worker/ /opt/agent-vm-worker/
346
+ RUN chmod +x /opt/agent-vm-worker/dist/main.js && \\
347
+ ln -s /opt/agent-vm-worker/dist/main.js /usr/local/bin/agent-vm-worker
348
+ `;
349
+ function defaultWorkerGatewayDockerfile(paths) {
350
+ return paths === 'pod' ? defaultPodWorkerGatewayDockerfile : defaultLocalWorkerGatewayDockerfile;
351
+ }
352
+ const defaultGatewayBuildConfig = (architecture) => ({
353
+ arch: architecture,
354
+ distro: 'alpine',
355
+ alpine: {
356
+ version: '3.23.0',
357
+ kernelPackage: 'linux-virt',
358
+ kernelImage: 'vmlinuz-virt',
359
+ rootfsPackages: [],
360
+ initramfsPackages: [],
361
+ },
362
+ oci: {
363
+ image: 'agent-vm-gateway:latest',
364
+ pullPolicy: 'never',
365
+ },
366
+ rootfs: {
367
+ label: 'gondolin-root',
368
+ sizeMb: 4096,
369
+ },
370
+ });
371
+ const defaultToolBuildConfig = (architecture) => ({
372
+ arch: architecture,
373
+ distro: 'alpine',
374
+ alpine: {
375
+ version: '3.23.0',
376
+ kernelPackage: 'linux-virt',
377
+ kernelImage: 'vmlinuz-virt',
378
+ rootfsPackages: [],
379
+ initramfsPackages: [],
380
+ },
381
+ oci: {
382
+ image: 'agent-vm-tool:latest',
383
+ pullPolicy: 'never',
384
+ },
385
+ rootfs: {
386
+ label: 'tool-root',
387
+ sizeMb: 2048,
388
+ },
389
+ });
390
+ const defaultOpenClawConfig = (zoneId, gatewayIngressPort) => ({
391
+ gateway: {
392
+ auth: { mode: 'token' },
393
+ bind: 'loopback',
394
+ controlUi: {
395
+ allowedOrigins: [
396
+ `http://127.0.0.1:${gatewayIngressPort}`,
397
+ `http://localhost:${gatewayIngressPort}`,
398
+ ],
399
+ },
400
+ mode: 'local',
401
+ port: 18789,
402
+ },
403
+ agents: {
404
+ defaults: {
405
+ model: { primary: 'openai-codex/gpt-5.4' },
406
+ sandbox: { backend: 'gondolin', mode: 'all', scope: 'session' },
407
+ workspace: '/home/openclaw/workspace',
408
+ },
409
+ },
410
+ tools: { elevated: { enabled: false } },
411
+ plugins: {
412
+ load: {
413
+ paths: [defaultOpenClawExtensionsPath],
414
+ },
415
+ entries: {
416
+ gondolin: {
417
+ enabled: true,
418
+ config: {
419
+ controllerUrl: 'http://controller.vm.host:18800',
420
+ zoneId,
421
+ },
422
+ },
423
+ },
424
+ },
425
+ channels: {},
426
+ });
427
+ const defaultWorkerPromptFiles = [
428
+ { fileName: 'base.md', content: DEFAULT_BASE_INSTRUCTIONS },
429
+ { fileName: 'plan-agent.md', content: DEFAULT_PLAN_AGENT_INSTRUCTIONS },
430
+ { fileName: 'plan-reviewer.md', content: DEFAULT_PLAN_REVIEWER_INSTRUCTIONS },
431
+ { fileName: 'work-agent.md', content: DEFAULT_WORK_AGENT_INSTRUCTIONS },
432
+ { fileName: 'work-reviewer.md', content: DEFAULT_WORK_REVIEWER_INSTRUCTIONS },
433
+ { fileName: 'wrapup.md', content: DEFAULT_WRAPUP_INSTRUCTIONS },
434
+ ];
435
+ function defaultWorkerPromptReference(fileName) {
436
+ return { path: `./prompts/${fileName}` };
437
+ }
438
+ const defaultWorkerGatewayConfig = () => ({
439
+ defaults: {
440
+ provider: 'codex',
441
+ model: 'latest-medium',
442
+ },
443
+ phases: {
444
+ plan: {
445
+ cycle: { kind: 'review', cycleCount: 2 },
446
+ agentInstructions: defaultWorkerPromptReference('plan-agent.md'),
447
+ reviewerInstructions: defaultWorkerPromptReference('plan-reviewer.md'),
448
+ agentTurnTimeoutMs: 900_000,
449
+ reviewerTurnTimeoutMs: 900_000,
450
+ skills: [],
451
+ },
452
+ work: {
453
+ cycle: { kind: 'review', cycleCount: 4 },
454
+ agentInstructions: defaultWorkerPromptReference('work-agent.md'),
455
+ reviewerInstructions: defaultWorkerPromptReference('work-reviewer.md'),
456
+ agentTurnTimeoutMs: 2_700_000,
457
+ reviewerTurnTimeoutMs: 900_000,
458
+ skills: [],
459
+ },
460
+ wrapup: {
461
+ instructions: defaultWorkerPromptReference('wrapup.md'),
462
+ turnTimeoutMs: 900_000,
463
+ skills: [],
464
+ },
465
+ },
466
+ instructions: defaultWorkerPromptReference('base.md'),
467
+ mcpServers: [],
468
+ verification: [],
469
+ verificationTimeoutMs: 300_000,
470
+ branchPrefix: 'agent/',
471
+ stateDir: '/state',
472
+ });
473
+ async function writeFileIfMissing(filePath, content, overwrite = false) {
474
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
475
+ if (overwrite) {
476
+ await fs.writeFile(filePath, content, { encoding: 'utf8' });
477
+ return 'created';
478
+ }
479
+ try {
480
+ await fs.writeFile(filePath, content, {
481
+ encoding: 'utf8',
482
+ flag: 'wx',
483
+ });
484
+ return 'created';
485
+ }
486
+ catch (error) {
487
+ if (typeof error === 'object' && error !== null && 'code' in error && error.code === 'EEXIST') {
488
+ return 'skipped';
489
+ }
490
+ throw error;
491
+ }
492
+ }
493
+ export function scaffoldAgentVmProject(options, dependencies = {}) {
494
+ return scaffoldAgentVmProjectInternal(options, dependencies);
495
+ }
496
+ async function scaffoldAgentVmProjectInternal(options, dependencies = {}) {
497
+ if (options.hostSystemType === 'container') {
498
+ if (options.gatewayType !== 'worker') {
499
+ throw new Error('Container-host scaffolds currently support only worker gateways.');
500
+ }
501
+ if (options.architecture !== 'x86_64') {
502
+ throw new Error('Container-host scaffolds currently support only x86_64. Use macos-local for aarch64 or add container-host arm64 support first.');
503
+ }
504
+ }
505
+ const created = [];
506
+ const skipped = [];
507
+ const gatewayType = options.gatewayType;
508
+ const architecture = options.architecture;
509
+ const overwrite = options.overwrite ?? false;
510
+ const pathProfile = resolveScaffoldPathProfile(options.paths);
511
+ const projectNamespace = options.projectNamespace ?? (await buildDefaultProjectNamespace(options.targetDir));
512
+ const systemConfigPath = path.join(options.targetDir, 'config', 'system.json');
513
+ const systemConfigStatus = await writeFileIfMissing(systemConfigPath, `${JSON.stringify(defaultSystemConfig(options.zoneId, gatewayType, projectNamespace, options.secretsProvider, pathProfile), null, '\t')}\n`, overwrite);
514
+ (systemConfigStatus === 'created' ? created : skipped).push('config/system.json');
515
+ const systemCacheIdentifierPath = path.join(options.targetDir, 'config', SYSTEM_CACHE_IDENTIFIER_FILENAME);
516
+ const systemCacheIdentifier = buildDefaultSystemCacheIdentifier(options.hostSystemType ? { hostSystemType: options.hostSystemType } : {});
517
+ const systemCacheIdentifierStatus = await writeFileIfMissing(systemCacheIdentifierPath, `${JSON.stringify(systemCacheIdentifier, null, '\t')}\n`, overwrite);
518
+ (systemCacheIdentifierStatus === 'created' ? created : skipped).push(`config/${SYSTEM_CACHE_IDENTIFIER_FILENAME}`);
519
+ if (options.writeLocalEnvironmentFile) {
520
+ const envFilePath = path.join(options.targetDir, '.env.local');
521
+ const envFileStatus = await writeFileIfMissing(envFilePath, defaultEnvTemplate(gatewayType, options.secretsProvider), overwrite);
522
+ (envFileStatus === 'created' ? created : skipped).push('.env.local');
523
+ if (envFileStatus === 'created' && options.secretsProvider === '1password') {
524
+ const generateAgeIdentityKey = dependencies.generateAgeIdentityKey ??
525
+ (() => {
526
+ const keygenOutput = execFileSync('age-keygen', [], { encoding: 'utf8' });
527
+ return keygenOutput
528
+ .split('\n')
529
+ .find((line) => line.startsWith('AGE-SECRET-KEY-'))
530
+ ?.trim();
531
+ });
532
+ let ageIdentityKey;
533
+ try {
534
+ ageIdentityKey = generateAgeIdentityKey();
535
+ }
536
+ catch (error) {
537
+ const message = error instanceof Error ? error.message : String(error);
538
+ (dependencies.reportWarning ?? ((warning) => process.stderr.write(`${warning}\n`)))(`[init] age-keygen not available; skipping AGE_IDENTITY_KEY. Install age if you need sops-backed secrets. (${message})`);
539
+ }
540
+ if (ageIdentityKey) {
541
+ await fs.appendFile(envFilePath, `AGE_IDENTITY_KEY=${ageIdentityKey}\n`, 'utf8');
542
+ }
543
+ }
544
+ }
545
+ const configFileName = resolveGatewayConfigFileName(gatewayType);
546
+ const configPath = path.join(options.targetDir, 'config', 'gateways', options.zoneId, configFileName);
547
+ const configStatus = await writeFileIfMissing(configPath, `${JSON.stringify(gatewayType === 'openclaw'
548
+ ? defaultOpenClawConfig(options.zoneId, defaultGatewayIngressPort)
549
+ : defaultWorkerGatewayConfig(), null, '\t')}\n`, overwrite);
550
+ (configStatus === 'created' ? created : skipped).push(`config/gateways/${options.zoneId}/${configFileName}`);
551
+ if (gatewayType === 'worker') {
552
+ const promptFileResults = await Promise.all(defaultWorkerPromptFiles.map(async (promptFile) => {
553
+ const promptFilePath = path.join(options.targetDir, 'config', 'gateways', options.zoneId, 'prompts', promptFile.fileName);
554
+ return {
555
+ fileName: promptFile.fileName,
556
+ status: await writeFileIfMissing(promptFilePath, `${promptFile.content}\n`, overwrite),
557
+ };
558
+ }));
559
+ for (const promptFileResult of promptFileResults) {
560
+ const promptFileStatus = promptFileResult.status;
561
+ (promptFileStatus === 'created' ? created : skipped).push(`config/gateways/${options.zoneId}/prompts/${promptFileResult.fileName}`);
562
+ }
563
+ }
564
+ const gatewayDockerfilePath = path.join(options.targetDir, 'vm-images', 'gateways', gatewayType, 'Dockerfile');
565
+ const gatewayDockerfileStatus = await writeFileIfMissing(gatewayDockerfilePath, gatewayType === 'openclaw'
566
+ ? defaultGatewayDockerfile
567
+ : defaultWorkerGatewayDockerfile(options.paths), overwrite);
568
+ (gatewayDockerfileStatus === 'created' ? created : skipped).push(`vm-images/gateways/${gatewayType}/Dockerfile`);
569
+ const gatewayBuildConfigPath = path.join(options.targetDir, 'vm-images', 'gateways', gatewayType, 'build-config.json');
570
+ const gatewayBuildConfigStatus = await writeFileIfMissing(gatewayBuildConfigPath, `${JSON.stringify(defaultGatewayBuildConfig(architecture), null, '\t')}\n`, overwrite);
571
+ (gatewayBuildConfigStatus === 'created' ? created : skipped).push(`vm-images/gateways/${gatewayType}/build-config.json`);
572
+ if (gatewayType === 'openclaw') {
573
+ const pluginCopyStatus = await (dependencies.copyBundledOpenClawPlugin ?? syncBundledOpenClawPluginBundle)(options.targetDir, gatewayType);
574
+ (pluginCopyStatus === 'created' ? created : skipped).push(openClawPluginVendorDirectory(gatewayType));
575
+ }
576
+ if (gatewayType === 'openclaw') {
577
+ const toolBuildConfigPath = path.join(options.targetDir, 'vm-images', 'tool-vms', 'default', 'build-config.json');
578
+ const toolBuildConfigStatus = await writeFileIfMissing(toolBuildConfigPath, `${JSON.stringify(defaultToolBuildConfig(architecture), null, '\t')}\n`, overwrite);
579
+ (toolBuildConfigStatus === 'created' ? created : skipped).push('vm-images/tool-vms/default/build-config.json');
580
+ }
581
+ if (options.hostSystemType === 'container') {
582
+ const resolveZigVersion = dependencies.resolveGondolinMinimumZigVersion ?? resolveGondolinMinimumZigVersion;
583
+ const zigVersion = await resolveZigVersion();
584
+ const gondolinPackageSpec = await resolveGondolinPackageSpec();
585
+ const vmHostSystemFiles = [
586
+ ['Dockerfile', renderVmHostSystemDockerfile({ zigVersion, gondolinPackageSpec })],
587
+ ['start.sh', renderVmHostSystemStartScript({ zoneId: options.zoneId })],
588
+ ['agent-vm-controller.service', renderVmHostSystemSystemdUnit()],
589
+ ['README.md', renderVmHostSystemReadme({ zoneId: options.zoneId })],
590
+ ];
591
+ await Promise.all(vmHostSystemFiles.map(async ([relativeFilePath, content]) => {
592
+ const status = await writeFileIfMissing(path.join(options.targetDir, 'vm-host-system', relativeFilePath), content, overwrite);
593
+ (status === 'created' ? created : skipped).push(`vm-host-system/${relativeFilePath}`);
594
+ }));
595
+ }
596
+ if (pathProfile.createLocalRuntimeDirectories) {
597
+ await Promise.all([
598
+ path.join(options.targetDir, 'state', options.zoneId),
599
+ path.join(options.targetDir, 'workspaces', options.zoneId),
600
+ path.join(options.targetDir, 'workspaces', 'tools'),
601
+ ].map(async (directoryPath) => {
602
+ await fs.mkdir(directoryPath, { recursive: true });
603
+ }));
604
+ }
605
+ return { created, keychainStored: false, skipped };
606
+ }
607
+ /**
608
+ * Interactively prompt for the 1Password service account token and store it
609
+ * in macOS Keychain. Skips if stdin is not a TTY or if a token already exists.
610
+ */
611
+ export async function promptAndStoreServiceAccountToken(dependencies = {}) {
612
+ const hasToken = dependencies.hasKeychainToken ?? hasServiceAccountToken;
613
+ const storeToken = dependencies.storeKeychainToken ?? storeServiceAccountToken;
614
+ if (hasToken()) {
615
+ return false;
616
+ }
617
+ if (!process.stdin.isTTY) {
618
+ return false;
619
+ }
620
+ // Use a muted output stream so readline doesn't echo the token
621
+ const { Writable } = await import('node:stream');
622
+ const mutedOutput = new Writable({
623
+ write(_chunk, _encoding, callback) {
624
+ callback();
625
+ },
626
+ });
627
+ const rl = dependencies.createReadlineInterface?.() ??
628
+ readline.createInterface({ input: process.stdin, output: mutedOutput, terminal: true });
629
+ try {
630
+ process.stderr.write('Paste your 1Password service account token (from https://my.1password.com/developer-tools/service-accounts):\n> ');
631
+ const token = await rl.question('');
632
+ process.stderr.write('\n');
633
+ const trimmedToken = token.trim();
634
+ if (!trimmedToken) {
635
+ return false;
636
+ }
637
+ storeToken(trimmedToken);
638
+ process.stderr.write('✓ Stored in macOS Keychain\n');
639
+ return true;
640
+ }
641
+ finally {
642
+ rl.close();
643
+ }
644
+ }
645
+ //# sourceMappingURL=init-command.js.map