@cursor/july 0.1.26 → 0.1.28

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 (324) hide show
  1. package/dist/ab.d.ts +6 -0
  2. package/dist/ab.d.ts.map +1 -1
  3. package/dist/ab.js +1 -0
  4. package/dist/artifacts.d.ts +34 -0
  5. package/dist/artifacts.d.ts.map +1 -0
  6. package/dist/artifacts.js +57 -0
  7. package/dist/bin/agent-serve.js +43 -12
  8. package/dist/channels/github/github-channel.d.ts +1 -1
  9. package/dist/channels/github/github-channel.d.ts.map +1 -1
  10. package/dist/channels/github/github-channel.js +14 -1
  11. package/dist/channels/github/types.d.ts +6 -1
  12. package/dist/channels/github/types.d.ts.map +1 -1
  13. package/dist/channels/slack/api.d.ts +2 -1
  14. package/dist/channels/slack/api.d.ts.map +1 -1
  15. package/dist/channels/slack/api.js +1 -0
  16. package/dist/channels/slack/auth.d.ts +13 -13
  17. package/dist/channels/slack/auth.d.ts.map +1 -1
  18. package/dist/channels/slack/auth.js +19 -10
  19. package/dist/channels/slack/cursor-account.d.ts +2 -1
  20. package/dist/channels/slack/cursor-account.d.ts.map +1 -1
  21. package/dist/channels/slack/cursor-account.js +3 -1
  22. package/dist/channels/slack/defaults.d.ts +7 -4
  23. package/dist/channels/slack/defaults.d.ts.map +1 -1
  24. package/dist/channels/slack/defaults.js +14 -4
  25. package/dist/channels/slack/dispatch.d.ts +10 -1
  26. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  27. package/dist/channels/slack/dispatch.js +59 -21
  28. package/dist/channels/slack/external-policy.d.ts +27 -0
  29. package/dist/channels/slack/external-policy.d.ts.map +1 -0
  30. package/dist/channels/slack/external-policy.js +53 -0
  31. package/dist/channels/slack/index.d.ts +1 -0
  32. package/dist/channels/slack/index.d.ts.map +1 -1
  33. package/dist/channels/slack/index.js +1 -0
  34. package/dist/channels/slack/interactive.d.ts +8 -1
  35. package/dist/channels/slack/interactive.d.ts.map +1 -1
  36. package/dist/channels/slack/interactive.js +43 -15
  37. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  38. package/dist/channels/slack/slack-channel.js +22 -8
  39. package/dist/channels/slack/types.d.ts +16 -1
  40. package/dist/channels/slack/types.d.ts.map +1 -1
  41. package/dist/docs/404.html +2 -2
  42. package/dist/docs/ab.html +3 -3
  43. package/dist/docs/assets/{app.DYcC9FY-.js → app.CqjrYaT2.js} +1 -1
  44. package/dist/docs/assets/chunks/@localSearchIndexroot.VWQoPFJ1.js +1 -0
  45. package/dist/docs/assets/chunks/{VPLocalSearchBox.o4N_knTV.js → VPLocalSearchBox.ag-MwUel.js} +1 -1
  46. package/dist/docs/assets/chunks/{theme.DQ-njyo0.js → theme.BS-DJWat.js} +2 -2
  47. package/dist/docs/assets/{guides_slack.md.D_xFKlnF.js → guides_slack.md.CjmJSvZS.js} +8 -4
  48. package/dist/docs/assets/guides_slack.md.CjmJSvZS.lean.js +1 -0
  49. package/dist/docs/assets/guides_webhooks.md.wSOYas3X.js +183 -0
  50. package/dist/docs/assets/{guides_webhooks.md.B1EswtUu.lean.js → guides_webhooks.md.wSOYas3X.lean.js} +1 -1
  51. package/dist/docs/assets/{index.md.Dfv5ic9t.js → index.md.CH_s5uZe.js} +1 -1
  52. package/dist/docs/assets/{reference_channels.md.DdmiKgqf.js → reference_channels.md.CDhTRfUz.js} +2 -2
  53. package/dist/docs/assets/{reference_channels.md.DdmiKgqf.lean.js → reference_channels.md.CDhTRfUz.lean.js} +1 -1
  54. package/dist/docs/building-with-agents.html +3 -3
  55. package/dist/docs/concepts.html +3 -3
  56. package/dist/docs/deployment.html +3 -3
  57. package/dist/docs/evals.html +3 -3
  58. package/dist/docs/example-agents/approval-buddy.html +3 -3
  59. package/dist/docs/example-agents/benny.html +3 -3
  60. package/dist/docs/example-agents/bugbot.html +3 -3
  61. package/dist/docs/example-agents/codebase-wiki.html +3 -3
  62. package/dist/docs/example-agents/codeowners-review.html +3 -3
  63. package/dist/docs/example-agents/concierge.html +3 -3
  64. package/dist/docs/example-agents/fsd.html +3 -3
  65. package/dist/docs/example-agents/index.html +3 -3
  66. package/dist/docs/example-agents/knowledge-base.html +3 -3
  67. package/dist/docs/example-agents/oncall.html +3 -3
  68. package/dist/docs/example-agents/security-reviewer.html +3 -3
  69. package/dist/docs/example-agents/slack-agent.html +3 -3
  70. package/dist/docs/example-agents/weather-agent.html +3 -3
  71. package/dist/docs/guides/agent-to-agent.html +3 -3
  72. package/dist/docs/guides/cloud-runtime.html +3 -3
  73. package/dist/docs/guides/github.html +3 -3
  74. package/dist/docs/guides/human-in-the-loop.html +3 -3
  75. package/dist/docs/guides/mcp-oauth.html +3 -3
  76. package/dist/docs/guides/slack.html +11 -7
  77. package/dist/docs/guides/webhooks.html +138 -5
  78. package/dist/docs/hashmap.json +1 -1
  79. package/dist/docs/hillclimbing.html +3 -3
  80. package/dist/docs/index.html +5 -5
  81. package/dist/docs/quickstart.html +3 -3
  82. package/dist/docs/reference/agent-config.html +3 -3
  83. package/dist/docs/reference/channels.html +5 -5
  84. package/dist/docs/reference/cli.html +3 -3
  85. package/dist/docs/reference/connections.html +3 -3
  86. package/dist/docs/reference/hooks.html +3 -3
  87. package/dist/docs/reference/http-api.html +3 -3
  88. package/dist/docs/reference/instructions.html +3 -3
  89. package/dist/docs/reference/playground.html +3 -3
  90. package/dist/docs/reference/project-layout.html +3 -3
  91. package/dist/docs/reference/prompt.html +3 -3
  92. package/dist/docs/reference/schedules.html +3 -3
  93. package/dist/docs/reference/sessions.html +3 -3
  94. package/dist/docs/reference/skills.html +3 -3
  95. package/dist/docs/reference/subagents.html +3 -3
  96. package/dist/docs/reference/tools.html +3 -3
  97. package/dist/docs/scaffolding-agents.html +3 -3
  98. package/dist/docs/storage.html +3 -3
  99. package/dist/docs/troubleshooting.html +3 -3
  100. package/dist/evals/assertions.d.ts +10 -1
  101. package/dist/evals/assertions.d.ts.map +1 -1
  102. package/dist/evals/assertions.js +12 -0
  103. package/dist/evals.d.ts +1 -1
  104. package/dist/evals.d.ts.map +1 -1
  105. package/dist/index.d.ts +1 -0
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +1 -0
  108. package/dist/internal/ab-fold.d.ts.map +1 -1
  109. package/dist/internal/ab-fold.js +4 -0
  110. package/dist/internal/ab-snapshot.d.ts.map +1 -1
  111. package/dist/internal/ab-snapshot.js +1 -0
  112. package/dist/internal/artifacts-store.d.ts +45 -0
  113. package/dist/internal/artifacts-store.d.ts.map +1 -0
  114. package/dist/internal/artifacts-store.js +250 -0
  115. package/dist/internal/builtin-tools/artifacts.d.ts +10 -0
  116. package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -0
  117. package/dist/internal/builtin-tools/artifacts.js +73 -0
  118. package/dist/internal/builtin-tools/index.d.ts +8 -1
  119. package/dist/internal/builtin-tools/index.d.ts.map +1 -1
  120. package/dist/internal/builtin-tools/index.js +15 -0
  121. package/dist/internal/cli-ax.d.ts +19 -0
  122. package/dist/internal/cli-ax.d.ts.map +1 -1
  123. package/dist/internal/cli-ax.js +196 -57
  124. package/dist/internal/cli-slack.d.ts.map +1 -1
  125. package/dist/internal/cli-slack.js +14 -6
  126. package/dist/internal/cursor-slack-relay.d.ts +2 -0
  127. package/dist/internal/cursor-slack-relay.d.ts.map +1 -1
  128. package/dist/internal/cursor-slack-relay.js +1 -0
  129. package/dist/internal/deploy-client.d.ts +2 -0
  130. package/dist/internal/deploy-client.d.ts.map +1 -1
  131. package/dist/internal/deploy-client.js +1 -0
  132. package/dist/internal/discovery.d.ts.map +1 -1
  133. package/dist/internal/discovery.js +91 -3
  134. package/dist/internal/distribution.d.ts.map +1 -1
  135. package/dist/internal/distribution.js +1 -0
  136. package/dist/internal/model-pricing.d.ts +49 -0
  137. package/dist/internal/model-pricing.d.ts.map +1 -0
  138. package/dist/internal/model-pricing.js +377 -0
  139. package/dist/internal/reminder-runner.d.ts.map +1 -1
  140. package/dist/internal/reminder-runner.js +1 -0
  141. package/dist/internal/schedule-runner.d.ts.map +1 -1
  142. package/dist/internal/schedule-runner.js +1 -0
  143. package/dist/internal/sdk-runner.d.ts.map +1 -1
  144. package/dist/internal/sdk-runner.js +9 -1
  145. package/dist/internal/server.d.ts.map +1 -1
  146. package/dist/internal/server.js +49 -5
  147. package/dist/internal/session-cost.d.ts +49 -0
  148. package/dist/internal/session-cost.d.ts.map +1 -0
  149. package/dist/internal/session-cost.js +175 -0
  150. package/dist/internal/session-engine.d.ts +35 -1
  151. package/dist/internal/session-engine.d.ts.map +1 -1
  152. package/dist/internal/session-engine.js +128 -7
  153. package/dist/internal/storage-coordinator.d.ts +15 -0
  154. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  155. package/dist/internal/storage-coordinator.js +52 -0
  156. package/dist/internal/trajectory.d.ts +9 -1
  157. package/dist/internal/trajectory.d.ts.map +1 -1
  158. package/dist/internal/trajectory.js +32 -5
  159. package/dist/playground/assets/index-Bul1WfrB.css +1 -0
  160. package/dist/playground/assets/index-CkN74U_L.js +87 -0
  161. package/dist/playground/index.html +2 -2
  162. package/dist/storage.d.ts +4 -0
  163. package/dist/storage.d.ts.map +1 -1
  164. package/dist/storage.js +4 -0
  165. package/dist/types.d.ts +164 -1
  166. package/dist/types.d.ts.map +1 -1
  167. package/docs/README.md +1 -0
  168. package/docs/guides/slack.md +32 -7
  169. package/docs/guides/webhooks.md +183 -0
  170. package/docs/reference/channels.md +2 -1
  171. package/package.json +26 -26
  172. package/skills/setup-slack/SKILL.md +3 -0
  173. package/src/ab.ts +7 -0
  174. package/src/bin/agent-serve.ts +42 -5
  175. package/src/channels/slack/auth.ts +29 -22
  176. package/src/channels/slack/cursor-account.ts +2 -0
  177. package/src/channels/slack/defaults.ts +24 -4
  178. package/src/channels/slack/dispatch.ts +42 -1
  179. package/src/channels/slack/external-policy.ts +62 -0
  180. package/src/channels/slack/index.ts +1 -0
  181. package/src/channels/slack/interactive.ts +42 -10
  182. package/src/channels/slack/slack-channel.ts +20 -3
  183. package/src/channels/slack/types.ts +12 -0
  184. package/src/internal/ab-fold.ts +4 -0
  185. package/src/internal/ab-snapshot.ts +1 -0
  186. package/src/internal/cli-ax.ts +205 -34
  187. package/src/internal/cursor-slack-relay.ts +3 -0
  188. package/src/internal/deploy-client.ts +3 -0
  189. package/src/internal/discovery.ts +8 -1
  190. package/src/internal/model-pricing.ts +426 -0
  191. package/src/internal/sdk-runner.ts +10 -2
  192. package/src/internal/server.ts +9 -5
  193. package/src/internal/session-cost.ts +231 -0
  194. package/src/internal/session-engine.ts +28 -0
  195. package/src/internal/trajectory.ts +45 -3
  196. package/src/types.ts +24 -1
  197. package/dist/channels/github/instrument.d.ts +0 -20
  198. package/dist/channels/github/instrument.d.ts.map +0 -1
  199. package/dist/docs/assets/chunks/@localSearchIndexroot.BQTzJjR_.js +0 -1
  200. package/dist/docs/assets/guides_slack.md.D_xFKlnF.lean.js +0 -1
  201. package/dist/docs/assets/guides_webhooks.md.B1EswtUu.js +0 -50
  202. package/dist/internal/json-dir-store.d.ts +0 -32
  203. package/dist/internal/json-dir-store.d.ts.map +0 -1
  204. package/dist/internal/json-dir-store.js +0 -100
  205. package/dist/playground/assets/index-CjOQ4hN9.css +0 -1
  206. package/dist/playground/assets/index-DqXdAFGa.js +0 -85
  207. package/src/bin/agent-serve.version.test.ts +0 -64
  208. package/src/channels/github/api.test.ts +0 -64
  209. package/src/channels/github/auth.test.ts +0 -105
  210. package/src/channels/github/cursor-account.test.ts +0 -204
  211. package/src/channels/github/forward.test.ts +0 -457
  212. package/src/channels/github/github.test.ts +0 -985
  213. package/src/channels/github/replay.test.ts +0 -179
  214. package/src/channels/slack/api.post-message.test.ts +0 -148
  215. package/src/channels/slack/approvals.test.ts +0 -328
  216. package/src/channels/slack/block-actions.test.ts +0 -469
  217. package/src/channels/slack/bot-mentions.test.ts +0 -267
  218. package/src/channels/slack/channel-watch.test.ts +0 -363
  219. package/src/channels/slack/cursor-account.test.ts +0 -301
  220. package/src/channels/slack/defaults.final-post.test.ts +0 -182
  221. package/src/channels/slack/dispatch.test.ts +0 -875
  222. package/src/channels/slack/eval-directive.test.ts +0 -273
  223. package/src/channels/slack/message-body.test.ts +0 -54
  224. package/src/channels/slack/nudge-store.test.ts +0 -143
  225. package/src/channels/slack/slack.test.ts +0 -391
  226. package/src/channels/slack/stop.test.ts +0 -23
  227. package/src/channels/slack/thread-context.test.ts +0 -202
  228. package/src/evals/assertions.test.ts +0 -617
  229. package/src/evals/expect.test.ts +0 -144
  230. package/src/evals/judge.test.ts +0 -181
  231. package/src/evals/loaders.test.ts +0 -132
  232. package/src/evals/matchers.test.ts +0 -95
  233. package/src/evals/reporters.test.ts +0 -303
  234. package/src/evals/run-facts.test.ts +0 -259
  235. package/src/internal/ab-snapshot.test.ts +0 -325
  236. package/src/internal/approval-gate.test.ts +0 -49
  237. package/src/internal/approvals.integration.test.ts +0 -383
  238. package/src/internal/artifacts-store.test.ts +0 -283
  239. package/src/internal/authored-loaders.test.ts +0 -31
  240. package/src/internal/builtin-tools/artifacts.test.ts +0 -247
  241. package/src/internal/builtin-tools/reminders.test.ts +0 -201
  242. package/src/internal/channel-route-schema.test.ts +0 -294
  243. package/src/internal/chat-attach.test.ts +0 -262
  244. package/src/internal/cli-deploy.test.ts +0 -1991
  245. package/src/internal/cli-docs.test.ts +0 -161
  246. package/src/internal/cli-mcp.test.ts +0 -789
  247. package/src/internal/cli-skills.test.ts +0 -133
  248. package/src/internal/cli-slack.test.ts +0 -1654
  249. package/src/internal/cloud-merge.test.ts +0 -74
  250. package/src/internal/cron.test.ts +0 -22
  251. package/src/internal/cursor/account-mcp.test.ts +0 -807
  252. package/src/internal/cursor/backend-client.test.ts +0 -591
  253. package/src/internal/cursor/credentials.test.ts +0 -351
  254. package/src/internal/cursor/github-credentials.test.ts +0 -136
  255. package/src/internal/cursor-account-mcp-auth.test.ts +0 -310
  256. package/src/internal/cursor-account.integration.test.ts +0 -441
  257. package/src/internal/cursor-event-relay.test.ts +0 -746
  258. package/src/internal/cursor-github-credentials.integration.test.ts +0 -271
  259. package/src/internal/cursor-slack-relay.test.ts +0 -525
  260. package/src/internal/deploy-source.test.ts +0 -111
  261. package/src/internal/discovery.artifact-tool.test.ts +0 -136
  262. package/src/internal/discovery.artifacts.test.ts +0 -119
  263. package/src/internal/discovery.builtin-tools.test.ts +0 -94
  264. package/src/internal/discovery.concurrency.test.ts +0 -60
  265. package/src/internal/discovery.cursor-account.test.ts +0 -133
  266. package/src/internal/discovery.cwd.test.ts +0 -83
  267. package/src/internal/discovery.hosting.test.ts +0 -80
  268. package/src/internal/discovery.identity.test.ts +0 -44
  269. package/src/internal/docs-site.test.ts +0 -66
  270. package/src/internal/duration.test.ts +0 -29
  271. package/src/internal/eval-judge-model.test.ts +0 -187
  272. package/src/internal/eval-run-store.cancel.test.ts +0 -142
  273. package/src/internal/eval-run-store.storage.test.ts +0 -211
  274. package/src/internal/eval-runner.http.test.ts +0 -403
  275. package/src/internal/eval-runner.run.test.ts +0 -928
  276. package/src/internal/evals-client.test.ts +0 -307
  277. package/src/internal/event-mapper.test.ts +0 -243
  278. package/src/internal/github-fanout.test.ts +0 -213
  279. package/src/internal/handleAgentServeTrigger.test.ts +0 -185
  280. package/src/internal/host-kv.test.ts +0 -82
  281. package/src/internal/host-platforms.test.ts +0 -126
  282. package/src/internal/http-channel.test.ts +0 -402
  283. package/src/internal/init-project.test.ts +0 -270
  284. package/src/internal/install-cursor-skills.test.ts +0 -262
  285. package/src/internal/local-env.test.ts +0 -120
  286. package/src/internal/log-ring.test.ts +0 -31
  287. package/src/internal/logs-client.test.ts +0 -350
  288. package/src/internal/mcp-endpoint.test.ts +0 -436
  289. package/src/internal/mcp-host.test.ts +0 -298
  290. package/src/internal/mcp-oauth.test.ts +0 -148
  291. package/src/internal/net.test.ts +0 -17
  292. package/src/internal/peer-connections.test.ts +0 -128
  293. package/src/internal/peer-mcp.integration.test.ts +0 -289
  294. package/src/internal/playground/toolchain.test.ts +0 -53
  295. package/src/internal/playground-cli.test.ts +0 -187
  296. package/src/internal/playground-proxy.test.ts +0 -376
  297. package/src/internal/prompt-context.integration.test.ts +0 -232
  298. package/src/internal/prompt-context.test.ts +0 -127
  299. package/src/internal/reminder-runner.test.ts +0 -432
  300. package/src/internal/reminder-store.test.ts +0 -53
  301. package/src/internal/request-headers.test.ts +0 -27
  302. package/src/internal/resolve-prod-target.test.ts +0 -787
  303. package/src/internal/resolved-connections.test.ts +0 -295
  304. package/src/internal/router.test.ts +0 -57
  305. package/src/internal/sdk-runner.test.ts +0 -290
  306. package/src/internal/server.artifacts.test.ts +0 -334
  307. package/src/internal/session-engine.artifacts.test.ts +0 -293
  308. package/src/internal/session-engine.coalesce.test.ts +0 -169
  309. package/src/internal/session-engine.concurrency.test.ts +0 -250
  310. package/src/internal/session-engine.host-oauth-mcp.test.ts +0 -110
  311. package/src/internal/session-engine.interrupt.test.ts +0 -577
  312. package/src/internal/session-engine.storage.test.ts +0 -547
  313. package/src/internal/session-urls.test.ts +0 -28
  314. package/src/internal/sessions-client.test.ts +0 -518
  315. package/src/internal/storage-coordinator.test.ts +0 -517
  316. package/src/internal/tool-call.test.ts +0 -458
  317. package/src/internal/tool-result.test.ts +0 -52
  318. package/src/internal/trajectory.approvals.test.ts +0 -83
  319. package/src/internal/trajectory.subagents.test.ts +0 -198
  320. package/src/internal/turn-governor.test.ts +0 -137
  321. package/src/internal/update-check.test.ts +0 -485
  322. package/src/internal/workspace.test.ts +0 -207
  323. package/src/storage-backends/cursor-hosted.test.ts +0 -121
  324. /package/dist/docs/assets/{index.md.Dfv5ic9t.lean.js → index.md.CH_s5uZe.lean.js} +0 -0
