@multiplayer-app/agent 0.1.20 → 0.1.22

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 (298) hide show
  1. package/README.md +14 -7
  2. package/dist/agent/definition.test.js +8 -3
  3. package/dist/agent/definition.test.js.map +1 -1
  4. package/dist/agent/profiles/coding.d.ts +1 -1
  5. package/dist/agent/profiles/coding.d.ts.map +1 -1
  6. package/dist/agent/profiles/coding.js +21 -4
  7. package/dist/agent/profiles/coding.js.map +1 -1
  8. package/dist/agent/profiles/index.js +1 -1
  9. package/dist/agent/profiles/index.js.map +1 -1
  10. package/dist/agent/profiles/research.d.ts.map +1 -1
  11. package/dist/agent/profiles/research.js +2 -2
  12. package/dist/agent/profiles/research.js.map +1 -1
  13. package/dist/agent/turn-history.d.ts.map +1 -1
  14. package/dist/agent/turn-history.js +7 -1
  15. package/dist/agent/turn-history.js.map +1 -1
  16. package/dist/agent/turn-runner.d.ts +8 -0
  17. package/dist/agent/turn-runner.d.ts.map +1 -1
  18. package/dist/agent/turn-runner.js +35 -10
  19. package/dist/agent/turn-runner.js.map +1 -1
  20. package/dist/app/app-host.d.ts +57 -0
  21. package/dist/app/app-host.d.ts.map +1 -0
  22. package/dist/app/app-host.js +252 -0
  23. package/dist/app/app-host.js.map +1 -0
  24. package/dist/app/app-host.test.d.ts +2 -0
  25. package/dist/app/app-host.test.d.ts.map +1 -0
  26. package/dist/app/app-host.test.js +639 -0
  27. package/dist/app/app-host.test.js.map +1 -0
  28. package/dist/app/build-log.d.ts +14 -0
  29. package/dist/app/build-log.d.ts.map +1 -0
  30. package/dist/app/build-log.js +173 -0
  31. package/dist/app/build-log.js.map +1 -0
  32. package/dist/app/build-log.test.d.ts +2 -0
  33. package/dist/app/build-log.test.d.ts.map +1 -0
  34. package/dist/app/build-log.test.js +255 -0
  35. package/dist/app/build-log.test.js.map +1 -0
  36. package/dist/app/config.d.ts +196 -0
  37. package/dist/app/config.d.ts.map +1 -0
  38. package/dist/app/config.js +362 -0
  39. package/dist/app/config.js.map +1 -0
  40. package/dist/app/config.test.d.ts +2 -0
  41. package/dist/app/config.test.d.ts.map +1 -0
  42. package/dist/app/config.test.js +224 -0
  43. package/dist/app/config.test.js.map +1 -0
  44. package/dist/app/detect.d.ts +68 -0
  45. package/dist/app/detect.d.ts.map +1 -0
  46. package/dist/app/detect.js +449 -0
  47. package/dist/app/detect.js.map +1 -0
  48. package/dist/app/detect.test.d.ts +2 -0
  49. package/dist/app/detect.test.d.ts.map +1 -0
  50. package/dist/app/detect.test.js +267 -0
  51. package/dist/app/detect.test.js.map +1 -0
  52. package/dist/app/env.d.ts +5 -0
  53. package/dist/app/env.d.ts.map +1 -0
  54. package/dist/app/env.js +22 -0
  55. package/dist/app/env.js.map +1 -0
  56. package/dist/app/functions-cli.d.ts +3 -0
  57. package/dist/app/functions-cli.d.ts.map +1 -0
  58. package/dist/app/functions-cli.js +27 -0
  59. package/dist/app/functions-cli.js.map +1 -0
  60. package/dist/app/functions-host.d.ts +15 -0
  61. package/dist/app/functions-host.d.ts.map +1 -0
  62. package/dist/app/functions-host.js +276 -0
  63. package/dist/app/functions-host.js.map +1 -0
  64. package/dist/app/functions-host.test.d.ts +2 -0
  65. package/dist/app/functions-host.test.d.ts.map +1 -0
  66. package/dist/app/functions-host.test.js +117 -0
  67. package/dist/app/functions-host.test.js.map +1 -0
  68. package/dist/app/functions-routes.d.ts +23 -0
  69. package/dist/app/functions-routes.d.ts.map +1 -0
  70. package/dist/app/functions-routes.js +85 -0
  71. package/dist/app/functions-routes.js.map +1 -0
  72. package/dist/app/functions-routes.test.d.ts +2 -0
  73. package/dist/app/functions-routes.test.d.ts.map +1 -0
  74. package/dist/app/functions-routes.test.js +40 -0
  75. package/dist/app/functions-routes.test.js.map +1 -0
  76. package/dist/app/manifest.d.ts +17 -0
  77. package/dist/app/manifest.d.ts.map +1 -0
  78. package/dist/app/manifest.js +64 -0
  79. package/dist/app/manifest.js.map +1 -0
  80. package/dist/app/manifest.test.d.ts +2 -0
  81. package/dist/app/manifest.test.d.ts.map +1 -0
  82. package/dist/app/manifest.test.js +173 -0
  83. package/dist/app/manifest.test.js.map +1 -0
  84. package/dist/app/release-artifacts.d.ts +43 -0
  85. package/dist/app/release-artifacts.d.ts.map +1 -0
  86. package/dist/app/release-artifacts.js +239 -0
  87. package/dist/app/release-artifacts.js.map +1 -0
  88. package/dist/app/release-artifacts.test.d.ts +2 -0
  89. package/dist/app/release-artifacts.test.d.ts.map +1 -0
  90. package/dist/app/release-artifacts.test.js +326 -0
  91. package/dist/app/release-artifacts.test.js.map +1 -0
  92. package/dist/app/route-pattern.d.ts +23 -0
  93. package/dist/app/route-pattern.d.ts.map +1 -0
  94. package/dist/app/route-pattern.js +339 -0
  95. package/dist/app/route-pattern.js.map +1 -0
  96. package/dist/app/route-pattern.test.d.ts +2 -0
  97. package/dist/app/route-pattern.test.d.ts.map +1 -0
  98. package/dist/app/route-pattern.test.js +187 -0
  99. package/dist/app/route-pattern.test.js.map +1 -0
  100. package/dist/app/rules.d.ts +61 -0
  101. package/dist/app/rules.d.ts.map +1 -0
  102. package/dist/app/rules.js +90 -0
  103. package/dist/app/rules.js.map +1 -0
  104. package/dist/app/rules.test.d.ts +2 -0
  105. package/dist/app/rules.test.d.ts.map +1 -0
  106. package/dist/app/rules.test.js +69 -0
  107. package/dist/app/rules.test.js.map +1 -0
  108. package/dist/app/runner.d.ts +109 -0
  109. package/dist/app/runner.d.ts.map +1 -0
  110. package/dist/app/runner.js +429 -0
  111. package/dist/app/runner.js.map +1 -0
  112. package/dist/app/site.d.ts +73 -0
  113. package/dist/app/site.d.ts.map +1 -0
  114. package/dist/app/site.js +161 -0
  115. package/dist/app/site.js.map +1 -0
  116. package/dist/app/site.test.d.ts +2 -0
  117. package/dist/app/site.test.d.ts.map +1 -0
  118. package/dist/app/site.test.js +291 -0
  119. package/dist/app/site.test.js.map +1 -0
  120. package/dist/app/static-server.d.ts +20 -0
  121. package/dist/app/static-server.d.ts.map +1 -0
  122. package/dist/app/static-server.js +145 -0
  123. package/dist/app/static-server.js.map +1 -0
  124. package/dist/persistence/conversation-store.d.ts +21 -0
  125. package/dist/persistence/conversation-store.d.ts.map +1 -0
  126. package/dist/persistence/conversation-store.js +59 -0
  127. package/dist/persistence/conversation-store.js.map +1 -0
  128. package/dist/persistence/conversation-store.test.d.ts +2 -0
  129. package/dist/persistence/conversation-store.test.d.ts.map +1 -0
  130. package/dist/persistence/conversation-store.test.js +98 -0
  131. package/dist/persistence/conversation-store.test.js.map +1 -0
  132. package/dist/persistence/git-sync.d.ts +14 -1
  133. package/dist/persistence/git-sync.d.ts.map +1 -1
  134. package/dist/persistence/git-sync.js +73 -17
  135. package/dist/persistence/git-sync.js.map +1 -1
  136. package/dist/persistence/git-sync.test.js +155 -6
  137. package/dist/persistence/git-sync.test.js.map +1 -1
  138. package/dist/persistence/snapshot-sync.d.ts +19 -2
  139. package/dist/persistence/snapshot-sync.d.ts.map +1 -1
  140. package/dist/persistence/snapshot-sync.js +194 -83
  141. package/dist/persistence/snapshot-sync.js.map +1 -1
  142. package/dist/persistence/snapshot-sync.test.js +145 -27
  143. package/dist/persistence/snapshot-sync.test.js.map +1 -1
  144. package/dist/persistence/workspace.d.ts +3 -0
  145. package/dist/persistence/workspace.d.ts.map +1 -1
  146. package/dist/persistence/workspace.js +1 -0
  147. package/dist/persistence/workspace.js.map +1 -1
  148. package/dist/research/extract-texts.d.ts.map +1 -1
  149. package/dist/research/extract-texts.js +6 -13
  150. package/dist/research/extract-texts.js.map +1 -1
  151. package/dist/research/filingramp/attachment-tools.d.ts.map +1 -1
  152. package/dist/research/filingramp/attachment-tools.js +7 -4
  153. package/dist/research/filingramp/attachment-tools.js.map +1 -1
  154. package/dist/research/filingramp/shared.d.ts.map +1 -1
  155. package/dist/research/filingramp/shared.js +5 -5
  156. package/dist/research/filingramp/shared.js.map +1 -1
  157. package/dist/runtime/app-mode.d.ts +10 -0
  158. package/dist/runtime/app-mode.d.ts.map +1 -0
  159. package/dist/runtime/app-mode.js +172 -0
  160. package/dist/runtime/app-mode.js.map +1 -0
  161. package/dist/runtime/app-mode.test.d.ts +2 -0
  162. package/dist/runtime/app-mode.test.d.ts.map +1 -0
  163. package/dist/runtime/app-mode.test.js +130 -0
  164. package/dist/runtime/app-mode.test.js.map +1 -0
  165. package/dist/runtime/app-rehearsal.d.ts +2 -0
  166. package/dist/runtime/app-rehearsal.d.ts.map +1 -0
  167. package/dist/runtime/app-rehearsal.js +56 -0
  168. package/dist/runtime/app-rehearsal.js.map +1 -0
  169. package/dist/runtime/build-mode.d.ts +18 -0
  170. package/dist/runtime/build-mode.d.ts.map +1 -0
  171. package/dist/runtime/build-mode.js +108 -0
  172. package/dist/runtime/build-mode.js.map +1 -0
  173. package/dist/runtime/build-mode.test.d.ts +2 -0
  174. package/dist/runtime/build-mode.test.d.ts.map +1 -0
  175. package/dist/runtime/build-mode.test.js +159 -0
  176. package/dist/runtime/build-mode.test.js.map +1 -0
  177. package/dist/runtime/cli.js +7 -2
  178. package/dist/runtime/cli.js.map +1 -1
  179. package/dist/runtime/config.d.ts +4 -0
  180. package/dist/runtime/config.d.ts.map +1 -1
  181. package/dist/runtime/config.js +13 -2
  182. package/dist/runtime/config.js.map +1 -1
  183. package/dist/runtime/guest-server.d.ts +3 -0
  184. package/dist/runtime/guest-server.d.ts.map +1 -0
  185. package/dist/runtime/{lambda-microvm.js → guest-server.js} +49 -18
  186. package/dist/runtime/guest-server.js.map +1 -0
  187. package/dist/runtime/image-hooks.d.ts +5 -0
  188. package/dist/runtime/image-hooks.d.ts.map +1 -0
  189. package/dist/runtime/image-hooks.js +68 -0
  190. package/dist/runtime/image-hooks.js.map +1 -0
  191. package/dist/runtime/image-hooks.test.d.ts +2 -0
  192. package/dist/runtime/image-hooks.test.d.ts.map +1 -0
  193. package/dist/runtime/image-hooks.test.js +74 -0
  194. package/dist/runtime/image-hooks.test.js.map +1 -0
  195. package/dist/runtime/index.d.ts +8 -3
  196. package/dist/runtime/index.d.ts.map +1 -1
  197. package/dist/runtime/index.js +53 -35
  198. package/dist/runtime/index.js.map +1 -1
  199. package/dist/runtime/listening-ports.d.ts +13 -0
  200. package/dist/runtime/listening-ports.d.ts.map +1 -0
  201. package/dist/runtime/listening-ports.js +78 -0
  202. package/dist/runtime/listening-ports.js.map +1 -0
  203. package/dist/runtime/listening-ports.test.d.ts +2 -0
  204. package/dist/runtime/listening-ports.test.d.ts.map +1 -0
  205. package/dist/runtime/listening-ports.test.js +39 -0
  206. package/dist/runtime/listening-ports.test.js.map +1 -0
  207. package/dist/runtime/preview-proxy.d.ts +56 -0
  208. package/dist/runtime/preview-proxy.d.ts.map +1 -0
  209. package/dist/runtime/preview-proxy.js +302 -0
  210. package/dist/runtime/preview-proxy.js.map +1 -0
  211. package/dist/runtime/preview-proxy.test.d.ts +2 -0
  212. package/dist/runtime/preview-proxy.test.d.ts.map +1 -0
  213. package/dist/runtime/preview-proxy.test.js +122 -0
  214. package/dist/runtime/preview-proxy.test.js.map +1 -0
  215. package/dist/runtime/session-mode.d.ts +3 -0
  216. package/dist/runtime/session-mode.d.ts.map +1 -0
  217. package/dist/runtime/session-mode.js +60 -0
  218. package/dist/runtime/session-mode.js.map +1 -0
  219. package/dist/runtime/workload.d.ts +44 -0
  220. package/dist/runtime/workload.d.ts.map +1 -0
  221. package/dist/runtime/workload.js +222 -0
  222. package/dist/runtime/workload.js.map +1 -0
  223. package/dist/runtime/workload.test.d.ts +2 -0
  224. package/dist/runtime/workload.test.d.ts.map +1 -0
  225. package/dist/runtime/workload.test.js +235 -0
  226. package/dist/runtime/workload.test.js.map +1 -0
  227. package/dist/session/conversation.d.ts +3 -2
  228. package/dist/session/conversation.d.ts.map +1 -1
  229. package/dist/session/conversation.js +11 -7
  230. package/dist/session/conversation.js.map +1 -1
  231. package/dist/session/conversation.test.js +2 -3
  232. package/dist/session/conversation.test.js.map +1 -1
  233. package/dist/session/runtime.d.ts +16 -3
  234. package/dist/session/runtime.d.ts.map +1 -1
  235. package/dist/session/runtime.js +80 -13
  236. package/dist/session/runtime.js.map +1 -1
  237. package/dist/session/runtime.test.js +18 -7
  238. package/dist/session/runtime.test.js.map +1 -1
  239. package/dist/session/tools.d.ts.map +1 -1
  240. package/dist/session/tools.js +3 -3
  241. package/dist/session/tools.js.map +1 -1
  242. package/dist/task/loop.d.ts.map +1 -1
  243. package/dist/task/loop.js +6 -4
  244. package/dist/task/loop.js.map +1 -1
  245. package/dist/tools/exec-tools.d.ts +12 -0
  246. package/dist/tools/exec-tools.d.ts.map +1 -1
  247. package/dist/tools/exec-tools.js +46 -3
  248. package/dist/tools/exec-tools.js.map +1 -1
  249. package/dist/tools/exec-tools.test.d.ts +2 -0
  250. package/dist/tools/exec-tools.test.d.ts.map +1 -0
  251. package/dist/tools/exec-tools.test.js +48 -0
  252. package/dist/tools/exec-tools.test.js.map +1 -0
  253. package/dist/tools/fs-tools.d.ts.map +1 -1
  254. package/dist/tools/fs-tools.js +5 -5
  255. package/dist/tools/fs-tools.js.map +1 -1
  256. package/dist/transport/link.d.ts.map +1 -1
  257. package/dist/transport/link.js +16 -5
  258. package/dist/transport/link.js.map +1 -1
  259. package/dist/transport/link.test.js +24 -0
  260. package/dist/transport/link.test.js.map +1 -1
  261. package/dist/transport/protocol.d.ts +215 -3
  262. package/dist/transport/protocol.d.ts.map +1 -1
  263. package/dist/transport/protocol.js +163 -7
  264. package/dist/transport/protocol.js.map +1 -1
  265. package/dist/transport/protocol.test.js +41 -0
  266. package/dist/transport/protocol.test.js.map +1 -1
  267. package/dist/workspace-sync/eligibility.d.ts +14 -0
  268. package/dist/workspace-sync/eligibility.d.ts.map +1 -0
  269. package/dist/workspace-sync/eligibility.js +53 -0
  270. package/dist/workspace-sync/eligibility.js.map +1 -0
  271. package/dist/workspace-sync/merge.d.ts +15 -0
  272. package/dist/workspace-sync/merge.d.ts.map +1 -0
  273. package/dist/workspace-sync/merge.js +66 -0
  274. package/dist/workspace-sync/merge.js.map +1 -0
  275. package/dist/workspace-sync/merge.test.d.ts +2 -0
  276. package/dist/workspace-sync/merge.test.d.ts.map +1 -0
  277. package/dist/workspace-sync/merge.test.js +28 -0
  278. package/dist/workspace-sync/merge.test.js.map +1 -0
  279. package/dist/workspace-sync/workspace-sync.d.ts +48 -0
  280. package/dist/workspace-sync/workspace-sync.d.ts.map +1 -0
  281. package/dist/workspace-sync/workspace-sync.js +308 -0
  282. package/dist/workspace-sync/workspace-sync.js.map +1 -0
  283. package/dist/workspace-sync/workspace-sync.test.d.ts +2 -0
  284. package/dist/workspace-sync/workspace-sync.test.d.ts.map +1 -0
  285. package/dist/workspace-sync/workspace-sync.test.js +111 -0
  286. package/dist/workspace-sync/workspace-sync.test.js.map +1 -0
  287. package/dist/workspace-sync/write-drafts.d.ts +24 -0
  288. package/dist/workspace-sync/write-drafts.d.ts.map +1 -0
  289. package/dist/workspace-sync/write-drafts.js +87 -0
  290. package/dist/workspace-sync/write-drafts.js.map +1 -0
  291. package/dist/workspace-sync/write-drafts.test.d.ts +2 -0
  292. package/dist/workspace-sync/write-drafts.test.d.ts.map +1 -0
  293. package/dist/workspace-sync/write-drafts.test.js +36 -0
  294. package/dist/workspace-sync/write-drafts.test.js.map +1 -0
  295. package/package.json +12 -2
  296. package/dist/runtime/lambda-microvm.d.ts +0 -3
  297. package/dist/runtime/lambda-microvm.d.ts.map +0 -1
  298. package/dist/runtime/lambda-microvm.js.map +0 -1
