@cursor/july 0.1.95 → 0.1.97

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 (424) hide show
  1. package/AGENTS.md +3 -4
  2. package/README.md +3 -2
  3. package/dist/bin/agent-serve.js +14 -3
  4. package/dist/channels/deployments/types.d.ts +1 -1
  5. package/dist/channels/deployments/types.d.ts.map +1 -1
  6. package/dist/channels/deployments/types.js +1 -0
  7. package/dist/channels/origin/api.d.ts +72 -15
  8. package/dist/channels/origin/api.d.ts.map +1 -1
  9. package/dist/channels/origin/api.js +185 -28
  10. package/dist/channels/origin/binding.d.ts +13 -2
  11. package/dist/channels/origin/binding.d.ts.map +1 -1
  12. package/dist/channels/origin/binding.js +41 -25
  13. package/dist/channels/origin/checks.d.ts +6 -6
  14. package/dist/channels/origin/checks.js +6 -6
  15. package/dist/channels/origin/cursor-account.d.ts +5 -3
  16. package/dist/channels/origin/cursor-account.d.ts.map +1 -1
  17. package/dist/channels/origin/cursor-account.js +5 -3
  18. package/dist/channels/origin/index.d.ts +1 -0
  19. package/dist/channels/origin/index.d.ts.map +1 -1
  20. package/dist/channels/origin/index.js +1 -0
  21. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  22. package/dist/channels/origin/origin-channel.js +3 -0
  23. package/dist/channels/origin/reactions.d.ts +56 -0
  24. package/dist/channels/origin/reactions.d.ts.map +1 -0
  25. package/dist/channels/origin/reactions.js +67 -0
  26. package/dist/channels/origin/types.d.ts +11 -0
  27. package/dist/channels/origin/types.d.ts.map +1 -1
  28. package/dist/channels/slack/api.d.ts +9 -0
  29. package/dist/channels/slack/api.d.ts.map +1 -1
  30. package/dist/channels/slack/api.js +36 -5
  31. package/dist/channels/slack/approvals.d.ts +16 -0
  32. package/dist/channels/slack/approvals.d.ts.map +1 -1
  33. package/dist/channels/slack/approvals.js +86 -0
  34. package/dist/channels/slack/cli-project.d.ts +19 -0
  35. package/dist/channels/slack/cli-project.d.ts.map +1 -0
  36. package/dist/channels/slack/cli-project.js +234 -0
  37. package/dist/channels/slack/defaults.d.ts.map +1 -1
  38. package/dist/channels/slack/defaults.js +110 -81
  39. package/dist/channels/slack/dispatch.d.ts +7 -1
  40. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  41. package/dist/channels/slack/dispatch.js +47 -23
  42. package/dist/channels/slack/inbound.d.ts +8 -0
  43. package/dist/channels/slack/inbound.d.ts.map +1 -1
  44. package/dist/channels/slack/inbound.js +32 -0
  45. package/dist/channels/slack/init.d.ts +3 -2
  46. package/dist/channels/slack/init.d.ts.map +1 -1
  47. package/dist/channels/slack/init.js +5 -5
  48. package/dist/channels/slack/interactive.d.ts +2 -1
  49. package/dist/channels/slack/interactive.d.ts.map +1 -1
  50. package/dist/channels/slack/interactive.js +15 -4
  51. package/dist/channels/slack/live-delivery.d.ts +26 -29
  52. package/dist/channels/slack/live-delivery.d.ts.map +1 -1
  53. package/dist/channels/slack/live-delivery.js +172 -73
  54. package/dist/channels/slack/manifest.d.ts +1 -1
  55. package/dist/channels/slack/manifest.d.ts.map +1 -1
  56. package/dist/channels/slack/manifest.js +6 -2
  57. package/dist/channels/slack/nudge-carrier.d.ts +2 -0
  58. package/dist/channels/slack/nudge-carrier.d.ts.map +1 -1
  59. package/dist/channels/slack/nudge-carrier.js +48 -1
  60. package/dist/channels/slack/setup.d.ts +1 -1
  61. package/dist/channels/slack/setup.d.ts.map +1 -1
  62. package/dist/channels/slack/setup.js +10 -6
  63. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  64. package/dist/channels/slack/slack-channel.js +3 -2
  65. package/dist/channels/slack/tool-approval-events.d.ts.map +1 -1
  66. package/dist/channels/slack/tool-approval-events.js +91 -1
  67. package/dist/docs/404.html +2 -2
  68. package/dist/docs/ab.html +4 -4
  69. package/dist/docs/assets/{app.BBj0klBO.js → app.B3rWNYE1.js} +1 -1
  70. package/dist/docs/assets/chunks/@localSearchIndexroot.BU9nHdnQ.js +1 -0
  71. package/dist/docs/assets/chunks/{VPLocalSearchBox.CUEXpL78.js → VPLocalSearchBox.C1lhqJJR.js} +1 -1
  72. package/dist/docs/assets/chunks/{theme.DabmQnia.js → theme.B40_SXuv.js} +2 -2
  73. package/dist/docs/assets/{deployment.md.D9msOFOW.js → deployment.md.MFPKqsqI.js} +2 -2
  74. package/dist/docs/assets/{guides_mcp-oauth.md.DPYmBCbV.js → guides_mcp-oauth.md.CN-6YmTJ.js} +4 -4
  75. package/dist/docs/assets/{guides_mcp-oauth.md.DPYmBCbV.lean.js → guides_mcp-oauth.md.CN-6YmTJ.lean.js} +1 -1
  76. package/dist/docs/assets/guides_slack.md.VDXQV3ja.js +22 -0
  77. package/dist/docs/assets/guides_slack.md.VDXQV3ja.lean.js +1 -0
  78. package/dist/docs/assets/index.md.CVeRUOeZ.js +5 -0
  79. package/dist/docs/assets/{index.md.BoHaMdeZ.lean.js → index.md.CVeRUOeZ.lean.js} +1 -1
  80. package/dist/docs/assets/{reference_agent-config.md.Cp_x38Nl.js → reference_agent-config.md.BHeYMgme.js} +1 -1
  81. package/dist/docs/assets/{reference_cli.md.BsMOxDvh.js → reference_cli.md.RyZf5OTE.js} +10 -6
  82. package/dist/docs/assets/{reference_cli.md.BsMOxDvh.lean.js → reference_cli.md.RyZf5OTE.lean.js} +1 -1
  83. package/dist/docs/assets/{reference_connections.md.BH8Oc0D0.js → reference_connections.md.DxldvyIB.js} +4 -3
  84. package/dist/docs/assets/{reference_http-api.md.D89k1mdm.js → reference_http-api.md.5zOAbV86.js} +1 -1
  85. package/dist/docs/assets/reference_sessions.md.NxFP_CAC.js +1 -0
  86. package/dist/docs/assets/{reference_tools.md.BHeXn2id.js → reference_tools.md.B84gw9Ii.js} +1 -1
  87. package/dist/docs/assets/templates_agents-md.md.CXSMZljE.js +2 -0
  88. package/dist/docs/assets/templates_agents-md.md.CXSMZljE.lean.js +1 -0
  89. package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.js +2 -0
  90. package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.lean.js +1 -0
  91. package/dist/docs/assets/troubleshooting.md.DCiPBhYs.js +1 -0
  92. package/dist/docs/building-with-agents.html +4 -4
  93. package/dist/docs/concepts.html +4 -4
  94. package/dist/docs/deployment.html +7 -7
  95. package/dist/docs/deployment.md +5 -4
  96. package/dist/docs/evals.html +4 -4
  97. package/dist/docs/guides/agent-to-agent.html +4 -4
  98. package/dist/docs/guides/cloud-runtime.html +4 -4
  99. package/dist/docs/guides/convert-automation.html +4 -4
  100. package/dist/docs/guides/github.html +4 -4
  101. package/dist/docs/guides/human-in-the-loop.html +4 -4
  102. package/dist/docs/guides/mcp-oauth.html +8 -8
  103. package/dist/docs/guides/mcp-oauth.md +26 -8
  104. package/dist/docs/guides/opentelemetry.html +4 -4
  105. package/dist/docs/guides/slack.html +17 -33
  106. package/dist/docs/guides/slack.md +92 -201
  107. package/dist/docs/guides/webhooks.html +4 -4
  108. package/dist/docs/hashmap.json +1 -1
  109. package/dist/docs/hillclimbing.html +4 -4
  110. package/dist/docs/index.html +6 -6
  111. package/dist/docs/index.md +7 -3
  112. package/dist/docs/llms-full.txt +398 -653
  113. package/dist/docs/llms.txt +3 -2
  114. package/dist/docs/quickstart.html +4 -4
  115. package/dist/docs/reference/agent-config.html +6 -6
  116. package/dist/docs/reference/agent-config.md +2 -2
  117. package/dist/docs/reference/artifacts.html +4 -4
  118. package/dist/docs/reference/channels.html +4 -4
  119. package/dist/docs/reference/cli.html +14 -10
  120. package/dist/docs/reference/cli.md +39 -16
  121. package/dist/docs/reference/connections.html +9 -8
  122. package/dist/docs/reference/connections.md +6 -3
  123. package/dist/docs/reference/hooks.html +4 -4
  124. package/dist/docs/reference/http-api.html +6 -6
  125. package/dist/docs/reference/http-api.md +2 -1
  126. package/dist/docs/reference/instructions.html +4 -4
  127. package/dist/docs/reference/playground.html +4 -4
  128. package/dist/docs/reference/project-layout.html +4 -4
  129. package/dist/docs/reference/prompt.html +4 -4
  130. package/dist/docs/reference/schedules.html +4 -4
  131. package/dist/docs/reference/sessions.html +5 -5
  132. package/dist/docs/reference/sessions.md +4 -2
  133. package/dist/docs/reference/skills.html +4 -4
  134. package/dist/docs/reference/subagents.html +4 -4
  135. package/dist/docs/reference/tools.html +6 -6
  136. package/dist/docs/reference/tools.md +9 -2
  137. package/dist/docs/scaffolding-agents.html +4 -4
  138. package/dist/docs/storage.html +4 -4
  139. package/dist/docs/templates/agentic-owners.html +4 -4
  140. package/dist/docs/templates/agents-md.html +28 -0
  141. package/dist/docs/templates/agents-md.md +105 -0
  142. package/dist/docs/templates/code-wiki.html +28 -0
  143. package/dist/docs/templates/code-wiki.md +91 -0
  144. package/dist/docs/templates/demo.html +5 -5
  145. package/dist/docs/templates/pr-autofixer.html +4 -4
  146. package/dist/docs/templates/security-help.html +4 -4
  147. package/dist/docs/templates/security-reviewer.html +5 -5
  148. package/dist/docs/templates/triage.html +4 -4
  149. package/dist/docs/troubleshooting.html +5 -5
  150. package/dist/docs/troubleshooting.md +2 -2
  151. package/dist/evals/run-facts.d.ts.map +1 -1
  152. package/dist/evals/run-facts.js +27 -0
  153. package/dist/files-backends/cursor-hosted.d.ts +26 -4
  154. package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
  155. package/dist/files-backends/cursor-hosted.js +32 -4
  156. package/dist/internal/advertise-tools.d.ts +2 -0
  157. package/dist/internal/advertise-tools.d.ts.map +1 -1
  158. package/dist/internal/advertise-tools.js +30 -10
  159. package/dist/internal/approval-gate.d.ts +12 -13
  160. package/dist/internal/approval-gate.d.ts.map +1 -1
  161. package/dist/internal/approval-gate.js +16 -21
  162. package/dist/internal/bounded.d.ts +7 -0
  163. package/dist/internal/bounded.d.ts.map +1 -0
  164. package/dist/internal/bounded.js +32 -0
  165. package/dist/internal/chat-client.js +10 -0
  166. package/dist/internal/cli-deploy.d.ts +5 -0
  167. package/dist/internal/cli-deploy.d.ts.map +1 -1
  168. package/dist/internal/cli-deploy.js +57 -18
  169. package/dist/internal/cli-mcp-oauth.js +8 -18
  170. package/dist/internal/cli-slack-manual.d.ts +24 -2
  171. package/dist/internal/cli-slack-manual.d.ts.map +1 -1
  172. package/dist/internal/cli-slack-manual.js +251 -20
  173. package/dist/internal/cli-slack.d.ts +9 -2
  174. package/dist/internal/cli-slack.d.ts.map +1 -1
  175. package/dist/internal/cli-slack.js +29 -82
  176. package/dist/internal/conversation-mirror.d.ts +11 -8
  177. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  178. package/dist/internal/conversation-mirror.js +116 -55
  179. package/dist/internal/cursor/account-mcp.d.ts +1 -0
  180. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  181. package/dist/internal/cursor/account-mcp.js +17 -0
  182. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  183. package/dist/internal/cursor/backend-client.js +22 -48
  184. package/dist/internal/cursor/session-token.d.ts +45 -0
  185. package/dist/internal/cursor/session-token.d.ts.map +1 -0
  186. package/dist/internal/cursor/session-token.js +99 -0
  187. package/dist/internal/cursor-agent-template.d.ts +1 -1
  188. package/dist/internal/cursor-agent-template.d.ts.map +1 -1
  189. package/dist/internal/cursor-agent-template.js +2 -0
  190. package/dist/internal/deploy-client.d.ts +17 -0
  191. package/dist/internal/deploy-client.d.ts.map +1 -1
  192. package/dist/internal/deploy-client.js +31 -10
  193. package/dist/internal/env-file.d.ts +19 -0
  194. package/dist/internal/env-file.d.ts.map +1 -0
  195. package/dist/internal/env-file.js +90 -0
  196. package/dist/internal/framework-file-storage.d.ts +61 -0
  197. package/dist/internal/framework-file-storage.d.ts.map +1 -0
  198. package/dist/internal/framework-file-storage.js +210 -0
  199. package/dist/internal/framework-storage-selection.d.ts +11 -5
  200. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  201. package/dist/internal/framework-storage-selection.js +38 -11
  202. package/dist/internal/hosted-delivery-protocol.d.ts +7 -0
  203. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  204. package/dist/internal/hosted-delivery-protocol.js +7 -0
  205. package/dist/internal/hosted-delivery.d.ts +13 -0
  206. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  207. package/dist/internal/hosted-delivery.js +64 -19
  208. package/dist/internal/hosted-execution-diag.d.ts +48 -0
  209. package/dist/internal/hosted-execution-diag.d.ts.map +1 -0
  210. package/dist/internal/hosted-execution-diag.js +150 -0
  211. package/dist/internal/http-channel.d.ts.map +1 -1
  212. package/dist/internal/http-channel.js +81 -1
  213. package/dist/internal/init-project.d.ts.map +1 -1
  214. package/dist/internal/init-project.js +4 -0
  215. package/dist/internal/install-cursor-skills.d.ts.map +1 -1
  216. package/dist/internal/install-cursor-skills.js +1 -3
  217. package/dist/internal/logs-client.d.ts +5 -0
  218. package/dist/internal/logs-client.d.ts.map +1 -1
  219. package/dist/internal/logs-client.js +5 -0
  220. package/dist/internal/managed-delivery.d.ts +80 -0
  221. package/dist/internal/managed-delivery.d.ts.map +1 -0
  222. package/dist/internal/managed-delivery.js +86 -0
  223. package/dist/internal/mcp-endpoint.js +2 -3
  224. package/dist/internal/mcp-host.d.ts +10 -0
  225. package/dist/internal/mcp-host.d.ts.map +1 -1
  226. package/dist/internal/mcp-host.js +57 -8
  227. package/dist/internal/mcp-oauth-on-demand.d.ts +68 -0
  228. package/dist/internal/mcp-oauth-on-demand.d.ts.map +1 -0
  229. package/dist/internal/mcp-oauth-on-demand.js +287 -0
  230. package/dist/internal/mcp-oauth-persist.d.ts +42 -0
  231. package/dist/internal/mcp-oauth-persist.d.ts.map +1 -0
  232. package/dist/internal/mcp-oauth-persist.js +92 -0
  233. package/dist/internal/mcp-oauth.d.ts +1 -0
  234. package/dist/internal/mcp-oauth.d.ts.map +1 -1
  235. package/dist/internal/mcp-oauth.js +10 -2
  236. package/dist/internal/otel/collector.d.ts.map +1 -1
  237. package/dist/internal/otel/collector.js +22 -9
  238. package/dist/internal/runtime-dispatch-runner.d.ts +5 -1
  239. package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
  240. package/dist/internal/runtime-dispatch-runner.js +7 -0
  241. package/dist/internal/sdk-runner.d.ts +11 -0
  242. package/dist/internal/sdk-runner.d.ts.map +1 -1
  243. package/dist/internal/sdk-runner.js +39 -8
  244. package/dist/internal/server.d.ts +3 -0
  245. package/dist/internal/server.d.ts.map +1 -1
  246. package/dist/internal/server.js +49 -21
  247. package/dist/internal/session-engine.d.ts +101 -3
  248. package/dist/internal/session-engine.d.ts.map +1 -1
  249. package/dist/internal/session-engine.js +577 -46
  250. package/dist/internal/sessions-client.d.ts +9 -7
  251. package/dist/internal/sessions-client.d.ts.map +1 -1
  252. package/dist/internal/sessions-client.js +3 -1
  253. package/dist/internal/steering.d.ts +15 -0
  254. package/dist/internal/steering.d.ts.map +1 -0
  255. package/dist/internal/steering.js +18 -0
  256. package/dist/internal/storage-coordinator.d.ts +7 -0
  257. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  258. package/dist/internal/storage-coordinator.js +28 -5
  259. package/dist/internal/storage-roles.d.ts +5 -0
  260. package/dist/internal/storage-roles.d.ts.map +1 -1
  261. package/dist/internal/stream-progress.d.ts.map +1 -1
  262. package/dist/internal/stream-progress.js +10 -0
  263. package/dist/internal/tool-policy.d.ts +9 -1
  264. package/dist/internal/tool-policy.d.ts.map +1 -1
  265. package/dist/internal/tool-policy.js +13 -0
  266. package/dist/internal/trajectory.d.ts.map +1 -1
  267. package/dist/internal/trajectory.js +10 -0
  268. package/dist/internal/turn-outbox.d.ts +24 -0
  269. package/dist/internal/turn-outbox.d.ts.map +1 -0
  270. package/dist/internal/turn-outbox.js +80 -0
  271. package/dist/playground/assets/{index-CZA1uEWA.js → index-DrkI6y5O.js} +51 -51
  272. package/dist/playground/assets/index-DzNGwm7q.css +1 -0
  273. package/dist/playground/index.html +2 -2
  274. package/dist/storage-backends/cursor-hosted.d.ts +9 -6
  275. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  276. package/dist/storage-backends/cursor-hosted.js +16 -3
  277. package/dist/storage.d.ts +8 -0
  278. package/dist/storage.d.ts.map +1 -1
  279. package/dist/types.d.ts +65 -8
  280. package/dist/types.d.ts.map +1 -1
  281. package/docs/README.md +7 -3
  282. package/docs/deployment.md +5 -4
  283. package/docs/guides/mcp-oauth.md +26 -8
  284. package/docs/guides/slack.md +93 -202
  285. package/docs/reference/agent-config.md +2 -2
  286. package/docs/reference/cli.md +39 -16
  287. package/docs/reference/connections.md +6 -3
  288. package/docs/reference/http-api.md +2 -1
  289. package/docs/reference/sessions.md +4 -2
  290. package/docs/reference/tools.md +9 -2
  291. package/docs/templates/agents-md.md +110 -0
  292. package/docs/templates/code-wiki.md +96 -0
  293. package/docs/troubleshooting.md +2 -2
  294. package/package.json +2 -2
  295. package/skills/ab/SKILL.md +13 -97
  296. package/skills/create-agent/SKILL.md +124 -223
  297. package/skills/debug/SKILL.md +34 -68
  298. package/skills/evals/SKILL.md +55 -180
  299. package/skills/framework-map/SKILL.md +83 -145
  300. package/skills/github/SKILL.md +53 -111
  301. package/skills/hillclimb/SKILL.md +40 -163
  302. package/skills/mcp-auth/SKILL.md +51 -107
  303. package/skills/otel/SKILL.md +22 -68
  304. package/skills/setup-slack/SKILL.md +91 -212
  305. package/src/bin/agent-serve.ts +13 -1
  306. package/src/channels/deployments/types.ts +1 -0
  307. package/src/channels/origin/api.ts +264 -33
  308. package/src/channels/origin/binding.ts +57 -28
  309. package/src/channels/origin/checks.ts +6 -6
  310. package/src/channels/origin/cursor-account.ts +5 -3
  311. package/src/channels/origin/index.ts +1 -0
  312. package/src/channels/origin/origin-channel.ts +4 -0
  313. package/src/channels/origin/reactions.ts +82 -0
  314. package/src/channels/origin/types.ts +11 -0
  315. package/src/channels/slack/api.ts +41 -5
  316. package/src/channels/slack/approvals.ts +105 -0
  317. package/src/channels/slack/cli-project.ts +267 -0
  318. package/src/channels/slack/defaults.ts +122 -93
  319. package/src/channels/slack/dispatch.ts +56 -22
  320. package/src/channels/slack/inbound.ts +43 -0
  321. package/src/channels/slack/init.ts +10 -5
  322. package/src/channels/slack/interactive.ts +35 -9
  323. package/src/channels/slack/live-delivery.ts +235 -114
  324. package/src/channels/slack/manifest.ts +6 -2
  325. package/src/channels/slack/nudge-carrier.ts +48 -1
  326. package/src/channels/slack/setup.ts +10 -6
  327. package/src/channels/slack/slack-channel.ts +3 -0
  328. package/src/channels/slack/tool-approval-events.ts +93 -0
  329. package/src/evals/run-facts.ts +32 -0
  330. package/src/files-backends/cursor-hosted.ts +40 -7
  331. package/src/internal/advertise-tools.ts +49 -12
  332. package/src/internal/approval-gate.ts +20 -29
  333. package/src/internal/bounded.ts +28 -0
  334. package/src/internal/chat-client.ts +19 -0
  335. package/src/internal/cli-deploy.ts +91 -9
  336. package/src/internal/cli-mcp-oauth.ts +7 -21
  337. package/src/internal/cli-slack-manual.ts +350 -18
  338. package/src/internal/cli-slack.ts +40 -84
  339. package/src/internal/conversation-mirror.ts +145 -69
  340. package/src/internal/cursor/account-mcp.ts +21 -0
  341. package/src/internal/cursor/backend-client.ts +34 -58
  342. package/src/internal/cursor/session-token.ts +115 -0
  343. package/src/internal/cursor-agent-template.ts +2 -0
  344. package/src/internal/deploy-client.ts +43 -0
  345. package/src/internal/env-file.ts +84 -0
  346. package/src/internal/framework-file-storage.ts +228 -0
  347. package/src/internal/framework-storage-selection.ts +51 -11
  348. package/src/internal/hosted-delivery-protocol.ts +7 -0
  349. package/src/internal/hosted-delivery.ts +107 -24
  350. package/src/internal/hosted-execution-diag.ts +207 -0
  351. package/src/internal/http-channel.ts +99 -0
  352. package/src/internal/init-project.ts +4 -0
  353. package/src/internal/install-cursor-skills.ts +1 -4
  354. package/src/internal/logs-client.ts +5 -0
  355. package/src/internal/managed-delivery.ts +125 -0
  356. package/src/internal/mcp-endpoint.ts +13 -4
  357. package/src/internal/mcp-host.ts +77 -11
  358. package/src/internal/mcp-oauth-on-demand.ts +352 -0
  359. package/src/internal/mcp-oauth-persist.ts +127 -0
  360. package/src/internal/mcp-oauth.ts +17 -1
  361. package/src/internal/otel/collector.ts +30 -0
  362. package/src/internal/runtime-dispatch-runner.ts +10 -0
  363. package/src/internal/sdk-runner.ts +56 -8
  364. package/src/internal/server.ts +61 -9
  365. package/src/internal/session-engine.ts +723 -60
  366. package/src/internal/sessions-client.ts +17 -8
  367. package/src/internal/steering.ts +17 -0
  368. package/src/internal/storage-coordinator.ts +38 -8
  369. package/src/internal/storage-roles.ts +7 -0
  370. package/src/internal/stream-progress.ts +19 -0
  371. package/src/internal/tool-policy.ts +18 -0
  372. package/src/internal/trajectory.ts +10 -0
  373. package/src/internal/turn-outbox.ts +85 -0
  374. package/src/storage-backends/cursor-hosted.ts +22 -8
  375. package/src/storage.ts +12 -0
  376. package/src/types.ts +70 -9
  377. package/templates/agents-md/README.md +39 -0
  378. package/templates/agents-md/agent/agent.ts +8 -0
  379. package/templates/agents-md/agent/channels/github.ts +10 -0
  380. package/templates/agents-md/agent/channels/queue.ts +28 -0
  381. package/templates/agents-md/agent/channels/slack.ts +9 -0
  382. package/templates/agents-md/agent/instructions.md +39 -0
  383. package/templates/agents-md/agent/lib/collect.ts +439 -0
  384. package/templates/agents-md/agent/lib/config.ts +8 -0
  385. package/templates/agents-md/agent/lib/paths.ts +51 -0
  386. package/templates/agents-md/agent/schedules/weekly.ts +17 -0
  387. package/templates/agents-md/agent/tools/apply_agents.ts +226 -0
  388. package/templates/agents-md/evals/agents.eval.ts +135 -0
  389. package/templates/agents-md/evals/evals.config.ts +5 -0
  390. package/templates/agents-md/init.json +38 -0
  391. package/templates/agents-md/package.json +18 -0
  392. package/templates/agents-md/tsconfig.json +12 -0
  393. package/templates/code-wiki/README.md +34 -0
  394. package/templates/code-wiki/agent/agent.ts +8 -0
  395. package/templates/code-wiki/agent/channels/github.ts +144 -0
  396. package/templates/code-wiki/agent/instructions.md +39 -0
  397. package/templates/code-wiki/agent/lib/repos.ts +5 -0
  398. package/templates/code-wiki/agent/lib/wiki.ts +22 -0
  399. package/templates/code-wiki/agent/tools/apply_wiki.ts +219 -0
  400. package/templates/code-wiki/evals/evals.config.ts +5 -0
  401. package/templates/code-wiki/evals/wiki.eval.ts +132 -0
  402. package/templates/code-wiki/init.json +25 -0
  403. package/templates/code-wiki/package.json +18 -0
  404. package/templates/code-wiki/tsconfig.json +12 -0
  405. package/dist/docs/assets/chunks/@localSearchIndexroot.oqPawjiD.js +0 -1
  406. package/dist/docs/assets/guides_slack.md.C32HsdKk.js +0 -38
  407. package/dist/docs/assets/guides_slack.md.C32HsdKk.lean.js +0 -1
  408. package/dist/docs/assets/index.md.BoHaMdeZ.js +0 -5
  409. package/dist/docs/assets/reference_sessions.md.D0mIh4KK.js +0 -1
  410. package/dist/docs/assets/troubleshooting.md.Ctv3T8C2.js +0 -1
  411. package/dist/docs/design/agsh.md +0 -406
  412. package/dist/internal/deployment-scm-event-stream.d.ts +0 -116
  413. package/dist/internal/deployment-scm-event-stream.d.ts.map +0 -1
  414. package/dist/internal/deployment-scm-event-stream.js +0 -474
  415. package/dist/playground/assets/index-CF7hUDnQ.css +0 -1
  416. package/docs/design/agsh.md +0 -406
  417. package/src/internal/deployment-scm-event-stream.ts +0 -593
  418. /package/dist/docs/assets/{deployment.md.D9msOFOW.lean.js → deployment.md.MFPKqsqI.lean.js} +0 -0
  419. /package/dist/docs/assets/{reference_agent-config.md.Cp_x38Nl.lean.js → reference_agent-config.md.BHeYMgme.lean.js} +0 -0
  420. /package/dist/docs/assets/{reference_connections.md.BH8Oc0D0.lean.js → reference_connections.md.DxldvyIB.lean.js} +0 -0
  421. /package/dist/docs/assets/{reference_http-api.md.D89k1mdm.lean.js → reference_http-api.md.5zOAbV86.lean.js} +0 -0
  422. /package/dist/docs/assets/{reference_sessions.md.D0mIh4KK.lean.js → reference_sessions.md.NxFP_CAC.lean.js} +0 -0
  423. /package/dist/docs/assets/{reference_tools.md.BHeXn2id.lean.js → reference_tools.md.B84gw9Ii.lean.js} +0 -0
  424. /package/dist/docs/assets/{troubleshooting.md.Ctv3T8C2.lean.js → troubleshooting.md.DCiPBhYs.lean.js} +0 -0
