@cursor/july 0.1.30 → 0.1.31

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 (392) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +10 -5
  3. package/dist/bin/agent-serve.js +4 -4
  4. package/dist/channels/github/index.d.ts +1 -1
  5. package/dist/channels/github/index.js +1 -1
  6. package/dist/channels/slack/bot-mentions.d.ts +1 -1
  7. package/dist/channels/slack/bot-mentions.d.ts.map +1 -1
  8. package/dist/channels/slack/bot-mentions.js +1 -1
  9. package/dist/channels/slack/eval-directive.js +1 -1
  10. package/dist/channels/slack/external-policy.d.ts +1 -1
  11. package/dist/channels/slack/external-policy.js +1 -1
  12. package/dist/channels/slack/log.d.ts +1 -1
  13. package/dist/channels/slack/log.js +1 -1
  14. package/dist/channels/slack/setup.js +1 -1
  15. package/dist/channels/slack/socket-mode.js +1 -1
  16. package/dist/docs/404.html +3 -3
  17. package/dist/docs/ab.html +11 -11
  18. package/dist/docs/assets/{ab.md.BMCZ6Hd7.js → ab.md.DAQoJ-up.js} +6 -6
  19. package/dist/docs/assets/{ab.md.BMCZ6Hd7.lean.js → ab.md.DAQoJ-up.lean.js} +1 -1
  20. package/dist/docs/assets/{app.Cm4lsMc4.js → app.DigB_9cQ.js} +1 -1
  21. package/dist/docs/assets/building-with-agents.md.CnHqvYDd.js +13 -0
  22. package/dist/docs/assets/{building-with-agents.md.CJCtZCyi.lean.js → building-with-agents.md.CnHqvYDd.lean.js} +1 -1
  23. package/dist/docs/assets/chunks/@localSearchIndexroot.CnFFl07y.js +1 -0
  24. package/dist/docs/assets/chunks/{VPLocalSearchBox.CYUFXspH.js → VPLocalSearchBox.BCMX25Bv.js} +1 -1
  25. package/dist/docs/assets/chunks/{theme.CTjkX9vc.js → theme.BDDWeELx.js} +2 -2
  26. package/dist/docs/assets/concepts.md.DFaQEFkA.js +4 -0
  27. package/dist/docs/assets/concepts.md.DFaQEFkA.lean.js +1 -0
  28. package/dist/docs/assets/deployment.md.9MYBuKM1.js +55 -0
  29. package/dist/docs/assets/deployment.md.9MYBuKM1.lean.js +1 -0
  30. package/dist/docs/assets/{evals.md.DYOjkRCX.js → evals.md.BIUoVZ6X.js} +13 -13
  31. package/dist/docs/assets/evals.md.BIUoVZ6X.lean.js +1 -0
  32. package/dist/docs/assets/{example-agents_approval-buddy.md.DFGBYLcc.js → example-agents_approval-buddy.md.BhEfleVx.js} +4 -4
  33. package/dist/docs/assets/{example-agents_approval-buddy.md.DFGBYLcc.lean.js → example-agents_approval-buddy.md.BhEfleVx.lean.js} +1 -1
  34. package/dist/docs/assets/example-agents_benny.md.2Et1qa8f.js +7 -0
  35. package/dist/docs/assets/{example-agents_bugbot.md.DelIdhxB.js → example-agents_bugbot.md.ByUexi5i.js} +5 -5
  36. package/dist/docs/assets/{example-agents_codebase-wiki.md.DC6sgwn0.js → example-agents_codebase-wiki.md.B4y-7ZVW.js} +6 -6
  37. package/dist/docs/assets/{example-agents_codebase-wiki.md.DC6sgwn0.lean.js → example-agents_codebase-wiki.md.B4y-7ZVW.lean.js} +1 -1
  38. package/dist/docs/assets/{example-agents_codeowners-review.md.Ku_tG2RY.js → example-agents_codeowners-review.md.D6ay4nvf.js} +6 -6
  39. package/dist/docs/assets/{example-agents_codeowners-review.md.Ku_tG2RY.lean.js → example-agents_codeowners-review.md.D6ay4nvf.lean.js} +1 -1
  40. package/dist/docs/assets/{example-agents_concierge.md.4rQTSMXt.js → example-agents_concierge.md.lL8rhYlj.js} +7 -7
  41. package/dist/docs/assets/{example-agents_fsd.md.CzgUrDfi.js → example-agents_fsd.md.DfNKQTHz.js} +5 -5
  42. package/dist/docs/assets/example-agents_index.md.DgGBwckv.js +2 -0
  43. package/dist/docs/assets/example-agents_index.md.DgGBwckv.lean.js +1 -0
  44. package/dist/docs/assets/{example-agents_knowledge-base.md.BPJiVueF.js → example-agents_knowledge-base.md.CzyZ2DCr.js} +5 -5
  45. package/dist/docs/assets/{example-agents_knowledge-base.md.BPJiVueF.lean.js → example-agents_knowledge-base.md.CzyZ2DCr.lean.js} +1 -1
  46. package/dist/docs/assets/example-agents_oncall.md.wFFXXEyW.js +10 -0
  47. package/dist/docs/assets/{example-agents_security-reviewer.md.Dhj_m7_B.js → example-agents_security-reviewer.md.Dkf1gyo6.js} +8 -8
  48. package/dist/docs/assets/example-agents_slack-agent.md.DvgvT4nn.js +5 -0
  49. package/dist/docs/assets/example-agents_weather-agent.md.Dmrcphhl.js +24 -0
  50. package/dist/docs/assets/example-agents_weather-agent.md.Dmrcphhl.lean.js +1 -0
  51. package/dist/docs/assets/{guides_agent-to-agent.md.Bpzgq2Pq.js → guides_agent-to-agent.md.Bmbxy-FA.js} +4 -4
  52. package/dist/docs/assets/guides_cloud-runtime.md.BZ2GA7Es.js +9 -0
  53. package/dist/docs/assets/{guides_github.md.DOOCpqsW.js → guides_github.md.R2QlpR75.js} +5 -5
  54. package/dist/docs/assets/{guides_human-in-the-loop.md.DlUqsp1S.js → guides_human-in-the-loop.md.BWvT7UqY.js} +1 -1
  55. package/dist/docs/assets/{guides_mcp-oauth.md.Dd8EgSem.js → guides_mcp-oauth.md.C7G7IykG.js} +5 -5
  56. package/dist/docs/assets/guides_mcp-oauth.md.C7G7IykG.lean.js +1 -0
  57. package/dist/docs/assets/guides_slack.md.zriQpU_9.js +47 -0
  58. package/dist/docs/assets/guides_slack.md.zriQpU_9.lean.js +1 -0
  59. package/dist/docs/assets/{guides_webhooks.md.wSOYas3X.js → guides_webhooks.md.DiAwSR42.js} +1 -1
  60. package/dist/docs/assets/{hillclimbing.md.DHNast08.js → hillclimbing.md.D9Y1_bYh.js} +1 -1
  61. package/dist/docs/assets/index.md.CZqbBJPB.js +20 -0
  62. package/dist/docs/assets/index.md.CZqbBJPB.lean.js +1 -0
  63. package/dist/docs/assets/{quickstart.md.BU6Iwi_9.js → quickstart.md.TnEXYgYW.js} +12 -12
  64. package/dist/docs/assets/{reference_agent-config.md.DrW2JUM8.js → reference_agent-config.md.kuN6-OxK.js} +1 -1
  65. package/dist/docs/assets/reference_cli.md.sD-IUWjg.js +73 -0
  66. package/dist/docs/assets/{reference_cli.md.ccoKOoXt.lean.js → reference_cli.md.sD-IUWjg.lean.js} +1 -1
  67. package/dist/docs/assets/{reference_connections.md.B9Q3TOve.js → reference_connections.md.DGqAsFXb.js} +3 -3
  68. package/dist/docs/assets/reference_http-api.md.CfVM_ICa.js +11 -0
  69. package/dist/docs/assets/{reference_project-layout.md.Bd_CKtNS.js → reference_project-layout.md.D8E6ZmHJ.js} +4 -4
  70. package/dist/docs/assets/{reference_project-layout.md.Bd_CKtNS.lean.js → reference_project-layout.md.D8E6ZmHJ.lean.js} +1 -1
  71. package/dist/docs/assets/{reference_schedules.md.w_F2mXB6.js → reference_schedules.md.gmfYzf_I.js} +1 -1
  72. package/dist/docs/assets/{reference_sessions.md.DLd6mvbv.js → reference_sessions.md.C_ouF_uf.js} +3 -3
  73. package/dist/docs/assets/{reference_tools.md.BRSDnTbN.js → reference_tools.md.BswAQM41.js} +3 -3
  74. package/dist/docs/assets/{scaffolding-agents.md.C3pTrmoE.js → scaffolding-agents.md.Bsr9Pwzu.js} +1 -1
  75. package/dist/docs/assets/{scaffolding-agents.md.C3pTrmoE.lean.js → scaffolding-agents.md.Bsr9Pwzu.lean.js} +1 -1
  76. package/dist/docs/assets/{storage.md.DRTdnFvd.js → storage.md.xZoiGM58.js} +3 -3
  77. package/dist/docs/assets/storage.md.xZoiGM58.lean.js +1 -0
  78. package/dist/docs/assets/troubleshooting.md.B5RVX_tL.js +1 -0
  79. package/dist/docs/assets/{troubleshooting.md.CmQkmnzC.lean.js → troubleshooting.md.B5RVX_tL.lean.js} +1 -1
  80. package/dist/docs/building-with-agents.html +12 -12
  81. package/dist/docs/concepts.html +6 -6
  82. package/dist/docs/deployment.html +32 -32
  83. package/dist/docs/evals.html +19 -19
  84. package/dist/docs/example-agents/approval-buddy.html +9 -9
  85. package/dist/docs/example-agents/benny.html +11 -11
  86. package/dist/docs/example-agents/bugbot.html +10 -10
  87. package/dist/docs/example-agents/codebase-wiki.html +11 -11
  88. package/dist/docs/example-agents/codeowners-review.html +11 -11
  89. package/dist/docs/example-agents/concierge.html +12 -12
  90. package/dist/docs/example-agents/fsd.html +10 -10
  91. package/dist/docs/example-agents/index.html +7 -7
  92. package/dist/docs/example-agents/knowledge-base.html +10 -10
  93. package/dist/docs/example-agents/oncall.html +10 -10
  94. package/dist/docs/example-agents/security-reviewer.html +13 -13
  95. package/dist/docs/example-agents/slack-agent.html +10 -10
  96. package/dist/docs/example-agents/weather-agent.html +16 -16
  97. package/dist/docs/guides/agent-to-agent.html +9 -9
  98. package/dist/docs/guides/cloud-runtime.html +7 -7
  99. package/dist/docs/guides/github.html +10 -10
  100. package/dist/docs/guides/human-in-the-loop.html +7 -7
  101. package/dist/docs/guides/mcp-oauth.html +11 -11
  102. package/dist/docs/guides/slack.html +22 -17
  103. package/dist/docs/guides/webhooks.html +7 -7
  104. package/dist/docs/hashmap.json +1 -1
  105. package/dist/docs/hillclimbing.html +7 -7
  106. package/dist/docs/index.html +9 -9
  107. package/dist/docs/quickstart.html +17 -17
  108. package/dist/docs/reference/agent-config.html +7 -7
  109. package/dist/docs/reference/channels.html +5 -5
  110. package/dist/docs/reference/cli.html +56 -48
  111. package/dist/docs/reference/connections.html +9 -9
  112. package/dist/docs/reference/hooks.html +5 -5
  113. package/dist/docs/reference/http-api.html +7 -7
  114. package/dist/docs/reference/instructions.html +5 -5
  115. package/dist/docs/reference/playground.html +5 -5
  116. package/dist/docs/reference/project-layout.html +9 -9
  117. package/dist/docs/reference/prompt.html +5 -5
  118. package/dist/docs/reference/schedules.html +7 -7
  119. package/dist/docs/reference/sessions.html +8 -8
  120. package/dist/docs/reference/skills.html +5 -5
  121. package/dist/docs/reference/subagents.html +5 -5
  122. package/dist/docs/reference/tools.html +9 -9
  123. package/dist/docs/scaffolding-agents.html +6 -6
  124. package/dist/docs/storage.html +9 -9
  125. package/dist/docs/troubleshooting.html +6 -6
  126. package/dist/evals/reporters.d.ts +1 -1
  127. package/dist/evals/reporters.js +1 -1
  128. package/dist/evals.d.ts +2 -2
  129. package/dist/files-backends/agent-store-presigned-url.d.ts +100 -0
  130. package/dist/files-backends/agent-store-presigned-url.d.ts.map +1 -0
  131. package/dist/files-backends/agent-store-presigned-url.js +347 -0
  132. package/dist/files-backends/cursor-hosted.d.ts +87 -0
  133. package/dist/files-backends/cursor-hosted.d.ts.map +1 -0
  134. package/dist/files-backends/cursor-hosted.js +540 -0
  135. package/dist/files-backends/local-fs.d.ts +33 -0
  136. package/dist/files-backends/local-fs.d.ts.map +1 -0
  137. package/dist/files-backends/local-fs.js +199 -0
  138. package/dist/files.d.ts +139 -0
  139. package/dist/files.d.ts.map +1 -0
  140. package/dist/files.js +89 -0
  141. package/dist/internal/ab-collector.js +2 -2
  142. package/dist/internal/ab-fold.js +1 -1
  143. package/dist/internal/cli-ax.d.ts +2 -2
  144. package/dist/internal/cli-ax.js +2 -2
  145. package/dist/internal/cli-deploy.d.ts +1 -1
  146. package/dist/internal/cli-deploy.d.ts.map +1 -1
  147. package/dist/internal/cli-deploy.js +7 -2
  148. package/dist/internal/cli-docs.d.ts +1 -1
  149. package/dist/internal/cli-docs.js +1 -1
  150. package/dist/internal/cli-github.js +13 -13
  151. package/dist/internal/cli-mcp-oauth.d.ts +1 -1
  152. package/dist/internal/cli-mcp-oauth.js +2 -2
  153. package/dist/internal/cli-mcp.d.ts +3 -3
  154. package/dist/internal/cli-mcp.js +4 -4
  155. package/dist/internal/cli-skills.js +1 -1
  156. package/dist/internal/cloud-turn-cost.d.ts +9 -1
  157. package/dist/internal/cloud-turn-cost.d.ts.map +1 -1
  158. package/dist/internal/cloud-turn-cost.js +14 -4
  159. package/dist/internal/cursor/account-mcp.js +5 -5
  160. package/dist/internal/cursor/backend-client.js +1 -1
  161. package/dist/internal/cursor/github-credentials.js +3 -3
  162. package/dist/internal/cursor-account-mcp-auth.d.ts +1 -1
  163. package/dist/internal/cursor-account-mcp-auth.js +1 -1
  164. package/dist/internal/cursor-event-relay.js +1 -1
  165. package/dist/internal/cursor-relay-core.d.ts +1 -1
  166. package/dist/internal/cursor-relay-core.d.ts.map +1 -1
  167. package/dist/internal/cursor-slack-relay.js +1 -1
  168. package/dist/internal/deploy-client.d.ts +6 -1
  169. package/dist/internal/deploy-client.d.ts.map +1 -1
  170. package/dist/internal/deploy-client.js +3 -2
  171. package/dist/internal/deploy-source.d.ts +2 -2
  172. package/dist/internal/deploy-source.js +2 -2
  173. package/dist/internal/discovery.js +2 -2
  174. package/dist/internal/distribution.d.ts +5 -5
  175. package/dist/internal/distribution.d.ts.map +1 -1
  176. package/dist/internal/distribution.js +6 -6
  177. package/dist/internal/docs-site.js +5 -5
  178. package/dist/internal/eval-run-store.js +8 -8
  179. package/dist/internal/evals-client.d.ts +1 -1
  180. package/dist/internal/evals-client.js +1 -1
  181. package/dist/internal/github-fanout.js +2 -2
  182. package/dist/internal/host-files.d.ts +29 -0
  183. package/dist/internal/host-files.d.ts.map +1 -0
  184. package/dist/internal/host-files.js +283 -0
  185. package/dist/internal/host-platforms.js +5 -5
  186. package/dist/internal/hosting.d.ts +1 -1
  187. package/dist/internal/hosting.js +1 -1
  188. package/dist/internal/http-channel.d.ts.map +1 -1
  189. package/dist/internal/http-channel.js +26 -0
  190. package/dist/internal/install-cursor-skills.d.ts +1 -1
  191. package/dist/internal/install-cursor-skills.d.ts.map +1 -1
  192. package/dist/internal/install-cursor-skills.js +33 -4
  193. package/dist/internal/local-control-plane.js +2 -2
  194. package/dist/internal/logs-client.d.ts +2 -2
  195. package/dist/internal/logs-client.js +2 -2
  196. package/dist/internal/mcp-endpoint.js +1 -1
  197. package/dist/internal/mcp-oauth.js +2 -2
  198. package/dist/internal/platform-schedule-sync.js +2 -2
  199. package/dist/internal/playground/toolchain.js +6 -6
  200. package/dist/internal/reminder-runner.js +13 -13
  201. package/dist/internal/resolved-connections.js +6 -6
  202. package/dist/internal/schedule-runner.js +1 -1
  203. package/dist/internal/sdk-runner.js +5 -5
  204. package/dist/internal/server.js +16 -16
  205. package/dist/internal/session-cost.d.ts +3 -2
  206. package/dist/internal/session-cost.d.ts.map +1 -1
  207. package/dist/internal/session-cost.js +7 -6
  208. package/dist/internal/session-engine.d.ts +31 -1
  209. package/dist/internal/session-engine.d.ts.map +1 -1
  210. package/dist/internal/session-engine.js +119 -31
  211. package/dist/internal/slack-provision-client.js +1 -1
  212. package/dist/internal/storage-coordinator.js +7 -7
  213. package/dist/internal/trajectory.js +2 -2
  214. package/dist/internal/turn-cost.d.ts +27 -0
  215. package/dist/internal/turn-cost.d.ts.map +1 -0
  216. package/dist/internal/turn-cost.js +83 -0
  217. package/dist/internal/update-check.d.ts +3 -3
  218. package/dist/internal/update-check.d.ts.map +1 -1
  219. package/dist/internal/update-check.js +5 -5
  220. package/dist/memory.d.ts +1 -1
  221. package/dist/memory.js +1 -1
  222. package/dist/playground/assets/index-50PKeJlG.css +1 -0
  223. package/dist/playground/assets/index-C0f2Wl1q.js +85 -0
  224. package/dist/playground/index.html +2 -2
  225. package/dist/storage.d.ts +1 -1
  226. package/dist/storage.js +1 -1
  227. package/dist/types.d.ts +120 -16
  228. package/dist/types.d.ts.map +1 -1
  229. package/docs/README.md +23 -23
  230. package/docs/ab.md +12 -12
  231. package/docs/building-with-agents.md +9 -9
  232. package/docs/concepts.md +11 -11
  233. package/docs/deployment.md +55 -43
  234. package/docs/evals.md +20 -20
  235. package/docs/example-agents/approval-buddy.md +9 -9
  236. package/docs/example-agents/benny.md +13 -13
  237. package/docs/example-agents/bugbot.md +6 -6
  238. package/docs/example-agents/codebase-wiki.md +8 -8
  239. package/docs/example-agents/codeowners-review.md +8 -8
  240. package/docs/example-agents/concierge.md +10 -10
  241. package/docs/example-agents/fsd.md +7 -7
  242. package/docs/example-agents/index.md +8 -8
  243. package/docs/example-agents/knowledge-base.md +9 -9
  244. package/docs/example-agents/oncall.md +7 -7
  245. package/docs/example-agents/security-reviewer.md +12 -12
  246. package/docs/example-agents/slack-agent.md +10 -10
  247. package/docs/example-agents/weather-agent.md +30 -26
  248. package/docs/guides/agent-to-agent.md +4 -4
  249. package/docs/guides/cloud-runtime.md +3 -3
  250. package/docs/guides/github.md +6 -6
  251. package/docs/guides/human-in-the-loop.md +1 -1
  252. package/docs/guides/mcp-oauth.md +9 -9
  253. package/docs/guides/slack.md +94 -21
  254. package/docs/guides/webhooks.md +1 -1
  255. package/docs/hillclimbing.md +3 -3
  256. package/docs/quickstart.md +18 -18
  257. package/docs/reference/agent-config.md +1 -1
  258. package/docs/reference/cli.md +110 -79
  259. package/docs/reference/connections.md +3 -3
  260. package/docs/reference/http-api.md +2 -2
  261. package/docs/reference/project-layout.md +7 -7
  262. package/docs/reference/schedules.md +1 -1
  263. package/docs/reference/sessions.md +7 -7
  264. package/docs/reference/tools.md +3 -3
  265. package/docs/scaffolding-agents.md +2 -2
  266. package/docs/storage.md +5 -5
  267. package/docs/troubleshooting.md +11 -10
  268. package/package.json +3 -1
  269. package/skills/ab/SKILL.md +5 -5
  270. package/skills/create-agent/SKILL.md +17 -17
  271. package/skills/debug/SKILL.md +10 -10
  272. package/skills/evals/SKILL.md +13 -13
  273. package/skills/framework-map/SKILL.md +3 -3
  274. package/skills/github/SKILL.md +11 -11
  275. package/skills/hillclimb/SKILL.md +9 -9
  276. package/skills/mcp-auth/SKILL.md +11 -11
  277. package/skills/setup-slack/SKILL.md +28 -28
  278. package/src/bin/agent-serve.ts +4 -4
  279. package/src/channels/github/index.ts +1 -1
  280. package/src/channels/slack/bot-mentions.ts +1 -1
  281. package/src/channels/slack/eval-directive.ts +1 -1
  282. package/src/channels/slack/external-policy.ts +1 -1
  283. package/src/channels/slack/log.ts +1 -1
  284. package/src/channels/slack/setup.ts +1 -1
  285. package/src/channels/slack/socket-mode.ts +1 -1
  286. package/src/evals/reporters.ts +1 -1
  287. package/src/evals.ts +2 -2
  288. package/src/files-backends/agent-store-presigned-url.ts +402 -0
  289. package/src/files-backends/cursor-hosted.ts +698 -0
  290. package/src/files-backends/local-fs.ts +178 -0
  291. package/src/files.ts +195 -0
  292. package/src/internal/ab-collector.ts +2 -2
  293. package/src/internal/ab-fold.ts +1 -1
  294. package/src/internal/cli-ax.ts +2 -2
  295. package/src/internal/cli-deploy.ts +7 -2
  296. package/src/internal/cli-docs.ts +1 -1
  297. package/src/internal/cli-github.ts +13 -13
  298. package/src/internal/cli-mcp-oauth.ts +2 -2
  299. package/src/internal/cli-mcp.ts +4 -4
  300. package/src/internal/cli-skills.ts +1 -1
  301. package/src/internal/cloud-turn-cost.ts +20 -4
  302. package/src/internal/cursor/account-mcp.ts +5 -5
  303. package/src/internal/cursor/backend-client.ts +1 -1
  304. package/src/internal/cursor/github-credentials.ts +3 -3
  305. package/src/internal/cursor-account-mcp-auth.ts +1 -1
  306. package/src/internal/cursor-event-relay.ts +1 -1
  307. package/src/internal/cursor-relay-core.ts +1 -1
  308. package/src/internal/cursor-slack-relay.ts +1 -1
  309. package/src/internal/deploy-client.ts +8 -2
  310. package/src/internal/deploy-source.ts +2 -2
  311. package/src/internal/discovery.ts +2 -2
  312. package/src/internal/distribution.ts +6 -6
  313. package/src/internal/docs-site.ts +5 -5
  314. package/src/internal/eval-run-store.ts +8 -8
  315. package/src/internal/evals-client.ts +1 -1
  316. package/src/internal/github-fanout.ts +2 -2
  317. package/src/internal/host-files.ts +372 -0
  318. package/src/internal/host-platforms.ts +5 -5
  319. package/src/internal/hosting.ts +1 -1
  320. package/src/internal/http-channel.ts +30 -0
  321. package/src/internal/install-cursor-skills.ts +31 -3
  322. package/src/internal/local-control-plane.ts +2 -2
  323. package/src/internal/logs-client.ts +2 -2
  324. package/src/internal/mcp-endpoint.ts +1 -1
  325. package/src/internal/mcp-oauth.ts +2 -2
  326. package/src/internal/platform-schedule-sync.ts +2 -2
  327. package/src/internal/playground/toolchain.ts +6 -6
  328. package/src/internal/reminder-runner.ts +13 -13
  329. package/src/internal/resolved-connections.ts +6 -6
  330. package/src/internal/schedule-runner.ts +1 -1
  331. package/src/internal/sdk-runner.ts +5 -5
  332. package/src/internal/server.ts +16 -16
  333. package/src/internal/session-cost.ts +7 -6
  334. package/src/internal/session-engine.ts +141 -28
  335. package/src/internal/slack-provision-client.ts +1 -1
  336. package/src/internal/storage-coordinator.ts +7 -7
  337. package/src/internal/trajectory.ts +2 -2
  338. package/src/internal/turn-cost.ts +110 -0
  339. package/src/internal/update-check.ts +6 -6
  340. package/src/memory.ts +1 -1
  341. package/src/storage.ts +1 -1
  342. package/src/types.ts +148 -16
  343. package/dist/docs/assets/building-with-agents.md.CJCtZCyi.js +0 -13
  344. package/dist/docs/assets/chunks/@localSearchIndexroot.CbQshWFK.js +0 -1
  345. package/dist/docs/assets/concepts.md.Cfb9b-k1.js +0 -4
  346. package/dist/docs/assets/concepts.md.Cfb9b-k1.lean.js +0 -1
  347. package/dist/docs/assets/deployment.md.TecHo0_2.js +0 -55
  348. package/dist/docs/assets/deployment.md.TecHo0_2.lean.js +0 -1
  349. package/dist/docs/assets/evals.md.DYOjkRCX.lean.js +0 -1
  350. package/dist/docs/assets/example-agents_benny.md.B0gjhI-p.js +0 -7
  351. package/dist/docs/assets/example-agents_index.md.D2PEVSXl.js +0 -2
  352. package/dist/docs/assets/example-agents_index.md.D2PEVSXl.lean.js +0 -1
  353. package/dist/docs/assets/example-agents_oncall.md.BG_sUMly.js +0 -10
  354. package/dist/docs/assets/example-agents_slack-agent.md.buLbgvBf.js +0 -5
  355. package/dist/docs/assets/example-agents_weather-agent.md.C9Qv-W0o.js +0 -24
  356. package/dist/docs/assets/example-agents_weather-agent.md.C9Qv-W0o.lean.js +0 -1
  357. package/dist/docs/assets/guides_cloud-runtime.md.gVzabdQL.js +0 -9
  358. package/dist/docs/assets/guides_mcp-oauth.md.Dd8EgSem.lean.js +0 -1
  359. package/dist/docs/assets/guides_slack.md.CjmJSvZS.js +0 -42
  360. package/dist/docs/assets/guides_slack.md.CjmJSvZS.lean.js +0 -1
  361. package/dist/docs/assets/index.md.CH_s5uZe.js +0 -20
  362. package/dist/docs/assets/index.md.CH_s5uZe.lean.js +0 -1
  363. package/dist/docs/assets/reference_cli.md.ccoKOoXt.js +0 -65
  364. package/dist/docs/assets/reference_http-api.md.BncLd3PZ.js +0 -11
  365. package/dist/docs/assets/storage.md.DRTdnFvd.lean.js +0 -1
  366. package/dist/docs/assets/troubleshooting.md.CmQkmnzC.js +0 -1
  367. package/dist/internal/model-pricing.d.ts +0 -49
  368. package/dist/internal/model-pricing.d.ts.map +0 -1
  369. package/dist/internal/model-pricing.js +0 -377
  370. package/dist/playground/assets/index-CquRB-l0.js +0 -85
  371. package/dist/playground/assets/index-Dj0bWpkn.css +0 -1
  372. package/src/internal/model-pricing.ts +0 -426
  373. /package/dist/docs/assets/{example-agents_benny.md.B0gjhI-p.lean.js → example-agents_benny.md.2Et1qa8f.lean.js} +0 -0
  374. /package/dist/docs/assets/{example-agents_bugbot.md.DelIdhxB.lean.js → example-agents_bugbot.md.ByUexi5i.lean.js} +0 -0
  375. /package/dist/docs/assets/{example-agents_concierge.md.4rQTSMXt.lean.js → example-agents_concierge.md.lL8rhYlj.lean.js} +0 -0
  376. /package/dist/docs/assets/{example-agents_fsd.md.CzgUrDfi.lean.js → example-agents_fsd.md.DfNKQTHz.lean.js} +0 -0
  377. /package/dist/docs/assets/{example-agents_oncall.md.BG_sUMly.lean.js → example-agents_oncall.md.wFFXXEyW.lean.js} +0 -0
  378. /package/dist/docs/assets/{example-agents_security-reviewer.md.Dhj_m7_B.lean.js → example-agents_security-reviewer.md.Dkf1gyo6.lean.js} +0 -0
  379. /package/dist/docs/assets/{example-agents_slack-agent.md.buLbgvBf.lean.js → example-agents_slack-agent.md.DvgvT4nn.lean.js} +0 -0
  380. /package/dist/docs/assets/{guides_agent-to-agent.md.Bpzgq2Pq.lean.js → guides_agent-to-agent.md.Bmbxy-FA.lean.js} +0 -0
  381. /package/dist/docs/assets/{guides_cloud-runtime.md.gVzabdQL.lean.js → guides_cloud-runtime.md.BZ2GA7Es.lean.js} +0 -0
  382. /package/dist/docs/assets/{guides_github.md.DOOCpqsW.lean.js → guides_github.md.R2QlpR75.lean.js} +0 -0
  383. /package/dist/docs/assets/{guides_human-in-the-loop.md.DlUqsp1S.lean.js → guides_human-in-the-loop.md.BWvT7UqY.lean.js} +0 -0
  384. /package/dist/docs/assets/{guides_webhooks.md.wSOYas3X.lean.js → guides_webhooks.md.DiAwSR42.lean.js} +0 -0
  385. /package/dist/docs/assets/{hillclimbing.md.DHNast08.lean.js → hillclimbing.md.D9Y1_bYh.lean.js} +0 -0
  386. /package/dist/docs/assets/{quickstart.md.BU6Iwi_9.lean.js → quickstart.md.TnEXYgYW.lean.js} +0 -0
  387. /package/dist/docs/assets/{reference_agent-config.md.DrW2JUM8.lean.js → reference_agent-config.md.kuN6-OxK.lean.js} +0 -0
  388. /package/dist/docs/assets/{reference_connections.md.B9Q3TOve.lean.js → reference_connections.md.DGqAsFXb.lean.js} +0 -0
  389. /package/dist/docs/assets/{reference_http-api.md.BncLd3PZ.lean.js → reference_http-api.md.CfVM_ICa.lean.js} +0 -0
  390. /package/dist/docs/assets/{reference_schedules.md.w_F2mXB6.lean.js → reference_schedules.md.gmfYzf_I.lean.js} +0 -0
  391. /package/dist/docs/assets/{reference_sessions.md.DLd6mvbv.lean.js → reference_sessions.md.C_ouF_uf.lean.js} +0 -0
  392. /package/dist/docs/assets/{reference_tools.md.BRSDnTbN.lean.js → reference_tools.md.BswAQM41.lean.js} +0 -0