@@ -29,12 +29,13 @@ import { readdir, readFile, stat } from "node:fs/promises";
29
29
  import { basename, extname, isAbsolute, join, relative, resolve, } from "node:path";
30
30
  import { pathToFileURL } from "node:url";
31
31
  import { resolveABMaxPlaygroundSessions } from "../ab.js";
32
+ import { resolveArtifactsMax } from "../artifacts.js";
32
33
  import { httpChannel } from "../channels.js";
33
34
  import { cursorAccountServersHasMixedWildcard, DEFAULT_MODEL, MAX_RUNNING_TURNS_LIMIT, normalizeCursorAccountServers, toPublicCloudInfo, } from "../types.js";
34
35
  import { registerAuthoredModuleLoaders } from "./authored-loaders.js";
35
36
  import { normalizePositiveInt } from "./bounded-int.js";
36
37
  import { getDefinitionKind } from "./brand.js";
37
- import { builtinTools } from "./builtin-tools/index.js";
38
+ import { artifactBuiltinTool, builtinTools, TAG_ARTIFACT_TOOL_NAME, } from "./builtin-tools/index.js";
38
39
  import { isValidCron } from "./cron.js";
39
40
  import { parseFrontmatter } from "./frontmatter.js";
40
41
  import { isReservedSecretName, MAX_EGRESS_DOMAINS, validateEgressDomain, validateSecretName, } from "./hosting.js";