@@ -1,80 +1,48 @@
1
1
  ---
2
2
  name: agentsdk-otel
3
3
  description: >-
4
- Wire OpenTelemetry export for an Agent SDK agent (defineOtel, OTLP env,
5
- traces/metrics/logs, ctx.host.otel). Use when adding observability,
6
- Datadog/Grafana/OTLP export, session/turn/tool tracing, or custom metrics.
4
+ Wire OpenTelemetry export (defineOtel, OTLP env, traces/metrics/logs,
5
+ ctx.host.otel). Use when adding collector export or custom metrics.
7
6
  ---
8
7
 
9
8
  # Agent SDK OpenTelemetry (`defineOtel`)
10
9
 
11
- Public docs index: `node_modules/@cursor/july/dist/docs/llms.txt`. A running
12
- host serves the same index at `/docs/llms.txt`.
10
+ Push traces and metrics from the serve process to an OTLP
11
+ collector. Logs are off until you opt in.
13
12
 
14
- Push session, turn, tool, and subagent traces, plus token and cost
15
- metrics, from the serve process to an OTLP collector. Logs are off
16
- until you opt in.
17
-
18
- Read [OpenTelemetry](../../docs/guides/opentelemetry.md) for the full
19
- guide, including how this joins Cursor enterprise export.
13
+ Guide: `docs/guides/opentelemetry.md`.
20
14
 
