@multiplayer-app/agent 0.1.19 → 0.1.21

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 (308) hide show
  1. package/README.md +14 -7
  2. package/dist/agent/definition.d.ts +13 -0
  3. package/dist/agent/definition.d.ts.map +1 -1
  4. package/dist/agent/definition.test.js +8 -3
  5. package/dist/agent/definition.test.js.map +1 -1
  6. package/dist/agent/profiles/coding.d.ts +1 -1
  7. package/dist/agent/profiles/coding.d.ts.map +1 -1
  8. package/dist/agent/profiles/coding.js +21 -4
  9. package/dist/agent/profiles/coding.js.map +1 -1
  10. package/dist/agent/profiles/index.js +1 -1
  11. package/dist/agent/profiles/index.js.map +1 -1
  12. package/dist/agent/profiles/research.d.ts.map +1 -1
  13. package/dist/agent/profiles/research.js +23 -1
  14. package/dist/agent/profiles/research.js.map +1 -1
  15. package/dist/agent/turn-history.d.ts +40 -0
  16. package/dist/agent/turn-history.d.ts.map +1 -0
  17. package/dist/agent/turn-history.js +167 -0
  18. package/dist/agent/turn-history.js.map +1 -0
  19. package/dist/agent/turn-runner.d.ts +22 -1
  20. package/dist/agent/turn-runner.d.ts.map +1 -1
  21. package/dist/agent/turn-runner.js +162 -79
  22. package/dist/agent/turn-runner.js.map +1 -1
  23. package/dist/app/app-host.d.ts +57 -0
  24. package/dist/app/app-host.d.ts.map +1 -0
  25. package/dist/app/app-host.js +252 -0
  26. package/dist/app/app-host.js.map +1 -0
  27. package/dist/app/app-host.test.d.ts +2 -0
  28. package/dist/app/app-host.test.d.ts.map +1 -0
  29. package/dist/app/app-host.test.js +639 -0
  30. package/dist/app/app-host.test.js.map +1 -0
  31. package/dist/app/config.d.ts +196 -0
  32. package/dist/app/config.d.ts.map +1 -0
  33. package/dist/app/config.js +362 -0
  34. package/dist/app/config.js.map +1 -0
  35. package/dist/app/config.test.d.ts +2 -0
  36. package/dist/app/config.test.d.ts.map +1 -0
  37. package/dist/app/config.test.js +224 -0
  38. package/dist/app/config.test.js.map +1 -0
  39. package/dist/app/detect.d.ts +68 -0
  40. package/dist/app/detect.d.ts.map +1 -0
  41. package/dist/app/detect.js +449 -0
  42. package/dist/app/detect.js.map +1 -0
  43. package/dist/app/detect.test.d.ts +2 -0
  44. package/dist/app/detect.test.d.ts.map +1 -0
  45. package/dist/app/detect.test.js +267 -0
  46. package/dist/app/detect.test.js.map +1 -0
  47. package/dist/app/env.d.ts +5 -0
  48. package/dist/app/env.d.ts.map +1 -0
  49. package/dist/app/env.js +22 -0
  50. package/dist/app/env.js.map +1 -0
  51. package/dist/app/functions-cli.d.ts +3 -0
  52. package/dist/app/functions-cli.d.ts.map +1 -0
  53. package/dist/app/functions-cli.js +27 -0
  54. package/dist/app/functions-cli.js.map +1 -0
  55. package/dist/app/functions-host.d.ts +15 -0
  56. package/dist/app/functions-host.d.ts.map +1 -0
  57. package/dist/app/functions-host.js +276 -0
  58. package/dist/app/functions-host.js.map +1 -0
  59. package/dist/app/functions-host.test.d.ts +2 -0
  60. package/dist/app/functions-host.test.d.ts.map +1 -0
  61. package/dist/app/functions-host.test.js +117 -0
  62. package/dist/app/functions-host.test.js.map +1 -0
  63. package/dist/app/functions-routes.d.ts +23 -0
  64. package/dist/app/functions-routes.d.ts.map +1 -0
  65. package/dist/app/functions-routes.js +85 -0
  66. package/dist/app/functions-routes.js.map +1 -0
  67. package/dist/app/functions-routes.test.d.ts +2 -0
  68. package/dist/app/functions-routes.test.d.ts.map +1 -0
  69. package/dist/app/functions-routes.test.js +40 -0
  70. package/dist/app/functions-routes.test.js.map +1 -0
  71. package/dist/app/manifest.d.ts +17 -0
  72. package/dist/app/manifest.d.ts.map +1 -0
  73. package/dist/app/manifest.js +64 -0
  74. package/dist/app/manifest.js.map +1 -0
  75. package/dist/app/manifest.test.d.ts +2 -0
  76. package/dist/app/manifest.test.d.ts.map +1 -0
  77. package/dist/app/manifest.test.js +173 -0
  78. package/dist/app/manifest.test.js.map +1 -0
  79. package/dist/app/release-artifacts.d.ts +39 -0
  80. package/dist/app/release-artifacts.d.ts.map +1 -0
  81. package/dist/app/release-artifacts.js +229 -0
  82. package/dist/app/release-artifacts.js.map +1 -0
  83. package/dist/app/release-artifacts.test.d.ts +2 -0
  84. package/dist/app/release-artifacts.test.d.ts.map +1 -0
  85. package/dist/app/release-artifacts.test.js +295 -0
  86. package/dist/app/release-artifacts.test.js.map +1 -0
  87. package/dist/app/route-pattern.d.ts +23 -0
  88. package/dist/app/route-pattern.d.ts.map +1 -0
  89. package/dist/app/route-pattern.js +339 -0
  90. package/dist/app/route-pattern.js.map +1 -0
  91. package/dist/app/route-pattern.test.d.ts +2 -0
  92. package/dist/app/route-pattern.test.d.ts.map +1 -0
  93. package/dist/app/route-pattern.test.js +187 -0
  94. package/dist/app/route-pattern.test.js.map +1 -0
  95. package/dist/app/rules.d.ts +61 -0
  96. package/dist/app/rules.d.ts.map +1 -0
  97. package/dist/app/rules.js +90 -0
  98. package/dist/app/rules.js.map +1 -0
  99. package/dist/app/rules.test.d.ts +2 -0
  100. package/dist/app/rules.test.d.ts.map +1 -0
  101. package/dist/app/rules.test.js +69 -0
  102. package/dist/app/rules.test.js.map +1 -0
  103. package/dist/app/runner.d.ts +109 -0
  104. package/dist/app/runner.d.ts.map +1 -0
  105. package/dist/app/runner.js +429 -0
  106. package/dist/app/runner.js.map +1 -0
  107. package/dist/app/site.d.ts +73 -0
  108. package/dist/app/site.d.ts.map +1 -0
  109. package/dist/app/site.js +161 -0
  110. package/dist/app/site.js.map +1 -0
  111. package/dist/app/site.test.d.ts +2 -0
  112. package/dist/app/site.test.d.ts.map +1 -0
  113. package/dist/app/site.test.js +291 -0
  114. package/dist/app/site.test.js.map +1 -0
  115. package/dist/app/static-server.d.ts +20 -0
  116. package/dist/app/static-server.d.ts.map +1 -0
  117. package/dist/app/static-server.js +145 -0
  118. package/dist/app/static-server.js.map +1 -0
  119. package/dist/context-pruning.d.ts +2 -0
  120. package/dist/context-pruning.d.ts.map +1 -1
  121. package/dist/context-pruning.js +3 -2
  122. package/dist/context-pruning.js.map +1 -1
  123. package/dist/models/usage.d.ts +6 -0
  124. package/dist/models/usage.d.ts.map +1 -1
  125. package/dist/models/usage.js +13 -0
  126. package/dist/models/usage.js.map +1 -1
  127. package/dist/persistence/conversation-store.d.ts +21 -0
  128. package/dist/persistence/conversation-store.d.ts.map +1 -0
  129. package/dist/persistence/conversation-store.js +59 -0
  130. package/dist/persistence/conversation-store.js.map +1 -0
  131. package/dist/persistence/conversation-store.test.d.ts +2 -0
  132. package/dist/persistence/conversation-store.test.d.ts.map +1 -0
  133. package/dist/persistence/conversation-store.test.js +98 -0
  134. package/dist/persistence/conversation-store.test.js.map +1 -0
  135. package/dist/persistence/git-sync.d.ts +14 -1
  136. package/dist/persistence/git-sync.d.ts.map +1 -1
  137. package/dist/persistence/git-sync.js +73 -17
  138. package/dist/persistence/git-sync.js.map +1 -1
  139. package/dist/persistence/git-sync.test.js +155 -6
  140. package/dist/persistence/git-sync.test.js.map +1 -1
  141. package/dist/persistence/snapshot-sync.d.ts +19 -2
  142. package/dist/persistence/snapshot-sync.d.ts.map +1 -1
  143. package/dist/persistence/snapshot-sync.js +194 -83
  144. package/dist/persistence/snapshot-sync.js.map +1 -1
  145. package/dist/persistence/snapshot-sync.test.js +145 -27
  146. package/dist/persistence/snapshot-sync.test.js.map +1 -1
  147. package/dist/persistence/workspace.d.ts +3 -0
  148. package/dist/persistence/workspace.d.ts.map +1 -1
  149. package/dist/persistence/workspace.js +1 -0
  150. package/dist/persistence/workspace.js.map +1 -1
  151. package/dist/research/extract-texts.d.ts.map +1 -1
  152. package/dist/research/extract-texts.js +34 -16
  153. package/dist/research/extract-texts.js.map +1 -1
  154. package/dist/research/filingramp/attachment-tools.d.ts.map +1 -1
  155. package/dist/research/filingramp/attachment-tools.js +7 -4
  156. package/dist/research/filingramp/attachment-tools.js.map +1 -1
  157. package/dist/research/filingramp/shared.d.ts.map +1 -1
  158. package/dist/research/filingramp/shared.js +5 -5
  159. package/dist/research/filingramp/shared.js.map +1 -1
  160. package/dist/research/prompt.d.ts.map +1 -1
  161. package/dist/research/prompt.js +2 -1
  162. package/dist/research/prompt.js.map +1 -1
  163. package/dist/runtime/app-mode.d.ts +10 -0
  164. package/dist/runtime/app-mode.d.ts.map +1 -0
  165. package/dist/runtime/app-mode.js +172 -0
  166. package/dist/runtime/app-mode.js.map +1 -0
  167. package/dist/runtime/app-mode.test.d.ts +2 -0
  168. package/dist/runtime/app-mode.test.d.ts.map +1 -0
  169. package/dist/runtime/app-mode.test.js +130 -0
  170. package/dist/runtime/app-mode.test.js.map +1 -0
  171. package/dist/runtime/app-rehearsal.d.ts +2 -0
  172. package/dist/runtime/app-rehearsal.d.ts.map +1 -0
  173. package/dist/runtime/app-rehearsal.js +56 -0
  174. package/dist/runtime/app-rehearsal.js.map +1 -0
  175. package/dist/runtime/build-mode.d.ts +12 -0
  176. package/dist/runtime/build-mode.d.ts.map +1 -0
  177. package/dist/runtime/build-mode.js +116 -0
  178. package/dist/runtime/build-mode.js.map +1 -0
  179. package/dist/runtime/build-mode.test.d.ts +2 -0
  180. package/dist/runtime/build-mode.test.d.ts.map +1 -0
  181. package/dist/runtime/build-mode.test.js +121 -0
  182. package/dist/runtime/build-mode.test.js.map +1 -0
  183. package/dist/runtime/cli.js +7 -2
  184. package/dist/runtime/cli.js.map +1 -1
  185. package/dist/runtime/config.d.ts +4 -0
  186. package/dist/runtime/config.d.ts.map +1 -1
  187. package/dist/runtime/config.js +13 -2
  188. package/dist/runtime/config.js.map +1 -1
  189. package/dist/runtime/guest-server.d.ts +3 -0
  190. package/dist/runtime/guest-server.d.ts.map +1 -0
  191. package/dist/runtime/{lambda-microvm.js → guest-server.js} +49 -18
  192. package/dist/runtime/guest-server.js.map +1 -0
  193. package/dist/runtime/image-hooks.d.ts +5 -0
  194. package/dist/runtime/image-hooks.d.ts.map +1 -0
  195. package/dist/runtime/image-hooks.js +68 -0
  196. package/dist/runtime/image-hooks.js.map +1 -0
  197. package/dist/runtime/image-hooks.test.d.ts +2 -0
  198. package/dist/runtime/image-hooks.test.d.ts.map +1 -0
  199. package/dist/runtime/image-hooks.test.js +74 -0
  200. package/dist/runtime/image-hooks.test.js.map +1 -0
  201. package/dist/runtime/index.d.ts +8 -3
  202. package/dist/runtime/index.d.ts.map +1 -1
  203. package/dist/runtime/index.js +53 -35
  204. package/dist/runtime/index.js.map +1 -1
  205. package/dist/runtime/listening-ports.d.ts +13 -0
  206. package/dist/runtime/listening-ports.d.ts.map +1 -0
  207. package/dist/runtime/listening-ports.js +78 -0
  208. package/dist/runtime/listening-ports.js.map +1 -0
  209. package/dist/runtime/listening-ports.test.d.ts +2 -0
  210. package/dist/runtime/listening-ports.test.d.ts.map +1 -0
  211. package/dist/runtime/listening-ports.test.js +39 -0
  212. package/dist/runtime/listening-ports.test.js.map +1 -0
  213. package/dist/runtime/preview-proxy.d.ts +56 -0
  214. package/dist/runtime/preview-proxy.d.ts.map +1 -0
  215. package/dist/runtime/preview-proxy.js +302 -0
  216. package/dist/runtime/preview-proxy.js.map +1 -0
  217. package/dist/runtime/preview-proxy.test.d.ts +2 -0
  218. package/dist/runtime/preview-proxy.test.d.ts.map +1 -0
  219. package/dist/runtime/preview-proxy.test.js +122 -0
  220. package/dist/runtime/preview-proxy.test.js.map +1 -0
  221. package/dist/runtime/session-mode.d.ts +3 -0
  222. package/dist/runtime/session-mode.d.ts.map +1 -0
  223. package/dist/runtime/session-mode.js +60 -0
  224. package/dist/runtime/session-mode.js.map +1 -0
  225. package/dist/runtime/workload.d.ts +44 -0
  226. package/dist/runtime/workload.d.ts.map +1 -0
  227. package/dist/runtime/workload.js +222 -0
  228. package/dist/runtime/workload.js.map +1 -0
  229. package/dist/runtime/workload.test.d.ts +2 -0
  230. package/dist/runtime/workload.test.d.ts.map +1 -0
  231. package/dist/runtime/workload.test.js +235 -0
  232. package/dist/runtime/workload.test.js.map +1 -0
  233. package/dist/session/conversation.d.ts +10 -2
  234. package/dist/session/conversation.d.ts.map +1 -1
  235. package/dist/session/conversation.js +40 -12
  236. package/dist/session/conversation.js.map +1 -1
  237. package/dist/session/conversation.test.js +2 -3
  238. package/dist/session/conversation.test.js.map +1 -1
  239. package/dist/session/index.d.ts +1 -1
  240. package/dist/session/index.d.ts.map +1 -1
  241. package/dist/session/index.js +2 -1
  242. package/dist/session/index.js.map +1 -1
  243. package/dist/session/runtime.d.ts +20 -3
  244. package/dist/session/runtime.d.ts.map +1 -1
  245. package/dist/session/runtime.js +97 -16
  246. package/dist/session/runtime.js.map +1 -1
  247. package/dist/session/runtime.test.js +18 -7
  248. package/dist/session/runtime.test.js.map +1 -1
  249. package/dist/session/tools.d.ts.map +1 -1
  250. package/dist/session/tools.js +5 -4
  251. package/dist/session/tools.js.map +1 -1
  252. package/dist/task/loop.d.ts.map +1 -1
  253. package/dist/task/loop.js +6 -4
  254. package/dist/task/loop.js.map +1 -1
  255. package/dist/tools/exec-tools.d.ts +12 -0
  256. package/dist/tools/exec-tools.d.ts.map +1 -1
  257. package/dist/tools/exec-tools.js +46 -3
  258. package/dist/tools/exec-tools.js.map +1 -1
  259. package/dist/tools/exec-tools.test.d.ts +2 -0
  260. package/dist/tools/exec-tools.test.d.ts.map +1 -0
  261. package/dist/tools/exec-tools.test.js +48 -0
  262. package/dist/tools/exec-tools.test.js.map +1 -0
  263. package/dist/tools/fs-tools.d.ts.map +1 -1
  264. package/dist/tools/fs-tools.js +5 -5
  265. package/dist/tools/fs-tools.js.map +1 -1
  266. package/dist/transport/link.d.ts.map +1 -1
  267. package/dist/transport/link.js +16 -5
  268. package/dist/transport/link.js.map +1 -1
  269. package/dist/transport/link.test.js +24 -0
  270. package/dist/transport/link.test.js.map +1 -1
  271. package/dist/transport/protocol.d.ts +190 -3
  272. package/dist/transport/protocol.d.ts.map +1 -1
  273. package/dist/transport/protocol.js +147 -7
  274. package/dist/transport/protocol.js.map +1 -1
  275. package/dist/transport/protocol.test.js +41 -0
  276. package/dist/transport/protocol.test.js.map +1 -1
  277. package/dist/workspace-sync/eligibility.d.ts +14 -0
  278. package/dist/workspace-sync/eligibility.d.ts.map +1 -0
  279. package/dist/workspace-sync/eligibility.js +53 -0
  280. package/dist/workspace-sync/eligibility.js.map +1 -0
  281. package/dist/workspace-sync/merge.d.ts +15 -0
  282. package/dist/workspace-sync/merge.d.ts.map +1 -0
  283. package/dist/workspace-sync/merge.js +66 -0
  284. package/dist/workspace-sync/merge.js.map +1 -0
  285. package/dist/workspace-sync/merge.test.d.ts +2 -0
  286. package/dist/workspace-sync/merge.test.d.ts.map +1 -0
  287. package/dist/workspace-sync/merge.test.js +28 -0
  288. package/dist/workspace-sync/merge.test.js.map +1 -0
  289. package/dist/workspace-sync/workspace-sync.d.ts +48 -0
  290. package/dist/workspace-sync/workspace-sync.d.ts.map +1 -0
  291. package/dist/workspace-sync/workspace-sync.js +308 -0
  292. package/dist/workspace-sync/workspace-sync.js.map +1 -0
  293. package/dist/workspace-sync/workspace-sync.test.d.ts +2 -0
  294. package/dist/workspace-sync/workspace-sync.test.d.ts.map +1 -0
  295. package/dist/workspace-sync/workspace-sync.test.js +111 -0
  296. package/dist/workspace-sync/workspace-sync.test.js.map +1 -0
  297. package/dist/workspace-sync/write-drafts.d.ts +24 -0
  298. package/dist/workspace-sync/write-drafts.d.ts.map +1 -0
  299. package/dist/workspace-sync/write-drafts.js +87 -0
  300. package/dist/workspace-sync/write-drafts.js.map +1 -0
  301. package/dist/workspace-sync/write-drafts.test.d.ts +2 -0
  302. package/dist/workspace-sync/write-drafts.test.d.ts.map +1 -0
  303. package/dist/workspace-sync/write-drafts.test.js +36 -0
  304. package/dist/workspace-sync/write-drafts.test.js.map +1 -0
  305. package/package.json +12 -2
  306. package/dist/runtime/lambda-microvm.d.ts +0 -3
  307. package/dist/runtime/lambda-microvm.d.ts.map +0 -1
  308. package/dist/runtime/lambda-microvm.js.map +0 -1