@@ -105,13 +105,13 @@ export function fanoutDelivery(body_1, headers_1, targets_1) {
105
105
  body: payload,
106
106
  });
107
107
  if (!response.ok) {
108
- log(`[agentkit] delivery to ${label} failed: HTTP ${response.status}\n`);
108
+ log(`[agent-sdk] delivery to ${label} failed: HTTP ${response.status}\n`);
109
109
  return;
110
110
  }
111
111
  delivered.push(label);
112
112
  }
113
113
  catch (error) {
114
- log(`[agentkit] delivery to ${label} failed: ${error instanceof Error ? error.message : String(error)}\n`);
114
+ log(`[agent-sdk] delivery to ${label} failed: ${error instanceof Error ? error.message : String(error)}\n`);
115
115
  }
116
116
  })));
117
117
  if (recipients.length > 0 && delivered.length === 0) {
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Author-facing durable file storage for {@link HostContext.files}.
3
+ *
4
+ * On Cursor-managed hosting the bytes live in the deployment's durable
5
+ * store; otherwise they land under `--state-root/files` on local disk, which
6
+ * is what makes `host.files` work self-hosted with no storage service at all.
7
+ *
8
+ * Everything that decides *which* bytes an author may reach lives here rather
9
+ * than in the sink: scope selection, path validation, and key minting through
10
+ * {@link fileKeys}. A sink only ever sees a fully-qualified opaque key, so an
11
+ * authored sink — including one a customer wrote against their own Dropbox —
12
+ * cannot be steered into another deployment's or another session's files.
13
+ */
14
+ import { type FileSink } from "../files.js";
15
+ import type { HostFilesApi } from "../types.js";
16
+ export interface CreateHostFilesApiOptions {
17
+ agentName: string;
18
+ /** Local disk root for the default sink. Required unless `sink` is supplied. */
19
+ stateRoot?: string;
20
+ /** Explicit sink override (tests). Omitted → hosted store or local disk. */
21
+ sink?: FileSink;
22
+ /** Session bound for `scope: "session"` calls; prefer {@link HostFilesApi.forSession}. */
23
+ sessionId?: string;
24
+ /** Environment consulted when choosing the default sink (tests). */
25
+ env?: NodeJS.ProcessEnv;
26
+ }
27
+ /** Build the host file API for one agent process. */
28
+ export declare function createHostFilesApi(options: CreateHostFilesApiOptions): HostFilesApi;
29
+ //# sourceMappingURL=host-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-files.d.ts","sourceRoot":"","sources":["../../src/internal/host-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAGL,KAAK,QAAQ,EAId,MAAM,aAAa,CAAC;AAMrB,OAAO,KAAK,EAGV,YAAY,EAGb,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,qDAAqD;AACrD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,yBAAyB,GACjC,YAAY,CASd"}
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Author-facing durable file storage for {@link HostContext.files}.
3
+ *
4
+ * On Cursor-managed hosting the bytes live in the deployment's durable
5
+ * store; otherwise they land under `--state-root/files` on local disk, which
6
+ * is what makes `host.files` work self-hosted with no storage service at all.
7
+ *
8
+ * Everything that decides *which* bytes an author may reach lives here rather
9
+ * than in the sink: scope selection, path validation, and key minting through
10
+ * {@link fileKeys}. A sink only ever sees a fully-qualified opaque key, so an
11
+ * authored sink — including one a customer wrote against their own Dropbox —
12
+ * cannot be steered into another deployment's or another session's files.
13
+ */
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ import { join, normalize, sep } from "node:path";
24
+ import { FilePathRejectedError, FileSessionRequiredError, FileTooLargeError, fileKeys, } from "../files.js";
25
+ import { cursorHostedFiles, isCursorHostedFilesAvailable, } from "../files-backends/cursor-hosted.js";
26
+ import { localFiles } from "../files-backends/local-fs.js";
27
+ /** Build the host file API for one agent process. */
28
+ export function createHostFilesApi(options) {
29
+ var _a;
30
+ const sink = (_a = options.sink) !== null && _a !== void 0 ? _a : createDefaultSink(options);
31
+ return createBoundHostFilesApi(Object.assign({ agentName: options.agentName, sink }, (options.sessionId === undefined
32
+ ? {}
33
+ : { sessionId: options.sessionId })));
34
+ }
35
+ /**
36
+ * Pick the default sink.
37
+ *
38
+ * On Cursor-managed hosting the durable store is the only correct answer —
39
+ * falling back to pod-local disk there would accept writes that vanish with
40
+ * the pod, which is the failure this surface exists to remove. Off hosting,
41
+ * local disk keeps `serve --dev`, replay, fixtures, and evals working with no
42
+ * storage service. This is the gate all six hosted agents write by hand in
43
+ * their `agent/storage.ts`; resolving it here means authors do not repeat it.
44
+ */
45
+ function createDefaultSink(options) {
46
+ var _a;
47
+ if (isCursorHostedFilesAvailable((_a = options.env) !== null && _a !== void 0 ? _a : process.env)) {
48
+ return cursorHostedFiles();
49
+ }
50
+ if (options.stateRoot === undefined) {
51
+ throw new Error("createHostFilesApi needs a stateRoot for the default local-disk sink, or an explicit sink");
52
+ }
53
+ return localFiles({
54
+ filesRoot: join(options.stateRoot, "files"),
55
+ stripKeyPrefix: localKeyPrefix(options.agentName),
56
+ });
57
+ }
58
+ /** On-disk layout drops the framework key prefix so paths stay navigable. */
59
+ function localKeyPrefix(agentName) {
60
+ return fileKeys.deploymentPrefix(agentName).replace(/deployment\/$/, "");
61
+ }
62
+ function createBoundHostFilesApi(state) {
63
+ var _a;
64
+ const sinkCaps = (_a = state.sink.capabilities) !== null && _a !== void 0 ? _a : {};
65
+ const capabilities = Object.assign({ conflictDetection: sinkCaps.etags === true, materialized: sinkCaps.materialized === true &&
66
+ typeof state.sink.materializedPath === "function" }, (sinkCaps.maxBytes === undefined ? {} : { maxBytes: sinkCaps.maxBytes }));
67
+ const keyFor = (path, scope) => mintKey(state, path, scope);
68
+ const api = {
69
+ capabilities,
70
+ forSession(sessionId) {
71
+ const trimmed = sessionId.trim();
72
+ if (trimmed === "") {
73
+ throw new FileSessionRequiredError("host.files.forSession requires a non-empty session id");
74
+ }
75
+ return createBoundHostFilesApi(Object.assign(Object.assign({}, state), { sessionId: trimmed }));
76
+ },
77
+ read(path, options) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ var _a;
80
+ const bytes = yield api.readBytes(path, options);
81
+ return bytes === undefined
82
+ ? undefined
83
+ : Buffer.from(bytes).toString((_a = options === null || options === void 0 ? void 0 : options.encoding) !== null && _a !== void 0 ? _a : "utf8");
84
+ });
85
+ },
86
+ readBytes(path, options) {
87
+ return __awaiter(this, void 0, void 0, function* () {
88
+ const found = yield state.sink.get(keyFor(path, options === null || options === void 0 ? void 0 : options.scope));
89
+ if (found === undefined) {
90
+ return undefined;
91
+ }
92
+ return found instanceof Uint8Array ? found : found.body;
93
+ });
94
+ },
95
+ write(path, data, options) {
96
+ return __awaiter(this, void 0, void 0, function* () {
97
+ const key = keyFor(path, options === null || options === void 0 ? void 0 : options.scope);
98
+ const body = typeof data === "string"
99
+ ? Buffer.from(data, "utf8")
100
+ : Buffer.from(data);
101
+ const maxBytes = capabilities.maxBytes;
102
+ if (maxBytes !== undefined && body.byteLength > maxBytes) {
103
+ throw new FileTooLargeError(key, body.byteLength, maxBytes);
104
+ }
105
+ yield state.sink.put(key, body, (options === null || options === void 0 ? void 0 : options.ifMatch) === undefined
106
+ ? undefined
107
+ : { ifMatch: options.ifMatch });
108
+ });
109
+ },
110
+ remove(path, options) {
111
+ return __awaiter(this, void 0, void 0, function* () {
112
+ yield state.sink.delete(keyFor(path, options === null || options === void 0 ? void 0 : options.scope));
113
+ });
114
+ },
115
+ exists(path, options) {
116
+ return __awaiter(this, void 0, void 0, function* () {
117
+ return (yield api.stat(path, options)) !== undefined;
118
+ });
119
+ },
120
+ stat(path, options) {
121
+ return __awaiter(this, void 0, void 0, function* () {
122
+ const key = keyFor(path, options === null || options === void 0 ? void 0 : options.scope);
123
+ const entry = yield statKey(state.sink, key);
124
+ if (entry === undefined) {
125
+ return undefined;
126
+ }
127
+ return Object.assign(Object.assign({ size: entry.size }, (entry.mtimeMs === undefined ? {} : { mtimeMs: entry.mtimeMs })), (entry.etag === undefined ? {} : { etag: entry.etag }));
128
+ });
129
+ },
130
+ list(prefix, options) {
131
+ return __awaiter(this, void 0, void 0, function* () {
132
+ const scopePrefix = mintPrefix(state, options === null || options === void 0 ? void 0 : options.scope);
133
+ const rel = prefix === undefined ? "" : normalizeRelPath(prefix, true);
134
+ const entries = yield state.sink.list(`${scopePrefix}${rel}`);
135
+ const out = [];
136
+ for (const entry of entries) {
137
+ if (!entry.key.startsWith(scopePrefix)) {
138
+ // A sink that widens the prefix must not leak keys from another
139
+ // scope through a listing.
140
+ continue;
141
+ }
142
+ out.push(Object.assign({ path: entry.key.slice(scopePrefix.length), size: entry.size }, (entry.mtimeMs === undefined ? {} : { mtimeMs: entry.mtimeMs })));
143
+ }
144
+ return out.sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);
145
+ });
146
+ },
147
+ materializedPath(path, options) {
148
+ var _a, _b;
149
+ if (!capabilities.materialized) {
150
+ return undefined;
151
+ }
152
+ return (_b = (_a = state.sink).materializedPath) === null || _b === void 0 ? void 0 : _b.call(_a, keyFor(path, options === null || options === void 0 ? void 0 : options.scope));
153
+ },
154
+ };
155
+ return api;
156
+ }
157
+ function statKey(sink, key) {
158
+ return __awaiter(this, void 0, void 0, function* () {
159
+ if (typeof sink.stat === "function") {
160
+ return yield sink.stat(key);
161
+ }
162
+ const entries = yield sink.list(key);
163
+ return entries.find((entry) => entry.key === key);
164
+ });
165
+ }
166
+ // ============================================================================
167
+ // Key minting
168
+ // ============================================================================
169
+ function mintKey(state, path, scope) {
170
+ const rel = normalizeRelPath(path, false);
171
+ const resolved = resolveScope(state, scope);
172
+ if (resolved.kind === "session") {
173
+ return fileKeys.session(state.agentName, resolved.sessionId, rel);
174
+ }
175
+ return resolved.partition === undefined
176
+ ? fileKeys.deployment(state.agentName, rel)
177
+ : fileKeys.deploymentPartition(state.agentName, resolved.partition, rel);
178
+ }
179
+ function mintPrefix(state, scope) {
180
+ const resolved = resolveScope(state, scope);
181
+ if (resolved.kind === "session") {
182
+ return fileKeys.sessionPrefix(state.agentName, resolved.sessionId);
183
+ }
184
+ const base = fileKeys.deploymentPrefix(state.agentName);
185
+ return resolved.partition === undefined
186
+ ? base
187
+ : `${base}${resolved.partition}/`;
188
+ }
189
+ function resolveScope(state, scope) {
190
+ var _a;
191
+ if (scope === "deployment") {
192
+ return { kind: "deployment" };
193
+ }
194
+ if (scope !== undefined && typeof scope === "object") {
195
+ if (scope.kind === "deployment") {
196
+ return scope.partition === undefined
197
+ ? { kind: "deployment" }
198
+ : { kind: "deployment", partition: segment(scope.partition) };
199
+ }
200
+ const explicit = (_a = scope.sessionId) !== null && _a !== void 0 ? _a : state.sessionId;
201
+ return { kind: "session", sessionId: requireSession(explicit) };
202
+ }
203
+ // Default and explicit `"session"` both bind to the caller's own session, so
204
+ // a relative path can never be re-read as another session's.
205
+ return { kind: "session", sessionId: requireSession(state.sessionId) };
206
+ }
207
+ function requireSession(sessionId) {
208
+ if (sessionId === undefined || sessionId.trim() === "") {
209
+ throw new FileSessionRequiredError("host.files needs a session in scope: call forSession(sessionId), pass { scope: { kind: 'session', sessionId } }, or use { scope: 'deployment' }");
210
+ }
211
+ return segment(sessionId);
212
+ }
213
+ /**
214
+ * Normalize an author path into key-relative form. Rejects traversal, NUL,
215
+ * backslashes, trailing slashes, and the `.cursor*` prefix the Agent Store
216
+ * reserves for Cursor-managed content — refusing here turns an opaque failure
217
+ * deep in a sink (or a 400 from the hosted API, which accepts each path in
218
+ * exactly one spelling) into one the author can act on, and keeps the rule
219
+ * identical across sinks.
220
+ */
221
+ function normalizeRelPath(path, allowEmpty) {
222
+ if (typeof path !== "string") {
223
+ throw new FilePathRejectedError("host.files path must be a string");
224
+ }
225
+ const trimmed = path.trim().replace(/^\/+/, "");
226
+ if (trimmed === "") {
227
+ if (allowEmpty) {
228
+ return "";
229
+ }
230
+ throw new FilePathRejectedError("host.files path must be non-empty");
231
+ }
232
+ if (trimmed.includes("\0")) {
233
+ throw new FilePathRejectedError(`host.files path is not allowed: ${path}`);
234
+ }
235
+ // A backslash is a separator on Windows and a literal on POSIX, so a key
236
+ // minted from one would name different objects on different hosts — and the
237
+ // hosted API refuses it. Same rule as `segment()` below.
238
+ if (trimmed.includes("\\")) {
239
+ throw new FilePathRejectedError(`host.files path is not allowed: ${path}`);
240
+ }
241
+ // On an object path, a trailing slash would mint a key ending in "/" — an
242
+ // empty "directory marker" object, never what an author writing a file
243
+ // meant, and refused by the hosted API. A listing prefix (`allowEmpty`) is
244
+ // a different thing: there a trailing slash legitimately scopes to a
245
+ // directory's contents.
246
+ if (!allowEmpty && trimmed.endsWith("/")) {
247
+ throw new FilePathRejectedError(`host.files path is not allowed: ${path}`);
248
+ }
249
+ const normalized = normalize(trimmed).split(sep).join("/");
250
+ if (normalized === ".." ||
251
+ normalized === "." ||
252
+ normalized.startsWith("../") ||
253
+ normalized.includes("/../") ||
254
+ normalized.endsWith("/..")) {
255
+ throw new FilePathRejectedError(`host.files path is not allowed: ${path}`);
256
+ }
257
+ for (const part of normalized.split("/")) {
258
+ if (isReservedSegment(part)) {
259
+ throw new FilePathRejectedError(`host.files path segment "${part}" is reserved for Cursor-managed content: ${path}`);
260
+ }
261
+ }
262
+ return normalized;
263
+ }
264
+ /** One key segment (session id, partition): no separators, no traversal. */
265
+ function segment(value) {
266
+ const trimmed = value.trim();
267
+ if (trimmed === "" ||
268
+ trimmed === "." ||
269
+ trimmed === ".." ||
270
+ trimmed.includes("/") ||
271
+ trimmed.includes("\\") ||
272
+ trimmed.includes("\0")) {
273
+ throw new FilePathRejectedError(`host.files key segment is not allowed: ${value}`);
274
+ }
275
+ if (isReservedSegment(trimmed)) {
276
+ throw new FilePathRejectedError(`host.files key segment "${trimmed}" is reserved for Cursor-managed content`);
277
+ }
278
+ return trimmed;
279
+ }
280
+ /** Mirrors the server's reserved-prefix rule (`AGENT_STORE_RESERVED_CURSOR_PATH_PREFIX`). */
281
+ function isReservedSegment(value) {
282
+ return value.toLowerCase().startsWith(".cursor");
283
+ }
@@ -90,7 +90,7 @@ export function warmupHostGitHubAuth(options) {
90
90
  var _a;
91
91
  const source = (_a = options.authSource) !== null && _a !== void 0 ? _a : (yield resolveHostGitHubAuthSource());
92
92
  if (source === "unavailable") {
93
- options.logger("[agentkit] GitHub auth: unavailable (set GITHUB_APP_ID + GITHUB_APP_PRIVATE_KEY + GITHUB_APP_INSTALLATION_ID, or GITHUB_TOKEN / GH_TOKEN, or run `gh auth login`)");
93
+ options.logger("[agent-sdk] GitHub auth: unavailable (set GITHUB_APP_ID + GITHUB_APP_PRIVATE_KEY + GITHUB_APP_INSTALLATION_ID, or GITHUB_TOKEN / GH_TOKEN, or run `gh auth login`)");
94
94
  return source;
95
95
  }
96
96
  let exportedGhToken = false;
@@ -99,7 +99,7 @@ export function warmupHostGitHubAuth(options) {
99
99
  exportedGhToken = yield ensureGhCliTokenEnv();
100
100
  }
101
101
  catch (error) {
102
- options.logger(`[agentkit] GitHub auth: failed to export GH_TOKEN for gh CLI: ${error instanceof Error ? error.message : String(error)}`);
102
+ options.logger(`[agent-sdk] GitHub auth: failed to export GH_TOKEN for gh CLI: ${error instanceof Error ? error.message : String(error)}`);
103
103
  }
104
104
  }