21
15
  ## Enable
22
16
 
23
17
  Any one of:
24
18
 
25
- 1. **Env.** Set `OTEL_EXPORTER_OTLP_ENDPOINT` (and optional
19
+ 1. `OTEL_EXPORTER_OTLP_ENDPOINT` (optional
26
20
  `OTEL_SERVICE_NAME`, `OTEL_EXPORTER_OTLP_HEADERS`,
27
- `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf|http/json`).
28
- Per-signal URLs work when the base URL is unset:
29
- `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` / `_METRICS_ENDPOINT` /
30
- `_LOGS_ENDPOINT`.
31
- 2. **Authored.** `agent/otel.ts`:
21
+ `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf|http/json`)
22
+ 2. `agent/otel.ts`:
32
23
 
33
24
  ```ts
34
25
  import { defineOtel } from "@cursor/july/otel";
35
26
 
36
27
  export default defineOtel({
37
28
  serviceName: "cursor",
38
- exporters: [
39
- {
40
- url: "https://otel.example.com",
41
- protocol: "http/protobuf",
42
- headers: { Authorization: "Bearer …" },
43
- },
44
- ],
29
+ exporters: [{ url: "https://otel.example.com", protocol: "http/protobuf" }],
45
30
  });
46
31
  ```
47
32
 
