@shravansunder/agent-vm 0.0.1

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 (245) hide show
  1. package/dist/backup/backup-archive-layout.d.ts +15 -0
  2. package/dist/backup/backup-archive-layout.d.ts.map +1 -0
  3. package/dist/backup/backup-archive-layout.js +34 -0
  4. package/dist/backup/backup-archive-layout.js.map +1 -0
  5. package/dist/backup/backup-create-operation.d.ts +9 -0
  6. package/dist/backup/backup-create-operation.d.ts.map +1 -0
  7. package/dist/backup/backup-create-operation.js +50 -0
  8. package/dist/backup/backup-create-operation.js.map +1 -0
  9. package/dist/backup/backup-encryption.d.ts +20 -0
  10. package/dist/backup/backup-encryption.d.ts.map +1 -0
  11. package/dist/backup/backup-encryption.js +71 -0
  12. package/dist/backup/backup-encryption.js.map +1 -0
  13. package/dist/backup/backup-manager.d.ts +42 -0
  14. package/dist/backup/backup-manager.d.ts.map +1 -0
  15. package/dist/backup/backup-manager.js +37 -0
  16. package/dist/backup/backup-manager.js.map +1 -0
  17. package/dist/backup/backup-restore-operation.d.ts +8 -0
  18. package/dist/backup/backup-restore-operation.d.ts.map +1 -0
  19. package/dist/backup/backup-restore-operation.js +53 -0
  20. package/dist/backup/backup-restore-operation.js.map +1 -0
  21. package/dist/build/docker-image-builder.d.ts +9 -0
  22. package/dist/build/docker-image-builder.d.ts.map +1 -0
  23. package/dist/build/docker-image-builder.js +24 -0
  24. package/dist/build/docker-image-builder.js.map +1 -0
  25. package/dist/build/gondolin-image-builder.d.ts +12 -0
  26. package/dist/build/gondolin-image-builder.d.ts.map +1 -0
  27. package/dist/build/gondolin-image-builder.js +23 -0
  28. package/dist/build/gondolin-image-builder.js.map +1 -0
  29. package/dist/build/stale-image-cleaner.d.ts +15 -0
  30. package/dist/build/stale-image-cleaner.d.ts.map +1 -0
  31. package/dist/build/stale-image-cleaner.js +46 -0
  32. package/dist/build/stale-image-cleaner.js.map +1 -0
  33. package/dist/cli/agent-vm-cli-support.d.ts +68 -0
  34. package/dist/cli/agent-vm-cli-support.d.ts.map +1 -0
  35. package/dist/cli/agent-vm-cli-support.js +72 -0
  36. package/dist/cli/agent-vm-cli-support.js.map +1 -0
  37. package/dist/cli/agent-vm-entrypoint.d.ts +9 -0
  38. package/dist/cli/agent-vm-entrypoint.d.ts.map +1 -0
  39. package/dist/cli/agent-vm-entrypoint.js +59 -0
  40. package/dist/cli/agent-vm-entrypoint.js.map +1 -0
  41. package/dist/cli/auth-interactive-command.d.ts +27 -0
  42. package/dist/cli/auth-interactive-command.d.ts.map +1 -0
  43. package/dist/cli/auth-interactive-command.js +83 -0
  44. package/dist/cli/auth-interactive-command.js.map +1 -0
  45. package/dist/cli/backup-commands.d.ts +11 -0
  46. package/dist/cli/backup-commands.d.ts.map +1 -0
  47. package/dist/cli/backup-commands.js +46 -0
  48. package/dist/cli/backup-commands.js.map +1 -0
  49. package/dist/cli/build-command.d.ts +22 -0
  50. package/dist/cli/build-command.d.ts.map +1 -0
  51. package/dist/cli/build-command.js +77 -0
  52. package/dist/cli/build-command.js.map +1 -0
  53. package/dist/cli/cache-commands.d.ts +29 -0
  54. package/dist/cli/cache-commands.d.ts.map +1 -0
  55. package/dist/cli/cache-commands.js +71 -0
  56. package/dist/cli/cache-commands.js.map +1 -0
  57. package/dist/cli/commands/auth-interactive-definition.d.ts +15 -0
  58. package/dist/cli/commands/auth-interactive-definition.d.ts.map +1 -0
  59. package/dist/cli/commands/auth-interactive-definition.js +36 -0
  60. package/dist/cli/commands/auth-interactive-definition.js.map +1 -0
  61. package/dist/cli/commands/backup-definition.d.ts +63 -0
  62. package/dist/cli/commands/backup-definition.d.ts.map +1 -0
  63. package/dist/cli/commands/backup-definition.js +73 -0
  64. package/dist/cli/commands/backup-definition.js.map +1 -0
  65. package/dist/cli/commands/build-definition.d.ts +13 -0
  66. package/dist/cli/commands/build-definition.d.ts.map +1 -0
  67. package/dist/cli/commands/build-definition.js +27 -0
  68. package/dist/cli/commands/build-definition.js.map +1 -0
  69. package/dist/cli/commands/cache-definition.d.ts +41 -0
  70. package/dist/cli/commands/cache-definition.d.ts.map +1 -0
  71. package/dist/cli/commands/cache-definition.js +41 -0
  72. package/dist/cli/commands/cache-definition.js.map +1 -0
  73. package/dist/cli/commands/command-definition-support.d.ts +25 -0
  74. package/dist/cli/commands/command-definition-support.d.ts.map +1 -0
  75. package/dist/cli/commands/command-definition-support.js +74 -0
  76. package/dist/cli/commands/command-definition-support.js.map +1 -0
  77. package/dist/cli/commands/controller-definition.d.ts +223 -0
  78. package/dist/cli/commands/controller-definition.d.ts.map +1 -0
  79. package/dist/cli/commands/controller-definition.js +200 -0
  80. package/dist/cli/commands/controller-definition.js.map +1 -0
  81. package/dist/cli/commands/create-app.d.ts +421 -0
  82. package/dist/cli/commands/create-app.d.ts.map +1 -0
  83. package/dist/cli/commands/create-app.js +26 -0
  84. package/dist/cli/commands/create-app.js.map +1 -0
  85. package/dist/cli/commands/doctor-definition.d.ts +11 -0
  86. package/dist/cli/commands/doctor-definition.d.ts.map +1 -0
  87. package/dist/cli/commands/doctor-definition.js +23 -0
  88. package/dist/cli/commands/doctor-definition.js.map +1 -0
  89. package/dist/cli/commands/init-definition.d.ts +13 -0
  90. package/dist/cli/commands/init-definition.d.ts.map +1 -0
  91. package/dist/cli/commands/init-definition.js +32 -0
  92. package/dist/cli/commands/init-definition.js.map +1 -0
  93. package/dist/cli/controller-operation-commands.d.ts +12 -0
  94. package/dist/cli/controller-operation-commands.d.ts.map +1 -0
  95. package/dist/cli/controller-operation-commands.js +74 -0
  96. package/dist/cli/controller-operation-commands.js.map +1 -0
  97. package/dist/cli/format-zod-error.d.ts +3 -0
  98. package/dist/cli/format-zod-error.d.ts.map +1 -0
  99. package/dist/cli/format-zod-error.js +18 -0
  100. package/dist/cli/format-zod-error.js.map +1 -0
  101. package/dist/cli/init-command.d.ts +29 -0
  102. package/dist/cli/init-command.d.ts.map +1 -0
  103. package/dist/cli/init-command.js +407 -0
  104. package/dist/cli/init-command.js.map +1 -0
  105. package/dist/cli/keychain-credential.d.ts +19 -0
  106. package/dist/cli/keychain-credential.d.ts.map +1 -0
  107. package/dist/cli/keychain-credential.js +52 -0
  108. package/dist/cli/keychain-credential.js.map +1 -0
  109. package/dist/cli/lease-commands.d.ts +11 -0
  110. package/dist/cli/lease-commands.d.ts.map +1 -0
  111. package/dist/cli/lease-commands.js +22 -0
  112. package/dist/cli/lease-commands.js.map +1 -0
  113. package/dist/cli/openclaw-plugin-bundle.d.ts +3 -0
  114. package/dist/cli/openclaw-plugin-bundle.d.ts.map +1 -0
  115. package/dist/cli/openclaw-plugin-bundle.js +30 -0
  116. package/dist/cli/openclaw-plugin-bundle.js.map +1 -0
  117. package/dist/cli/run-task.d.ts +4 -0
  118. package/dist/cli/run-task.d.ts.map +1 -0
  119. package/dist/cli/run-task.js +17 -0
  120. package/dist/cli/run-task.js.map +1 -0
  121. package/dist/cli/ssh-commands.d.ts +20 -0
  122. package/dist/cli/ssh-commands.d.ts.map +1 -0
  123. package/dist/cli/ssh-commands.js +72 -0
  124. package/dist/cli/ssh-commands.js.map +1 -0
  125. package/dist/config/system-config.d.ts +72 -0
  126. package/dist/config/system-config.d.ts.map +1 -0
  127. package/dist/config/system-config.js +121 -0
  128. package/dist/config/system-config.js.map +1 -0
  129. package/dist/controller/controller-runtime-operations.d.ts +62 -0
  130. package/dist/controller/controller-runtime-operations.d.ts.map +1 -0
  131. package/dist/controller/controller-runtime-operations.js +111 -0
  132. package/dist/controller/controller-runtime-operations.js.map +1 -0
  133. package/dist/controller/controller-runtime-support.d.ts +8 -0
  134. package/dist/controller/controller-runtime-support.d.ts.map +1 -0
  135. package/dist/controller/controller-runtime-support.js +15 -0
  136. package/dist/controller/controller-runtime-support.js.map +1 -0
  137. package/dist/controller/controller-runtime-types.d.ts +46 -0
  138. package/dist/controller/controller-runtime-types.d.ts.map +1 -0
  139. package/dist/controller/controller-runtime-types.js +2 -0
  140. package/dist/controller/controller-runtime-types.js.map +1 -0
  141. package/dist/controller/controller-runtime.d.ts +3 -0
  142. package/dist/controller/controller-runtime.d.ts.map +1 -0
  143. package/dist/controller/controller-runtime.js +135 -0
  144. package/dist/controller/controller-runtime.js.map +1 -0
  145. package/dist/controller/http/controller-client.d.ts +17 -0
  146. package/dist/controller/http/controller-client.d.ts.map +1 -0
  147. package/dist/controller/http/controller-client.js +76 -0
  148. package/dist/controller/http/controller-client.js.map +1 -0
  149. package/dist/controller/http/controller-http-route-support.d.ts +26 -0
  150. package/dist/controller/http/controller-http-route-support.d.ts.map +1 -0
  151. package/dist/controller/http/controller-http-route-support.js +21 -0
  152. package/dist/controller/http/controller-http-route-support.js.map +1 -0
  153. package/dist/controller/http/controller-http-routes.d.ts +20 -0
  154. package/dist/controller/http/controller-http-routes.d.ts.map +1 -0
  155. package/dist/controller/http/controller-http-routes.js +83 -0
  156. package/dist/controller/http/controller-http-routes.js.map +1 -0
  157. package/dist/controller/http/controller-http-server.d.ts +8 -0
  158. package/dist/controller/http/controller-http-server.d.ts.map +1 -0
  159. package/dist/controller/http/controller-http-server.js +21 -0
  160. package/dist/controller/http/controller-http-server.js.map +1 -0
  161. package/dist/controller/http/controller-request-schemas.d.ts +15 -0
  162. package/dist/controller/http/controller-request-schemas.d.ts.map +1 -0
  163. package/dist/controller/http/controller-request-schemas.js +15 -0
  164. package/dist/controller/http/controller-request-schemas.js.map +1 -0
  165. package/dist/controller/http/controller-zone-operation-routes.d.ts +4 -0
  166. package/dist/controller/http/controller-zone-operation-routes.d.ts.map +1 -0
  167. package/dist/controller/http/controller-zone-operation-routes.js +54 -0
  168. package/dist/controller/http/controller-zone-operation-routes.js.map +1 -0
  169. package/dist/controller/leases/idle-reaper.d.ts +12 -0
  170. package/dist/controller/leases/idle-reaper.d.ts.map +1 -0
  171. package/dist/controller/leases/idle-reaper.js +15 -0
  172. package/dist/controller/leases/idle-reaper.js.map +1 -0
  173. package/dist/controller/leases/lease-manager.d.ts +57 -0
  174. package/dist/controller/leases/lease-manager.d.ts.map +1 -0
  175. package/dist/controller/leases/lease-manager.js +83 -0
  176. package/dist/controller/leases/lease-manager.js.map +1 -0
  177. package/dist/controller/leases/tcp-pool.d.ts +11 -0
  178. package/dist/controller/leases/tcp-pool.d.ts.map +1 -0
  179. package/dist/controller/leases/tcp-pool.js +26 -0
  180. package/dist/controller/leases/tcp-pool.js.map +1 -0
  181. package/dist/gateway/credential-manager.d.ts +8 -0
  182. package/dist/gateway/credential-manager.d.ts.map +1 -0
  183. package/dist/gateway/credential-manager.js +46 -0
  184. package/dist/gateway/credential-manager.js.map +1 -0
  185. package/dist/gateway/gateway-image-builder.d.ts +13 -0
  186. package/dist/gateway/gateway-image-builder.d.ts.map +1 -0
  187. package/dist/gateway/gateway-image-builder.js +19 -0
  188. package/dist/gateway/gateway-image-builder.js.map +1 -0
  189. package/dist/gateway/gateway-lifecycle-loader.d.ts +3 -0
  190. package/dist/gateway/gateway-lifecycle-loader.d.ts.map +1 -0
  191. package/dist/gateway/gateway-lifecycle-loader.js +10 -0
  192. package/dist/gateway/gateway-lifecycle-loader.js.map +1 -0
  193. package/dist/gateway/gateway-zone-orchestrator.d.ts +10 -0
  194. package/dist/gateway/gateway-zone-orchestrator.d.ts.map +1 -0
  195. package/dist/gateway/gateway-zone-orchestrator.js +92 -0
  196. package/dist/gateway/gateway-zone-orchestrator.js.map +1 -0
  197. package/dist/gateway/gateway-zone-support.d.ts +49 -0
  198. package/dist/gateway/gateway-zone-support.d.ts.map +1 -0
  199. package/dist/gateway/gateway-zone-support.js +8 -0
  200. package/dist/gateway/gateway-zone-support.js.map +1 -0
  201. package/dist/gateway-api-client/gateway-api-client.d.ts +34 -0
  202. package/dist/gateway-api-client/gateway-api-client.d.ts.map +1 -0
  203. package/dist/gateway-api-client/gateway-api-client.js +29 -0
  204. package/dist/gateway-api-client/gateway-api-client.js.map +1 -0
  205. package/dist/gateway-api-client/gateway-websocket-client.d.ts +45 -0
  206. package/dist/gateway-api-client/gateway-websocket-client.d.ts.map +1 -0
  207. package/dist/gateway-api-client/gateway-websocket-client.js +140 -0
  208. package/dist/gateway-api-client/gateway-websocket-client.js.map +1 -0
  209. package/dist/index.d.ts +15 -0
  210. package/dist/index.d.ts.map +1 -0
  211. package/dist/index.js +15 -0
  212. package/dist/index.js.map +1 -0
  213. package/dist/operations/controller-status.d.ts +13 -0
  214. package/dist/operations/controller-status.d.ts.map +1 -0
  215. package/dist/operations/controller-status.js +13 -0
  216. package/dist/operations/controller-status.js.map +1 -0
  217. package/dist/operations/credentials-refresh.d.ts +10 -0
  218. package/dist/operations/credentials-refresh.d.ts.map +1 -0
  219. package/dist/operations/credentials-refresh.js +9 -0
  220. package/dist/operations/credentials-refresh.js.map +1 -0
  221. package/dist/operations/destroy-zone.d.ts +14 -0
  222. package/dist/operations/destroy-zone.d.ts.map +1 -0
  223. package/dist/operations/destroy-zone.js +19 -0
  224. package/dist/operations/destroy-zone.js.map +1 -0
  225. package/dist/operations/doctor.d.ts +22 -0
  226. package/dist/operations/doctor.d.ts.map +1 -0
  227. package/dist/operations/doctor.js +83 -0
  228. package/dist/operations/doctor.js.map +1 -0
  229. package/dist/operations/upgrade-zone.d.ts +13 -0
  230. package/dist/operations/upgrade-zone.d.ts.map +1 -0
  231. package/dist/operations/upgrade-zone.js +11 -0
  232. package/dist/operations/upgrade-zone.js.map +1 -0
  233. package/dist/operations/zone-logs.d.ts +9 -0
  234. package/dist/operations/zone-logs.d.ts.map +1 -0
  235. package/dist/operations/zone-logs.js +7 -0
  236. package/dist/operations/zone-logs.js.map +1 -0
  237. package/dist/shared/run-task.d.ts +3 -0
  238. package/dist/shared/run-task.d.ts.map +1 -0
  239. package/dist/shared/run-task.js +12 -0
  240. package/dist/shared/run-task.js.map +1 -0
  241. package/dist/tool-vm/tool-vm-lifecycle.d.ts +27 -0
  242. package/dist/tool-vm/tool-vm-lifecycle.d.ts.map +1 -0
  243. package/dist/tool-vm/tool-vm-lifecycle.js +54 -0
  244. package/dist/tool-vm/tool-vm-lifecycle.js.map +1 -0
  245. package/package.json +41 -0
