@cursor/july 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/AGENTS.md +40 -7
  2. package/README.md +33 -24
  3. package/dist/bin/agent-serve.d.ts +3 -1
  4. package/dist/bin/agent-serve.d.ts.map +1 -1
  5. package/dist/bin/agent-serve.js +466 -140
  6. package/dist/channels/github/api.d.ts.map +1 -1
  7. package/dist/channels/github/api.js +31 -14
  8. package/dist/channels/github/cursor-account.d.ts +43 -0
  9. package/dist/channels/github/cursor-account.d.ts.map +1 -0
  10. package/dist/channels/github/cursor-account.js +95 -0
  11. package/dist/channels/github/github-channel.d.ts.map +1 -1
  12. package/dist/channels/github/github-channel.js +46 -9
  13. package/dist/channels/github/index.d.ts +2 -2
  14. package/dist/channels/github/index.js +2 -2
  15. package/dist/channels/github/types.d.ts +17 -0
  16. package/dist/channels/github/types.d.ts.map +1 -1
  17. package/dist/channels/slack/slack-channel.d.ts +8 -2
  18. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  19. package/dist/channels/slack/slack-channel.js +8 -0
  20. package/dist/channels/slack/types.d.ts +24 -3
  21. package/dist/channels/slack/types.d.ts.map +1 -1
  22. package/dist/channels/slack/types.js +15 -1
  23. package/dist/docs/404.html +2 -2
  24. package/dist/docs/ab.html +8 -8
  25. package/dist/docs/assets/{ab.md.COdXkces.js → ab.md.BMCZ6Hd7.js} +3 -3
  26. package/dist/docs/assets/{ab.md.COdXkces.lean.js → ab.md.BMCZ6Hd7.lean.js} +1 -1
  27. package/dist/docs/assets/{app.DqfFEmJd.js → app.BR0RbIdx.js} +1 -1
  28. package/dist/docs/assets/chunks/@localSearchIndexroot.DtIOQzGj.js +1 -0
  29. package/dist/docs/assets/chunks/{VPLocalSearchBox.BaLEdS15.js → VPLocalSearchBox.qjsVTneI.js} +1 -1
  30. package/dist/docs/assets/chunks/{theme.CZRvu_0q.js → theme.2Kg8jIp_.js} +2 -2
  31. package/dist/docs/assets/{deployment.md.Dx1TYNk5.js → deployment.md.DTKwE15Z.js} +3 -3
  32. package/dist/docs/assets/{deployment.md.Dx1TYNk5.lean.js → deployment.md.DTKwE15Z.lean.js} +1 -1
  33. package/dist/docs/assets/{evals.md.DPZ_MAnI.js → evals.md.DAgEc_hL.js} +3 -3
  34. package/dist/docs/assets/{guides_agent-to-agent.md.CrtrsySy.js → guides_agent-to-agent.md.Bpzgq2Pq.js} +1 -1
  35. package/dist/docs/assets/{guides_cloud-runtime.md.CYlNMTNp.js → guides_cloud-runtime.md.gVzabdQL.js} +1 -1
  36. package/dist/docs/assets/{guides_github.md.DwbKhCeS.js → guides_github.md.DOOCpqsW.js} +11 -4
  37. package/dist/docs/assets/{guides_github.md.DwbKhCeS.lean.js → guides_github.md.DOOCpqsW.lean.js} +1 -1
  38. package/dist/docs/assets/{guides_human-in-the-loop.md.Dvuctx7s.js → guides_human-in-the-loop.md.DlUqsp1S.js} +2 -2
  39. package/dist/docs/assets/{guides_slack.md.bv41fHfW.js → guides_slack.md.CCwqHvSV.js} +4 -4
  40. package/dist/docs/assets/{guides_slack.md.bv41fHfW.lean.js → guides_slack.md.CCwqHvSV.lean.js} +1 -1
  41. package/dist/docs/assets/{guides_webhooks.md.hFTik3lf.js → guides_webhooks.md.B1EswtUu.js} +2 -2
  42. package/dist/docs/assets/index.md.m81y7TY7.js +20 -0
  43. package/dist/docs/assets/{index.md.BPKcj5AI.lean.js → index.md.m81y7TY7.lean.js} +1 -1
  44. package/dist/docs/assets/quickstart.md.BU6Iwi_9.js +204 -0
  45. package/dist/docs/assets/quickstart.md.BU6Iwi_9.lean.js +1 -0
  46. package/dist/docs/assets/{reference_agent-config.md.Bpd7HQwf.js → reference_agent-config.md.DrW2JUM8.js} +4 -4
  47. package/dist/docs/assets/{reference_agent-config.md.Bpd7HQwf.lean.js → reference_agent-config.md.DrW2JUM8.lean.js} +1 -1
  48. package/dist/docs/assets/{reference_channels.md.D7JTR03W.js → reference_channels.md.DdmiKgqf.js} +4 -4
  49. package/dist/docs/assets/{reference_channels.md.D7JTR03W.lean.js → reference_channels.md.DdmiKgqf.lean.js} +1 -1
  50. package/dist/docs/assets/{reference_cli.md.DA730zCu.js → reference_cli.md.Bv6pOxcF.js} +11 -6
  51. package/dist/docs/assets/{reference_cli.md.DA730zCu.lean.js → reference_cli.md.Bv6pOxcF.lean.js} +1 -1
  52. package/dist/docs/assets/{reference_connections.md.C3vNH_DE.js → reference_connections.md.zaEYCLHT.js} +1 -1
  53. package/dist/docs/assets/{reference_hooks.md.BCEc3MyM.js → reference_hooks.md.DyLVfE1O.js} +1 -1
  54. package/dist/docs/assets/{reference_hooks.md.BCEc3MyM.lean.js → reference_hooks.md.DyLVfE1O.lean.js} +1 -1
  55. package/dist/docs/assets/{reference_http-api.md.DBAahtdz.js → reference_http-api.md.Dx_nmDG6.js} +1 -1
  56. package/dist/docs/assets/{reference_instructions.md.BC05LEQ8.js → reference_instructions.md.CgoV-YEb.js} +9 -7
  57. package/dist/docs/assets/{reference_instructions.md.BC05LEQ8.lean.js → reference_instructions.md.CgoV-YEb.lean.js} +1 -1
  58. package/dist/docs/assets/{reference_schedules.md.D7qijxLk.js → reference_schedules.md.w_F2mXB6.js} +2 -2
  59. package/dist/docs/assets/{reference_skills.md.VQnlBT3Q.js → reference_skills.md.B_jHN7JL.js} +3 -3
  60. package/dist/docs/assets/{reference_skills.md.VQnlBT3Q.lean.js → reference_skills.md.B_jHN7JL.lean.js} +1 -1
  61. package/dist/docs/assets/{reference_subagents.md.CIRAVcPK.js → reference_subagents.md.zWAMNfi1.js} +1 -1
  62. package/dist/docs/assets/{reference_tools.md.DF5kwlt0.js → reference_tools.md.CqgJroI0.js} +2 -2
  63. package/dist/docs/assets/scaffolding-agents.md.C3pTrmoE.js +1 -0
  64. package/dist/docs/assets/scaffolding-agents.md.C3pTrmoE.lean.js +1 -0
  65. package/dist/docs/assets/storage.md.CVnInNiN.js +17 -0
  66. package/dist/docs/assets/storage.md.CVnInNiN.lean.js +1 -0
  67. package/dist/docs/building-with-agents.html +4 -4
  68. package/dist/docs/concepts.html +4 -4
  69. package/dist/docs/deployment.html +7 -7
  70. package/dist/docs/evals.html +7 -7
  71. package/dist/docs/guides/agent-to-agent.html +6 -6
  72. package/dist/docs/guides/cloud-runtime.html +5 -5
  73. package/dist/docs/guides/github.html +14 -7
  74. package/dist/docs/guides/human-in-the-loop.html +6 -6
  75. package/dist/docs/guides/slack.html +8 -8
  76. package/dist/docs/guides/webhooks.html +6 -6
  77. package/dist/docs/hashmap.json +1 -1
  78. package/dist/docs/hillclimbing.html +5 -5
  79. package/dist/docs/index.html +7 -7
  80. package/dist/docs/quickstart.html +195 -26
  81. package/dist/docs/reference/agent-config.html +7 -7
  82. package/dist/docs/reference/channels.html +8 -8
  83. package/dist/docs/reference/cli.html +14 -9
  84. package/dist/docs/reference/connections.html +5 -5
  85. package/dist/docs/reference/hooks.html +5 -5
  86. package/dist/docs/reference/http-api.html +6 -6
  87. package/dist/docs/reference/instructions.html +13 -11
  88. package/dist/docs/reference/playground.html +4 -4
  89. package/dist/docs/reference/project-layout.html +4 -4
  90. package/dist/docs/reference/schedules.html +7 -7
  91. package/dist/docs/reference/sessions.html +4 -4
  92. package/dist/docs/reference/skills.html +6 -6
  93. package/dist/docs/reference/subagents.html +6 -6
  94. package/dist/docs/reference/tools.html +7 -7
  95. package/dist/docs/scaffolding-agents.html +5 -5
  96. package/dist/docs/storage.html +41 -0
  97. package/dist/docs/troubleshooting.html +4 -4
  98. package/dist/index.d.ts +2 -0
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +1 -0
  101. package/dist/internal/chat-client.d.ts +29 -3
  102. package/dist/internal/chat-client.d.ts.map +1 -1
  103. package/dist/internal/chat-client.js +180 -27
  104. package/dist/internal/cli-ax.d.ts +75 -2
  105. package/dist/internal/cli-ax.d.ts.map +1 -1
  106. package/dist/internal/cli-ax.js +600 -52
  107. package/dist/internal/cli-cursor.d.ts.map +1 -1
  108. package/dist/internal/cli-cursor.js +8 -36
  109. package/dist/internal/cli-deploy.d.ts +108 -0
  110. package/dist/internal/cli-deploy.d.ts.map +1 -0
  111. package/dist/internal/cli-deploy.js +1009 -0
  112. package/dist/internal/cursor/backend-client.d.ts +10 -1
  113. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  114. package/dist/internal/cursor/backend-client.js +79 -1
  115. package/dist/internal/cursor/credentials.d.ts +9 -0
  116. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  117. package/dist/internal/cursor/credentials.js +12 -0
  118. package/dist/internal/cursor/github-credentials.d.ts +44 -0
  119. package/dist/internal/cursor/github-credentials.d.ts.map +1 -0
  120. package/dist/internal/cursor/github-credentials.js +195 -0
  121. package/dist/internal/deploy-client.d.ts +184 -0
  122. package/dist/internal/deploy-client.d.ts.map +1 -0
  123. package/dist/internal/deploy-client.js +395 -0
  124. package/dist/internal/deploy-source.d.ts +35 -0
  125. package/dist/internal/deploy-source.d.ts.map +1 -0
  126. package/dist/internal/deploy-source.js +118 -0
  127. package/dist/internal/discovery.d.ts +11 -0
  128. package/dist/internal/discovery.d.ts.map +1 -1
  129. package/dist/internal/discovery.js +116 -19
  130. package/dist/internal/distribution.d.ts.map +1 -1
  131. package/dist/internal/distribution.js +1 -0
  132. package/dist/internal/eval-run-store.d.ts +22 -3
  133. package/dist/internal/eval-run-store.d.ts.map +1 -1
  134. package/dist/internal/eval-run-store.js +39 -20
  135. package/dist/internal/eval-runner.d.ts +2 -0
  136. package/dist/internal/eval-runner.d.ts.map +1 -1
  137. package/dist/internal/eval-runner.js +2 -0
  138. package/dist/internal/event-mapper.d.ts +54 -1
  139. package/dist/internal/event-mapper.d.ts.map +1 -1
  140. package/dist/internal/event-mapper.js +151 -41
  141. package/dist/internal/handleAgentServeTrigger.d.ts.map +1 -1
  142. package/dist/internal/handleAgentServeTrigger.js +10 -12
  143. package/dist/internal/host-platforms.d.ts +7 -2
  144. package/dist/internal/host-platforms.d.ts.map +1 -1
  145. package/dist/internal/host-platforms.js +15 -10
  146. package/dist/internal/hosting.d.ts +37 -0
  147. package/dist/internal/hosting.d.ts.map +1 -0
  148. package/dist/internal/hosting.js +67 -0
  149. package/dist/internal/init-project.d.ts +88 -1
  150. package/dist/internal/init-project.d.ts.map +1 -1
  151. package/dist/internal/init-project.js +221 -31
  152. package/dist/internal/install-cursor-skills.d.ts +64 -0
  153. package/dist/internal/install-cursor-skills.d.ts.map +1 -0
  154. package/dist/internal/install-cursor-skills.js +274 -0
  155. package/dist/internal/logs-client.d.ts +60 -0
  156. package/dist/internal/logs-client.d.ts.map +1 -0
  157. package/dist/internal/logs-client.js +311 -0
  158. package/dist/internal/open-browser.d.ts +5 -0
  159. package/dist/internal/open-browser.d.ts.map +1 -0
  160. package/dist/internal/open-browser.js +34 -0
  161. package/dist/internal/playground/toolchain.d.ts.map +1 -1
  162. package/dist/internal/playground/toolchain.js +16 -11
  163. package/dist/internal/playground-proxy.d.ts +69 -0
  164. package/dist/internal/playground-proxy.d.ts.map +1 -0
  165. package/dist/internal/playground-proxy.js +468 -0
  166. package/dist/internal/prompt-context.d.ts +35 -0
  167. package/dist/internal/prompt-context.d.ts.map +1 -0
  168. package/dist/internal/prompt-context.js +71 -0
  169. package/dist/internal/reminder-runner.d.ts +7 -0
  170. package/dist/internal/reminder-runner.d.ts.map +1 -1
  171. package/dist/internal/reminder-runner.js +50 -6
  172. package/dist/internal/reminder-store.d.ts +2 -0
  173. package/dist/internal/reminder-store.d.ts.map +1 -1
  174. package/dist/internal/reminder-store.js +18 -0
  175. package/dist/internal/request-headers.d.ts +11 -0
  176. package/dist/internal/request-headers.d.ts.map +1 -0
  177. package/dist/internal/request-headers.js +14 -0
  178. package/dist/internal/resolve-prod-target.d.ts +42 -0
  179. package/dist/internal/resolve-prod-target.d.ts.map +1 -0
  180. package/dist/internal/resolve-prod-target.js +111 -0
  181. package/dist/internal/run-client.d.ts +2 -2
  182. package/dist/internal/run-client.d.ts.map +1 -1
  183. package/dist/internal/run-client.js +38 -23
  184. package/dist/internal/server.d.ts.map +1 -1
  185. package/dist/internal/server.js +182 -45
  186. package/dist/internal/session-engine.d.ts +50 -1
  187. package/dist/internal/session-engine.d.ts.map +1 -1
  188. package/dist/internal/session-engine.js +267 -23
  189. package/dist/internal/sessions-client.d.ts +21 -0
  190. package/dist/internal/sessions-client.d.ts.map +1 -0
  191. package/dist/internal/sessions-client.js +168 -0
  192. package/dist/internal/storage-coordinator.d.ts +139 -0
  193. package/dist/internal/storage-coordinator.d.ts.map +1 -0
  194. package/dist/internal/storage-coordinator.js +499 -0
  195. package/dist/internal/stream-progress.d.ts.map +1 -1
  196. package/dist/internal/stream-progress.js +31 -3
  197. package/dist/internal/terminal-style.d.ts +22 -0
  198. package/dist/internal/terminal-style.d.ts.map +1 -0
  199. package/dist/internal/terminal-style.js +49 -0
  200. package/dist/internal/trajectory.d.ts +10 -5
  201. package/dist/internal/trajectory.d.ts.map +1 -1
  202. package/dist/internal/trajectory.js +82 -10
  203. package/dist/internal/workspace.d.ts +11 -0
  204. package/dist/internal/workspace.d.ts.map +1 -1
  205. package/dist/internal/workspace.js +38 -4
  206. package/dist/playground/assets/cursor-icons-outline-BxTT_FVJ.woff2 +0 -0
  207. package/dist/playground/assets/index-D-vo2lV_.css +1 -0
  208. package/dist/playground/assets/index-x60b9q2j.js +312 -0
  209. package/dist/playground/index.html +2 -2
  210. package/dist/storage.d.ts +204 -0
  211. package/dist/storage.d.ts.map +1 -0
  212. package/dist/storage.js +153 -0
  213. package/dist/types.d.ts +70 -4
  214. package/dist/types.d.ts.map +1 -1
  215. package/docs/README.md +3 -2
  216. package/docs/guides/github.md +43 -8
  217. package/docs/guides/slack.md +1 -1
  218. package/docs/quickstart.md +350 -57
  219. package/docs/reference/cli.md +51 -3
  220. package/docs/reference/instructions.md +8 -6
  221. package/docs/scaffolding-agents.md +1 -1
  222. package/docs/storage.md +98 -0
  223. package/package.json +10 -1
  224. package/skills/ab/SKILL.md +8 -8
  225. package/skills/create-agent/SKILL.md +28 -22
  226. package/skills/debug/SKILL.md +11 -11
  227. package/skills/evals/SKILL.md +16 -16
  228. package/skills/framework-map/SKILL.md +6 -6
  229. package/skills/github/SKILL.md +22 -14
  230. package/skills/hillclimb/SKILL.md +10 -10
  231. package/skills/setup-slack/SKILL.md +13 -13
  232. package/src/bin/agent-serve.ts +552 -179
  233. package/src/channels/github/api.ts +42 -23
  234. package/src/channels/github/cursor-account.ts +165 -0
  235. package/src/channels/github/github-channel.ts +66 -6
  236. package/src/channels/github/index.ts +2 -2
  237. package/src/channels/github/types.ts +19 -0
  238. package/src/channels/slack/slack-channel.ts +17 -3
  239. package/src/channels/slack/types.ts +44 -3
  240. package/src/index.ts +13 -0
  241. package/src/internal/chat-client.ts +252 -37
  242. package/src/internal/cli-ax.ts +722 -72
  243. package/src/internal/cli-cursor.ts +14 -42
  244. package/src/internal/cli-deploy.ts +1319 -0
  245. package/src/internal/cursor/backend-client.ts +103 -1
  246. package/src/internal/cursor/credentials.ts +14 -0
  247. package/src/internal/cursor/github-credentials.ts +248 -0
  248. package/src/internal/deploy-client.ts +632 -0
  249. package/src/internal/deploy-source.ts +133 -0
  250. package/src/internal/discovery.ts +141 -17
  251. package/src/internal/distribution.ts +1 -0
  252. package/src/internal/eval-run-store.ts +50 -20
  253. package/src/internal/eval-runner.ts +5 -0
  254. package/src/internal/event-mapper.ts +222 -42
  255. package/src/internal/handleAgentServeTrigger.ts +10 -12
  256. package/src/internal/host-platforms.ts +28 -11
  257. package/src/internal/hosting.ts +77 -0
  258. package/src/internal/init-project.ts +333 -51
  259. package/src/internal/install-cursor-skills.ts +327 -0
  260. package/src/internal/logs-client.ts +442 -0
  261. package/src/internal/open-browser.ts +41 -0
  262. package/src/internal/playground/toolchain.ts +15 -13
  263. package/src/internal/playground-proxy.ts +576 -0
  264. package/src/internal/prompt-context.ts +95 -0
  265. package/src/internal/reminder-runner.ts +50 -6
  266. package/src/internal/reminder-store.ts +21 -0
  267. package/src/internal/request-headers.ts +23 -0
  268. package/src/internal/resolve-prod-target.ts +150 -0
  269. package/src/internal/run-client.ts +39 -36
  270. package/src/internal/server.ts +223 -28
  271. package/src/internal/session-engine.ts +307 -10
  272. package/src/internal/sessions-client.ts +182 -0
  273. package/src/internal/storage-coordinator.ts +615 -0
  274. package/src/internal/stream-progress.ts +36 -2
  275. package/src/internal/terminal-style.ts +74 -0
  276. package/src/internal/trajectory.ts +91 -13
  277. package/src/internal/workspace.ts +42 -4
  278. package/src/storage.ts +325 -0
  279. package/src/types.ts +82 -8
  280. package/dist/docs/assets/chunks/@localSearchIndexroot.CcVk1uKq.js +0 -1
  281. package/dist/docs/assets/index.md.BPKcj5AI.js +0 -20
  282. package/dist/docs/assets/quickstart.md.tVPiGK_L.js +0 -35
  283. package/dist/docs/assets/quickstart.md.tVPiGK_L.lean.js +0 -1
  284. package/dist/docs/assets/scaffolding-agents.md.CyYfWGdc.js +0 -1
  285. package/dist/docs/assets/scaffolding-agents.md.CyYfWGdc.lean.js +0 -1
  286. package/dist/playground/assets/cursor-icons-outline-oY2V_mvK.woff2 +0 -0
  287. package/dist/playground/assets/index-1K-hG-7p.css +0 -1
  288. package/dist/playground/assets/index-FlWjhg3x.js +0 -79
  289. /package/dist/docs/assets/{evals.md.DPZ_MAnI.lean.js → evals.md.DAgEc_hL.lean.js} +0 -0
  290. /package/dist/docs/assets/{guides_agent-to-agent.md.CrtrsySy.lean.js → guides_agent-to-agent.md.Bpzgq2Pq.lean.js} +0 -0
  291. /package/dist/docs/assets/{guides_cloud-runtime.md.CYlNMTNp.lean.js → guides_cloud-runtime.md.gVzabdQL.lean.js} +0 -0
  292. /package/dist/docs/assets/{guides_human-in-the-loop.md.Dvuctx7s.lean.js → guides_human-in-the-loop.md.DlUqsp1S.lean.js} +0 -0
  293. /package/dist/docs/assets/{guides_webhooks.md.hFTik3lf.lean.js → guides_webhooks.md.B1EswtUu.lean.js} +0 -0
  294. /package/dist/docs/assets/{reference_connections.md.C3vNH_DE.lean.js → reference_connections.md.zaEYCLHT.lean.js} +0 -0
  295. /package/dist/docs/assets/{reference_http-api.md.DBAahtdz.lean.js → reference_http-api.md.Dx_nmDG6.lean.js} +0 -0
  296. /package/dist/docs/assets/{reference_schedules.md.D7qijxLk.lean.js → reference_schedules.md.w_F2mXB6.lean.js} +0 -0
  297. /package/dist/docs/assets/{reference_subagents.md.CIRAVcPK.lean.js → reference_subagents.md.zWAMNfi1.lean.js} +0 -0
  298. /package/dist/docs/assets/{reference_tools.md.DF5kwlt0.lean.js → reference_tools.md.CqgJroI0.lean.js} +0 -0