105
105
  const label = source === "cursor-account"
@@ -112,15 +112,15 @@ export function warmupHostGitHubAuth(options) {
112
112
  ? "GITHUB_TOKEN/GH_TOKEN"
113
113
  : "gh auth token";
114
114
  if (options.github === undefined) {
115
- options.logger(`[agentkit] GitHub auth: ${label}`);
115
+ options.logger(`[agent-sdk] GitHub auth: ${label}`);
116
116
  return source;
117
117
  }
118
118
  try {
119
119
  yield options.github.getOctokit();
120
- options.logger(`[agentkit] GitHub auth: ${label}`);
120
+ options.logger(`[agent-sdk] GitHub auth: ${label}`);
121
121
  }
122
122
  catch (error) {
123
- options.logger(`[agentkit] GitHub auth: ${label} resolved but Octokit warmup failed: ${error instanceof Error ? error.message : String(error)}`);
123
+ options.logger(`[agent-sdk] GitHub auth: ${label} resolved but Octokit warmup failed: ${error instanceof Error ? error.message : String(error)}`);
124
124
  }
125
125
  return source;
126
126
  });
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Client-side mirrors of the Agent Serve hosting validation rules
3
3
  * (backend/server/src/agentServe/agentServeShared.ts). Shared by discovery
4
- * (`hosting` block diagnostics on `agentkit validate`) and the deploy /
4
+ * (`hosting` block diagnostics on `agent-sdk validate`) and the deploy /
5
5
  * secrets CLI verbs (actionable errors before any network call). The
