@cursor/july 0.1.25 → 0.1.27

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 (288) 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 +31 -9
  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/cursor-account.d.ts +2 -1
  17. package/dist/channels/slack/cursor-account.d.ts.map +1 -1
  18. package/dist/channels/slack/cursor-account.js +1 -1
  19. package/dist/channels/slack/dispatch.d.ts +4 -1
  20. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  21. package/dist/channels/slack/dispatch.js +3 -3
  22. package/dist/channels/slack/interactive.d.ts +2 -1
  23. package/dist/channels/slack/interactive.d.ts.map +1 -1
  24. package/dist/channels/slack/interactive.js +1 -0
  25. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  26. package/dist/channels/slack/slack-channel.js +4 -3
  27. package/dist/channels/slack/types.d.ts +6 -1
  28. package/dist/channels/slack/types.d.ts.map +1 -1
  29. package/dist/docs/404.html +1 -1
  30. package/dist/docs/ab.html +2 -2
  31. package/dist/docs/assets/{app.DYcC9FY-.js → app.BICLoJYF.js} +1 -1
  32. package/dist/docs/assets/chunks/@localSearchIndexroot.CQJytDwU.js +1 -0
  33. package/dist/docs/assets/chunks/{VPLocalSearchBox.o4N_knTV.js → VPLocalSearchBox.wN4Ko9dT.js} +1 -1
  34. package/dist/docs/assets/chunks/{theme.DQ-njyo0.js → theme.dnnTE-Co.js} +2 -2
  35. package/dist/docs/building-with-agents.html +2 -2
  36. package/dist/docs/concepts.html +2 -2
  37. package/dist/docs/deployment.html +2 -2
  38. package/dist/docs/evals.html +2 -2
  39. package/dist/docs/example-agents/approval-buddy.html +2 -2
  40. package/dist/docs/example-agents/benny.html +2 -2
  41. package/dist/docs/example-agents/bugbot.html +2 -2
  42. package/dist/docs/example-agents/codebase-wiki.html +2 -2
  43. package/dist/docs/example-agents/codeowners-review.html +2 -2
  44. package/dist/docs/example-agents/concierge.html +2 -2
  45. package/dist/docs/example-agents/fsd.html +2 -2
  46. package/dist/docs/example-agents/index.html +2 -2
  47. package/dist/docs/example-agents/knowledge-base.html +2 -2
  48. package/dist/docs/example-agents/oncall.html +2 -2
  49. package/dist/docs/example-agents/security-reviewer.html +2 -2
  50. package/dist/docs/example-agents/slack-agent.html +2 -2
  51. package/dist/docs/example-agents/weather-agent.html +2 -2
  52. package/dist/docs/guides/agent-to-agent.html +2 -2
  53. package/dist/docs/guides/cloud-runtime.html +2 -2
  54. package/dist/docs/guides/github.html +2 -2
  55. package/dist/docs/guides/human-in-the-loop.html +2 -2
  56. package/dist/docs/guides/mcp-oauth.html +2 -2
  57. package/dist/docs/guides/slack.html +2 -2
  58. package/dist/docs/guides/webhooks.html +2 -2
  59. package/dist/docs/hillclimbing.html +2 -2
  60. package/dist/docs/index.html +2 -2
  61. package/dist/docs/quickstart.html +2 -2
  62. package/dist/docs/reference/agent-config.html +2 -2
  63. package/dist/docs/reference/channels.html +2 -2
  64. package/dist/docs/reference/cli.html +2 -2
  65. package/dist/docs/reference/connections.html +2 -2
  66. package/dist/docs/reference/hooks.html +2 -2
  67. package/dist/docs/reference/http-api.html +2 -2
  68. package/dist/docs/reference/instructions.html +2 -2
  69. package/dist/docs/reference/playground.html +2 -2
  70. package/dist/docs/reference/project-layout.html +2 -2
  71. package/dist/docs/reference/prompt.html +2 -2
  72. package/dist/docs/reference/schedules.html +2 -2
  73. package/dist/docs/reference/sessions.html +2 -2
  74. package/dist/docs/reference/skills.html +2 -2
  75. package/dist/docs/reference/subagents.html +2 -2
  76. package/dist/docs/reference/tools.html +2 -2
  77. package/dist/docs/scaffolding-agents.html +2 -2
  78. package/dist/docs/storage.html +2 -2
  79. package/dist/docs/troubleshooting.html +2 -2
  80. package/dist/evals/assertions.d.ts +10 -1
  81. package/dist/evals/assertions.d.ts.map +1 -1
  82. package/dist/evals/assertions.js +12 -0
  83. package/dist/evals.d.ts +1 -1
  84. package/dist/evals.d.ts.map +1 -1
  85. package/dist/index.d.ts +1 -0
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +1 -0
  88. package/dist/internal/ab-fold.d.ts.map +1 -1
  89. package/dist/internal/ab-fold.js +4 -0
  90. package/dist/internal/ab-snapshot.d.ts.map +1 -1
  91. package/dist/internal/ab-snapshot.js +1 -0
  92. package/dist/internal/artifacts-store.d.ts +45 -0
  93. package/dist/internal/artifacts-store.d.ts.map +1 -0
  94. package/dist/internal/artifacts-store.js +250 -0
  95. package/dist/internal/builtin-tools/artifacts.d.ts +10 -0
  96. package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -0
  97. package/dist/internal/builtin-tools/artifacts.js +73 -0
  98. package/dist/internal/builtin-tools/index.d.ts +8 -1
  99. package/dist/internal/builtin-tools/index.d.ts.map +1 -1
  100. package/dist/internal/builtin-tools/index.js +15 -0
  101. package/dist/internal/cli-ax.d.ts +11 -0
  102. package/dist/internal/cli-ax.d.ts.map +1 -1
  103. package/dist/internal/cli-ax.js +80 -0
  104. package/dist/internal/cli-slack.d.ts.map +1 -1
  105. package/dist/internal/cli-slack.js +14 -6
  106. package/dist/internal/discovery.d.ts.map +1 -1
  107. package/dist/internal/discovery.js +83 -2
  108. package/dist/internal/distribution.d.ts.map +1 -1
  109. package/dist/internal/distribution.js +1 -0
  110. package/dist/internal/model-pricing.d.ts +49 -0
  111. package/dist/internal/model-pricing.d.ts.map +1 -0
  112. package/dist/internal/model-pricing.js +377 -0
  113. package/dist/internal/reminder-runner.d.ts.map +1 -1
  114. package/dist/internal/reminder-runner.js +1 -0
  115. package/dist/internal/schedule-runner.d.ts.map +1 -1
  116. package/dist/internal/schedule-runner.js +1 -0
  117. package/dist/internal/sdk-runner.d.ts.map +1 -1
  118. package/dist/internal/sdk-runner.js +9 -1
  119. package/dist/internal/server.d.ts.map +1 -1
  120. package/dist/internal/server.js +39 -0
  121. package/dist/internal/session-cost.d.ts +49 -0
  122. package/dist/internal/session-cost.d.ts.map +1 -0
  123. package/dist/internal/session-cost.js +175 -0
  124. package/dist/internal/session-engine.d.ts +35 -1
  125. package/dist/internal/session-engine.d.ts.map +1 -1
  126. package/dist/internal/session-engine.js +128 -7
  127. package/dist/internal/storage-coordinator.d.ts +15 -0
  128. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  129. package/dist/internal/storage-coordinator.js +52 -0
  130. package/dist/internal/trajectory.d.ts +9 -1
  131. package/dist/internal/trajectory.d.ts.map +1 -1
  132. package/dist/internal/trajectory.js +32 -5
  133. package/dist/playground/assets/index-BDCeW4uc.js +86 -0
  134. package/dist/playground/assets/index-Bul1WfrB.css +1 -0
  135. package/dist/playground/index.html +2 -2
  136. package/dist/storage.d.ts +4 -0
  137. package/dist/storage.d.ts.map +1 -1
  138. package/dist/storage.js +4 -0
  139. package/dist/types.d.ts +164 -1
  140. package/dist/types.d.ts.map +1 -1
  141. package/package.json +26 -26
  142. package/src/ab.ts +7 -0
  143. package/src/bin/agent-serve.ts +30 -2
  144. package/src/channels/github/github-channel.ts +19 -2
  145. package/src/channels/github/types.ts +6 -0
  146. package/src/channels/slack/api.ts +3 -1
  147. package/src/channels/slack/cursor-account.ts +3 -1
  148. package/src/channels/slack/dispatch.ts +12 -1
  149. package/src/channels/slack/interactive.ts +3 -0
  150. package/src/channels/slack/slack-channel.ts +6 -0
  151. package/src/channels/slack/types.ts +6 -0
  152. package/src/internal/ab-fold.ts +4 -0
  153. package/src/internal/ab-snapshot.ts +1 -0
  154. package/src/internal/cli-ax.ts +95 -0
  155. package/src/internal/model-pricing.ts +426 -0
  156. package/src/internal/reminder-runner.ts +1 -0
  157. package/src/internal/schedule-runner.ts +1 -0
  158. package/src/internal/sdk-runner.ts +10 -2
  159. package/src/internal/server.ts +2 -0
  160. package/src/internal/session-cost.ts +231 -0
  161. package/src/internal/session-engine.ts +32 -1
  162. package/src/internal/trajectory.ts +45 -3
  163. package/src/types.ts +42 -2
  164. package/dist/channels/github/instrument.d.ts +0 -20
  165. package/dist/channels/github/instrument.d.ts.map +0 -1
  166. package/dist/docs/assets/chunks/@localSearchIndexroot.BQTzJjR_.js +0 -1
  167. package/dist/internal/json-dir-store.d.ts +0 -32
  168. package/dist/internal/json-dir-store.d.ts.map +0 -1
  169. package/dist/internal/json-dir-store.js +0 -100
  170. package/dist/playground/assets/index-CjOQ4hN9.css +0 -1
  171. package/dist/playground/assets/index-DqXdAFGa.js +0 -85
  172. package/src/bin/agent-serve.version.test.ts +0 -64
  173. package/src/channels/github/api.test.ts +0 -64
  174. package/src/channels/github/auth.test.ts +0 -105
  175. package/src/channels/github/cursor-account.test.ts +0 -204
  176. package/src/channels/github/forward.test.ts +0 -457
  177. package/src/channels/github/github.test.ts +0 -943
  178. package/src/channels/github/replay.test.ts +0 -179
  179. package/src/channels/slack/api.post-message.test.ts +0 -148
  180. package/src/channels/slack/approvals.test.ts +0 -328
  181. package/src/channels/slack/block-actions.test.ts +0 -452
  182. package/src/channels/slack/bot-mentions.test.ts +0 -267
  183. package/src/channels/slack/channel-watch.test.ts +0 -363
  184. package/src/channels/slack/cursor-account.test.ts +0 -253
  185. package/src/channels/slack/defaults.final-post.test.ts +0 -182
  186. package/src/channels/slack/dispatch.test.ts +0 -795
  187. package/src/channels/slack/eval-directive.test.ts +0 -273
  188. package/src/channels/slack/message-body.test.ts +0 -54
  189. package/src/channels/slack/nudge-store.test.ts +0 -143
  190. package/src/channels/slack/slack.test.ts +0 -391
  191. package/src/channels/slack/stop.test.ts +0 -23
  192. package/src/channels/slack/thread-context.test.ts +0 -202
  193. package/src/evals/assertions.test.ts +0 -617
  194. package/src/evals/expect.test.ts +0 -144
  195. package/src/evals/judge.test.ts +0 -181
  196. package/src/evals/loaders.test.ts +0 -132
  197. package/src/evals/matchers.test.ts +0 -95
  198. package/src/evals/reporters.test.ts +0 -303
  199. package/src/evals/run-facts.test.ts +0 -259
  200. package/src/internal/ab-snapshot.test.ts +0 -325
  201. package/src/internal/approval-gate.test.ts +0 -49
  202. package/src/internal/approvals.integration.test.ts +0 -383
  203. package/src/internal/artifacts-store.test.ts +0 -283
  204. package/src/internal/authored-loaders.test.ts +0 -31
  205. package/src/internal/builtin-tools/artifacts.test.ts +0 -247
  206. package/src/internal/builtin-tools/reminders.test.ts +0 -201
  207. package/src/internal/channel-route-schema.test.ts +0 -294
  208. package/src/internal/chat-attach.test.ts +0 -262
  209. package/src/internal/cli-deploy.test.ts +0 -1991
  210. package/src/internal/cli-docs.test.ts +0 -161
  211. package/src/internal/cli-mcp.test.ts +0 -789
  212. package/src/internal/cli-skills.test.ts +0 -133
  213. package/src/internal/cli-slack.test.ts +0 -1654
  214. package/src/internal/cloud-merge.test.ts +0 -74
  215. package/src/internal/cron.test.ts +0 -22
  216. package/src/internal/cursor/account-mcp.test.ts +0 -807
  217. package/src/internal/cursor/backend-client.test.ts +0 -591
  218. package/src/internal/cursor/credentials.test.ts +0 -351
  219. package/src/internal/cursor/github-credentials.test.ts +0 -136
  220. package/src/internal/cursor-account-mcp-auth.test.ts +0 -310
  221. package/src/internal/cursor-account.integration.test.ts +0 -441
  222. package/src/internal/cursor-event-relay.test.ts +0 -746
  223. package/src/internal/cursor-github-credentials.integration.test.ts +0 -271
  224. package/src/internal/cursor-slack-relay.test.ts +0 -525
  225. package/src/internal/deploy-source.test.ts +0 -111
  226. package/src/internal/discovery.artifact-tool.test.ts +0 -136
  227. package/src/internal/discovery.artifacts.test.ts +0 -119
  228. package/src/internal/discovery.builtin-tools.test.ts +0 -94
  229. package/src/internal/discovery.concurrency.test.ts +0 -60
  230. package/src/internal/discovery.cursor-account.test.ts +0 -133
  231. package/src/internal/discovery.cwd.test.ts +0 -83
  232. package/src/internal/discovery.hosting.test.ts +0 -80
  233. package/src/internal/discovery.identity.test.ts +0 -44
  234. package/src/internal/docs-site.test.ts +0 -66
  235. package/src/internal/duration.test.ts +0 -29
  236. package/src/internal/eval-judge-model.test.ts +0 -187
  237. package/src/internal/eval-run-store.cancel.test.ts +0 -142
  238. package/src/internal/eval-run-store.storage.test.ts +0 -211
  239. package/src/internal/eval-runner.http.test.ts +0 -403
  240. package/src/internal/eval-runner.run.test.ts +0 -928
  241. package/src/internal/evals-client.test.ts +0 -307
  242. package/src/internal/event-mapper.test.ts +0 -243
  243. package/src/internal/github-fanout.test.ts +0 -213
  244. package/src/internal/handleAgentServeTrigger.test.ts +0 -185
  245. package/src/internal/host-kv.test.ts +0 -82
  246. package/src/internal/host-platforms.test.ts +0 -126
  247. package/src/internal/http-channel.test.ts +0 -402
  248. package/src/internal/init-project.test.ts +0 -270
  249. package/src/internal/install-cursor-skills.test.ts +0 -262
  250. package/src/internal/local-env.test.ts +0 -120
  251. package/src/internal/log-ring.test.ts +0 -31
  252. package/src/internal/logs-client.test.ts +0 -350
  253. package/src/internal/mcp-endpoint.test.ts +0 -436
  254. package/src/internal/mcp-host.test.ts +0 -298
  255. package/src/internal/mcp-oauth.test.ts +0 -148
  256. package/src/internal/net.test.ts +0 -17
  257. package/src/internal/peer-connections.test.ts +0 -128
  258. package/src/internal/peer-mcp.integration.test.ts +0 -289
  259. package/src/internal/playground/toolchain.test.ts +0 -53
  260. package/src/internal/playground-cli.test.ts +0 -187
  261. package/src/internal/playground-proxy.test.ts +0 -376
  262. package/src/internal/prompt-context.integration.test.ts +0 -232
  263. package/src/internal/prompt-context.test.ts +0 -127
  264. package/src/internal/reminder-runner.test.ts +0 -390
  265. package/src/internal/reminder-store.test.ts +0 -53
  266. package/src/internal/request-headers.test.ts +0 -27
  267. package/src/internal/resolve-prod-target.test.ts +0 -787
  268. package/src/internal/resolved-connections.test.ts +0 -295
  269. package/src/internal/router.test.ts +0 -57
  270. package/src/internal/sdk-runner.test.ts +0 -290
  271. package/src/internal/server.artifacts.test.ts +0 -303
  272. package/src/internal/session-engine.artifacts.test.ts +0 -243
  273. package/src/internal/session-engine.coalesce.test.ts +0 -169
  274. package/src/internal/session-engine.concurrency.test.ts +0 -250
  275. package/src/internal/session-engine.host-oauth-mcp.test.ts +0 -110
  276. package/src/internal/session-engine.interrupt.test.ts +0 -577
  277. package/src/internal/session-engine.storage.test.ts +0 -547
  278. package/src/internal/session-urls.test.ts +0 -28
  279. package/src/internal/sessions-client.test.ts +0 -518
  280. package/src/internal/storage-coordinator.test.ts +0 -517
  281. package/src/internal/tool-call.test.ts +0 -458
  282. package/src/internal/tool-result.test.ts +0 -52
  283. package/src/internal/trajectory.approvals.test.ts +0 -83
  284. package/src/internal/trajectory.subagents.test.ts +0 -198
  285. package/src/internal/turn-governor.test.ts +0 -137
  286. package/src/internal/update-check.test.ts +0 -485
  287. package/src/internal/workspace.test.ts +0 -207
  288. package/src/storage-backends/cursor-hosted.test.ts +0 -121