@@ -35,8 +35,10 @@ import { registerAuthoredModuleLoaders } from "./authored-loaders.js";
35
35
  import { getDefinitionKind } from "./brand.js";
36
36
  import { isValidCron } from "./cron.js";
37
37
  import { parseFrontmatter } from "./frontmatter.js";
38
+ import { isReservedSecretName, MAX_EGRESS_DOMAINS, validateEgressDomain, validateSecretName, } from "./hosting.js";
38
39
  import { toolInputJsonSchema } from "./json-schema.js";
39
40
  import { MCP_ENDPOINT_PATH, mcpEndpointToolNames } from "./mcp-endpoint.js";
41
+ import { withIdentityPreamble } from "./workspace.js";
40
42
  const MODULE_EXTENSIONS = new Set([".ts", ".mts", ".js", ".mjs"]);
41
43
  const NAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
42
44
  const SKILL_DESCRIPTION_FALLBACK = (name) => `Instructions for the ${name} skill.`;
@@ -63,17 +65,15 @@ export function isAgentProjectDir(dir) {
63
65
  });
64
66
  }
65
67
  /**
66
- * Discover the agent projects directly under `rootDir` (one level deep):
67
- * each immediate child directory that is itself an agent project becomes a
68
- * mounted agent, keyed by a slug derived from its directory name. Used for
69
- * multi-agent serving, where one server hosts many agents under
70
- * `/<slug>/...`. Throws when no child projects are found.
68
+ * List agent projects directly under `rootDir` (one level deep) without
69
+ * loading them. Empty when the path is missing or has no child agents.
70
+ * Slug rules match {@link loadAgentProjects} / multi-agent serve.
71
71
  */
