@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
@@ -91,6 +91,9 @@ export class ReminderRunner {
91
91
  if (this.started)
92
92
  return;
93
93
  this.started = true;
94
+ // Materialize sink-backed reminders onto local disk before arming
95
+ // (local wins when both sides have the same id).
96
+ yield this.hydrateFromStorage();
94
97
  const armed = yield this.store.listArmed();
95
98
  let restored = 0;
96
99
  let disarmedOrphan = 0;
@@ -114,6 +117,47 @@ export class ReminderRunner {
114
117
  }
115
118
  });
116
119
  }
120
+ /**
121
+ * Pull reminder records from `defineStorage` into `<stateRoot>/reminders`
122
+ * when local disk is empty for that id. Failures are logged and skipped.
123
+ */
124
+ hydrateFromStorage() {
125
+ return __awaiter(this, void 0, void 0, function* () {
126
+ const storage = this.engine.storage;
127
+ if (storage === undefined || !storage.canBulkRestore) {
128
+ return;
129
+ }
130
+ let hydrated = 0;
131
+ try {
132
+ const remote = yield storage.listReminders();
133
+ for (const record of remote) {
134
+ const local = yield this.store.get(record.id);
135
+ if (local !== undefined) {
136
+ continue;
137
+ }
138
+ // Local write only — re-mirroring would just echo the sink.
139
+ yield this.store.save(record);
140
+ hydrated += 1;
141
+ }
142
+ }
143
+ catch (error) {
144
+ const message = error instanceof Error ? error.message : String(error);
145
+ this.logger(`[agent-serve] reminders: storage hydrate failed: ${message}`);
146
+ return;
147
+ }
148
+ if (hydrated > 0) {
149
+ this.logger(`[agent-serve] reminders: hydrated ${hydrated} reminder(s) from storage`);
150
+ }
151
+ });
152
+ }
153
+ /** Persist locally and mirror into the authored storage sink when present. */
154
+ persist(record) {
155
+ return __awaiter(this, void 0, void 0, function* () {
156
+ var _a;
157
+ yield this.store.save(record);
158
+ (_a = this.engine.storage) === null || _a === void 0 ? void 0 : _a.reminder(record);
159
+ });
160
+ }
117
161
  stop() {
118
162
  this.started = false;
119
163
  for (const timer of this.timers.values()) {
@@ -168,7 +212,7 @@ export class ReminderRunner {
168
212
  createdAt: now,
169
213
  updatedAt: now,
170
214
  };
171
- yield this.store.save(record);
215
+ yield this.persist(record);
172
216
  this.handlers.set(id, {
173
217
  run: input.run,
174
218
  untilFn,
@@ -216,7 +260,7 @@ export class ReminderRunner {
216
260
  }
217
261
  this.clearTimer(id);
218
262
  const updated = Object.assign(Object.assign({}, record), { status: "cancelled", disarmReason: reason, updatedAt: new Date().toISOString() });
219
- yield this.store.save(updated);
263
+ yield this.persist(updated);
220
264
  this.handlers.delete(id);
221
265
  return toInfo(updated);
222
266
  });
@@ -518,7 +562,7 @@ export class ReminderRunner {
518
562
  return __awaiter(this, void 0, void 0, function* () {
519
563
  this.clearTimer(record.id);
520
564
  const updated = Object.assign(Object.assign({}, record), { status: "disarmed", disarmReason: reason, updatedAt: new Date().toISOString() });
521
- yield this.store.save(updated);
565
+ yield this.persist(updated);
522
566
  this.handlers.delete(record.id);
523
567
  });
524
568
  }
@@ -552,14 +596,14 @@ export class ReminderRunner {
552
596
  scheduleKind: reschedule.delay !== undefined ? "delay" : "at", scheduleValue: reschedule.delay !== undefined
553
597
  ? String(reschedule.delay)
554
598
  : String(reschedule.at), updatedAt: new Date().toISOString() });
555
- yield this.store.save(updated);
599
+ yield this.persist(updated);
556
600
  this.armTimer(updated);
557
601
  return;
558
602
  }
559
603
  if (oneShot) {
560
604
  this.clearTimer(current.id);
561
605
  const updated = Object.assign(Object.assign({}, current), { fireCount: current.fireCount + 1, status: "completed", disarmReason: "one_shot_complete", updatedAt: new Date().toISOString() });
562
- yield this.store.save(updated);
606
+ yield this.persist(updated);
563
607
  this.handlers.delete(current.id);
564
608
  return;
565
609
  }