6
6
  * backend stays authoritative — these exist so mistakes fail fast and
7
7
  * locally with the same grammar the server enforces.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Client-side mirrors of the Agent Serve hosting validation rules
3
3
  * (backend/server/src/agentServe/agentServeShared.ts). Shared by discovery
4
- * (`hosting` block diagnostics on `agentkit validate`) and the deploy /
4
+ * (`hosting` block diagnostics on `agent-sdk validate`) and the deploy /
5
5
  * secrets CLI verbs (actionable errors before any network call). The
6
6
  * backend stays authoritative — these exist so mistakes fail fast and
7
7
  * locally with the same grammar the server enforces.
@@ -1 +1 @@
1
- {"version":3,"file":"http-channel.d.ts","sourceRoot":"","sources":["../../src/internal/http-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAEV,WAAW,EACX,UAAU,EACV,qBAAqB,EAErB,aAAa,EACd,MAAM,aAAa,CAAC;AAQrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAQ7B,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,GAAG,WAAW,EAAE,CA0YhB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,GACA,QAAQ,GAAG,SAAS,CAiBtB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,OAAO,EACb,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAO,GAC/D,QAAQ,CAQV;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,QAAQ,CAEV;AAoGD,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAc9C"}
1
+ {"version":3,"file":"http-channel.d.ts","sourceRoot":"","sources":["../../src/internal/http-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAEV,WAAW,EACX,UAAU,EACV,qBAAqB,EAErB,aAAa,EACd,MAAM,aAAa,CAAC;AAQrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAQ7B,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,GAAG,WAAW,EAAE,CAwahB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,GACA,QAAQ,GAAG,SAAS,CAiBtB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,OAAO,EACb,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAO,GAC/D,QAAQ,CAQV;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,QAAQ,CAEV;AAoGD,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAc9C"}
@@ -216,6 +216,31 @@ export function buildHttpChannelRoutes(args) {
216
216
  });
217
217
  }),