48
- 3. **Programmatic.** `serve(dir, { otel: { … } })`. Pass `otel: false`
49
- to disable even when env or `agent/otel.ts` are set.
50
-
51
- Multiple `exporters` fan out. Default protocol is `http/protobuf`.
52
- Use `http/json` only when the collector requires it. `grpc` is ignored.
53
-
54
- Precedence: `serve({ otel })` over `agent/otel.ts` over env.
55
-
56
- ## Signals
57
-
58
- | Signal | Default | What |
59
- | --- | --- | --- |
60
- | Traces | on | `agent_sdk.http` → `agent_sdk.session` → `agent_sdk.turn` → `agent_sdk.tool` / `agent_sdk.subagent` |
61
- | Metrics | on | `cursor.token.usage`, `cursor.tool.calls`, `cursor.cost.usage`, plus `agent_sdk.*` counts and HTTP duration |
62
- | Logs | off | Opt in with `logs: true`, `OTEL_LOGS_EXPORTER=otlp`, or `OTEL_LOG_USER_PROMPTS=1` / `OTEL_LOG_TOOL_CONTENT=1` |
33
+ 3. `serve(dir, { otel: { … } })`. `otel: false` disables env and
34
+ authored config.
63
35
 
64
- Prompt text, tool payloads, and failure text stay off the wire unless
65
- those flags are set.
36
+ | Signal | Default |
37
+ | --- | --- |
38
+ | Traces | on (`agent_sdk.http` → session → turn → tool / subagent) |
39
+ | Metrics | on (`cursor.token.usage`, `cursor.tool.calls`, `cursor.cost.usage`) |
40
+ | Logs | off (`logs: true` or `OTEL_LOGS_EXPORTER=otlp`) |
66
41
 
