@cursor/july 0.1.96 → 0.1.99

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 (381) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +3 -2
  3. package/dist/bin/agent-serve.js +13 -3
  4. package/dist/channels/github/github-channel.d.ts.map +1 -1
  5. package/dist/channels/github/github-channel.js +16 -0
  6. package/dist/channels/origin/api.d.ts +15 -4
  7. package/dist/channels/origin/api.d.ts.map +1 -1
  8. package/dist/channels/origin/api.js +19 -3
  9. package/dist/channels/origin/binding.d.ts +11 -0
  10. package/dist/channels/origin/binding.d.ts.map +1 -1
  11. package/dist/channels/origin/binding.js +41 -25
  12. package/dist/channels/origin/index.d.ts +1 -0
  13. package/dist/channels/origin/index.d.ts.map +1 -1
  14. package/dist/channels/origin/index.js +1 -0
  15. package/dist/channels/origin/origin-channel.d.ts +2 -0
  16. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  17. package/dist/channels/origin/origin-channel.js +40 -4
  18. package/dist/channels/origin/reactions.d.ts +56 -0
  19. package/dist/channels/origin/reactions.d.ts.map +1 -0
  20. package/dist/channels/origin/reactions.js +67 -0
  21. package/dist/channels/origin/types.d.ts +11 -0
  22. package/dist/channels/origin/types.d.ts.map +1 -1
  23. package/dist/channels/slack/approvals.d.ts +16 -0
  24. package/dist/channels/slack/approvals.d.ts.map +1 -1
  25. package/dist/channels/slack/approvals.js +86 -0
  26. package/dist/channels/slack/cli-project.d.ts +19 -0
  27. package/dist/channels/slack/cli-project.d.ts.map +1 -0
  28. package/dist/channels/slack/cli-project.js +234 -0
  29. package/dist/channels/slack/defaults.d.ts.map +1 -1
  30. package/dist/channels/slack/defaults.js +142 -63
  31. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  32. package/dist/channels/slack/dispatch.js +1 -1
  33. package/dist/channels/slack/init.d.ts +3 -2
  34. package/dist/channels/slack/init.d.ts.map +1 -1
  35. package/dist/channels/slack/init.js +5 -5
  36. package/dist/channels/slack/interactive.d.ts +2 -1
  37. package/dist/channels/slack/interactive.d.ts.map +1 -1
  38. package/dist/channels/slack/interactive.js +15 -4
  39. package/dist/channels/slack/live-delivery.d.ts +1 -1
  40. package/dist/channels/slack/live-delivery.d.ts.map +1 -1
  41. package/dist/channels/slack/live-delivery.js +4 -2
  42. package/dist/channels/slack/manifest.d.ts +1 -1
  43. package/dist/channels/slack/manifest.js +1 -1
  44. package/dist/channels/slack/progress-delivery.d.ts +28 -0
  45. package/dist/channels/slack/progress-delivery.d.ts.map +1 -0
  46. package/dist/channels/slack/progress-delivery.js +115 -0
  47. package/dist/channels/slack/setup.d.ts +1 -1
  48. package/dist/channels/slack/setup.d.ts.map +1 -1
  49. package/dist/channels/slack/setup.js +10 -6
  50. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  51. package/dist/channels/slack/slack-channel.js +1 -0
  52. package/dist/channels/slack/tool-approval-events.d.ts.map +1 -1
  53. package/dist/channels/slack/tool-approval-events.js +91 -1
  54. package/dist/channels/slack/types.d.ts +9 -1
  55. package/dist/channels/slack/types.d.ts.map +1 -1
  56. package/dist/docs/404.html +2 -2
  57. package/dist/docs/ab.html +4 -4
  58. package/dist/docs/assets/{app.jXleCmOc.js → app.BplEAZ3S.js} +1 -1
  59. package/dist/docs/assets/chunks/@localSearchIndexroot.DpuI4i7Z.js +1 -0
  60. package/dist/docs/assets/chunks/{VPLocalSearchBox.8LhyglIT.js → VPLocalSearchBox.CHXyv4wP.js} +1 -1
  61. package/dist/docs/assets/chunks/{theme.9ged-pr2.js → theme.BTcsZmjQ.js} +2 -2
  62. package/dist/docs/assets/{deployment.md.D9msOFOW.js → deployment.md.MFPKqsqI.js} +2 -2
  63. package/dist/docs/assets/{guides_mcp-oauth.md.DPYmBCbV.js → guides_mcp-oauth.md.CN-6YmTJ.js} +4 -4
  64. package/dist/docs/assets/{guides_mcp-oauth.md.DPYmBCbV.lean.js → guides_mcp-oauth.md.CN-6YmTJ.lean.js} +1 -1
  65. package/dist/docs/assets/guides_slack.md.VDXQV3ja.js +22 -0
  66. package/dist/docs/assets/guides_slack.md.VDXQV3ja.lean.js +1 -0
  67. package/dist/docs/assets/index.md.CVeRUOeZ.js +5 -0
  68. package/dist/docs/assets/{reference_agent-config.md.Cp_x38Nl.js → reference_agent-config.md.BHeYMgme.js} +1 -1
  69. package/dist/docs/assets/{reference_cli.md.CCnG-nJx.js → reference_cli.md.DfoeyvL0.js} +9 -6
  70. package/dist/docs/assets/{reference_cli.md.CCnG-nJx.lean.js → reference_cli.md.DfoeyvL0.lean.js} +1 -1
  71. package/dist/docs/assets/{reference_connections.md.BH8Oc0D0.js → reference_connections.md.DxldvyIB.js} +4 -3
  72. package/dist/docs/assets/{reference_http-api.md.D89k1mdm.js → reference_http-api.md.BEJx9XVj.js} +2 -2
  73. package/dist/docs/assets/reference_sessions.md.NxFP_CAC.js +1 -0
  74. package/dist/docs/assets/{reference_tools.md.BHeXn2id.js → reference_tools.md.CvAHsdSp.js} +10 -2
  75. package/dist/docs/assets/{reference_tools.md.BHeXn2id.lean.js → reference_tools.md.CvAHsdSp.lean.js} +1 -1
  76. package/dist/docs/assets/templates_agents-md.md.CXSMZljE.js +2 -0
  77. package/dist/docs/assets/templates_agents-md.md.CXSMZljE.lean.js +1 -0
  78. package/dist/docs/assets/troubleshooting.md.DCiPBhYs.js +1 -0
  79. package/dist/docs/building-with-agents.html +4 -4
  80. package/dist/docs/concepts.html +4 -4
  81. package/dist/docs/deployment.html +7 -7
  82. package/dist/docs/deployment.md +5 -4
  83. package/dist/docs/design/runtime-abstraction.md +1757 -0
  84. package/dist/docs/evals.html +4 -4
  85. package/dist/docs/guides/agent-to-agent.html +4 -4
  86. package/dist/docs/guides/cloud-runtime.html +4 -4
  87. package/dist/docs/guides/convert-automation.html +4 -4
  88. package/dist/docs/guides/github.html +4 -4
  89. package/dist/docs/guides/human-in-the-loop.html +4 -4
  90. package/dist/docs/guides/mcp-oauth.html +8 -8
  91. package/dist/docs/guides/mcp-oauth.md +26 -8
  92. package/dist/docs/guides/opentelemetry.html +4 -4
  93. package/dist/docs/guides/slack.html +17 -33
  94. package/dist/docs/guides/slack.md +92 -201
  95. package/dist/docs/guides/webhooks.html +4 -4
  96. package/dist/docs/hashmap.json +1 -1
  97. package/dist/docs/hillclimbing.html +4 -4
  98. package/dist/docs/index.html +6 -6
  99. package/dist/docs/index.md +5 -3
  100. package/dist/docs/llms-full.txt +2065 -637
  101. package/dist/docs/llms.txt +3 -2
  102. package/dist/docs/quickstart.html +4 -4
  103. package/dist/docs/reference/agent-config.html +6 -6
  104. package/dist/docs/reference/agent-config.md +2 -2
  105. package/dist/docs/reference/artifacts.html +4 -4
  106. package/dist/docs/reference/channels.html +4 -4
  107. package/dist/docs/reference/cli.html +13 -10
  108. package/dist/docs/reference/cli.md +32 -16
  109. package/dist/docs/reference/connections.html +9 -8
  110. package/dist/docs/reference/connections.md +6 -3
  111. package/dist/docs/reference/hooks.html +4 -4
  112. package/dist/docs/reference/http-api.html +7 -7
  113. package/dist/docs/reference/http-api.md +3 -1
  114. package/dist/docs/reference/instructions.html +4 -4
  115. package/dist/docs/reference/playground.html +4 -4
  116. package/dist/docs/reference/project-layout.html +4 -4
  117. package/dist/docs/reference/prompt.html +4 -4
  118. package/dist/docs/reference/schedules.html +4 -4
  119. package/dist/docs/reference/sessions.html +5 -5
  120. package/dist/docs/reference/sessions.md +4 -2
  121. package/dist/docs/reference/skills.html +4 -4
  122. package/dist/docs/reference/subagents.html +4 -4
  123. package/dist/docs/reference/tools.html +15 -7
  124. package/dist/docs/reference/tools.md +34 -2
  125. package/dist/docs/scaffolding-agents.html +4 -4
  126. package/dist/docs/storage.html +4 -4
  127. package/dist/docs/templates/agentic-owners.html +4 -4
  128. package/dist/docs/templates/agents-md.html +28 -0
  129. package/dist/docs/templates/agents-md.md +105 -0
  130. package/dist/docs/templates/code-wiki.html +5 -5
  131. package/dist/docs/templates/demo.html +4 -4
  132. package/dist/docs/templates/pr-autofixer.html +4 -4
  133. package/dist/docs/templates/security-help.html +4 -4
  134. package/dist/docs/templates/security-reviewer.html +5 -5
  135. package/dist/docs/templates/triage.html +4 -4
  136. package/dist/docs/troubleshooting.html +5 -5
  137. package/dist/docs/troubleshooting.md +2 -2
  138. package/dist/evals/run-facts.d.ts.map +1 -1
  139. package/dist/evals/run-facts.js +27 -0
  140. package/dist/files-backends/cursor-hosted.d.ts +3 -2
  141. package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
  142. package/dist/files-backends/cursor-hosted.js +3 -2
  143. package/dist/index.d.ts +1 -0
  144. package/dist/index.d.ts.map +1 -1
  145. package/dist/index.js +1 -0
  146. package/dist/internal/advertise-tools.d.ts.map +1 -1
  147. package/dist/internal/advertise-tools.js +15 -9
  148. package/dist/internal/approval-gate.d.ts +12 -13
  149. package/dist/internal/approval-gate.d.ts.map +1 -1
  150. package/dist/internal/approval-gate.js +16 -21
  151. package/dist/internal/as-of.d.ts +19 -0
  152. package/dist/internal/as-of.d.ts.map +1 -0
  153. package/dist/internal/as-of.js +82 -0
  154. package/dist/internal/chat-client.js +10 -0
  155. package/dist/internal/cli-deploy.d.ts +6 -0
  156. package/dist/internal/cli-deploy.d.ts.map +1 -1
  157. package/dist/internal/cli-deploy.js +149 -21
  158. package/dist/internal/cli-mcp-oauth.js +8 -18
  159. package/dist/internal/cli-slack-manual.d.ts +24 -2
  160. package/dist/internal/cli-slack-manual.d.ts.map +1 -1
  161. package/dist/internal/cli-slack-manual.js +251 -20
  162. package/dist/internal/cli-slack.d.ts +9 -2
  163. package/dist/internal/cli-slack.d.ts.map +1 -1
  164. package/dist/internal/cli-slack.js +29 -82
  165. package/dist/internal/cursor/account-mcp.d.ts +1 -0
  166. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  167. package/dist/internal/cursor/account-mcp.js +17 -0
  168. package/dist/internal/cursor-agent-template.d.ts +1 -1
  169. package/dist/internal/cursor-agent-template.d.ts.map +1 -1
  170. package/dist/internal/cursor-agent-template.js +1 -0
  171. package/dist/internal/cursor-event-relay.d.ts.map +1 -1
  172. package/dist/internal/cursor-event-relay.js +5 -6
  173. package/dist/internal/deploy-client.d.ts +17 -0
  174. package/dist/internal/deploy-client.d.ts.map +1 -1
  175. package/dist/internal/deploy-client.js +31 -10
  176. package/dist/internal/env-file.d.ts +19 -0
  177. package/dist/internal/env-file.d.ts.map +1 -0
  178. package/dist/internal/env-file.js +90 -0
  179. package/dist/internal/framework-file-storage.d.ts +11 -17
  180. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  181. package/dist/internal/framework-file-storage.js +17 -40
  182. package/dist/internal/framework-storage-selection.d.ts +13 -11
  183. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  184. package/dist/internal/framework-storage-selection.js +37 -26
  185. package/dist/internal/hosted-admission-adapter.d.ts +28 -0
  186. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -0
  187. package/dist/internal/hosted-admission-adapter.js +7 -0
  188. package/dist/internal/hosted-delivery-protocol.d.ts +13 -1
  189. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  190. package/dist/internal/hosted-delivery-protocol.js +8 -1
  191. package/dist/internal/hosted-delivery.d.ts +21 -1
  192. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  193. package/dist/internal/hosted-delivery.js +101 -34
  194. package/dist/internal/hosted-execution-diag.d.ts +59 -0
  195. package/dist/internal/hosted-execution-diag.d.ts.map +1 -0
  196. package/dist/internal/hosted-execution-diag.js +187 -0
  197. package/dist/internal/http-channel.d.ts.map +1 -1
  198. package/dist/internal/http-channel.js +85 -2
  199. package/dist/internal/init-project.d.ts.map +1 -1
  200. package/dist/internal/init-project.js +2 -0
  201. package/dist/internal/logs-client.d.ts +5 -0
  202. package/dist/internal/logs-client.d.ts.map +1 -1
  203. package/dist/internal/logs-client.js +5 -0
  204. package/dist/internal/mcp-endpoint.js +2 -3
  205. package/dist/internal/mcp-host.d.ts +10 -0
  206. package/dist/internal/mcp-host.d.ts.map +1 -1
  207. package/dist/internal/mcp-host.js +57 -8
  208. package/dist/internal/mcp-oauth-on-demand.d.ts +68 -0
  209. package/dist/internal/mcp-oauth-on-demand.d.ts.map +1 -0
  210. package/dist/internal/mcp-oauth-on-demand.js +287 -0
  211. package/dist/internal/mcp-oauth-persist.d.ts +42 -0
  212. package/dist/internal/mcp-oauth-persist.d.ts.map +1 -0
  213. package/dist/internal/mcp-oauth-persist.js +92 -0
  214. package/dist/internal/mcp-oauth.d.ts +1 -0
  215. package/dist/internal/mcp-oauth.d.ts.map +1 -1
  216. package/dist/internal/mcp-oauth.js +10 -2
  217. package/dist/internal/null-kv-storage.d.ts +48 -0
  218. package/dist/internal/null-kv-storage.d.ts.map +1 -0
  219. package/dist/internal/null-kv-storage.js +58 -0
  220. package/dist/internal/otel/collector.d.ts.map +1 -1
  221. package/dist/internal/otel/collector.js +22 -9
  222. package/dist/internal/server.d.ts +6 -0
  223. package/dist/internal/server.d.ts.map +1 -1
  224. package/dist/internal/server.js +123 -33
  225. package/dist/internal/session-engine.d.ts +88 -3
  226. package/dist/internal/session-engine.d.ts.map +1 -1
  227. package/dist/internal/session-engine.js +538 -46
  228. package/dist/internal/session-run-log.d.ts +120 -0
  229. package/dist/internal/session-run-log.d.ts.map +1 -0
  230. package/dist/internal/session-run-log.js +359 -0
  231. package/dist/internal/sessions-client.d.ts +9 -7
  232. package/dist/internal/sessions-client.d.ts.map +1 -1
  233. package/dist/internal/sessions-client.js +3 -1
  234. package/dist/internal/storage-coordinator.d.ts +13 -0
  235. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  236. package/dist/internal/storage-coordinator.js +37 -6
  237. package/dist/internal/storage-roles.d.ts +5 -0
  238. package/dist/internal/storage-roles.d.ts.map +1 -1
  239. package/dist/internal/stream-progress.d.ts.map +1 -1
  240. package/dist/internal/stream-progress.js +10 -0
  241. package/dist/internal/tool-policy.d.ts +29 -9
  242. package/dist/internal/tool-policy.d.ts.map +1 -1
  243. package/dist/internal/tool-policy.js +24 -0
  244. package/dist/internal/trajectory.d.ts.map +1 -1
  245. package/dist/internal/trajectory.js +10 -0
  246. package/dist/internal/turn-outbox.d.ts +24 -0
  247. package/dist/internal/turn-outbox.d.ts.map +1 -0
  248. package/dist/internal/turn-outbox.js +80 -0
  249. package/dist/playground/assets/index-D7rGZNjy.css +1 -0
  250. package/dist/playground/assets/index-jzNbJENa.js +69 -0
  251. package/dist/playground/index.html +2 -2
  252. package/dist/storage-backends/cursor-hosted.d.ts +1 -1
  253. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  254. package/dist/storage-backends/cursor-hosted.js +12 -0
  255. package/dist/storage-protocol.d.ts +8 -0
  256. package/dist/storage-protocol.d.ts.map +1 -1
  257. package/dist/storage-protocol.js +8 -0
  258. package/dist/storage.d.ts +8 -0
  259. package/dist/storage.d.ts.map +1 -1
  260. package/dist/tools.d.ts +12 -2
  261. package/dist/tools.d.ts.map +1 -1
  262. package/dist/types.d.ts +88 -7
  263. package/dist/types.d.ts.map +1 -1
  264. package/docs/README.md +5 -3
  265. package/docs/deployment.md +5 -4
  266. package/docs/design/runtime-abstraction.md +1757 -0
  267. package/docs/guides/mcp-oauth.md +26 -8
  268. package/docs/guides/slack.md +93 -202
  269. package/docs/reference/agent-config.md +2 -2
  270. package/docs/reference/cli.md +32 -16
  271. package/docs/reference/connections.md +6 -3
  272. package/docs/reference/http-api.md +3 -1
  273. package/docs/reference/sessions.md +4 -2
  274. package/docs/reference/tools.md +34 -2
  275. package/docs/templates/agents-md.md +110 -0
  276. package/docs/troubleshooting.md +2 -2
  277. package/package.json +1 -1
  278. package/skills/create-agent/SKILL.md +2 -1
  279. package/skills/mcp-auth/SKILL.md +6 -3
  280. package/skills/setup-slack/SKILL.md +23 -13
  281. package/src/bin/agent-serve.ts +12 -1
  282. package/src/channels/github/github-channel.ts +17 -0
  283. package/src/channels/origin/api.ts +24 -5
  284. package/src/channels/origin/binding.ts +55 -26
  285. package/src/channels/origin/index.ts +1 -0
  286. package/src/channels/origin/origin-channel.ts +78 -10
  287. package/src/channels/origin/reactions.ts +82 -0
  288. package/src/channels/origin/types.ts +11 -0
  289. package/src/channels/slack/approvals.ts +105 -0
  290. package/src/channels/slack/cli-project.ts +267 -0
  291. package/src/channels/slack/defaults.ts +165 -74
  292. package/src/channels/slack/dispatch.ts +2 -0
  293. package/src/channels/slack/init.ts +10 -5
  294. package/src/channels/slack/interactive.ts +35 -9
  295. package/src/channels/slack/live-delivery.ts +5 -3
  296. package/src/channels/slack/manifest.ts +1 -1
  297. package/src/channels/slack/progress-delivery.ts +133 -0
  298. package/src/channels/slack/setup.ts +10 -6
  299. package/src/channels/slack/slack-channel.ts +1 -0
  300. package/src/channels/slack/tool-approval-events.ts +93 -0
  301. package/src/channels/slack/types.ts +9 -1
  302. package/src/evals/run-facts.ts +32 -0
  303. package/src/files-backends/cursor-hosted.ts +3 -2
  304. package/src/index.ts +4 -0
  305. package/src/internal/advertise-tools.ts +31 -10
  306. package/src/internal/approval-gate.ts +20 -29
  307. package/src/internal/as-of.ts +107 -0
  308. package/src/internal/chat-client.ts +19 -0
  309. package/src/internal/cli-deploy.ts +203 -13
  310. package/src/internal/cli-mcp-oauth.ts +7 -21
  311. package/src/internal/cli-slack-manual.ts +350 -18
  312. package/src/internal/cli-slack.ts +40 -84
  313. package/src/internal/cursor/account-mcp.ts +21 -0
  314. package/src/internal/cursor-agent-template.ts +1 -0
  315. package/src/internal/cursor-event-relay.ts +5 -6
  316. package/src/internal/deploy-client.ts +43 -0
  317. package/src/internal/env-file.ts +84 -0
  318. package/src/internal/framework-file-storage.ts +18 -46
  319. package/src/internal/framework-storage-selection.ts +41 -25
  320. package/src/internal/hosted-admission-adapter.ts +42 -0
  321. package/src/internal/hosted-delivery-protocol.ts +14 -2
  322. package/src/internal/hosted-delivery.ts +169 -44
  323. package/src/internal/hosted-execution-diag.ts +252 -0
  324. package/src/internal/http-channel.ts +107 -0
  325. package/src/internal/init-project.ts +2 -0
  326. package/src/internal/logs-client.ts +5 -0
  327. package/src/internal/mcp-endpoint.ts +13 -4
  328. package/src/internal/mcp-host.ts +77 -11
  329. package/src/internal/mcp-oauth-on-demand.ts +352 -0
  330. package/src/internal/mcp-oauth-persist.ts +127 -0
  331. package/src/internal/mcp-oauth.ts +17 -1
  332. package/src/internal/null-kv-storage.ts +74 -0
  333. package/src/internal/otel/collector.ts +30 -0
  334. package/src/internal/server.ts +159 -11
  335. package/src/internal/session-engine.ts +691 -57
  336. package/src/internal/session-run-log.ts +584 -0
  337. package/src/internal/sessions-client.ts +17 -8
  338. package/src/internal/storage-coordinator.ts +49 -9
  339. package/src/internal/storage-roles.ts +7 -0
  340. package/src/internal/stream-progress.ts +19 -0
  341. package/src/internal/tool-policy.ts +49 -9
  342. package/src/internal/trajectory.ts +10 -0
  343. package/src/internal/turn-outbox.ts +85 -0
  344. package/src/storage-backends/cursor-hosted.ts +13 -1
  345. package/src/storage-protocol.ts +10 -0
  346. package/src/storage.ts +12 -0
  347. package/src/tools.ts +12 -2
  348. package/src/types.ts +93 -8
  349. package/templates/agents-md/README.md +39 -0
  350. package/templates/agents-md/agent/agent.ts +8 -0
  351. package/templates/agents-md/agent/channels/github.ts +10 -0
  352. package/templates/agents-md/agent/channels/queue.ts +28 -0
  353. package/templates/agents-md/agent/channels/slack.ts +9 -0
  354. package/templates/agents-md/agent/instructions.md +39 -0
  355. package/templates/agents-md/agent/lib/collect.ts +439 -0
  356. package/templates/agents-md/agent/lib/config.ts +8 -0
  357. package/templates/agents-md/agent/lib/paths.ts +51 -0
  358. package/templates/agents-md/agent/schedules/weekly.ts +17 -0
  359. package/templates/agents-md/agent/tools/apply_agents.ts +226 -0
  360. package/templates/agents-md/evals/agents.eval.ts +135 -0
  361. package/templates/agents-md/evals/evals.config.ts +5 -0
  362. package/templates/agents-md/init.json +38 -0
  363. package/templates/agents-md/package.json +18 -0
  364. package/templates/agents-md/tsconfig.json +12 -0
  365. package/dist/docs/assets/chunks/@localSearchIndexroot.DFoGuETX.js +0 -1
  366. package/dist/docs/assets/guides_slack.md.C32HsdKk.js +0 -38
  367. package/dist/docs/assets/guides_slack.md.C32HsdKk.lean.js +0 -1
  368. package/dist/docs/assets/index.md.CI93Ltlb.js +0 -5
  369. package/dist/docs/assets/reference_sessions.md.D0mIh4KK.js +0 -1
  370. package/dist/docs/assets/troubleshooting.md.Ctv3T8C2.js +0 -1
  371. package/dist/docs/design/agsh.md +0 -406
  372. package/dist/playground/assets/index-B1DDvBeC.css +0 -1
  373. package/dist/playground/assets/index-Cx9CclK_.js +0 -88
  374. package/docs/design/agsh.md +0 -406
  375. /package/dist/docs/assets/{deployment.md.D9msOFOW.lean.js → deployment.md.MFPKqsqI.lean.js} +0 -0
  376. /package/dist/docs/assets/{index.md.CI93Ltlb.lean.js → index.md.CVeRUOeZ.lean.js} +0 -0
  377. /package/dist/docs/assets/{reference_agent-config.md.Cp_x38Nl.lean.js → reference_agent-config.md.BHeYMgme.lean.js} +0 -0
  378. /package/dist/docs/assets/{reference_connections.md.BH8Oc0D0.lean.js → reference_connections.md.DxldvyIB.lean.js} +0 -0
  379. /package/dist/docs/assets/{reference_http-api.md.D89k1mdm.lean.js → reference_http-api.md.BEJx9XVj.lean.js} +0 -0
  380. /package/dist/docs/assets/{reference_sessions.md.D0mIh4KK.lean.js → reference_sessions.md.NxFP_CAC.lean.js} +0 -0
  381. /package/dist/docs/assets/{troubleshooting.md.Ctv3T8C2.lean.js → troubleshooting.md.DCiPBhYs.lean.js} +0 -0