72
- export function loadAgentProjects(rootDir_1) {
73
- return __awaiter(this, arguments, void 0, function* (rootDir, options = {}) {
72
+ export function listChildAgentDirs(rootDir) {
73
+ return __awaiter(this, void 0, void 0, function* () {
74
74
  const resolved = resolve(rootDir);
75
75
  if (!(yield isDirectory(resolved))) {
76
- throw new Error(`Agent projects directory does not exist: ${resolved}`);
76
+ return [];
77
77
  }
78
78
  const results = [];
79
79
  const seenSlugs = new Set();
@@ -93,11 +93,35 @@ export function loadAgentProjects(rootDir_1) {
93
93
  throw new Error(`Duplicate agent slug "${slug}" under ${resolved}.`);
94
94
  }
95
95
  seenSlugs.add(slug);
96
- results.push({ slug, project: yield loadAgentProject(childDir, options) });
96
+ results.push({ slug, dir: childDir });
97
97
  }
98
- if (results.length === 0) {
98
+ return results;
99
+ });
100
+ }
101
+ /**
102
+ * Discover the agent projects directly under `rootDir` (one level deep):
103
+ * each immediate child directory that is itself an agent project becomes a
104
+ * mounted agent, keyed by a slug derived from its directory name. Used for
105
+ * multi-agent serving, where one server hosts many agents under
106
+ * `/<slug>/...`. Throws when no child projects are found.
107
+ */
108
+ export function loadAgentProjects(rootDir_1) {
109
+ return __awaiter(this, arguments, void 0, function* (rootDir, options = {}) {
110
+ const resolved = resolve(rootDir);
111
+ if (!(yield isDirectory(resolved))) {
112
+ throw new Error(`Agent projects directory does not exist: ${resolved}`);
113
+ }
114
+ const children = yield listChildAgentDirs(resolved);
115
+ if (children.length === 0) {
99
116
  throw new Error(`No agent projects found directly under ${resolved}. Each agent should be a subdirectory with its own agent/ directory (or flat-layout markers).`);
100
117
  }
118
+ const results = [];
119
+ for (const child of children) {
120
+ results.push({
121
+ slug: child.slug,
122
+ project: yield loadAgentProject(child.dir, options),
123
+ });
124
+ }
101
125
  return results;
102
126
  });
103
127
  }
@@ -176,14 +200,24 @@ export function loadAgentProject(dir_1) {
176
200
  const hooks = yield loadHooks(ctx, join(agentDir, "hooks"));
177
201
  const abs = yield loadABs(ctx, agentDir);
178
202
  const abConfig = yield loadABConfig(ctx, agentDir);
203
+ const storage = yield loadStorage(ctx, agentDir);
179
204
  if (agentDir !== rootDir) {
180
205
  yield warnUnknownSlots(ctx, agentDir);
181
206
  }
182
- return Object.assign(Object.assign({ rootDir,
183
- agentDir, name: agent.name, agent, httpChannel: httpChannelDefinition !== null && httpChannelDefinition !== void 0 ? httpChannelDefinition : httpChannel(), channels,
207
+ return {
208
+ rootDir,
209
+ agentDir,
210
+ name: agent.name,
211
+ agent,
212
+ httpChannel: httpChannelDefinition !== null && httpChannelDefinition !== void 0 ? httpChannelDefinition : httpChannel(),
213
+ channels,
184
214
  schedules,
185
215
  hooks,
186
- abs }, (abConfig === undefined ? {} : { abConfig })), { diagnostics });
216
+ abs,
217
+ abConfig,
218
+ storage,
219
+ diagnostics,
220
+ };
187
221
  });
188
222
  }
189
223
  /** True when the project has diagnostics that must block serving. */
@@ -204,15 +238,21 @@ export function formatDiagnostics(diagnostics) {
204
238
  function loadAgent(ctx, agentDir, options) {
205
239
  return __awaiter(this, void 0, void 0, function* () {
206
240
  var _a;
207
- var _b, _c;
241
+ var _b;
208
242
  const config = yield loadAgentConfig(ctx, agentDir, options.isRoot);
209
- const instructions = yield loadInstructions(ctx, agentDir, config, options.isRoot);
243
+ const name = (_b = config === null || config === void 0 ? void 0 : config.name) !== null && _b !== void 0 ? _b : options.name;
244
+ const authoredInstructions = yield loadInstructions(ctx, agentDir, config, options.isRoot);
245
+ // Root agents without authored instructions stay undefined (diagnostic
246
+ // already recorded). Subagents still get the identity line alone.
247
+ const instructions = authoredInstructions === undefined && options.isRoot
248
+ ? undefined
249
+ : withIdentityPreamble(name, authoredInstructions);
210
250
  // Subagents run as Cursor SDK custom subagents (prompt + description +
211
251
  // model); their other slots are inert today, so don't load them — just
212
252
  // warn that they exist.
213
253
  if (!options.isRoot) {
214
254
  yield warnUnsupportedSubagentSlots(ctx, agentDir);
215
- return Object.assign(Object.assign(Object.assign(Object.assign({ name: (_b = config === null || config === void 0 ? void 0 : config.name) !== null && _b !== void 0 ? _b : options.name }, ((config === null || config === void 0 ? void 0 : config.description) === undefined
255
+ return Object.assign(Object.assign(Object.assign(Object.assign({ name }, ((config === null || config === void 0 ? void 0 : config.description) === undefined
216
256
  ? {}
217
257
  : { description: config.description })), ((config === null || config === void 0 ? void 0 : config.model) === undefined ? {} : { model: config.model })), (instructions === undefined ? {} : { instructions })), { runtime: "local", tools: [], skills: [], connections: [], subagents: [], seedFiles: [] });
218
258
  }
@@ -231,6 +271,7 @@ function loadAgent(ctx, agentDir, options) {
231
271
  : {
232
272
  cwd: localCwd,
233
273
  };
274
+ const hosting = resolveHosting(ctx, agentDir, config === null || config === void 0 ? void 0 : config.hosting);
234
275
  if (runtime === "cloud") {
235
276
  warnCloudRuntimeLimitations(ctx, agentDir, {
236
277
  serverTools: tools.filter((tool) => tool.execution === "server").length,
@@ -241,7 +282,7 @@ function loadAgent(ctx, agentDir, options) {
241
282
  });
242
283
  }
243
284
  return {
244
- name: (_c = config === null || config === void 0 ? void 0 : config.name) !== null && _c !== void 0 ? _c : options.name,
285
+ name,
245
286
  description: config === null || config === void 0 ? void 0 : config.description,
246
287
  // Root agents always get a concrete model: authored value or DEFAULT_MODEL.
247
288
  model: isValidModelSetting(config === null || config === void 0 ? void 0 : config.model) ? config.model : DEFAULT_MODEL,
@@ -249,6 +290,7 @@ function loadAgent(ctx, agentDir, options) {
249
290
  runtime,
250
291
  cloud,
251
292
  local,
293
+ hosting,
252
294
  tools,
253
295
  skills,
254
296
  connections,
@@ -268,6 +310,46 @@ function resolveAgentCwd(ctx, authored) {
268
310
  }
269
311
  return isAbsolute(trimmed) ? trimmed : resolve(ctx.rootDir, trimmed);
270
312
  }
313
+ /**
314
+ * Validate the authored `hosting` block against the same grammar the
315
+ * backend enforces on deploy. Violations are warning diagnostics (reported
316
+ * by `agentkit validate`), not hard failures: the backend stays
317
+ * authoritative and `agentkit deploy` re-checks before any network call.
318
+ */
319
+ function resolveHosting(ctx, agentDir, hosting) {
320
+ var _a, _b;
321
+ if (hosting === undefined) {
322
+ return undefined;
323
+ }
324
+ const agentPath = displayPath(ctx, join(agentDir, "agent.ts"));
325
+ const warn = (message) => {
326
+ ctx.diagnostics.push({ severity: "warning", path: agentPath, message });
327
+ };
328
+ const egressDomains = (_a = hosting.egressDomains) !== null && _a !== void 0 ? _a : [];
329
+ for (const domain of egressDomains) {
330
+ const domainError = validateEgressDomain(domain);
331
+ if (domainError !== undefined) {
332
+ warn(`hosting.egressDomains: ${domainError}`);
333
+ }
334
+ }
335
+ if (egressDomains.length > MAX_EGRESS_DOMAINS) {
336
+ warn(`hosting.egressDomains lists ${egressDomains.length} domains; deploys are capped at ${MAX_EGRESS_DOMAINS}.`);
337
+ }
338
+ for (const name of (_b = hosting.secretNames) !== null && _b !== void 0 ? _b : []) {
339
+ const nameError = validateSecretName(name);
340
+ if (nameError !== undefined) {
341
+ warn(`hosting.secretNames: ${nameError}`);
342
+ }
343
+ else if (isReservedSecretName(name)) {
344
+ warn(`hosting.secretNames: ${JSON.stringify(name)} is platform-reserved (CURSOR_*) and injected automatically; it cannot be set with \`secrets set\`.`);
345
+ }
346
+ }
347
+ return Object.assign(Object.assign({}, (hosting.egressDomains === undefined
348
+ ? {}
349
+ : { egressDomains: [...hosting.egressDomains] })), (hosting.secretNames === undefined
350
+ ? {}
351
+ : { secretNames: [...hosting.secretNames] }));
352
+ }
271
353
  function loadAgentConfig(ctx, agentDir, isRoot) {
272
354
  return __awaiter(this, void 0, void 0, function* () {
273
355
  const configPath = yield findModuleFile(agentDir, "agent");
@@ -1088,6 +1170,19 @@ function loadABConfig(ctx, agentDir) {
1088
1170
  }
1089
1171
  });
1090
1172
  }
1173
+ // ============================================================================
1174
+ // Storage (agent/storage.ts)
1175
+ // ============================================================================
1176
+ function loadStorage(ctx, agentDir) {
1177
+ return __awaiter(this, void 0, void 0, function* () {
1178
+ const path = yield findModuleFile(agentDir, "storage");
1179
+ if (path === undefined) {
1180
+ return undefined;
1181
+ }
1182
+ const definition = yield importDefault(ctx, path, "storage");
1183
+ return definition;
1184
+ });
1185
+ }
1091
1186
  function resolveABName(definition, fallback) {
1092
1187
  if (typeof definition === "object" &&
1093
1188
  definition !== null &&
@@ -1161,7 +1256,7 @@ export function projectInfo(project) {
1161
1256
  url: "/v1/session/:sessionId/approvals/:callId",
1162
1257
  },
1163
1258
  ];
1164
- return Object.assign(Object.assign({ name: project.name, model: agent.model, runtime: agent.runtime, cloud: agent.cloud === undefined ? undefined : toPublicCloudInfo(agent.cloud), local: agent.local, mcp: { path: MCP_ENDPOINT_PATH, tools: mcpEndpointToolNames(project) }, instructions: agent.instructions === undefined
1259
+ return Object.assign(Object.assign({ name: project.name, model: agent.model, runtime: agent.runtime, cloud: agent.cloud === undefined ? undefined : toPublicCloudInfo(agent.cloud), local: agent.local, hosting: agent.hosting, mcp: { path: MCP_ENDPOINT_PATH, tools: mcpEndpointToolNames(project) }, instructions: agent.instructions === undefined
1165
1260
  ? undefined
1166
1261
  : {
1167
1262
  chars: agent.instructions.length,
@@ -1232,7 +1327,9 @@ export function projectInfo(project) {
1232
1327
  durableSamples: ((_b = project.abConfig) === null || _b === void 0 ? void 0 : _b.persistSamples) !== undefined,
1233
1328
  durableSnapshots: ((_c = project.abConfig) === null || _c === void 0 ? void 0 : _c.persistSnapshots) !== undefined,
1234
1329
  },
1235
- })), { diagnostics: project.diagnostics });
1330
+ })), { storage: project.storage === undefined
1331
+ ? undefined
1332
+ : { name: project.storage.name }, diagnostics: project.diagnostics });
1236
1333
  }
1237
1334
  // ============================================================================
1238
1335
  // Shared helpers
@@ -1 +1 @@
1
- {"version":3,"file":"distribution.d.ts","sourceRoot":"","sources":["../../src/internal/distribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,qEAAqE;AACrE,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAA+B,CAAC;AAc/D;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAGhD;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,kEAAkE;AAClE,wBAAgB,cAAc,IAAI,MAAM,CAOvC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAC/C,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAczC,CAAC"}
1
+ {"version":3,"file":"distribution.d.ts","sourceRoot":"","sources":["../../src/internal/distribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,qEAAqE;AACrE,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAA+B,CAAC;AAc/D;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAGhD;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,kEAAkE;AAClE,wBAAgB,cAAc,IAAI,MAAM,CAOvC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAC/C,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAezC,CAAC"}
@@ -79,4 +79,5 @@ export const AUTHORING_ENTRY_FILES = [
79
79
  ["hooks", "hooks.js"],
80
80
  ["evals", "evals.js"],
81
81
  ["ab", "ab.js"],
82
+ ["storage", "storage.js"],
82
83
  ];
@@ -6,7 +6,7 @@
6
6
  * Runs against the live mount's loopback URL so case sessions appear in
7
7
  * the playground session list.
8
8
  */
9
- import { type EvalRunSnapshot } from "../evals.js";
9
+ import { type EvalRunPersistence, type EvalRunSnapshot } from "../evals.js";
10
10
  export type { EvalBatchStatus, EvalCaseRunStatus as EvalCaseStatus, EvalCaseSnapshot, EvalRunSnapshot, } from "../evals.js";
11
11
  export interface StartEvalRunInput {
12
12
  filterIds?: string[];
@@ -24,6 +24,11 @@ export type EvalListConfig = {
24
24
  export declare class EvalRunStore {
25
25
  private readonly projectRoot;
26
26
  private readonly logger;
27
+ /**
28
+ * Project-wide sink from `agent/storage.ts` (`defineStorage`),
29
+ * used when `evals.config.ts` sets no `persistRuns` of its own.
30
+ */
31
+ private readonly fallbackPersistence?;
27
32
  private readonly runs;
28
33
  private activeRunId;
29
34
  private hydratePromise;
@@ -32,7 +37,14 @@ export declare class EvalRunStore {
32
37
  private readonly persistChains;
33
38
  /** Filled after listen — e.g. `http://127.0.0.1:3000/weather-agent`. */
34
39
  loopbackUrl: string | undefined;
35
- constructor(projectRoot: string, logger: (line: string) => void);
40
+ constructor(projectRoot: string, logger: (line: string) => void,
41
+ /**
42
+ * Project-wide sink from `agent/storage.ts` (`defineStorage`),
43
+ * used when `evals.config.ts` sets no `persistRuns` of its own.
44
+ */
45
+ fallbackPersistence?: EvalRunPersistence | undefined);
46
+ /** `evals.config.ts` `persistRuns` wins; `defineStorage` is fallback. */
47
+ private resolvePersist;
36
48
  list(): Promise<{
37
49
  evals: Array<{
38
50
  id: string;
@@ -57,7 +69,14 @@ export declare class EvalRunStore {
57
69
  getActiveRunId(): string | undefined;
58
70
  start(input?: StartEvalRunInput): Promise<EvalRunSnapshot>;
59
71
  private sortedRuns;
60
- private ensureHydrated;
72
+ /**
73
+ * Hydrate playground eval history from durable persistence
74
+ * (`evals.config.ts` `persistRuns`, else the `defineStorage`
75
+ * fallback). Called eagerly from the serve startup restore step —
76
+ * alongside session restore — and lazily as a safety net by every read.
77
+ * Idempotent; concurrent callers share one pass.
78
+ */
79
+ hydrate(): Promise<void>;
61
80
  private hydrateFromPersistence;
62
81
  private pruneOldRuns;
63
82
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"eval-run-store.d.ts","sourceRoot":"","sources":["../../src/internal/eval-run-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,aAAa,CAAC;AASrB,YAAY,EACV,eAAe,EACf,iBAAiB,IAAI,cAAc,EACnC,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAOF,qBAAa,YAAY;IAWrB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsC;IAC3D,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,QAAQ,CAAS;IACzB,wFAAwF;IACxF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;IAClE,wEAAwE;IACxE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC,YACmB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC7C;IAEE,IAAI,IAAI,OAAO,CAAC;QACpB,KAAK,EAAE,KAAK,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;YACX,MAAM,EAAE,MAAM,CAAC;YACf,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,MAAM,EAAE,cAAc,CAAC;KACxB,CAAC,CAcD;IAEK,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAG7D;IAED,+EAA+E;IACzE,QAAQ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAG3C;IAED;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC;QAClC,IAAI,EAAE,eAAe,EAAE,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAOD;IAED,cAAc,IAAI,MAAM,GAAG,SAAS,CAEnC;IAEK,KAAK,CAAC,KAAK,GAAE,iBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CA4DnE;IAED,OAAO,CAAC,UAAU;YAMJ,cAAc;YAUd,sBAAsB;YAkDtB,YAAY;IAe1B;;;;OAIG;IACH,OAAO,CAAC,cAAc;YAgBR,WAAW;YAcX,aAAa;YAiBb,OAAO;IAmGrB,OAAO,CAAC,eAAe;CAqCxB;AAoDD,qBAAa,oBAAqB,SAAQ,KAAK;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAAxC,YAAqB,WAAW,EAAE,MAAM,EAGvC;CACF;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,cAGC;CACF"}
1
+ {"version":3,"file":"eval-run-store.d.ts","sourceRoot":"","sources":["../../src/internal/eval-run-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAErB,MAAM,aAAa,CAAC;AASrB,YAAY,EACV,eAAe,EACf,iBAAiB,IAAI,cAAc,EACnC,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAOF,qBAAa,YAAY;IAWrB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAhBvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsC;IAC3D,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,QAAQ,CAAS;IACzB,wFAAwF;IACxF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;IAClE,wEAAwE;IACxE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC,YACmB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAC/C;;;OAGG;IACc,mBAAmB,CAAC,EAAE,kBAAkB,YAAA,EACvD;IAEJ,yEAAyE;IACzE,OAAO,CAAC,cAAc;IAMhB,IAAI,IAAI,OAAO,CAAC;QACpB,KAAK,EAAE,KAAK,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;YACX,MAAM,EAAE,MAAM,CAAC;YACf,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,MAAM,EAAE,cAAc,CAAC;KACxB,CAAC,CAiBD;IAEK,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAG7D;IAED,+EAA+E;IACzE,QAAQ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAG3C;IAED;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC;QAClC,IAAI,EAAE,eAAe,EAAE,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAOD;IAED,cAAc,IAAI,MAAM,GAAG,SAAS,CAEnC;IAEK,KAAK,CAAC,KAAK,GAAE,iBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CA+DnE;IAED,OAAO,CAAC,UAAU;IAMlB;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ7B;YAEa,sBAAsB;YAkDtB,YAAY;IAe1B;;;;OAIG;IACH,OAAO,CAAC,cAAc;YAgBR,WAAW;YAcX,aAAa;YAiBb,OAAO;IAoGrB,OAAO,CAAC,eAAe;CAqCxB;AAwDD,qBAAa,oBAAqB,SAAQ,KAAK;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAAxC,YAAqB,WAAW,EAAE,MAAM,EAGvC;CACF;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,cAGC;CACF"}
@@ -21,36 +21,47 @@ import { discoverEvals, filterDiscoveredEvals, runDiscoveredEvals, } from "./eva
21
21
  const INTERRUPTED_BATCH_ERROR = "Eval run interrupted (serve process exited before completion)";
22
22
  const INTERRUPTED_CASE_ERROR = "Eval case interrupted (serve process exited before completion)";
23
23
  export class EvalRunStore {
24
- constructor(projectRoot, logger) {
24
+ constructor(projectRoot, logger,
25
+ /**
26
+ * Project-wide sink from `agent/storage.ts` (`defineStorage`),
27
+ * used when `evals.config.ts` sets no `persistRuns` of its own.
28
+ */
29
+ fallbackPersistence) {
25
30
  this.projectRoot = projectRoot;
26
31
  this.logger = logger;
32
+ this.fallbackPersistence = fallbackPersistence;
27
33
  this.runs = new Map();
28
34
  this.hydrated = false;
29
35
  /** Per-run persist chain so intermediate saves cannot overwrite a later final write. */
30
36
  this.persistChains = new Map();
31
37
  }
38
+ /** `evals.config.ts` `persistRuns` wins; `defineStorage` is fallback. */
39
+ resolvePersist(config) {
40
+ var _a;
41
+ return (_a = config.persistRuns) !== null && _a !== void 0 ? _a : this.fallbackPersistence;
42
+ }
32
43
  list() {
33
44
  return __awaiter(this, void 0, void 0, function* () {
34
- yield this.ensureHydrated();
45
+ yield this.hydrate();
35
46
  const { evals, config } = yield discoverEvals(this.projectRoot);
36
47
  return {
37
48
  evals: evals.map((e) => (Object.assign(Object.assign({ id: e.id, fileId: e.fileId }, (e.definition.description === undefined
38
49
  ? {}
39
50
  : { description: e.definition.description })), (e.definition.tags === undefined ? {} : { tags: e.definition.tags })))),
40
- config: snapshotListConfig(config),
51
+ config: snapshotListConfig(config, this.resolvePersist(config) !== undefined),
41
52
  };
42
53
  });
43
54
  }
44
55
  get(runId) {
45
56
  return __awaiter(this, void 0, void 0, function* () {
46
- yield this.ensureHydrated();
57
+ yield this.hydrate();
47
58
  return this.runs.get(runId);
48
59
  });
49
60
  }
50
61
  /** Newest-first snapshots for playground rehydrate after navigation/reload. */
51
62
  listRuns() {
52
63
  return __awaiter(this, void 0, void 0, function* () {
53
- yield this.ensureHydrated();
64
+ yield this.hydrate();
54
65
  return this.sortedRuns();
55
66
  });
56
67
  }
@@ -61,7 +72,7 @@ export class EvalRunStore {
61
72
  */
62
73
  listRunsWithActive() {
63
74
  return __awaiter(this, void 0, void 0, function* () {
64
- yield this.ensureHydrated();
75
+ yield this.hydrate();
65
76
  const activeRunId = this.activeRunId;
66
77
  return Object.assign({ runs: this.sortedRuns() }, (activeRunId === undefined ? {} : { activeRunId }));
67
78
  });
@@ -71,7 +82,7 @@ export class EvalRunStore {
71
82
  }
72
83
  start() {
73
84
  return __awaiter(this, arguments, void 0, function* (input = {}) {
74
- yield this.ensureHydrated();
85
+ yield this.hydrate();
75
86
  if (this.activeRunId !== undefined) {
76
87
  const active = this.runs.get(this.activeRunId);
77
88
  if (active !== undefined && active.status === "running") {
@@ -103,12 +114,12 @@ export class EvalRunStore {
103
114
  done: 0,
104
115
  },
105
116
  cases,
106
- config: snapshotRunConfig(config),
117
+ config: snapshotRunConfig(config, this.resolvePersist(config) !== undefined),
107
118
  };
108
119
  this.runs.set(runId, snapshot);
109
120
  this.activeRunId = runId;
110
121
  yield this.pruneOldRuns(config);
111
- yield this.enqueuePersist(snapshot, config.persistRuns);
122
+ yield this.enqueuePersist(snapshot, this.resolvePersist(config));
112
123
  this.logger(`[agent-serve] eval run ${runId}: starting ${cases.length} case(s)`);
113
124
  void this.execute(runId, Object.assign(Object.assign({ baseUrl: loopbackUrl, evals: selected, config }, (input.bearerToken === undefined
114
125
  ? {}
@@ -119,7 +130,14 @@ export class EvalRunStore {
119
130
  sortedRuns() {
120
131
  return [...this.runs.values()].sort((a, b) => b.startedAt.localeCompare(a.startedAt));
121
132
  }
122
- ensureHydrated() {
133
+ /**
134
+ * Hydrate playground eval history from durable persistence
135
+ * (`evals.config.ts` `persistRuns`, else the `defineStorage`
136
+ * fallback). Called eagerly from the serve startup restore step —
137
+ * alongside session restore — and lazily as a safety net by every read.
138
+ * Idempotent; concurrent callers share one pass.
139
+ */
140
+ hydrate() {
123
141
  return __awaiter(this, void 0, void 0, function* () {
124
142
  if (this.hydrated) {
125
143
  return;
@@ -134,7 +152,7 @@ export class EvalRunStore {
134
152
  return __awaiter(this, void 0, void 0, function* () {
135
153
  try {
136
154
  const { config } = yield discoverEvals(this.projectRoot);
137
- const persist = config.persistRuns;
155
+ const persist = this.resolvePersist(config);
138
156
  if (persist === undefined) {
139
157
  this.hydrated = true;
140
158
  return;
@@ -187,7 +205,7 @@ export class EvalRunStore {
187
205
  continue;
188
206
  }
189
207
  this.runs.delete(stale.runId);
190
- yield this.persistDelete(stale.runId, config.persistRuns);
208
+ yield this.persistDelete(stale.runId, this.resolvePersist(config));
191
209
  }
192
210
  });
193
211
  }
@@ -276,14 +294,15 @@ export class EvalRunStore {
276
294
  c.inputs = [...((_c = c.inputs) !== null && _c !== void 0 ? _c : []), event.data.text];
277
295
  }
278
296
  if (event.type === "message.completed" &&
279
- typeof ((_b = event.data) === null || _b === void 0 ? void 0 : _b.text) === "string") {
297
+ typeof ((_b = event.data) === null || _b === void 0 ? void 0 : _b.text) === "string" &&
298
+ event.data.parentCallId === undefined) {
280
299
  c.finalText = event.data.text;
281
300
  }
282
301
  }, onCaseDone: (result) => {
283
302
  this.applyCaseResult(runId, result);
284
303
  const run = this.runs.get(runId);
285
304
  if (run !== undefined) {
286
- void this.enqueuePersist(run, opts.config.persistRuns);
305
+ void this.enqueuePersist(run, this.resolvePersist(opts.config));
287
306
  }
288
307
  } }));
289
308
  const run = this.runs.get(runId);
@@ -292,7 +311,7 @@ export class EvalRunStore {
292
311
  }
293
312
  run.status = "completed";
294
313
  run.finishedAt = new Date().toISOString();
295
- yield this.enqueuePersist(run, opts.config.persistRuns);
314
+ yield this.enqueuePersist(run, this.resolvePersist(opts.config));
296
315
  this.logger(`[agent-serve] eval run ${runId}: done — ${run.summary.passed} passed, ${run.summary.failed} failed`);
297
316
  }
298
317
  catch (error) {
@@ -303,7 +322,7 @@ export class EvalRunStore {
303
322
  run.status = "failed";
304
323
  run.finishedAt = new Date().toISOString();
305
324
  run.error = error instanceof Error ? error.message : String(error);
306
- yield this.enqueuePersist(run, opts.config.persistRuns);
325
+ yield this.enqueuePersist(run, this.resolvePersist(opts.config));
307
326
  this.logger(`[agent-serve] eval run ${runId}: failed — ${run.error}`);
308
327
  }
309
328
  finally {
@@ -365,13 +384,13 @@ function markInterruptedRun(run) {
365
384
  }
366
385
  }
367
386
  }
368
- function snapshotListConfig(config) {
387
+ function snapshotListConfig(config, durableRuns) {
369
388
  return Object.assign(Object.assign(Object.assign({}, (config.maxConcurrency === undefined
370
389
  ? {}
371
- : { maxConcurrency: config.maxConcurrency })), (config.timeoutMs === undefined ? {} : { timeoutMs: config.timeoutMs })), { maxPlaygroundRuns: resolveEvalMaxPlaygroundRuns(config.maxPlaygroundRuns), durableRuns: config.persistRuns !== undefined });
390
+ : { maxConcurrency: config.maxConcurrency })), (config.timeoutMs === undefined ? {} : { timeoutMs: config.timeoutMs })), { maxPlaygroundRuns: resolveEvalMaxPlaygroundRuns(config.maxPlaygroundRuns), durableRuns });
372
391
  }
373
- function snapshotRunConfig(config) {
374
- const list = snapshotListConfig(config);
392
+ function snapshotRunConfig(config, durableRuns) {
393
+ const list = snapshotListConfig(config, durableRuns);
375
394
  return Object.assign(Object.assign(Object.assign({}, (list.maxConcurrency === undefined
376
395
  ? {}
377
396
  : { maxConcurrency: list.maxConcurrency })), (list.timeoutMs === undefined ? {} : { timeoutMs: list.timeoutMs })), { maxPlaygroundRuns: list.maxPlaygroundRuns, durableRuns: list.durableRuns });
@@ -48,6 +48,8 @@ export interface RunEvalsOptions extends EvalSelectionOptions {
48
48
  baseUrl: string;
49
49
  timeoutMs?: number;
50
50
  bearerToken?: string;
51
+ /** Extra request headers (e.g. hosted engineAccess). */
52
+ headers?: Record<string, string>;
51
53
  verbose?: boolean;
52
54
  onEvent?: (event: SessionEvent) => void;
53
55
  /** Fired when a case begins executing (after concurrency slot acquired). */
@@ -1 +1 @@
1
- {"version":3,"file":"eval-runner.d.ts","sourceRoot":"","sources":["../../src/internal/eval-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eval-runner.d.ts","sourceRoot":"","sources":["../../src/internal/eval-runner.ts"],"names":[],"mappings":"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"}
@@ -149,6 +149,7 @@ export function runDiscoveredEvals(options) {
149
149
  baseUrl: options.baseUrl,
150
150
  defaultTimeoutMs,
151
151
  bearerToken: options.bearerToken,
152
+ headers: options.headers,
152
153
  verbose: Boolean(options.verbose),
153
154
  onEvent: (event) => {
154
155
  var _a, _b;
@@ -209,6 +210,7 @@ function runOneEval(discovered, opts) {
209
210
  // Keep defineEval traffic out of live defineAB enrollment/metrics.
210
211
  purpose: "eval",
211
212
  bearerToken: opts.bearerToken,
213
+ headers: opts.headers,
212
214
  workspaceDir: options.workspaceDir,
213
215
  workspaceFiles: options.workspaceFiles,
214
216
  timeoutMs,
@@ -3,8 +3,53 @@
3
3
  * (`InteractionUpdate`) onto the framework's channel event vocabulary
4
4
  * (`SessionEvent` payloads). One mapper instance covers one turn.
5
5
  */
6
- import type { InteractionUpdate, ToolCall } from "@cursor/sdk";
6
+ import type { InteractionUpdate as SdkInteractionUpdate, ToolCall } from "@cursor/sdk";
7
7
  import type { SessionEventPayload, TurnUsage } from "../types.js";
8
+ /**
9
+ * Nested interaction updates from a task/subagent tool-call-delta.
10
+ * Mirrored locally so agent-serve typechecks against published `@cursor/sdk`
11
+ * versions that do not yet export `NestedTaskUpdate` / `tool-call-delta`.
12
+ */
13
+ type NestedTaskUpdate = {
14
+ type: "text-delta";
15
+ text: string;
16
+ } | {
17
+ type: "thinking-delta";
18
+ text: string;
19
+ } | {
20
+ type: "thinking-completed";
21
+ thinkingDurationMs: number;
22
+ } | {
23
+ type: "tool-call-started";
24
+ callId: string;
25
+ toolCall: ToolCall;
26
+ modelCallId: string;
27
+ } | {
28
+ type: "tool-call-completed";
29
+ callId: string;
30
+ toolCall: ToolCall;
31
+ modelCallId: string;
32
+ } | {
33
+ type: "partial-tool-call";
34
+ callId: string;
35
+ toolCall: ToolCall;
36
+ modelCallId: string;
37
+ } | {
38
+ type: "step-started";
39
+ stepId: number;
40
+ } | {
41
+ type: "step-completed";
42
+ stepId: number;
43
+ stepDurationMs: number;
44
+ };
45
+ type ToolCallDeltaUpdate = {
46
+ type: "tool-call-delta";
47
+ callId: string;
48
+ modelCallId: string;
49
+ taskUpdate: NestedTaskUpdate;
50
+ };
51
+ /** SDK updates plus nested task deltas once the SDK exposes them. */
52
+ type InteractionUpdate = SdkInteractionUpdate | ToolCallDeltaUpdate;
8
53
  export interface ToolCallDescription {
9
54
  toolName: string;
10
55
  args?: unknown;
@@ -24,6 +69,8 @@ export declare class TurnEventMapper {
24
69
  private usageTotal;
25
70
  private lastAssistantText;
26
71
  private summaryTitle;
72
+ /** Per-parent-call accumulators for nested subagent streams. */
73
+ private readonly nested;
27
74
  constructor(emit: (payload: SessionEventPayload) => void);
28
75
  /** Per-turn token usage summed across model steps. */
29
76
  get usage(): TurnUsage | undefined;
@@ -34,7 +81,12 @@ export declare class TurnEventMapper {
34
81
  handleUpdate(update: InteractionUpdate): void;
35
82
  /** Close out the turn: finalize any open assistant text block. */
36
83
  finish(): void;
84
+ private handleNestedTaskUpdate;
85
+ private emitToolStarted;
86
+ private emitToolCompleted;
87
+ private ensureNested;
37
88
  private flushAssistantText;
89
+ private flushNestedAssistantText;
38
90
  }
39
91
  /**
40
92
  * Human-meaningful tool identity for stream events. In-process tools calls
@@ -43,4 +95,5 @@ export declare class TurnEventMapper {
43
95
  */
44
96
  export declare function describeToolCall(toolCall: ToolCall): ToolCallDescription;
45
97
  export declare function describeToolResult(toolCall: ToolCall): ToolResultDescription;
98
+ export {};
46
99
  //# sourceMappingURL=event-mapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-mapper.d.ts","sourceRoot":"","sources":["../../src/internal/event-mapper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIlE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACpD;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,eAAe;IAOd,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,oBAAoB,CAAM;IAClC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,YAAY,CAAqB;IAEzC,YAA6B,IAAI,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,EAAI;IAE7E,sDAAsD;IACtD,IAAI,KAAK,IAAI,SAAS,GAAG,SAAS,CAEjC;IAED,yEAAyE;IACzE,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,4EAA4E;IAC5E,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CA4G5C;IAED,kEAAkE;IAClE,MAAM,IAAI,IAAI,CAEb;IAED,OAAO,CAAC,kBAAkB;CAY3B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,mBAAmB,CA0CxE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,qBAAqB,CA4B5E"}
1
+ {"version":3,"file":"event-mapper.d.ts","sourceRoot":"","sources":["../../src/internal/event-mapper.ts"],"names":[],"mappings":"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"}