@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
@@ -4,13 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createSessionTools = createSessionTools;
7
- const node_fs_1 = require("node:fs");
8
7
  const node_path_1 = __importDefault(require("node:path"));
9
8
  const ai_1 = require("ai");
10
9
  const zod_1 = require("zod");
11
10
  const mcp_tools_1 = require("../mcp/mcp-tools");
12
11
  const exec_tools_1 = require("../tools/exec-tools");
13
12
  const fs_tools_1 = require("../tools/fs-tools");
13
+ const workload_1 = require("../runtime/workload");
14
14
  const MAX_PUBLISHED_FILE_BYTES = 512 * 1024;
15
15
  /** Common tools for both profiles. Callbacks are bound to the turn that owns these tools. */
16
16
  function createSessionTools(context, mcpConnections) {
@@ -27,7 +27,8 @@ function createSessionTools(context, mcpConnections) {
27
27
  key: zod_1.z.string().min(1).max(60),
28
28
  label: zod_1.z.string().min(1).max(120),
29
29
  status: zod_1.z.enum(['pending', 'active', 'done', 'failed']),
30
- detail: zod_1.z.string().max(200).optional(),
30
+ // Clipped, never rejected: a validation failure costs the agent a whole step.
31
+ detail: zod_1.z.string().optional().transform((detail) => (detail && detail.length > 200 ? `${detail.slice(0, 199)}…` : detail)),
31
32
  }))
32
33
  .min(1)
33
34
  .max(20),