67
- ## Custom metrics (`ctx.host.otel`)
42
+ Prompt text and tool payloads stay off the wire unless you set
43
+ `OTEL_LOG_USER_PROMPTS` / `OTEL_LOG_TOOL_CONTENT`.
68
44
 
69
- Always present. `increment` / `record` no-op without a meter.
70
- `setAttributes` still tags the open session when a collector is
71
- attached. Prefix names with team or agent. No custom spans. Reserved
72
- metric names: `cursor.token.usage`, `cursor.tool.calls`,
73
- `cursor.cost.usage`, `agent_sdk.session.count`,
74
- `agent_sdk.turn.count`, `agent_sdk.subagent.count`,
75
- `agent_sdk.http.duration`. Reserved attributes:
76
- `cursor.conversation.id`, `agent_sdk.agent`, `agent_sdk.turn_id`,
77
- `agent_sdk.framework`.
45
+ ## Custom metrics
78
46
 
79
47
  ```ts
80
48
  ctx.host.otel.setAttributes({ "abc.ticket_id": "INC-123" });
@@ -82,20 +50,6 @@ ctx.host.otel.increment("abc.ticket.resolved");
82
50
  ctx.host.otel.record("abc.approval.duration_ms", 1420);
83
51
  ```
84
52
 
85
- ## Attributes worth joining on
86
-
87
- - `cursor.conversation.id` (session id)
88
- - `cursor.tool.name` / `cursor.tool.kind` / `cursor.tool.status`
89
- - `cursor.token.type`, `cursor.model.name`
90
- - `agent_sdk.agent`, `agent_sdk.turn_id`, `agent_sdk.call_id`, `agent_sdk.channel`
91
-
92
- Resource defaults: `service.name=cursor`, `cursor.entrypoint=sdk_ts`,
93
- `cursor.surface=unspecified`.
94
-
95
- Inbound HTTP extracts W3C `traceparent`, so a channel request parents
96
- the session span when the turn starts in that request.
97
-
98
- If another TracerProvider already owns the process (CLI / IDE), Agent
99
- SDK reuses it. Run `serve` as its own process when Agent SDK should
100
- own the destination. Conflicting `agent/otel.ts` files across mounts
101
- fail at serve start.
53
+ Prefix names with team or agent. No custom spans. Join on
54
+ `cursor.conversation.id` and `agent_sdk.agent`. Run `serve` as its
55
+ own process when Agent SDK should own the destination.
@@ -1,270 +1,149 @@
1
1
  ---
2
2
  name: agentsdk-setup-slack
3
3
  description: >-
4
- Wire Slack to an Agent SDK agent. Mint a dedicated Socket Mode app with
5
- slack create (dashboard wizard), then doctor and smoke. Use the manual
6
- manifest path only when the user owns the Slack app. Use when adding
7
- Slack to an agent.
4
+ Wire Slack to an Agent SDK agent. Mint a dedicated Socket Mode app
5
+ with slack create, then doctor and smoke. Use slack init --manual
6
+ only when the user owns the Slack app. Use when adding Slack.
8
7
  ---
