@cursor/july 0.1.102 → 0.1.104

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 (789) hide show
  1. package/AGENTS.md +34 -32
  2. package/README.md +10 -12
  3. package/dist/ab.d.ts +1 -1
  4. package/dist/ab.js +1 -1
  5. package/dist/bin/agent-serve.d.ts +12 -12
  6. package/dist/bin/agent-serve.js +114 -36
  7. package/dist/channels/bitbucket/api.d.ts +176 -0
  8. package/dist/channels/bitbucket/api.d.ts.map +1 -0
  9. package/dist/channels/bitbucket/api.js +419 -0
  10. package/dist/channels/bitbucket/binding.d.ts +71 -0
  11. package/dist/channels/bitbucket/binding.d.ts.map +1 -0
  12. package/dist/channels/bitbucket/binding.js +269 -0
  13. package/dist/channels/bitbucket/bitbucket-channel.d.ts +33 -0
  14. package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -0
  15. package/dist/channels/bitbucket/bitbucket-channel.js +120 -0
  16. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +61 -0
  17. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -0
  18. package/dist/channels/bitbucket/bitbucket-webhook.js +394 -0
  19. package/dist/channels/bitbucket/checks.d.ts +67 -0
  20. package/dist/channels/bitbucket/checks.d.ts.map +1 -0
  21. package/dist/channels/bitbucket/checks.js +102 -0
  22. package/dist/channels/bitbucket/cursor-account.d.ts +37 -0
  23. package/dist/channels/bitbucket/cursor-account.d.ts.map +1 -0
  24. package/dist/channels/bitbucket/cursor-account.js +65 -0
  25. package/dist/channels/bitbucket/defaults.d.ts +26 -0
  26. package/dist/channels/bitbucket/defaults.d.ts.map +1 -0
  27. package/dist/channels/bitbucket/defaults.js +73 -0
  28. package/dist/channels/bitbucket/events.d.ts +22 -0
  29. package/dist/channels/bitbucket/events.d.ts.map +1 -0
  30. package/dist/channels/bitbucket/events.js +64 -0
  31. package/dist/channels/bitbucket/index.d.ts +34 -0
  32. package/dist/channels/bitbucket/index.d.ts.map +1 -0
  33. package/dist/channels/bitbucket/index.js +33 -0
  34. package/dist/channels/bitbucket/replay.d.ts +63 -0
  35. package/dist/channels/bitbucket/replay.d.ts.map +1 -0
  36. package/dist/channels/bitbucket/replay.js +304 -0
  37. package/dist/channels/bitbucket/state.d.ts +35 -0
  38. package/dist/channels/bitbucket/state.d.ts.map +1 -0
  39. package/dist/channels/bitbucket/state.js +21 -0
  40. package/dist/channels/bitbucket/types.d.ts +229 -0
  41. package/dist/channels/bitbucket/types.d.ts.map +1 -0
  42. package/dist/channels/bitbucket/types.js +1 -0
  43. package/dist/channels/change-monitors/change-monitors-channel.d.ts +5 -0
  44. package/dist/channels/change-monitors/change-monitors-channel.d.ts.map +1 -0
  45. package/dist/channels/change-monitors/change-monitors-channel.js +41 -0
  46. package/dist/channels/change-monitors/index.d.ts +4 -0
  47. package/dist/channels/change-monitors/index.d.ts.map +1 -0
  48. package/dist/channels/change-monitors/index.js +2 -0
  49. package/dist/channels/change-monitors/types.d.ts +39 -0
  50. package/dist/channels/change-monitors/types.d.ts.map +1 -0
  51. package/dist/channels/change-monitors/types.js +1 -0
  52. package/dist/channels/deployments/deployments-channel.d.ts +22 -14
  53. package/dist/channels/deployments/deployments-channel.d.ts.map +1 -1
  54. package/dist/channels/deployments/deployments-channel.js +25 -27
  55. package/dist/channels/deployments/types.d.ts +12 -6
  56. package/dist/channels/deployments/types.d.ts.map +1 -1
  57. package/dist/channels/github/binding.d.ts +6 -0
  58. package/dist/channels/github/binding.d.ts.map +1 -1
  59. package/dist/channels/github/binding.js +3 -3
  60. package/dist/channels/github/cursor-account.d.ts +7 -3
  61. package/dist/channels/github/cursor-account.d.ts.map +1 -1
  62. package/dist/channels/github/cursor-account.js +10 -6
  63. package/dist/channels/github/defaults.d.ts.map +1 -1
  64. package/dist/channels/github/defaults.js +4 -0
  65. package/dist/channels/github/events.d.ts +1 -1
  66. package/dist/channels/github/events.js +1 -1
  67. package/dist/channels/github/forward.d.ts +1 -1
  68. package/dist/channels/github/forward.d.ts.map +1 -1
  69. package/dist/channels/github/forward.js +3 -2
  70. package/dist/channels/github/github-channel.d.ts +29 -39
  71. package/dist/channels/github/github-channel.d.ts.map +1 -1
  72. package/dist/channels/github/github-channel.js +68 -101
  73. package/dist/channels/github/progress.d.ts +22 -0
  74. package/dist/channels/github/progress.d.ts.map +1 -1
  75. package/dist/channels/github/progress.js +32 -5
  76. package/dist/channels/github/replay.d.ts +1 -1
  77. package/dist/channels/github/replay.js +1 -1
  78. package/dist/channels/github/state.d.ts +2 -0
  79. package/dist/channels/github/state.d.ts.map +1 -1
  80. package/dist/channels/github/state.js +14 -11
  81. package/dist/channels/github/types.d.ts +2 -4
  82. package/dist/channels/github/types.d.ts.map +1 -1
  83. package/dist/channels/gitlab/api.d.ts +91 -0
  84. package/dist/channels/gitlab/api.d.ts.map +1 -0
  85. package/dist/channels/gitlab/api.js +150 -0
  86. package/dist/channels/gitlab/binding.d.ts +58 -0
  87. package/dist/channels/gitlab/binding.d.ts.map +1 -0
  88. package/dist/channels/gitlab/binding.js +139 -0
  89. package/dist/channels/gitlab/checks.d.ts +110 -0
  90. package/dist/channels/gitlab/checks.d.ts.map +1 -0
  91. package/dist/channels/gitlab/checks.js +126 -0
  92. package/dist/channels/gitlab/cursor-account.d.ts +36 -0
  93. package/dist/channels/gitlab/cursor-account.d.ts.map +1 -0
  94. package/dist/channels/gitlab/cursor-account.js +65 -0
  95. package/dist/channels/gitlab/defaults.d.ts +25 -0
  96. package/dist/channels/gitlab/defaults.d.ts.map +1 -0
  97. package/dist/channels/gitlab/defaults.js +60 -0
  98. package/dist/channels/gitlab/events.d.ts +12 -0
  99. package/dist/channels/gitlab/events.d.ts.map +1 -0
  100. package/dist/channels/gitlab/events.js +28 -0
  101. package/dist/channels/gitlab/gitlab-channel.d.ts +33 -0
  102. package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -0
  103. package/dist/channels/gitlab/gitlab-channel.js +120 -0
  104. package/dist/channels/gitlab/gitlab-webhook.d.ts +45 -0
  105. package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -0
  106. package/dist/channels/gitlab/gitlab-webhook.js +397 -0
  107. package/dist/channels/gitlab/index.d.ts +31 -0
  108. package/dist/channels/gitlab/index.d.ts.map +1 -0
  109. package/dist/channels/gitlab/index.js +30 -0
  110. package/dist/channels/gitlab/replay.d.ts +105 -0
  111. package/dist/channels/gitlab/replay.d.ts.map +1 -0
  112. package/dist/channels/gitlab/replay.js +206 -0
  113. package/dist/channels/gitlab/state.d.ts +33 -0
  114. package/dist/channels/gitlab/state.d.ts.map +1 -0
  115. package/dist/channels/gitlab/state.js +23 -0
  116. package/dist/channels/gitlab/types.d.ts +214 -0
  117. package/dist/channels/gitlab/types.d.ts.map +1 -0
  118. package/dist/channels/gitlab/types.js +1 -0
  119. package/dist/channels/issues/index.d.ts +4 -0
  120. package/dist/channels/issues/index.d.ts.map +1 -0
  121. package/dist/channels/issues/index.js +2 -0
  122. package/dist/channels/issues/issues-channel.d.ts +5 -0
  123. package/dist/channels/issues/issues-channel.d.ts.map +1 -0
  124. package/dist/channels/issues/issues-channel.js +37 -0
  125. package/dist/channels/issues/types.d.ts +33 -0
  126. package/dist/channels/issues/types.d.ts.map +1 -0
  127. package/dist/channels/issues/types.js +1 -0
  128. package/dist/channels/origin/api.d.ts.map +1 -1
  129. package/dist/channels/origin/api.js +4 -2
  130. package/dist/channels/origin/origin-channel.d.ts +4 -9
  131. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  132. package/dist/channels/origin/origin-channel.js +8 -48
  133. package/dist/channels/origin/types.d.ts +20 -2
  134. package/dist/channels/origin/types.d.ts.map +1 -1
  135. package/dist/channels/slack/eval-directive.d.ts.map +1 -1
  136. package/dist/channels/slack/eval-directive.js +1 -7
  137. package/dist/channels/slack/init.d.ts.map +1 -1
  138. package/dist/channels/slack/init.js +3 -3
  139. package/dist/channels/slack/setup.d.ts +1 -1
  140. package/dist/channels/slack/setup.d.ts.map +1 -1
  141. package/dist/channels/slack/setup.js +6 -13
  142. package/dist/channels/slack/types.d.ts +1 -1
  143. package/dist/channels/slack/types.d.ts.map +1 -1
  144. package/dist/channels.d.ts +1 -1
  145. package/dist/channels.d.ts.map +1 -1
  146. package/dist/client.d.ts +1 -1
  147. package/dist/client.js +1 -1
  148. package/dist/connections.d.ts +1 -1
  149. package/dist/connections.js +1 -1
  150. package/dist/docs/404.html +2 -2
  151. package/dist/docs/ab.html +4 -4
  152. package/dist/docs/assets/{app.CLA03RCz.js → app.DbMWUyGb.js} +1 -1
  153. package/dist/docs/assets/chunks/@localSearchIndexroot.Bqsulb9K.js +1 -0
  154. package/dist/docs/assets/chunks/{VPLocalSearchBox.ifxv-cJV.js → VPLocalSearchBox.DcNeTh9o.js} +1 -1
  155. package/dist/docs/assets/chunks/{theme.DWCwM6p-.js → theme.DMjhY3gl.js} +2 -2
  156. package/dist/docs/assets/concepts.md.DgEcZOfT.js +1 -0
  157. package/dist/docs/assets/{concepts.md.rPzW2HZN.lean.js → concepts.md.DgEcZOfT.lean.js} +1 -1
  158. package/dist/docs/assets/{evals.md.CPzDAwoH.js → evals.md.CbMoebP1.js} +1 -1
  159. package/dist/docs/assets/guides_cloud-agents.md.DS8RIjwx.js +9 -0
  160. package/dist/docs/assets/{guides_github.md.BtPr9GaP.js → guides_github.md.c0gdGJ-D.js} +1 -1
  161. package/dist/docs/assets/{guides_github.md.BtPr9GaP.lean.js → guides_github.md.c0gdGJ-D.lean.js} +1 -1
  162. package/dist/docs/assets/{guides_opentelemetry.md.BVTXDCRg.js → guides_opentelemetry.md.COh9jFVg.js} +7 -8
  163. package/dist/docs/assets/{guides_opentelemetry.md.BVTXDCRg.lean.js → guides_opentelemetry.md.COh9jFVg.lean.js} +1 -1
  164. package/dist/docs/assets/{index.md.Kiht7ell.js → index.md.D75GWhPl.js} +1 -1
  165. package/dist/docs/assets/{reference_agent-config.md.BHeYMgme.js → reference_agent-config.md.CHNpiyp4.js} +3 -3
  166. package/dist/docs/assets/{reference_channels.md.Cd2f2iyV.js → reference_channels.md.DBGcaB7m.js} +2 -2
  167. package/dist/docs/assets/{reference_channels.md.Cd2f2iyV.lean.js → reference_channels.md.DBGcaB7m.lean.js} +1 -1
  168. package/dist/docs/assets/{reference_cli.md.DfoeyvL0.js → reference_cli.md.CJNc_xYK.js} +1 -1
  169. package/dist/docs/assets/{reference_extensions.md.9WQMZe1l.js → reference_extensions.md.DykHW3qL.js} +11 -5
  170. package/dist/docs/assets/reference_extensions.md.DykHW3qL.lean.js +1 -0
  171. package/dist/docs/assets/reference_hooks.md.Ddt5DdgJ.js +73 -0
  172. package/dist/docs/assets/{reference_hooks.md.a8BJxMR5.lean.js → reference_hooks.md.Ddt5DdgJ.lean.js} +1 -1
  173. package/dist/docs/assets/{reference_playground.md.DnX5nL-B.js → reference_playground.md.4myJPxrf.js} +1 -1
  174. package/dist/docs/assets/{reference_project-layout.md.CA6QP6Lw.js → reference_project-layout.md.DuBu9a96.js} +2 -2
  175. package/dist/docs/assets/reference_result.md.BK5SxDrf.js +19 -0
  176. package/dist/docs/assets/reference_result.md.BK5SxDrf.lean.js +1 -0
  177. package/dist/docs/assets/{reference_sessions.md.NxFP_CAC.js → reference_sessions.md.CueyOHSL.js} +1 -1
  178. package/dist/docs/assets/{reference_sessions.md.NxFP_CAC.lean.js → reference_sessions.md.CueyOHSL.lean.js} +1 -1
  179. package/dist/docs/assets/{reference_tools.md.B1up2r9W.js → reference_tools.md.aGrn99hP.js} +1 -1
  180. package/dist/docs/assets/skills_framework-map.md.haibFyoB.js +1 -0
  181. package/dist/docs/assets/{skills_otel.md.CgiZryR3.js → skills_otel.md.CqhobH3B.js} +3 -3
  182. package/dist/docs/assets/{skills_otel.md.CgiZryR3.lean.js → skills_otel.md.CqhobH3B.lean.js} +1 -1
  183. package/dist/docs/assets/{templates_pr-autofixer.md.x5zl6-GT.js → templates_pr-autofixer.md.Bds_XWcV.js} +2 -2
  184. package/dist/docs/assets/{templates_pr-autofixer.md.x5zl6-GT.lean.js → templates_pr-autofixer.md.Bds_XWcV.lean.js} +1 -1
  185. package/dist/docs/building-with-agents.html +4 -4
  186. package/dist/docs/concepts.html +5 -5
  187. package/dist/docs/concepts.md +2 -4
  188. package/dist/docs/deployment.html +4 -4
  189. package/dist/docs/design/filesystem.md +376 -0
  190. package/dist/docs/design/runtime-abstraction.md +2 -3
  191. package/dist/docs/evals.html +6 -6
  192. package/dist/docs/evals.md +9 -7
  193. package/dist/docs/guides/agent-to-agent.html +4 -4
  194. package/dist/docs/guides/cloud-agents.html +6 -6
  195. package/dist/docs/guides/cloud-agents.md +4 -6
  196. package/dist/docs/guides/convert-automation.html +4 -4
  197. package/dist/docs/guides/github.html +6 -6
  198. package/dist/docs/guides/github.md +5 -1
  199. package/dist/docs/guides/human-in-the-loop.html +4 -4
  200. package/dist/docs/guides/mcp-oauth.html +5 -5
  201. package/dist/docs/guides/opentelemetry.html +10 -11
  202. package/dist/docs/guides/opentelemetry.md +41 -17
  203. package/dist/docs/guides/slack.html +4 -4
  204. package/dist/docs/guides/webhooks.html +4 -4
  205. package/dist/docs/hashmap.json +1 -1
  206. package/dist/docs/hillclimbing.html +4 -4
  207. package/dist/docs/index.html +6 -6
  208. package/dist/docs/index.md +2 -2
  209. package/dist/docs/llms-full.txt +907 -262
  210. package/dist/docs/llms.txt +3 -2
  211. package/dist/docs/quickstart.html +4 -4
  212. package/dist/docs/reference/agent-config.html +8 -8
  213. package/dist/docs/reference/agent-config.md +6 -10
  214. package/dist/docs/reference/artifacts.html +5 -5
  215. package/dist/docs/reference/channels.html +6 -6
  216. package/dist/docs/reference/channels.md +38 -8
  217. package/dist/docs/reference/cli.html +5 -5
  218. package/dist/docs/reference/cli.md +3 -4
  219. package/dist/docs/reference/connections.html +4 -4
  220. package/dist/docs/reference/extensions.html +16 -10
  221. package/dist/docs/reference/extensions.md +86 -22
  222. package/dist/docs/reference/hooks.html +69 -10
  223. package/dist/docs/reference/hooks.md +215 -46
  224. package/dist/docs/reference/http-api.html +4 -4
  225. package/dist/docs/reference/instructions.html +4 -4
  226. package/dist/docs/reference/playground.html +5 -5
  227. package/dist/docs/reference/playground.md +3 -0
  228. package/dist/docs/reference/project-layout.html +6 -6
  229. package/dist/docs/reference/project-layout.md +2 -1
  230. package/dist/docs/reference/prompt.html +4 -4
  231. package/dist/docs/reference/result.html +45 -0
  232. package/dist/docs/reference/result.md +89 -0
  233. package/dist/docs/reference/schedules.html +4 -4
  234. package/dist/docs/reference/sessions.html +5 -5
  235. package/dist/docs/reference/sessions.md +3 -1
  236. package/dist/docs/reference/skills.html +4 -4
  237. package/dist/docs/reference/subagents.html +4 -4
  238. package/dist/docs/reference/tools.html +5 -5
  239. package/dist/docs/reference/tools.md +1 -2
  240. package/dist/docs/scaffolding-agents.html +4 -4
  241. package/dist/docs/skills/ab.html +4 -4
  242. package/dist/docs/skills/create-agent.html +4 -4
  243. package/dist/docs/skills/debug.html +4 -4
  244. package/dist/docs/skills/evals.html +4 -4
  245. package/dist/docs/skills/framework-map.html +5 -5
  246. package/dist/docs/skills/framework-map.md +3 -1
  247. package/dist/docs/skills/github.html +4 -4
  248. package/dist/docs/skills/hillclimb.html +4 -4
  249. package/dist/docs/skills/index.html +4 -4
  250. package/dist/docs/skills/mcp-auth.html +4 -4
  251. package/dist/docs/skills/otel.html +7 -7
  252. package/dist/docs/skills/otel.md +8 -3
  253. package/dist/docs/skills/setup-slack.html +4 -4
  254. package/dist/docs/storage.html +4 -4
  255. package/dist/docs/templates/agentic-owners.html +4 -4
  256. package/dist/docs/templates/agents-md.html +4 -4
  257. package/dist/docs/templates/code-wiki.html +4 -4
  258. package/dist/docs/templates/demo.html +4 -4
  259. package/dist/docs/templates/pr-autofixer.html +6 -6
  260. package/dist/docs/templates/pr-autofixer.md +0 -3
  261. package/dist/docs/templates/security-help.html +4 -4
  262. package/dist/docs/templates/security-reviewer.html +4 -4
  263. package/dist/docs/templates/triage.html +4 -4
  264. package/dist/docs/troubleshooting.html +4 -4
  265. package/dist/evals.d.ts +1 -1
  266. package/dist/evals.d.ts.map +1 -1
  267. package/dist/extensions.d.ts +20 -7
  268. package/dist/extensions.d.ts.map +1 -1
  269. package/dist/extensions.js +36 -5
  270. package/dist/files.d.ts +16 -3
  271. package/dist/files.d.ts.map +1 -1
  272. package/dist/files.js +16 -3
  273. package/dist/filesystem.d.ts +440 -0
  274. package/dist/filesystem.d.ts.map +1 -0
  275. package/dist/filesystem.js +1694 -0
  276. package/dist/index.d.ts +6 -4
  277. package/dist/index.d.ts.map +1 -1
  278. package/dist/index.js +4 -3
  279. package/dist/internal/ab-snapshot.d.ts.map +1 -1
  280. package/dist/internal/ab-snapshot.js +0 -1
  281. package/dist/internal/advertise-tools.d.ts.map +1 -1
  282. package/dist/internal/advertise-tools.js +1 -3
  283. package/dist/internal/authored-alias-hooks.d.ts +4 -13
  284. package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
  285. package/dist/internal/authored-alias-hooks.js +4 -20
  286. package/dist/internal/authored-loaders.d.ts +2 -3
  287. package/dist/internal/authored-loaders.d.ts.map +1 -1
  288. package/dist/internal/authored-loaders.js +6 -20
  289. package/dist/internal/channel-dispatch.d.ts +43 -0
  290. package/dist/internal/channel-dispatch.d.ts.map +1 -0
  291. package/dist/internal/channel-dispatch.js +77 -0
  292. package/dist/internal/chat-client.d.ts +1 -1
  293. package/dist/internal/chat-client.js +1 -1
  294. package/dist/internal/cli-ax.d.ts +5 -5
  295. package/dist/internal/cli-ax.d.ts.map +1 -1
  296. package/dist/internal/cli-ax.js +5 -5
  297. package/dist/internal/cli-bitbucket.d.ts +33 -0
  298. package/dist/internal/cli-bitbucket.d.ts.map +1 -0
  299. package/dist/internal/cli-bitbucket.js +359 -0
  300. package/dist/internal/cli-convert-automation.d.ts +1 -1
  301. package/dist/internal/cli-convert-automation.js +2 -2
  302. package/dist/internal/cli-cursor.d.ts +1 -1
  303. package/dist/internal/cli-cursor.d.ts.map +1 -1
  304. package/dist/internal/cli-cursor.js +2 -4
  305. package/dist/internal/cli-deploy.d.ts.map +1 -1
  306. package/dist/internal/cli-deploy.js +2 -6
  307. package/dist/internal/cli-github.d.ts +1 -1
  308. package/dist/internal/cli-github.js +3 -3
  309. package/dist/internal/cli-gitlab.d.ts +37 -0
  310. package/dist/internal/cli-gitlab.d.ts.map +1 -0
  311. package/dist/internal/cli-gitlab.js +380 -0
  312. package/dist/internal/cli-mcp.d.ts.map +1 -1
  313. package/dist/internal/cli-mcp.js +2 -6
  314. package/dist/internal/cli-slack.d.ts +1 -1
  315. package/dist/internal/cli-slack.d.ts.map +1 -1
  316. package/dist/internal/cli-slack.js +2 -4
  317. package/dist/internal/continuation-channel.d.ts +18 -2
  318. package/dist/internal/continuation-channel.d.ts.map +1 -1
  319. package/dist/internal/continuation-channel.js +67 -5
  320. package/dist/internal/continuation-identity.d.ts +24 -17
  321. package/dist/internal/continuation-identity.d.ts.map +1 -1
  322. package/dist/internal/continuation-identity.js +246 -32
  323. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  324. package/dist/internal/conversation-mirror.js +4 -3
  325. package/dist/internal/convert-automation/types.d.ts +1 -1
  326. package/dist/internal/convert-automation/types.js +1 -1
  327. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  328. package/dist/internal/cursor/account-mcp.js +1 -3
  329. package/dist/internal/cursor/backend-client.d.ts +5 -4
  330. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  331. package/dist/internal/cursor/backend-client.js +5 -6
  332. package/dist/internal/cursor/bound-secret-file.d.ts +56 -0
  333. package/dist/internal/cursor/bound-secret-file.d.ts.map +1 -0
  334. package/dist/internal/cursor/bound-secret-file.js +88 -0
  335. package/dist/internal/cursor/credentials.d.ts +39 -5
  336. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  337. package/dist/internal/cursor/credentials.js +58 -8
  338. package/dist/internal/cursor/hosted-bound-secrets.d.ts +41 -0
  339. package/dist/internal/cursor/hosted-bound-secrets.d.ts.map +1 -0
  340. package/dist/internal/cursor/hosted-bound-secrets.js +54 -0
  341. package/dist/internal/cursor/hosted-deployment-secrets.d.ts +19 -5
  342. package/dist/internal/cursor/hosted-deployment-secrets.d.ts.map +1 -1
  343. package/dist/internal/cursor/hosted-deployment-secrets.js +29 -9
  344. package/dist/internal/cursor/hosted-store-secrets.d.ts +1 -1
  345. package/dist/internal/cursor/hosted-store-secrets.js +1 -1
  346. package/dist/internal/cursor-account-mcp-auth.d.ts.map +1 -1
  347. package/dist/internal/cursor-account-mcp-auth.js +2 -4
  348. package/dist/internal/cursor-deployment-relay.d.ts +6 -2
  349. package/dist/internal/cursor-deployment-relay.d.ts.map +1 -1
  350. package/dist/internal/cursor-deployment-relay.js +13 -9
  351. package/dist/internal/deploy-manifest.d.ts +1 -1
  352. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  353. package/dist/internal/deploy-manifest.js +1 -1
  354. package/dist/internal/discovery/ab.d.ts +1 -1
  355. package/dist/internal/discovery/ab.d.ts.map +1 -1
  356. package/dist/internal/discovery/ab.js +21 -9
  357. package/dist/internal/discovery/agent.d.ts +6 -1
  358. package/dist/internal/discovery/agent.d.ts.map +1 -1
  359. package/dist/internal/discovery/agent.js +141 -120
  360. package/dist/internal/discovery/channels.d.ts +1 -1
  361. package/dist/internal/discovery/channels.d.ts.map +1 -1
  362. package/dist/internal/discovery/channels.js +14 -14
  363. package/dist/internal/discovery/connections.d.ts +1 -5
  364. package/dist/internal/discovery/connections.d.ts.map +1 -1
  365. package/dist/internal/discovery/connections.js +30 -44
  366. package/dist/internal/discovery/cursor-plugin.d.ts.map +1 -1
  367. package/dist/internal/discovery/cursor-plugin.js +1 -3
  368. package/dist/internal/discovery/extension-overlay.d.ts +32 -0
  369. package/dist/internal/discovery/extension-overlay.d.ts.map +1 -0
  370. package/dist/internal/discovery/extension-overlay.js +191 -0
  371. package/dist/internal/discovery/extensions.d.ts +11 -2
  372. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  373. package/dist/internal/discovery/extensions.js +211 -74
  374. package/dist/internal/discovery/hooks.d.ts +1 -1
  375. package/dist/internal/discovery/hooks.d.ts.map +1 -1
  376. package/dist/internal/discovery/hooks.js +15 -2
  377. package/dist/internal/discovery/info.d.ts.map +1 -1
  378. package/dist/internal/discovery/info.js +10 -1
  379. package/dist/internal/discovery/modules.d.ts.map +1 -1
  380. package/dist/internal/discovery/modules.js +8 -2
  381. package/dist/internal/discovery/names.d.ts +1 -1
  382. package/dist/internal/discovery/names.d.ts.map +1 -1
  383. package/dist/internal/discovery/names.js +1 -0
  384. package/dist/internal/discovery/project.d.ts +0 -2
  385. package/dist/internal/discovery/project.d.ts.map +1 -1
  386. package/dist/internal/discovery/project.js +64 -10
  387. package/dist/internal/discovery/runtime.d.ts.map +1 -1
  388. package/dist/internal/discovery/runtime.js +1 -2
  389. package/dist/internal/discovery/schedules.d.ts +1 -1
  390. package/dist/internal/discovery/schedules.d.ts.map +1 -1
  391. package/dist/internal/discovery/schedules.js +23 -2
  392. package/dist/internal/discovery/services.d.ts +6 -2
  393. package/dist/internal/discovery/services.d.ts.map +1 -1
  394. package/dist/internal/discovery/services.js +31 -1
  395. package/dist/internal/discovery/skills.d.ts +1 -6
  396. package/dist/internal/discovery/skills.d.ts.map +1 -1
  397. package/dist/internal/discovery/skills.js +8 -3
  398. package/dist/internal/discovery/subagent.d.ts +3 -0
  399. package/dist/internal/discovery/subagent.d.ts.map +1 -1
  400. package/dist/internal/discovery/subagent.js +109 -0
  401. package/dist/internal/discovery.d.ts +1 -2
  402. package/dist/internal/discovery.d.ts.map +1 -1
  403. package/dist/internal/discovery.js +1 -2
  404. package/dist/internal/distribution.d.ts +10 -27
  405. package/dist/internal/distribution.d.ts.map +1 -1
  406. package/dist/internal/distribution.js +25 -73
  407. package/dist/internal/docs-site.js +1 -1
  408. package/dist/internal/eval-run-store.d.ts +0 -1
  409. package/dist/internal/eval-run-store.d.ts.map +1 -1
  410. package/dist/internal/eval-runner.d.ts.map +1 -1
  411. package/dist/internal/factory-resource-channel.d.ts +33 -0
  412. package/dist/internal/factory-resource-channel.d.ts.map +1 -0
  413. package/dist/internal/factory-resource-channel.js +77 -0
  414. package/dist/internal/filesystem/errors.d.ts +64 -0
  415. package/dist/internal/filesystem/errors.d.ts.map +1 -0
  416. package/dist/internal/filesystem/errors.js +175 -0
  417. package/dist/internal/filesystem/format.d.ts +28 -0
  418. package/dist/internal/filesystem/format.d.ts.map +1 -0
  419. package/dist/internal/filesystem/format.js +213 -0
  420. package/dist/internal/filesystem/merge.d.ts +34 -0
  421. package/dist/internal/filesystem/merge.d.ts.map +1 -0
  422. package/dist/internal/filesystem/merge.js +196 -0
  423. package/dist/internal/filesystem/scratch.d.ts +59 -0
  424. package/dist/internal/filesystem/scratch.d.ts.map +1 -0
  425. package/dist/internal/filesystem/scratch.js +212 -0
  426. package/dist/internal/filesystem/sdk-schemas.d.ts +29 -0
  427. package/dist/internal/filesystem/sdk-schemas.d.ts.map +1 -0
  428. package/dist/internal/filesystem/sdk-schemas.js +153 -0
  429. package/dist/internal/filesystem/tools.d.ts +42 -0
  430. package/dist/internal/filesystem/tools.d.ts.map +1 -0
  431. package/dist/internal/filesystem/tools.js +618 -0
  432. package/dist/internal/filesystem/walk.d.ts +74 -0
  433. package/dist/internal/filesystem/walk.d.ts.map +1 -0
  434. package/dist/internal/filesystem/walk.js +339 -0
  435. package/dist/internal/framework-file-storage.d.ts +8 -0
  436. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  437. package/dist/internal/framework-file-storage.js +8 -8
  438. package/dist/internal/github-fanout.d.ts +1 -1
  439. package/dist/internal/github-fanout.js +1 -1
  440. package/dist/internal/guest-network.d.ts +104 -0
  441. package/dist/internal/guest-network.d.ts.map +1 -0
  442. package/dist/internal/guest-network.js +309 -0
  443. package/dist/internal/host-otel.d.ts +3 -3
  444. package/dist/internal/host-otel.d.ts.map +1 -1
  445. package/dist/internal/host-otel.js +8 -4
  446. package/dist/internal/hosted-admission-adapter.d.ts +8 -7
  447. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  448. package/dist/internal/hosted-delivery-protocol.d.ts +6 -0
  449. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  450. package/dist/internal/hosted-delivery-protocol.js +18 -5
  451. package/dist/internal/hosted-delivery.d.ts +18 -0
  452. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  453. package/dist/internal/hosted-delivery.js +258 -118
  454. package/dist/internal/http-channel.d.ts.map +1 -1
  455. package/dist/internal/http-channel.js +1 -3
  456. package/dist/internal/init-interview.d.ts.map +1 -1
  457. package/dist/internal/init-interview.js +1 -3
  458. package/dist/internal/init-project.d.ts +2 -2
  459. package/dist/internal/init-project.js +2 -2
  460. package/dist/internal/inline-stdio-define-stub.d.ts +1 -1
  461. package/dist/internal/inline-stdio-define-stub.d.ts.map +1 -1
  462. package/dist/internal/inline-stdio-define-stub.js +1 -1
  463. package/dist/internal/is-record.d.ts +2 -0
  464. package/dist/internal/is-record.d.ts.map +1 -0
  465. package/dist/internal/is-record.js +3 -0
  466. package/dist/internal/json-schema.d.ts.map +1 -1
  467. package/dist/internal/json-schema.js +18 -10
  468. package/dist/internal/local-control-plane.d.ts +1 -2
  469. package/dist/internal/local-control-plane.d.ts.map +1 -1
  470. package/dist/internal/local-control-plane.js +3 -20
  471. package/dist/internal/mcp-endpoint.d.ts.map +1 -1
  472. package/dist/internal/mcp-endpoint.js +1 -3
  473. package/dist/internal/otel/collector.d.ts +12 -3
  474. package/dist/internal/otel/collector.d.ts.map +1 -1
  475. package/dist/internal/otel/collector.js +77 -125
  476. package/dist/internal/otel/config.d.ts +0 -2
  477. package/dist/internal/otel/config.d.ts.map +1 -1
  478. package/dist/internal/otel/config.js +17 -20
  479. package/dist/internal/otel/http.d.ts +2 -0
  480. package/dist/internal/otel/http.d.ts.map +1 -1
  481. package/dist/internal/otel/http.js +7 -1
  482. package/dist/internal/otel/mcp.d.ts.map +1 -1
  483. package/dist/internal/otel/mcp.js +3 -16
  484. package/dist/internal/otel/runtime.d.ts +26 -1
  485. package/dist/internal/otel/runtime.d.ts.map +1 -1
  486. package/dist/internal/otel/runtime.js +164 -15
  487. package/dist/internal/package-inline-stdio.d.ts.map +1 -1
  488. package/dist/internal/package-inline-stdio.js +3 -11
  489. package/dist/internal/playground/toolchain.d.ts +1 -1
  490. package/dist/internal/playground/toolchain.d.ts.map +1 -1
  491. package/dist/internal/playground/toolchain.js +1 -1
  492. package/dist/internal/request-error-status.d.ts +12 -0
  493. package/dist/internal/request-error-status.d.ts.map +1 -0
  494. package/dist/internal/request-error-status.js +52 -0
  495. package/dist/internal/resolve-prod-target.d.ts +1 -1
  496. package/dist/internal/resolve-prod-target.d.ts.map +1 -1
  497. package/dist/internal/resolve-prod-target.js +3 -7
  498. package/dist/internal/result-output.d.ts +18 -0
  499. package/dist/internal/result-output.d.ts.map +1 -0
  500. package/dist/internal/result-output.js +33 -0
  501. package/dist/internal/run-client.d.ts +2 -2
  502. package/dist/internal/run-client.js +2 -2
  503. package/dist/internal/runtime-dispatch-runner.d.ts +1 -11
  504. package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
  505. package/dist/internal/runtime-dispatch-runner.js +2 -15
  506. package/dist/internal/sdk-runner.d.ts +1 -1
  507. package/dist/internal/sdk-runner.d.ts.map +1 -1
  508. package/dist/internal/sdk-runner.js +6 -7
  509. package/dist/internal/server.d.ts.map +1 -1
  510. package/dist/internal/server.js +110 -35
  511. package/dist/internal/session-cost.d.ts +3 -3
  512. package/dist/internal/session-cost.d.ts.map +1 -1
  513. package/dist/internal/session-cost.js +3 -3
  514. package/dist/internal/session-engine.d.ts +48 -11
  515. package/dist/internal/session-engine.d.ts.map +1 -1
  516. package/dist/internal/session-engine.js +507 -115
  517. package/dist/internal/session-run-log.d.ts.map +1 -1
  518. package/dist/internal/session-run-log.js +1 -3
  519. package/dist/internal/skills-sync.d.ts +1 -4
  520. package/dist/internal/skills-sync.d.ts.map +1 -1
  521. package/dist/internal/skills-sync.js +10 -50
  522. package/dist/internal/sleep.d.ts +2 -0
  523. package/dist/internal/sleep.d.ts.map +1 -0
  524. package/dist/internal/sleep.js +3 -0
  525. package/dist/internal/store-mirror.d.ts +29 -0
  526. package/dist/internal/store-mirror.d.ts.map +1 -0
  527. package/dist/internal/store-mirror.js +70 -0
  528. package/dist/internal/tenant-slack/relay.d.ts +73 -0
  529. package/dist/internal/tenant-slack/relay.d.ts.map +1 -0
  530. package/dist/internal/tenant-slack/relay.js +138 -0
  531. package/dist/internal/testing/factory-resource-fixtures.d.ts +48 -0
  532. package/dist/internal/testing/factory-resource-fixtures.d.ts.map +1 -0
  533. package/dist/internal/testing/factory-resource-fixtures.js +41 -0
  534. package/dist/internal/testing/scm-continuation-fixtures.d.ts +33 -0
  535. package/dist/internal/testing/scm-continuation-fixtures.d.ts.map +1 -0
  536. package/dist/internal/testing/scm-continuation-fixtures.js +253 -0
  537. package/dist/internal/workspace-sync.d.ts +22 -0
  538. package/dist/internal/workspace-sync.d.ts.map +1 -0
  539. package/dist/internal/workspace-sync.js +49 -0
  540. package/dist/internal/workspace.d.ts +7 -0
  541. package/dist/internal/workspace.d.ts.map +1 -1
  542. package/dist/internal/workspace.js +13 -0
  543. package/dist/otel.d.ts +23 -1
  544. package/dist/otel.d.ts.map +1 -1
  545. package/dist/otel.js +93 -2
  546. package/dist/playground/assets/index-8YiozU89.js +67 -0
  547. package/dist/playground/assets/index-MbMxXg-y.css +1 -0
  548. package/dist/playground/index.html +2 -2
  549. package/dist/result.d.ts +24 -0
  550. package/dist/result.d.ts.map +1 -0
  551. package/dist/result.js +27 -0
  552. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  553. package/dist/storage-backends/cursor-hosted.js +7 -4
  554. package/dist/storage-protocol.d.ts.map +1 -1
  555. package/dist/storage-protocol.js +1 -3
  556. package/dist/types.d.ts +141 -26
  557. package/dist/types.d.ts.map +1 -1
  558. package/docs/README.md +2 -2
  559. package/docs/concepts.md +2 -4
  560. package/docs/design/filesystem.md +376 -0
  561. package/docs/design/runtime-abstraction.md +2 -3
  562. package/docs/evals.md +9 -7
  563. package/docs/guides/cloud-agents.md +4 -6
  564. package/docs/guides/github.md +5 -1
  565. package/docs/guides/opentelemetry.md +41 -17
  566. package/docs/reference/agent-config.md +6 -10
  567. package/docs/reference/channels.md +38 -8
  568. package/docs/reference/cli.md +3 -4
  569. package/docs/reference/extensions.md +87 -23
  570. package/docs/reference/hooks.md +215 -46
  571. package/docs/reference/playground.md +3 -0
  572. package/docs/reference/project-layout.md +2 -1
  573. package/docs/reference/result.md +94 -0
  574. package/docs/reference/sessions.md +3 -1
  575. package/docs/reference/tools.md +1 -2
  576. package/docs/templates/pr-autofixer.md +0 -3
  577. package/package.json +42 -9
  578. package/skills/framework-map/SKILL.md +3 -1
  579. package/skills/otel/SKILL.md +8 -3
  580. package/src/ab.ts +1 -1
  581. package/src/bin/agent-serve.ts +121 -21
  582. package/src/channels/bitbucket/api.ts +623 -0
  583. package/src/channels/bitbucket/binding.ts +414 -0
  584. package/src/channels/bitbucket/bitbucket-channel.ts +182 -0
  585. package/src/channels/bitbucket/bitbucket-webhook.ts +576 -0
  586. package/src/channels/bitbucket/checks.ts +154 -0
  587. package/src/channels/bitbucket/cursor-account.ts +117 -0
  588. package/src/channels/bitbucket/defaults.ts +110 -0
  589. package/src/channels/bitbucket/events.ts +84 -0
  590. package/src/channels/bitbucket/index.ts +49 -0
  591. package/src/channels/bitbucket/replay.ts +439 -0
  592. package/src/channels/bitbucket/state.ts +59 -0
  593. package/src/channels/bitbucket/types.ts +266 -0
  594. package/src/channels/change-monitors/change-monitors-channel.ts +62 -0
  595. package/src/channels/change-monitors/index.ts +8 -0
  596. package/src/channels/change-monitors/types.ts +44 -0
  597. package/src/channels/deployments/deployments-channel.ts +25 -43
  598. package/src/channels/deployments/types.ts +12 -6
  599. package/src/channels/github/binding.ts +8 -1
  600. package/src/channels/github/cursor-account.ts +17 -6
  601. package/src/channels/github/defaults.ts +4 -0
  602. package/src/channels/github/events.ts +1 -1
  603. package/src/channels/github/forward.ts +3 -2
  604. package/src/channels/github/github-channel.ts +74 -221
  605. package/src/channels/github/progress.ts +76 -10
  606. package/src/channels/github/replay.ts +1 -1
  607. package/src/channels/github/state.ts +6 -0
  608. package/src/channels/github/types.ts +2 -5
  609. package/src/channels/gitlab/api.ts +228 -0
  610. package/src/channels/gitlab/binding.ts +233 -0
  611. package/src/channels/gitlab/checks.ts +243 -0
  612. package/src/channels/gitlab/cursor-account.ts +114 -0
  613. package/src/channels/gitlab/defaults.ts +93 -0
  614. package/src/channels/gitlab/events.ts +44 -0
  615. package/src/channels/gitlab/gitlab-channel.ts +176 -0
  616. package/src/channels/gitlab/gitlab-webhook.ts +555 -0
  617. package/src/channels/gitlab/index.ts +43 -0
  618. package/src/channels/gitlab/replay.ts +347 -0
  619. package/src/channels/gitlab/state.ts +55 -0
  620. package/src/channels/gitlab/types.ts +263 -0
  621. package/src/channels/issues/index.ts +9 -0
  622. package/src/channels/issues/issues-channel.ts +51 -0
  623. package/src/channels/issues/types.ts +41 -0
  624. package/src/channels/origin/api.ts +4 -2
  625. package/src/channels/origin/origin-channel.ts +19 -94
  626. package/src/channels/origin/types.ts +23 -2
  627. package/src/channels/slack/eval-directive.ts +1 -6
  628. package/src/channels/slack/init.ts +6 -3
  629. package/src/channels/slack/setup.ts +7 -6
  630. package/src/channels/slack/types.ts +1 -1
  631. package/src/channels.ts +0 -1
  632. package/src/client.ts +1 -1
  633. package/src/connections.ts +1 -1
  634. package/src/evals.ts +1 -1
  635. package/src/extensions.ts +47 -5
  636. package/src/files.ts +21 -3
  637. package/src/filesystem.ts +2074 -0
  638. package/src/index.ts +48 -28
  639. package/src/internal/ab-snapshot.ts +0 -3
  640. package/src/internal/advertise-tools.ts +1 -4
  641. package/src/internal/authored-alias-hooks.ts +4 -21
  642. package/src/internal/authored-loaders.ts +6 -23
  643. package/src/internal/channel-dispatch.ts +160 -0
  644. package/src/internal/chat-client.ts +1 -1
  645. package/src/internal/cli-ax.ts +5 -5
  646. package/src/internal/cli-bitbucket.ts +477 -0
  647. package/src/internal/cli-convert-automation.ts +7 -7
  648. package/src/internal/cli-cursor.ts +2 -5
  649. package/src/internal/cli-deploy.ts +2 -8
  650. package/src/internal/cli-github.ts +3 -3
  651. package/src/internal/cli-gitlab.ts +485 -0
  652. package/src/internal/cli-mcp.ts +2 -7
  653. package/src/internal/cli-slack.ts +2 -5
  654. package/src/internal/continuation-channel.ts +102 -4
  655. package/src/internal/continuation-identity.ts +338 -35
  656. package/src/internal/conversation-mirror.ts +4 -3
  657. package/src/internal/convert-automation/types.ts +1 -1
  658. package/src/internal/cursor/account-mcp.ts +1 -4
  659. package/src/internal/cursor/backend-client.ts +9 -10
  660. package/src/internal/cursor/bound-secret-file.ts +108 -0
  661. package/src/internal/cursor/credentials.ts +75 -10
  662. package/src/internal/cursor/hosted-bound-secrets.ts +75 -0
  663. package/src/internal/cursor/hosted-deployment-secrets.ts +42 -11
  664. package/src/internal/cursor/hosted-store-secrets.ts +1 -1
  665. package/src/internal/cursor-account-mcp-auth.ts +2 -5
  666. package/src/internal/cursor-deployment-relay.ts +11 -7
  667. package/src/internal/deploy-manifest.ts +4 -2
  668. package/src/internal/discovery/ab.ts +29 -9
  669. package/src/internal/discovery/agent.ts +181 -136
  670. package/src/internal/discovery/channels.ts +15 -13
  671. package/src/internal/discovery/connections.ts +55 -50
  672. package/src/internal/discovery/cursor-plugin.ts +1 -4
  673. package/src/internal/discovery/extension-overlay.ts +274 -0
  674. package/src/internal/discovery/extensions.ts +330 -105
  675. package/src/internal/discovery/hooks.ts +20 -2
  676. package/src/internal/discovery/info.ts +10 -0
  677. package/src/internal/discovery/modules.ts +8 -2
  678. package/src/internal/discovery/names.ts +2 -1
  679. package/src/internal/discovery/project.ts +80 -9
  680. package/src/internal/discovery/runtime.ts +1 -2
  681. package/src/internal/discovery/schedules.ts +28 -2
  682. package/src/internal/discovery/services.ts +37 -1
  683. package/src/internal/discovery/skills.ts +13 -3
  684. package/src/internal/discovery/subagent.ts +107 -0
  685. package/src/internal/discovery.ts +0 -2
  686. package/src/internal/distribution.ts +35 -83
  687. package/src/internal/docs-site.ts +1 -1
  688. package/src/internal/eval-run-store.ts +0 -7
  689. package/src/internal/eval-runner.ts +0 -1
  690. package/src/internal/factory-resource-channel.ts +122 -0
  691. package/src/internal/filesystem/errors.ts +220 -0
  692. package/src/internal/filesystem/format.ts +276 -0
  693. package/src/internal/filesystem/merge.ts +195 -0
  694. package/src/internal/filesystem/scratch.ts +255 -0
  695. package/src/internal/filesystem/sdk-schemas.ts +204 -0
  696. package/src/internal/filesystem/tools.ts +821 -0
  697. package/src/internal/filesystem/walk.ts +369 -0
  698. package/src/internal/framework-file-storage.ts +8 -8
  699. package/src/internal/github-fanout.ts +1 -1
  700. package/src/internal/guest-network.ts +389 -0
  701. package/src/internal/host-otel.ts +8 -4
  702. package/src/internal/hosted-admission-adapter.ts +8 -8
  703. package/src/internal/hosted-delivery-protocol.ts +26 -1
  704. package/src/internal/hosted-delivery.ts +393 -192
  705. package/src/internal/http-channel.ts +1 -4
  706. package/src/internal/init-interview.ts +1 -4
  707. package/src/internal/init-project.ts +2 -2
  708. package/src/internal/inline-stdio-define-stub.ts +1 -1
  709. package/src/internal/is-record.ts +3 -0
  710. package/src/internal/json-schema.ts +19 -10
  711. package/src/internal/local-control-plane.ts +5 -24
  712. package/src/internal/mcp-endpoint.ts +1 -4
  713. package/src/internal/otel/collector.ts +94 -159
  714. package/src/internal/otel/config.ts +10 -14
  715. package/src/internal/otel/http.ts +14 -1
  716. package/src/internal/otel/mcp.ts +3 -16
  717. package/src/internal/otel/runtime.ts +240 -25
  718. package/src/internal/package-inline-stdio.ts +3 -12
  719. package/src/internal/playground/toolchain.ts +1 -1
  720. package/src/internal/request-error-status.ts +72 -0
  721. package/src/internal/resolve-prod-target.ts +3 -8
  722. package/src/internal/result-output.ts +34 -0
  723. package/src/internal/run-client.ts +2 -2
  724. package/src/internal/runtime-dispatch-runner.ts +3 -21
  725. package/src/internal/sdk-runner.ts +7 -7
  726. package/src/internal/server.ts +153 -44
  727. package/src/internal/session-cost.ts +3 -3
  728. package/src/internal/session-engine.ts +621 -103
  729. package/src/internal/session-run-log.ts +1 -4
  730. package/src/internal/skills-sync.ts +13 -63
  731. package/src/internal/sleep.ts +3 -0
  732. package/src/internal/store-mirror.ts +86 -0
  733. package/src/internal/tenant-slack/relay.ts +179 -0
  734. package/src/internal/testing/factory-resource-fixtures.ts +85 -0
  735. package/src/internal/testing/scm-continuation-fixtures.ts +286 -0
  736. package/src/internal/workspace-sync.ts +55 -0
  737. package/src/internal/workspace.ts +14 -0
  738. package/src/otel.ts +143 -3
  739. package/src/result.ts +36 -0
  740. package/src/storage-backends/cursor-hosted.ts +7 -4
  741. package/src/storage-protocol.ts +1 -4
  742. package/src/types.ts +154 -37
  743. package/templates/triage/agent/lib/types.ts +0 -2
  744. package/dist/continuation.d.ts +0 -20
  745. package/dist/continuation.d.ts.map +0 -1
  746. package/dist/continuation.js +0 -18
  747. package/dist/docs/assets/chunks/@localSearchIndexroot.FAqdWIXo.js +0 -1
  748. package/dist/docs/assets/concepts.md.rPzW2HZN.js +0 -1
  749. package/dist/docs/assets/guides_cloud-agents.md.DumwWXba.js +0 -9
  750. package/dist/docs/assets/guides_cloud-runtime.md.BRirbRAN.js +0 -9
  751. package/dist/docs/assets/guides_cloud-runtime.md.BRirbRAN.lean.js +0 -1
  752. package/dist/docs/assets/reference_extensions.md.9WQMZe1l.lean.js +0 -1
  753. package/dist/docs/assets/reference_hooks.md.a8BJxMR5.js +0 -14
  754. package/dist/docs/assets/skills_framework-map.md.DDa4MeEW.js +0 -1
  755. package/dist/docs/guides/cloud-runtime.html +0 -35
  756. package/dist/docs/guides/cloud-runtime.md +0 -117
  757. package/dist/internal/convert-automation/index.d.ts +0 -3
  758. package/dist/internal/convert-automation/index.d.ts.map +0 -1
  759. package/dist/internal/convert-automation/index.js +0 -1
  760. package/dist/internal/grokbot/runner.d.ts +0 -64
  761. package/dist/internal/grokbot/runner.d.ts.map +0 -1
  762. package/dist/internal/grokbot/runner.js +0 -282
  763. package/dist/internal/managed-delivery.d.ts +0 -80
  764. package/dist/internal/managed-delivery.d.ts.map +0 -1
  765. package/dist/internal/managed-delivery.js +0 -86
  766. package/dist/internal/review-comments.d.ts +0 -370
  767. package/dist/internal/review-comments.d.ts.map +0 -1
  768. package/dist/internal/review-comments.js +0 -921
  769. package/dist/internal/shallow-clone.d.ts +0 -176
  770. package/dist/internal/shallow-clone.d.ts.map +0 -1
  771. package/dist/internal/shallow-clone.js +0 -419
  772. package/dist/playground/assets/index-B6C9S9nG.css +0 -1
  773. package/dist/playground/assets/index-ZqNoT8Ie.js +0 -69
  774. package/docs/guides/cloud-runtime.md +0 -122
  775. package/src/continuation.ts +0 -49
  776. package/src/internal/convert-automation/index.ts +0 -10
  777. package/src/internal/grokbot/runner.ts +0 -370
  778. package/src/internal/managed-delivery.ts +0 -125
  779. package/src/internal/review-comments.ts +0 -1363
  780. package/src/internal/shallow-clone.ts +0 -609
  781. /package/dist/docs/assets/{evals.md.CPzDAwoH.lean.js → evals.md.CbMoebP1.lean.js} +0 -0
  782. /package/dist/docs/assets/{guides_cloud-agents.md.DumwWXba.lean.js → guides_cloud-agents.md.DS8RIjwx.lean.js} +0 -0
  783. /package/dist/docs/assets/{index.md.Kiht7ell.lean.js → index.md.D75GWhPl.lean.js} +0 -0
  784. /package/dist/docs/assets/{reference_agent-config.md.BHeYMgme.lean.js → reference_agent-config.md.CHNpiyp4.lean.js} +0 -0
  785. /package/dist/docs/assets/{reference_cli.md.DfoeyvL0.lean.js → reference_cli.md.CJNc_xYK.lean.js} +0 -0
  786. /package/dist/docs/assets/{reference_playground.md.DnX5nL-B.lean.js → reference_playground.md.4myJPxrf.lean.js} +0 -0
  787. /package/dist/docs/assets/{reference_project-layout.md.CA6QP6Lw.lean.js → reference_project-layout.md.DuBu9a96.lean.js} +0 -0
  788. /package/dist/docs/assets/{reference_tools.md.B1up2r9W.lean.js → reference_tools.md.aGrn99hP.lean.js} +0 -0
  789. /package/dist/docs/assets/{skills_framework-map.md.DDa4MeEW.lean.js → skills_framework-map.md.haibFyoB.lean.js} +0 -0