@@ -203,6 +204,8 @@ export function loadAgentProject(dir_1) {
203
204
  const abs = yield loadABs(ctx, agentDir);
204
205
  const abConfig = yield loadABConfig(ctx, agentDir);
205
206
  const storage = yield loadStorage(ctx, agentDir);
207
+ const artifacts = yield loadArtifacts(ctx, agentDir);
208
+ yield appendArtifactTool(ctx, agentDir, agent, artifacts);
206
209
  if (agentDir !== rootDir) {
207
210
  yield warnUnknownSlots(ctx, agentDir);
208
211
  }
@@ -218,6 +221,7 @@ export function loadAgentProject(dir_1) {
218
221
  abs,
219
222
  abConfig,
220
223
  storage,
224
+ artifacts,
221
225
  diagnostics,
222
226
  };
223
227
  });
@@ -261,6 +265,14 @@ function loadAgent(ctx, agentDir, options) {
261
265
  message: "builtinTools is not supported on subagents; ignoring.",
262
266
  });
263
267
  }
268
+ const artifactsPath = yield findModuleFile(agentDir, "artifacts");
269
+ if (artifactsPath !== undefined) {
270
+ ctx.diagnostics.push({
271
+ severity: "warning",
272
+ path: displayPath(ctx, artifactsPath),
273
+ message: "artifacts are not supported on subagents; ignoring.",
274
+ });
275
+ }
264
276
  return Object.assign(Object.assign(Object.assign(Object.assign({ name }, ((config === null || config === void 0 ? void 0 : config.description) === undefined
265
277
  ? {}
266
278
  : { 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: [] });
@@ -1297,6 +1309,68 @@ function loadStorage(ctx, agentDir) {
1297
1309
  return definition;
1298
1310
  });
1299
1311
  }
1312
+ // ============================================================================
1313
+ // Artifacts (agent/artifacts.ts)
1314
+ // ============================================================================
1315
+ function loadArtifacts(ctx, agentDir) {
1316
+ return __awaiter(this, void 0, void 0, function* () {
1317
+ var _a;
1318
+ const path = yield findModuleFile(agentDir, "artifacts");
1319
+ if (path === undefined) {
1320
+ return undefined;
1321
+ }
1322
+ const imported = yield importDefault(ctx, path, "artifacts");
1323
+ if (imported === undefined) {
1324
+ return undefined;
1325
+ }
1326
+ const definition = imported;
1327
+ if (definition.agentTool === true &&
1328
+ Object.keys((_a = definition.kinds) !== null && _a !== void 0 ? _a : {}).length === 0) {
1329
+ ctx.diagnostics.push({
1330
+ severity: "error",
1331
+ path: displayPath(ctx, path),
1332
+ message: "artifacts.agentTool requires kinds: the tag_artifact tool needs at least one declared kind; its descriptions are the tool prompt.",
1333
+ });
1334
+ }
1335
+ return definition;
1336
+ });
1337
+ }
1338
+ /**
1339
+ * Materialize the `tag_artifact` built-in when `defineArtifacts` set
1340
+ * `agentTool: true`. Appended after `loadAgent` because the tool is
1341
+ * generated from the artifacts kinds registry, not `AgentConfig.builtinTools`.
1342
+ */
1343
+ function appendArtifactTool(ctx, agentDir, agent, artifacts) {
1344
+ return __awaiter(this, void 0, void 0, function* () {
1345
+ var _a;
1346
+ const tool = artifactBuiltinTool(artifacts);
1347
+ if (tool === undefined) {
1348
+ return;
1349
+ }
1350
+ const artifactsPath = displayPath(ctx, (_a = (yield findModuleFile(agentDir, "artifacts"))) !== null && _a !== void 0 ? _a : join(agentDir, "artifacts.ts"));
1351
+ // TODO(artifacts-cloud): on cloud runtimes, ship tag_artifact as an
1352
+ // execution: "agent" script and have the host fold its action.result
1353
+ // stream events into artifact records — agent-tool calls already surface
1354
+ // durably in the session stream.
1355
+ if (agent.runtime === "cloud") {
1356
+ ctx.diagnostics.push({
1357
+ severity: "warning",
1358
+ path: artifactsPath,
1359
+ message: "tag_artifact is an in-process server tool (like builtinTools) and is not available on cloud agents; it is skipped.",
1360
+ });
1361
+ return;
1362
+ }
1363
+ if (agent.tools.some((t) => t.name === TAG_ARTIFACT_TOOL_NAME)) {
1364
+ ctx.diagnostics.push({
1365
+ severity: "warning",
1366
+ path: artifactsPath,
1367
+ message: `Authored tool "${TAG_ARTIFACT_TOOL_NAME}" shadows the built-in tool of the same name; the authored tool wins.`,
1368
+ });
1369
+ return;
1370
+ }
1371
+ agent.tools.push(tool);
1372
+ });
1373
+ }
1300
1374
  function resolveABName(definition, fallback) {
1301
1375
  if (typeof definition === "object" &&
1302
1376
  definition !== null &&
@@ -1341,6 +1415,7 @@ function loadSeedFiles(ctx, agentDir) {
1341
1415
  // ============================================================================
1342
1416
  export function projectInfo(project) {
1343
1417
  var _a, _b, _c, _d;
1418
+ var _e;
1344
1419
  const agent = project.agent;
1345
1420
  const httpRoutes = [
1346
1421
  { method: "POST", path: "/v1/session", url: "/v1/session" },
@@ -1444,7 +1519,13 @@ export function projectInfo(project) {
1444
1519
  },
1445
1520
  })), { storage: project.storage === undefined
1446
1521
  ? undefined
1447
- : { name: project.storage.name }, diagnostics: project.diagnostics });
1522
+ : { name: project.storage.name }, artifacts: project.artifacts === undefined
1523
+ ? undefined
1524
+ : {
1525
+ kinds: Object.keys((_e = project.artifacts.kinds) !== null && _e !== void 0 ? _e : {}),
1526
+ agentTool: project.artifacts.agentTool === true,
1527
+ max: resolveArtifactsMax(project.artifacts),
1528
+ }, diagnostics: project.diagnostics });
1448
1529
  }