@@ -575,7 +619,7 @@ export class ReminderRunner {
575
619
  throw new Error(`Reminder "${current.id}" has recurring status with scheduleKind=${current.scheduleKind}`);
576
620
  }
577
621
  const updated = Object.assign(Object.assign({}, current), { fireCount: current.fireCount + 1, nextFireAtMs, updatedAt: new Date().toISOString() });
578
- yield this.store.save(updated);
622
+ yield this.persist(updated);
579
623
  this.armTimer(updated);
580
624
  });
581
625
  }
@@ -44,6 +44,8 @@ export interface ReminderRecord {
44
44
  createdAt: string;
45
45
  updatedAt: string;
46
46
  }
47
+ /** Narrow a sink value to a {@link ReminderRecord} (startup hydrate). */
48
+ export declare function isReminderRecord(value: unknown): value is ReminderRecord;
47
49
  export declare class ReminderStore {
48
50
  private readonly rootDir;
49
51
  constructor(rootDir: string);
@@ -1 +1 @@
1
- {"version":3,"file":"reminder-store.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,yBAAyB,EAAG,CAAU,CAAC;AAEpD,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,yDAAyD;AACzD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,yBAAyB,CAAC;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,YAAY,EAAE,oBAAoB,CAAC;IACnC,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,yEAAyE;IACzE,UAAU,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,MAAM,EAAI;IAEhD,OAAO,CAAC,QAAQ;IAIV,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhC;IAEK,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAiBtC;IAEK,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAG3C;IAEK,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAsBzD;IAEK,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhD;IAEK,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtC;CACF"}
1
+ {"version":3,"file":"reminder-store.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,yBAAyB,EAAG,CAAU,CAAC;AAEpD,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,yDAAyD;AACzD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,yBAAyB,CAAC;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,YAAY,EAAE,oBAAoB,CAAC;IACnC,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,yEAAyE;IACzE,UAAU,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAkBxE;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,MAAM,EAAI;IAEhD,OAAO,CAAC,QAAQ;IAIV,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhC;IAEK,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAiBtC;IAEK,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAG3C;IAEK,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAsBzD;IAEK,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhD;IAEK,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtC;CACF"}
@@ -18,6 +18,24 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
18
18
  import { mkdir, readdir, readFile, rename, rm, writeFile, } from "node:fs/promises";
19
19
  import { join } from "node:path";
20
20
  export const REMINDER_SNAPSHOT_VERSION = 1;
21
+ /** Narrow a sink value to a {@link ReminderRecord} (startup hydrate). */
22
+ export function isReminderRecord(value) {
23
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
24
+ return false;
25
+ }
26
+ const record = value;
27
+ return (record.version === REMINDER_SNAPSHOT_VERSION &&
28
+ typeof record.id === "string" &&
29
+ record.id !== "" &&
30
+ typeof record.purpose === "string" &&
31
+ typeof record.channelId === "string" &&
32
+ typeof record.continuationToken === "string" &&
33
+ typeof record.scheduleKind === "string" &&
34
+ typeof record.scheduleValue === "string" &&
35
+ typeof record.status === "string" &&
36
+ typeof record.nextFireAtMs === "number" &&
37
+ Number.isFinite(record.nextFireAtMs));
38
+ }
21
39
  export class ReminderStore {
22
40
  constructor(rootDir) {
23
41
  this.rootDir = rootDir;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Merge Authorization bearer + arbitrary request headers for agent HTTP
3
+ * clients (local `--bearer-token`, hosted `engineAccess.headers`, etc.).
4
+ */
5
+ export interface RequestAuth {
6
+ bearerToken?: string;
7
+ /** Extra headers (e.g. X-Anyrun-Port-Token from engineAccess). */
8
+ headers?: Record<string, string>;
9
+ }
10
+ export declare function mergeRequestHeaders(auth: RequestAuth | undefined): Record<string, string>;
11
+ //# sourceMappingURL=request-headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-headers.d.ts","sourceRoot":"","sources":["../../src/internal/request-headers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,GAAG,SAAS,GAC5B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Merge Authorization bearer + arbitrary request headers for agent HTTP
3
+ * clients (local `--bearer-token`, hosted `engineAccess.headers`, etc.).
4
+ */
5
+ export function mergeRequestHeaders(auth) {
6
+ const out = {};
7
+ if ((auth === null || auth === void 0 ? void 0 : auth.headers) !== undefined) {
8
+ Object.assign(out, auth.headers);
9
+ }
10
+ if ((auth === null || auth === void 0 ? void 0 : auth.bearerToken) !== undefined) {
11
+ out.authorization = `Bearer ${auth.bearerToken}`;
12
+ }
13
+ return out;
14
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Resolve a hosted (managed) agent-serve deployment into a base URL +
3
+ * request headers for chat/run/call/eval `--prod`.
4
+ *
5
+ * Uses short-lived `engineAccess` from the deployment status route
6
+ * (Cursor API key on the management API; `X-Anyrun-Port-Token` on the
7
+ * engine). Alias tokens are out of scope here.
8
+ */
9
+ /**
10
+ * Interactive CLI keep-alive for hosted engines. Without these, a hibernated
11
+ * Anyrun pod returns 417 `pod_hibernated` and never wakes. Matches the
12
+ * cloud-agent interactive keep-alive shape (lower ≤ upper, seconds).
13
+ */
14
+ export declare const PROD_ENGINE_WAKE_HEADERS: Readonly<Record<string, string>>;
15
+ export interface ResolveProdTargetOptions {
16
+ dir: string;
17
+ cwd?: string;
18
+ /** Explicit deployment slug; otherwise derived from `--dir` basename. */
19
+ slug?: string;
20
+ team?: string;
21
+ apiKey?: string;
22
+ fetchImpl?: typeof fetch;
23
+ err?: (text: string) => void;
24
+ }
25
+ export interface ResolvedProdTarget {
26
+ agentUrl: string;
27
+ headers: Record<string, string>;
28
+ slug: string;
29
+ expiresAt: string;
30
+ }
31
+ /**
32
+ * Look up a running deployment and return its engineAccess URL/headers.
33
+ * Throws {@link Error} with a CLI-ready message on failure.
34
+ */
35
+ export declare function resolveProdTarget(options: ResolveProdTargetOptions): Promise<ResolvedProdTarget>;
36
+ /** Resolve the deployment slug the same way `deploy` does for a single dir. */
37
+ export declare function resolveProdSlug(options: {
38
+ dir: string;
39
+ cwd?: string;
40
+ slug?: string;
41
+ }): string;
42
+ //# sourceMappingURL=resolve-prod-target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-prod-target.d.ts","sourceRoot":"","sources":["../../src/internal/resolve-prod-target.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGrE,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CA+D7B;AAWD,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAgBT"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Resolve a hosted (managed) agent-serve deployment into a base URL +
3
+ * request headers for chat/run/call/eval `--prod`.
4
+ *
5
+ * Uses short-lived `engineAccess` from the deployment status route
6
+ * (Cursor API key on the management API; `X-Anyrun-Port-Token` on the
7
+ * engine). Alias tokens are out of scope here.
8
+ */
9
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
10
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
11
+ return new (P || (P = Promise))(function (resolve, reject) {
12
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
13
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
14
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
15
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
16
+ });
17
+ };
18
+ import { basename, resolve } from "node:path";
19
+ import { resolveDeployAuth } from "./cli-deploy.js";
20
+ import { DeployApiError, slugFromDirectoryName, validateDeploymentSlug, } from "./deploy-client.js";
21
+ import { CLI_COMMAND_NAME as CLI } from "./distribution.js";
22
+ import { stderrPalette } from "./terminal-style.js";
23
+ /**
24
+ * Interactive CLI keep-alive for hosted engines. Without these, a hibernated
25
+ * Anyrun pod returns 417 `pod_hibernated` and never wakes. Matches the
26
+ * cloud-agent interactive keep-alive shape (lower ≤ upper, seconds).
27
+ */
28
+ export const PROD_ENGINE_WAKE_HEADERS = {
29
+ "x-anyrun-hibernation-lower-bound-s": "1800",
30
+ "x-anyrun-hibernation-upper-bound-s": "3600",
31
+ };
32
+ /**
33
+ * Look up a running deployment and return its engineAccess URL/headers.
34
+ * Throws {@link Error} with a CLI-ready message on failure.
35
+ */
36
+ export function resolveProdTarget(options) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ var _a;
39
+ const err = (_a = options.err) !== null && _a !== void 0 ? _a : ((text) => void process.stderr.write(text));
40
+ const slug = resolveProdSlug(options);
41
+ const auth = yield resolveDeployAuth({
42
+ team: options.team,
43
+ apiKey: options.apiKey,
44
+ fetchImpl: options.fetchImpl,
45
+ err,
46
+ });
47
+ if (typeof auth === "number") {
48
+ throw new Error(`Could not resolve Cursor credentials/team for --prod (see above).`);
49
+ }
50
+ let detail;
51
+ try {
52
+ detail = yield auth.client.getDeployment({
53
+ teamId: auth.teamId,
54
+ slug,
55
+ });
56
+ }
57
+ catch (error) {
58
+ if (error instanceof DeployApiError) {
59
+ throw new Error(`Deployment "${slug}" (team ${auth.teamId}): ${error.message}`);
60
+ }
61
+ throw error;
62
+ }
63
+ // `degraded` still serves the previous ACTIVE engine; allow runtime access
64
+ // when the control plane minted engineAccess for it.
65
+ const access = detail.engineAccess;
66
+ const statusOk = detail.status === "running" || detail.status === "degraded";
67
+ if (!statusOk) {
68
+ const lastError = detail.lastError === null || detail.lastError === undefined
69
+ ? ""
70
+ : ` ${sanitizeCustomerFacingDetail(detail.lastError)}`;
71
+ throw new Error(`Deployment "${slug}" is ${detail.status}, not running.${lastError}\n` +
72
+ `Deploy or wait: \`${CLI} deploy --slug ${slug}\` / \`${CLI} deployment ${slug}\``);
73
+ }
74
+ if (access === null || access === undefined) {
75
+ throw new Error(`Deployment "${slug}" is ${detail.status} but is not reachable yet. ` +
76
+ `Try \`${CLI} deployment ${slug}\` or redeploy.`);
77
+ }
78
+ err(`${stderrPalette().dim(`Using hosted deployment "${slug}".`)}\n`);
79
+ return {
80
+ agentUrl: access.url.replace(/\/$/, ""),
81
+ headers: Object.assign(Object.assign({}, access.headers), PROD_ENGINE_WAKE_HEADERS),
82
+ slug,
83
+ expiresAt: access.expiresAt,
84
+ };
85
+ });
86
+ }
87
+ /** Strip obvious hosting internals from customer-facing error fragments. */
88
+ function sanitizeCustomerFacingDetail(message) {
89
+ return message
90
+ .replace(/https?:\/\/\S+/gi, "[url]")
91
+ .replace(/\bpod-[a-z0-9]+\b/gi, "[runtime]")
92
+ .replace(/\banyrun\b/gi, "runtime")
93
+ .replace(/\bcursorvm\.com\b/gi, "host");
94
+ }
95
+ /** Resolve the deployment slug the same way `deploy` does for a single dir. */
96
+ export function resolveProdSlug(options) {
97
+ var _a;
98
+ if (options.slug !== undefined && options.slug !== "") {
99
+ const slugError = validateDeploymentSlug(options.slug);
100
+ if (slugError !== undefined) {
101
+ throw new Error(slugError);
102
+ }
103
+ return options.slug;
104
+ }
105
+ const dir = resolve((_a = options.cwd) !== null && _a !== void 0 ? _a : process.cwd(), options.dir);
106
+ const derived = slugFromDirectoryName(basename(dir));
107
+ if (derived === undefined) {
108
+ throw new Error(`Could not derive a deployment slug from the directory name ${JSON.stringify(basename(dir))}; pass --slug.`);
109
+ }
110
+ return derived;
111
+ }
@@ -6,15 +6,15 @@
6
6
  * compact {@link Trajectory} plus the continuation token for follow-ups.