9
8
 
10
9
  # Setup Slack for the Agent SDK
11
10
 
12
- Public docs index: `node_modules/@cursor/july/dist/docs/llms.txt`. A running
13
- host serves the same index at `/docs/llms.txt`.
11
+ Dedicated Socket Mode bot. `agent-sdk slack create` opens the
12
+ signed-in dashboard wizard. Tokens land in `.env.local` and as
13
+ deployment secrets. Never print token values.
14
14
 
15
- Use this skill when a human asks to wire Slack to an Agent SDK agent.
15
+ Do not generate manifests or ask anyone to paste tokens unless
16
+ they asked for `slack init --manual`.
16
17
 
17
- `slackChannel()` is a dedicated Socket Mode Slack app: the agent's own
18
- bot user. `agent-sdk slack create` opens a signed-in Cursor dashboard
19
- wizard; Slack consent and the bot name happen there. Tokens land in
20
- `.env.local` and as deployment secrets.
18
+ Existing `<PREFIX>_SLACK_BOT_TOKEN` + `_SLACK_APP_TOKEN` in
19
+ `.env.local` keep working. Do not force those onto the wizard.
21
20
 
22
- Do not generate manifests or ask anyone to paste tokens unless they
23
- asked for a custom Slack app (`slack init --manual`).
21
+ Guide: `docs/guides/slack.md`.
24
22
 
25
- Existing bots that already have `<PREFIX>_SLACK_BOT_TOKEN` and
26
- `_SLACK_APP_TOKEN` in `.env.local` keep working. Do not force them onto
27
- the wizard.
28
-
29
- ## Dedicated Slack app (Socket Mode)
30
-
31
- Goal: one dedicated bot per agent, tokens in `.env.local`, local serve
32
- without a cloud deploy. The dashboard wizard is the only first-run.
23
+ ## 1. Wizard (default)
33
24
 
34
25
  ```bash
35
26
  agent-sdk login
36
27
  agent-sdk slack create --dir .
37
28
  ```
38
29
 
39
- That opens the signed-in Cursor dashboard. Sign in as the same Cursor
40
- account that ran the command. Click **Add Slack to this agent**, approve
41
- Slack's consent screen, pick the bot name, and continue. The CLI waits
42
- and writes `<PREFIX>_SLACK_BOT_TOKEN` / `<PREFIX>_SLACK_APP_TOKEN` into
43
- `<dir>/.env.local`, then runs `doctor`. Token values never print.
44
-
45
- `--prod` provisions the prod app (default is dev). `--name` / `--icon` /
46
- `--channel-posts` prefill the wizard. `--prefix` / `--no-prefix` set the
47
- env-var names.
30
+ Same Cursor account in the browser. **Add Slack to this agent**,
31
+ approve Slack, pick the bot name. CLI writes
32
+ `<PREFIX>_SLACK_BOT_TOKEN` / `<PREFIX>_SLACK_APP_TOKEN` and runs
33
+ `doctor`.
48
34
 
49
- If Slack asks a workspace admin to approve the app, keep the CLI
50
- running. Open Slack's **Request approval** page (the CLI prints the
51
- link; the same URL is **Send a reminder** after you submit). Managed
52
- install does not file the request. After an admin approves, click
53
- **Retry** in the wizard.
35
+ Prefix is the directory basename in upper snake (`jenny`
36
+ `JENNY`, `pr-approver` `PR_APPROVER` `PR_APPROVER_SLACK_*`).
37
+ `--prefix` / `--no-prefix` override. Dev and prod are separate
38
+ apps; `--prod` is the prod app. `--name` / `--icon` /
39
+ `--channel-posts` / `--slack-team` prefill the wizard.
54
40
 
55
- `create` scaffolds `agent/channels/slack.ts` when missing. Do not paste
56
- a manifest at api.slack.com for this path. `slack init` without
57
- `--manual` hard-errors; see the manual path below for a hand-imported
58
- app.
41
+ If Slack needs workspace-admin approval, keep the CLI running.
42
+ Open the **Request approval** link it prints. Managed install
43
+ does not file the request. After approval, **Retry** in the
44
+ wizard.
59
45
 
60
- Existing tokens in `.env.local` keep working. Skip the wizard for those
61
- agents unless you want a Cursor-managed app.
46
+ `create` scaffolds `agent/channels/slack.ts` when missing:
62
47
 
63
- Then:
64
-
65
- ```bash
66
- agent-sdk slack doctor --prefix MY_AGENT
67
- agent-sdk dev .
48
+ ```ts
49
+ export default slackChannel({
50
+ envPrefix: "JENNY",
51
+ suggestedPrompts: [{ title: "Help", message: "How can you help me?" }],
52
+ });
68
53
  ```
69
54
 
70
- Confirm log: `[agent-sdk/slack] Socket Mode connected`.
71
-
72
- When tokens are missing the channel logs
73
- `channel idle reason=missing credentials need=…` and `serve` continues.
74
-
75
- Human:
76
-
77
- 1. Invite the bot to a channel
78
- 2. `@mention` it (or DM)
79
- 3. Confirm Thinking… / Working… typing and a threaded reply
80
- 4. Server logs should show correlated lines (`event_id`, `session`, `channel`, `thread_ts`):
81
- - `inbound kind=app_mention …`
82
- - `session start …`
83
- - `reply delivered via postMessage|stream …`
55
+ Return from dispatch handlers. Do not await long work in the
56
+ handler.
84
57
 
85
- The dashboard lists a first-run agent as **Not deployed yet**. Local
86
- serve does not need a hosted engine. The next `agent-sdk deploy` (or
87
- dashboard **Deploy**) injects the stored secrets.
58
+ A second `slack create` for the same agent and env overwrites the
59
+ app (same Slack app id, new manifest and tokens).
60
+ `agent-sdk slack destroy` deletes it.
88
61
 
89
- A second `slack create` for the same agent and env overwrites that Slack
90
- app. It keeps the Slack app id and replaces the manifest and tokens.
91
- `agent-sdk slack destroy` deletes the provisioned app. Tokens left in
92
- `.env.local` simply stop working.
62
+ Local serve does not need a hosted engine. Next
63
+ `agent-sdk deploy` injects the stored secrets.
93
64
 
94
- ## Manual Slack app (`slack init --manual`)
65
+ ## 2. Manual (`slack init --manual`)
95
66
 
96
- Use this when the user wants a Slack app they own at api.slack.com, not
97
- a Cursor-managed app. Not the default. Do not offer it unless they
98
- asked for a custom/unmanaged app or already have one. Update
99
- `.agent-serve/slack/setup-status.json` as you complete phases.
100
-
101
- ### Phase 0 — Generate (agent)
67
+ Only when they own the app. Preferred: Slack CLI
68
+ (`~/.slack/bin/slack`). Paste at api.slack.com if the CLI is
69
+ missing. Never `slack deploy`; Agent SDK serve owns Socket Mode.
102
70
 
103
71
  ```bash
104
72
  agent-sdk slack init --manual --dir . --name "My Agent"