218
218
  };
219
+ const cost = {
220
+ method: "GET",
221
+ pattern: `${base}/v1/session/:sessionId/cost`,
222
+ auth,
223
+ handler: (_request, ctx) => __awaiter(this, void 0, void 0, function* () {
224
+ var _a;
225
+ const sessionId = (_a = ctx.params.sessionId) !== null && _a !== void 0 ? _a : "";
226
+ const record = yield engine.getOrRestoreSession(sessionId);
227
+ if (record === undefined) {
228
+ return errorResponse(404, "session_not_found", `Unknown session ${sessionId}.`);
229
+ }
230
+ const ownership = requireSessionOwner(record, ctx.auth, {
231
+ relax: relaxSessionReadAuth,
232
+ beyondLoopback: relaxSessionReadAuthBeyondLoopback,
233
+ requestIp: ctx.requestIp,
234
+ });
235
+ if (ownership !== undefined) {
236
+ return ownership;
237
+ }
238
+ const payload = yield engine.sessionCost(sessionId);
239
+ return jsonResponse(payload, {
240
+ headers: { [SESSION_ID_HEADER]: sessionId },
241
+ });
242
+ }),
243
+ };
219
244
  const listApprovals = {
220
245
  method: "GET",
221
246
  pattern: `${base}/v1/session/:sessionId/approvals`,
@@ -325,6 +350,7 @@ export function buildHttpChannelRoutes(args) {
325
350
  stop,
326
351
  stream,
327
352
  events,
353
+ cost,
328
354
  listApprovals,
329
355
  resolveApproval,
330
356
  ];
@@ -69,7 +69,7 @@ export declare function planSkillInstall(options?: {
69
69
  packageRoot?: string;
70
70
  skillsHome?: string;
71
71
  }): Promise<SkillInstallPlan>;
72
- /** `Installed 9 agentkit skills`, what it dropped, and where it went. */
72
+ /** `Installed 9 Agent SDK skills`, what it dropped, and where it went. */
73
73
  export declare function formatSkillInstall(plan: SkillInstallPlan, result: SkillInstallResult): string;
74
74
  export interface OfferInstallCursorSkillsOptions {
75
75
  /** Skip when false (non-TTY / `--json`). */
@@ -1 +1 @@
1
- {"version":3,"file":"install-cursor-skills.d.ts","sourceRoot":"","sources":["../../src/internal/install-cursor-skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-cursor-skills.d.ts","sourceRoot":"","sources":["../../src/internal/install-cursor-skills.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
15
15
  step((generator = generator.apply(thisArg, _arguments || [])).next());
16
16
  });
17
17
  };
18
- import { access, cp, mkdir, readdir, readFile, rm, writeFile, } from "node:fs/promises";
18
+ import { access, chmod, cp, mkdir, readdir, readFile, rm, stat, writeFile, } from "node:fs/promises";
19
19
  import { homedir } from "node:os";
20
20
  import { join } from "node:path";
21
21
  import { CLI_COMMAND_NAME, packageRootDir } from "./distribution.js";
@@ -115,6 +115,11 @@ export function installCursorSkills(skills_1) {
115
115
  for (const skill of skills) {
116
116
  const target = skillInstallPath(skill, skillsHome);
117
117
  yield cp(skill.sourceDir, target, { recursive: true, force: true });
118
+ // cp() preserves source modes, and installs can come from read-only
119
+ // stores (Bazel runfiles, pnpm's content-addressed store, nix). Make the
120
+ // copies writable so the SKILL.md rewrite below and the overwrite on the
121
+ // next upgrade both work.
122
+ yield makeTreeWritable(target);
118
123
  const skillMdPath = join(target, "SKILL.md");
119
124
  const raw = yield readFile(skillMdPath, "utf8");
120
125
  const adjusted = prepareSkillMarkdownForCursorInstall(raw);
@@ -126,6 +131,30 @@ export function installCursorSkills(skills_1) {
126
131
  return { installed, removed };
127
132
  });
128
133
  }
134
+ function makeTreeWritable(root) {
135
+ return __awaiter(this, void 0, void 0, function* () {
136
+ yield addOwnerWrite(root);
137
+ const entries = yield readdir(root, { withFileTypes: true });
138
+ for (const entry of entries) {
139
+ const child = join(root, entry.name);
140
+ if (entry.isDirectory()) {
141
+ yield makeTreeWritable(child);
142
+ }
143
+ else {
144
+ yield addOwnerWrite(child);
145
+ }
146
+ }
147
+ });
148
+ }
149
+ /** Add owner-write, preserving every other mode bit (e.g. exec on scripts). */
150
+ function addOwnerWrite(path) {
151
+ return __awaiter(this, void 0, void 0, function* () {
152
+ const mode = (yield stat(path)).mode & 0o7777;
153
+ if ((mode & 0o200) === 0) {
154
+ yield chmod(path, mode | 0o200);
155
+ }
156
+ });
157
+ }
129
158
  /** Installed leaf dirs the package no longer ships. Installing deletes these. */
130
159
  function orphanLeaves(namespaceDir, skills) {
131
160
  return __awaiter(this, void 0, void 0, function* () {
@@ -193,11 +222,11 @@ export function planSkillInstall(options) {
193
222
  };
194
223
  });
195
224
  }
196
- /** `Installed 9 agentkit skills`, what it dropped, and where it went. */
225
+ /** `Installed 9 Agent SDK skills`, what it dropped, and where it went. */
197
226
  export function formatSkillInstall(plan, result) {
198
227
  const noun = result.installed.length === 1 ? "skill" : "skills";
199
228
  const verb = plan.firstInstall ? "Installed" : "Updated";
200
- const lines = [`${verb} ${result.installed.length} agentkit ${noun}`];
229
+ const lines = [`${verb} ${result.installed.length} Agent SDK ${noun}`];
201
230
  if (result.removed.length > 0) {
202
231
  lines.push(` removed: ${result.removed.join(", ")}`);
203
232
  }
@@ -228,7 +257,7 @@ export function offerInstallCursorSkills() {
228
257
  const noun = plan.shipped.length === 1 ? "skill" : "skills";
229
258
  const verb = plan.firstInstall ? "Install" : "Update";
230
259
  const c = stdoutPalette();
231
- out(`${verb} ${plan.shipped.length} agentkit ${noun} in ${plan.directory}?\n`);
260
+ out(`${verb} ${plan.shipped.length} Agent SDK ${noun} in ${plan.directory}?\n`);
232
261
  out(c.dim(` ${plan.leaves.join(", ")}\n`));
233
262
  if (!plan.firstInstall) {
234
263
  out(c.dim(" (overwrites existing copies with the package version)\n"));
@@ -74,7 +74,7 @@ export function createLocalControlPlane(opts) {
74
74
  continue;
75
75
  }
76
76
  void opts.fireSchedule(name).catch((error) => {
77
- logger(`[agentkit] schedule "${name}" dispatch failed: ${error instanceof Error ? error.message : String(error)}`);
77
+ logger(`[agent-sdk] schedule "${name}" dispatch failed: ${error instanceof Error ? error.message : String(error)}`);
78
78
  });
79
79
  }
80
80
  }
@@ -102,7 +102,7 @@ export function createLocalControlPlane(opts) {
102
102
  return;
103
103
  }
104
104
  void opts.fireReminder(current.id, current.fireCount).catch((error) => {
105
- logger(`[agentkit] reminder "${current.id}" dispatch failed: ${error instanceof Error ? error.message : String(error)}`);
105
+ logger(`[agent-sdk] reminder "${current.id}" dispatch failed: ${error instanceof Error ? error.message : String(error)}`);
106
106
  });
107
107
  }, delay);
108
108
  (_a = timer.unref) === null || _a === void 0 ? void 0 : _a.call(timer);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `agentkit logs` — follow deploy progress (hosted) then runtime `/v1/logs`.
2
+ * `agent-sdk logs` — follow deploy progress (hosted) then runtime `/v1/logs`.
3
3
  *
4
4
  * Customer-facing output never includes hosting URLs, tokens, or infra jargon.
5
5
  */
@@ -24,7 +24,7 @@ export declare function progressMessage(progress: LogsProgress, lastError?: stri
24
24
  /** Strip obvious hosting internals from error text shown to customers. */
25
25
  export declare function sanitizeCustomerError(message: string): string;
26
26
  /**
27
- * One-line label for `agentkit deploy` polling (TTY spinner / non-TTY
27
+ * One-line label for `agent-sdk deploy` polling (TTY spinner / non-TTY
28
28
  * transitions). Uses statusMessage → progress → raw status.
29
29
  */
30
30
  export declare function deployProgressLabel(detail: {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `agentkit logs` — follow deploy progress (hosted) then runtime `/v1/logs`.
2
+ * `agent-sdk logs` — follow deploy progress (hosted) then runtime `/v1/logs`.
3
3
  *
4
4
  * Customer-facing output never includes hosting URLs, tokens, or infra jargon.
5
5
  */
@@ -75,7 +75,7 @@ export function sanitizeCustomerError(message) {
75
75
  .replace(/\bgitCheckout:fetch\b/gi, "checkout");
76
76
  }
77
77
  /**
78
- * One-line label for `agentkit deploy` polling (TTY spinner / non-TTY
78
+ * One-line label for `agent-sdk deploy` polling (TTY spinner / non-TTY
79
79
  * transitions). Uses statusMessage → progress → raw status.
80
80
  */
81
81
  export function deployProgressLabel(detail) {
@@ -75,7 +75,7 @@ export function handleStatelessMcpRequest(args) {
75
75
  return yield transport.handleRequest(args.request);
76
76
  }
77
77
  catch (error) {
78
- logger(`[agentkit] ${args.label} request failed: ${describeError(error)}`);
78
+ logger(`[agent-sdk] ${args.label} request failed: ${describeError(error)}`);
79
79
  return new Response(JSON.stringify({
80
80
  jsonrpc: "2.0",
81
81
  error: { code: -32603, message: "Internal server error." },
@@ -221,7 +221,7 @@ export class HostMcpOAuthProvider {
221
221
  token_endpoint_auth_method: "none",
222
222
  grant_types: ["authorization_code", "refresh_token"],
223
223
  response_types: ["code"],
224
- client_name: "agentkit",
224
+ client_name: "Agent SDK",
225
225
  };
226
226
  }
227
227
  get redirectUrl() {
@@ -347,7 +347,7 @@ export function waitForMcpOAuthCallback(args) {
347
347
  if (code) {
348
348
  res
349
349
  .writeHead(200, { "content-type": "text/html; charset=utf-8" })
350
- .end("<!doctype html><html><body><h1>Authorized</h1><p>Return to agentkit.</p></body></html>");
350
+ .end("<!doctype html><html><body><h1>Authorized</h1><p>Return to Agent SDK.</p></body></html>");
351
351
  finish({ code, state });
352
352
  return;
353
353
  }
@@ -30,7 +30,7 @@ export function syncHostedPlatformSchedules(args) {
30
30
  }
31
31
  catch (error) {
32
32
  failedDeletes.push(name);
33
- args.logger(`[agentkit] platform timer delete failed for schedule "${name}": ${error instanceof Error ? error.message : String(error)}`);
33
+ args.logger(`[agent-sdk] platform timer delete failed for schedule "${name}": ${error instanceof Error ? error.message : String(error)}`);
34
34
  }
35
35
  }
36
36
  for (const schedule of args.schedules) {
@@ -41,7 +41,7 @@ export function syncHostedPlatformSchedules(args) {
41
41
  });
42
42
  }
43
43
  catch (error) {
44
- args.logger(`[agentkit] platform timer upsert failed for schedule "${schedule.name}": ${error instanceof Error ? error.message : String(error)}`);
44
+ args.logger(`[agent-sdk] platform timer upsert failed for schedule "${schedule.name}": ${error instanceof Error ? error.message : String(error)}`);
45
45
  }
46
46
  }
47
47
  // Keep failed removals in the catalog so the next boot retries them.