1449
1530
  // ============================================================================
1450
1531
  // Shared helpers
@@ -1566,7 +1647,14 @@ function isModuleFile(fileName) {
1566
1647
  if (fileName.endsWith(".d.ts") || fileName.startsWith(".")) {
1567
1648
  return false;
1568
1649
  }
1569
- return MODULE_EXTENSIONS.has(extname(fileName));
1650
+ if (!MODULE_EXTENSIONS.has(extname(fileName))) {
1651
+ return false;
1652
+ }
1653
+ // Colocated unit tests (Vitest/Jest convention) are not definitions.
1654
+ // Without this, `channels/slack.test.ts` is scanned as a channel named
1655
+ // "slack.test", fails NAME_PATTERN, and the whole agent refuses to serve.
1656
+ const stem = moduleStem(fileName);
1657
+ return !stem.endsWith(".test") && !stem.endsWith(".spec");
1570
1658
  }
1571
1659
  function moduleStem(fileName) {
1572
1660
  return fileName.slice(0, -extname(fileName).length);
@@ -1 +1 @@
1
- {"version":3,"file":"distribution.d.ts","sourceRoot":"","sources":["../../src/internal/distribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;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,WAAW,aAAa,CAAC;AACtC,eAAO,MAAM,UAAU,EAAE,MAA2B,CAAC;AACrD,eAAO,MAAM,gBAAgB,EAAE,MAAiC,CAAC;AAEjE;;;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,CAsBzC,CAAC"}
1
+ {"version":3,"file":"distribution.d.ts","sourceRoot":"","sources":["../../src/internal/distribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;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,WAAW,aAAa,CAAC;AACtC,eAAO,MAAM,UAAU,EAAE,MAA2B,CAAC;AACrD,eAAO,MAAM,gBAAgB,EAAE,MAAiC,CAAC;AAEjE;;;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,CAuBzC,CAAC"}
@@ -91,6 +91,7 @@ export const AUTHORING_ENTRY_FILES = [
91
91
  ["evals/reporters", "evals/reporters.js"],
92
92
  ["evals/loaders", "evals/loaders.js"],
93
93
  ["ab", "ab.js"],
94
+ ["artifacts", "artifacts.js"],
94
95
  ["storage", "storage.js"],
95
96
  ["storage/file-kv", "storage-backends/file-kv.js"],
96
97
  ["storage/postgres-kv", "storage-backends/postgres-kv.js"],
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Best-effort dollar-cost estimation for agent turns.
3
+ *
4
+ * The Cursor harness streams token usage (`turn-ended`) but no dollar cost,
5
+ * and server-billed cost is only queryable for cloud agents — so the
6
+ * framework prices token usage against a built-in snapshot of Cursor's
7
+ * published per-model API rates. Estimates are marked `source: "estimate"`
8
+ * everywhere they surface (traces, playground, A/B metrics, CLI); the billed
9
+ * amount on the Cursor dashboard remains the source of truth.
10
+ *
11
+ * Unknown models produce no estimate rather than a wrong one. Deployments
12
+ * can extend or correct the table without a package upgrade via the
13
+ * `AGENT_SERVE_MODEL_PRICING` environment variable (a JSON object merged
14
+ * over the defaults, keyed by model id).
15
+ */
16
+ import type { ModelSetting, TurnCost, TurnUsage } from "../types.js";
17
+ /** USD per million tokens for one pricing tier. */
18
+ export interface ModelPricingTier {
19
+ inputUsdPerMTok: number;
20
+ outputUsdPerMTok: number;
21
+ cacheReadUsdPerMTok: number;
22
+ /** Defaults to {@link inputUsdPerMTok} when omitted (provider convention). */
23
+ cacheWriteUsdPerMTok?: number;
24
+ }
25
+ export interface ModelPricing extends ModelPricingTier {
26
+ /** Rates when the model's `fast` parameter is `"true"`. */
27
+ fast?: ModelPricingTier;
28
+ }
29
+ /**
30
+ * Snapshot of Cursor API per-model token rates (USD per million tokens).
31
+ * Keyed by normalized model id; family aliases (`sonnet`, `gpt`, …) point at
32
+ * the model they currently resolve to.
33
+ */
34
+ export declare const DEFAULT_MODEL_PRICING: Readonly<Record<string, ModelPricing>>;
35
+ /** Env var holding a JSON pricing override merged over the defaults. */
36
+ export declare const MODEL_PRICING_ENV_VAR = "AGENT_SERVE_MODEL_PRICING";
37
+ export declare function normalizeModelId(id: string): string;
38
+ /**
39
+ * Rates for a model selection, honoring its `fast` parameter. `undefined`
40
+ * when the model is not in the table (no estimate is better than a wrong
41
+ * one).
42
+ */
43
+ export declare function resolveModelPricing(model: ModelSetting): ModelPricingTier | undefined;
44
+ /**
45
+ * Estimate the dollar cost of one turn's token usage. `undefined` when the
46
+ * model has no known rates.
47
+ */
48
+ export declare function estimateTurnCost(model: ModelSetting, usage: TurnUsage): TurnCost | undefined;
49
+ //# sourceMappingURL=model-pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-pricing.d.ts","sourceRoot":"","sources":["../../src/internal/model-pricing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAErE,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,2DAA2D;IAC3D,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAID;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAgNxE,CAAC;AAkCF,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AAoEjE,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnD;AAiBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,GAClB,gBAAgB,GAAG,SAAS,CAgB9B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,SAAS,GACf,QAAQ,GAAG,SAAS,CAmBtB"}
@@ -0,0 +1,377 @@
1
+ /**
2
+ * Best-effort dollar-cost estimation for agent turns.
3
+ *
4
+ * The Cursor harness streams token usage (`turn-ended`) but no dollar cost,
5
+ * and server-billed cost is only queryable for cloud agents — so the
6
+ * framework prices token usage against a built-in snapshot of Cursor's
7
+ * published per-model API rates. Estimates are marked `source: "estimate"`
8
+ * everywhere they surface (traces, playground, A/B metrics, CLI); the billed
9
+ * amount on the Cursor dashboard remains the source of truth.
10
+ *
11
+ * Unknown models produce no estimate rather than a wrong one. Deployments
12
+ * can extend or correct the table without a package upgrade via the
13
+ * `AGENT_SERVE_MODEL_PRICING` environment variable (a JSON object merged
14
+ * over the defaults, keyed by model id).
15
+ */
16
+ const M = 1000000;
17
+ /**
18
+ * Snapshot of Cursor API per-model token rates (USD per million tokens).
19
+ * Keyed by normalized model id; family aliases (`sonnet`, `gpt`, …) point at
20
+ * the model they currently resolve to.
21
+ */
22
+ export const DEFAULT_MODEL_PRICING = {
23
+ // xAI / Cursor-served Grok
24
+ "grok-4.5": {
25
+ inputUsdPerMTok: 2,
26
+ outputUsdPerMTok: 6,
27
+ cacheReadUsdPerMTok: 0.5,
28
+ fast: { inputUsdPerMTok: 4, outputUsdPerMTok: 18, cacheReadUsdPerMTok: 1 },
29
+ },
30
+ "grok-4.20": {
31
+ inputUsdPerMTok: 2,
32
+ outputUsdPerMTok: 6,
33
+ cacheReadUsdPerMTok: 0.2,
34
+ },
35
+ "grok-4.3": {
36
+ inputUsdPerMTok: 1.25,
37
+ outputUsdPerMTok: 2.5,
38
+ cacheReadUsdPerMTok: 0.125,
39
+ },
40
+ "grok-code": {
41
+ inputUsdPerMTok: 0.2,
42
+ outputUsdPerMTok: 1.5,
43
+ cacheReadUsdPerMTok: 0.02,
44
+ },
45
+ // Anthropic
46
+ "opus-5": {
47
+ inputUsdPerMTok: 5,
48
+ outputUsdPerMTok: 25,
49
+ cacheReadUsdPerMTok: 0.5,
50
+ cacheWriteUsdPerMTok: 6.25,
51
+ fast: {
52
+ inputUsdPerMTok: 10,
53
+ outputUsdPerMTok: 50,
54
+ cacheReadUsdPerMTok: 1,
55
+ cacheWriteUsdPerMTok: 12.5,
56
+ },
57
+ },
58
+ "opus-4.8": {
59
+ inputUsdPerMTok: 5,
60
+ outputUsdPerMTok: 25,
61
+ cacheReadUsdPerMTok: 0.5,
62
+ cacheWriteUsdPerMTok: 6.25,
63
+ fast: {
64
+ inputUsdPerMTok: 10,
65
+ outputUsdPerMTok: 50,
66
+ cacheReadUsdPerMTok: 1,
67
+ cacheWriteUsdPerMTok: 12.5,
68
+ },
69
+ },
70
+ "opus-4.7": {
71
+ inputUsdPerMTok: 5,
72
+ outputUsdPerMTok: 25,
73
+ cacheReadUsdPerMTok: 0.5,
74
+ cacheWriteUsdPerMTok: 6.25,
75
+ fast: {
76
+ inputUsdPerMTok: 30,
77
+ outputUsdPerMTok: 150,
78
+ cacheReadUsdPerMTok: 3,
79
+ cacheWriteUsdPerMTok: 37.5,
80
+ },
81
+ },
82
+ "opus-4.6": {
83
+ inputUsdPerMTok: 5,
84
+ outputUsdPerMTok: 25,
85
+ cacheReadUsdPerMTok: 0.5,
86
+ cacheWriteUsdPerMTok: 6.25,
87
+ },
88
+ "opus-4.5": {
89
+ inputUsdPerMTok: 5,
90
+ outputUsdPerMTok: 25,
91
+ cacheReadUsdPerMTok: 0.5,
92
+ cacheWriteUsdPerMTok: 6.25,
93
+ },
94
+ "sonnet-5": {
95
+ inputUsdPerMTok: 3,
96
+ outputUsdPerMTok: 15,
97
+ cacheReadUsdPerMTok: 0.3,
98
+ cacheWriteUsdPerMTok: 3.75,
99
+ },
100
+ "sonnet-4.6": {
101
+ inputUsdPerMTok: 3,
102
+ outputUsdPerMTok: 15,
103
+ cacheReadUsdPerMTok: 0.3,
104
+ cacheWriteUsdPerMTok: 3.75,
105
+ },
106
+ "sonnet-4.5": {
107
+ inputUsdPerMTok: 3,
108
+ outputUsdPerMTok: 15,
109
+ cacheReadUsdPerMTok: 0.3,
110
+ cacheWriteUsdPerMTok: 3.75,
111
+ },
112
+ "haiku-4.5": {
113
+ inputUsdPerMTok: 1,
114
+ outputUsdPerMTok: 5,
115
+ cacheReadUsdPerMTok: 0.1,
116
+ cacheWriteUsdPerMTok: 1.25,
117
+ },
118
+ "fable-5": {
119
+ inputUsdPerMTok: 10,
120
+ outputUsdPerMTok: 50,
121
+ cacheReadUsdPerMTok: 1,
122
+ cacheWriteUsdPerMTok: 12.5,
123
+ },
124
+ // OpenAI
125
+ "gpt-5.6": {
126
+ inputUsdPerMTok: 5,
127
+ outputUsdPerMTok: 30,
128
+ cacheReadUsdPerMTok: 0.5,
129
+ cacheWriteUsdPerMTok: 6.25,
130
+ fast: {
131
+ inputUsdPerMTok: 10,
132
+ outputUsdPerMTok: 60,
133
+ cacheReadUsdPerMTok: 1,
134
+ cacheWriteUsdPerMTok: 12.5,
135
+ },
136
+ },
137
+ "gpt-5.5": {
138
+ inputUsdPerMTok: 5,
139
+ outputUsdPerMTok: 30,
140
+ cacheReadUsdPerMTok: 0.5,
141
+ },
142
+ "gpt-5.4": {
143
+ inputUsdPerMTok: 2.5,
144
+ outputUsdPerMTok: 15,
145
+ cacheReadUsdPerMTok: 0.25,
146
+ },
147
+ "gpt-5.2": {
148
+ inputUsdPerMTok: 1.75,
149
+ outputUsdPerMTok: 14,
150
+ cacheReadUsdPerMTok: 0.175,
151
+ },
152
+ "gpt-mini": {
153
+ inputUsdPerMTok: 0.75,
154
+ outputUsdPerMTok: 4.5,
155
+ cacheReadUsdPerMTok: 0.075,
156
+ },
157
+ "codex-5.3": {
158
+ inputUsdPerMTok: 1.75,
159
+ outputUsdPerMTok: 14,
160
+ cacheReadUsdPerMTok: 0.175,
161
+ },
162
+ "codex-5.2": {
163
+ inputUsdPerMTok: 1.75,
164
+ outputUsdPerMTok: 14,
165
+ cacheReadUsdPerMTok: 0.175,
166
+ },
167
+ // Google
168
+ "gemini-3.1-pro": {
169
+ inputUsdPerMTok: 2,
170
+ outputUsdPerMTok: 12,
171
+ cacheReadUsdPerMTok: 0.2,
172
+ },
173
+ "gemini-3-pro": {
174
+ inputUsdPerMTok: 2,
175
+ outputUsdPerMTok: 12,
176
+ cacheReadUsdPerMTok: 0.2,
177
+ },
178
+ "gemini-3.6-flash": {
179
+ inputUsdPerMTok: 1.5,
180
+ outputUsdPerMTok: 7.5,
181
+ cacheReadUsdPerMTok: 0.15,
182
+ },
183
+ "gemini-3.5-flash": {
184
+ inputUsdPerMTok: 1.5,
185
+ outputUsdPerMTok: 9,
186
+ cacheReadUsdPerMTok: 0.15,
187
+ },
188
+ // Cursor Composer
189
+ "composer-2.5": {
190
+ inputUsdPerMTok: 0.5,
191
+ outputUsdPerMTok: 2.5,
192
+ cacheReadUsdPerMTok: 0.2,
193
+ fast: {
194
+ inputUsdPerMTok: 3,
195
+ outputUsdPerMTok: 15,
196
+ cacheReadUsdPerMTok: 0.5,
197
+ },
198
+ },
199
+ "composer-2": {
200
+ inputUsdPerMTok: 0.5,
201
+ outputUsdPerMTok: 2.5,
202
+ cacheReadUsdPerMTok: 0.2,
203
+ },
204
+ // Moonshot / Zhipu
205
+ "kimi-k3": {
206
+ inputUsdPerMTok: 3,
207
+ outputUsdPerMTok: 15,
208
+ cacheReadUsdPerMTok: 0.3,
209
+ },
210
+ "kimi-k2.7": {
211
+ inputUsdPerMTok: 0.95,
212
+ outputUsdPerMTok: 4,
213
+ cacheReadUsdPerMTok: 0.19,
214
+ },
215
+ "kimi-k2.5": {
216
+ inputUsdPerMTok: 0.6,
217
+ outputUsdPerMTok: 3,
218
+ cacheReadUsdPerMTok: 0.1,
219
+ },
220
+ "glm-5.2": {
221
+ inputUsdPerMTok: 1.4,
222
+ outputUsdPerMTok: 4.4,
223
+ cacheReadUsdPerMTok: 0.26,
224
+ },
225
+ };
226
+ /** Family aliases → the model id they currently resolve to. */
227
+ const MODEL_ID_ALIASES = {
228
+ grok: "grok-4.20",
229
+ "grok-latest": "grok-4.3",
230
+ "grok-code-latest": "grok-code",
231
+ opus: "opus-5",
232
+ "opus-latest": "opus-5",
233
+ sonnet: "sonnet-4.6",
234
+ "sonnet-latest": "sonnet-5",
235
+ haiku: "haiku-4.5",
236
+ "haiku-latest": "haiku-4.5",
237
+ fable: "fable-5",
238
+ gpt: "gpt-5.6",
239
+ "gpt-latest": "gpt-5.6",
240
+ "gpt-5-6-sol": "gpt-5.6",
241
+ "gpt-5-5": "gpt-5.5",
242
+ "gpt-mini-latest": "gpt-mini",
243
+ codex: "codex-5.3",
244
+ "codex-latest": "codex-5.3",
245
+ gemini: "gemini-3.1-pro",
246
+ "gemini-latest": "gemini-3.1-pro",
247
+ "gemini-pro": "gemini-3.1-pro",
248
+ "gemini-pro-latest": "gemini-3.1-pro",
249
+ "gemini-flash": "gemini-3.6-flash",
250
+ "gemini-flash-latest": "gemini-3.6-flash",
251
+ composer: "composer-2.5",
252
+ "composer-latest": "composer-2.5",
253
+ "composer-2-5": "composer-2.5",
254
+ kimi: "kimi-k2.7",
255
+ "kimi-latest": "kimi-k2.7",
256
+ };
257
+ /** Env var holding a JSON pricing override merged over the defaults. */
258
+ export const MODEL_PRICING_ENV_VAR = "AGENT_SERVE_MODEL_PRICING";
259
+ let cachedEnvOverride;
260
+ function envOverrideTable() {
261
+ const raw = process.env[MODEL_PRICING_ENV_VAR];
262
+ if (cachedEnvOverride !== undefined && cachedEnvOverride.raw === raw) {
263
+ return cachedEnvOverride.table;
264
+ }
265
+ let table = {};
266
+ if (raw !== undefined && raw.trim() !== "") {
267
+ try {
268
+ const parsed = JSON.parse(raw);
269
+ if (typeof parsed === "object" && parsed !== null) {
270
+ for (const [key, value] of Object.entries(parsed)) {
271
+ const tier = parsePricing(value);
272
+ if (tier !== undefined) {
273
+ table[normalizeModelId(key)] = tier;
274
+ }
275
+ }
276
+ }
277
+ }
278
+ catch (_a) {
279
+ table = {};
280
+ }
281
+ }
282
+ cachedEnvOverride = { raw, table };
283
+ return table;
284
+ }
285
+ function parseTier(value) {
286
+ if (typeof value !== "object" || value === null) {
287
+ return undefined;
288
+ }
289
+ const row = value;
290
+ const input = row.inputUsdPerMTok;
291
+ const output = row.outputUsdPerMTok;
292
+ const cacheRead = row.cacheReadUsdPerMTok;
293
+ if (!isRate(input) ||
294
+ !isRate(output) ||
295
+ (cacheRead !== undefined && !isRate(cacheRead))) {
296
+ return undefined;
297
+ }
298
+ const cacheWrite = row.cacheWriteUsdPerMTok;
299
+ return {
300
+ inputUsdPerMTok: input,
301
+ outputUsdPerMTok: output,
302
+ cacheReadUsdPerMTok: isRate(cacheRead) ? cacheRead : input,
303
+ cacheWriteUsdPerMTok: isRate(cacheWrite) ? cacheWrite : undefined,
304
+ };
305
+ }
306
+ function parsePricing(value) {
307
+ const base = parseTier(value);
308
+ if (base === undefined) {
309
+ return undefined;
310
+ }
311
+ const fast = parseTier(value.fast);
312
+ return Object.assign(Object.assign({}, base), { fast });
313
+ }
314
+ function isRate(value) {
315
+ return typeof value === "number" && Number.isFinite(value) && value >= 0;
316
+ }
317
+ export function normalizeModelId(id) {
318
+ return id.trim().toLowerCase();
319
+ }
320
+ function modelId(model) {
321
+ return typeof model === "string" ? model : model.id;
322
+ }
323
+ function modelHasFastParam(model) {
324
+ var _a;
325
+ if (typeof model === "string") {
326
+ return false;
327
+ }
328
+ return (((_a = model.params) === null || _a === void 0 ? void 0 : _a.some((param) => param.id === "fast" && param.value === "true")) === true);
329
+ }
330
+ /**
331
+ * Rates for a model selection, honoring its `fast` parameter. `undefined`
332
+ * when the model is not in the table (no estimate is better than a wrong
333
+ * one).
334
+ */
335
+ export function resolveModelPricing(model) {
336
+ var _a, _b, _c, _d;
337
+ const overrides = envOverrideTable();
338
+ const rawId = normalizeModelId(modelId(model));
339
+ const canonicalId = (_a = MODEL_ID_ALIASES[rawId]) !== null && _a !== void 0 ? _a : rawId;
340
+ const pricing = (_d = (_c = (_b = overrides[rawId]) !== null && _b !== void 0 ? _b : overrides[canonicalId]) !== null && _c !== void 0 ? _c : DEFAULT_MODEL_PRICING[rawId]) !== null && _d !== void 0 ? _d : DEFAULT_MODEL_PRICING[canonicalId];
341
+ if (pricing === undefined) {
342
+ return undefined;
343
+ }
344
+ if (modelHasFastParam(model) && pricing.fast !== undefined) {
345
+ return pricing.fast;
346
+ }
347
+ return pricing;
348
+ }
349
+ /**
350
+ * Estimate the dollar cost of one turn's token usage. `undefined` when the
351
+ * model has no known rates.
352
+ */
353
+ export function estimateTurnCost(model, usage) {
354
+ var _a;
355
+ const tier = resolveModelPricing(model);
356
+ if (tier === undefined) {
357
+ return undefined;
358
+ }
359
+ const cacheWriteRate = (_a = tier.cacheWriteUsdPerMTok) !== null && _a !== void 0 ? _a : tier.inputUsdPerMTok;
360
+ const inputUsd = (usage.inputTokens / M) * tier.inputUsdPerMTok;
361
+ const outputUsd = (usage.outputTokens / M) * tier.outputUsdPerMTok;
362
+ const cacheReadUsd = (usage.cacheReadTokens / M) * tier.cacheReadUsdPerMTok;
363
+ const cacheWriteUsd = (usage.cacheWriteTokens / M) * cacheWriteRate;
364
+ return {
365
+ totalUsd: roundUsd(inputUsd + outputUsd + cacheReadUsd + cacheWriteUsd),
366
+ inputUsd: roundUsd(inputUsd),
367
+ outputUsd: roundUsd(outputUsd),
368
+ cacheReadUsd: roundUsd(cacheReadUsd),
369
+ cacheWriteUsd: roundUsd(cacheWriteUsd),
370
+ model: normalizeModelId(modelId(model)),
371
+ source: "estimate",
372
+ };
373
+ }
374
+ /** Keep persisted estimates readable: micro-dollar precision. */
375
+ function roundUsd(usd) {
376
+ return Math.round(usd * 1e6) / 1e6;
377
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAEV,mBAAmB,EAGnB,YAAY,EAEb,MAAM,aAAa,CAAC;AASrB,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAFzC,YACE,UAAU,EAAE,MAAM,EACT,oBAAoB,EAAE,MAAM,EAAE,EAIxC;CACF;AAyDD,qBAAa,cAAc;IAUvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D,OAAO,CAAC,OAAO,CAAS;IAExB,YACmB,MAAM,EAAE,aAAa,EACrB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EAG3D;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,sEAAsE;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA+B3B;IAED;;;OAGG;YACW,kBAAkB;IA6BhC,8EAA8E;YAChE,OAAO;IAKrB,IAAI,IAAI,IAAI,CAOX;IAEK,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CA8D9D;IAEK,IAAI,CAAC,MAAM,CAAC,EAAE;QAClB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA4B1B;IAEK,MAAM,CACV,EAAE,EAAE,MAAM,EACV,MAAM,SAAoB,GACzB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAkBnC;IAED,iFAAiF;IAC3E,qBAAqB,CACzB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAUjB;IAED;;;;;OAKG;IACG,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAkBjB;IAED,uDAAuD;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAC1C,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAQD;IAED,OAAO,CAAC,QAAQ;IA4ChB,OAAO,CAAC,UAAU;YAQJ,IAAI;YA6GJ,aAAa;IAY3B,OAAO,CAAC,eAAe;IAsBvB;;;OAGG;YACW,mBAAmB;YAcnB,aAAa;YAcb,YAAY;IA0C1B,OAAO,CAAC,gBAAgB;IAyDxB,OAAO,CAAC,iBAAiB;YAeX,MAAM;YAYN,SAAS;CAoFxB;AAGD,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAEV,mBAAmB,EAGnB,YAAY,EAEb,MAAM,aAAa,CAAC;AASrB,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAFzC,YACE,UAAU,EAAE,MAAM,EACT,oBAAoB,EAAE,MAAM,EAAE,EAIxC;CACF;AAyDD,qBAAa,cAAc;IAUvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D,OAAO,CAAC,OAAO,CAAS;IAExB,YACmB,MAAM,EAAE,aAAa,EACrB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EAG3D;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,sEAAsE;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA+B3B;IAED;;;OAGG;YACW,kBAAkB;IA6BhC,8EAA8E;YAChE,OAAO;IAKrB,IAAI,IAAI,IAAI,CAOX;IAEK,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CA8D9D;IAEK,IAAI,CAAC,MAAM,CAAC,EAAE;QAClB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA4B1B;IAEK,MAAM,CACV,EAAE,EAAE,MAAM,EACV,MAAM,SAAoB,GACzB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAkBnC;IAED,iFAAiF;IAC3E,qBAAqB,CACzB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAUjB;IAED;;;;;OAKG;IACG,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAkBjB;IAED,uDAAuD;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAC1C,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAQD;IAED,OAAO,CAAC,QAAQ;IA4ChB,OAAO,CAAC,UAAU;YAQJ,IAAI;YA6GJ,aAAa;IAY3B,OAAO,CAAC,eAAe;IAsBvB;;;OAGG;YACW,mBAAmB;YAcnB,aAAa;YAcb,YAAY;IA0C1B,OAAO,CAAC,gBAAgB;IA0DxB,OAAO,CAAC,iBAAiB;YAeX,MAAM;YAYN,SAAS;CAoFxB;AAGD,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -539,6 +539,7 @@ export class ReminderRunner {
539
539
  host: this.engine.host,
540
540
  mcp: this.engine.host.mcp,
541
541
  appAuth: APP_AUTH,
542
+ artifacts: this.engine.artifacts,
542
543
  followup(args) {
543
544
  return __awaiter(this, void 0, void 0, function* () {
544
545
  const auth = yield self.resolveFollowupAuth(record.channelId, record.continuationToken);
@@ -1 +1 @@
1
- {"version":3,"file":"schedule-runner.d.ts","sourceRoot":"","sources":["../../src/internal/schedule-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EAGZ,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,QAAQ,EAAE,WAItB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAFzC,YACE,UAAU,EAAE,MAAM,EACT,oBAAoB,EAAE,MAAM,EAAE,EAIxC;CACF;AAQD,qBAAa,cAAc;IAMvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,eAAe,CAAM;IAE7B,YACmB,MAAM,EAAE,aAAa,EACtC,OAAO,EAAE,YAAY,EACJ,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EAO3D;IAED,IAAI,WAAW,IAAI,MAAM,EAAE,CAE1B;IAED,KAAK,IAAI,IAAI,CAKZ;IAED,IAAI,IAAI,IAAI,CAKX;IAED,OAAO,CAAC,GAAG;IAOX,OAAO,CAAC,IAAI;IAoBZ,2EAA2E;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAuDpE;CACF"}
1
+ {"version":3,"file":"schedule-runner.d.ts","sourceRoot":"","sources":["../../src/internal/schedule-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EAGZ,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,QAAQ,EAAE,WAItB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAFzC,YACE,UAAU,EAAE,MAAM,EACT,oBAAoB,EAAE,MAAM,EAAE,EAIxC;CACF;AAQD,qBAAa,cAAc;IAMvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,eAAe,CAAM;IAE7B,YACmB,MAAM,EAAE,aAAa,EACtC,OAAO,EAAE,YAAY,EACJ,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EAO3D;IAED,IAAI,WAAW,IAAI,MAAM,EAAE,CAE1B;IAED,KAAK,IAAI,IAAI,CAKZ;IAED,IAAI,IAAI,IAAI,CAKX;IAED,OAAO,CAAC,GAAG;IAOX,OAAO,CAAC,IAAI;IAoBZ,2EAA2E;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAwDpE;CACF"}
@@ -115,6 +115,7 @@ export class ScheduleRunner {
115
115
  },
116
116
  appAuth: APP_AUTH,
117
117
  host: this.engine.host,
118
+ artifacts: this.engine.artifacts,
118
119
  });
119
120
  // Collect ids from receive() calls the handler chose not to await
120
121
  // (commonly wrapped in waitUntil); receive resolves at message accept,
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-runner.d.ts","sourceRoot":"","sources":["../../src/internal/sdk-runner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAC;AAErB,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D;;;;;OAKG;IACH,OAAO,CAAC,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,iBAAiB,EACf,cAAc,GACd,gBAAgB,GAChB,SAAS,GACT,YAAY,GACZ,WAAW,GACX,OAAO,CACV,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAcxD,MAAM,WAAW,sBAAsB;IACrC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAwBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKvE;AAED,qBAAa,eAAgB,YAAW,WAAW;IAKrC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAElE,YAA6B,OAAO,GAAE,sBAA2B,EAAI;IAE/D,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAkC9D;YAEa,cAAc;IAyE5B;;;;OAIG;IACG,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAepE;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAY7B;IAED,OAAO,CAAC,QAAQ;IA0BhB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,kBAAkB;IAc1B;;;OAGG;YACW,iBAAiB;YAkBjB,SAAS;YAOT,cAAc;YA6Bd,cAAc;IAqC5B,OAAO,CAAC,QAAQ;CAUjB;AAED,4EAA4E;AAC5E,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAMT;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,cAAc,CAQpE;AAmED,wBAAgB,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,CAExE"}
1
+ {"version":3,"file":"sdk-runner.d.ts","sourceRoot":"","sources":["../../src/internal/sdk-runner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAC;AAErB,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D;;;;;OAKG;IACH,OAAO,CAAC,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,iBAAiB,EACf,cAAc,GACd,gBAAgB,GAChB,SAAS,GACT,YAAY,GACZ,WAAW,GACX,OAAO,CACV,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAcxD,MAAM,WAAW,sBAAsB;IACrC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAwBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKvE;AAED,qBAAa,eAAgB,YAAW,WAAW;IAKrC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAElE,YAA6B,OAAO,GAAE,sBAA2B,EAAI;IAE/D,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAkC9D;YAEa,cAAc;IAyE5B;;;;OAIG;IACG,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAepE;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAY7B;IAED,OAAO,CAAC,QAAQ;IA0BhB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,kBAAkB;IAc1B;;;OAGG;YACW,iBAAiB;YAkBjB,SAAS;YAOT,cAAc;YA6Bd,cAAc;IA6C5B,OAAO,CAAC,QAAQ;CAUjB;AAED,4EAA4E;AAC5E,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAMT;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,cAAc,CAQpE;AAmED,wBAAgB,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,CAExE"}
@@ -310,7 +310,15 @@ export class CursorSdkRunner {
310
310
  if (request.isFirstTurn) {
311
311
  return Agent.create(options);
312
312
  }
313
- throw new Error(`Cloud session ${request.sessionId} is missing sdkAgentId; cannot resume.`);
313
+ // A cloud session past its first turn should carry the bound agent id
314
+ // (the engine persists it via onSdkAgentId as soon as create() reports
315
+ // one). Reaching here means the binding turn failed before the server
316
+ // ever minted an agent — e.g. create() rejected its PR attach — so the
317
+ // session would otherwise fail every future turn. Mirror the local
318
+ // host-replacement path above: a fresh conversation beats failing this
319
+ // thread forever, and the new id binds to the session for later resumes.
320
+ this.log(`[agentkit] cloud session ${request.sessionId} has no bound cloud agent; creating a fresh one`);
321
+ return Agent.create(options);
314
322
  });
315
323
  }
316
324
  getStore(stateDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4BH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAOhB,YAAY,EACb,MAAM,aAAa,CAAC;AAqFrB,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,CA2pB3B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4BH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAOhB,YAAY,EACb,MAAM,aAAa,CAAC;AAqFrB,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AAiBpE,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,CA4pB3B"}