73
+ # --slack-team T0123ABCD when several workspaces are logged in
74
+ # --no-install to scaffold only
105
75
  ```
106
76
 
107
- Creates:
108
-
109
- - `agent/channels/slack.ts` with `envPrefix` from the directory name
110
- - `.agent-serve/slack/manifest.{dev,prod}.json`
111
- - `.agent-serve/slack/env.example` (`<PREFIX>_SLACK_BOT_TOKEN` / `_APP_TOKEN`)
112
- - `.agent-serve/slack/setup-status.json`
113
-
114
- Use `--no-prefix` for the shared `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN`
115
- globals (single-agent only). Use `--prefix CUSTOM` to override the
116
- default prefix. `--channel-posts` subscribes the manifests to
117
- `message.channels` / `message.groups`.
118
-
119
- These files omit `settings.managed_app_settings`. Slack accepts that
120
- block only from a manager app's user token, so it belongs to
121
- `slack create`, not to a manifest a human pastes in.
122
-
123
- ### Phase 1 Create apps (human)
124
-
125
- 1. Open https://api.slack.com/apps **Create New App** → **From a manifest**
126
- 2. Paste `manifest.dev.json` create the *dev* app
127
- 3. Repeat with `manifest.prod.json` for prod
128
-
129
- Stop and ask the human to complete this gate.
130
-
131
- ### Phase 2 — Install + tokens (human)
132
-
133
- For each app:
134
-
135
- 1. **Install to Workspace** — copy Bot User OAuth Token (`xoxb-…`)
136
- 2. **Basic Information → App-Level Tokens** — Create Token with scope
137
- `connections:write` → copy (`xapp-…`)
138
-
139
- ### Phase 3 — Env (agent)
140
-
141
- Write into `.env.local` (dev app), using the keys from `env.example`:
142
-
143
- ```bash
144
- MY_AGENT_SLACK_BOT_TOKEN=xoxb-…
145
- MY_AGENT_SLACK_APP_TOKEN=xapp-…
146
- ```
147
-
148
- ```bash
149
- agent-sdk slack doctor --prefix MY_AGENT
150
- ```
151
-
152
- Stop when `app_token`, `connections_open`, `bot_token`, and `auth_test`
153
- are green.
154
-
155
- ### Phase 4 — Serve + smoke (agent + human)
77
+ Writes `agent/channels/slack.ts` (`envPrefix` from the directory),
78
+ manifests, a `.slack/` project (`get-manifest` → those JSON files),
79
+ and `env.example`. `--channel-posts` subscribes `message.channels`
80
+ / `message.groups`. If Slack CLI is logged in, this installs the
81
+ app. `--install` fails when that cannot run.
82
+
83
+ Human gates, one at a time. Stop after each.
84
+
85
+ 1. **Install the app.** If `next` starts with "Ask the user to
86
+ install this Slack app", stop and prompt them. Slack CLI: they
87
+ run `slack login --no-prompt`, send `/slackauthticket <ticket>`,
88
+ then `slack login --ticket <ticket> --challenge <code>`, then
89
+ `slack app install --environment local --team <T> --force`.
90
+ Prod: `SLACK_ENV=deployed slack app install --environment
91
+ deployed --team <T> --force`. Fallback: Create New App From a
92
+ manifest, start with `.slack/manifest.dev.json`.
93
+ 2. **Tokens.** Slack CLI leaves xoxb / xapp in that process only.
94
+ Copy the bot token from the app's OAuth page. Mint an app-level
95
+ token with `connections:write`. Put both in `.env.local` using
96
+ `env.example` names. If Slack CLI wrote `SLACK_*` to `.env`,
97
+ copy those values to the prefixed keys.
98
+ 3. **Doctor.**
99
+
100
+ ## 3. Doctor and smoke
156
101
 
157
102
  ```bash
158
- agent-sdk dev .
103
+ agent-sdk slack doctor --prefix JENNY
104
+ agent-sdk serve --dir . --dev
159
105
  ```
160
106
 
161
- Confirm log: `[agent-sdk/slack] Socket Mode connected`.
107
+ Green: `app_token`, `connections_open`, `bot_token`, `auth_test`.
108
+ Log: `[agent-sdk/slack] Socket Mode connected`. Missing tokens
109
+ idle the channel; `serve` continues.
162
110
 
163
- When tokens are missing the channel logs
164
- `channel idle reason=missing credentials need=…` and `serve` continues.
111
+ 1. Invite the bot
112
+ 2. `@mention` or DM
113
+ 3. Thinking / Working, then a threaded reply
114
+ 4. Logs: `inbound kind=app_mention`, `session start`,
115
+ `reply delivered via postMessage|stream`
165
116
 
166
- Human:
117
+ ## Watch channels (opt-in)
167
118
 
168
- 1. Invite the bot to a channel
169
- 2. `@mention` it (or DM)
170
- 3. Confirm Thinking… / Working… typing and a threaded reply
171
- 4. Server logs should show correlated lines (`event_id`, `session`, `channel`, `thread_ts`):
172
- - `inbound kind=app_mention …`
173
- - `session start …`
174
- - `reply delivered via postMessage|stream …`
175
-
176
- ## Features (defaults ON)
177
-
178
- - Chat streaming (`chat.startStream` / `appendStream` / `stopStream`) with postMessage fallback
179
- - Thinking / task cards for tool calls
180
- - `assistant.threads.setStatus` with rotating `loading_messages`
181
- - Thread title + suggested prompts
182
- - `markdown_text` when supported
183
- - Handler `message` / `workspaceFiles` / `cloud` passthrough for PR demos
184
-
185
- If a Slack API is unavailable (`method_not_found` / `missing_scope`), the pack falls back to postMessage + setStatus.
186
-
187
- ## Engagement: mentions by default, channel watch opt-in
188
-
189
- The pack dispatches only on `app_mention` + DMs unless told otherwise:
190
- summoned, never proactive. To watch channels (dispatch on new posts without
191
- a mention), opt in explicitly:
119
+ Default is mentions + DMs only. To wake on new posts:
192
120
 
193
121
  ```ts
194
122
  export default slackChannel({
123
+ envPrefix: "JENNY",
195
124
  engagement: {
196
125
  channelPosts: {
197
- allow: ["#issues-cursor-desktop"], // use ["*"] for every joined channel
198
- posts: "top-level", // default — thread replies never dispatch
199
- debounceMs: 15_000, // optional: edits settle, deletes cancel
126
+ allow: ["#alerts"], // ["*"] for every joined channel
127
+ posts: "top-level",
200
128
  },
201
129
  },
202
130
  onChannelPost: async (ctx, message) => ({}), // null = skip
203
131
  });
204
132
  ```
205
133
 
206
- Pass `--channel-posts` on `slack create` or `slack init --manual` so the
207
- app subscribes to `message.channels` / `message.groups`. Invite the bot to
208
- each watched channel. Posts mentioning the bot stay on the
209
- `app_mention` path; watch sessions reuse the thread-scoped principal with an
210
- `engagement: "channel_post"` attribute, so a later mention continues the
211
- thread. `engagement.mentions` / `engagement.directMessages` can be set to
212
- `false` to turn those surfaces off.
134
+ Pass `--channel-posts` on `create` / `init --manual`. Invite the
135
+ bot to each watched channel. Mentions stay on `app_mention`; a
136
+ later mention continues the watch thread.
213
137
 
214
- ## Tool approvals over Slack (opt-in HITL)
215
-
216
- Tools with `needsApproval` park until a human approves or denies. To route
217
- that through Slack, set `toolApprovals: true` on `slackChannel`. It posts
218
- Block Kit Approve/Deny cards and routes Socket Mode `interactive` clicks
219
- back to the parked call:
138
+ ## Approvals (opt-in)
220
139
 
221
140
  ```ts
