@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
@@ -3,6 +3,8 @@
3
3
  */
4
4
  export const SLACK_APPROVE_ACTION_ID = "agent_serve_approve";
5
5
  export const SLACK_DENY_ACTION_ID = "agent_serve_deny";
6
+ export const SLACK_AUTH_CONNECTED_ACTION_ID = "agent_serve_auth_connected";
7
+ export const SLACK_AUTH_CANCEL_ACTION_ID = "agent_serve_auth_cancel";
6
8
  export function encodeApprovalActionValue(payload) {
7
9
  return JSON.stringify(payload);
8
10
  }
@@ -35,6 +37,24 @@ export function decisionFromActionId(actionId) {
35
37
  }
36
38
  return null;
37
39
  }
40
+ export function decisionFromAuthActionId(actionId) {
41
+ if (actionId === SLACK_AUTH_CONNECTED_ACTION_ID) {
42
+ return "approve";
43
+ }
44
+ if (actionId === SLACK_AUTH_CANCEL_ACTION_ID) {
45
+ return "deny";
46
+ }
47
+ return null;
48
+ }
49
+ export function authThreadStatus(connection) {
50
+ const prefix = "Waiting for ";
51
+ const suffix = " auth…";
52
+ const budget = 50 - prefix.length - suffix.length;
53
+ const name = connection.length <= budget
54
+ ? connection
55
+ : `${connection.slice(0, Math.max(0, budget - 1))}…`;
56
+ return `${prefix}${name}${suffix}`;
57
+ }
38
58
  const REDACTED = "[REDACTED]";
39
59
  const SENSITIVE_KEY = /(?:pass(?:word|wd)?|secret|token|api[_-]?key|authorization|credential|private[_-]?key|access[_-]?key)/i;
40
60
  /** Strip likely secrets before args are shown in Slack cards. */
@@ -140,6 +160,72 @@ export function buildApprovalBlocks(args) {
140
160
  },
141
161
  ];
142
162
  }