@@ -0,0 +1,57 @@
1
+ import type { ManagedVm } from '@shravansunder/agent-vm-gondolin-core';
2
+ import type { TcpPool } from './tcp-pool.js';
3
+ export interface ToolProfile {
4
+ readonly cpus: number;
5
+ readonly memory: string;
6
+ readonly workspaceRoot: string;
7
+ }
8
+ export interface Lease {
9
+ readonly cleanWorkspace?: () => Promise<void>;
10
+ readonly createdAt: number;
11
+ readonly id: string;
12
+ readonly lastUsedAt: number;
13
+ readonly profileId: string;
14
+ readonly scopeKey: string;
15
+ readonly sshAccess: {
16
+ readonly command?: string;
17
+ readonly host: string;
18
+ readonly identityFile?: string;
19
+ readonly port: number;
20
+ readonly user?: string;
21
+ };
22
+ readonly tcpSlot: number;
23
+ readonly vm: ManagedVm;
24
+ readonly zoneId: string;
25
+ }
26
+ export interface LeaseManager {
27
+ createLease(options: {
28
+ readonly agentWorkspaceDir: string;
29
+ readonly profile: ToolProfile;
30
+ readonly profileId: string;
31
+ readonly scopeKey: string;
32
+ readonly workspaceDir: string;
33
+ readonly zoneId: string;
34
+ }): Promise<Lease>;
35
+ getLease(leaseId: string): Lease | undefined;
36
+ listLeases(): Lease[];
37
+ releaseLease(leaseId: string): Promise<void>;
38
+ }
39
+ export declare function createLeaseManager(options: {
40
+ readonly cleanWorkspace?: (leaseOptions: {
41
+ readonly profile: ToolProfile;
42
+ readonly tcpSlot: number;
43
+ readonly zoneId: string;
44
+ }) => Promise<void>;
45
+ readonly createManagedVm: (leaseOptions: {
46
+ readonly agentWorkspaceDir: string;
47
+ readonly profile: ToolProfile;
48
+ readonly profileId: string;
49
+ readonly scopeKey: string;
50
+ readonly tcpSlot: number;
51
+ readonly workspaceDir: string;
52
+ readonly zoneId: string;
53
+ }) => Promise<ManagedVm>;
54
+ readonly now: () => number;
55
+ readonly tcpPool: TcpPool;
56
+ }): LeaseManager;
57
+ //# sourceMappingURL=lease-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease-manager.d.ts","sourceRoot":"","sources":["../../../src/controller/leases/lease-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAEvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,KAAK;IACrB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE;QACnB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC5B,WAAW,CAAC,OAAO,EAAE;QACpB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;QAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAC7C,UAAU,IAAI,KAAK,EAAE,CAAC;IACtB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC3C,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE;QACxC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;QAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACxB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,QAAQ,CAAC,eAAe,EAAE,CAAC,YAAY,EAAE;QACxC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;QAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACxB,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B,GAAG,YAAY,CAmFf"}
@@ -0,0 +1,83 @@
1
+ export function createLeaseManager(options) {
2
+ const leases = new Map();
3
+ return {
4
+ async createLease(leaseOptions) {
5
+ const tcpSlot = options.tcpPool.allocate();
6
+ try {
7
+ const vm = await options.createManagedVm({
8
+ ...leaseOptions,
9
+ tcpSlot,
10
+ });
11
+ try {
12
+ const sshAccess = await vm.enableSsh({
13
+ listenPort: options.tcpPool.portForSlot(tcpSlot),
14
+ });
15
+ const createdAt = options.now();
16
+ const lease = {
17
+ ...(options.cleanWorkspace
18
+ ? {
19
+ cleanWorkspace: async () => await options.cleanWorkspace?.({
20
+ profile: leaseOptions.profile,
21
+ tcpSlot,
22
+ zoneId: leaseOptions.zoneId,
23
+ }),
24
+ }
25
+ : {}),
26
+ createdAt,
27
+ id: `${leaseOptions.zoneId}-${leaseOptions.scopeKey}-${createdAt}`,
28
+ lastUsedAt: createdAt,
29
+ profileId: leaseOptions.profileId,
30
+ scopeKey: leaseOptions.scopeKey,
31
+ sshAccess,
32
+ tcpSlot,
33
+ vm,
34
+ zoneId: leaseOptions.zoneId,
35
+ };
36
+ leases.set(lease.id, lease);
37
+ return lease;
38
+ }
39
+ catch (error) {
40
+ await vm.close().catch(() => { });
41
+ throw error;
42
+ }
43
+ }
44
+ catch (error) {
45
+ options.tcpPool.release(tcpSlot);
46
+ throw error;
47
+ }
48
+ },
49
+ getLease(leaseId) {
50
+ return leases.get(leaseId);
51
+ },
52
+ listLeases() {
53
+ return [...leases.values()];
54
+ },
55
+ async releaseLease(leaseId) {
56
+ const lease = leases.get(leaseId);
57
+ if (!lease) {
58
+ return;
59
+ }
60
+ let releaseError;
61
+ try {
62
+ await lease.vm.close();
63
+ }
64
+ catch (error) {
65
+ releaseError = error instanceof Error ? error : new Error(String(error));
66
+ }
67
+ try {
68
+ await lease.cleanWorkspace?.();
69
+ }
70
+ catch (error) {
71
+ if (!releaseError) {
72
+ releaseError = error instanceof Error ? error : new Error(String(error));
73
+ }
74
+ }
75
+ leases.delete(leaseId);
76
+ options.tcpPool.release(lease.tcpSlot);
77
+ if (releaseError) {
78
+ throw releaseError;
79
+ }
80
+ },
81
+ };
82
+ }
83
+ //# sourceMappingURL=lease-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease-manager.js","sourceRoot":"","sources":["../../../src/controller/leases/lease-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface TcpPool {
2
+ allocate(): number;
3
+ getAllMappings(): Record<string, string>;
4
+ portForSlot(slot: number): number;
5
+ release(slot: number): void;
6
+ }
7
+ export declare function createTcpPool(options: {
8
+ readonly basePort: number;
9
+ readonly size: number;
10
+ }): TcpPool;
11
+ //# sourceMappingURL=tcp-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcp-pool.d.ts","sourceRoot":"","sources":["../../../src/controller/leases/tcp-pool.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACvB,QAAQ,IAAI,MAAM,CAAC;IACnB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CA4BV"}
@@ -0,0 +1,26 @@
1
+ export function createTcpPool(options) {
2
+ const allocatedSlots = new Set();
3
+ return {
4
+ allocate() {
5
+ for (let slot = 0; slot < options.size; slot += 1) {
6
+ if (!allocatedSlots.has(slot)) {
7
+ allocatedSlots.add(slot);
8
+ return slot;
9
+ }
10
+ }
11
+ throw new Error('No TCP slots available');
12
+ },
13
+ getAllMappings() {
14
+ return Object.fromEntries([...allocatedSlots]
15
+ .toSorted((leftSlot, rightSlot) => leftSlot - rightSlot)
16
+ .map((slot) => [`tool-${slot}.vm.host:22`, `127.0.0.1:${options.basePort + slot}`]));
17
+ },
18
+ portForSlot(slot) {
19
+ return options.basePort + slot;
20
+ },
21
+ release(slot) {
22
+ allocatedSlots.delete(slot);
23
+ },
24
+ };
25
+ }
26
+ //# sourceMappingURL=tcp-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcp-pool.js","sourceRoot":"","sources":["../../../src/controller/leases/tcp-pool.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,aAAa,CAAC,OAG7B;IACA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,OAAO;QACN,QAAQ;YACP,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/B,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACzB,OAAO,IAAI,CAAC;gBACb,CAAC;YACF,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC3C,CAAC;QACD,cAAc;YACb,OAAO,MAAM,CAAC,WAAW,CACxB,CAAC,GAAG,cAAc,CAAC;iBACjB,QAAQ,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,QAAQ,GAAG,SAAS,CAAC;iBACvD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,IAAI,aAAa,EAAE,aAAa,OAAO,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC,CACpF,CAAC;QACH,CAAC;QACD,WAAW,CAAC,IAAY;YACvB,OAAO,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,IAAY;YACnB,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { SecretResolver } from '@shravansunder/agent-vm-gondolin-core';
2
+ import type { SystemConfig } from '../config/system-config.js';
3
+ export declare function resolveZoneSecrets(options: {
4
+ readonly systemConfig: SystemConfig;
5
+ readonly zoneId: string;
6
+ readonly secretResolver: SecretResolver;
7
+ }): Promise<Record<string, string>>;
8
+ //# sourceMappingURL=credential-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-manager.d.ts","sourceRoot":"","sources":["../../src/gateway/credential-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAEvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AA0B/D,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IACjD,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;CACxC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA+BlC"}
@@ -0,0 +1,46 @@
1
+ function buildSuggestedSecretRef(zoneId, secretName) {
2
+ switch (secretName) {
3
+ case 'DISCORD_BOT_TOKEN':
4
+ return `op://agent-vm/${zoneId}-discord/bot-token`;
5
+ case 'PERPLEXITY_API_KEY':
6
+ return `op://agent-vm/${zoneId}-perplexity/credential`;
7
+ case 'OPENCLAW_GATEWAY_TOKEN':
8
+ return `op://agent-vm/${zoneId}-gateway-auth/password`;
9
+ case 'OPENAI_API_KEY':
10
+ return `op://agent-vm/${zoneId}-openai/credential`;
11
+ case 'ANTHROPIC_API_KEY':
12
+ return `op://agent-vm/${zoneId}-anthropic/credential`;
13
+ default:
14
+ return `op://agent-vm/${zoneId}-${secretName.toLowerCase().replace(/_/gu, '-')}/credential`;
15
+ }
16
+ }
17
+ function findZone(systemConfig, zoneId) {
18
+ return systemConfig.zones.find((zone) => zone.id === zoneId);
19
+ }
20
+ export async function resolveZoneSecrets(options) {
21
+ const zone = findZone(options.systemConfig, options.zoneId);
22
+ if (!zone) {
23
+ throw new Error(`Unknown zone '${options.zoneId}'.`);
24
+ }
25
+ const resolvedSecrets = {};
26
+ for (const [secretName, secretConfig] of Object.entries(zone.secrets)) {
27
+ if (!secretConfig.ref) {
28
+ throw new Error(`Zone '${zone.id}' secret '${secretName}' is missing 'ref'. Add an explicit 1Password reference such as '${buildSuggestedSecretRef(zone.id, secretName)}'.`);
29
+ }
30
+ try {
31
+ const secretRef = {
32
+ ref: secretConfig.ref,
33
+ source: secretConfig.source,
34
+ };
35
+ // Sequential resolution gives the user exact secret context on failure.
36
+ // oxlint-disable-next-line eslint/no-await-in-loop
37
+ resolvedSecrets[secretName] = await options.secretResolver.resolve(secretRef);
38
+ }
39
+ catch (error) {
40
+ const message = error instanceof Error ? error.message : String(error);
41
+ throw new Error(`Failed to resolve secret '${secretName}' for zone '${zone.id}' from '${secretConfig.ref}': ${message}`, { cause: error });
42
+ }
43
+ }
44
+ return resolvedSecrets;
45
+ }
46
+ //# sourceMappingURL=credential-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-manager.js","sourceRoot":"","sources":["../../src/gateway/credential-manager.ts"],"names":[],"mappings":"AAIA,SAAS,uBAAuB,CAAC,MAAc,EAAE,UAAkB;IAClE,QAAQ,UAAU,EAAE,CAAC;QACpB,KAAK,mBAAmB;YACvB,OAAO,iBAAiB,MAAM,oBAAoB,CAAC;QACpD,KAAK,oBAAoB;YACxB,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;QACxD,KAAK,wBAAwB;YAC5B,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;QACxD,KAAK,gBAAgB;YACpB,OAAO,iBAAiB,MAAM,oBAAoB,CAAC;QACpD,KAAK,mBAAmB;YACvB,OAAO,iBAAiB,MAAM,uBAAuB,CAAC;QACvD;YACC,OAAO,iBAAiB,MAAM,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC;IAC9F,CAAC;AACF,CAAC;AAED,SAAS,QAAQ,CAChB,YAA0B,EAC1B,MAAc;IAEd,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAIxC;IACA,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,eAAe,GAA2B,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACd,SAAS,IAAI,CAAC,EAAE,aAAa,UAAU,oEAAoE,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAC3J,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,SAAS,GAAc;gBAC5B,GAAG,EAAE,YAAY,CAAC,GAAG;gBACrB,MAAM,EAAE,YAAY,CAAC,MAAM;aAC3B,CAAC;YACF,wEAAwE;YACxE,mDAAmD;YACnD,eAAe,CAAC,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,IAAI,KAAK,CACd,6BAA6B,UAAU,eAAe,IAAI,CAAC,EAAE,WAAW,YAAY,CAAC,GAAG,MAAM,OAAO,EAAE,EACvG,EAAE,KAAK,EAAE,KAAK,EAAE,CAChB,CAAC;QACH,CAAC;IACF,CAAC;IAED,OAAO,eAAe,CAAC;AACxB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { BuildImageResult } from '@shravansunder/agent-vm-gondolin-core';
2
+ import { type GondolinImageBuilderDependencies } from '../build/gondolin-image-builder.js';
3
+ import type { GatewayBuildImageOptions } from './gateway-zone-support.js';
4
+ export interface GatewayImageBuilderDependencies {
5
+ readonly buildImage?: (options: GatewayBuildImageOptions) => Promise<BuildImageResult>;
6
+ readonly buildGondolinImage?: GondolinImageBuilderDependencies['buildImage'];
7
+ readonly loadBuildConfig?: GondolinImageBuilderDependencies['loadBuildConfig'];
8
+ }
9
+ export declare function buildGatewayImage(options: {
10
+ readonly buildConfigPath: string;
11
+ readonly cacheDir: string;
12
+ }, dependencies?: GatewayImageBuilderDependencies): Promise<BuildImageResult>;
13
+ //# sourceMappingURL=gateway-image-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-image-builder.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-image-builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAe,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAE3F,OAAO,EAEN,KAAK,gCAAgC,EACrC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,MAAM,WAAW,+BAA+B;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,gCAAgC,CAAC,YAAY,CAAC,CAAC;IAC7E,QAAQ,CAAC,eAAe,CAAC,EAAE,gCAAgC,CAAC,iBAAiB,CAAC,CAAC;CAC/E;AAMD,wBAAsB,iBAAiB,CACtC,OAAO,EAAE;IACR,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B,EACD,YAAY,GAAE,+BAAoC,GAChD,OAAO,CAAC,gBAAgB,CAAC,CAa3B"}
@@ -0,0 +1,19 @@
1
+ import fs from 'node:fs/promises';
2
+ import { buildGondolinImage as buildGondolinImageDefault, } from '../build/gondolin-image-builder.js';
3
+ async function loadBuildConfigFromJson(buildConfigPath) {
4
+ return JSON.parse(await fs.readFile(buildConfigPath, 'utf8'));
5
+ }
6
+ export async function buildGatewayImage(options, dependencies = {}) {
7
+ if (dependencies.buildImage) {
8
+ const loadBuildConfig = dependencies.loadBuildConfig ?? loadBuildConfigFromJson;
9
+ return await dependencies.buildImage({
10
+ buildConfig: await loadBuildConfig(options.buildConfigPath),
11
+ cacheDir: options.cacheDir,
12
+ });
13
+ }
14
+ return await buildGondolinImageDefault(options, {
15
+ ...(dependencies.buildGondolinImage ? { buildImage: dependencies.buildGondolinImage } : {}),
16
+ ...(dependencies.loadBuildConfig ? { loadBuildConfig: dependencies.loadBuildConfig } : {}),
17
+ });
18
+ }
19
+ //# sourceMappingURL=gateway-image-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-image-builder.js","sourceRoot":"","sources":["../../src/gateway/gateway-image-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAIlC,OAAO,EACN,kBAAkB,IAAI,yBAAyB,GAE/C,MAAM,oCAAoC,CAAC;AAS5C,KAAK,UAAU,uBAAuB,CAAC,eAAuB;IAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAgB,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,OAGC,EACD,eAAgD,EAAE;IAElD,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;QAC7B,MAAM,eAAe,GAAG,YAAY,CAAC,eAAe,IAAI,uBAAuB,CAAC;QAChF,OAAO,MAAM,YAAY,CAAC,UAAU,CAAC;YACpC,WAAW,EAAE,MAAM,eAAe,CAAC,OAAO,CAAC,eAAe,CAAC;YAC3D,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC1B,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,yBAAyB,CAAC,OAAO,EAAE;QAC/C,GAAG,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1F,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GatewayLifecycle, GatewayZoneConfig } from '@shravansunder/agent-vm-gateway-interface';
2
+ export declare function loadGatewayLifecycle(type: GatewayZoneConfig['gateway']['type']): GatewayLifecycle;
3
+ //# sourceMappingURL=gateway-lifecycle-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-lifecycle-loader.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-lifecycle-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,gBAAgB,EAChB,iBAAiB,EACjB,MAAM,2CAA2C,CAAC;AASnD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAEjG"}
@@ -0,0 +1,10 @@
1
+ import { openclawLifecycle } from '@shravansunder/agent-vm-openclaw-gateway';
2
+ import { workerLifecycle } from '@shravansunder/agent-vm-worker-gateway';
3
+ const lifecycleByType = {
4
+ coding: workerLifecycle,
5
+ openclaw: openclawLifecycle,
6
+ };
7
+ export function loadGatewayLifecycle(type) {
8
+ return lifecycleByType[type];
9
+ }
10
+ //# sourceMappingURL=gateway-lifecycle-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-lifecycle-loader.js","sourceRoot":"","sources":["../../src/gateway/gateway-lifecycle-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAEzE,MAAM,eAAe,GAAG;IACvB,MAAM,EAAE,eAAe;IACvB,QAAQ,EAAE,iBAAiB;CACgB,CAAC;AAE7C,MAAM,UAAU,oBAAoB,CAAC,IAA0C;IAC9E,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { GatewayLifecycle, GatewayZoneConfig } from '@shravansunder/agent-vm-gateway-interface';
2
+ import { type ManagedVm } from '@shravansunder/agent-vm-gondolin-core';
3
+ import { type GatewayImageBuilderDependencies } from './gateway-image-builder.js';
4
+ import { type GatewayManagedVmFactoryOptions, type GatewayZoneStartResult, type StartGatewayZoneOptions } from './gateway-zone-support.js';
5
+ export interface GatewayManagerDependencies extends GatewayImageBuilderDependencies {
6
+ readonly createManagedVm?: (options: GatewayManagedVmFactoryOptions) => Promise<ManagedVm>;
7
+ readonly loadGatewayLifecycle?: (type: GatewayZoneConfig['gateway']['type']) => GatewayLifecycle;
8
+ }
9
+ export declare function startGatewayZone(options: StartGatewayZoneOptions, dependencies?: GatewayManagerDependencies): Promise<GatewayZoneStartResult>;
10
+ //# sourceMappingURL=gateway-zone-orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-zone-orchestrator.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-zone-orchestrator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEX,gBAAgB,EAChB,iBAAiB,EACjB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEN,KAAK,SAAS,EACd,MAAM,uCAAuC,CAAC;AAI/C,OAAO,EAEN,KAAK,+BAA+B,EACpC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAEN,KAAK,8BAA8B,EACnC,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,0BAA2B,SAAQ,+BAA+B;IAClF,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3F,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,gBAAgB,CAAC;CACjG;AAmCD,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,uBAAuB,EAChC,YAAY,GAAE,0BAA+B,GAC3C,OAAO,CAAC,sBAAsB,CAAC,CAyFjC"}
@@ -0,0 +1,92 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { createManagedVm as createManagedVmFromCore, } from '@shravansunder/agent-vm-gondolin-core';
4
+ import { runTaskWithResult } from '../shared/run-task.js';
5
+ import { resolveZoneSecrets } from './credential-manager.js';
6
+ import { buildGatewayImage, } from './gateway-image-builder.js';
7
+ import { loadGatewayLifecycle } from './gateway-lifecycle-loader.js';
8
+ import { findGatewayZone, } from './gateway-zone-support.js';
9
+ async function waitForHealth(managedVm, healthCheck, attempt = 0, maxAttempts = 30, lastObservation = 'none') {
10
+ if (attempt >= maxAttempts) {
11
+ throw new Error(`Gateway readiness check failed after ${maxAttempts} attempts. Last observation: ${lastObservation}.`);
12
+ }
13
+ const healthCommand = healthCheck.type === 'http'
14
+ ? `curl -sS -o /dev/null -w "%{http_code}" --max-time 2 http://127.0.0.1:${healthCheck.port}${healthCheck.path} 2>/dev/null || echo 000`
15
+ : healthCheck.command;
16
+ const result = await managedVm.exec(healthCommand);
17
+ const currentObservation = healthCheck.type === 'http'
18
+ ? `http ${result.stdout.trim() || '(empty)'}`
19
+ : `exit ${result.exitCode}`;
20
+ if ((healthCheck.type === 'http' && result.stdout.trim().startsWith('2')) ||
21
+ (healthCheck.type === 'command' && result.exitCode === 0)) {
22
+ return;
23
+ }
24
+ await new Promise((resolve) => setTimeout(resolve, 500));
25
+ await waitForHealth(managedVm, healthCheck, attempt + 1, maxAttempts, currentObservation);
26
+ }
27
+ export async function startGatewayZone(options, dependencies = {}) {
28
+ const runTaskStep = options.runTask ?? (async (_title, fn) => await fn());
29
+ const zone = findGatewayZone(options.systemConfig, options.zoneId);
30
+ const lifecycle = (dependencies.loadGatewayLifecycle ?? loadGatewayLifecycle)(zone.gateway.type);
31
+ const resolvedSecrets = await runTaskWithResult(runTaskStep, 'Resolving zone secrets', async () => await resolveZoneSecrets({
32
+ systemConfig: options.systemConfig,
33
+ zoneId: zone.id,
34
+ secretResolver: options.secretResolver,
35
+ }));
36
+ const image = await runTaskWithResult(runTaskStep, 'Building gateway image', async () => await buildGatewayImage({
37
+ buildConfigPath: options.systemConfig.images.gateway.buildConfig,
38
+ cacheDir: path.join(options.systemConfig.cacheDir, 'images', 'gateway'),
39
+ }, {
40
+ ...(dependencies.buildImage ? { buildImage: dependencies.buildImage } : {}),
41
+ ...(dependencies.loadBuildConfig
42
+ ? { loadBuildConfig: dependencies.loadBuildConfig }
43
+ : {}),
44
+ }));
45
+ await fs.mkdir(zone.gateway.stateDir, { recursive: true });
46
+ await fs.mkdir(zone.gateway.workspaceDir, { recursive: true });
47
+ await runTaskStep('Preparing host state', async () => {
48
+ await lifecycle.prepareHostState?.(zone, options.secretResolver);
49
+ });
50
+ const vmSpec = lifecycle.buildVmSpec(zone, resolvedSecrets, options.systemConfig.host.controllerPort, options.systemConfig.tcpPool);
51
+ const processSpec = lifecycle.buildProcessSpec(zone, resolvedSecrets);
52
+ const createManagedVm = dependencies.createManagedVm ?? createManagedVmFromCore;
53
+ const managedVm = await runTaskWithResult(runTaskStep, 'Booting gateway VM', async () => await createManagedVm({
54
+ allowedHosts: vmSpec.allowedHosts,
55
+ cpus: zone.gateway.cpus,
56
+ env: vmSpec.environment,
57
+ imagePath: image.imagePath,
58
+ memory: zone.gateway.memory,
59
+ rootfsMode: vmSpec.rootfsMode,
60
+ secrets: vmSpec.mediatedSecrets,
61
+ sessionLabel: vmSpec.sessionLabel,
62
+ tcpHosts: vmSpec.tcpHosts,
63
+ vfsMounts: vmSpec.vfsMounts,
64
+ }));
65
+ await runTaskStep('Configuring gateway', async () => {
66
+ await managedVm.exec(processSpec.bootstrapCommand);
67
+ });
68
+ await runTaskStep('Starting gateway', async () => {
69
+ await managedVm.exec(processSpec.startCommand);
70
+ });
71
+ await runTaskStep('Waiting for readiness', async () => {
72
+ await waitForHealth(managedVm, processSpec.healthCheck);
73
+ });
74
+ managedVm.setIngressRoutes([
75
+ {
76
+ port: processSpec.guestListenPort,
77
+ prefix: '/',
78
+ stripPrefix: true,
79
+ },
80
+ ]);
81
+ const ingress = await managedVm.enableIngress({
82
+ listenPort: zone.gateway.port,
83
+ });
84
+ return {
85
+ image,
86
+ ingress,
87
+ processSpec,
88
+ vm: managedVm,
89
+ zone,
90
+ };
91
+ }
92
+ //# sourceMappingURL=gateway-zone-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-zone-orchestrator.js","sourceRoot":"","sources":["../../src/gateway/gateway-zone-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { GatewayProcessSpec } from '@shravansunder/agent-vm-gateway-interface';
2
+ import type { SystemConfig } from '../config/system-config.js';
3
+ import type { RunTaskFn } from '../shared/run-task.js';
4
+ export type GatewayZone = SystemConfig['zones'][number];
5
+ export interface StartGatewayZoneOptions {
6
+ readonly runTask?: RunTaskFn;
7
+ readonly secretResolver: import('@shravansunder/agent-vm-gondolin-core').SecretResolver;
8
+ readonly systemConfig: SystemConfig;
9
+ readonly zoneId: string;
10
+ }
11
+ export interface GatewayZoneStartResult {
12
+ readonly image: import('@shravansunder/agent-vm-gondolin-core').BuildImageResult;
13
+ readonly ingress: {
14
+ readonly host: string;
15
+ readonly port: number;
16
+ };
17
+ readonly processSpec: GatewayProcessSpec;
18
+ readonly vm: import('@shravansunder/agent-vm-gondolin-core').ManagedVm;
19
+ readonly zone: GatewayZone;
20
+ }
21
+ export interface GatewayBuildImageOptions {
22
+ readonly buildConfig: unknown;
23
+ readonly cacheDir: string;
24
+ readonly fullReset?: boolean;
25
+ }
26
+ export interface GatewayManagedVmFactoryOptions {
27
+ readonly allowedHosts: readonly string[];
28
+ readonly cpus: number;
29
+ readonly env?: Record<string, string>;
30
+ readonly imagePath: string;
31
+ readonly memory: string;
32
+ readonly rootfsMode: 'readonly' | 'memory' | 'cow';
33
+ readonly secrets: Record<string, {
34
+ readonly hosts: readonly string[];
35
+ readonly value: string;
36
+ }>;
37
+ readonly sessionLabel?: string;
38
+ readonly tcpHosts?: Record<string, string>;
39
+ readonly vfsMounts: Record<string, {
40
+ readonly kind: 'realfs' | 'realfs-readonly' | 'memory' | 'shadow';
41
+ readonly hostPath?: string;
42
+ readonly shadowConfig?: {
43
+ readonly deny: readonly string[];
44
+ readonly tmpfs: readonly string[];
45
+ };
46
+ }>;
47
+ }
48
+ export declare function findGatewayZone(systemConfig: SystemConfig, zoneId: string): GatewayZone;
49
+ //# sourceMappingURL=gateway-zone-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-zone-support.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-zone-support.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAEpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,OAAO,uCAAuC,EAAE,cAAc,CAAC;IACxF,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,KAAK,EAAE,OAAO,uCAAuC,EAAE,gBAAgB,CAAC;IACjF,QAAQ,CAAC,OAAO,EAAE;QACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,EAAE,EAAE,OAAO,uCAAuC,EAAE,SAAS,CAAC;IACvE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,CACvB,MAAM,EACN;QACC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACvB,CACD,CAAC;IACF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CACzB,MAAM,EACN;QACC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAClE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE;YACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;YACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;SAClC,CAAC;KACF,CACD,CAAC;CACF;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAOvF"}
@@ -0,0 +1,8 @@
1
+ export function findGatewayZone(systemConfig, zoneId) {
2
+ const zone = systemConfig.zones.find((candidateZone) => candidateZone.id === zoneId);
3
+ if (!zone) {
4
+ throw new Error(`Unknown zone '${zoneId}'.`);
5
+ }
6
+ return zone;
7
+ }
8
+ //# sourceMappingURL=gateway-zone-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-zone-support.js","sourceRoot":"","sources":["../../src/gateway/gateway-zone-support.ts"],"names":[],"mappings":"AA4DA,MAAM,UAAU,eAAe,CAAC,YAA0B,EAAE,MAAc;IACzE,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACrF,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,MAAM,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -0,0 +1,34 @@
1
+ export interface GatewayToolInvocation {
2
+ readonly tool: string;
3
+ readonly args: Record<string, unknown>;
4
+ readonly sessionKey?: string;
5
+ readonly dryRun?: boolean;
6
+ }
7
+ /**
8
+ * Liveness probe response from `/health` or `/healthz`.
9
+ * Gateway returns `{ ok: true, status: "live" }` when the process is alive.
10
+ */
11
+ export interface GatewayLivenessResponse {
12
+ readonly ok: boolean;
13
+ readonly status: 'live';
14
+ }
15
+ /**
16
+ * Readiness probe response from `/readyz`.
17
+ * Authenticated callers also receive `failing` and `uptimeMs` detail fields.
18
+ */
19
+ export interface GatewayReadinessResponse {
20
+ readonly ready: boolean;
21
+ readonly failing?: readonly string[];
22
+ readonly uptimeMs?: number;
23
+ }
24
+ export interface GatewayApiClient {
25
+ /** Check gateway readiness via the `/readyz` probe endpoint. */
26
+ getGatewayStatus(): Promise<GatewayReadinessResponse>;
27
+ invokeTool(invocation: GatewayToolInvocation): Promise<unknown>;
28
+ }
29
+ export declare function createGatewayApiClient(options: {
30
+ readonly gatewayUrl: string;
31
+ readonly token: string;
32
+ readonly fetchImpl?: (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
33
+ }): GatewayApiClient;
34
+ //# sourceMappingURL=gateway-api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-api-client.d.ts","sourceRoot":"","sources":["../../src/gateway-api-client/gateway-api-client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAChC,gEAAgE;IAChE,gBAAgB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACtD,UAAU,CAAC,UAAU,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC9F,GAAG,gBAAgB,CA4BnB"}
@@ -0,0 +1,29 @@
1
+ export function createGatewayApiClient(options) {
2
+ const fetchImpl = options.fetchImpl ?? fetch;
3
+ const baseUrl = options.gatewayUrl.replace(/\/$/u, '');
4
+ return {
5
+ getGatewayStatus: async () => {
6
+ const response = await fetchImpl(`${baseUrl}/readyz`, {
7
+ headers: {
8
+ authorization: `Bearer ${options.token}`,
9
+ },
10
+ });
11
+ return (await response.json());
12
+ },
13
+ invokeTool: async (invocation) => {
14
+ const response = await fetchImpl(`${baseUrl}/tools/invoke`, {
15
+ body: JSON.stringify(invocation),
16
+ headers: {
17
+ authorization: `Bearer ${options.token}`,
18
+ 'content-type': 'application/json',
19
+ },
20
+ method: 'POST',
21
+ });
22
+ if (!response.ok) {
23
+ throw new Error(`Gateway API returned status ${response.status}`);
24
+ }
25
+ return await response.json();
26
+ },
27
+ };
28
+ }
29
+ //# sourceMappingURL=gateway-api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-api-client.js","sourceRoot":"","sources":["../../src/gateway-api-client/gateway-api-client.ts"],"names":[],"mappings":"AAgCA,MAAM,UAAU,sBAAsB,CAAC,OAItC;IACA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEvD,OAAO;QACN,gBAAgB,EAAE,KAAK,IAAuC,EAAE;YAC/D,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,OAAO,SAAS,EAAE;gBACrD,OAAO,EAAE;oBACR,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;iBACxC;aACD,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA6B,CAAC;QAC5D,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,UAAiC,EAAoB,EAAE;YACzE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,OAAO,eAAe,EAAE;gBAC3D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;gBAChC,OAAO,EAAE;oBACR,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;oBACxC,cAAc,EAAE,kBAAkB;iBAClC;gBACD,MAAM,EAAE,MAAM;aACd,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC9B,CAAC;KACD,CAAC;AACH,CAAC"}