222
141
  export default slackChannel({
223
- credentials: { /* … */ },
142
+ envPrefix: "JENNY",
224
143
  toolApprovals: true,
225
144
  });
226
145
  ```
227
146
 
228
- Requirements and caveats:
229
-
230
- - The Slack app needs **interactivity** enabled. The wizard turns this
231
- on when `toolApprovals` is in play; `buildSlackManifest({ interactivity: true })`
232
- is the same switch for existing apps.
233
- - Composing by hand: spread `buildToolApprovalEvents({ credentials })` into
234
- `events` **and** set `interactivity: true` on the channel.
235
- - Cards show **redacted / truncated** args (Block Kit limits); execution
236
- uses the full validated input. Review sensitive tools in the playground
237
- when args may exceed the card.
238
- - Approvals only exist for `execution: "server"` tools on the `local`
239
- runtime, and parked calls do not survive a host restart.
240
- - In `--dev` (loopback) or `--allow-anonymous` (trusted shared host), the
241
- playground can also list Slack sessions and Approve/Deny
242
- their parked tools (audit records the HTTP caller). Production and
243
- bearer-auth hosts stay strict: Slack resolve must come from Slack
244
- interactivity or a matching principal.
245
-
246
- ## Notes
247
-
248
- - Dev and prod are **separate Slack apps** (separate tokens).
249
- - Socket Mode is outbound only. No Events HTTP / Request URL path.
250
- - Do not `await waitForCompletion()` inside Slack dispatch handlers. The pack uses `waitUntil`.
251
- - Do not share one token pair across multiple agents in the same process.
252
-
253
- ## CLI reference
254
-
255
- Wizard tooling is `create` / `destroy` / `icon` / `doctor`. Manual is
256
- `init --manual` / `manifest` / `doctor`. `slack setup` prints this
257
- guide. `slack init` hard-errors unless `--manual`.
258
-
259
- ```bash
260
- agent-sdk slack setup
261
- agent-sdk slack create --dir . # dashboard wizard (dev app)
262
- agent-sdk slack create --dir . --prod # prod app
263
- agent-sdk slack create --dir . --slack-team T0123ABCD
264
- agent-sdk slack destroy --dir . [--prod] [--slack-team T0123ABCD]
265
- agent-sdk slack init --manual --dir . --name "My Agent"
266
- agent-sdk slack init --manual --dir . --no-prefix
267
- agent-sdk slack init --manual --dir . --channel-posts
268
- agent-sdk slack manifest --env both
269
- agent-sdk slack doctor --prefix MY_AGENT
270
- ```
147
+ Wizard enables interactivity when this is set. Server tools on
148
+ `local` only. Parked calls die on host restart. Cards truncate
149
+ args; execution uses the full input.
@@ -140,7 +140,7 @@ Usage:
140
140
  ${CLI} deploy [--dir <path>] [--slug <slug> | --all] [--team <id>] [--json]
141
141
  [--no-wait] [--repo <url>] [--ref <ref>]
142
142
  [--path <agentPath>] [--cursor-events-repo <owner/name>]...
143
- [--allow-domain <domain>]...
143
+ [--allow-domain <domain>]... [--multi-tenant]
144
144
  ${CLI} manifest [--dir <path>] [--json]
145
145
  ${CLI} deployments [--team <id>] [--json]
146
146
  ${CLI} deployment <slug> [--team <id>] [--json]
@@ -268,6 +268,8 @@ Commands:
268
268
  (flags always win). When --dir is a multi-agent parent,
269
269
  pick one interactively, or pass --slug / --all. First deploy
270
270
  of a slug prints the alias token exactly once — save it.
271
+ --multi-tenant adds a release to an existing Cursor-managed
272
+ product (v2 only); it cannot create a new multi-tenant app.
271
273
  deployments List the team's deployments (slug, status, generation, kind).
272
274
  deployment Show one deployment in full (status, lastError, engine info).
273
275
  stop Stop a deployment and wait until it reports stopped.
@@ -430,6 +432,9 @@ Options:
430
432
  --allow-domain deploy: egress domain the engine pod may reach
431
433
  (repeatable; unioned with hosting.egressDomains from the
432
434
  agent manifest). Repo-backed deploys only.
435
+ --multi-tenant deploy: add a release to an existing Cursor-managed
436
+ (multi-tenant) product. architecture v2 only. Cannot
437
+ create a new multi-tenant application.
433
438
  --from-argv secrets set: allow NAME=VALUE on argv (leaks into shell
434
439
  history and agent-captured terminals). Default is names
435
440
  only with a hidden prompt or piped stdin.
@@ -439,6 +444,8 @@ Options:
439
444
  GITHUB_WEBHOOK_SECRET). github: --events overrides the
440
445
  derived webhook event list.
441
446
  --install github: install the cli/gh-webhook extension if missing.
447
+ slack init --manual: require Slack CLI app install.
448
+ --no-install slack init --manual: skip Slack CLI app install.
442
449
  --action github replay: event action (e.g. opened, synchronize).
443
450
  --conclusion github replay: CI conclusion (check_run/suite/status).
444
451
  --comment github replay: comment body for comment events.
@@ -557,6 +564,7 @@ async function main(argv: string[]): Promise<number> {
557
564
  secret: { type: "string" },
558
565
  channel: { type: "string", multiple: true },
559
566
  install: { type: "boolean", default: false },
567
+ "no-install": { type: "boolean", default: false },
560
568
  action: { type: "string" },
561
569
  conclusion: { type: "string" },
562
570
  context: { type: "string" },
@@ -570,6 +578,7 @@ async function main(argv: string[]): Promise<number> {
570
578
  all: { type: "boolean", default: false },
571
579
  "cursor-events-repo": { type: "string", multiple: true },
572
580
  "allow-domain": { type: "string", multiple: true },
581
+ "multi-tenant": { type: "boolean", default: false },
573
582
  "from-argv": { type: "boolean", default: false },
574
583
  strict: { type: "boolean", default: false },
575
584
  junit: { type: "string" },
@@ -622,6 +631,8 @@ async function main(argv: string[]): Promise<number> {
622
631
  icon: values.icon,
623
632
  force: values.force,
624
633
  manual: values.manual,
634
+ install: values.install,
635
+ noInstall: values["no-install"],
625
636
  iconSource: positionals[0] === "icon" ? positionals[1] : undefined,
626
637
  });
627
638
  }
@@ -757,6 +768,7 @@ async function main(argv: string[]): Promise<number> {
757
768
  ...(values["allow-domain"] === undefined
758
769
  ? {}
759
770
  : { allowDomains: values["allow-domain"] }),
771
+ multiTenant: values["multi-tenant"] === true,
760
772
  });
761
773
  }
762
774
 
@@ -7,6 +7,7 @@ export const DEPLOYMENTS_CHANNEL_KIND = "deployments";
7
7
  export const DEPLOYMENT_EVENT_TYPES = [
8
8
  "deployment.created",
9
9
  "deployment.succeeded",
10
+ "deployment.failed",
10
11
  ] as const;
11
12
  export type DeploymentEventType = (typeof DEPLOYMENT_EVENT_TYPES)[number];
12
13