163
+ export function buildAuthBlocks(args) {
164
+ const value = encodeApprovalActionValue({
165
+ sessionId: args.sessionId,
166
+ callId: args.callId,
167
+ });
168
+ const label = args.connection.length > 20
169
+ ? `Authorize ${args.connection.slice(0, 17)}…`
170
+ : `Authorize ${args.connection}`;
171
+ return [
172
+ {
173
+ type: "header",
174
+ text: {
175
+ type: "plain_text",
176
+ text: "MCP authorization needed",
177
+ emoji: true,
178
+ },
179
+ },
180
+ {
181
+ type: "section",
182
+ text: {
183
+ type: "mrkdwn",
184
+ text: `Connect \`${args.connection}\` so \`${args.toolName}\` can continue.`,
185
+ },
186
+ },
187
+ {
188
+ type: "actions",
189
+ block_id: `auth_${args.callId}`.slice(0, 255),
190
+ elements: [
191
+ {
192
+ type: "button",
193
+ text: { type: "plain_text", text: label, emoji: true },
194
+ url: args.authUrl,
195
+ },
196
+ {
197
+ type: "button",
198
+ action_id: SLACK_AUTH_CONNECTED_ACTION_ID,
199
+ text: { type: "plain_text", text: "Connected", emoji: true },
200
+ style: "primary",
201
+ value,
202
+ },
203
+ {
204
+ type: "button",
205
+ action_id: SLACK_AUTH_CANCEL_ACTION_ID,
206
+ text: { type: "plain_text", text: "Cancel", emoji: true },
207
+ style: "danger",
208
+ value,
209
+ },
210
+ ],
211
+ },
212
+ ];
213
+ }
214
+ export function buildResolvedAuthBlocks(args) {
215
+ const verb = args.decision === "approve" ? "Connected" : "Cancelled";
216
+ const by = args.byUserId === undefined || args.byUserId === ""
217
+ ? ""
218
+ : ` by <@${args.byUserId}>`;
219
+ return [
220
+ {
221
+ type: "section",
222
+ text: {
223
+ type: "mrkdwn",
224
+ text: `*${verb}*${by} — \`${args.connection}\``,
225
+ },
226
+ },
227
+ ];
228
+ }
143
229
  export function buildResolvedApprovalBlocks(args) {
144
230
  const verb = args.decision === "approve" ? "Approved" : "Denied";
145
231
  const by = args.byUserId === undefined || args.byUserId === ""
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Official Slack CLI project files for `slack init --manual`.
3
+ *
4
+ * `.slack/` is the committed Slack CLI project: hook, manifests, hooks.json.
5
+ * Agent SDK serve owns the socket; do not `slack deploy` / `slack run`.
6
+ */
7
+ export declare const SLACK_CLI_HOME_BIN = ".slack/bin/slack";
8
+ export declare const SLACK_CLI_GET_MANIFEST = "node .slack/get-manifest.mjs";
9
+ export type SlackCliEnvironment = "local" | "deployed";
10
+ /** Official Slack CLI, if present. `SLACK_CLI` overrides. */
11
+ export declare function detectSlackCli(env?: NodeJS.ProcessEnv): string | undefined;
12
+ /** Hook + manifests under `.slack/`. Merge hooks.json; keep existing config. */
13
+ export declare function writeSlackCliProject(rootDir: string, manifests: ReadonlyArray<{
14
+ name: string;
15
+ contents: string;
16
+ }>): Promise<string[]>;
17
+ export declare function parseSlackAuthTeams(text: string): string[];
18
+ export declare function readSlackCliAppId(dir: string, environment: SlackCliEnvironment, team?: string): Promise<string | undefined>;
19
+ //# sourceMappingURL=cli-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-project.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/cli-project.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AAErD,eAAO,MAAM,sBAAsB,iCAAiC,CAAC;AAErE,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,UAAU,CAAC;AAkCvD,6DAA6D;AAC7D,wBAAgB,cAAc,CAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,SAAS,CAQpB;AAED,gFAAgF;AAChF,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,GAC3D,OAAO,CAAC,MAAM,EAAE,CAAC,CAmCnB;AAkFD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAS1D;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,mBAAmB,EAChC,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAS7B"}
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Official Slack CLI project files for `slack init --manual`.
3
+ *
4
+ * `.slack/` is the committed Slack CLI project: hook, manifests, hooks.json.
5
+ * Agent SDK serve owns the socket; do not `slack deploy` / `slack run`.
6
+ */
7
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
+ return new (P || (P = Promise))(function (resolve, reject) {
10
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14
+ });
15
+ };
16
+ import { randomUUID } from "node:crypto";
17
+ import { existsSync } from "node:fs";
18
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
19
+ import { homedir } from "node:os";
20
+ import { join } from "node:path";
21
+ export const SLACK_CLI_HOME_BIN = ".slack/bin/slack";
22
+ export const SLACK_CLI_GET_MANIFEST = "node .slack/get-manifest.mjs";
23
+ const TEAM_ID_RE = /\(Team ID: ([TE][A-Z0-9]+)\)/g;
24
+ const GET_MANIFEST_JS = `import { readFileSync } from "node:fs";
25
+ import { dirname, join } from "node:path";
26
+ import { fileURLToPath } from "node:url";
27
+
28
+ const here = dirname(fileURLToPath(import.meta.url));
29
+
30
+ function target() {
31
+ const env = process.env.SLACK_ENV ?? process.env.SLACK_APP_ENVIRONMENT;
32
+ if (env === "deployed" || env === "prod") return "manifest.prod.json";
33
+ if (env === "local" || env === "dev") return "manifest.dev.json";
34
+ try {
35
+ const raw = readFileSync(join(here, "cli-environment"), "utf8").trim();
36
+ if (raw === "deployed" || raw === "prod") return "manifest.prod.json";
37
+ } catch {
38
+ // default local
39
+ }
40
+ return "manifest.dev.json";
41
+ }
42
+
43
+ process.stdout.write(readFileSync(join(here, target()), "utf8"));
44
+ `;
45
+ function isEnoent(error) {
46
+ return (error instanceof Error &&
47
+ "code" in error &&
48
+ error.code === "ENOENT");
49
+ }
50
+ /** Official Slack CLI, if present. `SLACK_CLI` overrides. */
51
+ export function detectSlackCli(env = process.env) {
52
+ var _a, _b;
53
+ const override = env.SLACK_CLI;
54
+ if (override !== undefined && override !== "") {
55
+ return override;
56
+ }
57
+ const home = (_b = (_a = env.HOME) !== null && _a !== void 0 ? _a : env.USERPROFILE) !== null && _b !== void 0 ? _b : homedir();
58
+ const homeBin = join(home, SLACK_CLI_HOME_BIN);
59
+ return existsSync(homeBin) ? homeBin : undefined;
60
+ }
61
+ /** Hook + manifests under `.slack/`. Merge hooks.json; keep existing config. */
62
+ export function writeSlackCliProject(rootDir, manifests) {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ const slackDir = join(rootDir, ".slack");
65
+ yield mkdir(slackDir, { recursive: true });
66
+ const created = [];
67
+ yield writeFile(join(slackDir, "get-manifest.mjs"), GET_MANIFEST_JS);
68
+ created.push(".slack/get-manifest.mjs");
69
+ for (const file of manifests) {
70
+ yield writeFile(join(slackDir, file.name), file.contents);
71
+ created.push(`.slack/${file.name}`);
72
+ }
73
+ if (yield upsertGetManifestHook(slackDir)) {
74
+ created.push(".slack/hooks.json");
75
+ }
76
+ if (yield writeIfMissing(join(slackDir, "config.json"), `${JSON.stringify({
77
+ manifest: { source: "local" },
78
+ project_id: randomUUID(),
79
+ }, null, 2)}\n`)) {
80
+ created.push(".slack/config.json");
81
+ }
82
+ if (yield mergeGitignore(join(slackDir, ".gitignore"))) {
83
+ created.push(".slack/.gitignore");
84
+ }
85
+ return created;
86
+ });
87
+ }
88
+ function upsertGetManifestHook(slackDir) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ var _a;
91
+ const path = join(slackDir, "hooks.json");
92
+ let existing;
93
+ try {
94
+ const parsed = JSON.parse(yield readFile(path, "utf8"));
95
+ if (parsed === null ||
96
+ typeof parsed !== "object" ||
97
+ Array.isArray(parsed)) {
98
+ throw new Error(".slack/hooks.json is not a JSON object");
99
+ }
100
+ existing = parsed;
101
+ }
102
+ catch (error) {
103
+ if (!isEnoent(error)) {
104
+ throw error;
105
+ }
106
+ yield writeFile(path, `${JSON.stringify({ hooks: { "get-manifest": SLACK_CLI_GET_MANIFEST } }, null, 2)}\n`);
107
+ return true;
108
+ }
109
+ const hooks = (_a = existing.hooks) !== null && _a !== void 0 ? _a : {};
110
+ if (hooks["get-manifest"] === SLACK_CLI_GET_MANIFEST) {
111
+ return false;
112
+ }
113
+ hooks["get-manifest"] = SLACK_CLI_GET_MANIFEST;
114
+ existing.hooks = hooks;
115
+ yield writeFile(path, `${JSON.stringify(existing, null, 2)}\n`);
116
+ return true;
117
+ });
118
+ }
119
+ function writeIfMissing(path, contents) {
120
+ return __awaiter(this, void 0, void 0, function* () {
121
+ try {
122
+ yield writeFile(path, contents, { flag: "wx" });
123
+ return true;
124
+ }
125
+ catch (error) {
126
+ if (error instanceof Error &&
127
+ "code" in error &&
128
+ error.code === "EEXIST") {
129
+ return false;
130
+ }
131
+ throw error;
132
+ }
133
+ });
134
+ }
135
+ function mergeGitignore(path) {
136
+ return __awaiter(this, void 0, void 0, function* () {
137
+ const lines = ["apps.dev.json", "cache/", "cli-environment"];
138
+ let existing = "";
139
+ try {
140
+ existing = yield readFile(path, "utf8");
141
+ }
142
+ catch (error) {
143
+ if (!isEnoent(error)) {
144
+ throw error;
145
+ }
146
+ yield writeFile(path, `${lines.join("\n")}\n`);
147
+ return true;
148
+ }
149
+ const have = new Set(existing
150
+ .split(/\r?\n/)
151
+ .map((line) => line.trim())
152
+ .filter((line) => line !== ""));
153
+ const missing = lines.filter((line) => !have.has(line));
154
+ if (missing.length === 0) {
155
+ return false;
156
+ }
157
+ const prefix = existing === "" || existing.endsWith("\n") ? existing : `${existing}\n`;
158
+ yield writeFile(path, `${prefix}${missing.join("\n")}\n`);
159
+ return true;
160
+ });
161
+ }
162
+ export function parseSlackAuthTeams(text) {
163
+ const ids = [];
164
+ for (const match of text.matchAll(TEAM_ID_RE)) {
165
+ const id = match[1];
166
+ if (id !== undefined && !ids.includes(id)) {
167
+ ids.push(id);
168
+ }
169
+ }
170
+ return ids;
171
+ }
172
+ export function readSlackCliAppId(dir, environment, team) {
173
+ return __awaiter(this, void 0, void 0, function* () {
174
+ const apps = yield loadAppMap(dir, environment);
175
+ if (apps === undefined) {
176
+ return undefined;
177
+ }
178
+ if (team !== undefined) {
179
+ return appIdOf(apps[team]);
180
+ }
181
+ return firstAppId(apps);
182
+ });
183
+ }
184
+ function loadAppMap(dir, environment) {
185
+ return __awaiter(this, void 0, void 0, function* () {
186
+ if (environment === "local") {
187
+ return readJson(join(dir, ".slack/apps.dev.json"));
188
+ }
189
+ const deployed = yield readJson(join(dir, ".slack/apps.json"));
190
+ if (deployed === undefined) {
191
+ return undefined;
192
+ }
193
+ const apps = deployed.apps;
194
+ if (apps !== undefined && typeof apps === "object" && apps !== null) {
195
+ return apps;
196
+ }
197
+ return deployed;
198
+ });
199
+ }
200
+ function firstAppId(value) {
201
+ for (const entry of Object.values(value)) {
202
+ const id = appIdOf(entry);
203
+ if (id !== undefined) {
204
+ return id;
205
+ }
206
+ }
207
+ return undefined;
208
+ }
209
+ function appIdOf(entry) {
210
+ if (entry === undefined || entry === null || typeof entry !== "object") {
211
+ return undefined;
212
+ }
213
+ const appId = entry.app_id;
214
+ if (typeof appId === "string" && appId.startsWith("A")) {
215
+ return appId;
216
+ }
217
+ return undefined;
218
+ }
219
+ function readJson(path) {
220
+ return __awaiter(this, void 0, void 0, function* () {
221
+ try {
222
+ const parsed = JSON.parse(yield readFile(path, "utf8"));
223
+ if (parsed === null ||
224
+ typeof parsed !== "object" ||
225
+ Array.isArray(parsed)) {
226
+ return undefined;
227
+ }
228
+ return parsed;
229
+ }
230
+ catch (_a) {
231
+ return undefined;
232
+ }
233
+ });
234
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAe3D,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAMpB,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GACpC,cAAc,CAEhB;AAED,qCAAqC;AACrC,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GACpC,OAAO,CAET;AAED,6EAA6E;AAC7E,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAS7E;AA0BD,6EAA6E;AAC7E,wBAAgB,sBAAsB,CACpC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,EACnC,MAAM,CAAC,EAAE,iBAAiB,GACzB,mBAAmB,CAQrB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,EACnC,MAAM,CAAC,EAAE,iBAAiB,GACzB,mBAAmB,CAWrB;AAED,eAAO,MAAM,mBAAmB,EAAE,mBACR,CAAC;AAC3B,eAAO,MAAM,sBAAsB,EAAE,mBACX,CAAC;AAC3B,eAAO,MAAM,oBAAoB,EAAE,mBACL,CAAC;AAE/B,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC1C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mEAAmE;IACnE,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,QAAQ,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,yBAA8B,GACtC,oBAAoB,CAAC,iBAAiB,CAAC,CA8YzC"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAuB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAehF,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAMpB,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GACpC,cAAc,CAEhB;AAED,qCAAqC;AACrC,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GACpC,OAAO,CAET;AAED,6EAA6E;AAC7E,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAS7E;AA0BD,6EAA6E;AAC7E,wBAAgB,sBAAsB,CACpC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,EACnC,MAAM,CAAC,EAAE,iBAAiB,GACzB,mBAAmB,CAQrB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,EACnC,MAAM,CAAC,EAAE,iBAAiB,GACzB,mBAAmB,CAWrB;AAED,eAAO,MAAM,mBAAmB,EAAE,mBACR,CAAC;AAC3B,eAAO,MAAM,sBAAsB,EAAE,mBACX,CAAC;AAC3B,eAAO,MAAM,oBAAoB,EAAE,mBACL,CAAC;AAE/B,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC1C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mEAAmE;IACnE,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,QAAQ,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,yBAA8B,GACtC,oBAAoB,CAAC,iBAAiB,CAAC,CA2azC"}
@@ -114,13 +114,87 @@ export function buildDefaultEvents(options = {}) {
114
114
  status: "",
115
115
  });