7
7
  */
8
8
  import type { SessionEvent, SessionPurpose } from "../types.js";
9
+ import { type RequestAuth } from "./request-headers.js";
9
10
  import { type Trajectory } from "./trajectory.js";
10
11
  /** Thrown when a turn stream exceeds `timeoutMs`; carries the session id. */
11
12
  export declare class RunSessionTimeoutError extends Error {
12
13
  readonly sessionId: string;
13
14
  constructor(message: string, sessionId: string);
14
15
  }
15
- export interface RunClientOptions {
16
+ export interface RunClientOptions extends RequestAuth {
16
17
  baseUrl: string;
17
- bearerToken?: string;
18
18
  /** Abort a hung turn. */
19
19
  timeoutMs?: number;
20
20
  /** Called for each stream event as it arrives (for CLI progress). */
@@ -1 +1 @@
1
- {"version":3,"file":"run-client.d.ts","sourceRoot":"","sources":["../../src/internal/run-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEnE,6EAA6E;AAC7E,qBAAa,sBAAuB,SAAQ,KAAK;IAG7C,QAAQ,CAAC,SAAS,EAAE,MAAM;IAF5B,YACE,OAAO,EAAE,MAAM,EACN,SAAS,EAAE,MAAM,EAI3B;CACF;AACD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,OAAO,CAAC;CACb;AAQD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,gBAAgB,GAAG;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC,GACA,OAAO,CAAC,gBAAgB,CAAC,CAuD3B"}
1
+ {"version":3,"file":"run-client.d.ts","sourceRoot":"","sources":["../../src/internal/run-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEnE,6EAA6E;AAC7E,qBAAa,sBAAuB,SAAQ,KAAK;IAG7C,QAAQ,CAAC,SAAS,EAAE,MAAM;IAF5B,YACE,OAAO,EAAE,MAAM,EACN,SAAS,EAAE,MAAM,EAI3B;CACF;AACD,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,OAAO,CAAC;CACb;AAQD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,gBAAgB,GAAG;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC,GACA,OAAO,CAAC,gBAAgB,CAAC,CAuD3B"}
@@ -14,6 +14,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
14
14
  step((generator = generator.apply(thisArg, _arguments || [])).next());
15
15
  });
16
16
  };
17
+ import { mergeRequestHeaders } from "./request-headers.js";
17
18
  import { buildTrajectory } from "./trajectory.js";
18
19
  /** Thrown when a turn stream exceeds `timeoutMs`; carries the session id. */
19
20
  export class RunSessionTimeoutError extends Error {
@@ -42,17 +43,24 @@ export function runSession(options) {
42
43
  let continuationToken = options.continuationToken;
43
44
  const allEvents = [];
44
45
  let nextEventIndex = 0;
46
+ const auth = {
47
+ bearerToken: options.bearerToken,
48
+ headers: options.headers,
49
+ };
45
50
  for (const message of options.messages) {
46
- const turn = yield runOneTurn(Object.assign(Object.assign(Object.assign({ baseUrl,
51
+ const turn = yield runOneTurn({
52
+ baseUrl,
47
53
  message,
48
54
  sessionId,
49
- continuationToken, startIndex: sessionId === undefined ? 0 : nextEventIndex, bearerToken: options.bearerToken, timeoutMs: options.timeoutMs, onEvent: options.onEvent }, (sessionId === undefined && options.purpose !== undefined
50
- ? { purpose: options.purpose }
51
- : {})), (sessionId === undefined && options.workspaceDir !== undefined
52
- ? { workspaceDir: options.workspaceDir }
53
- : {})), (sessionId === undefined && options.workspaceFiles !== undefined
54
- ? { workspaceFiles: options.workspaceFiles }
55
- : {})));
55
+ continuationToken,
56
+ startIndex: sessionId === undefined ? 0 : nextEventIndex,
57
+ auth,
58
+ timeoutMs: options.timeoutMs,
59
+ onEvent: options.onEvent,
60
+ purpose: sessionId === undefined ? options.purpose : undefined,
61
+ workspaceDir: sessionId === undefined ? options.workspaceDir : undefined,
62
+ workspaceFiles: sessionId === undefined ? options.workspaceFiles : undefined,
63
+ });
56
64
  sessionId = turn.sessionId;
57
65
  continuationToken = turn.continuationToken;
58
66
  allEvents.push(...turn.events);
@@ -77,11 +85,17 @@ function runOneTurn(args) {
77
85
  let sessionId = args.sessionId;
78
86
  let continuationToken = args.continuationToken;
79
87
  if (sessionId === undefined) {
80
- const created = yield postJson(args.baseUrl, "/v1/session", Object.assign(Object.assign(Object.assign({ message: args.message }, (args.purpose === undefined ? {} : { purpose: args.purpose })), (args.workspaceDir === undefined
81
- ? {}
82
- : { workspaceDir: args.workspaceDir })), (args.workspaceFiles === undefined
83
- ? {}
84
- : { workspaceFiles: args.workspaceFiles })), args.bearerToken);
88
+ const body = { message: args.message };
89
+ if (args.purpose !== undefined) {
90
+ body.purpose = args.purpose;
91
+ }
92
+ if (args.workspaceDir !== undefined) {
93
+ body.workspaceDir = args.workspaceDir;
94
+ }
95
+ if (args.workspaceFiles !== undefined) {
96
+ body.workspaceFiles = args.workspaceFiles;
97
+ }
98
+ const created = yield postJson(args.baseUrl, "/v1/session", body, args.auth);
85
99
  if (created.status >= 400 || created.body.ok === false) {
86
100
  throw new Error(`POST /v1/session failed: ${(_a = str(created.body.error)) !== null && _a !== void 0 ? _a : created.status} ${(_b = str(created.body.message)) !== null && _b !== void 0 ? _b : ""}`.trim());
87
101
  }
@@ -89,7 +103,7 @@ function runOneTurn(args) {
89
103
  continuationToken = str(created.body.continuationToken);
90
104
  }
91
105
  else {
92
- const resp = yield postJson(args.baseUrl, `/v1/session/${sessionId}`, { message: args.message, continuationToken }, args.bearerToken);
106
+ const resp = yield postJson(args.baseUrl, `/v1/session/${sessionId}`, { message: args.message, continuationToken }, args.auth);
93
107
  if (resp.status >= 400 || resp.body.ok === false) {
94
108
  throw new Error(`follow-up failed: ${(_c = str(resp.body.error)) !== null && _c !== void 0 ? _c : resp.status}: ${(_d = str(resp.body.message)) !== null && _d !== void 0 ? _d : ""}`.trim());
95
109
  }
@@ -102,7 +116,7 @@ function runOneTurn(args) {
102
116
  baseUrl: args.baseUrl,
103
117
  sessionId,
104
118
  startIndex: args.startIndex,
105
- bearerToken: args.bearerToken,
119
+ auth: args.auth,
106
120
  timeoutMs: args.timeoutMs,
107
121
  onEvent: args.onEvent,
108
122
  });
@@ -121,7 +135,7 @@ function collectStream(args) {
121
135
  : setTimeout(() => controller.abort(), args.timeoutMs);
122
136
  try {
123
137
  const resp = yield fetch(`${args.baseUrl}/v1/session/${args.sessionId}/stream?startIndex=${args.startIndex}`, {
124
- headers: authHeaders(args.bearerToken),
138
+ headers: mergeRequestHeaders(args.auth),
125
139
  signal: controller.signal,
126
140
  });
127
141
  if (!resp.ok || resp.body === null) {
@@ -178,16 +192,11 @@ function collectStream(args) {
178
192
  }
179
193
  });
180
194
  }
181
- function authHeaders(bearerToken) {
182
- return bearerToken === undefined
183
- ? {}
184
- : { authorization: `Bearer ${bearerToken}` };
185
- }
186
- function postJson(baseUrl, path, body, bearerToken) {
195
+ function postJson(baseUrl, path, body, auth) {
187
196
  return __awaiter(this, void 0, void 0, function* () {
188
197
  const resp = yield fetch(`${baseUrl}${path}`, {
189
198
  method: "POST",
190
- headers: Object.assign({ "content-type": "application/json" }, authHeaders(bearerToken)),
199
+ headers: Object.assign({ "content-type": "application/json" }, mergeRequestHeaders(auth)),
191
200
  body: JSON.stringify(body),
192
201
  });
193
202
  const text = yield resp.text();
@@ -200,6 +209,12 @@ function postJson(baseUrl, path, body, bearerToken) {
200
209
  parsed = { message: text };
201
210
  }
202
211
  }
212
+ const anyrunReason = resp.headers.get("x-anyrun-failure-reason");
213
+ if (anyrunReason !== null &&
214
+ anyrunReason !== "" &&
215
+ (parsed.message === undefined || parsed.message === "")) {
216
+ parsed.message = anyrunReason;
217
+ }
203
218
  return { status: resp.status, body: parsed };
204
219
  });
205
220
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAOhB,YAAY,EACb,MAAM,aAAa,CAAC;AAkFrB,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AAapE,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;CACvB;AAYD,6EAA6E;AAC7E,MAAM,WAAW,0BAA0B;IACzC,oEAAoE;IACpE,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,GAAE,YAAY,GAAG,0BAA+B,GACtD,OAAO,CAAC,gBAAgB,CAAC,CAmf3B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2BH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAOhB,YAAY,EACb,MAAM,aAAa,CAAC;AAoFrB,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AAapE,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;CACvB;AAYD,6EAA6E;AAC7E,MAAM,WAAW,0BAA0B;IACzC,oEAAoE;IACpE,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,GAAE,YAAY,GAAG,0BAA+B,GACtD,OAAO,CAAC,gBAAgB,CAAC,CAylB3B"}