@@ -69,12 +70,12 @@ function createSessionTools(context, mcpConnections) {
69
70
  const skipped = [];
70
71
  for (const relative of paths) {
71
72
  const target = node_path_1.default.resolve(workspaceDir, relative);
72
- if (!target.startsWith(node_path_1.default.resolve(workspaceDir) + node_path_1.default.sep)) {
73
+ if (!(0, workload_1.isInsideDir)(node_path_1.default.resolve(workspaceDir), target)) {
73
74
  skipped.push({ path: relative, reason: 'outside the workspace' });
74
75
  continue;
75
76
  }
76
77
  try {
77
- const buffer = await node_fs_1.promises.readFile(target);
78
+ const buffer = await (0, workload_1.readInside)(workspaceDir, target);
78
79
  if (buffer.byteLength > MAX_PUBLISHED_FILE_BYTES) {
79
80
  skipped.push({ path: relative, reason: `larger than ${MAX_PUBLISHED_FILE_BYTES} bytes` });
80
81
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/session/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/session/tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/task/loop.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAG3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAsBrD,wBAAsB,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAyC/G"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/task/loop.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAG3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAoBrD,wBAAsB,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA2C/G"}
package/dist/task/loop.js CHANGED
@@ -5,6 +5,8 @@ exports.runAgentLoop = runAgentLoop;
5
5
  // with AGENT_TASK. Built directly on the Vercel AI SDK's generateText/stepCountIs (the same
6
6
  // primitives ai-agent-node uses underneath its ChatProcessor), not a port of ChatProcessor:
7
7
  // that class needs MongoDB repositories and Socket.IO broadcast, none of which exist in a guest.
8
+ const node_fs_1 = require("node:fs");
9
+ const workload_1 = require("../runtime/workload");
8
10
  const ai_1 = require("ai");
9
11
  const attribution_1 = require("../models/attribution");
10
12
  const mcp_tools_1 = require("../mcp/mcp-tools");
@@ -16,10 +18,8 @@ const SYSTEM_PROMPT = `You are a coding agent running inside an isolated session
16
18
  tools to read/write files and run shell commands in the workspace, plus (if any MCP servers are
17
19
  configured) search_tools/get_tool_details/call_mcp_tool to use them.
18
20
 
19
- If the user's task involves a web app or API, start a dev server bound to $PORT (already set in
20
- your environment) — the live preview link the user sees is a direct proxy to that port, so
21
- starting it is what makes your changes visible. Background long-lived processes (dev servers)
22
- so a single run_command call returns promptly.
21
+ If the user's task involves a web app or API, start it: a running app is what makes your
22
+ changes visible. ${exec_tools_1.LIVE_PREVIEW_GUIDANCE}
23
23
 
24
24
  Work efficiently: make the changes, verify with a command when it's cheap to do so (e.g. a
25
25
  build or lint step), and finish with a concise summary of what you did.`;
@@ -29,6 +29,8 @@ function isoNow() {
29
29
  async function runAgentLoop(config, reporter) {
30
30
  if (!config.task)
31
31
  throw new Error('AGENT_TASK is required in task mode');
32
+ await node_fs_1.promises.mkdir(config.workspaceDir, { recursive: true });
33
+ await (0, workload_1.handOverToWorkload)(config.workspaceDir);
32
34
  const tools = {
33
35
  ...(0, fs_tools_1.createFsTools)(config.workspaceDir),
34
36
  ...(0, exec_tools_1.createExecTools)(config.workspaceDir),
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/task/loop.ts"],"names":[],"mappings":";;AA+BA,oCAyCC;AAxED,2FAA2F;AAC3F,4FAA4F;AAC5F,4FAA4F;AAC5F,iGAAiG;AACjG,2BAAyD;AACzD,uDAAuD;AAEvD,gDAAiD;AACjD,2DAA8D;AAE9D,oDAAqD;AACrD,gDAAiD;AAEjD,MAAM,SAAS,GAAG,EAAE,CAAA;AAEpB,MAAM,aAAa,GAAG;;;;;;;;;;wEAUkD,CAAA;AAExE,SAAS,MAAM;IACb,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;AACjC,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,MAA0B,EAAE,QAAkB;IAC/E,IAAI,CAAC,MAAM,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxE,MAAM,KAAK,GAAyB;QAClC,GAAG,IAAA,wBAAa,EAAC,MAAM,CAAC,YAAY,CAAC;QACrC,GAAG,IAAA,4BAAe,EAAC,MAAM,CAAC,YAAY,CAAC;QACvC,GAAG,IAAA,0BAAc,EAAC,MAAM,CAAC,cAAc,CAAC;KACzC,CAAA;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,iBAAY,EAAC;YAChC,KAAK,EAAE,IAAA,oCAAoB,EAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,6BAAe,CAAC,YAAY,CAAC;YACxF,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,KAAK;YACL,QAAQ,EAAE,IAAA,gBAAW,EAAC,SAAS,CAAC;YAChC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;oBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;oBAClC,MAAM,QAAQ,CAAC,IAAI,CAAC;wBAClB,IAAI,EAAE,WAAW;wBACjB,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,MAAM,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM;wBACtB,SAAS,EAAE,MAAM,EAAE;qBACpB,CAAC,CAAA;gBACJ,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACd,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;gBAC7G,CAAC;YACH,CAAC;SACF,CAAC,CAAA;QAEF,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;QAC7G,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;QACjG,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/task/loop.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ /** How to run an app so the user can open it; shared by every coding prompt and these tools. */
2
+ export declare const LIVE_PREVIEW_GUIDANCE: string;
1
3
  export declare function createExecTools(workspaceDir: string): {
2
4
  run_command: import("ai").Tool<{
3
5
  description: string;
@@ -5,5 +7,15 @@ export declare function createExecTools(workspaceDir: string): {
5
7
  cwd?: string | undefined;
6
8
  timeoutMs?: number | undefined;
7
9
  }, unknown>;
10
+ run_app: import("ai").Tool<Record<string, never>, {
11
+ error: string;
12
+ } | {
13
+ logs?: Record<string, string> | undefined;
14
+ phase: import("..").AgentAppPhase;
15
+ error?: string;
16
+ processes: import("..").AgentAppProcess[];
17
+ framework?: string | null;
18
+ source?: "detected" | "builder.json";
19
+ }>;
8
20
  };
9
21
  //# sourceMappingURL=exec-tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exec-tools.d.ts","sourceRoot":"","sources":["../../src/tools/exec-tools.ts"],"names":[],"mappings":"AAwBA,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM;;;;;;;EAgDnD"}
1
+ {"version":3,"file":"exec-tools.d.ts","sourceRoot":"","sources":["../../src/tools/exec-tools.ts"],"names":[],"mappings":"AAcA,gGAAgG;AAChG,eAAO,MAAM,qBAAqB,QACulH,CAAA;AAkBznH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM;;;;;;;;;;;;;;;;;EA8EnD"}
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LIVE_PREVIEW_GUIDANCE = void 0;
6
7
  exports.createExecTools = createExecTools;
7
8
  // Local equivalent of app-vm.tools.ts's runAppCommandTool — a direct child_process.exec
8
9
  // against the workspace, no RPC/session bridge (the agent already runs inside the VM).
@@ -11,7 +12,16 @@ const path_1 = __importDefault(require("path"));
11
12
  const ai_1 = require("ai");
12
13
  const zod_1 = require("zod");
13
14
  const tool_call_repair_1 = require("../tool-call-repair");
15
+ const protocol_1 = require("../transport/protocol");
16
+ const app_host_1 = require("../app/app-host");
17
+ const env_1 = require("../app/env");
18
+ const workload_1 = require("../runtime/workload");
19
+ const runner_1 = require("../app/runner");
14
20
  const MAX_OUTPUT_BYTES = 1024 * 1024;
21
+ /** How to run an app so the user can open it; shared by every coding prompt and these tools. */
22
+ exports.LIVE_PREVIEW_GUIDANCE = `To give the user a running web app or API, build an ordinary project that the platform detects the way Vercel does. Put every service in its own folder under packages/, even when there is only one, so another can be added beside it later: packages/web for the site or frontend (even a single page: packages/web/index.html), packages/api for the server, packages/<name> for anything else. Any backend, even a single endpoint, is its own service in packages/api: a small server with a start script, never code inside a frontend's folder. Each holds its own source, dependencies and lockfile and installs on its own, with no app or package.json at the workspace root. A script, document or data file that nothing serves needs no package. In a workspace that already has its own layout, keep to that layout. A service is a package.json with a framework (Next.js, Vite, Astro, SvelteKit, Nuxt, Create React App, Express, Fastify, Hono, Koa, NestJS) or with dev/build/start scripts, a Python app (main.py or app.py with FastAPI or Flask, and a requirements.txt), or static files with an index.html (in its folder or its public/). The web service answers at /, the api service at /api (give its routes that prefix, and call them from the frontend as /api/...), and any other at /<name>. Static files and a Vite app work below that name as they are, with relative links; another server gets the whole path, so its routes include /<name>, and any other framework needs its base path set (Next.js's basePath). Only when the user asks for serverless functions, a static site or Vite app can have them in an api/ folder of its own with no server, as on Vercel: packages/web/api/hello.js answers /api/hello, packages/web/api/users/[id].js answers /api/users/:id, each exporting \`default function handler(req, res)\` (with req.query, req.body, res.status, res.json) or a named \`GET\`/\`POST\` taking a Request and returning a Response; files and folders starting with _ are helpers. A server listens on 0.0.0.0 and the port in $PORT. Read configuration and secrets from environment variables and never write their values into a file: the user sets them on the project, a deployment gets them when it is built and when it runs, and this session's VM does not have them, so say which ones the app needs and give it a clear behaviour when one is missing. Building belongs in a build script and migrations in the server's own startup, never in a prestart script or a start script: a deployment builds once, then runs what was built with its start script alone. The platform installs and starts it after your turn and on every boot of the VM, serves it at the session's own URL (opening that URL wakes a stopped VM), and writes ${protocol_1.APP_CONFIG_FILE} with what it detected. That file then alone decides what runs. Never create or edit it unless the user asks to change how the app runs or the app lives where it is not detected; it has \`services\` (each with \`root\`, \`framework\`, \`installCommand\`, \`devCommand\`, \`buildCommand\`, \`startCommand\`, \`outputDirectory\`, or \`functions: { directory, path }\`), \`rewrites\` that send a path to a service (\`{ "source": "/api/(.*)", "destination": { "service": "api" } }\`, first match first) and \`daemons\`. Never start the app yourself in the background; call run_app instead to start it now, to restart it after installing packages, or to see why it fails. For a one-off process that is not the app, run it in the background with its output in a file, e.g. \`node worker.js > worker.log 2>&1 &\` (a bare \`nohup … &\` keeps the call open until it times out); any port works except 8080, 2222 and 8022, and every listening port gets a live preview URL of its own.`;
23
+ /** How long run_app waits for every service to listen or fail. */
24
+ const RUN_APP_WAIT_MS = 60000;
15
25
  /** Output kept in the conversation per stream; every later step re-sends it, so the rest belongs in a file. */
16
26
  const MAX_INLINE_OUTPUT_CHARS = 8000;
17
27
  const DEFAULT_TIMEOUT_MS = 60000;
@@ -28,7 +38,7 @@ function truncate(text) {
28
38
  }
29
39
  function createExecTools(workspaceDir) {
30
40
  const runCommandTool = (0, ai_1.tool)({
31
- description: "Run a shell command inside the session's workspace (npm install, build steps, starting a dev server). Returns exit code and captured output. For a long-lived process (a dev server), background it (e.g. `nohup npm run dev &`) so this call returns promptly — the live preview picks it up once it's listening on $PORT.",
41
+ description: `Run a shell command inside the session's workspace (npm install, build steps, starting a dev server). Returns exit code and captured output. Commands run as an unprivileged user: install dependencies inside the project (npm install, a Python venv), since system packages and global installs aren't available. ${exports.LIVE_PREVIEW_GUIDANCE}`,
32
42
  inputSchema: zod_1.z.object({
33
43
  // The chat shows this line instead of the command: users read what is being done, not shell syntax.
34
44
  description: zod_1.z
@@ -45,7 +55,17 @@ function createExecTools(workspaceDir) {
45
55
  const startedAt = Date.now();
46
56
  return new Promise((resolve) => {
47
57
  var _a;
48
- const child = (0, child_process_1.exec)(input.command, { cwd, timeout: (_a = input.timeoutMs) !== null && _a !== void 0 ? _a : DEFAULT_TIMEOUT_MS, maxBuffer: MAX_OUTPUT_BYTES * 2 }, (error, stdout, stderr) => {
58
+ const child = (0, child_process_1.exec)(input.command, {
59
+ cwd,
60
+ // As the unprivileged user, with what the session's app gets: none of the agent's own
61
+ // settings, so no model keys, FilingRamp credentials or VM token in a command the model wrote.
62
+ // $PORT for commands: the guest's own $PORT (8080) is the hook and preview server
63
+ // (runtime/preview-proxy.ts), so an app started on it would fail to bind.
64
+ ...(0, workload_1.workloadIdentity)(),
65
+ env: (0, workload_1.workloadEnv)({ ...(0, env_1.sessionAppEnv)(process.env), PORT: String(protocol_1.DEFAULT_APP_PORT) }),
66
+ timeout: (_a = input.timeoutMs) !== null && _a !== void 0 ? _a : DEFAULT_TIMEOUT_MS,
67
+ maxBuffer: MAX_OUTPUT_BYTES * 2,
68
+ }, (error, stdout, stderr) => {
49
69
  const durationMs = Date.now() - startedAt;
50
70
  const timedOut = Boolean((error === null || error === void 0 ? void 0 : error.killed) && error.signal === 'SIGTERM');
51
71
  const out = truncate(stdout);
@@ -68,6 +88,29 @@ function createExecTools(workspaceDir) {
68
88
  });
69
89
  },
70
90
  });
71
- return { run_command: runCommandTool };
91
+ const runAppTool = (0, ai_1.tool)({
92
+ description: `Start (or restart) the workspace's app as the platform detects it, with any overrides in ${protocol_1.APP_CONFIG_FILE}: installs its dependencies, then runs its dev server (a static site is served as it is). Waits up to a minute for it to listen or fail, and returns the detected framework, its status and the end of the log of anything that failed. ${exports.LIVE_PREVIEW_GUIDANCE}`,
93
+ inputSchema: zod_1.z.object({}),
94
+ execute: async () => {
95
+ var _a, _b;
96
+ const app = (0, app_host_1.appHostFor)(workspaceDir, () => ({ dir: workspaceDir, mode: 'dev', env: (0, env_1.sessionAppEnv)(process.env), schemaUrl: process.env[protocol_1.AGENT_ENV.APP_SCHEMA_URL] }));
97
+ const noApp = {
98
+ error: 'No app found in the workspace: add a package.json with a framework or a dev/start script, a Python app (main.py or app.py with FastAPI or Flask), or an index.html.',
99
+ };
100
+ if (!(await app.start()))
101
+ return noApp;
102
+ const status = await app.settled(RUN_APP_WAIT_MS);
103
+ if (!status)
104
+ return noApp;
105
+ const failedLogs = status.processes.filter((process) => process.state === 'crashed' && process.log).map((process) => process.log);
106
+ // An install or build failure names its log in the error.
107
+ const stepLog = (_b = /see (\S+\.log)$/.exec((_a = status.error) !== null && _a !== void 0 ? _a : '')) === null || _b === void 0 ? void 0 : _b[1];
108
+ const logs = {};
109
+ for (const log of stepLog ? [stepLog, ...failedLogs] : failedLogs)
110
+ logs[log] = await (0, runner_1.logTail)(workspaceDir, log);
111
+ return { ...status, ...(Object.keys(logs).length ? { logs } : {}) };
112
+ },
113
+ });
114
+ return { run_command: runCommandTool, run_app: runAppTool };
72
115
  }
73
116
  //# sourceMappingURL=exec-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exec-tools.js","sourceRoot":"","sources":["../../src/tools/exec-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exec-tools.js","sourceRoot":"","sources":["../../src/tools/exec-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=exec-tools.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec-tools.test.d.ts","sourceRoot":"","sources":["../../src/tools/exec-tools.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
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_fs_1 = require("node:fs");
8
+ const node_os_1 = __importDefault(require("node:os"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const node_test_1 = require("node:test");
11
+ const protocol_1 = require("../transport/protocol");
12
+ const exec_tools_1 = require("./exec-tools");
13
+ const AGENT_SETTINGS = [...Object.values(protocol_1.AGENT_ENV), 'AGENT_SSH_PUBLIC_KEYS_B64'];
14
+ (0, node_test_1.describe)('a command the model runs', () => {
15
+ const saved = { ...process.env };
16
+ let dir;
17
+ (0, node_test_1.beforeEach)(async () => {
18
+ dir = await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'exec-tools-'));
19
+ for (const name of AGENT_SETTINGS)
20
+ process.env[name] = `secret-of-${name}`;
21
+ process.env.MY_SETTING = 'kept';
22
+ });
23
+ (0, node_test_1.afterEach)(async () => {
24
+ process.env = { ...saved };
25
+ await node_fs_1.promises.rm(dir, { recursive: true, force: true });
26
+ });
27
+ const environment = async () => {
28
+ const run = (0, exec_tools_1.createExecTools)(dir).run_command.execute;
29
+ strict_1.default.ok(run);
30
+ const result = (await run({ description: 'List the environment', command: 'env' }, { toolCallId: 't', messages: [] }));
31
+ return result.stdout;
32
+ };
33
+ (0, node_test_1.it)('sees no model key, credential or VM token, though the runtime keeps them', async () => {
34
+ const output = await environment();
35
+ const names = output.split('\n').map((line) => line.split('=')[0]);
36
+ for (const name of AGENT_SETTINGS)
37
+ strict_1.default.ok(!names.includes(name), `${name} reached the command`);
38
+ strict_1.default.doesNotMatch(output, /secret-of-/);
39
+ strict_1.default.equal(process.env[protocol_1.AGENT_ENV.ACCESS_TOKEN], `secret-of-${protocol_1.AGENT_ENV.ACCESS_TOKEN}`);
40
+ });
41
+ (0, node_test_1.it)('still has what any command needs, and the port an app should bind', async () => {
42
+ const lines = (await environment()).split('\n');
43
+ strict_1.default.ok(lines.some((line) => line.startsWith('PATH=')));
44
+ strict_1.default.ok(lines.includes('MY_SETTING=kept'));
45
+ strict_1.default.ok(lines.includes(`PORT=${protocol_1.DEFAULT_APP_PORT}`));
46
+ });
47
+ });
48
+ //# sourceMappingURL=exec-tools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec-tools.test.js","sourceRoot":"","sources":["../../src/tools/exec-tools.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fs-tools.d.ts","sourceRoot":"","sources":["../../src/tools/fs-tools.ts"],"names":[],"mappings":"AAmBA,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM;;;;;;;;;kBAiBf,MAAM;mBAAS,MAAM;;;;;;;;;;;;;;;;;;;EAmDvD"}
1
+ {"version":3,"file":"fs-tools.d.ts","sourceRoot":"","sources":["../../src/tools/fs-tools.ts"],"names":[],"mappings":"AAoBA,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM;;;;;;;;;kBAiBf,MAAM;mBAAS,MAAM;;;;;;;;;;;;;;;;;;;EAkDvD"}
@@ -11,12 +11,13 @@ const fs_1 = require("fs");
11
11
  const path_1 = __importDefault(require("path"));
12
12
  const ai_1 = require("ai");
13
13
  const zod_1 = require("zod");
14
+ const workload_1 = require("../runtime/workload");
14
15
  /** Resolves a workspace-relative path, rejecting anything that would escape workspaceDir (../, absolute paths). */
15
16
  function resolveWorkspacePath(workspaceDir, relativePath) {
16
17
  const normalized = path_1.default.normalize(relativePath).replace(/^(\.\.(\/|\\|$))+/, '');
17
18
  const resolved = path_1.default.resolve(workspaceDir, normalized);
18
19
  const workspaceRoot = path_1.default.resolve(workspaceDir);
19
- if (resolved !== workspaceRoot && !resolved.startsWith(`${workspaceRoot}${path_1.default.sep}`)) {
20
+ if (!(0, workload_1.isInsideDir)(workspaceRoot, resolved)) {
20
21
  throw new Error(`path "${relativePath}" escapes the workspace directory`);
21
22
  }
22
23
  return resolved;
@@ -38,9 +39,8 @@ function createFsTools(workspaceDir) {
38
39
  const written = [];
39
40
  for (const file of input.files) {
40
41
  const target = resolveWorkspacePath(workspaceDir, file.path);
41
- await fs_1.promises.mkdir(path_1.default.dirname(target), { recursive: true });
42
42
  const buffer = Buffer.from(file.content, file.encoding === 'base64' ? 'base64' : 'utf8');
43
- await fs_1.promises.writeFile(target, buffer);
43
+ await (0, workload_1.writeWorkloadFile)(target, buffer);
44
44
  written.push({ path: file.path, bytes: buffer.byteLength });
45
45
  }
46
46
  return { written };
@@ -54,7 +54,7 @@ function createFsTools(workspaceDir) {
54
54
  }),
55
55
  execute: async (input) => {
56
56
  const target = resolveWorkspacePath(workspaceDir, input.path);
57
- const buffer = await fs_1.promises.readFile(target);
57
+ const buffer = await (0, workload_1.readInside)(workspaceDir, target);
58
58
  return { content: buffer.toString(input.encoding === 'base64' ? 'base64' : 'utf8'), bytes: buffer.byteLength };
59
59
  },
60
60
  });
@@ -68,7 +68,7 @@ function createFsTools(workspaceDir) {
68
68
  const target = resolveWorkspacePath(workspaceDir, (_a = input.path) !== null && _a !== void 0 ? _a : '.');
69
69
  let entries;
70
70
  try {
71
- entries = await fs_1.promises.readdir(target, { withFileTypes: true });
71
+ entries = await fs_1.promises.readdir(await (0, workload_1.realDirInside)(workspaceDir, target), { withFileTypes: true });
72
72
  }
73
73
  catch (error) {
74
74
  if (error.code === 'ENOENT')
@@ -1 +1 @@
1
- {"version":3,"file":"fs-tools.js","sourceRoot":"","sources":["../../src/tools/fs-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs-tools.js","sourceRoot":"","sources":["../../src/tools/fs-tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/transport/link.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,EAAE,IAAI,QAAQ,EAAe,MAAM,kBAAkB,CAAA;AAE9D,OAAO,EAGL,KAAK,mBAAmB,EAExB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAA;AAMnB,MAAM,MAAM,aAAa,GAAG,iBAAiB,SAAS,MAAM,CAAC,GACzD,CAAC,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC/D,IAAI,CAAC,CAAC,EAAE,WAAW,GAAG,KAAK,GAAG,WAAW,CAAC,GAC1C,KAAK,GACL,KAAK,CAAA;AAET,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAEnF,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAA;IAChC,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAA;IACxC,2FAA2F;IAC3F,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAMD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,GAAE,OAAO,QAAmB,GAClC,WAAW,CA0Fb"}
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/transport/link.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,EAAE,IAAI,QAAQ,EAAe,MAAM,kBAAkB,CAAA;AAE9D,OAAO,EAGL,KAAK,mBAAmB,EAExB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAA;AAMnB,MAAM,MAAM,aAAa,GAAG,iBAAiB,SAAS,MAAM,CAAC,GACzD,CAAC,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC/D,IAAI,CAAC,CAAC,EAAE,WAAW,GAAG,KAAK,GAAG,WAAW,CAAC,GAC1C,KAAK,GACL,KAAK,CAAA;AAET,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAEnF,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAA;IAChC,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAA;IACxC,2FAA2F;IAC3F,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAMD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,GAAE,OAAO,QAAmB,GAClC,WAAW,CAkGb"}
@@ -61,11 +61,17 @@ function createSessionLink(sessionId, socketUrl, socketToken, connect = socket_i
61
61
  // `ready` tells the platform this guest is live. It is sent once at startup, but the socket may
62
62
  // be down then (ready() also resolves on a connect error) or drop later and reconnect — a
63
63
  // fresh connection must re-announce it, or the platform keeps waiting. A new seq each time, so
64
- // the api's per-event de-duplication doesn't swallow the re-announcement.
64
+ // the api's per-event de-duplication doesn't swallow the re-announcement. The latest `ports`
65
+ // is re-announced after it the same way: the platform drops a session's ports with its VM state.
66
+ // So is the latest `app` status, which routes the session URL.
65
67
  let readyEvent;
68
+ let portsEvent;
69
+ let appEvent;
66
70
  socket.on('connect', () => {
67
- if (readyEvent)
68
- socket.emit(protocol_1.AGENT_SESSION_EVENT, stamp(sessionId, instanceId, ++seq, readyEvent));
71
+ for (const event of [readyEvent, portsEvent, appEvent]) {
72
+ if (event)
73
+ socket.emit(protocol_1.AGENT_SESSION_EVENT, stamp(sessionId, instanceId, ++seq, event));
74
+ }
69
75
  });
70
76
  socket.on('connect_error', (error) => console.error('[link] connect error:', error.message));
71
77
  socket.on('disconnect', (reason) => console.warn('[link] disconnected:', reason));
@@ -85,8 +91,13 @@ function createSessionLink(sessionId, socketUrl, socketToken, connect = socket_i
85
91
  });
86
92
  return {
87
93
  send(event) {
88
- if (event.type === 'ready') {
89
- readyEvent = event;
94
+ if (event.type === 'ready' || event.type === 'ports' || event.type === 'app') {
95
+ if (event.type === 'ready')
96
+ readyEvent = event;
97
+ else if (event.type === 'ports')
98
+ portsEvent = event;
99
+ else
100
+ appEvent = event;
90
101
  if (!socket.connected)
91
102
  return; // The next 'connect' announces it.
92
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/transport/link.ts"],"names":[],"mappings":";;AAuCA,8CA+FC;AAtID,2FAA2F;AAC3F,qFAAqF;AACrF,2FAA2F;AAC3F,uFAAuF;AACvF,2FAA2F;AAC3F,uDAA8D;AAC9D,mCAAmC;AACnC,yCAMmB;AAEnB,4FAA4F;AAC5F,yDAAyD;AACzD,MAAM,cAAc,GAAG,GAAG,CAAA;AAkB1B,SAAS,KAAK,CAAC,SAAiB,EAAE,UAAkB,EAAE,GAAW,EAAE,KAAoB;IACrF,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAuB,CAAA;AAC3G,CAAC;AAED,SAAgB,iBAAiB,CAC/B,SAAiB,EACjB,SAA6B,EAC7B,WAA+B,EAC/B,UAA2B,qBAAQ;IAEnC,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,MAAM,UAAU,GAAG,IAAA,mBAAU,GAAE,CAAA;IAC/B,IAAI,OAAmC,CAAA;IAEvC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,IAAI,CAAC,KAAK;gBACR,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;YACnF,CAAC;YACD,SAAS,CAAC,IAAI;gBACZ,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC;YACD,KAAK,CAAC,KAAK,KAAK,CAAC;YACjB,KAAK,CAAC,KAAK,KAAK,CAAC;SAClB,CAAA;IACH,CAAC;IAED,6EAA6E;IAC7E,2FAA2F;IAC3F,sDAAsD;IACtD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAA;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,YAAY,CAAA;IAChE,MAAM,MAAM,GAAW,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;QAC5C,IAAI;QACJ,sFAAsF;QACtF,IAAI,EAAE;YACJ,SAAS;YACT,KAAK,EAAE,WAAW;YAClB,UAAU;SACX;QACD,wFAAwF;QACxF,wFAAwF;QACxF,2FAA2F;QAC3F,UAAU,EAAE,CAAC,WAAW,CAAC;QACzB,YAAY,EAAE,IAAI;QAClB,oBAAoB,EAAE,KAAM;KAC7B,CAAC,CAAA;IACF,MAAM,SAAS,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC9C,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;QACvC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,KAAY,EAAE,EAAE;YAC5C,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;YAC7D,OAAO,EAAE,CAAA;QACX,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,gGAAgG;IAChG,0FAA0F;IAC1F,+FAA+F;IAC/F,0EAA0E;IAC1E,IAAI,UAAqC,CAAA;IACzC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACxB,IAAI,UAAU;YAAE,MAAM,CAAC,IAAI,CAAC,8BAAmB,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAA;IACnG,CAAC,CAAC,CAAA;IACF,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IACnG,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC,CAAA;IAEjF,MAAM,CAAC,EAAE,CAAC,gCAAqB,EAAE,CAAC,OAA4B,EAAE,GAA6C,EAAE,EAAE;QAC/G,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAA;YAC5D,OAAM;QACR,CAAC;QACD,OAAO,CAAC,OAAO,EAAE;aACd,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,OAAO,CAAC,CAAC;aAC9B,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;aAC/B,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAA;YAChD,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,IAAI,CAAC,KAAK;YACR,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,UAAU,GAAG,KAAK,CAAA;gBAClB,IAAI,CAAC,MAAM,CAAC,SAAS;oBAAE,OAAM,CAAC,mCAAmC;YACnE,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,8BAAmB,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;QAC9E,CAAC;QACD,SAAS,CAAC,IAAI;YACZ,OAAO,GAAG,IAAI,CAAA;QAChB,CAAC;QACD,KAAK;YACH,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,KAAK,CAAC,KAAK;YACT,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAA;YACnE,MAAM,CAAC,UAAU,EAAE,CAAA;QACrB,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/transport/link.ts"],"names":[],"mappings":"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"}
@@ -60,4 +60,28 @@ const READY = { type: 'ready', mode: 'session', profile: 'research', restored: f
60
60
  link.send({ type: 'text_delta', messageId: 'm', text: 'hi' });
61
61
  strict_1.default.deepEqual(sent.map((event) => event.type), ['ready', 'text_delta']);
62
62
  });
63
+ (0, node_test_1.it)('re-announces the latest app status after ready, for the session URL', () => {
64
+ const { socket, sent, connect } = fakeSocket();
65
+ const link = (0, link_1.createSessionLink)('session-1', 'https://gw.example/v0/gapi/agent-sessions/ws', 'mp_tok_x', connect);
66
+ link.send(READY);
67
+ link.send({ type: 'app', app: { phase: 'installing', processes: [] } });
68
+ link.send({ type: 'app', app: { phase: 'running', processes: [] } });
69
+ socket.connectNow();
70
+ socket.drop();
71
+ socket.connectNow();
72
+ strict_1.default.deepEqual(sent.map((event) => event.type), ['ready', 'app', 'ready', 'app']);
73
+ strict_1.default.equal(sent[3].app.phase, 'running');
74
+ });
75
+ (0, node_test_1.it)('re-announces only the latest ports after ready on every reconnect', () => {
76
+ const { socket, sent, connect } = fakeSocket();
77
+ const link = (0, link_1.createSessionLink)('session-1', 'https://gw.example/v0/gapi/agent-sessions/ws', 'mp_tok_x', connect);
78
+ link.send(READY);
79
+ link.send({ type: 'ports', ports: [3000] });
80
+ link.send({ type: 'ports', ports: [3000, 5173] });
81
+ socket.connectNow();
82
+ socket.drop();
83
+ socket.connectNow();
84
+ strict_1.default.deepEqual(sent.map((event) => event.type), ['ready', 'ports', 'ready', 'ports']);
85
+ strict_1.default.deepEqual(sent[3].ports, [3000, 5173]);
86
+ });
63
87
  //# sourceMappingURL=link.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"link.test.js","sourceRoot":"","sources":["../../src/transport/link.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"link.test.js","sourceRoot":"","sources":["../../src/transport/link.test.ts"],"names":[],"mappings":"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"}