116
116
  if (!result.ok) {
117
- getLog().warn("assistant.threads.setStatus not-ok", {
117
+ getLog().warn("slack setStatus not-ok", {
118
118
  error: result.error,
119
119
  channel: channelId,
120
120
  thread_ts: threadTs,
121
121
  });
122
122
  }
123
123
  });
124
+ /**
125
+ * Deliver assistant text to the bound Slack thread. Used by a stop-reason
126
+ * `message.completed` and by `turn.completed` when the last assistant
127
+ * block was `finishReason: "tool_call"` (answer then `tag_artifact`,
128
+ * etc.) so the playground result still reaches Slack.
129
+ */
130
+ const deliverReplyText = (args) => __awaiter(this, void 0, void 0, function* () {
131
+ var _a, _b;
132
+ const log = getLog();
133
+ const state = args.channel.state;
134
+ if (state.channelId === null ||
135
+ state.threadTs === null ||
136
+ args.text === "") {
137
+ return false;
138
+ }
139
+ if (state.lastPostedText === args.text) {
140
+ // Stream append sets this watermark while chat.stopStream is still
141
+ // pending. Treat a match as "already on Slack", not "already finalized".
142
+ const streamTs = state.streamTs;
143
+ if (streamTs !== null && streamTs !== "") {
144
+ const canStream = streaming && state.streamingUnavailable !== true;
145
+ if (canStream) {
146
+ yield strategy.finalize({
147
+ channel: args.channel,
148
+ channelId: (_a = state.streamChannelId) !== null && _a !== void 0 ? _a : state.channelId,
149
+ text: args.text,
150
+ sessionId: args.sessionId,
151
+ });
152
+ }
153
+ else {
154
+ yield strategy.cleanupOrphan({ channel: args.channel });
155
+ }
156
+ }
157
+ return true;
158
+ }
159
+ const canStream = streaming && state.streamingUnavailable !== true;
160
+ if (canStream) {
161
+ const { delivered } = yield strategy.finalize({
162
+ channel: args.channel,
163
+ channelId: (_b = state.streamChannelId) !== null && _b !== void 0 ? _b : state.channelId,
164
+ text: args.text,
165
+ sessionId: args.sessionId,
166
+ });
167
+ if (delivered) {
168
+ return true;
169
+ }
170
+ }
171
+ try {
172
+ const posted = yield postMessage({
173
+ botToken,
174
+ channel: state.channelId,
175
+ text: args.text,
176
+ threadTs: state.threadTs,
177
+ });
178
+ state.lastPostedText = args.text;
179
+ state.lastBotMessageTs = posted.ts;
180
+ log.info("reply delivered via postMessage", {
181
+ channel: state.channelId,
182
+ thread_ts: state.threadTs,
183
+ message_ts: posted.ts,
184
+ session: args.sessionId,
185
+ chars: args.text.length,
186
+ });
187
+ return true;
188
+ }
189
+ catch (error) {
190
+ log.error(`postMessage failed: ${error instanceof Error ? error.message : String(error)}`, {
191
+ channel: state.channelId,
192
+ thread_ts: state.threadTs,
193
+ session: args.sessionId,
194
+ });
195
+ return false;
196
+ }
197
+ });
124
198
  return {
125
199
  "turn.started"(event, channel) {
126
200
  return __awaiter(this, void 0, void 0, function* () {
@@ -150,18 +224,6 @@ export function buildDefaultEvents(options = {}) {
150
224
  status: "Working…",
151
225
  loadingMessages,
152
226
  });
153
- // Retry streaming each turn unless a prior call proved the feature
154
- // unsupported for this workspace/app. Thinking stays on setStatus
155
- // (Cursor-account proxy pins agent username/icon on that method).
156
- if (!streaming || state.streamingUnavailable === true) {
157
- return;
158
- }
159
- yield strategy.start({
160
- channel,
161
- channelId: state.channelId,
162
- threadTs: state.threadTs,
163
- sessionId: event.sessionId,
164
- });
165
227
  });
166
228
  },
