@multiplayer-app/agent 0.1.20 → 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 (290) 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/config.d.ts +196 -0
  29. package/dist/app/config.d.ts.map +1 -0
  30. package/dist/app/config.js +362 -0
  31. package/dist/app/config.js.map +1 -0
  32. package/dist/app/config.test.d.ts +2 -0
  33. package/dist/app/config.test.d.ts.map +1 -0
  34. package/dist/app/config.test.js +224 -0
  35. package/dist/app/config.test.js.map +1 -0
  36. package/dist/app/detect.d.ts +68 -0
  37. package/dist/app/detect.d.ts.map +1 -0
  38. package/dist/app/detect.js +449 -0
  39. package/dist/app/detect.js.map +1 -0
  40. package/dist/app/detect.test.d.ts +2 -0
  41. package/dist/app/detect.test.d.ts.map +1 -0
  42. package/dist/app/detect.test.js +267 -0
  43. package/dist/app/detect.test.js.map +1 -0
  44. package/dist/app/env.d.ts +5 -0
  45. package/dist/app/env.d.ts.map +1 -0
  46. package/dist/app/env.js +22 -0
  47. package/dist/app/env.js.map +1 -0
  48. package/dist/app/functions-cli.d.ts +3 -0
  49. package/dist/app/functions-cli.d.ts.map +1 -0
  50. package/dist/app/functions-cli.js +27 -0
  51. package/dist/app/functions-cli.js.map +1 -0
  52. package/dist/app/functions-host.d.ts +15 -0
  53. package/dist/app/functions-host.d.ts.map +1 -0
  54. package/dist/app/functions-host.js +276 -0
  55. package/dist/app/functions-host.js.map +1 -0
  56. package/dist/app/functions-host.test.d.ts +2 -0
  57. package/dist/app/functions-host.test.d.ts.map +1 -0
  58. package/dist/app/functions-host.test.js +117 -0
  59. package/dist/app/functions-host.test.js.map +1 -0
  60. package/dist/app/functions-routes.d.ts +23 -0
  61. package/dist/app/functions-routes.d.ts.map +1 -0
  62. package/dist/app/functions-routes.js +85 -0
  63. package/dist/app/functions-routes.js.map +1 -0
  64. package/dist/app/functions-routes.test.d.ts +2 -0
  65. package/dist/app/functions-routes.test.d.ts.map +1 -0
  66. package/dist/app/functions-routes.test.js +40 -0
  67. package/dist/app/functions-routes.test.js.map +1 -0
  68. package/dist/app/manifest.d.ts +17 -0
  69. package/dist/app/manifest.d.ts.map +1 -0
  70. package/dist/app/manifest.js +64 -0
  71. package/dist/app/manifest.js.map +1 -0
  72. package/dist/app/manifest.test.d.ts +2 -0
  73. package/dist/app/manifest.test.d.ts.map +1 -0
  74. package/dist/app/manifest.test.js +173 -0
  75. package/dist/app/manifest.test.js.map +1 -0
  76. package/dist/app/release-artifacts.d.ts +39 -0
  77. package/dist/app/release-artifacts.d.ts.map +1 -0
  78. package/dist/app/release-artifacts.js +229 -0
  79. package/dist/app/release-artifacts.js.map +1 -0
  80. package/dist/app/release-artifacts.test.d.ts +2 -0
  81. package/dist/app/release-artifacts.test.d.ts.map +1 -0
  82. package/dist/app/release-artifacts.test.js +295 -0
  83. package/dist/app/release-artifacts.test.js.map +1 -0
  84. package/dist/app/route-pattern.d.ts +23 -0
  85. package/dist/app/route-pattern.d.ts.map +1 -0
  86. package/dist/app/route-pattern.js +339 -0
  87. package/dist/app/route-pattern.js.map +1 -0
  88. package/dist/app/route-pattern.test.d.ts +2 -0
  89. package/dist/app/route-pattern.test.d.ts.map +1 -0
  90. package/dist/app/route-pattern.test.js +187 -0
  91. package/dist/app/route-pattern.test.js.map +1 -0
  92. package/dist/app/rules.d.ts +61 -0
  93. package/dist/app/rules.d.ts.map +1 -0
  94. package/dist/app/rules.js +90 -0
  95. package/dist/app/rules.js.map +1 -0
  96. package/dist/app/rules.test.d.ts +2 -0
  97. package/dist/app/rules.test.d.ts.map +1 -0
  98. package/dist/app/rules.test.js +69 -0
  99. package/dist/app/rules.test.js.map +1 -0
  100. package/dist/app/runner.d.ts +109 -0
  101. package/dist/app/runner.d.ts.map +1 -0
  102. package/dist/app/runner.js +429 -0
  103. package/dist/app/runner.js.map +1 -0
  104. package/dist/app/site.d.ts +73 -0
  105. package/dist/app/site.d.ts.map +1 -0
  106. package/dist/app/site.js +161 -0
  107. package/dist/app/site.js.map +1 -0
  108. package/dist/app/site.test.d.ts +2 -0
  109. package/dist/app/site.test.d.ts.map +1 -0
  110. package/dist/app/site.test.js +291 -0
  111. package/dist/app/site.test.js.map +1 -0
  112. package/dist/app/static-server.d.ts +20 -0
  113. package/dist/app/static-server.d.ts.map +1 -0
  114. package/dist/app/static-server.js +145 -0
  115. package/dist/app/static-server.js.map +1 -0
  116. package/dist/persistence/conversation-store.d.ts +21 -0
  117. package/dist/persistence/conversation-store.d.ts.map +1 -0
  118. package/dist/persistence/conversation-store.js +59 -0
  119. package/dist/persistence/conversation-store.js.map +1 -0
  120. package/dist/persistence/conversation-store.test.d.ts +2 -0
  121. package/dist/persistence/conversation-store.test.d.ts.map +1 -0
  122. package/dist/persistence/conversation-store.test.js +98 -0
  123. package/dist/persistence/conversation-store.test.js.map +1 -0
  124. package/dist/persistence/git-sync.d.ts +14 -1
  125. package/dist/persistence/git-sync.d.ts.map +1 -1
  126. package/dist/persistence/git-sync.js +73 -17
  127. package/dist/persistence/git-sync.js.map +1 -1
  128. package/dist/persistence/git-sync.test.js +155 -6
  129. package/dist/persistence/git-sync.test.js.map +1 -1
  130. package/dist/persistence/snapshot-sync.d.ts +19 -2
  131. package/dist/persistence/snapshot-sync.d.ts.map +1 -1
  132. package/dist/persistence/snapshot-sync.js +194 -83
  133. package/dist/persistence/snapshot-sync.js.map +1 -1
  134. package/dist/persistence/snapshot-sync.test.js +145 -27
  135. package/dist/persistence/snapshot-sync.test.js.map +1 -1
  136. package/dist/persistence/workspace.d.ts +3 -0
  137. package/dist/persistence/workspace.d.ts.map +1 -1
  138. package/dist/persistence/workspace.js +1 -0
  139. package/dist/persistence/workspace.js.map +1 -1
  140. package/dist/research/extract-texts.d.ts.map +1 -1
  141. package/dist/research/extract-texts.js +6 -13
  142. package/dist/research/extract-texts.js.map +1 -1
  143. package/dist/research/filingramp/attachment-tools.d.ts.map +1 -1
  144. package/dist/research/filingramp/attachment-tools.js +7 -4
  145. package/dist/research/filingramp/attachment-tools.js.map +1 -1
  146. package/dist/research/filingramp/shared.d.ts.map +1 -1
  147. package/dist/research/filingramp/shared.js +5 -5
  148. package/dist/research/filingramp/shared.js.map +1 -1
  149. package/dist/runtime/app-mode.d.ts +10 -0
  150. package/dist/runtime/app-mode.d.ts.map +1 -0
  151. package/dist/runtime/app-mode.js +172 -0
  152. package/dist/runtime/app-mode.js.map +1 -0
  153. package/dist/runtime/app-mode.test.d.ts +2 -0
  154. package/dist/runtime/app-mode.test.d.ts.map +1 -0
  155. package/dist/runtime/app-mode.test.js +130 -0
  156. package/dist/runtime/app-mode.test.js.map +1 -0
  157. package/dist/runtime/app-rehearsal.d.ts +2 -0
  158. package/dist/runtime/app-rehearsal.d.ts.map +1 -0
  159. package/dist/runtime/app-rehearsal.js +56 -0
  160. package/dist/runtime/app-rehearsal.js.map +1 -0
  161. package/dist/runtime/build-mode.d.ts +12 -0
  162. package/dist/runtime/build-mode.d.ts.map +1 -0
  163. package/dist/runtime/build-mode.js +116 -0
  164. package/dist/runtime/build-mode.js.map +1 -0
  165. package/dist/runtime/build-mode.test.d.ts +2 -0
  166. package/dist/runtime/build-mode.test.d.ts.map +1 -0
  167. package/dist/runtime/build-mode.test.js +121 -0
  168. package/dist/runtime/build-mode.test.js.map +1 -0
  169. package/dist/runtime/cli.js +7 -2
  170. package/dist/runtime/cli.js.map +1 -1
  171. package/dist/runtime/config.d.ts +4 -0
  172. package/dist/runtime/config.d.ts.map +1 -1
  173. package/dist/runtime/config.js +13 -2
  174. package/dist/runtime/config.js.map +1 -1
  175. package/dist/runtime/guest-server.d.ts +3 -0
  176. package/dist/runtime/guest-server.d.ts.map +1 -0
  177. package/dist/runtime/{lambda-microvm.js → guest-server.js} +49 -18
  178. package/dist/runtime/guest-server.js.map +1 -0
  179. package/dist/runtime/image-hooks.d.ts +5 -0
  180. package/dist/runtime/image-hooks.d.ts.map +1 -0
  181. package/dist/runtime/image-hooks.js +68 -0
  182. package/dist/runtime/image-hooks.js.map +1 -0
  183. package/dist/runtime/image-hooks.test.d.ts +2 -0
  184. package/dist/runtime/image-hooks.test.d.ts.map +1 -0
  185. package/dist/runtime/image-hooks.test.js +74 -0
  186. package/dist/runtime/image-hooks.test.js.map +1 -0
  187. package/dist/runtime/index.d.ts +8 -3
  188. package/dist/runtime/index.d.ts.map +1 -1
  189. package/dist/runtime/index.js +53 -35
  190. package/dist/runtime/index.js.map +1 -1
  191. package/dist/runtime/listening-ports.d.ts +13 -0
  192. package/dist/runtime/listening-ports.d.ts.map +1 -0
  193. package/dist/runtime/listening-ports.js +78 -0
  194. package/dist/runtime/listening-ports.js.map +1 -0
  195. package/dist/runtime/listening-ports.test.d.ts +2 -0
  196. package/dist/runtime/listening-ports.test.d.ts.map +1 -0
  197. package/dist/runtime/listening-ports.test.js +39 -0
  198. package/dist/runtime/listening-ports.test.js.map +1 -0
  199. package/dist/runtime/preview-proxy.d.ts +56 -0
  200. package/dist/runtime/preview-proxy.d.ts.map +1 -0
  201. package/dist/runtime/preview-proxy.js +302 -0
  202. package/dist/runtime/preview-proxy.js.map +1 -0
  203. package/dist/runtime/preview-proxy.test.d.ts +2 -0
  204. package/dist/runtime/preview-proxy.test.d.ts.map +1 -0
  205. package/dist/runtime/preview-proxy.test.js +122 -0
  206. package/dist/runtime/preview-proxy.test.js.map +1 -0
  207. package/dist/runtime/session-mode.d.ts +3 -0
  208. package/dist/runtime/session-mode.d.ts.map +1 -0
  209. package/dist/runtime/session-mode.js +60 -0
  210. package/dist/runtime/session-mode.js.map +1 -0
  211. package/dist/runtime/workload.d.ts +44 -0
  212. package/dist/runtime/workload.d.ts.map +1 -0
  213. package/dist/runtime/workload.js +222 -0
  214. package/dist/runtime/workload.js.map +1 -0
  215. package/dist/runtime/workload.test.d.ts +2 -0
  216. package/dist/runtime/workload.test.d.ts.map +1 -0
  217. package/dist/runtime/workload.test.js +235 -0
  218. package/dist/runtime/workload.test.js.map +1 -0
  219. package/dist/session/conversation.d.ts +3 -2
  220. package/dist/session/conversation.d.ts.map +1 -1
  221. package/dist/session/conversation.js +11 -7
  222. package/dist/session/conversation.js.map +1 -1
  223. package/dist/session/conversation.test.js +2 -3
  224. package/dist/session/conversation.test.js.map +1 -1
  225. package/dist/session/runtime.d.ts +16 -3
  226. package/dist/session/runtime.d.ts.map +1 -1
  227. package/dist/session/runtime.js +80 -13
  228. package/dist/session/runtime.js.map +1 -1
  229. package/dist/session/runtime.test.js +18 -7
  230. package/dist/session/runtime.test.js.map +1 -1
  231. package/dist/session/tools.d.ts.map +1 -1
  232. package/dist/session/tools.js +3 -3
  233. package/dist/session/tools.js.map +1 -1
  234. package/dist/task/loop.d.ts.map +1 -1
  235. package/dist/task/loop.js +6 -4
  236. package/dist/task/loop.js.map +1 -1
  237. package/dist/tools/exec-tools.d.ts +12 -0
  238. package/dist/tools/exec-tools.d.ts.map +1 -1
  239. package/dist/tools/exec-tools.js +46 -3
  240. package/dist/tools/exec-tools.js.map +1 -1
  241. package/dist/tools/exec-tools.test.d.ts +2 -0
  242. package/dist/tools/exec-tools.test.d.ts.map +1 -0
  243. package/dist/tools/exec-tools.test.js +48 -0
  244. package/dist/tools/exec-tools.test.js.map +1 -0
  245. package/dist/tools/fs-tools.d.ts.map +1 -1
  246. package/dist/tools/fs-tools.js +5 -5
  247. package/dist/tools/fs-tools.js.map +1 -1
  248. package/dist/transport/link.d.ts.map +1 -1
  249. package/dist/transport/link.js +16 -5
  250. package/dist/transport/link.js.map +1 -1
  251. package/dist/transport/link.test.js +24 -0
  252. package/dist/transport/link.test.js.map +1 -1
  253. package/dist/transport/protocol.d.ts +190 -3
  254. package/dist/transport/protocol.d.ts.map +1 -1
  255. package/dist/transport/protocol.js +147 -7
  256. package/dist/transport/protocol.js.map +1 -1
  257. package/dist/transport/protocol.test.js +41 -0
  258. package/dist/transport/protocol.test.js.map +1 -1
  259. package/dist/workspace-sync/eligibility.d.ts +14 -0
  260. package/dist/workspace-sync/eligibility.d.ts.map +1 -0
  261. package/dist/workspace-sync/eligibility.js +53 -0
  262. package/dist/workspace-sync/eligibility.js.map +1 -0
  263. package/dist/workspace-sync/merge.d.ts +15 -0
  264. package/dist/workspace-sync/merge.d.ts.map +1 -0
  265. package/dist/workspace-sync/merge.js +66 -0
  266. package/dist/workspace-sync/merge.js.map +1 -0
  267. package/dist/workspace-sync/merge.test.d.ts +2 -0
  268. package/dist/workspace-sync/merge.test.d.ts.map +1 -0
  269. package/dist/workspace-sync/merge.test.js +28 -0
  270. package/dist/workspace-sync/merge.test.js.map +1 -0
  271. package/dist/workspace-sync/workspace-sync.d.ts +48 -0
  272. package/dist/workspace-sync/workspace-sync.d.ts.map +1 -0
  273. package/dist/workspace-sync/workspace-sync.js +308 -0
  274. package/dist/workspace-sync/workspace-sync.js.map +1 -0
  275. package/dist/workspace-sync/workspace-sync.test.d.ts +2 -0
  276. package/dist/workspace-sync/workspace-sync.test.d.ts.map +1 -0
  277. package/dist/workspace-sync/workspace-sync.test.js +111 -0
  278. package/dist/workspace-sync/workspace-sync.test.js.map +1 -0
  279. package/dist/workspace-sync/write-drafts.d.ts +24 -0
  280. package/dist/workspace-sync/write-drafts.d.ts.map +1 -0
  281. package/dist/workspace-sync/write-drafts.js +87 -0
  282. package/dist/workspace-sync/write-drafts.js.map +1 -0
  283. package/dist/workspace-sync/write-drafts.test.d.ts +2 -0
  284. package/dist/workspace-sync/write-drafts.test.d.ts.map +1 -0
  285. package/dist/workspace-sync/write-drafts.test.js +36 -0
  286. package/dist/workspace-sync/write-drafts.test.js.map +1 -0
  287. package/package.json +12 -2
  288. package/dist/runtime/lambda-microvm.d.ts +0 -3
  289. package/dist/runtime/lambda-microvm.d.ts.map +0 -1
  290. package/dist/runtime/lambda-microvm.js.map +0 -1
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compileRules = compileRules;
4
+ exports.redirectFor = redirectFor;
5
+ exports.rewriteFor = rewriteFor;
6
+ exports.headersFor = headersFor;
7
+ // A service's routing rules, in vercel.json's order: clean URLs, trailing slash and redirects answer
8
+ // first, headers go on whatever answers, and rewrites come after a static site's files (or, for a
9
+ // server, right before it gets the request). Paths here are as the request spells them: percent-
10
+ // encoded values stay encoded in what they are filled into.
11
+ const route_pattern_1 = require("./route-pattern");
12
+ const PERMANENT_REDIRECT = 308;
13
+ const TEMPORARY_REDIRECT = 307;
14
+ function compileRules(settings) {
15
+ var _a, _b, _c, _d;
16
+ return {
17
+ redirects: ((_a = settings.redirects) !== null && _a !== void 0 ? _a : []).map((rule) => {
18
+ var _a;
19
+ return ({
20
+ pattern: (0, route_pattern_1.compileRoute)(rule.source),
21
+ destination: rule.destination,
22
+ status: (_a = rule.statusCode) !== null && _a !== void 0 ? _a : (rule.permanent === false ? TEMPORARY_REDIRECT : PERMANENT_REDIRECT),
23
+ });
24
+ }),
25
+ rewrites: ((_b = settings.rewrites) !== null && _b !== void 0 ? _b : []).map((rule) => ({ pattern: (0, route_pattern_1.compileRoute)(rule.source), destination: rule.destination })),
26
+ headers: ((_c = settings.headers) !== null && _c !== void 0 ? _c : []).map((rule) => ({ pattern: (0, route_pattern_1.compileRoute)(rule.source), headers: rule.headers })),
27
+ cleanUrls: (_d = settings.cleanUrls) !== null && _d !== void 0 ? _d : false,
28
+ trailingSlash: settings.trailingSlash,
29
+ };
30
+ }
31
+ /** `path` on this site: leading slashes collapsed, so `//evil.example` can never become another host. */
32
+ function localPath(path) {
33
+ return `/${path.replace(/^[/\\]+/, '')}`;
34
+ }
35
+ function withSearch(location, search) {
36
+ if (!search)
37
+ return location;
38
+ return location.includes('?') ? `${location}&${search.slice(1)}` : `${location}${search}`;
39
+ }
40
+ function canonicalPath(rules, pathname) {
41
+ var _a;
42
+ if (rules.cleanUrls) {
43
+ const index = /^\/(?:(.+)\/)?index(?:\.html)?\/?$/.exec(pathname);
44
+ if (index)
45
+ return `/${(_a = index[1]) !== null && _a !== void 0 ? _a : ''}`;
46
+ const page = /^\/(.+)\.html\/?$/.exec(pathname);
47
+ if (page)
48
+ return `/${page[1]}`;
49
+ }
50
+ if (rules.trailingSlash === true) {
51
+ // A path naming a file keeps none: /app.js, not /app.js/.
52
+ const file = /^\/((?:[^/]+\/)*[^/]+\.\w+)\/$/.exec(pathname);
53
+ if (file)
54
+ return `/${file[1]}`;
55
+ if (/^\/(?:[^/]+\/)*[^/.]+$/.test(pathname))
56
+ return `${pathname}/`;
57
+ }
58
+ else if (rules.trailingSlash === false && pathname !== '/' && pathname.endsWith('/')) {
59
+ return pathname.replace(/\/+$/, '');
60
+ }
61
+ return undefined;
62
+ }
63
+ /** The redirect that answers `pathname`, if any; `search` (with its `?`) carries over to it. */
64
+ function redirectFor(rules, pathname, search) {
65
+ const canonical = canonicalPath(rules, pathname);
66
+ if (canonical !== undefined)
67
+ return { status: PERMANENT_REDIRECT, location: withSearch(localPath(canonical), search) };
68
+ for (const rule of rules.redirects) {
69
+ const values = (0, route_pattern_1.matchRoute)(rule.pattern, pathname);
70
+ if (!values)
71
+ continue;
72
+ const filled = (0, route_pattern_1.fillDestination)(rule.destination, values);
73
+ return { status: rule.status, location: withSearch(/^https?:\/\//i.test(filled) ? filled : localPath(filled), search) };
74
+ }
75
+ return undefined;
76
+ }
77
+ /** The URL a rewrite turns `pathname` into, `search` included; undefined when none matches. */
78
+ function rewriteFor(rules, pathname, search = '') {
79
+ for (const rule of rules.rewrites) {
80
+ const values = (0, route_pattern_1.matchRoute)(rule.pattern, pathname);
81
+ if (values)
82
+ return withSearch(localPath((0, route_pattern_1.fillDestination)(rule.destination, values)), search);
83
+ }
84
+ return undefined;
85
+ }
86
+ /** The headers every matching rule sets on the answer to `pathname`. */
87
+ function headersFor(rules, pathname) {
88
+ return rules.headers.flatMap((rule) => ((0, route_pattern_1.matchRoute)(rule.pattern, pathname) ? rule.headers : []));
89
+ }
90
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/app/rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rules.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.test.d.ts","sourceRoot":"","sources":["../../src/app/rules.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,69 @@
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 rules_1 = require("./rules");
9
+ (0, node_test_1.describe)('routing rules', () => {
10
+ (0, node_test_1.it)('redirects as vercel.json does: permanent 308 by default, with parameters and the query carried over', () => {
11
+ const rules = (0, rules_1.compileRules)({
12
+ redirects: [
13
+ { source: '/old/:slug', destination: '/new/:slug' },
14
+ { source: '/temp', destination: '/there', permanent: false },
15
+ { source: '/moved', destination: '/here', statusCode: 301 },
16
+ { source: '/docs/(.*)', destination: 'https://docs.example.com/$1?from=app' },
17
+ ],
18
+ });
19
+ strict_1.default.deepEqual((0, rules_1.redirectFor)(rules, '/old/a', '?x=1'), { status: 308, location: '/new/a?x=1' });
20
+ strict_1.default.deepEqual((0, rules_1.redirectFor)(rules, '/temp', ''), { status: 307, location: '/there' });
21
+ strict_1.default.deepEqual((0, rules_1.redirectFor)(rules, '/moved', ''), { status: 301, location: '/here' });
22
+ strict_1.default.deepEqual((0, rules_1.redirectFor)(rules, '/docs/a/b', '?x=1'), { status: 308, location: 'https://docs.example.com/a/b?from=app&x=1' });
23
+ strict_1.default.equal((0, rules_1.redirectFor)(rules, '/other', ''), undefined);
24
+ });
25
+ (0, node_test_1.it)('makes clean URLs canonical', () => {
26
+ var _a, _b, _c;
27
+ const rules = (0, rules_1.compileRules)({ cleanUrls: true });
28
+ strict_1.default.equal((_a = (0, rules_1.redirectFor)(rules, '/about.html', '')) === null || _a === void 0 ? void 0 : _a.location, '/about');
29
+ strict_1.default.equal((_b = (0, rules_1.redirectFor)(rules, '/index.html', '?a=1')) === null || _b === void 0 ? void 0 : _b.location, '/?a=1');
30
+ strict_1.default.equal((_c = (0, rules_1.redirectFor)(rules, '/blog/index.html', '')) === null || _c === void 0 ? void 0 : _c.location, '/blog');
31
+ strict_1.default.equal((0, rules_1.redirectFor)(rules, '/about', ''), undefined);
32
+ strict_1.default.equal((0, rules_1.redirectFor)(rules, '/', ''), undefined);
33
+ });
34
+ (0, node_test_1.it)('adds or removes the trailing slash, leaving files alone', () => {
35
+ var _a, _b, _c;
36
+ const add = (0, rules_1.compileRules)({ trailingSlash: true });
37
+ strict_1.default.equal((_a = (0, rules_1.redirectFor)(add, '/about', '')) === null || _a === void 0 ? void 0 : _a.location, '/about/');
38
+ strict_1.default.equal((0, rules_1.redirectFor)(add, '/app.js', ''), undefined);
39
+ strict_1.default.equal((_b = (0, rules_1.redirectFor)(add, '/app.js/', '')) === null || _b === void 0 ? void 0 : _b.location, '/app.js');
40
+ strict_1.default.equal((0, rules_1.redirectFor)(add, '/about/', ''), undefined);
41
+ strict_1.default.equal((0, rules_1.redirectFor)(add, '/', ''), undefined);
42
+ const remove = (0, rules_1.compileRules)({ trailingSlash: false });
43
+ strict_1.default.equal((_c = (0, rules_1.redirectFor)(remove, '/about/', '')) === null || _c === void 0 ? void 0 : _c.location, '/about');
44
+ strict_1.default.equal((0, rules_1.redirectFor)(remove, '/about', ''), undefined);
45
+ strict_1.default.equal((0, rules_1.redirectFor)(remove, '/', ''), undefined);
46
+ });
47
+ (0, node_test_1.it)('never redirects to another site through the path someone asked for', () => {
48
+ var _a, _b, _c, _d;
49
+ strict_1.default.equal((_a = (0, rules_1.redirectFor)((0, rules_1.compileRules)({ trailingSlash: false }), '//evil.example/', '')) === null || _a === void 0 ? void 0 : _a.location, '/evil.example');
50
+ strict_1.default.equal((_b = (0, rules_1.redirectFor)((0, rules_1.compileRules)({ cleanUrls: true }), '//evil.example/x.html', '')) === null || _b === void 0 ? void 0 : _b.location, '/evil.example/x');
51
+ const rules = (0, rules_1.compileRules)({ redirects: [{ source: '/go/(.*)', destination: '/$1' }] });
52
+ strict_1.default.equal((_c = (0, rules_1.redirectFor)(rules, '/go//evil.example', '')) === null || _c === void 0 ? void 0 : _c.location, '/evil.example');
53
+ strict_1.default.equal((_d = (0, rules_1.redirectFor)(rules, '/go/\\evil.example', '')) === null || _d === void 0 ? void 0 : _d.location, '/evil.example');
54
+ });
55
+ (0, node_test_1.it)('rewrites and sets headers by the path asked for', () => {
56
+ const rules = (0, rules_1.compileRules)({
57
+ rewrites: [{ source: '/v1/(.*)', destination: '/api/$1?version=1' }],
58
+ headers: [
59
+ { source: '/(.*)', headers: [{ key: 'X-Frame-Options', value: 'DENY' }] },
60
+ { source: '/v1/(.*)', headers: [{ key: 'Cache-Control', value: 'no-store' }] },
61
+ ],
62
+ });
63
+ strict_1.default.equal((0, rules_1.rewriteFor)(rules, '/v1/users', '?a=1'), '/api/users?version=1&a=1');
64
+ strict_1.default.equal((0, rules_1.rewriteFor)(rules, '/other'), undefined);
65
+ strict_1.default.deepEqual((0, rules_1.headersFor)(rules, '/v1/users').map((header) => header.key), ['X-Frame-Options', 'Cache-Control']);
66
+ strict_1.default.deepEqual((0, rules_1.headersFor)(rules, '/').map((header) => header.key), ['X-Frame-Options']);
67
+ });
68
+ });
69
+ //# sourceMappingURL=rules.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.test.js","sourceRoot":"","sources":["../../src/app/rules.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAuC;AACvC,yCAAwC;AACxC,mCAA2E;AAE3E,IAAA,oBAAQ,EAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAA,cAAE,EAAC,qGAAqG,EAAE,GAAG,EAAE;QAC7G,MAAM,KAAK,GAAG,IAAA,oBAAY,EAAC;YACzB,SAAS,EAAE;gBACT,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE;gBACnD,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;gBAC5D,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE;gBAC3D,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,sCAAsC,EAAE;aAC9E;SACF,CAAC,CAAA;QACF,gBAAM,CAAC,SAAS,CAAC,IAAA,mBAAW,EAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAA;QAC/F,gBAAM,CAAC,SAAS,CAAC,IAAA,mBAAW,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QACtF,gBAAM,CAAC,SAAS,CAAC,IAAA,mBAAW,EAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;QACtF,gBAAM,CAAC,SAAS,CAAC,IAAA,mBAAW,EAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,2CAA2C,EAAE,CAAC,CAAA;QACjI,gBAAM,CAAC,KAAK,CAAC,IAAA,mBAAW,EAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,4BAA4B,EAAE,GAAG,EAAE;;QACpC,MAAM,KAAK,GAAG,IAAA,oBAAY,EAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/C,gBAAM,CAAC,KAAK,CAAC,MAAA,IAAA,mBAAW,EAAC,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC,0CAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACvE,gBAAM,CAAC,KAAK,CAAC,MAAA,IAAA,mBAAW,EAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,0CAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC1E,gBAAM,CAAC,KAAK,CAAC,MAAA,IAAA,mBAAW,EAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC,0CAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC3E,gBAAM,CAAC,KAAK,CAAC,IAAA,mBAAW,EAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;QACzD,gBAAM,CAAC,KAAK,CAAC,IAAA,mBAAW,EAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,yDAAyD,EAAE,GAAG,EAAE;;QACjE,MAAM,GAAG,GAAG,IAAA,oBAAY,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,gBAAM,CAAC,KAAK,CAAC,MAAA,IAAA,mBAAW,EAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,0CAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;QACjE,gBAAM,CAAC,KAAK,CAAC,IAAA,mBAAW,EAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;QACxD,gBAAM,CAAC,KAAK,CAAC,MAAA,IAAA,mBAAW,EAAC,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,0CAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;QACnE,gBAAM,CAAC,KAAK,CAAC,IAAA,mBAAW,EAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;QACxD,gBAAM,CAAC,KAAK,CAAC,IAAA,mBAAW,EAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;QAClD,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAA;QACrD,gBAAM,CAAC,KAAK,CAAC,MAAA,IAAA,mBAAW,EAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,0CAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACpE,gBAAM,CAAC,KAAK,CAAC,IAAA,mBAAW,EAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;QAC1D,gBAAM,CAAC,KAAK,CAAC,IAAA,mBAAW,EAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,oEAAoE,EAAE,GAAG,EAAE;;QAC5E,gBAAM,CAAC,KAAK,CAAC,MAAA,IAAA,mBAAW,EAAC,IAAA,oBAAY,EAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,iBAAiB,EAAE,EAAE,CAAC,0CAAE,QAAQ,EAAE,eAAe,CAAC,CAAA;QACnH,gBAAM,CAAC,KAAK,CAAC,MAAA,IAAA,mBAAW,EAAC,IAAA,oBAAY,EAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,uBAAuB,EAAE,EAAE,CAAC,0CAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAA;QACtH,MAAM,KAAK,GAAG,IAAA,oBAAY,EAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QACvF,gBAAM,CAAC,KAAK,CAAC,MAAA,IAAA,mBAAW,EAAC,KAAK,EAAE,mBAAmB,EAAE,EAAE,CAAC,0CAAE,QAAQ,EAAE,eAAe,CAAC,CAAA;QACpF,gBAAM,CAAC,KAAK,CAAC,MAAA,IAAA,mBAAW,EAAC,KAAK,EAAE,oBAAoB,EAAE,EAAE,CAAC,0CAAE,QAAQ,EAAE,eAAe,CAAC,CAAA;IACvF,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,KAAK,GAAG,IAAA,oBAAY,EAAC;YACzB,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;YACpE,OAAO,EAAE;gBACP,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE;gBACzE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE;aAC/E;SACF,CAAC,CAAA;QACF,gBAAM,CAAC,KAAK,CAAC,IAAA,kBAAU,EAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,0BAA0B,CAAC,CAAA;QAChF,gBAAM,CAAC,KAAK,CAAC,IAAA,kBAAU,EAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAA;QACpD,gBAAM,CAAC,SAAS,CAAC,IAAA,kBAAU,EAAC,KAAK,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAA;QAClH,gBAAM,CAAC,SAAS,CAAC,IAAA,kBAAU,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAC3F,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,109 @@
1
+ import { spawn as spawnProcess } from 'node:child_process';
2
+ import { type AgentAppProcess, type AgentAppStatus } from '../transport/protocol';
3
+ import { type AppConfig, type AppMode } from './config';
4
+ import { type RoutingRules } from './rules';
5
+ import { type StaticSite } from './static-server';
6
+ /** Where the app's logs go, relative to its directory (kept out of snapshots and commits). */
7
+ export declare const APP_LOG_DIR = ".builder/logs";
8
+ export interface AppRunnerOptions {
9
+ /** The app's directory: the workspace, or a deployment's. */
10
+ dir: string;
11
+ mode: AppMode;
12
+ /** The processes' environment; the runner adds PORT. */
13
+ env: NodeJS.ProcessEnv;
14
+ /** Copy process output to the guest's own stdout too (a deployment's only log). */
15
+ echoOutput?: boolean;
16
+ /** A deployment's build: once done, a marker by this name lets a restart on the same disk skip install and build. */
17
+ buildId?: string;
18
+ /** The release was built ahead of time and brought its output and dependencies: only start it. */
19
+ prebuilt?: boolean;
20
+ onStatus?: (status: AgentAppStatus) => void;
21
+ spawn?: typeof spawnProcess;
22
+ isListening?: (port: number) => Promise<boolean>;
23
+ backoff?: {
24
+ initialMs: number;
25
+ maxMs: number;
26
+ resetAfterMs: number;
27
+ };
28
+ readyPollMs?: number;
29
+ }
30
+ /** Where a request path goes. */
31
+ export type AppRoute = {
32
+ kind: 'port';
33
+ port: number;
34
+ rules: RoutingRules;
35
+ } | {
36
+ kind: 'static';
37
+ site: StaticSite;
38
+ rules: RoutingRules;
39
+ }
40
+ /** The service that would answer isn't up (or the app never got that far): say so. */
41
+ | {
42
+ kind: 'unavailable';
43
+ process?: AgentAppProcess;
44
+ } | {
45
+ kind: 'none';
46
+ };
47
+ export declare class AppRunner {
48
+ private readonly config;
49
+ private readonly options;
50
+ private readonly processes;
51
+ private readonly rewrites;
52
+ private phase;
53
+ /** Its processes are all known: until then, none running doesn't mean all of them are. */
54
+ private launched;
55
+ private error?;
56
+ private stopped;
57
+ private readonly spawn;
58
+ private readonly isListening;
59
+ private readonly backoff;
60
+ private readonly readyPollMs;
61
+ private readonly logs;
62
+ /** The install or build running now, so stop() ends it too. */
63
+ private step?;
64
+ constructor(config: AppConfig, options: AppRunnerOptions);
65
+ status(): AgentAppStatus;
66
+ private currentPhase;
67
+ /**
68
+ * A service is on its first start, so what a page calls may not be there yet. One that has
69
+ * crashed and is restarting doesn't count: it might never come up.
70
+ */
71
+ firstStartPending(): boolean;
72
+ private changed;
73
+ private logPath;
74
+ private relativeLog;
75
+ private openLog;
76
+ private launch;
77
+ /** The processes' env in `cwd`: its own installed tools (node_modules/.bin, a .venv) come first. */
78
+ private envFor;
79
+ /** Runs a one-off step (an install or a build) to completion: its exit code (null when it couldn't run). */
80
+ private runStep;
81
+ private resolveDir;
82
+ /** Ports for services that name none: DEFAULT_APP_PORT upward, past reserved and busy ones. */
83
+ private assignPorts;
84
+ private buildMarker;
85
+ /** Installs and builds as this mode does, starting nothing. False when a step failed (status says why) or it was stopped. */
86
+ prepare(): Promise<boolean>;
87
+ /** Installs (and builds, deployed), then starts every process. Resolves once they're launched. */
88
+ start(): Promise<void>;
89
+ private fail;
90
+ private install;
91
+ private build;
92
+ private startProcess;
93
+ private pollReady;
94
+ private exited;
95
+ private routeTo;
96
+ /**
97
+ * Where a request for `pathname` goes: a service's port, its static files, or nowhere yet, for
98
+ * every rewrite that matches, in order. A static service without the file passes it to the next.
99
+ */
100
+ routes(pathname: string): AppRoute[];
101
+ /** Resolves once every service is running or has crashed (or the app failed), or after `timeoutMs`. */
102
+ settled(timeoutMs: number): Promise<AgentAppStatus>;
103
+ private kill;
104
+ /** Stops every process (SIGTERM, then SIGKILL after a grace period). */
105
+ stop(): Promise<void>;
106
+ }
107
+ /** A log's last `lines` lines, for telling the model or a person why something failed. */
108
+ export declare function logTail(dir: string, relativeLog: string, lines?: number): Promise<string>;
109
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/app/runner.ts"],"names":[],"mappings":"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"}