@@ -0,0 +1,821 @@
1
+ /**
2
+ * Native file tools synthesized from a bound {@link FileSystem}.
3
+ *
4
+ * Advertised name / input / output match `@cursor/sdk` tool-call types.
5
+ * Each tool is a `defineTool` whose runtime `inputSchema` accepts those
6
+ * fields plus the native aliases the harness still sends.
7
+ */
8
+
9
+ import { Buffer } from "node:buffer";
10
+ import { minimatch } from "minimatch";
11
+ import { z } from "zod";
12
+ import {
13
+ canonicalizeFileSystemToolName,
14
+ collectGrepMatches,
15
+ type FileSystem,
16
+ type FileSystemToolName,
17
+ fileSystemImage,
18
+ fileSystemText,
19
+ type GrepContentHit,
20
+ type GrepOutputMode,
21
+ type GrepResult,
22
+ InvalidGrepPatternError,
23
+ type SearchResult,
24
+ shapeGrepUnion,
25
+ sliceReadContent,
26
+ strReplaceOnFileSystem,
27
+ } from "../../filesystem.js";
28
+ import { defineTool } from "../../tools.js";
29
+ import type { DiscoveredTool, ToolDefinition } from "../../types.js";
30
+ import {
31
+ toolInputJsonSchema,
32
+ toolOutputJsonSchema,
33
+ validateToolInput,
34
+ } from "../json-schema.js";
35
+ import {
36
+ formatGlobOutput,
37
+ formatGrepOutput,
38
+ formatLsTree,
39
+ formatNumberedLines,
40
+ formatStrReplaceOutput,
41
+ formatWriteOutput,
42
+ slicedReadStartLine,
43
+ } from "./format.js";
44
+ import {
45
+ sdkDeleteArgs,
46
+ sdkDeleteResult,
47
+ sdkEditResult,
48
+ sdkGlobArgs,
49
+ sdkGlobResult,
50
+ sdkGrepArgs,
51
+ sdkGrepResult,
52
+ sdkLsArgs,
53
+ sdkLsResult,
54
+ sdkReadArgs,
55
+ sdkReadResult,
56
+ sdkSemSearchArgs,
57
+ sdkSemSearchResult,
58
+ sdkStrReplaceArgs,
59
+ sdkWriteArgs,
60
+ sdkWriteResult,
61
+ } from "./sdk-schemas.js";
62
+ import { collectGlob, collectListOrStat, lsFromList } from "./walk.js";
63
+
64
+ export const SYNTHESIZED_FILE_SYSTEM_TOOL_NAMES = [
65
+ "Read",
66
+ "LS",
67
+ "Glob",
68
+ "Grep",
69
+ "Write",
70
+ "StrReplace",
71
+ "Delete",
72
+ "SemanticSearch",
73
+ ] as const;
74
+
75
+ export type SynthesizedFileSystemToolName =
76
+ (typeof SYNTHESIZED_FILE_SYSTEM_TOOL_NAMES)[number];
77
+
78
+ const SYNTHESIZED_NAME_SET = new Set<string>(
79
+ SYNTHESIZED_FILE_SYSTEM_TOOL_NAMES
80
+ );
81
+
82
+ export function isSynthesizedFileSystemToolName(name: string): boolean {
83
+ if (SYNTHESIZED_NAME_SET.has(name)) {
84
+ return true;
85
+ }
86
+ const canonical = canonicalizeFileSystemToolName(name);
87
+ return canonical !== undefined && SYNTHESIZED_NAME_SET.has(canonical);
88
+ }
89
+
90
+ export function rootFileToolsFromAuthored(
91
+ tools: readonly string[] | undefined
92
+ ): FileSystemToolName[] | undefined {
93
+ if (tools === undefined) {
94
+ return undefined;
95
+ }
96
+ if (tools.length === 0) {
97
+ return [];
98
+ }
99
+ const files: FileSystemToolName[] = [];
100
+ for (const name of tools) {
101
+ if (name === "edit") {
102
+ files.push("Write", "StrReplace");
103
+ continue;
104
+ }
105
+ const canonical = canonicalizeFileSystemToolName(name);
106
+ if (canonical !== undefined) {
107
+ files.push(canonical);
108
+ }
109
+ }
110
+ return files.length === 0 ? undefined : [...new Set(files)];
111
+ }
112
+
113
+ /**
114
+ * Host-default file-tool filter. Omitted `tools` keeps the default
115
+ * seven-tool set (`undefined`). A listed allowlist is closed: names that
116
+ * are not FileSystem methods synthesize nothing, so agents that already
117
+ * replaced natives with authored VFS tools (`tools: ["updateTodos"]` plus
118
+ * `agent/tools/Delete.ts`) do not also get host-disk Delete.
119
+ *
120
+ * Authored `root` still uses {@link rootFileToolsFromAuthored}, where a
121
+ * no-file-name allowlist means the default-on file layer.
122
+ */
123
+ export function hostFileToolsFromAuthored(
124
+ tools: readonly string[] | undefined
125
+ ): FileSystemToolName[] | undefined {
126
+ if (tools === undefined) {
127
+ return undefined;
128
+ }
129
+ return rootFileToolsFromAuthored(tools) ?? [];
130
+ }
131
+
132
+ const HOST_DEFAULT_SYNTHESIZED_NAMES: readonly SynthesizedFileSystemToolName[] =
133
+ SYNTHESIZED_FILE_SYSTEM_TOOL_NAMES.filter(
134
+ (name) => name !== "SemanticSearch"
135
+ );
136
+
137
+ /**
138
+ * Names July will actually synthesize for this agent. Discovery reserves
139
+ * only this set, not every FileSystem alias.
140
+ */
141
+ export function synthesizedFileSystemToolNames(options: {
142
+ hasRoot: boolean;
143
+ tools?: readonly string[];
144
+ }): readonly SynthesizedFileSystemToolName[] {
145
+ const filter = options.hasRoot
146
+ ? rootFileToolsFromAuthored(options.tools)
147
+ : hostFileToolsFromAuthored(options.tools);
148
+ const catalog = options.hasRoot
149
+ ? SYNTHESIZED_FILE_SYSTEM_TOOL_NAMES
150
+ : HOST_DEFAULT_SYNTHESIZED_NAMES;
151
+ if (filter === undefined) {
152
+ return catalog;
153
+ }
154
+ return catalog.filter((name) => filter.includes(name));
155
+ }
156
+
157
+ function wantsTool(
158
+ filter: readonly FileSystemToolName[] | undefined,
159
+ name: FileSystemToolName
160
+ ): boolean {
161
+ return filter === undefined || filter.includes(name);
162
+ }
163
+
164
+ /**
165
+ * Copy native aliases onto the canonical SDK field when the canonical
166
+ * field is absent. Zod sees the SDK shape; callers can still send
167
+ * `contents` / `old_string` / `output_mode`.
168
+ */
169
+ function aliasKeys(aliases: Record<string, string>) {
170
+ return (raw: unknown): unknown => {
171
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
172
+ return raw;
173
+ }
174
+ const input = { ...(raw as Record<string, unknown>) };
175
+ for (const [from, to] of Object.entries(aliases)) {
176
+ if (input[to] === undefined && input[from] !== undefined) {
177
+ input[to] = input[from];
178
+ }
179
+ }
180
+ return input;
181
+ };
182
+ }
183
+
184
+ function lineCount(content: string): number {
185
+ return content === "" ? 0 : content.split("\n").length;
186
+ }
187
+
188
+ function parseGrepOutputMode(value: string | undefined): GrepOutputMode {
189
+ if (value === "files" || value === "files_with_matches") {
190
+ return "files_with_matches";
191
+ }
192
+ if (value === "count") {
193
+ return "count";
194
+ }
195
+ return "content";
196
+ }
197
+
198
+ function contextLineCount(
199
+ specific: number | undefined,
200
+ both: number | undefined
201
+ ): number {
202
+ const value = specific ?? both;
203
+ if (value === undefined || !Number.isFinite(value)) {
204
+ return 0;
205
+ }
206
+ return Math.max(0, Math.floor(value));
207
+ }
208
+
209
+ function compileToolGrepPattern(
210
+ pattern: string,
211
+ options: { caseInsensitive?: boolean; multiline?: boolean }
212
+ ): RegExp {
213
+ try {
214
+ const flags = `${options.caseInsensitive === true ? "i" : ""}${
215
+ options.multiline === true ? "s" : ""
216
+ }`;
217
+ return new RegExp(pattern, flags === "" ? undefined : flags);
218
+ } catch {
219
+ throw new InvalidGrepPatternError(pattern);
220
+ }
221
+ }
222
+
223
+ /**
224
+ * File discovery for multiline Grep. A file `path` is that file (the
225
+ * caller spelling, so host-default relative paths stay relative). A
226
+ * directory or omitted path uses `FileSystem.glob`, which applies the
227
+ * mount's own root. Slash-free globs are recursive, matching line grep.
228
+ */
229
+ async function collectMultilineGrepFiles(
230
+ root: FileSystem,
231
+ input: { path?: string; glob?: string }
232
+ ): Promise<string[]> {
233
+ const listed = await collectListOrStat(root, input.path);
234
+ if (listed.kind === "file") {
235
+ const filePath = input.path ?? "";
236
+ if (
237
+ input.glob !== undefined &&
238
+ !fileMatchesGrepGlob(filePath, input.glob)
239
+ ) {
240
+ return [];
241
+ }
242
+ return [filePath];
243
+ }
244
+ if (listed.kind === "missing") {
245
+ return [];
246
+ }
247
+ const entries = await collectGlob(root, {
248
+ pattern: recursiveGrepGlob(input.glob),
249
+ ...(input.path === undefined ? {} : { dir: input.path }),
250
+ });
251
+ return entries.map((entry) => entry.path);
252
+ }
253
+
254
+ function recursiveGrepGlob(glob: string | undefined): string {
255
+ if (glob === undefined || glob.length === 0) {
256
+ return "**/*";
257
+ }
258
+ if (glob.startsWith("**/") || glob.includes("/")) {
259
+ return glob;
260
+ }
261
+ return `**/${glob}`;
262
+ }
263
+
264
+ function fileMatchesGrepGlob(filePath: string, globPattern: string): boolean {
265
+ const relative = filePath.replace(/^\//, "");
266
+ if (
267
+ minimatch(relative, globPattern, { dot: true }) ||
268
+ minimatch(filePath, globPattern, { dot: true })
269
+ ) {
270
+ return true;
271
+ }
272
+ if (!globPattern.includes("/")) {
273
+ const slash = Math.max(
274
+ relative.lastIndexOf("/"),
275
+ relative.lastIndexOf("\\")
276
+ );
277
+ const base = slash === -1 ? relative : relative.slice(slash + 1);
278
+ return minimatch(base, globPattern, { dot: true });
279
+ }
280
+ return false;
281
+ }
282
+
283
+ function multilineHitsInContent(
284
+ path: string,
285
+ content: string,
286
+ regex: RegExp
287
+ ): GrepResult[] {
288
+ const global = new RegExp(
289
+ regex.source,
290
+ regex.flags.includes("g") ? regex.flags : `${regex.flags}g`
291
+ );
292
+ const hits: GrepResult[] = [];
293
+ let match = global.exec(content);
294
+ while (match !== null) {
295
+ hits.push({
296
+ path,
297
+ lineNumber: content.slice(0, match.index).split("\n").length,
298
+ line: content.slice(match.index).split("\n")[0] ?? "",
299
+ });
300
+ if (match[0].length === 0) {
301
+ global.lastIndex += 1;
302
+ }
303
+ match = global.exec(content);
304
+ }
305
+ return hits;
306
+ }
307
+
308
+ async function collectMultilineGrepMatches(
309
+ root: FileSystem,
310
+ input: {
311
+ pattern: string;
312
+ path?: string;
313
+ glob?: string;
314
+ caseInsensitive?: boolean;
315
+ },
316
+ opts: { outputMode: GrepOutputMode; headLimit?: number; offset?: number }
317
+ ): Promise<GrepResult[]> {
318
+ const regex = compileToolGrepPattern(input.pattern, {
319
+ caseInsensitive: input.caseInsensitive,
320
+ multiline: true,
321
+ });
322
+ const files = await collectMultilineGrepFiles(root, input);
323
+ const matches: GrepResult[] = [];
324
+ const offset = opts.offset !== undefined && opts.offset > 0 ? opts.offset : 0;
325
+ const headLimit =
326
+ opts.headLimit !== undefined && opts.headLimit > 0
327
+ ? opts.headLimit
328
+ : undefined;
329
+ let skippedItems = 0;
330
+ let takenItems = 0;
331
+ for (const filePath of files) {
332
+ let content: string | Uint8Array;
333
+ try {
334
+ content = await root.read(filePath);
335
+ } catch {
336
+ continue;
337
+ }
338
+ if (typeof content !== "string") {
339
+ continue;
340
+ }
341
+ const hits = multilineHitsInContent(filePath, content, regex);
342
+ if (hits.length === 0) {
343
+ continue;
344
+ }
345
+ if (opts.outputMode === "content") {
346
+ for (const hit of hits) {
347
+ if (skippedItems < offset) {
348
+ skippedItems++;
349
+ continue;
350
+ }
351
+ matches.push(hit);
352
+ takenItems++;
353
+ if (headLimit !== undefined && takenItems >= headLimit) {
354
+ return matches;
355
+ }
356
+ }
357
+ continue;
358
+ }
359
+ if (skippedItems < offset) {
360
+ skippedItems++;
361
+ continue;
362
+ }
363
+ if (headLimit !== undefined && takenItems >= headLimit) {
364
+ break;
365
+ }
366
+ matches.push(...hits);
367
+ takenItems++;
368
+ }
369
+ return matches;
370
+ }
371
+
372
+ async function attachGrepContext(
373
+ root: FileSystem,
374
+ matches: GrepResult[],
375
+ context: { before: number; after: number }
376
+ ): Promise<GrepContentHit[]> {
377
+ if (context.before === 0 && context.after === 0) {
378
+ return matches;
379
+ }
380
+ const linesByPath = new Map<string, string[]>();
381
+ const hits: GrepContentHit[] = [];
382
+ for (const match of matches) {
383
+ let lines = linesByPath.get(match.path);
384
+ if (lines === undefined) {
385
+ try {
386
+ const content = await root.read(match.path);
387
+ lines = typeof content === "string" ? content.split("\n") : [];
388
+ } catch {
389
+ lines = [];
390
+ }
391
+ linesByPath.set(match.path, lines);
392
+ }
393
+ const index = match.lineNumber - 1;
394
+ hits.push({
395
+ ...match,
396
+ ...(context.before > 0
397
+ ? {
398
+ beforeContext: lines.slice(
399
+ Math.max(0, index - context.before),
400
+ Math.max(0, index)
401
+ ),
402
+ }
403
+ : {}),
404
+ ...(context.after > 0
405
+ ? { afterContext: lines.slice(index + 1, index + 1 + context.after) }
406
+ : {}),
407
+ });
408
+ }
409
+ return hits;
410
+ }
411
+
412
+ function discovered(
413
+ name: FileSystemToolName,
414
+ definition: ToolDefinition,
415
+ contract: { input: z.ZodTypeAny; output: z.ZodTypeAny }
416
+ ): DiscoveredTool {
417
+ const effect =
418
+ typeof definition.effect === "function" ? "dynamic" : definition.effect;
419
+ return {
420
+ name,
421
+ description: definition.description,
422
+ inputSchema: toolInputJsonSchema(contract.input),
423
+ outputSchema: toolOutputJsonSchema(contract.output),
424
+ execution: "server",
425
+ needsApproval: false,
426
+ ...(effect === undefined ? {} : { effect }),
427
+ definition,
428
+ };
429
+ }
430
+
431
+ const readInputSchema = z.preprocess(
432
+ aliasKeys({}),
433
+ z.object({
434
+ path: z.string(),
435
+ offset: z.number().int().optional(),
436
+ limit: z.number().int().optional(),
437
+ })
438
+ );
439
+
440
+ function readTool(root: FileSystem): DiscoveredTool {
441
+ return discovered(
442
+ "Read",
443
+ defineTool({
444
+ description:
445
+ "Reads a file from the local filesystem. This tool can also read image files when called with the appropriate path. Formats supported: jpeg/jpg, png, gif, webp.",
446
+ inputSchema: readInputSchema,
447
+ effect: "read",
448
+ async execute({ path, offset, limit }) {
449
+ const content = await root.read(path);
450
+ const image = fileSystemImage(content, path);
451
+ if (image !== undefined) {
452
+ return {
453
+ content: [
454
+ { type: "text" as const, text: `Read image file: ${path}` },
455
+ {
456
+ type: "image" as const,
457
+ data: Buffer.from(image.bytes).toString("base64"),
458
+ mimeType: image.mimeType,
459
+ },
460
+ ],
461
+ };
462
+ }
463
+ const text = fileSystemText(content);
464
+ const totalLines = lineCount(text);
465
+ return formatNumberedLines(sliceReadContent(text, offset, limit), {
466
+ startLine: slicedReadStartLine(totalLines, offset),
467
+ totalLines,
468
+ });
469
+ },
470
+ }),
471
+ { input: sdkReadArgs, output: sdkReadResult }
472
+ );
473
+ }
474
+
475
+ const lsInputSchema = z.preprocess(
476
+ aliasKeys({ target_directory: "path", ignore_globs: "ignore" }),
477
+ z.object({
478
+ path: z.string(),
479
+ ignore: z.array(z.string()).optional(),
480
+ })
481
+ );
482
+
483
+ function lsTool(root: FileSystem): DiscoveredTool {
484
+ return discovered(
485
+ "LS",
486
+ defineTool({
487
+ description: `Lists files and directories in a given path.
488
+ The 'path' parameter must be an absolute path.
489
+ You can optionally provide an array of glob patterns to ignore with the "ignore" parameter.
490
+
491
+ Other details:
492
+ - The result does not display dot-files and dot-directories.`,
493
+ inputSchema: lsInputSchema,
494
+ effect: "read",
495
+ async execute({ path, ignore }) {
496
+ const listed = await lsFromList(root, path, ignore);
497
+ if (listed.status === "error") {
498
+ throw new Error(`Error listing directory: ${listed.error.message}`);
499
+ }
500
+ return formatLsTree(listed.value.directoryTreeRoot);
501
+ },
502
+ }),
503
+ { input: sdkLsArgs, output: sdkLsResult }
504
+ );
505
+ }
506
+
507
+ const globInputSchema = z.preprocess(
508
+ aliasKeys({
509
+ glob_pattern: "globPattern",
510
+ target_directory: "targetDirectory",
511
+ path: "targetDirectory",
512
+ }),
513
+ z.object({
514
+ targetDirectory: z.string().optional(),
515
+ globPattern: z.string(),
516
+ })
517
+ );
518
+
519
+ function globTool(root: FileSystem): DiscoveredTool {
520
+ return discovered(
521
+ "Glob",
522
+ defineTool({
523
+ description: `
524
+ Tool to search for files matching a glob pattern
525
+
526
+ - Works fast with codebases of any size
527
+ - Returns matching file paths sorted by modification time
528
+ - Use this tool when you need to find files by name patterns
529
+ - You have the capability to call multiple tools in a single response. It is always better to speculatively perform multiple searches that are potentially useful as a batch.
530
+ `,
531
+ inputSchema: globInputSchema,
532
+ effect: "read",
533
+ async execute({ globPattern, targetDirectory }) {
534
+ const dir = targetDirectory ?? "/";
535
+ const files = (
536
+ await collectGlob(root, {
537
+ pattern: globPattern,
538
+ ...(targetDirectory === undefined ? {} : { dir: targetDirectory }),
539
+ })
540
+ ).map((entry) => entry.path);
541
+ return formatGlobOutput(dir, files);
542
+ },
543
+ }),
544
+ { input: sdkGlobArgs, output: sdkGlobResult }
545
+ );
546
+ }
547
+
548
+ const grepInputSchema = z.preprocess(
549
+ (raw) => {
550
+ const aliased = aliasKeys({
551
+ output_mode: "outputMode",
552
+ head_limit: "headLimit",
553
+ "-i": "caseInsensitive",
554
+ "-A": "contextAfter",
555
+ "-B": "contextBefore",
556
+ "-C": "context",
557
+ })(raw);
558
+ if (
559
+ aliased !== null &&
560
+ typeof aliased === "object" &&
561
+ !Array.isArray(aliased)
562
+ ) {
563
+ const input = aliased as { outputMode?: unknown };
564
+ if (input.outputMode === "files") {
565
+ input.outputMode = "files_with_matches";
566
+ }
567
+ }
568
+ return aliased;
569
+ },
570
+ z.object({
571
+ pattern: z.string(),
572
+ path: z.string().optional(),
573
+ glob: z.string().optional(),
574
+ outputMode: z.string().optional(),
575
+ contextBefore: z.number().optional(),
576
+ contextAfter: z.number().optional(),
577
+ context: z.number().optional(),
578
+ caseInsensitive: z.boolean().optional(),
579
+ type: z.string().optional(),
580
+ headLimit: z.number().optional(),
581
+ offset: z.number().optional(),
582
+ multiline: z.boolean().optional(),
583
+ sort: z.string().optional(),
584
+ sortAscending: z.boolean().optional(),
585
+ })
586
+ );
587
+
588
+ function grepTool(root: FileSystem): DiscoveredTool {
589
+ return discovered(
590
+ "Grep",
591
+ defineTool({
592
+ description: `A search tool built on ripgrep. Results are capped to several thousand output lines for responsiveness; when truncation occurs, the results report "at least" counts, but are otherwise accurate.`,
593
+ inputSchema: grepInputSchema,
594
+ effect: "read",
595
+ async execute(input) {
596
+ const outputMode = parseGrepOutputMode(input.outputMode);
597
+ const query = {
598
+ pattern: input.pattern,
599
+ ...(input.path === undefined ? {} : { path: input.path }),
600
+ ...(input.glob === undefined ? {} : { glob: input.glob }),
601
+ caseInsensitive: input.caseInsensitive === true,
602
+ };
603
+ const page = {
604
+ outputMode,
605
+ ...(input.headLimit === undefined
606
+ ? {}
607
+ : { headLimit: input.headLimit }),
608
+ ...(input.offset === undefined ? {} : { offset: input.offset }),
609
+ };
610
+ const matches =
611
+ input.multiline === true
612
+ ? await collectMultilineGrepMatches(root, query, page)
613
+ : await collectGrepMatches(root, query, page);
614
+ const before = contextLineCount(input.contextBefore, input.context);
615
+ const after = contextLineCount(input.contextAfter, input.context);
616
+ const hits =
617
+ outputMode === "content"
618
+ ? await attachGrepContext(root, matches, { before, after })
619
+ : matches;
620
+ return formatGrepOutput(shapeGrepUnion(hits, outputMode));
621
+ },
622
+ }),
623
+ { input: sdkGrepArgs, output: sdkGrepResult }
624
+ );
625
+ }
626
+
627
+ const writeInputSchema = z.preprocess(
628
+ aliasKeys({ contents: "fileText" }),
629
+ z.object({
630
+ path: z.string(),
631
+ fileText: z.string(),
632
+ returnFileContentAfterWrite: z.boolean().optional(),
633
+ })
634
+ );
635
+
636
+ function writeTool(root: FileSystem): DiscoveredTool {
637
+ return discovered(
638
+ "Write",
639
+ defineTool({
640
+ description: "Writes a file to the local filesystem.",
641
+ inputSchema: writeInputSchema,
642
+ effect: "write",
643
+ async execute({ path, fileText }) {
644
+ await root.write(path, fileText);
645
+ return formatWriteOutput(path);
646
+ },
647
+ }),
648
+ { input: sdkWriteArgs, output: sdkWriteResult }
649
+ );
650
+ }
651
+
652
+ const strReplaceInputSchema = z.preprocess(
653
+ aliasKeys({
654
+ old_string: "oldText",
655
+ new_string: "newText",
656
+ replace_all: "replaceAll",
657
+ }),
658
+ z.object({
659
+ path: z.string(),
660
+ oldText: z.string(),
661
+ newText: z.string(),
662
+ replaceAll: z.boolean().optional(),
663
+ })
664
+ );
665
+
666
+ function strReplaceTool(root: FileSystem): DiscoveredTool {
667
+ return discovered(
668
+ "StrReplace",
669
+ defineTool({
670
+ description: "Performs exact string replacements in files.",
671
+ inputSchema: strReplaceInputSchema,
672
+ effect: "write",
673
+ async execute({ path, oldText, newText, replaceAll }) {
674
+ const { occurrencesModified } = await strReplaceOnFileSystem(root, {
675
+ path,
676
+ oldText,
677
+ newText,
678
+ ...(replaceAll === undefined ? {} : { replaceAll }),
679
+ });
680
+ return formatStrReplaceOutput({
681
+ path,
682
+ replaceAll: replaceAll === true,
683
+ occurrencesModified,
684
+ });
685
+ },
686
+ }),
687
+ { input: sdkStrReplaceArgs, output: sdkEditResult }
688
+ );
689
+ }
690
+
691
+ const deleteInputSchema = z.object({
692
+ path: z.string(),
693
+ });
694
+
695
+ function deleteTool(root: FileSystem): DiscoveredTool {
696
+ return discovered(
697
+ "Delete",
698
+ defineTool({
699
+ description: `Deletes a file at the specified path. The operation will fail gracefully if:
700
+ - The file doesn't exist
701
+ - The operation is rejected for security reasons
702
+ - The file cannot be deleted`,
703
+ inputSchema: deleteInputSchema,
704
+ effect: "write",
705
+ async execute({ path }) {
706
+ await root.delete(path);
707
+ return "";
708
+ },
709
+ }),
710
+ { input: sdkDeleteArgs, output: sdkDeleteResult }
711
+ );
712
+ }
713
+
714
+ const semanticSearchInputSchema = z.preprocess(
715
+ aliasKeys({ num_results: "numResults" }),
716
+ z.object({
717
+ query: z.string(),
718
+ targetDirectories: z.array(z.string()).optional(),
719
+ explanation: z.string().optional(),
720
+ numResults: z.number().optional(),
721
+ })
722
+ );
723
+
724
+ function semanticSearchTool(root: FileSystem): DiscoveredTool {
725
+ return discovered(
726
+ "SemanticSearch",
727
+ defineTool({
728
+ description:
729
+ "`SemanticSearch`: semantic search that finds code by meaning, not exact text",
730
+ inputSchema: semanticSearchInputSchema,
731
+ effect: "read",
732
+ async execute({ query, targetDirectories, numResults }) {
733
+ const cap =
734
+ numResults !== undefined && numResults > 0 ? numResults : undefined;
735
+ const hits: SearchResult[] = [];
736
+ for await (const hit of root.search({
737
+ query,
738
+ ...(targetDirectories === undefined ? {} : { targetDirectories }),
739
+ ...(cap === undefined ? {} : { maxResults: cap }),
740
+ })) {
741
+ hits.push(hit);
742
+ if (cap !== undefined && hits.length >= cap) {
743
+ break;
744
+ }
745
+ }
746
+ return hits.map((hit) => `${hit.path}: ${hit.snippet}`).join("\n");
747
+ },
748
+ }),
749
+ { input: sdkSemSearchArgs, output: sdkSemSearchResult }
750
+ );
751
+ }
752
+
753
+ const FILE_SYSTEM_TOOL_FACTORIES: Record<
754
+ FileSystemToolName,
755
+ (root: FileSystem) => DiscoveredTool
756
+ > = {
757
+ Read: readTool,
758
+ LS: lsTool,
759
+ Glob: globTool,
760
+ Grep: grepTool,
761
+ Write: writeTool,
762
+ StrReplace: strReplaceTool,
763
+ Delete: deleteTool,
764
+ SemanticSearch: semanticSearchTool,
765
+ };
766
+
767
+ /**
768
+ * Look up the `defineTool` factory for a native or allowlist name.
769
+ * The only name that still inspects `input` is legacy `edit`:
770
+ * `fileText` / `contents` selects Write, otherwise StrReplace.
771
+ */
772
+ export function fileSystemTool(
773
+ root: FileSystem,
774
+ name: string,
775
+ input: Record<string, unknown> = {}
776
+ ): DiscoveredTool | undefined {
777
+ if (name === "edit") {
778
+ return "fileText" in input || "contents" in input
779
+ ? writeTool(root)
780
+ : strReplaceTool(root);
781
+ }
782
+ const canonical = canonicalizeFileSystemToolName(name);
783
+ if (canonical === undefined) {
784
+ return undefined;
785
+ }
786
+ return FILE_SYSTEM_TOOL_FACTORIES[canonical](root);
787
+ }
788
+
789
+ /** Validate and run the same tool a turn or `callTool` would. */
790
+ export async function runFileSystemTool(
791
+ root: FileSystem,
792
+ name: string,
793
+ input: Record<string, unknown> = {}
794
+ ): Promise<unknown> {
795
+ const tool = fileSystemTool(root, name, input);
796
+ if (tool === undefined) {
797
+ throw new Error(`Unknown file system tool: ${name}`);
798
+ }
799
+ const execute = tool.definition.execute;
800
+ if (typeof execute !== "function") {
801
+ throw new Error(`File system tool ${name} has no execute`);
802
+ }
803
+ const validation = validateToolInput(tool.definition.inputSchema, input);
804
+ if (!validation.ok) {
805
+ throw new Error(validation.message);
806
+ }
807
+ return execute(validation.value as never, {} as never);
808
+ }
809
+
810
+ export function synthesizeFileSystemTools(
811
+ root: FileSystem,
812
+ filter?: readonly FileSystemToolName[]
813
+ ): DiscoveredTool[] {
814
+ const tools: DiscoveredTool[] = [];
815
+ for (const name of SYNTHESIZED_FILE_SYSTEM_TOOL_NAMES) {
816
+ if (wantsTool(filter, name)) {
817
+ tools.push(FILE_SYSTEM_TOOL_FACTORIES[name](root));
818
+ }
819
+ }
820
+ return tools;
821
+ }