@@ -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"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseListeningPorts = parseListeningPorts;
4
+ exports.listListeningPorts = listListeningPorts;
5
+ exports.watchListeningPorts = watchListeningPorts;
6
+ // Which ports the live preview can offer: every TCP listener the preview proxy can reach over
7
+ // loopback, read from the kernel's socket tables, so a dev server shows up whether the model
8
+ // started it, a script did, or the user did over SSH.
9
+ const promises_1 = require("fs/promises");
10
+ const protocol_1 = require("../transport/protocol");
11
+ const LISTEN_STATE = '0A';
12
+ const SOCKET_TABLES = ['/proc/net/tcp', '/proc/net/tcp6'];
13
+ const POLL_INTERVAL_MS = 2000;
14
+ /** A /proc/net/tcp{,6} local address the proxy reaches on loopback: any-address or loopback itself. */
15
+ function reachableOverLoopback(addressHex) {
16
+ if (/^0+$/.test(addressHex))
17
+ return true; // 0.0.0.0 or ::
18
+ // IPv4 bytes are stored little-endian, so 127.x.y.z ends in 7F.
19
+ if (addressHex.length === 8)
20
+ return addressHex.slice(6).toUpperCase() === '7F';
21
+ const v6 = addressHex.toUpperCase();
22
+ return v6 === '00000000000000000000000001000000' // ::1
23
+ || (v6.startsWith('0000000000000000FFFF0000') && v6.slice(30) === '7F'); // ::ffff:127.x.y.z
24
+ }
25
+ /** Listening, loopback-reachable ports in one /proc/net/tcp{,6} table. */
26
+ function parseListeningPorts(table) {
27
+ const ports = new Set();
28
+ for (const line of table.split('\n').slice(1)) {
29
+ const [, local, , state] = line.trim().split(/\s+/);
30
+ if (state !== LISTEN_STATE || !local)
31
+ continue;
32
+ const [addressHex, portHex] = local.split(':');
33
+ if (!portHex || !reachableOverLoopback(addressHex))
34
+ continue;
35
+ const port = parseInt(portHex, 16);
36
+ if (port > 0 && !protocol_1.GUEST_RESERVED_PORTS.includes(port))
37
+ ports.add(port);
38
+ }
39
+ return [...ports];
40
+ }
41
+ /** Every previewable port, ascending. Empty off Linux, where there is no /proc to read. */
42
+ async function listListeningPorts(tables = SOCKET_TABLES) {
43
+ const ports = new Set();
44
+ for (const table of tables) {
45
+ const content = await (0, promises_1.readFile)(table, 'utf8').catch(() => '');
46
+ for (const port of parseListeningPorts(content))
47
+ ports.add(port);
48
+ }
49
+ return [...ports].sort((a, b) => a - b);
50
+ }
51
+ /**
52
+ * Calls `onChange` with the current ports once, then whenever they change. Returns the stop.
53
+ * Polled, not watched: /proc files emit no change events.
54
+ */
55
+ function watchListeningPorts(onChange, options = {}) {
56
+ var _a, _b;
57
+ const list = (_a = options.list) !== null && _a !== void 0 ? _a : (() => listListeningPorts());
58
+ let last;
59
+ let stopped = false;
60
+ const scan = async () => {
61
+ const ports = await list().catch(() => undefined);
62
+ if (stopped || !ports)
63
+ return;
64
+ const key = ports.join(',');
65
+ if (key === last)
66
+ return;
67
+ last = key;
68
+ onChange(ports);
69
+ };
70
+ void scan();
71
+ const timer = setInterval(() => void scan(), (_b = options.intervalMs) !== null && _b !== void 0 ? _b : POLL_INTERVAL_MS);
72
+ timer.unref();
73
+ return () => {
74
+ stopped = true;
75
+ clearInterval(timer);
76
+ };
77
+ }
78
+ //# sourceMappingURL=listening-ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listening-ports.js","sourceRoot":"","sources":["../../src/runtime/listening-ports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=listening-ports.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listening-ports.test.d.ts","sourceRoot":"","sources":["../../src/runtime/listening-ports.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
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_test_1 = require("node:test");
8
+ const listening_ports_1 = require("./listening-ports");
9
+ const HEADER = ' sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode';
10
+ (0, node_test_1.it)('lists loopback-reachable listeners and skips connections, other hosts and the guest\'s own ports', () => {
11
+ const tcp = [
12
+ HEADER,
13
+ ' 0: 00000000:0BB8 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 1 1', // 0.0.0.0:3000
14
+ ' 1: 0100007F:1435 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 2 1', // 127.0.0.1:5173
15
+ ' 2: 0F02000A:0050 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 3 1', // 10.0.2.15:80
16
+ ' 3: 00000000:1F90 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 4 1', // :8080 (preview proxy)
17
+ ' 4: 0100007F:0BB8 0100007F:D431 01 00000000:00000000 00:00000000 00000000 0 0 5 1', // established
18
+ ].join('\n');
19
+ strict_1.default.deepEqual((0, listening_ports_1.parseListeningPorts)(tcp).sort(), [3000, 5173]);
20
+ const tcp6 = [
21
+ HEADER,
22
+ ' 0: 00000000000000000000000001000000:22B8 00000000000000000000000000000000:0000 0A 0 0 0 0 0 6 1', // [::1]:8888
23
+ ' 1: 00000000000000000000000000000000:0FA1 00000000000000000000000000000000:0000 0A 0 0 0 0 0 7 1', // [::]:4001
24
+ ' 2: 0000000000000000FFFF00000100007F:0FA2 00000000000000000000000000000000:0000 0A 0 0 0 0 0 8 1', // [::ffff:127.0.0.1]:4002
25
+ ].join('\n');
26
+ strict_1.default.deepEqual((0, listening_ports_1.parseListeningPorts)(tcp6).sort(), [4001, 4002, 8888]);
27
+ });
28
+ (0, node_test_1.it)('reports the first scan, then only changes', async () => {
29
+ const scans = [[3000], [3000], [3000, 5173]];
30
+ const seen = [];
31
+ const stop = (0, listening_ports_1.watchListeningPorts)((ports) => seen.push(ports), {
32
+ intervalMs: 5,
33
+ list: async () => { var _a; return (_a = scans.shift()) !== null && _a !== void 0 ? _a : [3000, 5173]; },
34
+ });
35
+ await new Promise((resolve) => setTimeout(resolve, 40));
36
+ stop();
37
+ strict_1.default.deepEqual(seen, [[3000], [3000, 5173]]);
38
+ });
39
+ //# sourceMappingURL=listening-ports.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listening-ports.test.js","sourceRoot":"","sources":["../../src/runtime/listening-ports.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAuC;AACvC,yCAA8B;AAC9B,uDAA4E;AAE5E,MAAM,MAAM,GAAG,kGAAkG,CAAA;AAEjH,IAAA,cAAE,EAAC,kGAAkG,EAAE,GAAG,EAAE;IAC1G,MAAM,GAAG,GAAG;QACV,MAAM;QACN,gGAAgG,EAAE,eAAe;QACjH,gGAAgG,EAAE,iBAAiB;QACnH,gGAAgG,EAAE,eAAe;QACjH,gGAAgG,EAAE,wBAAwB;QAC1H,gGAAgG,EAAE,cAAc;KACjH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACZ,gBAAM,CAAC,SAAS,CAAC,IAAA,qCAAmB,EAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAE/D,MAAM,IAAI,GAAG;QACX,MAAM;QACN,oGAAoG,EAAE,aAAa;QACnH,oGAAoG,EAAE,YAAY;QAClH,oGAAoG,EAAE,0BAA0B;KACjI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACZ,gBAAM,CAAC,SAAS,CAAC,IAAA,qCAAmB,EAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AACxE,CAAC,CAAC,CAAA;AAEF,IAAA,cAAE,EAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;IACzD,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC5C,MAAM,IAAI,GAAe,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,IAAA,qCAAmB,EAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC5D,UAAU,EAAE,CAAC;QACb,IAAI,EAAE,KAAK,IAAI,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,KAAK,EAAE,mCAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA,EAAA;KAChD,CAAC,CAAA;IACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;IACvD,IAAI,EAAE,CAAA;IACN,gBAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;AAChD,CAAC,CAAC,CAAA"}
@@ -0,0 +1,56 @@
1
+ import http from 'http';
2
+ import net from 'net';
3
+ import type { Duplex } from 'stream';
4
+ /** Where the guest serves its lifecycle hooks and this proxy. */
5
+ export declare const GUEST_HTTP_PORT = 8080;
6
+ /** A connected socket to whatever listens on loopback `port`. */
7
+ export declare function connectLocal(port: number): Promise<net.Socket>;
8
+ /** The request headers as the app expects them from a browser on the guest itself. */
9
+ export declare function localRequestHeaders(headers: http.IncomingHttpHeaders, port: number): http.OutgoingHttpHeaders;
10
+ /** A redirect to the app's own local address, pointed at the public preview instead. */
11
+ export declare function publicLocation(location: string, port: number, origin: string): string;
12
+ /** The app's side of the guest's port 8080: the router of the workspace's app (src/app). */
13
+ export interface AppRequestHandler {
14
+ /** False when no app runs, so the request goes to the default port instead. */
15
+ handleRequest(req: http.IncomingMessage, res: http.ServerResponse): boolean;
16
+ handleUpgrade(req: http.IncomingMessage, socket: Duplex, head: Buffer): boolean;
17
+ }
18
+ export declare function setAppHandler(handler: AppRequestHandler | undefined): void;
19
+ /**
20
+ * A deployment (AGENT_MODE=app) is its app: requests without PREVIEW_PORT_HEADER go to it too
21
+ * (proxyAppRequest), not only a session URL's.
22
+ */
23
+ export declare function serveAppUnaddressed(): void;
24
+ /**
25
+ * Forwards a request to whatever listens on loopback `port`, as from a browser on the guest.
26
+ * `extraHeaders` go on the answer, over any of the same name (the app's builder.json `headers`).
27
+ */
28
+ export declare function proxyToPort(req: http.IncomingMessage, res: http.ServerResponse, port: number, extraHeaders?: ReadonlyArray<{
29
+ key: string;
30
+ value: string;
31
+ }>): void;
32
+ /**
33
+ * The guest's request handler, made safe: it runs the agent and serves the app, so a throw from one
34
+ * request, which nothing above would catch, must fail that request and not take all of it down.
35
+ */
36
+ export declare function guardRequests(handler: http.RequestListener): http.RequestListener;
37
+ /** The same for an upgrade request. */
38
+ export declare function guardUpgrades(handler: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void;
39
+ /** Handles a preview request; false when the request isn't one (no PREVIEW_PORT_HEADER). */
40
+ export declare function proxyPreviewRequest(req: http.IncomingMessage, res: http.ServerResponse): boolean;
41
+ /** In a deployment, any other request is the app's; false elsewhere (or until serveAppUnaddressed). */
42
+ export declare function proxyAppRequest(req: http.IncomingMessage, res: http.ServerResponse): boolean;
43
+ /**
44
+ * Handles a preview WebSocket upgrade by splicing the two connections together once the
45
+ * request reaches the app; false when the request isn't one. The app answers the handshake.
46
+ */
47
+ export declare function proxyPreviewUpgrade(req: http.IncomingMessage, socket: Duplex, head: Buffer): boolean;
48
+ /** Splices an upgrade request through to whatever listens on loopback `port`. */
49
+ export declare function upgradeToPort(req: http.IncomingMessage, socket: Duplex, head: Buffer, port: number): void;
50
+ /**
51
+ * The preview proxy on its own, for entrypoints with no lifecycle hook server holding
52
+ * GUEST_HTTP_PORT (cli.ts: QEMU, Firecracker). Anything but a preview (or, in a deployment, the
53
+ * app) gets a 404.
54
+ */
55
+ export declare function startPreviewServer(port?: number): http.Server;
56
+ //# sourceMappingURL=preview-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-proxy.d.ts","sourceRoot":"","sources":["../../src/runtime/preview-proxy.ts"],"names":[],"mappings":"AAQA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAIpC,iEAAiE;AACjE,eAAO,MAAM,eAAe,OAAO,CAAA;AAOnC,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAiB9D;AAoBD,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAW7G;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAMrF;AAkBD,4FAA4F;AAC5F,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAA;IAC3E,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAChF;AAKD,wBAAgB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,IAAI,CAE1E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,IAAI,EAAE,MAAM,EACZ,YAAY,GAAE,aAAa,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAM,GAC/D,IAAI,CAyBN;AAWD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAUjF;AAED,uCAAuC;AACvC,wBAAgB,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,IAC9F,KAAK,IAAI,CAAC,eAAe,EAAE,QAAQ,MAAM,EAAE,MAAM,MAAM,KAAG,IAAI,CAQvE;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAYhG;AAED,uGAAuG;AACvG,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAO5F;AAWD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAqBpG;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAUzG;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,SAAkB,GAAG,IAAI,CAAC,MAAM,CAatE"}