@@ -1,7 +1,14 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.loadConfigFromEnv = loadConfigFromEnv;
7
+ const node_os_1 = __importDefault(require("node:os"));
8
+ const node_path_1 = __importDefault(require("node:path"));
4
9
  const protocol_1 = require("../transport/protocol");
10
+ /** Root's alone: the runtime's files, out of reach of everything it runs. */
11
+ const DEFAULT_STATE_DIR = '/var/lib/agent';
5
12
  const DEFAULT_MODEL = 'anthropic/claude-sonnet-5.5';
6
13
  const DEFAULT_WORKSPACE_DIR = '/workspace';
7
14
  function decodeMcpConnections(raw) {
@@ -49,7 +56,7 @@ function filingRampFromEnv(env) {
49
56
  industryData: env[protocol_1.AGENT_ENV.FILINGRAMP_INDUSTRY_DATA] === 'true',
50
57
  };
51
58
  }
52
- function gitFromEnv(env, sessionId, workspaceDir) {
59
+ function gitFromEnv(env, sessionId, workspaceDir, stateDir) {
53
60
  const serverUrl = env[protocol_1.AGENT_ENV.GIT_SERVER_URL];
54
61
  const repository = env[protocol_1.AGENT_ENV.GIT_REPOSITORY];
55
62
  const token = env[protocol_1.AGENT_ENV.ACCESS_TOKEN];
@@ -61,12 +68,14 @@ function gitFromEnv(env, sessionId, workspaceDir) {
61
68
  serverUrl: serverUrl.replace(/\/+$/, ''),
62
69
  repository,
63
70
  dir: env[protocol_1.AGENT_ENV.GIT_REPOSITORY_DIR] || workspaceDir,
71
+ gitDir: node_path_1.default.join(stateDir, 'git'),
64
72
  branch: env[protocol_1.AGENT_ENV.GIT_BRANCH] || `session/${sessionId}`,
65
73
  token,
66
74
  };
67
75
  }
68
76
  /** Reads the full run config from process.env — the guest's own contract, see AGENT_ENV in protocol.ts. */
69
77
  function loadConfigFromEnv(env = process.env) {
78
+ var _a;
70
79
  const sessionId = env[protocol_1.AGENT_ENV.SESSION_ID];
71
80
  if (!sessionId)
72
81
  throw new Error('SESSION_ID is required');
@@ -76,6 +85,7 @@ function loadConfigFromEnv(env = process.env) {
76
85
  if (mode === 'task' && !task)
77
86
  throw new Error('AGENT_TASK is required in task mode');
78
87
  const workspaceDir = env[protocol_1.AGENT_ENV.AGENT_WORKSPACE_DIR] || DEFAULT_WORKSPACE_DIR;
88
+ const stateDir = env[protocol_1.AGENT_ENV.AGENT_STATE_DIR] || (((_a = process.getuid) === null || _a === void 0 ? void 0 : _a.call(process)) === 0 ? DEFAULT_STATE_DIR : node_path_1.default.join(node_os_1.default.tmpdir(), `agent-state-${sessionId}`));
79
89
  const model = env[protocol_1.AGENT_ENV.AGENT_MODEL] || DEFAULT_MODEL;
80
90
  const storageUrl = env[protocol_1.AGENT_ENV.SESSION_STORAGE_URL];
81
91
  // The same ACCESS_TOKEN serves Git or storage, so only a storage URL without it is incomplete.
@@ -100,7 +110,8 @@ function loadConfigFromEnv(env = process.env) {
100
110
  },
101
111
  filingRamp: filingRampFromEnv(env),
102
112
  researchScope: parseScope(env[protocol_1.AGENT_ENV.FILINGRAMP_RESEARCH_SCOPE_JSON]),
103
- git: gitFromEnv(env, sessionId, workspaceDir),
113
+ stateDir,
114
+ git: gitFromEnv(env, sessionId, workspaceDir, stateDir),
104
115
  sessionStorage: storageUrl && storageToken ? { url: storageUrl, token: storageToken, dir: workspaceDir } : undefined,
105
116
  };
106
117
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/runtime/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/runtime/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=guest-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guest-server.d.ts","sourceRoot":"","sources":["../../src/runtime/guest-server.ts"],"names":[],"mappings":""}
@@ -4,8 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- // Lambda MicroVM-specific bootstrap. AWS's platform calls the lifecycle hooks
8
- // (/aws/lambda-microvms/runtime/v1/{run,resume,suspend,terminate}) on port 8080 and expects a
7
+ // The guest's main process, on every engine: it holds port 8080 and starts the agent. On Lambda
8
+ // MicroVM, AWS's platform calls the lifecycle hooks
9
+ // (/aws/lambda-microvms/runtime/v1/{run,resume,suspend,terminate}) on that port and expects a
9
10
  // response before it considers the instance up (createMicrovmImages registers every image with
10
11
  // hooks: { run/resume/suspend/terminate: 'ENABLED' } — libs/sandbox/src/microvm-images.ts —
11
12
  // this isn't optional). Per-run config (env vars) arrives as the /run hook's runHookPayload,
@@ -13,20 +14,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
14
  //
14
15
  // The hook server stays up for the whole life of the VM: `suspend` and `terminate` checkpoint
15
16
  // the session (conversation + workspace to the git server), `resume` re-announces the agent.
16
- // Research VMs never need port 8080 for an app, so nothing competes for it. Engines without a
17
- // hook caller (Docker, Fargate) set SESSION_ID in the real env at boot, which starts the agent
18
- // directly.
17
+ // Apps never get port 8080: it also serves the live preview (preview-proxy.ts), which forwards to
18
+ // the port an app actually listens on. Engines without a hook caller (Docker, Fargate) set
19
+ // SESSION_ID in the real env at boot, which starts the agent directly.
19
20
  const child_process_1 = require("child_process");
20
21
  const fs_1 = __importDefault(require("fs"));
21
22
  const http_1 = __importDefault(require("http"));
23
+ const image_hooks_1 = require("./image-hooks");
22
24
  const index_1 = require("./index");
23
25
  const microvm_bootstrap_1 = require("./microvm-bootstrap");
26
+ const preview_proxy_1 = require("./preview-proxy");
24
27
  const HOOK_PREFIX = '/aws/lambda-microvms/runtime/v1/';
25
- const PORT = 8080;
26
28
  let running;
27
29
  let starting;
28
30
  const bootstrap = new microvm_bootstrap_1.MicrovmBootstrap();
29
31
  const DROPBEAR_HOST_KEY = '/etc/dropbear/dropbear_rsa_host_key';
32
+ const imageHook = (0, image_hooks_1.imageHooks)();
30
33
  /**
31
34
  * entrypoint.sh starts dropbear only when the keys are in the boot env (Docker, Fargate). A
32
35
  * Lambda MicroVM boots while its image is built, before any session exists, so its keys arrive
@@ -50,7 +53,12 @@ function configured() {
50
53
  catch (error) {
51
54
  console.error('ssh setup failed:', error instanceof Error ? error.message : error);
52
55
  }
53
- void start().catch(() => undefined);
56
+ if (hasSomethingToRun())
57
+ void start().catch(() => undefined);
58
+ }
59
+ /** A VM from an image with no run configuration, as AWS starts one to validate a new image: nothing to do. */
60
+ function hasSomethingToRun() {
61
+ return Boolean(process.env.SESSION_ID || process.env.AGENT_MODE);
54
62
  }
55
63
  function start() {
56
64
  if (!starting) {
@@ -70,6 +78,10 @@ function start() {
70
78
  async function onHook(hook, body) {
71
79
  switch (hook) {
72
80
  case 'run': {
81
+ // Anything in the VM can reach this port. Once the agent is starting, the only caller left
82
+ // is a workload, and this configures the VM (its SSH keys among it).
83
+ if (starting)
84
+ return;
73
85
  let payload;
74
86
  try {
75
87
  const parsed = JSON.parse(body);
@@ -85,7 +97,8 @@ async function onHook(hook, body) {
85
97
  }
86
98
  case 'suspend':
87
99
  case 'terminate':
88
- await (0, index_1.checkpointBeforeFreeze)(starting, hook);
100
+ if (hasSomethingToRun())
101
+ await (0, index_1.checkpointBeforeFreeze)(starting, hook);
89
102
  return;
90
103
  case 'resume':
91
104
  // Memory and disk survived. The socket reconnects on its own, and the link re-announces
@@ -95,8 +108,11 @@ async function onHook(hook, body) {
95
108
  return;
96
109
  }
97
110
  }
98
- const server = http_1.default.createServer((req, res) => {
99
- var _a, _b;
111
+ const server = http_1.default.createServer((0, preview_proxy_1.guardRequests)((req, res) => {
112
+ var _a, _b, _c, _d;
113
+ // First: a preview request belongs to the app whatever its path, never to the hooks below.
114
+ if ((0, preview_proxy_1.proxyPreviewRequest)(req, res))
115
+ return;
100
116
  if (req.url === '/internal/bootstrap' && req.method === 'POST') {
101
117
  if (!bootstrap.authorized(req.headers.authorization)) {
102
118
  res.writeHead(401, { Connection: 'close' });
@@ -134,7 +150,13 @@ const server = http_1.default.createServer((req, res) => {
134
150
  });
135
151
  return;
136
152
  }
137
- if (((_a = req.url) === null || _a === void 0 ? void 0 : _a.startsWith(HOOK_PREFIX)) && req.method === 'POST') {
153
+ const asked = ((_a = req.url) === null || _a === void 0 ? void 0 : _a.startsWith(HOOK_PREFIX)) ? imageHook[req.url.slice(HOOK_PREFIX.length)] : undefined;
154
+ if (asked) {
155
+ res.writeHead(asked(), { 'Content-Type': 'application/json' });
156
+ res.end('{}');
157
+ return;
158
+ }
159
+ if (((_b = req.url) === null || _b === void 0 ? void 0 : _b.startsWith(HOOK_PREFIX)) && req.method === 'POST') {
138
160
  const hook = req.url.slice(HOOK_PREFIX.length);
139
161
  const chunks = [];
140
162
  req.on('data', (chunk) => chunks.push(chunk));
@@ -157,13 +179,22 @@ const server = http_1.default.createServer((req, res) => {
157
179
  });
158
180
  return;
159
181
  }
182
+ // A deployment (AGENT_MODE=app): everything else is its app's.
183
+ if ((0, preview_proxy_1.proxyAppRequest)(req, res))
184
+ return;
160
185
  res.writeHead(200, { 'Content-Type': 'application/json' });
161
- res.end(JSON.stringify({ status: 'ok', path: req.url, session: (_b = running === null || running === void 0 ? void 0 : running.config.sessionId) !== null && _b !== void 0 ? _b : null }));
162
- });
163
- server.listen(PORT, () => {
164
- console.log(`agent lifecycle hook server listening on ${PORT}`);
165
- // Docker / Fargate: no lifecycle hook caller, so a SESSION_ID already in the env drives startup.
166
- if (process.env.SESSION_ID)
186
+ res.end(JSON.stringify({ status: 'ok', path: req.url, session: (_d = (_c = running === null || running === void 0 ? void 0 : running.config) === null || _c === void 0 ? void 0 : _c.sessionId) !== null && _d !== void 0 ? _d : null }));
187
+ }));
188
+ server.on('upgrade', (0, preview_proxy_1.guardUpgrades)((req, socket, head) => {
189
+ if (!(0, preview_proxy_1.proxyPreviewUpgrade)(req, socket, head))
190
+ socket.destroy();
191
+ }));
192
+ server.listen(preview_proxy_1.GUEST_HTTP_PORT, () => {
193
+ console.log(`agent lifecycle hook server listening on ${preview_proxy_1.GUEST_HTTP_PORT}`);
194
+ // Ahead of the build's first /ready, and of a VM's first request on the engines that have no hooks.
195
+ imageHook.ready();
196
+ // Docker / Fargate: no lifecycle hook caller, so what's already in the env drives startup.
197
+ if (hasSomethingToRun())
167
198
  setImmediate(() => void start().catch(() => undefined));
168
199
  });
169
200
  let shuttingDown = false;
@@ -183,4 +214,4 @@ for (const signal of ['SIGTERM', 'SIGINT']) {
183
214
  });
184
215
  });
185
216
  }
186
- //# sourceMappingURL=lambda-microvm.js.map
217
+ //# sourceMappingURL=guest-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guest-server.js","sourceRoot":"","sources":["../../src/runtime/guest-server.ts"],"names":[],"mappings":";;;;;;AACA,gGAAgG;AAChG,oDAAoD;AACpD,8FAA8F;AAC9F,+FAA+F;AAC/F,4FAA4F;AAC5F,6FAA6F;AAC7F,gCAAgC;AAChC,EAAE;AACF,8FAA8F;AAC9F,6FAA6F;AAC7F,kGAAkG;AAClG,2FAA2F;AAC3F,uEAAuE;AACvE,iDAAqC;AACrC,4CAAmB;AACnB,gDAAuB;AAEvB,+CAA0C;AAC1C,mCAA+E;AAC/E,2DAA2E;AAC3E,mDAA0I;AAE1I,MAAM,WAAW,GAAG,kCAAkC,CAAA;AAEtD,IAAI,OAAiC,CAAA;AACrC,IAAI,QAA2C,CAAA;AAC/C,MAAM,SAAS,GAAG,IAAI,oCAAgB,EAAE,CAAA;AACxC,MAAM,iBAAiB,GAAG,qCAAqC,CAAA;AAC/D,MAAM,SAAS,GAAG,IAAA,wBAAU,GAAE,CAAA;AAE9B;;;;GAIG;AACH,SAAS,QAAQ;IACf,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAA;IAClD,IAAI,CAAC,IAAI,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAAE,OAAM;IACtD,YAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5D,YAAE,CAAC,aAAa,CAAC,4BAA4B,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5F,MAAM,QAAQ,GAAG,IAAA,qBAAK,EAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IACvG,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1F,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;AACpD,CAAC;AAED,gFAAgF;AAChF,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,QAAQ,EAAE,CAAA;IACZ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACpF,CAAC;IACD,IAAI,iBAAiB,EAAE;QAAE,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;AAC9D,CAAC;AAED,8GAA8G;AAC9G,SAAS,iBAAiB;IACxB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;AAClE,CAAC;AAED,SAAS,KAAK;IACZ,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAA,kBAAU,GAAE;aACpB,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,OAAO,GAAG,KAAK,CAAA;YACf,OAAO,KAAK,CAAA;QACd,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,QAAQ,GAAG,SAAS,CAAA;YACpB,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YAClF,MAAM,KAAK,CAAA;QACb,CAAC,CAAC,CAAA;IACN,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,IAAY;IAC9C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,2FAA2F;YAC3F,qEAAqE;YACrE,IAAI,QAAQ;gBAAE,OAAM;YACpB,IAAI,OAA2B,CAAA;YAC/B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgC,CAAA;gBAC9D,OAAO,GAAG,MAAM,CAAC,cAAc,CAAA;YACjC,CAAC;YAAC,WAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;YAC7C,CAAC;YACD,4FAA4F;YAC5F,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,UAAU,EAAE,CAAA;YACpD,OAAM;QACR,CAAC;QACD,KAAK,SAAS,CAAC;QACf,KAAK,WAAW;YACd,IAAI,iBAAiB,EAAE;gBAAE,MAAM,IAAA,8BAAsB,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YACrE,OAAM;QACR,KAAK,QAAQ;YACX,wFAAwF;YACxF,qEAAqE;YACrE,OAAM;QACR;YACE,OAAM;IACV,CAAC;AACH,CAAC;AAED,MAAM,MAAM,GAAG,cAAI,CAAC,YAAY,CAAC,IAAA,6BAAa,EAAC,CAAC,GAAyB,EAAE,GAAwB,EAAE,EAAE;;IACrG,2FAA2F;IAC3F,IAAI,IAAA,mCAAmB,EAAC,GAAG,EAAE,GAAG,CAAC;QAAE,OAAM;IACzC,IAAI,GAAG,CAAC,GAAG,KAAK,qBAAqB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC/D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAA;YAC3C,GAAG,CAAC,GAAG,EAAE,CAAA;YACT,GAAG,CAAC,OAAO,EAAE,CAAA;YACb,OAAM;QACR,CAAC;QACD,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAC/B,KAAK,IAAI,KAAK,CAAC,MAAM,CAAA;YACrB,IAAI,KAAK,GAAG,uCAAmB,EAAE,CAAC;gBAChC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;gBAClB,GAAG,CAAC,GAAG,EAAE,CAAA;gBACT,GAAG,CAAC,OAAO,EAAE,CAAA;gBACb,OAAM;YACR,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;QACF,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,IAAI,GAAG,CAAC,aAAa;gBAAE,OAAM;YAC7B,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;gBAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;gBACpD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBACtG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACd,IAAI,WAAW;oBAAE,UAAU,EAAE,CAAA;YAC/B,CAAC;YAAC,WAAM,CAAC;gBACP,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;gBAClB,GAAG,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;YACtC,CAAC;QACH,CAAC,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IACD,MAAM,KAAK,GAAG,CAAA,MAAA,GAAG,CAAC,GAAG,0CAAE,UAAU,CAAC,WAAW,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACzG,IAAI,KAAK,EAAE,CAAC;QACV,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAA;QAC9D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACb,OAAM;IACR,CAAC;IACD,IAAI,CAAA,MAAA,GAAG,CAAC,GAAG,0CAAE,UAAU,CAAC,WAAW,CAAC,KAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QACrD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;YAC7C,oFAAoF;YACpF,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAA;YACtC,sFAAsF;YACtF,8FAA8F;YAC9F,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC/B,MAAM,KAAK,GAAG,GAAG,EAAE;gBACjB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAA;gBAC1D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACf,CAAC,CAAA;YACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAc,EAAE,EAAE;gBAClC,OAAO,CAAC,KAAK,CAAC,0BAA0B,IAAI,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;gBACjG,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAA;gBAC1D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAA;YAC7D,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IAED,+DAA+D;IAC/D,IAAI,IAAA,+BAAe,EAAC,GAAG,EAAE,GAAG,CAAC;QAAE,OAAM;IACrC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAA;IAC1D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,MAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,SAAS,mCAAI,IAAI,EAAE,CAAC,CAAC,CAAA;AACvG,CAAC,CAAC,CAAC,CAAA;AAEH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,IAAA,6BAAa,EAAC,CAAC,GAAyB,EAAE,MAAc,EAAE,IAAY,EAAE,EAAE;IAC7F,IAAI,CAAC,IAAA,mCAAmB,EAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC;QAAE,MAAM,CAAC,OAAO,EAAE,CAAA;AAC/D,CAAC,CAAC,CAAC,CAAA;AAEH,MAAM,CAAC,MAAM,CAAC,+BAAe,EAAE,GAAG,EAAE;IAClC,OAAO,CAAC,GAAG,CAAC,4CAA4C,+BAAe,EAAE,CAAC,CAAA;IAC1E,oGAAoG;IACpG,SAAS,CAAC,KAAK,EAAE,CAAA;IACjB,2FAA2F;IAC3F,IAAI,iBAAiB,EAAE;QAAE,YAAY,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;AAClF,CAAC,CAAC,CAAA;AAEF,IAAI,YAAY,GAAG,KAAK,CAAA;AACxB,KAAK,MAAM,MAAM,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACtB,IAAI,YAAY;YAAE,OAAM;QACxB,YAAY,GAAG,IAAI,CAAA;QACnB,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAA;YAC5B,MAAM,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,CAAA,CAAA;YACpB,MAAM,CAAC,KAAK,EAAE,CAAA;YACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YAC5B,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAA;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type ImageHookStatus = 200 | 500 | 503;
2
+ /** Asking starts `work`, once. Then it's 503 until it's over, and how that went from there on. */
3
+ export declare function polledHook(work: () => Promise<void>): () => ImageHookStatus;
4
+ export declare function imageHooks(env?: NodeJS.ProcessEnv): Record<string, () => ImageHookStatus>;
5
+ //# sourceMappingURL=image-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-hooks.d.ts","sourceRoot":"","sources":["../../src/runtime/image-hooks.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,eAAe,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAE7C,kGAAkG;AAClG,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,eAAe,CAiB3E;AAQD,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,eAAe,CAAC,CAEtG"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.polledHook = polledHook;
37
+ exports.imageHooks = imageHooks;
38
+ // What a Lambda MicroVM image's build asks the guest. /ready: can this be snapshotted yet? The code a
39
+ // VM from this image runs loads first, so it's in the snapshot rather than read at every start.
40
+ // /validate, on a VM started from the result: does it work? They answer 503 until they know, as AWS
41
+ // asks, rather than hold the request open: past its timeout that ends the build.
42
+ const index_1 = require("./index");
43
+ /** Asking starts `work`, once. Then it's 503 until it's over, and how that went from there on. */
44
+ function polledHook(work) {
45
+ let status;
46
+ return () => {
47
+ if (!status) {
48
+ status = 503;
49
+ work().then(() => {
50
+ status = 200;
51
+ }, (error) => {
52
+ status = 500;
53
+ console.error('image hook failed:', error instanceof Error ? error.message : error);
54
+ });
55
+ }
56
+ return status;
57
+ };
58
+ }
59
+ async function validateImage(env) {
60
+ if (env.GUEST_IMAGE !== 'app')
61
+ return;
62
+ const { rehearseColdStart } = await Promise.resolve().then(() => __importStar(require('./app-rehearsal')));
63
+ await rehearseColdStart();
64
+ }
65
+ function imageHooks(env = process.env) {
66
+ return { ready: polledHook(() => (0, index_1.loadImageCode)(env)), validate: polledHook(() => validateImage(env)) };
67
+ }
68
+ //# sourceMappingURL=image-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-hooks.js","sourceRoot":"","sources":["../../src/runtime/image-hooks.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,gCAiBC;AAQD,gCAEC;AApCD,sGAAsG;AACtG,gGAAgG;AAChG,oGAAoG;AACpG,iFAAiF;AACjF,mCAAuC;AAIvC,kGAAkG;AAClG,SAAgB,UAAU,CAAC,IAAyB;IAClD,IAAI,MAAmC,CAAA;IACvC,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,CAAA;YACZ,IAAI,EAAE,CAAC,IAAI,CACT,GAAG,EAAE;gBACH,MAAM,GAAG,GAAG,CAAA;YACd,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;gBACjB,MAAM,GAAG,GAAG,CAAA;gBACZ,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YACrF,CAAC,CACF,CAAA;QACH,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAsB;IACjD,IAAI,GAAG,CAAC,WAAW,KAAK,KAAK;QAAE,OAAM;IACrC,MAAM,EAAE,iBAAiB,EAAE,GAAG,wDAAa,iBAAiB,GAAC,CAAA;IAC7D,MAAM,iBAAiB,EAAE,CAAA;AAC3B,CAAC;AAED,SAAgB,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,IAAA,qBAAa,EAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA;AACxG,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=image-hooks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-hooks.test.d.ts","sourceRoot":"","sources":["../../src/runtime/image-hooks.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const strict_1 = __importDefault(require("node:assert/strict"));
7
+ const node_child_process_1 = require("node:child_process");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const node_test_1 = require("node:test");
10
+ const image_hooks_1 = require("./image-hooks");
11
+ const until = async (hook, status) => {
12
+ for (let tries = 0; tries < 2000 && hook() !== status; tries += 1)
13
+ await new Promise((resolve) => setTimeout(resolve, 10));
14
+ strict_1.default.equal(hook(), status);
15
+ };
16
+ (0, node_test_1.describe)('a hook the image build polls', () => {
17
+ (0, node_test_1.it)('answers 503 while it works, rather than hold the request open, and runs once', async () => {
18
+ let runs = 0;
19
+ let finish;
20
+ const hook = (0, image_hooks_1.polledHook)(() => {
21
+ runs += 1;
22
+ return new Promise((resolve) => {
23
+ finish = resolve;
24
+ });
25
+ });
26
+ strict_1.default.equal(hook(), 503);
27
+ strict_1.default.equal(hook(), 503);
28
+ finish();
29
+ await until(hook, 200);
30
+ strict_1.default.equal(runs, 1);
31
+ });
32
+ (0, node_test_1.it)('fails the build when the work fails', async () => {
33
+ const hook = (0, image_hooks_1.polledHook)(() => Promise.reject(new Error('no tar')));
34
+ hook();
35
+ await until(hook, 500);
36
+ });
37
+ });
38
+ (0, node_test_1.describe)('what an image loads ahead of its snapshot', () => {
39
+ const loaded = (script) => {
40
+ var _a;
41
+ return JSON.parse((0, node_child_process_1.execFileSync)(process.execPath, ['-e', `
42
+ const hooks = require(${JSON.stringify(node_path_1.default.join(__dirname, 'image-hooks.js'))}).imageHooks();
43
+ ${script}
44
+ const wait = setInterval(() => {
45
+ if (hooks.ready() === 503) return
46
+ clearInterval(wait)
47
+ console.log(JSON.stringify(Object.keys(require.cache)))
48
+ }, 5)
49
+ `], { encoding: 'utf8', env: { PATH: process.env.PATH, NODE_PATH: (_a = process.env.NODE_PATH) !== null && _a !== void 0 ? _a : '', GUEST_IMAGE: script.includes('app') ? 'app' : '' } }))
50
+ .map((file) => node_path_1.default.relative(node_path_1.default.resolve(__dirname, '..'), file));
51
+ };
52
+ (0, node_test_1.it)('is an app\'s code in the app image, with no session agent in its memory', () => {
53
+ const files = loaded('// app');
54
+ strict_1.default.ok(files.includes(node_path_1.default.join('runtime', 'app-mode.js')));
55
+ strict_1.default.ok(!files.some((file) => file.startsWith(`session${node_path_1.default.sep}`) || file.includes('session-mode')), 'session code loaded');
56
+ strict_1.default.ok(!files.some((file) => file.includes('socket.io')), 'its link loaded');
57
+ });
58
+ (0, node_test_1.it)('is the session agent in the agent image', () => {
59
+ strict_1.default.ok(loaded('').includes(node_path_1.default.join('runtime', 'session-mode.js')));
60
+ });
61
+ });
62
+ (0, node_test_1.describe)('validating a new image', () => {
63
+ (0, node_test_1.it)('rehearses a real cold start of an app: an archive unpacked, a server started and asked', async () => {
64
+ const hook = (0, image_hooks_1.imageHooks)({ GUEST_IMAGE: 'app' }).validate;
65
+ strict_1.default.equal(hook(), 503);
66
+ await until(hook, 200);
67
+ });
68
+ (0, node_test_1.it)('has nothing to rehearse in the agent image', async () => {
69
+ const hook = (0, image_hooks_1.imageHooks)({}).validate;
70
+ hook();
71
+ await until(hook, 200);
72
+ });
73
+ });
74
+ //# sourceMappingURL=image-hooks.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-hooks.test.js","sourceRoot":"","sources":["../../src/runtime/image-hooks.test.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,17 @@
1
- import { type AgentRuntimeConfig } from './config';
2
- import { type SessionAgent } from '../session';
1
+ import type { SessionAgent } from '../session';
2
+ import type { AgentRuntimeConfig } from './config';
3
3
  export interface RunningAgent {
4
- config: AgentRuntimeConfig;
4
+ /** Absent in app mode, which runs no agent. */
5
+ config?: AgentRuntimeConfig;
5
6
  /** Present in session mode only. */
6
7
  session?: SessionAgent;
8
+ /** App mode: a deployment, which stays up serving its app. */
9
+ app?: boolean;
7
10
  close(): Promise<void>;
8
11
  }
9
12
  /** A lifecycle request can race startup; never acknowledge a freeze before restore finishes. */
10
13
  export declare function checkpointBeforeFreeze(starting: Promise<RunningAgent> | undefined, reason: string): Promise<void>;
11
14
  export declare function startAgent(env?: NodeJS.ProcessEnv): Promise<RunningAgent>;
15
+ /** Loads what this image runs ahead of any VM (GUEST_IMAGE, set by its Dockerfile), so that's in its snapshot. */
16
+ export declare function loadImageCode(env?: NodeJS.ProcessEnv): Promise<void>;
12
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAIrE,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AAE/D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,kBAAkB,CAAA;IAC1B,oCAAoC;IACpC,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,gGAAgG;AAChG,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvH;AAED,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,YAAY,CAAC,CA6B5F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAElD,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,oCAAoC;IACpC,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,8DAA8D;IAC9D,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,gGAAgG;AAChG,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvH;AAED,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,YAAY,CAAC,CAgB5F;AAED,kHAAkH;AAClH,wBAAsB,aAAa,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvF"}
@@ -1,15 +1,42 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.checkpointBeforeFreeze = checkpointBeforeFreeze;
4
37
  exports.startAgent = startAgent;
5
- // Mode dispatch shared by both entrypoints (cli.ts for engines that materialize env before
6
- // start, lambda-microvm.ts for the /run hook): task mode runs once and resolves;
7
- // session mode stays up and resolves with the running agent so lifecycle hooks can reach it.
8
- const config_1 = require("./config");
9
- const link_1 = require("../transport/link");
10
- const loop_1 = require("../task/loop");
11
- const reporter_1 = require("../transport/reporter");
12
- const session_1 = require("../session");
38
+ exports.loadImageCode = loadImageCode;
39
+ const protocol_1 = require("../transport/protocol");
13
40
  /** A lifecycle request can race startup; never acknowledge a freeze before restore finishes. */
14
41
  async function checkpointBeforeFreeze(starting, reason) {
15
42
  var _a;
@@ -19,34 +46,25 @@ async function checkpointBeforeFreeze(starting, reason) {
19
46
  await ((_a = agent.session) === null || _a === void 0 ? void 0 : _a.checkpoint(reason));
20
47
  }
21
48
  async function startAgent(env = process.env) {
22
- const config = (0, config_1.loadConfigFromEnv)(env);
23
- if (config.mode === 'session') {
24
- const link = (0, link_1.createSessionLink)(config.sessionId, config.socketUrl, config.socketToken);
25
- const session = await (0, session_1.runSessionAgent)(config, link).catch(async (error) => {
26
- link.send({ type: 'error', message: `Workspace restore failed: ${error instanceof Error ? error.message : String(error)}` });
27
- await link.close();
28
- throw error;
29
- });
30
- return {
31
- config,
32
- session,
33
- async close() {
34
- try {
35
- await session.stop();
36
- }
37
- finally {
38
- await link.close();
39
- }
40
- },
41
- };
49
+ // A VM for a session's tools to write files and run commands in: nothing to start, only the guest
50
+ // to stay up.
51
+ if (env[protocol_1.AGENT_ENV.AGENT_MODE] === 'workspace')
52
+ return { app: true, close: async () => undefined };
53
+ if (env[protocol_1.AGENT_ENV.AGENT_MODE] === 'app') {
54
+ const { startDeployedApp } = await Promise.resolve().then(() => __importStar(require('./app-mode')));
55
+ const deployed = await startDeployedApp(env);
56
+ return { app: true, close: () => deployed.close() };
42
57
  }
43
- const reporter = (0, reporter_1.createReporter)(config.socketUrl, config.socketToken, config.sessionId);
44
- try {
45
- await (0, loop_1.runAgentLoop)(config, reporter);
58
+ if (env[protocol_1.AGENT_ENV.AGENT_MODE] === 'build') {
59
+ const { startReleaseBuild } = await Promise.resolve().then(() => __importStar(require('./build-mode')));
60
+ const build = startReleaseBuild(env);
61
+ return { app: true, close: () => build.close() };
46
62
  }
47
- finally {
48
- await reporter.close();
49
- }
50
- return { config, async close() { } };
63
+ const { startSessionOrTask } = await Promise.resolve().then(() => __importStar(require('./session-mode')));
64
+ return startSessionOrTask(env);
65
+ }
66
+ /** Loads what this image runs ahead of any VM (GUEST_IMAGE, set by its Dockerfile), so that's in its snapshot. */
67
+ async function loadImageCode(env = process.env) {
68
+ await (env.GUEST_IMAGE === 'app' ? Promise.resolve().then(() => __importStar(require('./app-mode'))) : Promise.resolve().then(() => __importStar(require('./session-mode'))));
51
69
  }
52
70
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":";;AAiBA,wDAIC;AAED,gCA6BC;AApDD,2FAA2F;AAC3F,iFAAiF;AACjF,6FAA6F;AAC7F,qCAAqE;AACrE,4CAAqD;AACrD,uCAA2C;AAC3C,oDAAsD;AACtD,wCAA+D;AAS/D,gGAAgG;AACzF,KAAK,UAAU,sBAAsB,CAAC,QAA2C,EAAE,MAAc;;IACtG,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC1F,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAA;IAC5B,MAAM,CAAA,MAAA,KAAK,CAAC,OAAO,0CAAE,UAAU,CAAC,MAAM,CAAC,CAAA,CAAA;AACzC,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IACnE,MAAM,MAAM,GAAG,IAAA,0BAAiB,EAAC,GAAG,CAAC,CAAA;IACrC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAA,wBAAiB,EAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QACtF,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAe,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;YACjF,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;YAC5H,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YAClB,MAAM,KAAK,CAAA;QACb,CAAC,CAAC,CAAA;QACF,OAAO;YACL,MAAM;YACN,OAAO;YACP,KAAK,CAAC,KAAK;gBACT,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,IAAI,EAAE,CAAA;gBACtB,CAAC;wBAAS,CAAC;oBACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;gBACpB,CAAC;YACH,CAAC;SACF,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,yBAAc,EAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;IACvF,IAAI,CAAC;QACH,MAAM,IAAA,mBAAY,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACtC,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,KAAI,CAAC,EAAE,CAAA;AACrC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,wDAIC;AAED,gCAgBC;AAGD,sCAEC;AAzCD,oDAAiD;AAajD,gGAAgG;AACzF,KAAK,UAAU,sBAAsB,CAAC,QAA2C,EAAE,MAAc;;IACtG,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC1F,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAA;IAC5B,MAAM,CAAA,MAAA,KAAK,CAAC,OAAO,0CAAE,UAAU,CAAC,MAAM,CAAC,CAAA,CAAA;AACzC,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IACnE,kGAAkG;IAClG,cAAc;IACd,IAAI,GAAG,CAAC,oBAAS,CAAC,UAAU,CAAC,KAAK,WAAW;QAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS,EAAE,CAAA;IACjG,IAAI,GAAG,CAAC,oBAAS,CAAC,UAAU,CAAC,KAAK,KAAK,EAAE,CAAC;QACxC,MAAM,EAAE,gBAAgB,EAAE,GAAG,wDAAa,YAAY,GAAC,CAAA;QACvD,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAC5C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAA;IACrD,CAAC;IACD,IAAI,GAAG,CAAC,oBAAS,CAAC,UAAU,CAAC,KAAK,OAAO,EAAE,CAAC;QAC1C,MAAM,EAAE,iBAAiB,EAAE,GAAG,wDAAa,cAAc,GAAC,CAAA;QAC1D,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;QACpC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAA;IAClD,CAAC;IACD,MAAM,EAAE,kBAAkB,EAAE,GAAG,wDAAa,gBAAgB,GAAC,CAAA;IAC7D,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAA;AAChC,CAAC;AAED,kHAAkH;AAC3G,KAAK,UAAU,aAAa,CAAC,MAAyB,OAAO,CAAC,GAAG;IACtE,MAAM,CAAC,GAAG,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,mDAAQ,YAAY,IAAE,CAAC,mDAAQ,gBAAgB,GAAC,CAAC,CAAA;AACrF,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** Listening, loopback-reachable ports in one /proc/net/tcp{,6} table. */
2
+ export declare function parseListeningPorts(table: string): number[];
3
+ /** Every previewable port, ascending. Empty off Linux, where there is no /proc to read. */
4
+ export declare function listListeningPorts(tables?: readonly string[]): Promise<number[]>;
5
+ /**
6
+ * Calls `onChange` with the current ports once, then whenever they change. Returns the stop.
7
+ * Polled, not watched: /proc files emit no change events.
8
+ */
9
+ export declare function watchListeningPorts(onChange: (ports: number[]) => void, options?: {
10
+ intervalMs?: number;
11
+ list?: () => Promise<number[]>;
12
+ }): () => void;
13
+ //# sourceMappingURL=listening-ports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listening-ports.d.ts","sourceRoot":"","sources":["../../src/runtime/listening-ports.ts"],"names":[],"mappings":"AAoBA,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAW3D;AAED,2FAA2F;AAC3F,wBAAsB,kBAAkB,CAAC,MAAM,GAAE,SAAS,MAAM,EAAkB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOrG;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,EACnC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;CAAO,GACpE,MAAM,IAAI,CAmBZ"}