167
229
  "message.appended"(event, channel) {
@@ -170,18 +232,14 @@ export function buildDefaultEvents(options = {}) {
170
232
  if (!streaming || channel.state.streamingUnavailable === true) {
171
233
  return;
172
234
  }
173
- const streamTs = channel.state.streamTs;
174
235
  const channelId = (_a = channel.state.streamChannelId) !== null && _a !== void 0 ? _a : channel.state.channelId;
175
- if (streamTs === null ||
176
- streamTs === "" ||
177
- channelId === null ||
178
- channelId === "") {
236
+ const threadTs = channel.state.threadTs;
237
+ if (channelId === null || channelId === "" || threadTs === null) {
179
238
  return;
180
239
  }
181
240
  yield strategy.append({
182
241
  channel,
183
242
  channelId,
184
- streamTs,
185
243
  text: event.data.text,
186
244
  sessionId: event.sessionId,
187
245
  });
@@ -235,19 +293,18 @@ export function buildDefaultEvents(options = {}) {
235
293
  if (strategy.inlineToolSteps &&
236
294
  thinkingSteps &&
237
295
  streaming &&
238
- channel.state.streamingUnavailable !== true &&
239
- channel.state.streamTs !== null &&
240
- channel.state.streamTs !== "") {
296
+ channel.state.streamingUnavailable !== true) {
241
297
  const channelId = (_a = channel.state.streamChannelId) !== null && _a !== void 0 ? _a : channel.state.channelId;
242
- if (channelId !== null && channelId !== "") {
298
+ const threadTs = channel.state.threadTs;
299
+ if (channelId !== null && channelId !== "" && threadTs !== null) {
243
300
  const chunks = buildTaskChunksForCalls(event.data.calls, "in_progress");
244
- const result = yield appendChatStream({
245
- botToken,
246
- channel: channelId,
247
- ts: channel.state.streamTs,
301
+ const streamed = yield strategy.appendChunks({
302
+ channel,
303
+ channelId,
248
304
  chunks,
305
+ sessionId: event.sessionId,
249
306
  });
250
- if (result.ok) {
307
+ if (streamed) {
251
308
  if (channel.state.channelId !== null &&
252
309
  channel.state.threadTs !== null) {
253
310
  yield setThreadStatus({
@@ -301,8 +358,7 @@ export function buildDefaultEvents(options = {}) {
301
358
  },
302
359
  "message.completed"(event, channel) {
303
360
  return __awaiter(this, void 0, void 0, function* () {
304
- var _a, _b, _c;
305
- const log = getLog();
361
+ var _a;
306
362
  if (event.data.finishReason === "tool_call") {
307
363
  channel.state.pendingToolCallMessage = (_a = firstNonEmptyLine(event.data.text)) !== null && _a !== void 0 ? _a : null;
308
364
  return;
@@ -315,58 +371,15 @@ export function buildDefaultEvents(options = {}) {
315
371
  // Empty final text: still close any open stream / clear the skeleton
316
372
  // and clear typing.
317
373
  if (event.data.text === "") {
318
- if (state.streamTs !== null && state.streamTs !== "") {
319
- yield strategy.finalizeEmpty({
320
- channel,
321
- channelId: (_b = state.streamChannelId) !== null && _b !== void 0 ? _b : state.channelId,
322
- streamTs: state.streamTs,
323
- });
324
- channel.state.streamTs = null;
325
- }
374
+ yield strategy.finalizeEmpty({ channel });
326
375
  yield clearWorkingStatus(state.channelId, state.threadTs);
327
376
  return;
328
377
  }
329
- const canStream = streaming &&
330
- state.streamingUnavailable !== true &&
331
- state.streamTs !== null &&
332
- state.streamTs !== "";
333
- if (canStream && state.streamTs !== null) {
334
- const { delivered } = yield strategy.finalize({
335
- channel,
336
- channelId: (_c = state.streamChannelId) !== null && _c !== void 0 ? _c : state.channelId,
337
- streamTs: state.streamTs,
338
- text: event.data.text,
339
- sessionId: event.sessionId,
340
- });
341
- if (delivered) {
342
- yield clearWorkingStatus(state.channelId, state.threadTs);
343
- return;
344
- }
345
- }
346
- try {
347
- const posted = yield postMessage({
348
- botToken,
349
- channel: state.channelId,
350
- text: event.data.text,
351
- threadTs: state.threadTs,
352
- });
353
- channel.state.lastPostedText = event.data.text;
354
- channel.state.lastBotMessageTs = posted.ts;
355
- log.info("reply delivered via postMessage", {
356
- channel: state.channelId,
357
- thread_ts: state.threadTs,
358
- message_ts: posted.ts,
359
- session: event.sessionId,
360
- chars: event.data.text.length,
361
- });
362
- }
363
- catch (error) {
364
- log.error(`postMessage failed: ${error instanceof Error ? error.message : String(error)}`, {
365
- channel: state.channelId,
366
- thread_ts: state.threadTs,
367
- session: event.sessionId,
368
- });
369
- }
378
+ yield deliverReplyText({
379
+ channel,
380
+ text: event.data.text,
381
+ sessionId: event.sessionId,
382
+ });
370
383
  yield clearWorkingStatus(state.channelId, state.threadTs);
371
384
  });
372
385
  },
@@ -379,6 +392,23 @@ export function buildDefaultEvents(options = {}) {
379
392
  channel: channel.state.channelId,
380
393
  thread_ts: channel.state.threadTs,
381
394
  });
395
+ // Mid-turn `tool_call` text is held as status, not posted. If the
396
+ // turn ends without a later `finishReason: "stop"` block, the
397
+ // playground still has `result` (last assistant text) and Slack
398
+ // would otherwise stay silent.
399
+ const result = event.data.result;
400
+ const unpublished = typeof result === "string" &&
401
+ result !== "" &&
402
+ result !== channel.state.lastPostedText;
403
+ if (unpublished) {
404
+ yield deliverReplyText({
405
+ channel,
406
+ text: result,
407
+ sessionId: event.sessionId,
408
+ });
409
+ }
410
+ // Always close leftovers. deliverReplyText may fall through to
411
+ // postMessage when streaming is unavailable and leave streamTs open.
382
412
  yield strategy.cleanupOrphan({ channel });
383
413
  // Always drop the assistant chip. message.completed already clears
384
414
  // after a normal reply, but a tool-call-only finish (or a missed
@@ -414,11 +444,10 @@ export function buildDefaultEvents(options = {}) {
414
444
  }
415
445
  const errorText = formatSlackTurnFailureMessage(event.data.message);
416
446
  let delivered = false;
417
- if (state.streamTs !== null && state.streamTs !== "") {
447
+ if (streaming && state.streamingUnavailable !== true) {
418
448
  ({ delivered } = yield strategy.fail({
419
449
  channel,
420
450
  channelId: (_a = state.streamChannelId) !== null && _a !== void 0 ? _a : state.channelId,
421
- streamTs: state.streamTs,
422
451
  errorText,
423
452
  sessionId: event.sessionId,
424
453
  }));
@@ -7,7 +7,7 @@ import type { SlackBotMentionGate } from "./bot-mentions.js";
7
7
  import type { ChannelPostWatcher } from "./channel-watch.js";
8
8
  import type { EventIdDedupe } from "./event-id-dedupe.js";
9
9
  import { type SlackLog } from "./log.js";
10
- import type { SlackChannelState, SlackContinuationProbes, SlackCredentials, SlackMessage, SlackMessageHandler } from "./types.js";
10
+ import type { SlackChannelState, SlackContinuationProbes, SlackCredentials, SlackMessage, SlackMessageHandler, SlackSuggestedPrompt } from "./types.js";
11
11
  /** Blank per-session adapter state. */
12
12
  export declare function emptySlackChannelState(patch?: Partial<SlackChannelState>): SlackChannelState;
13
13
  export interface SlackInboundDispatchDeps extends SlackContinuationProbes {
@@ -51,6 +51,12 @@ export interface SlackInboundDispatchDeps extends SlackContinuationProbes {
51
51
  * `false` to admit them (or when an upstream gate already refused them).
52
52
  */
53
53
  blockExternals?: boolean;
54
+ /**
55
+ * Suggested prompts written on `assistant_thread_started` so the
56
+ * assistant pane is not blank before the first user message.
57
+ */
58
+ suggestedPrompts?: SlackSuggestedPrompt[];
59
+ suggestedPromptsTitle?: string;
54
60
  }
55
61
  export declare function dispatchInboundMessage(args: {
56
62
  kind: "app_mention" | "direct_message" | "channel_post" | "reaction_added" | "block_action";
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/dispatch.ts"],"names":[],"mappings":"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"}