@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
@@ -0,0 +1,449 @@
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
+ exports.FRAMEWORKS = void 0;
7
+ exports.fileListReader = fileListReader;
8
+ exports.detectProject = detectProject;
9
+ exports.detectApp = detectApp;
10
+ // How an app runs when nobody has said yet, the way Vercel detects a project: its framework from
11
+ // package.json's dependencies (or a Python app's), the package manager from the lockfile, and from
12
+ // those the install, dev, build and start commands and the output directory; for every service the
13
+ // project holds (the root, its folders, apps/* and services/*), with the routes between them. Only
14
+ // for an app with no builder.json: a session VM writes the result into one, and from then on the file
15
+ // says what runs. Reads files through a reader, so the guest's disk and a release's git tree detect alike.
16
+ const node_path_1 = __importDefault(require("node:path"));
17
+ const functions_routes_1 = require("./functions-routes");
18
+ /** Vercel's framework slugs, plus `python` for a plain Python server. */
19
+ exports.FRAMEWORKS = [
20
+ 'nextjs',
21
+ 'nuxtjs',
22
+ 'sveltekit',
23
+ 'astro',
24
+ 'create-react-app',
25
+ 'vite',
26
+ 'nestjs',
27
+ 'express',
28
+ 'fastify',
29
+ 'hono',
30
+ 'koa',
31
+ 'fastapi',
32
+ 'flask',
33
+ 'python',
34
+ ];
35
+ /** A reader over a list of files (stored session files, a git tree), reading each through `read`. */
36
+ function fileListReader(files, read) {
37
+ const normalize = (file) => node_path_1.default.posix.normalize(file).replace(/^(\.\/|\/)+/, '');
38
+ const paths = new Set();
39
+ const directories = new Set();
40
+ for (const file of files) {
41
+ const normalized = normalize(file);
42
+ paths.add(normalized);
43
+ for (let dir = node_path_1.default.posix.dirname(normalized); dir !== '.' && dir !== '/'; dir = node_path_1.default.posix.dirname(dir))
44
+ directories.add(dir);
45
+ }
46
+ return {
47
+ exists: async (file) => paths.has(normalize(file)) || directories.has(normalize(file)),
48
+ read: async (file) => (paths.has(normalize(file)) ? read(normalize(file)) : undefined),
49
+ list: async (dir) => {
50
+ const prefix = `${normalize(dir)}/`;
51
+ return [...paths].filter((file) => file.startsWith(prefix)).map((file) => file.slice(prefix.length));
52
+ },
53
+ directories: async (dir) => {
54
+ const parent = normalize(dir);
55
+ return [...directories].filter((found) => node_path_1.default.posix.dirname(found) === parent).map((found) => node_path_1.default.posix.basename(found));
56
+ },
57
+ };
58
+ }
59
+ const LISTEN = '--host 0.0.0.0 --port $PORT';
60
+ /** A client-routed single-page app: a path with no file is its index.html. */
61
+ const SPA_FALLBACK = [{ source: '/(.*)', destination: '/index.html' }];
62
+ const NODE_FRAMEWORKS = [
63
+ { framework: 'nextjs', dependency: 'next' },
64
+ { framework: 'nuxtjs', dependency: 'nuxt' },
65
+ { framework: 'sveltekit', dependency: '@sveltejs/kit' },
66
+ { framework: 'astro', dependency: 'astro' },
67
+ { framework: 'create-react-app', dependency: 'react-scripts' },
68
+ { framework: 'vite', dependency: 'vite' },
69
+ { framework: 'nestjs', dependency: '@nestjs/core' },
70
+ { framework: 'express', dependency: 'express' },
71
+ { framework: 'fastify', dependency: 'fastify' },
72
+ { framework: 'hono', dependency: 'hono' },
73
+ { framework: 'koa', dependency: 'koa' },
74
+ ];
75
+ const SERVER_FRAMEWORKS = new Set(['nestjs', 'express', 'fastify', 'hono', 'koa']);
76
+ const PYTHON_FRAMEWORKS = new Set(['fastapi', 'flask', 'python']);
77
+ const NODE_ENTRIES = ['server', 'app', 'index', 'main'].flatMap((name) => ['js', 'mjs', 'cjs', 'ts'].map((ext) => `${name}.${ext}`));
78
+ const PYTHON_ENTRY_DIRS = ['.', 'src', 'app', 'api'];
79
+ const PYTHON_ENTRIES = ['main.py', 'app.py', 'server.py', 'index.py', 'asgi.py', 'wsgi.py'];
80
+ function packageManager(name) {
81
+ // Only npm and pnpm are in the VM image; yarn and bun come through npx on first use.
82
+ const bin = { pnpm: 'pnpm', yarn: 'npx --yes yarn', bun: 'npx --yes bun', npm: 'npm' }[name];
83
+ return { install: `${bin} install`, run: (script) => `${bin} run ${script}` };
84
+ }
85
+ // Folders that hold services themselves rather than being one.
86
+ const SERVICE_CONTAINERS = new Set(['apps', 'services']);
87
+ // Folders that are part of whatever is around them, whatever they hold.
88
+ const NOT_SERVICES = new Set([
89
+ 'node_modules', 'dist', 'build', 'out', 'public', 'static', 'assets', 'src', 'lib', 'libs', 'packages',
90
+ 'test', 'tests', 'docs', 'data', 'research', 'scripts', 'coverage', '__pycache__', 'vendor', 'tmp',
91
+ ]);
92
+ // A folder of plain HTML or scripts is only a service under a name that says so (not reports/index.html).
93
+ const SITE_FOLDERS = ['web', 'frontend', 'client', 'site', 'www', 'ui', 'app'];
94
+ const PROJECT_FILES = ['package.json', 'requirements.txt', 'pyproject.toml'];
95
+ const RUNS_OTHER_PACKAGES = /concurrently|npm-run-all|\brun-p\b|\bturbo\b|\bnx\b|\blerna\b|--workspace|--filter|--prefix|\bcd /;
96
+ function isServer({ framework, settings }) {
97
+ if (framework === null)
98
+ return Boolean(settings.startCommand);
99
+ return SERVER_FRAMEWORKS.has(framework) || PYTHON_FRAMEWORKS.has(framework);
100
+ }
101
+ function isStaticSite({ settings }) {
102
+ return Boolean(settings.outputDirectory && !settings.startCommand);
103
+ }
104
+ function toService(root, { framework, settings }) {
105
+ return {
106
+ root,
107
+ framework,
108
+ installCommand: settings.installCommand,
109
+ devCommand: settings.devCommand,
110
+ buildCommand: settings.buildCommand,
111
+ startCommand: settings.startCommand,
112
+ outputDirectory: settings.outputDirectory,
113
+ rewrites: settings.rewrites,
114
+ };
115
+ }
116
+ function parsePackage(text) {
117
+ try {
118
+ const parsed = JSON.parse(text !== null && text !== void 0 ? text : '{}');
119
+ return parsed && typeof parsed === 'object' ? parsed : {};
120
+ }
121
+ catch (_a) {
122
+ // Unreadable: a package with no scripts; its install then says what is wrong.
123
+ return {};
124
+ }
125
+ }
126
+ /** The service in one of the project's folders: it has a project file of its own, or is named as a site. */
127
+ async function detectFolder(reader, root) {
128
+ var _a;
129
+ const has = (file) => reader.exists(node_path_1.default.posix.join(root, file));
130
+ const named = SITE_FOLDERS.includes(node_path_1.default.posix.basename(root));
131
+ if (!named && !(await Promise.all(PROJECT_FILES.map(has))).some(Boolean))
132
+ return undefined;
133
+ const app = await detectApp(reader, root);
134
+ if (!app || app.framework || app.settings.startCommand || named)
135
+ return app;
136
+ // Only scripts: a library (tsc -w is a dev script too), unless there is a page to serve.
137
+ return (await has(node_path_1.default.posix.join((_a = app.settings.outputDirectory) !== null && _a !== void 0 ? _a : '.', 'index.html'))) ? app : undefined;
138
+ }
139
+ /**
140
+ * A folder in packages/, where a project keeps its services and a monorepo its shared code: any name
141
+ * can be a service, but one with nothing to run or show is a library. A bundler alone says nothing,
142
+ * since libraries build with one too: a site has a page.
143
+ */
144
+ async function detectPackage(reader, root) {
145
+ var _a;
146
+ const app = await detectApp(reader, root);
147
+ if (!app || app.settings.startCommand || (app.framework && app.framework !== 'vite'))
148
+ return app;
149
+ const has = (file) => reader.exists(node_path_1.default.posix.join(root, file));
150
+ return (await has('index.html')) || (await has(node_path_1.default.posix.join((_a = app.settings.outputDirectory) !== null && _a !== void 0 ? _a : '.', 'index.html'))) ? app : undefined;
151
+ }
152
+ /**
153
+ * A site below its own name gets its paths whole, with files that don't have the name in theirs: its
154
+ * rules drop the name, and a bundler builds its URLs with it. A framework with a server of its own
155
+ * has a setting for this (Next.js's basePath) that only the project can set.
156
+ */
157
+ function mountBelow(service, name) {
158
+ var _a;
159
+ const vite = service.framework === 'vite';
160
+ if (service.devCommand && !vite)
161
+ return;
162
+ const base = `/${name}`;
163
+ // Without the slash, the site's relative links would leave it. Sources also match with a slash,
164
+ // which has to stay out of this one, or it redirects to itself.
165
+ service.redirects = [{ source: `/(${name}(?!/))`, destination: `${base}/`, permanent: false }];
166
+ service.rewrites = ((_a = service.rewrites) === null || _a === void 0 ? void 0 : _a.length)
167
+ // A single-page app: its files, then its index.html for the paths it routes itself.
168
+ ? [{ source: `${base}/(.*\\.\\w+)`, destination: '/$1' }, { source: `${base}/(.*)`, destination: '/index.html' }]
169
+ : [{ source: `${base}/(.*)`, destination: '/$1' }];
170
+ if (vite) {
171
+ service.devCommand = `${service.devCommand} --base ${base}/`;
172
+ service.buildCommand = `${service.buildCommand} --base ${base}/`;
173
+ }
174
+ }
175
+ async function detectFolders(reader, skip) {
176
+ const roots = [];
177
+ for (const name of (await reader.directories('.')).sort()) {
178
+ if (name.startsWith('.') || NOT_SERVICES.has(name))
179
+ continue;
180
+ if (!SERVICE_CONTAINERS.has(name))
181
+ roots.push(name);
182
+ else
183
+ for (const inner of (await reader.directories(name)).sort())
184
+ roots.push(`${name}/${inner}`);
185
+ }
186
+ const found = [];
187
+ for (const root of roots) {
188
+ const app = skip(root) ? undefined : await detectFolder(reader, root);
189
+ if (app)
190
+ found.push({ root, app });
191
+ }
192
+ return found;
193
+ }
194
+ /** Whether the root package only runs the packages in its folders: a monorepo's, or with `concurrently`. */
195
+ async function rootRunsItsFolders(reader, rootApp) {
196
+ var _a;
197
+ if (!rootApp || (await reader.exists('pnpm-workspace.yaml')))
198
+ return true;
199
+ const pkg = parsePackage(await reader.read('package.json'));
200
+ if (pkg.workspaces)
201
+ return true;
202
+ return !rootApp.framework && Object.values((_a = pkg.scripts) !== null && _a !== void 0 ? _a : {}).some((script) => typeof script === 'string' && RUNS_OTHER_PACKAGES.test(script));
203
+ }
204
+ /**
205
+ * Every service the project holds and which paths reach each: a site at `/`, a server below `/api`,
206
+ * anything else below its own name; a lone server gets everything. A server with its own public/
207
+ * and no site gets those files in front of it, the way Vercel serves a project's files before its
208
+ * routes. Undefined when the project holds nothing to run.
209
+ */
210
+ async function detectProject(reader) {
211
+ const rootApp = await detectApp(reader);
212
+ // A Python app's entry may sit in app/ or api/: then that folder is the root's.
213
+ const rootIsPython = (rootApp === null || rootApp === void 0 ? void 0 : rootApp.framework) ? PYTHON_FRAMEWORKS.has(rootApp.framework) : false;
214
+ const found = await detectFolders(reader, (root) => rootIsPython && PYTHON_ENTRY_DIRS.includes(root));
215
+ const runsFolders = await rootRunsItsFolders(reader, rootApp);
216
+ // packages/ holds the project's services, unless it keeps those in apps/ or services/ or is an app
217
+ // itself: then it holds their shared code.
218
+ const rootIsApp = (rootApp === null || rootApp === void 0 ? void 0 : rootApp.framework) && !runsFolders;
219
+ if (!rootIsApp && !found.some(({ root }) => /^(apps|services)\//.test(root))) {
220
+ for (const inner of (await reader.directories('packages')).sort()) {
221
+ const root = `packages/${inner}`;
222
+ const app = await detectPackage(reader, root);
223
+ if (app)
224
+ found.push({ root, app });
225
+ }
226
+ }
227
+ if (rootApp && !(found.length && runsFolders))
228
+ found.unshift({ root: '.', app: rootApp });
229
+ const services = {};
230
+ const nameFor = (wanted) => {
231
+ const base = wanted.replace(/[^A-Za-z0-9_-]/g, '-').replace(/^[^A-Za-z0-9]+/, '').slice(0, 36) || 'service';
232
+ let name = base;
233
+ for (let count = 2; services[name]; count++)
234
+ name = `${base}-${count}`;
235
+ return name;
236
+ };
237
+ const sites = [];
238
+ const servers = [];
239
+ for (const { root, app } of found) {
240
+ const server = isServer(app);
241
+ const name = nameFor(root !== '.' ? node_path_1.default.posix.basename(root) : server ? 'api' : 'web');
242
+ services[name] = toService(root, app);
243
+ (server ? servers : sites).push(name);
244
+ }
245
+ const siteRank = (name) => {
246
+ if (services[name].root === '.')
247
+ return -1;
248
+ const rank = SITE_FOLDERS.indexOf(node_path_1.default.posix.basename(services[name].root));
249
+ return rank < 0 ? SITE_FOLDERS.length : rank;
250
+ };
251
+ sites.sort((a, b) => siteRank(a) - siteRank(b));
252
+ servers.sort((a, b) => Number(b === 'api') - Number(a === 'api'));
253
+ const [mainSite, ...otherSites] = sites;
254
+ const [mainServer, ...otherServers] = servers;
255
+ // Functions: an api/ folder beside a static site, or with nothing else at its root. A server's or a
256
+ // full-stack framework's api/ is its own code.
257
+ let functions;
258
+ const rootTaken = found.some(({ root }) => root === '.');
259
+ for (const root of [...(rootTaken ? [] : ['.']), ...found.filter(({ app }) => isStaticSite(app)).map(({ root }) => root)]) {
260
+ const directory = node_path_1.default.posix.join(root, functions_routes_1.DEFAULT_FUNCTIONS_DIRECTORY);
261
+ if (found.some((service) => service.root === directory) || !(await reader.list(directory)).some(functions_routes_1.isFunctionFile))
262
+ continue;
263
+ const installCommand = (await reader.exists(node_path_1.default.posix.join(root, 'package.json'))) ? (await detectPackageManager(reader, root)).install : undefined;
264
+ functions = nameFor(functions_routes_1.DEFAULT_FUNCTIONS_DIRECTORY);
265
+ services[functions] = { root, framework: null, installCommand, functions: { directory: functions_routes_1.DEFAULT_FUNCTIONS_DIRECTORY, path: `/${functions_routes_1.DEFAULT_FUNCTIONS_DIRECTORY}` } };
266
+ break;
267
+ }
268
+ let serverFiles;
269
+ if (!mainSite && mainServer && (await reader.exists(node_path_1.default.posix.join(services[mainServer].root, 'public/index.html')))) {
270
+ serverFiles = nameFor('web');
271
+ services[serverFiles] = { root: services[mainServer].root, framework: null, outputDirectory: 'public' };
272
+ }
273
+ if (!Object.keys(services).length)
274
+ return undefined;
275
+ const rewrites = [];
276
+ const below = (url, service) => {
277
+ rewrites.push({ source: url, destination: { service } }, { source: `${url}/(.*)`, destination: { service } });
278
+ };
279
+ const everything = (service) => rewrites.push({ source: '/(.*)', destination: { service } });
280
+ if (functions)
281
+ below(`/${functions_routes_1.DEFAULT_FUNCTIONS_DIRECTORY}`, functions);
282
+ if (mainSite && mainServer)
283
+ below(functions ? `/${mainServer}` : '/api', mainServer);
284
+ for (const name of [...otherServers, ...otherSites])
285
+ below(`/${name}`, name);
286
+ for (const name of otherSites)
287
+ mountBelow(services[name], name);
288
+ // A site that is the whole root must not hand out the source of the services inside it.
289
+ if (mainSite && services[mainSite].root === '.' && services[mainSite].outputDirectory === '.') {
290
+ for (const [name, { root }] of Object.entries(services)) {
291
+ if (root !== '.' && !rewrites.some((rule) => rule.source === `/${root}`))
292
+ below(`/${root}`, name);
293
+ }
294
+ }
295
+ if (serverFiles)
296
+ everything(serverFiles);
297
+ if (mainSite !== null && mainSite !== void 0 ? mainSite : mainServer)
298
+ everything(mainSite !== null && mainSite !== void 0 ? mainSite : mainServer);
299
+ return { services, rewrites };
300
+ }
301
+ /**
302
+ * The service in `root` (relative to the reader's directory), detected; `framework` gives that
303
+ * preset's settings instead of looking for one.
304
+ */
305
+ async function detectApp(reader, root = '.', framework) {
306
+ const at = (file) => node_path_1.default.posix.join(root, file);
307
+ const exists = (file) => reader.exists(at(file));
308
+ const read = (file) => reader.read(at(file));
309
+ const pkgText = framework && PYTHON_FRAMEWORKS.has(framework) ? undefined : await read('package.json');
310
+ if (pkgText !== undefined) {
311
+ const detected = await detectNode(pkgText, exists, await detectPackageManager(reader, root), framework);
312
+ if (detected)
313
+ return detected;
314
+ }
315
+ if (framework === undefined || PYTHON_FRAMEWORKS.has(framework)) {
316
+ const detected = await detectPython(exists, read, framework);
317
+ if (detected)
318
+ return detected;
319
+ }
320
+ if (framework)
321
+ return undefined;
322
+ // Static files: Vercel's "Other" serves public/ when there is one, else the root.
323
+ if (await exists('public/index.html'))
324
+ return { framework: null, settings: { outputDirectory: 'public' } };
325
+ if (await exists('index.html'))
326
+ return { framework: null, settings: { outputDirectory: '.' } };
327
+ return undefined;
328
+ }
329
+ /** The package manager by the lockfile in `root`, else the one at the top of the project (a monorepo's). */
330
+ async function detectPackageManager(reader, root) {
331
+ for (const dir of new Set([root, '.'])) {
332
+ const has = (file) => reader.exists(node_path_1.default.posix.join(dir, file));
333
+ if (await has('pnpm-lock.yaml'))
334
+ return packageManager('pnpm');
335
+ if (await has('yarn.lock'))
336
+ return packageManager('yarn');
337
+ if ((await has('bun.lock')) || (await has('bun.lockb')))
338
+ return packageManager('bun');
339
+ if (await has('package-lock.json'))
340
+ break;
341
+ }
342
+ return packageManager('npm');
343
+ }
344
+ async function detectNode(pkgText, exists, manager, forced) {
345
+ var _a, _b, _c;
346
+ const pkg = parsePackage(pkgText);
347
+ const dependencies = { ...pkg.dependencies, ...pkg.devDependencies };
348
+ const scripts = Object.fromEntries(Object.entries((_a = pkg.scripts) !== null && _a !== void 0 ? _a : {}).filter((entry) => typeof entry[1] === 'string'));
349
+ const framework = forced === undefined ? ((_c = (_b = NODE_FRAMEWORKS.find((entry) => entry.dependency in dependencies)) === null || _b === void 0 ? void 0 : _b.framework) !== null && _c !== void 0 ? _c : null) : forced;
350
+ const install = manager.install;
351
+ switch (framework) {
352
+ case 'nextjs':
353
+ return preset(framework, install, 'next dev -H 0.0.0.0 -p $PORT', 'next build', { startCommand: 'next start -H 0.0.0.0 -p $PORT' });
354
+ case 'nuxtjs':
355
+ return preset(framework, install, `nuxt dev ${LISTEN}`, 'nuxt build', { startCommand: 'node .output/server/index.mjs' });
356
+ case 'sveltekit':
357
+ return preset(framework, install, `vite dev ${LISTEN} --strictPort`, 'vite build', {
358
+ startCommand: '@sveltejs/adapter-node' in dependencies ? 'node build' : `vite preview ${LISTEN} --strictPort`,
359
+ });
360
+ case 'astro':
361
+ return preset(framework, install, `astro dev ${LISTEN}`, 'astro build', '@astrojs/node' in dependencies ? { startCommand: 'node dist/server/entry.mjs' } : { outputDirectory: 'dist' });
362
+ case 'create-react-app':
363
+ return preset(framework, install, 'BROWSER=none HOST=0.0.0.0 react-scripts start', 'react-scripts build', {
364
+ outputDirectory: 'build',
365
+ rewrites: SPA_FALLBACK,
366
+ });
367
+ case 'vite':
368
+ return preset(framework, install, `vite ${LISTEN} --strictPort`, 'vite build', { outputDirectory: 'dist', rewrites: SPA_FALLBACK });
369
+ default:
370
+ break;
371
+ }
372
+ const build = scripts.build ? manager.run('build') : undefined;
373
+ if (framework && SERVER_FRAMEWORKS.has(framework)) {
374
+ const entry = await nodeEntry(pkg, exists);
375
+ const start = scripts.start ? manager.run('start') : entry && `node ${entry}`;
376
+ if (start)
377
+ return preset(framework, install, scripts.dev ? manager.run('dev') : start, build, { startCommand: start });
378
+ }
379
+ // Other: the package's own scripts, else its static files once built.
380
+ const dev = scripts.dev ? manager.run('dev') : scripts.start ? manager.run('start') : undefined;
381
+ if (scripts.start)
382
+ return preset(null, install, dev, build, { startCommand: manager.run('start') });
383
+ const outputDirectory = (await exists('public')) ? 'public' : '.';
384
+ // A package that only holds a script's dependencies is no app unless it has a page to serve.
385
+ if (!dev && !build && !(await exists(`${outputDirectory}/index.html`)))
386
+ return undefined;
387
+ return preset(null, install, dev, build, { outputDirectory });
388
+ }
389
+ function preset(framework, installCommand, devCommand, buildCommand, output) {
390
+ return { framework, settings: { installCommand, devCommand, buildCommand, ...output } };
391
+ }
392
+ async function nodeEntry(pkg, exists) {
393
+ if (typeof pkg.main === 'string' && (await exists(pkg.main)))
394
+ return pkg.main;
395
+ for (const dir of ['.', 'src']) {
396
+ for (const name of NODE_ENTRIES) {
397
+ const file = node_path_1.default.posix.join(dir, name);
398
+ if (await exists(file))
399
+ return file;
400
+ }
401
+ }
402
+ return undefined;
403
+ }
404
+ async function detectPython(exists, read, forced) {
405
+ var _a, _b, _c;
406
+ let entry;
407
+ let source = '';
408
+ for (const dir of PYTHON_ENTRY_DIRS) {
409
+ for (const name of PYTHON_ENTRIES) {
410
+ const file = node_path_1.default.posix.join(dir, name);
411
+ const text = await read(file);
412
+ if (text === undefined)
413
+ continue;
414
+ entry = file;
415
+ source = text;
416
+ break;
417
+ }
418
+ if (entry)
419
+ break;
420
+ }
421
+ if (!entry)
422
+ return undefined;
423
+ const requirements = (_a = (await read('requirements.txt'))) !== null && _a !== void 0 ? _a : (await read('pyproject.toml'));
424
+ const declares = (name) => new RegExp(`(^|[\\s"'\\[])${name}\\b`, 'im').test(requirements !== null && requirements !== void 0 ? requirements : '') || new RegExp(`^\\s*(from|import)\\s+${name}\\b`, 'm').test(source);
425
+ const framework = forced !== null && forced !== void 0 ? forced : (declares('fastapi') ? 'fastapi' : declares('flask') ? 'flask' : /\bPORT\b/.test(source) ? 'python' : undefined);
426
+ // A script that serves nothing (an analysis, a data build) is not an app.
427
+ if (!framework)
428
+ return undefined;
429
+ const install = (await exists('requirements.txt'))
430
+ ? 'python3 -m venv .venv && .venv/bin/pip install -r requirements.txt'
431
+ : (await exists('pyproject.toml'))
432
+ ? 'python3 -m venv .venv && .venv/bin/pip install .'
433
+ : undefined;
434
+ const settings = (dev, start) => ({
435
+ framework,
436
+ settings: { ...(install ? { installCommand: install } : {}), devCommand: dev, startCommand: start },
437
+ });
438
+ if (framework === 'fastapi') {
439
+ const module = node_path_1.default.posix.basename(entry, '.py');
440
+ const app = (_c = (_b = /^(\w+)\s*=\s*FastAPI\(/m.exec(source)) === null || _b === void 0 ? void 0 : _b[1]) !== null && _c !== void 0 ? _c : 'app';
441
+ const appDir = node_path_1.default.posix.dirname(entry);
442
+ const target = `${appDir === '.' ? '' : `--app-dir ${appDir} `}${module}:${app} ${LISTEN}`;
443
+ return settings(`uvicorn ${target} --reload`, `uvicorn ${target}`);
444
+ }
445
+ if (framework === 'flask')
446
+ return settings(`flask --app ${entry} run ${LISTEN} --debug`, `flask --app ${entry} run ${LISTEN}`);
447
+ return settings(`python3 ${entry}`, `python3 ${entry}`);
448
+ }
449
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/app/detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=detect.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.test.d.ts","sourceRoot":"","sources":["../../src/app/detect.test.ts"],"names":[],"mappings":""}