@@ -1 +1 @@
1
- {"version":3,"file":"ab-fold.d.ts","sourceRoot":"","sources":["../../src/internal/ab-fold.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,SAAS,EAGf,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG3E,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACjC,oDAAoD;IACpD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CAClC;AAED,wBAAgB,oBAAoB,IAAI,eAAe,CAEtD;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,UAAU,CAWZ;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CA0B7E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,eAAe,CAM7E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAC3C,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAC7C,OAAO,CAAC,IAAI,CAAC,CAWf;AAiBD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,WAAW,EAAE,SAAS,YAAY,EAAE,EACpC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,YAAY,GAClB,IAAI,CAgCN;AAcD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,GAAG,SAAS,GAC5B,SAAS,GAAG,SAAS,CAKvB"}
1
+ {"version":3,"file":"ab-fold.d.ts","sourceRoot":"","sources":["../../src/internal/ab-fold.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,SAAS,EAGf,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG3E,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACjC,oDAAoD;IACpD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CAClC;AAED,wBAAgB,oBAAoB,IAAI,eAAe,CAEtD;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,UAAU,CAWZ;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CA0B7E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,eAAe,CAM7E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAC3C,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAC7C,OAAO,CAAC,IAAI,CAAC,CAWf;AAiBD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,WAAW,EAAE,SAAS,YAAY,EAAE,EACpC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,YAAY,GAClB,IAAI,CAoCN;AAcD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,GAAG,SAAS,GAC5B,SAAS,GAAG,SAAS,CAKvB"}
@@ -134,6 +134,10 @@ export function applyBuiltinMetrics(accum, event) {
134
134
  m.cacheReadTokens += usage.cacheReadTokens;
135
135
  m.cacheWriteTokens += usage.cacheWriteTokens;
136
136
  }
137
+ const cost = event.data.cost;
138
+ if (cost !== undefined) {
139
+ m.costUsd += cost.totalUsd;
140
+ }
137
141
  addWallTime(accum, event.at);
138
142
  break;
139
143
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ab-snapshot.d.ts","sourceRoot":"","sources":["../../src/internal/ab-snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,aAAa,EAGnB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,cAAc,EACf,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+DAA+D;IAC/D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,SAAS,YAAY,EAAE,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IACtE,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3D,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,WAAW,CAAC;IACpD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAiOrB;AAiBD,gFAAgF;AAChF,YAAY,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"ab-snapshot.d.ts","sourceRoot":"","sources":["../../src/internal/ab-snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,aAAa,EAGnB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,cAAc,EACf,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+DAA+D;IAC/D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,SAAS,YAAY,EAAE,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IACtE,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3D,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,WAAW,CAAC;IACpD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAiOrB;AAkBD,gFAAgF;AAChF,YAAY,EAAE,YAAY,EAAE,CAAC"}
@@ -201,6 +201,7 @@ function addMetrics(target, delta) {
201
201
  target.outputTokens += delta.outputTokens;
202
202
  target.cacheReadTokens += delta.cacheReadTokens;
203
203
  target.cacheWriteTokens += delta.cacheWriteTokens;
204
+ target.costUsd += delta.costUsd;
204
205
  target.wallTimeMs += delta.wallTimeMs;
205
206
  for (const [key, value] of Object.entries(delta.custom)) {
206
207
  target.custom[key] = ((_a = target.custom[key]) !== null && _a !== void 0 ? _a : 0) + value;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Durable artifact rows behind `ctx.artifacts` ({@link ArtifactsApi}).
3
+ *
4
+ * Mirror of host-kv: when `defineStorage` is authored with `get` + `list`,
5
+ * rows live in that sink under `storageKeys.artifact`; otherwise one
6
+ * JSON file per row under `--state-root/artifacts`.
7
+ */
8
+ import type { ArtifactListFilter, ArtifactRecord, ArtifactsConfig, ArtifactTagInput } from "../types.js";
9
+ import type { StorageCoordinator } from "./storage-coordinator.js";
10
+ export interface CreateArtifactsStoreOptions {
11
+ stateRoot: string;
12
+ storage?: StorageCoordinator;
13
+ /** `agent/artifacts.ts` config, when authored. */
14
+ config?: ArtifactsConfig;
15
+ }
16
+ /** Kind used by freeform tags when no kinds are declared. */
17
+ export declare const ARTIFACT_DEFAULT_KIND = "artifact";
18
+ /**
19
+ * Upsert + list semantics over one {@link ArtifactRowStore}: kind/schema
20
+ * validation, deterministic ids for keyed tags, and `max` eviction. The
21
+ * engine wraps this into the per-context {@link ArtifactsApi} facades and
22
+ * owns the `artifact.tagged` event append.
23
+ */
24
+ export declare class ArtifactsStore {
25
+ private readonly rows;
26
+ private readonly config;
27
+ private readonly max;
28
+ /** Serializes tags so read-modify-write upserts and eviction don't race. */
29
+ private tagChain;
30
+ constructor(options: CreateArtifactsStoreOptions);
31
+ tag(input: ArtifactTagInput): Promise<ArtifactRecord>;
32
+ private tagSerialized;
33
+ list(filter?: ArtifactListFilter): Promise<ArtifactRecord[]>;
34
+ /**
35
+ * Resolve the effective kind (freeform when no kinds are declared) and
36
+ * the payload to persist. Like tool input schemas
37
+ * (`validateToolInput`), zod schemas validate *and* transform: the
38
+ * parsed output — defaults and coercions applied — is what gets stored.
39
+ */
40
+ private resolveKindAndData;
41
+ private evictPastCap;
42
+ }
43
+ /** Deterministic id for a keyed tag (same key ⇒ same id ⇒ upsert). */
44
+ export declare function artifactIdForKey(key: string): string;
45
+ //# sourceMappingURL=artifacts-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts-store.d.ts","sourceRoot":"","sources":["../../src/internal/artifacts-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAEjB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAYnE,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,kDAAkD;IAClD,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,CAAuC;IAEvD,YAAY,OAAO,EAAE,2BAA2B,EAO/C;IAED,GAAG,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAIpD;YAEa,aAAa;IA6BrB,IAAI,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAUjE;IAED;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;YA8BZ,YAAY;CAU3B;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKpD"}
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Durable artifact rows behind `ctx.artifacts` ({@link ArtifactsApi}).
3
+ *
4
+ * Mirror of host-kv: when `defineStorage` is authored with `get` + `list`,
5
+ * rows live in that sink under `storageKeys.artifact`; otherwise one
6
+ * JSON file per row under `--state-root/artifacts`.
7
+ */
8
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
+ return new (P || (P = Promise))(function (resolve, reject) {
11
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
15
+ });
16
+ };
17
+ import { createHash, randomUUID } from "node:crypto";
18
+ import { mkdir, readdir, readFile, rename, rm, writeFile, } from "node:fs/promises";
19
+ import { join } from "node:path";
20
+ import { resolveArtifactsMax } from "../artifacts.js";
21
+ /** Kind used by freeform tags when no kinds are declared. */
22
+ export const ARTIFACT_DEFAULT_KIND = "artifact";
23
+ /**
24
+ * Upsert + list semantics over one {@link ArtifactRowStore}: kind/schema
25
+ * validation, deterministic ids for keyed tags, and `max` eviction. The
26
+ * engine wraps this into the per-context {@link ArtifactsApi} facades and
27
+ * owns the `artifact.tagged` event append.
28
+ */
29
+ export class ArtifactsStore {
30
+ constructor(options) {
31
+ var _a;
32
+ /** Serializes tags so read-modify-write upserts and eviction don't race. */
33
+ this.tagChain = Promise.resolve();
34
+ this.rows =
35
+ ((_a = options.storage) === null || _a === void 0 ? void 0 : _a.supportsArtifacts) === true
36
+ ? createCoordinatorRowStore(options.storage)
37
+ : createFilesystemRowStore(options.stateRoot);
38
+ this.config = options.config;
39
+ this.max = resolveArtifactsMax(options.config);
40
+ }
41
+ tag(input) {
42
+ const result = this.tagChain.then(() => this.tagSerialized(input));
43
+ this.tagChain = result.catch(() => { });
44
+ return result;
45
+ }
46
+ tagSerialized(input) {
47
+ return __awaiter(this, void 0, void 0, function* () {
48
+ var _a, _b;
49
+ const { kind, data } = this.resolveKindAndData(input);
50
+ const id = input.key === undefined
51
+ ? `art_${randomUUID()}`
52
+ : artifactIdForKey(input.key);
53
+ const existing = yield this.rows.get(id);
54
+ const now = new Date().toISOString();
55
+ const record = {
56
+ id,
57
+ kind,
58
+ key: input.key,
59
+ title: input.title,
60
+ data,
61
+ sessionId: input.sessionId,
62
+ turnId: input.turnId,
63
+ source: (_a = input.source) !== null && _a !== void 0 ? _a : "host",
64
+ createdAt: (_b = existing === null || existing === void 0 ? void 0 : existing.createdAt) !== null && _b !== void 0 ? _b : now,
65
+ updatedAt: now,
66
+ };
67
+ yield this.rows.put(record);
68
+ if (existing === undefined) {
69
+ yield this.evictPastCap();
70
+ }
71
+ return record;
72
+ });
73
+ }
74
+ list(filter) {
75
+ return __awaiter(this, void 0, void 0, function* () {
76
+ const records = yield this.rows.list();
77
+ return records
78
+ .filter((record) => ((filter === null || filter === void 0 ? void 0 : filter.kind) === undefined || record.kind === filter.kind) &&
79
+ ((filter === null || filter === void 0 ? void 0 : filter.sessionId) === undefined ||
80
+ record.sessionId === filter.sessionId))
81
+ .sort(byNewestUpdated);
82
+ });
83
+ }
84
+ /**
85
+ * Resolve the effective kind (freeform when no kinds are declared) and
86
+ * the payload to persist. Like tool input schemas
87
+ * (`validateToolInput`), zod schemas validate *and* transform: the
88
+ * parsed output — defaults and coercions applied — is what gets stored.
89
+ */
90
+ resolveKindAndData(input) {
91
+ var _a;
92
+ var _b;
93
+ const kind = (_b = input.kind) !== null && _b !== void 0 ? _b : ARTIFACT_DEFAULT_KIND;
94
+ if (kind.trim() === "") {
95
+ throw new Error("artifacts.tag: kind must be a non-empty string");
96
+ }
97
+ const kinds = (_a = this.config) === null || _a === void 0 ? void 0 : _a.kinds;
98
+ if (kinds === undefined || Object.keys(kinds).length === 0) {
99
+ return { kind, data: input.data };
100
+ }
101
+ const kindConfig = kinds[kind];
102
+ if (kindConfig === undefined) {
103
+ throw new Error(`artifacts.tag: unknown kind ${JSON.stringify(kind)} (declared: ${Object.keys(kinds).join(", ")})`);
104
+ }
105
+ if (kindConfig.schema !== undefined) {
106
+ const parsed = kindConfig.schema.safeParse(input.data);
107
+ if (!parsed.success) {
108
+ throw new Error(`artifacts.tag: data does not match the ${JSON.stringify(kind)} schema: ${parsed.error.message}`);
109
+ }
110
+ return { kind, data: parsed.data };
111
+ }
112
+ return { kind, data: input.data };
113
+ }
114
+ evictPastCap() {
115
+ return __awaiter(this, void 0, void 0, function* () {
116
+ const records = yield this.rows.list();
117
+ if (records.length <= this.max) {
118
+ return;
119
+ }
120
+ const oldestFirst = records.sort((a, b) => byNewestUpdated(b, a));
121
+ for (const record of oldestFirst.slice(0, records.length - this.max)) {
122
+ yield this.rows.delete(record.id);
123
+ }
124
+ });
125
+ }
126
+ }
127
+ /** Deterministic id for a keyed tag (same key ⇒ same id ⇒ upsert). */
128
+ export function artifactIdForKey(key) {
129
+ if (key.trim() === "") {
130
+ throw new Error("artifacts.tag: key must be a non-empty string");
131
+ }
132
+ return `art_${createHash("sha256").update(key, "utf8").digest("hex").slice(0, 32)}`;
133
+ }
134
+ function byNewestUpdated(a, b) {
135
+ if (a.updatedAt !== b.updatedAt) {
136
+ return a.updatedAt < b.updatedAt ? 1 : -1;
137
+ }
138
+ // Tie-break so eviction and listing stay deterministic.
139
+ if (a.createdAt !== b.createdAt) {
140
+ return a.createdAt < b.createdAt ? 1 : -1;
141
+ }
142
+ return a.id < b.id ? 1 : a.id > b.id ? -1 : 0;
143
+ }
144
+ function isArtifactRecord(value) {
145
+ if (typeof value !== "object" ||
146
+ value === null ||
147
+ Array.isArray(value) ||
148
+ typeof value.id !== "string" ||
149
+ typeof value.kind !== "string" ||
150
+ (value.source !== "host" && value.source !== "model") ||
151
+ typeof value.createdAt !== "string" ||
152
+ typeof value.updatedAt !== "string" ||
153
+ !("data" in value)) {
154
+ return false;
155
+ }
156
+ for (const field of ["key", "title", "sessionId", "turnId"]) {
157
+ if (value[field] !== undefined && typeof value[field] !== "string") {
158
+ return false;
159
+ }
160
+ }
161
+ return true;
162
+ }
163
+ function createCoordinatorRowStore(storage) {
164
+ return {
165
+ get(id) {
166
+ return __awaiter(this, void 0, void 0, function* () {
167
+ const value = yield storage.artifactGet(id);
168
+ return isArtifactRecord(value) ? value : undefined;
169
+ });
170
+ },
171
+ put(record) {
172
+ return __awaiter(this, void 0, void 0, function* () {
173
+ yield storage.artifactPut(record.id, record);
174
+ });
175
+ },
176
+ delete(id) {
177
+ return __awaiter(this, void 0, void 0, function* () {
178
+ yield storage.artifactDelete(id);
179
+ });
180
+ },
181
+ list() {
182
+ return __awaiter(this, void 0, void 0, function* () {
183
+ const values = yield storage.artifactList();
184
+ return values.filter(isArtifactRecord);
185
+ });
186
+ },
187
+ };
188
+ }
189
+ function createFilesystemRowStore(stateRoot) {
190
+ const dir = join(stateRoot, "artifacts");
191
+ const filePath = (id) => join(dir, `${encodeURIComponent(id)}.json`);
192
+ // Missing and corrupt rows both read as absent — a truncated/garbled
193
+ // file must not poison list() (and with it every insert's eviction).
194
+ const readRecord = (path) => __awaiter(this, void 0, void 0, function* () {
195
+ try {
196
+ const value = JSON.parse(yield readFile(path, "utf8"));
197
+ return isArtifactRecord(value) ? value : undefined;
198
+ }
199
+ catch (error) {
200
+ if (error.code === "ENOENT" ||
201
+ error instanceof SyntaxError) {
202
+ return undefined;
203
+ }
204
+ throw error;
205
+ }
206
+ });
207
+ return {
208
+ get(id) {
209
+ return readRecord(filePath(id));
210
+ },
211
+ put(record) {
212
+ return __awaiter(this, void 0, void 0, function* () {
213
+ yield mkdir(dir, { recursive: true });
214
+ const tmp = join(dir, `.tmp-${randomUUID()}`);
215
+ yield writeFile(tmp, JSON.stringify(record), "utf8");
216
+ yield rename(tmp, filePath(record.id));
217
+ });
218
+ },
219
+ delete(id) {
220
+ return __awaiter(this, void 0, void 0, function* () {
221
+ yield rm(filePath(id), { force: true });
222
+ });
223
+ },
224
+ list() {
225
+ return __awaiter(this, void 0, void 0, function* () {
226
+ let names;
227
+ try {
228
+ names = yield readdir(dir);
229
+ }
230
+ catch (error) {
231
+ if (error.code === "ENOENT") {
232
+ return [];
233
+ }
234
+ throw error;
235
+ }
236
+ const records = [];
237
+ for (const name of names.sort()) {
238
+ if (name.startsWith(".") || !name.endsWith(".json")) {
239
+ continue;
240
+ }
241
+ const record = yield readRecord(join(dir, name));
242
+ if (record !== undefined) {
243
+ records.push(record);
244
+ }
245
+ }
246
+ return records;
247
+ });
248
+ },
249
+ };
250
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The `tag_artifact` built-in tool, enabled by
3
+ * `defineArtifacts({ agentTool: true })` rather than
4
+ * `AgentConfig.builtinTools`: its input schema and description are
5
+ * generated from the declared kinds registry.
6
+ */
7
+ import type { ArtifactsConfig, ToolDefinition } from "../../types.js";
8
+ export declare const TAG_ARTIFACT_TOOL_NAME = "tag_artifact";
9
+ export declare function tagArtifactTool(config: ArtifactsConfig): ToolDefinition;
10
+ //# sourceMappingURL=artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../src/internal/builtin-tools/artifacts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEtE,eAAO,MAAM,sBAAsB,iBAAiB,CAAC;AA0BrD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,CAoCvE"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * The `tag_artifact` built-in tool, enabled by
3
+ * `defineArtifacts({ agentTool: true })` rather than
4
+ * `AgentConfig.builtinTools`: its input schema and description are
5
+ * generated from the declared kinds registry.
6
+ */
7
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
+ return new (P || (P = Promise))(function (resolve, reject) {
10
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14
+ });
15
+ };
16
+ import { z } from "zod";
17
+ import { defineTool } from "../../tools.js";
18
+ export const TAG_ARTIFACT_TOOL_NAME = "tag_artifact";
19
+ function kindVariant(name, schema) {
20
+ return z.object({
21
+ kind: z.literal(name),
22
+ data: schema !== null && schema !== void 0 ? schema : z
23
+ .object({})
24
+ .passthrough()
25
+ .describe("Freeform JSON object payload for this kind."),
26
+ title: z
27
+ .string()
28
+ .optional()
29
+ .describe("Short human-readable label shown in artifact lists."),
30
+ key: z
31
+ .string()
32
+ .trim()
33
+ .min(1)
34
+ .optional()
35
+ .describe("Stable upsert key: tagging the same key again updates the existing record instead of creating a new one."),
36
+ });
37
+ }
38
+ export function tagArtifactTool(config) {
39
+ var _a;
40
+ const kinds = Object.entries((_a = config.kinds) !== null && _a !== void 0 ? _a : {});
41
+ const [first, ...rest] = kinds.map(([name, kind]) => kindVariant(name, kind.schema));
42
+ if (first === undefined) {
43
+ // Discovery already errors on agentTool without kinds.
44
+ throw new Error("tag_artifact requires at least one declared artifact kind");
45
+ }
46
+ const description = [
47
+ "Tag a durable artifact: a record of a notable output you produced, kept across sessions and listed for the people supervising this agent. Tag one whenever you finish something worth surfacing durably.",
48
+ "Kinds:",
49
+ ...kinds.map(([name, kind]) => `- ${name}: ${kind.description}`),
50
+ "Same `key` upserts: tagging it again updates that record — use a stable key when re-tagging the same underlying thing (e.g. the same PR URL).",
51
+ ].join("\n");
52
+ return defineTool({
53
+ description,
54
+ inputSchema: z.discriminatedUnion("kind", [first, ...rest]),
55
+ execute(input, ctx) {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ const record = yield ctx.artifacts.tag({
58
+ kind: input.kind,
59
+ data: input.data,
60
+ title: input.title,
61
+ key: input.key,
62
+ source: "model",
63
+ });
64
+ return {
65
+ tagged: true,
66
+ id: record.id,
67
+ kind: record.kind,
68
+ key: record.key,
69
+ };
70
+ });
71
+ },
72
+ });
73
+ }
@@ -4,7 +4,14 @@
4
4
  * time so turns, direct calls, `info`, and the playground treat them
5
5
  * exactly like authored tools.
6
6
  */
7
- import type { BuiltinToolsConfig, DiscoveredTool } from "../../types.js";
7
+ import type { ArtifactsConfig, BuiltinToolsConfig, DiscoveredTool } from "../../types.js";
8
+ export { TAG_ARTIFACT_TOOL_NAME } from "./artifacts.js";
8
9
  /** Resolve the enabled built-in tools, in stable catalog order. */
9
10
  export declare function builtinTools(config: BuiltinToolsConfig | undefined): DiscoveredTool[];
11
+ /**
12
+ * The `tag_artifact` built-in, enabled by `defineArtifacts({ agentTool:
13
+ * true })` (not `AgentConfig.builtinTools` — the tool is generated from
14
+ * the kinds registry). Undefined without kinds: discovery already errors.
15
+ */
16
+ export declare function artifactBuiltinTool(config: ArtifactsConfig | undefined): DiscoveredTool | undefined;
10
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal/builtin-tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EAEf,MAAM,gBAAgB,CAAC;AAIxB,mEAAmE;AACnE,wBAAgB,YAAY,CAC1B,MAAM,EAAE,kBAAkB,GAAG,SAAS,GACrC,cAAc,EAAE,CAMlB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal/builtin-tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,cAAc,EAEf,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,mEAAmE;AACnE,wBAAgB,YAAY,CAC1B,MAAM,EAAE,kBAAkB,GAAG,SAAS,GACrC,cAAc,EAAE,CAMlB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,GAAG,SAAS,GAClC,cAAc,GAAG,SAAS,CAQ5B"}
@@ -5,7 +5,9 @@
5
5
  * exactly like authored tools.
6
6
  */
7
7
  import { toolInputJsonSchema } from "../json-schema.js";
8
+ import { TAG_ARTIFACT_TOOL_NAME, tagArtifactTool } from "./artifacts.js";
8
9
  import { reminderTools } from "./reminders.js";
10
+ export { TAG_ARTIFACT_TOOL_NAME } from "./artifacts.js";
9
11
  /** Resolve the enabled built-in tools, in stable catalog order. */
10
12
  export function builtinTools(config) {
11
13
  const tools = [];
@@ -14,6 +16,19 @@ export function builtinTools(config) {
14
16
  }
15
17
  return tools;
16
18
  }
19
+ /**
20
+ * The `tag_artifact` built-in, enabled by `defineArtifacts({ agentTool:
21
+ * true })` (not `AgentConfig.builtinTools` — the tool is generated from
22
+ * the kinds registry). Undefined without kinds: discovery already errors.
23
+ */
24
+ export function artifactBuiltinTool(config) {
25
+ var _a;
26
+ if ((config === null || config === void 0 ? void 0 : config.agentTool) !== true ||
27
+ Object.keys((_a = config.kinds) !== null && _a !== void 0 ? _a : {}).length === 0) {
28
+ return undefined;
29
+ }
30
+ return toDiscovered({ [TAG_ARTIFACT_TOOL_NAME]: tagArtifactTool(config) })[0];
31
+ }
17
32
  function toDiscovered(byName) {
18
33
  return Object.entries(byName).map(([name, definition]) => ({
19
34
  name,
@@ -187,6 +187,17 @@ export declare function cmdSessions(options: AxCliOptions): Promise<number>;
187
187
  * Interactive reattach: `resume [id]` / `chat --resume` (or `chat --session`).
188
188
  */
189
189
  export declare function cmdSession(sessionId: string | undefined, options: AxCliOptions): Promise<number>;
190
+ /**
191
+ * `cost [sessionId]` — pull per-session cost metrics.
192
+ *
193
+ * With a session id: per-turn token usage + estimated cost for that session.
194
+ * Without one: one row per session (all sessions on the target) plus a
195
+ * total row. `--json` prints the underlying report(s); text is the default.
196
+ * Costs are the engine's recorded estimates on `turn.completed` events
197
+ * (see `model-pricing.ts`); turns persisted before cost tracking simply
198
+ * count as unpriced.
199
+ */
200
+ export declare function cmdCost(sessionId: string | undefined, options: AxCliOptions): Promise<number>;
190
201
  /**
191
202
  * `playground` — open the web UI against local / `--url` / `--prod`.
192
203
  *
@@ -1 +1 @@
1
- {"version":3,"file":"cli-ax.d.ts","sourceRoot":"","sources":["../../src/internal/cli-ax.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-ax.d.ts","sourceRoot":"","sources":["../../src/internal/cli-ax.ts"],"names":[],"mappings":"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"}
@@ -30,10 +30,12 @@ import { cancelRemoteEvalRun, getRemoteEvalRun, listRemoteEvalRuns, listRemoteEv
30
30
  import { formatInitNextSteps, formatInitScaffoldSummary, initNextCommands, initProject, installScaffoldDependencies, printInitGuide, } from "./init-project.js";
31
31
  import { offerInstallCursorSkills } from "./install-cursor-skills.js";
32
32
  import { runLogsTail, sanitizeCustomerError } from "./logs-client.js";
33
+ import { mapPool } from "./map-pool.js";
33
34
  import { openBrowser } from "./open-browser.js";
34
35
  import { startPlaygroundProxy } from "./playground-proxy.js";
35
36
  import { ProdTargetError, resolveProdAliasPlaygroundUrl, resolveProdSlug, resolveProdTarget, } from "./resolve-prod-target.js";
36
37
  import { runSession } from "./run-client.js";
38
+ import { buildSessionCostReport, formatSessionCostText, formatSessionsCostText, } from "./session-cost.js";
37
39
  import { fetchSessionEvents, formatSessionsTable, listSessionsWithSource, resolvePreviousSessionId, } from "./sessions-client.js";
38
40
  import { createStreamProgress } from "./stream-progress.js";
39
41
  import { buildTrajectory, formatTrajectoryText, loadTrajectoryFromEventsFile, } from "./trajectory.js";
@@ -1351,6 +1353,84 @@ export function cmdSession(sessionId, options) {
1351
1353
  }
1352
1354
  });
1353
1355
  }
1356
+ /** Sessions fetched concurrently when `cost` aggregates every session. */
1357
+ const COST_FETCH_CONCURRENCY = 4;
1358
+ /**
1359
+ * `cost [sessionId]` — pull per-session cost metrics.
1360
+ *
1361
+ * With a session id: per-turn token usage + estimated cost for that session.
1362
+ * Without one: one row per session (all sessions on the target) plus a
1363
+ * total row. `--json` prints the underlying report(s); text is the default.
1364
+ * Costs are the engine's recorded estimates on `turn.completed` events
1365
+ * (see `model-pricing.ts`); turns persisted before cost tracking simply
1366
+ * count as unpriced.
1367
+ */
1368
+ export function cmdCost(sessionId, options) {
1369
+ return __awaiter(this, void 0, void 0, function* () {
1370
+ const target = yield resolveSessionTarget(options);
1371
+ if (typeof target === "number") {
1372
+ return target;
1373
+ }
1374
+ const auth = {
1375
+ bearerToken: options.bearerToken,
1376
+ headers: target.headers,
1377
+ };
1378
+ try {
1379
+ const resolved = trimNonEmpty(sessionId);
1380
+ if (resolved !== undefined) {
1381
+ const events = yield fetchSessionEvents({
1382
+ baseUrl: target.agentUrl,
1383
+ sessionId: resolved,
1384
+ auth,
1385
+ fetchImpl: options.fetchImpl,
1386
+ });
1387
+ const report = buildSessionCostReport(events);
1388
+ if (report.sessionId === "") {
1389
+ report.sessionId = resolved;
1390
+ }
1391
+ if (options.json === true) {
1392
+ process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
1393
+ }
1394
+ else {
1395
+ process.stdout.write(formatSessionCostText(report));
1396
+ }
1397
+ return 0;
1398
+ }
1399
+ const listed = yield listSessionsWithSource({
1400
+ baseUrl: target.agentUrl,
1401
+ auth,
1402
+ fetchImpl: options.fetchImpl,
1403
+ });
1404
+ const rows = yield mapPool(listed.sessions, COST_FETCH_CONCURRENCY, (session) => __awaiter(this, void 0, void 0, function* () {
1405
+ const events = yield fetchSessionEvents({
1406
+ baseUrl: target.agentUrl,
1407
+ sessionId: session.sessionId,
1408
+ auth,
1409
+ fetchImpl: options.fetchImpl,
1410
+ });
1411
+ const report = buildSessionCostReport(events);
1412
+ return {
1413
+ sessionId: session.sessionId,
1414
+ channelId: session.channelId,
1415
+ title: session.title,
1416
+ updatedAt: session.updatedAt,
1417
+ totals: report.totals,
1418
+ };
1419
+ }));
1420
+ if (options.json === true) {
1421
+ process.stdout.write(`${JSON.stringify({ sessions: rows }, null, 2)}\n`);
1422
+ }
1423
+ else {
1424
+ process.stdout.write(formatSessionsCostText(rows));
1425
+ }
1426
+ return 0;
1427
+ }
1428
+ catch (error) {
1429
+ process.stderr.write(`${sanitizeCustomerError(error instanceof Error ? error.message : String(error))}\n`);
1430
+ return 1;
1431
+ }
1432
+ });
1433
+ }
1354
1434
  /**
1355
1435
  * `playground` — open the web UI against local / `--url` / `--prod`.
1356
1436
  *
@@ -1 +1 @@
1
- {"version":3,"file":"cli-slack.d.ts","sourceRoot":"","sources":["../../src/internal/cli-slack.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAML,cAAc,EAGf,MAAM,4BAA4B,CAAC;AAoBpC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,cAAc,CAAC;IACnC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AA6CD,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAmbD,wBAAsB,cAAc,CAClC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAmOjB;AAiDD,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CA4CjB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAsD5E"}
1
+ {"version":3,"file":"cli-slack.d.ts","sourceRoot":"","sources":["../../src/internal/cli-slack.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAML,cAAc,EAGf,MAAM,4BAA4B,CAAC;AAoBpC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,cAAc,CAAC;IACnC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AA6CD,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CA4BjB;AA6bD,wBAAsB,cAAc,CAClC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAkOjB;AAiDD,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CA4CjB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAsD5E"}