@@ -0,0 +1,226 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import type { HostGitHubClient } from "@cursor/july";
4
+ import { defineTool } from "@cursor/july/tools";
5
+ import { z } from "zod";
6
+ import { agentsPath, parseRepo, updateBranch } from "../lib/paths.js";
7
+
8
+ const file = z.object({
9
+ path: z.string().min(1).max(240),
10
+ content: z.string().min(1).max(64_000),
11
+ });
12
+
13
+ type File = z.infer<typeof file>;
14
+ type Octokit = Awaited<ReturnType<HostGitHubClient["getOctokit"]>>;
15
+
16
+ type Write = {
17
+ octokit: Octokit;
18
+ owner: string;
19
+ repo: string;
20
+ window: string;
21
+ reason: string;
22
+ files: File[];
23
+ base: string;
24
+ branch: string;
25
+ };
26
+
27
+ export default defineTool({
28
+ description:
29
+ "Skip or open an AGENTS.md follow-up PR for this weekly review. Call once.",
30
+ needsApproval: (input) => input.verdict === "update",
31
+ effect: (input) => (input.verdict === "update" ? "write" : "read"),
32
+ inputSchema: z.discriminatedUnion("verdict", [
33
+ z.object({
34
+ verdict: z.literal("skip"),
35
+ reason: z.string().min(1).max(280),
36
+ }),
37
+ z.object({
38
+ verdict: z.literal("update"),
39
+ reason: z.string().min(1).max(280),
40
+ files: z.array(file).min(1).max(8),
41
+ }),
42
+ ]),
43
+ async execute(input, ctx) {
44
+ if (ctx.session.purpose === "eval") {
45
+ return { posted: false, reason: "eval", verdict: input.verdict };
46
+ }
47
+ if (input.verdict === "skip") {
48
+ return { posted: false, reason: input.reason, verdict: "skip" };
49
+ }
50
+ const dir = ctx.workspaceDir;
51
+ const repo = parseRepo(await readTrimmed(dir, "week/repo.txt"));
52
+ const base = await readTrimmed(dir, "week/base.ref");
53
+ const window = await readTrimmed(dir, "week/window.txt");
54
+ const branch = updateBranch(base);
55
+ if (repo === undefined || branch === undefined || window === "") {
56
+ throw new Error("missing week/repo.txt, week/base.ref, or week/window.txt");
57
+ }
58
+ const files = input.files.map((item) => {
59
+ const path = agentsPath(item.path);
60
+ if (path === undefined) {
61
+ throw new Error(`invalid AGENTS.md path: ${item.path}`);
62
+ }
63
+ return { path, content: item.content };
64
+ });
65
+ return openAgentsPr({
66
+ octokit: await ctx.host.github.getOctokit(),
67
+ owner: repo.owner,
68
+ repo: repo.repo,
69
+ window,
70
+ reason: input.reason,
71
+ files,
72
+ base,
73
+ branch,
74
+ });
75
+ },
76
+ });
77
+
78
+ async function openAgentsPr(input: Write) {
79
+ const repo = { owner: input.owner, repo: input.repo };
80
+ const existing = await input.octokit.rest.pulls.list({
81
+ ...repo,
82
+ state: "open",
83
+ head: `${input.owner}:${input.branch}`,
84
+ base: input.base,
85
+ per_page: 1,
86
+ });
87
+ const open = existing.data[0];
88
+ if (open !== undefined && citesWindow(open.body, input.window)) {
89
+ return {
90
+ posted: false,
91
+ reason: "exists",
92
+ verdict: "update",
93
+ window: input.window,
94
+ url: open.html_url,
95
+ };
96
+ }
97
+ const branchSha = await refSha(input.octokit, repo, input.branch);
98
+ const parent = branchSha ?? (await refSha(input.octokit, repo, input.base));
99
+ if (parent === undefined) {
100
+ throw new Error(`missing base ref: ${input.base}`);
101
+ }
102
+ const { data: commit } = await input.octokit.rest.git.getCommit({
103
+ ...repo,
104
+ commit_sha: parent,
105
+ });
106
+ const blobs = await Promise.all(
107
+ input.files.map(async (item) => {
108
+ const { data } = await input.octokit.rest.git.createBlob({
109
+ ...repo,
110
+ content: Buffer.from(item.content).toString("base64"),
111
+ encoding: "base64",
112
+ });
113
+ return {
114
+ path: item.path,
115
+ mode: "100644" as const,
116
+ type: "blob" as const,
117
+ sha: data.sha,
118
+ };
119
+ })
120
+ );
121
+ const { data: tree } = await input.octokit.rest.git.createTree({
122
+ ...repo,
123
+ base_tree: commit.tree.sha,
124
+ tree: blobs,
125
+ });
126
+ const { data: next } = await input.octokit.rest.git.createCommit({
127
+ ...repo,
128
+ message: `agents.md: ${input.reason}`,
129
+ tree: tree.sha,
130
+ parents: [parent],
131
+ });
132
+ if (branchSha === undefined) {
133
+ await input.octokit.rest.git.createRef({
134
+ ...repo,
135
+ ref: `refs/heads/${input.branch}`,
136
+ sha: next.sha,
137
+ });
138
+ } else {
139
+ await input.octokit.rest.git.updateRef({
140
+ ...repo,
141
+ ref: `heads/${input.branch}`,
142
+ sha: next.sha,
143
+ });
144
+ }
145
+ if (open !== undefined) {
146
+ await input.octokit.rest.pulls.update({
147
+ ...repo,
148
+ pull_number: open.number,
149
+ body: appendWindow(open.body ?? "", input.reason, input.window),
150
+ });
151
+ return {
152
+ posted: true,
153
+ verdict: "update",
154
+ window: input.window,
155
+ url: open.html_url,
156
+ };
157
+ }
158
+ const { data: pull } = await input.octokit.rest.pulls.create({
159
+ ...repo,
160
+ title: `agents.md: update for ${input.window}`,
161
+ head: input.branch,
162
+ base: input.base,
163
+ draft: true,
164
+ body: pullBody(input.reason, input.window),
165
+ });
166
+ return {
167
+ posted: true,
168
+ verdict: "update",
169
+ window: input.window,
170
+ url: pull.html_url,
171
+ };
172
+ }
173
+
174
+ async function readTrimmed(dir: string, rel: string): Promise<string> {
175
+ return (await readFile(join(dir, rel), "utf8")).trim();
176
+ }
177
+
178
+ async function refSha(
179
+ octokit: Octokit,
180
+ repo: { owner: string; repo: string },
181
+ name: string
182
+ ): Promise<string | undefined> {
183
+ try {
184
+ const { data } = await octokit.rest.git.getRef({
185
+ ...repo,
186
+ ref: `heads/${name}`,
187
+ });
188
+ return data.object.sha;
189
+ } catch (error) {
190
+ if (isNotFound(error)) {
191
+ return undefined;
192
+ }
193
+ throw error;
194
+ }
195
+ }
196
+
197
+ function pullBody(reason: string, window: string): string {
198
+ return `${reason}
199
+
200
+ Window: ${window}
201
+
202
+ This pull request rewrites AGENTS.md. Those files are always-applied agent instructions. Review the bodies, then mark the draft ready and merge.`;
203
+ }
204
+
205
+ function citesWindow(body: string | null | undefined, window: string): boolean {
206
+ return new RegExp(
207
+ `(?:^|\\n)Window: ${escapeRegExp(window)}(?:\\s|$)`
208
+ ).test(body ?? "");
209
+ }
210
+
211
+ function appendWindow(body: string, reason: string, window: string): string {
212
+ return `${body.trim()}\n\n${reason}\nWindow: ${window}`;
213
+ }
214
+
215
+ function escapeRegExp(value: string): string {
216
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
217
+ }
218
+
219
+ function isNotFound(error: unknown): boolean {
220
+ return (
221
+ typeof error === "object" &&
222
+ error !== null &&
223
+ "status" in error &&
224
+ error.status === 404
225
+ );
226
+ }
@@ -0,0 +1,135 @@
1
+ import { defineEval } from "@cursor/july/evals";
2
+
3
+ const WINDOW = "2026-08-26/2026-09-02";
4
+
5
+ function weekly(): string {
6
+ return [
7
+ `Weekly AGENTS.md review for acme/api (${WINDOW}).`,
8
+ "Read week/ and week/tree/. Call apply_agents once.",
9
+ ].join("\n");
10
+ }
11
+
12
+ const AGENTS = [
13
+ "# API",
14
+ "",
15
+ "Usage events are protobuf messages in `proto/billing.proto`.",
16
+ "Do not add ad-hoc billing columns on the request path.",
17
+ "",
18
+ ].join("\n");
19
+
20
+ const CHORE = [
21
+ "# Merged pull requests",
22
+ "",
23
+ "## #12 Fix sidebar opener lint failure",
24
+ "url: https://github.com/acme/api/pull/12",
25
+ "author: @sam",
26
+ "merged: 2026-08-28T16:00:00Z",
27
+ "files: src/sidebar.ts",
28
+ "",
29
+ "Quote style only.",
30
+ "",
31
+ ].join("\n");
32
+
33
+ const RULE = [
34
+ "# Merged pull requests",
35
+ "",
36
+ "## #18 Route every billing write through UsageEvent",
37
+ "url: https://github.com/acme/api/pull/18",
38
+ "author: @sam",
39
+ "merged: 2026-08-29T18:00:00Z",
40
+ "files: proto/billing.proto, src/billing.ts",
41
+ "",
42
+ "Adds usage_unit and workspace_id to UsageEvent.",
43
+ "",
44
+ "### comments",
45
+ "- @lee: always put new billing fields on UsageEvent. no request-path columns.",
46
+ "",
47
+ ].join("\n");
48
+
49
+ const SLACK = [
50
+ "## #eng-api",
51
+ "- <@U1>: lunch at 12",
52
+ "- <@U2>: yes, every new billing field goes on UsageEvent from now on",
53
+ "",
54
+ ].join("\n");
55
+
56
+ export default defineEval({
57
+ tags: ["smoke"],
58
+ cases: [
59
+ {
60
+ id: "skip-chore",
61
+ description: "A lint-only week does not open an AGENTS.md PR.",
62
+ async test(t) {
63
+ await t.send(weekly(), {
64
+ workspaceFiles: {
65
+ "week/window.txt": `${WINDOW}\n`,
66
+ "week/repo.txt": "acme/api\n",
67
+ "week/base.ref": "main\n",
68
+ "week/files.txt": "AGENTS.md\n",
69
+ "week/prs.md": CHORE,
70
+ "week/slack.md": "## #eng-api\n- <@U1>: lunch at 12\n",
71
+ "week/tree/AGENTS.md.txt": AGENTS,
72
+ },
73
+ });
74
+ t.succeeded();
75
+ t.calledTool("apply_agents", { input: { verdict: "skip" } });
76
+ },
77
+ },
78
+ {
79
+ id: "update-rule",
80
+ description: "A repeated billing rule parks the AGENTS.md write.",
81
+ async test(t) {
82
+ await t.send(weekly(), {
83
+ workspaceFiles: {
84
+ "week/window.txt": `${WINDOW}\n`,
85
+ "week/repo.txt": "acme/api\n",
86
+ "week/base.ref": "main\n",
87
+ "week/files.txt": "AGENTS.md\n",
88
+ "week/prs.md": RULE,
89
+ "week/slack.md": SLACK,
90
+ "week/tree/AGENTS.md.txt": "# API\n\nKeep handlers thin.\n",
91
+ },
92
+ });
93
+ t.parked();
94
+ t.calledTool("apply_agents", { input: { verdict: "update" } });
95
+ },
96
+ },
97
+ {
98
+ id: "skip-known",
99
+ description: "A rule already in AGENTS.md stays quiet.",
100
+ async test(t) {
101
+ await t.send(weekly(), {
102
+ workspaceFiles: {
103
+ "week/window.txt": `${WINDOW}\n`,
104
+ "week/repo.txt": "acme/api\n",
105
+ "week/base.ref": "main\n",
106
+ "week/files.txt": "AGENTS.md\n",
107
+ "week/prs.md": RULE,
108
+ "week/slack.md": SLACK,
109
+ "week/tree/AGENTS.md.txt": AGENTS,
110
+ },
111
+ });
112
+ t.succeeded();
113
+ t.calledTool("apply_agents", { input: { verdict: "skip" } });
114
+ },
115
+ },
116
+ {
117
+ id: "skip-empty",
118
+ description: "An empty week does not open an AGENTS.md PR.",
119
+ async test(t) {
120
+ await t.send(weekly(), {
121
+ workspaceFiles: {
122
+ "week/window.txt": `${WINDOW}\n`,
123
+ "week/repo.txt": "acme/api\n",
124
+ "week/base.ref": "main\n",
125
+ "week/files.txt": "\n",
126
+ "week/prs.md": "No merged pull requests this week.\n",
127
+ "week/slack.md": "No Slack channels configured.\n",
128
+ },
129
+ });
130
+ t.succeeded();
131
+ t.calledTool("apply_agents", { input: { verdict: "skip" } });
132
+ },
133
+ },
134
+ ],
135
+ });
@@ -0,0 +1,5 @@
1
+ import { defineEvalConfig } from "@cursor/july/evals";
2
+
3
+ export default defineEvalConfig({
4
+ maxConcurrency: 10,
5
+ });
@@ -0,0 +1,38 @@
1
+ {
2
+ "questions": [
3
+ {
4
+ "id": "repos",
5
+ "prompt": "Which GitHub repo should this agent maintain AGENTS.md for?",
6
+ "hint": "One owner/repo. Init once per app.",
7
+ "placeholder": "acme/api",
8
+ "parse": "owner-repo-list"
9
+ },
10
+ {
11
+ "id": "slack",
12
+ "prompt": "Which Slack channels should this agent read?",
13
+ "hint": "Comma-separated #names or channel ids. Invite the bot, including to private channels. Use none to skip Slack.",
14
+ "placeholder": "#eng-api, #api-private",
15
+ "default": "none"
16
+ }
17
+ ],
18
+ "replace": [
19
+ {
20
+ "file": "agent/lib/config.ts",
21
+ "find": "[\"owner/repo\"]",
22
+ "answer": "repos",
23
+ "as": "json-array"
24
+ },
25
+ {
26
+ "file": "agent/lib/config.ts",
27
+ "find": "[\"#eng\"]",
28
+ "answer": "slack",
29
+ "as": "json-array"
30
+ },
31
+ {
32
+ "file": "README.md",
33
+ "find": "owner/repo",
34
+ "answer": "repos",
35
+ "as": "first"
36
+ }
37
+ ]
38
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "agents-md",
3
+ "private": true,
4
+ "type": "module",
5
+ "description": "Keeps AGENTS.md current from last week's merged PRs and Slack.",
6
+ "scripts": {
7
+ "check": "tsc --noEmit",
8
+ "dev": "agent-sdk dev"
9
+ },
10
+ "dependencies": {
11
+ "@cursor/july": "latest",
12
+ "zod": "^3.25.0"
13
+ },
14
+ "devDependencies": {
15
+ "@types/node": "^22.14.0",
16
+ "typescript": "^5.8.0"
17
+ }
18
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "strict": true,
7
+ "noEmit": true,
8
+ "skipLibCheck": true,
9
+ "types": ["node"]
10
+ },
11
+ "include": ["agent/**/*", "evals/**/*"]
12
+ }