@cursor/july 0.1.111 → 0.1.112

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 (383) hide show
  1. package/dist/bin/agent-serve.js +18 -1
  2. package/dist/channels/github/github-channel.d.ts +29 -19
  3. package/dist/channels/github/github-channel.d.ts.map +1 -1
  4. package/dist/channels/github/github-channel.js +29 -19
  5. package/dist/channels/slack/agentic-delivery.d.ts.map +1 -1
  6. package/dist/channels/slack/agentic-delivery.js +2 -0
  7. package/dist/channels/slack/dispatch.d.ts +11 -1
  8. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  9. package/dist/channels/slack/dispatch.js +142 -39
  10. package/dist/channels/slack/placeholder.d.ts +26 -0
  11. package/dist/channels/slack/placeholder.d.ts.map +1 -1
  12. package/dist/channels/slack/placeholder.js +28 -0
  13. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  14. package/dist/channels/slack/slack-channel.js +9 -16
  15. package/dist/docs/404.html +2 -2
  16. package/dist/docs/assets/{app.Drol6mi6.js → app.DxTdhphC.js} +4 -4
  17. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.js +9 -0
  18. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.lean.js +1 -0
  19. package/dist/docs/assets/chunks/@localSearchIndexroot.QmjDU6Jh.js +1 -0
  20. package/dist/docs/assets/chunks/{VPLocalSearchBox.CdqoBZJX.js → VPLocalSearchBox.CR3KTF0X.js} +1 -1
  21. package/dist/docs/assets/chunks/{arc.BVX3ycTn.js → arc.CVVqBOdS.js} +1 -1
  22. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CcChnMxX.js → architectureDiagram-Q4EWVU46.CJHGP4ki.js} +1 -1
  23. package/dist/docs/assets/chunks/{baseUniq.xwtXO-yt.js → baseUniq.r7UVVRBP.js} +1 -1
  24. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CijZ_taK.js → blockDiagram-DXYQGD6D.DKmMaTre.js} +1 -1
  25. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.0FBvwBvK.js → c4Diagram-AHTNJAMY.DDJsntUO.js} +1 -1
  26. package/dist/docs/assets/chunks/channel.BjpoSbz_.js +1 -0
  27. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CELMmMDA.js → chunk-4BX2VUAB.BK2rKt6W.js} +1 -1
  28. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C4bhFtSm.js → chunk-4TB4RGXK.DRLV8RnF.js} +1 -1
  29. package/dist/docs/assets/chunks/{chunk-55IACEB6.ZnQ9gRRQ.js → chunk-55IACEB6.DaKjxtb7.js} +1 -1
  30. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DPlmglG-.js → chunk-EDXVE4YY.C5sPCIT1.js} +1 -1
  31. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.BrUk8pff.js → chunk-FMBD7UC4.CSGWyNTB.js} +1 -1
  32. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CcmWIncu.js → chunk-OYMX7WX6.D5tK9XEr.js} +1 -1
  33. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D65-cs8I.js → chunk-QZHKN3VN.BeZGd1UZ.js} +1 -1
  34. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.qoXZpG9F.js → chunk-YZCP3GAM.U_tfWwQR.js} +1 -1
  35. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.BgxOlMHw.js +1 -0
  36. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.BgxOlMHw.js +1 -0
  37. package/dist/docs/assets/chunks/clone.DRuGBKZC.js +1 -0
  38. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.8rYtqudO.js → cose-bilkent-S5V4N54A.DVeRXIb6.js} +1 -1
  39. package/dist/docs/assets/chunks/{dagre-KV5264BT.DrRP1fOh.js → dagre-KV5264BT.BpKJAeRZ.js} +1 -1
  40. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DHj_xA2_.js → diagram-5BDNPKRD.BQOtrd1Z.js} +1 -1
  41. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.Bz_6nAKj.js → diagram-G4DWMVQ6.CSDAhjPI.js} +1 -1
  42. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BWA0xSW9.js → diagram-MMDJMWI5.Dpztst2S.js} +1 -1
  43. package/dist/docs/assets/chunks/{diagram-TYMM5635.CpTJLNJI.js → diagram-TYMM5635.qJHRizHR.js} +1 -1
  44. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.-7AWWSrP.js → erDiagram-SMLLAGMA.vbDotH3l.js} +1 -1
  45. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BTnQ742_.js → flowDiagram-DWJPFMVM.CqS_ZQr4.js} +1 -1
  46. package/dist/docs/assets/chunks/framework.BNw1pucY.js +19 -0
  47. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.B5_HiiQ5.js → ganttDiagram-T4ZO3ILL.DTLdR4pN.js} +1 -1
  48. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CZcNTFZd.js → gitGraphDiagram-UUTBAWPF.D04lnbnr.js} +1 -1
  49. package/dist/docs/assets/chunks/{graph.V2GLaab4.js → graph.BlfqLJsM.js} +1 -1
  50. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.7pZOkCCU.js → infoDiagram-42DDH7IO.tAooImWA.js} +1 -1
  51. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DSMo3Qa3.js → ishikawaDiagram-UXIWVN3A.ClUsVqnJ.js} +1 -1
  52. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BNEgWN1S.js → journeyDiagram-VCZTEJTY.C3tUgyCg.js} +1 -1
  53. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B-4d4tC7.js → kanban-definition-6JOO6SKY.CtD9-QCe.js} +1 -1
  54. package/dist/docs/assets/chunks/{layout.Dvbn9nSb.js → layout.D38U-LnT.js} +1 -1
  55. package/dist/docs/assets/chunks/{linear.D2GM4p4b.js → linear.BJmssyhN.js} +1 -1
  56. package/dist/docs/assets/chunks/{min.DVBtLK-B.js → min.DNgXoouU.js} +1 -1
  57. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CnJRI55x.js → mindmap-definition-QFDTVHPH.Dcp6cxeu.js} +1 -1
  58. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.CtoaTFlA.js → pieDiagram-DEJITSTG.CLDw6zIs.js} +1 -1
  59. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DtT24_vN.js → quadrantDiagram-34T5L4WZ.CYaeeY4c.js} +1 -1
  60. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CjSO4o8f.js → requirementDiagram-MS252O5E.gMYuRpq2.js} +1 -1
  61. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.-wWiIVWa.js → sankeyDiagram-XADWPNL6.CZqyHFbc.js} +1 -1
  62. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DSk8s4gX.js → sequenceDiagram-FGHM5R23.BTsCjUDN.js} +1 -1
  63. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BFKAsdkN.js → stateDiagram-FHFEXIEX.CftT9mLJ.js} +1 -1
  64. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.-43J68xB.js +1 -0
  65. package/dist/docs/assets/chunks/{theme.C0MctGaz.js → theme.B_7J9ZsV.js} +2 -2
  66. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.TUNJbAFe.js → timeline-definition-GMOUNBTQ.DbU3WUNw.js} +1 -1
  67. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.C-RGNnk4.js → vennDiagram-DHZGUBPP.ixsq-q2u.js} +1 -1
  68. package/dist/docs/assets/chunks/wardley-RL74JXVD.WRXz-Dux.js +162 -0
  69. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.DH4zt73Y.js → wardleyDiagram-NUSXRM2D.C0ewvgbp.js} +1 -1
  70. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B-3k6bF6.js → xychartDiagram-5P7HB3ND.nAEhF4bO.js} +1 -1
  71. package/dist/docs/assets/deployment.md.D2jQZuFx.js +32 -0
  72. package/dist/docs/assets/deployment.md.D2jQZuFx.lean.js +1 -0
  73. package/dist/docs/assets/evals.md.BYvfZ-PO.js +72 -0
  74. package/dist/docs/assets/evals.md.BYvfZ-PO.lean.js +1 -0
  75. package/dist/docs/assets/guides_agent-to-agent.md.8oDTfu-E.js +30 -0
  76. package/dist/docs/assets/guides_agent-to-agent.md.8oDTfu-E.lean.js +1 -0
  77. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.js +145 -0
  78. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.lean.js +1 -0
  79. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.js +15 -0
  80. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.lean.js +1 -0
  81. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.js +43 -0
  82. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.lean.js +1 -0
  83. package/dist/docs/assets/guides_github.md.BwpBp3ed.js +156 -0
  84. package/dist/docs/assets/guides_github.md.BwpBp3ed.lean.js +1 -0
  85. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.js +153 -0
  86. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.lean.js +1 -0
  87. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.js +16 -0
  88. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.lean.js +1 -0
  89. package/dist/docs/assets/guides_improve.md.Bnp4F99w.js +22 -0
  90. package/dist/docs/assets/guides_improve.md.Bnp4F99w.lean.js +1 -0
  91. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.js +50 -0
  92. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.lean.js +1 -0
  93. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.js +35 -0
  94. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.lean.js +1 -0
  95. package/dist/docs/assets/guides_slack.md.Bo96y42E.js +70 -0
  96. package/dist/docs/assets/guides_slack.md.Bo96y42E.lean.js +1 -0
  97. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.js +92 -0
  98. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.lean.js +1 -0
  99. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.js +7 -0
  100. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.lean.js +1 -0
  101. package/dist/docs/assets/{index.md.BFVyY2KT.js → index.md.C-t81M5J.js} +2 -2
  102. package/dist/docs/assets/{index.md.BFVyY2KT.lean.js → index.md.C-t81M5J.lean.js} +1 -1
  103. package/dist/docs/assets/{quickstart.md.D3MjSZN-.js → quickstart.md.DAvVhuuU.js} +1 -1
  104. package/dist/docs/assets/{quickstart.md.D3MjSZN-.lean.js → quickstart.md.DAvVhuuU.lean.js} +1 -1
  105. package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.js → reference_agent-config.md.DGPyw7ms.js} +1 -1
  106. package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.lean.js → reference_agent-config.md.DGPyw7ms.lean.js} +1 -1
  107. package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.js → reference_artifacts.md.Bu_4HmsD.js} +1 -1
  108. package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.lean.js → reference_artifacts.md.Bu_4HmsD.lean.js} +1 -1
  109. package/dist/docs/assets/{reference_channels.md.icqLKcTc.js → reference_channels.md.nFWbzAic.js} +1 -1
  110. package/dist/docs/assets/{reference_channels.md.icqLKcTc.lean.js → reference_channels.md.nFWbzAic.lean.js} +1 -1
  111. package/dist/docs/assets/{reference_cli.md.B2dBL6L8.js → reference_cli.md.DLWDz9ij.js} +3 -1
  112. package/dist/docs/assets/{reference_cli.md.B2dBL6L8.lean.js → reference_cli.md.DLWDz9ij.lean.js} +1 -1
  113. package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.js → reference_connections.md.CmyrlXfY.js} +1 -1
  114. package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.lean.js → reference_connections.md.CmyrlXfY.lean.js} +1 -1
  115. package/dist/docs/assets/reference_evals.md.DNJzM_yf.js +57 -0
  116. package/dist/docs/assets/reference_evals.md.DNJzM_yf.lean.js +1 -0
  117. package/dist/docs/assets/reference_extensions.md.Ceq-qT8d.js +58 -0
  118. package/dist/docs/assets/reference_extensions.md.Ceq-qT8d.lean.js +1 -0
  119. package/dist/docs/assets/{reference_hooks.md.CZuynAxj.js → reference_hooks.md.B7uzNENk.js} +2 -2
  120. package/dist/docs/assets/{reference_hooks.md.CZuynAxj.lean.js → reference_hooks.md.B7uzNENk.lean.js} +1 -1
  121. package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.js → reference_http-api.md.CduHavZ2.js} +1 -1
  122. package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.lean.js → reference_http-api.md.CduHavZ2.lean.js} +1 -1
  123. package/dist/docs/assets/{reference_instructions.md.D7gkckK-.js → reference_instructions.md.CU1My5My.js} +1 -1
  124. package/dist/docs/assets/{reference_instructions.md.D7gkckK-.lean.js → reference_instructions.md.CU1My5My.lean.js} +1 -1
  125. package/dist/docs/assets/{reference_playground.md.D2YExv5K.js → reference_playground.md.Ch2d0Iqi.js} +1 -1
  126. package/dist/docs/assets/{reference_playground.md.D2YExv5K.lean.js → reference_playground.md.Ch2d0Iqi.lean.js} +1 -1
  127. package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.js → reference_project-layout.md.BGhgpy9V.js} +1 -1
  128. package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.lean.js → reference_project-layout.md.BGhgpy9V.lean.js} +1 -1
  129. package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.js → reference_prompt.md.Ccp0R53H.js} +1 -1
  130. package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.lean.js → reference_prompt.md.Ccp0R53H.lean.js} +1 -1
  131. package/dist/docs/assets/{reference_schedules.md.BasfZWO-.js → reference_schedules.md.B2Nm6FaD.js} +1 -1
  132. package/dist/docs/assets/{reference_schedules.md.BasfZWO-.lean.js → reference_schedules.md.B2Nm6FaD.lean.js} +1 -1
  133. package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.js → reference_sessions.md.1_6Vyv7x.js} +1 -1
  134. package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.lean.js → reference_sessions.md.1_6Vyv7x.lean.js} +1 -1
  135. package/dist/docs/assets/{reference_skills.md.rNgpsGd0.js → reference_skills.md.DjQkRefx.js} +1 -1
  136. package/dist/docs/assets/{reference_skills.md.rNgpsGd0.lean.js → reference_skills.md.DjQkRefx.lean.js} +1 -1
  137. package/dist/docs/assets/{reference_subagents.md.e5qitjJt.js → reference_subagents.md.BHsSMMyO.js} +1 -1
  138. package/dist/docs/assets/{reference_subagents.md.e5qitjJt.lean.js → reference_subagents.md.BHsSMMyO.lean.js} +1 -1
  139. package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.js → reference_tools.md.BYzUTeVA.js} +1 -1
  140. package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.lean.js → reference_tools.md.BYzUTeVA.lean.js} +1 -1
  141. package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.js → templates_agentic-owners.md.9M575F5C.js} +1 -1
  142. package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.lean.js → templates_agentic-owners.md.9M575F5C.lean.js} +1 -1
  143. package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.js → templates_pr-autofixer.md.ws0DDXDy.js} +1 -1
  144. package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.lean.js → templates_pr-autofixer.md.ws0DDXDy.lean.js} +1 -1
  145. package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.js → templates_security-reviewer.md.KEFYXzfK.js} +1 -1
  146. package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.lean.js → templates_security-reviewer.md.KEFYXzfK.lean.js} +1 -1
  147. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.js +3 -0
  148. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.lean.js +1 -0
  149. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.js +3 -0
  150. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.lean.js +1 -0
  151. package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.js → templates_triage.md.CVGe_FG6.js} +1 -1
  152. package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.lean.js → templates_triage.md.CVGe_FG6.lean.js} +1 -1
  153. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.js +1 -0
  154. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.lean.js +1 -0
  155. package/dist/docs/building-with-agents.html +44 -48
  156. package/dist/docs/building-with-agents.md +94 -82
  157. package/dist/docs/deployment.html +59 -78
  158. package/dist/docs/deployment.md +117 -363
  159. package/dist/docs/evals.html +85 -224
  160. package/dist/docs/evals.md +146 -673
  161. package/dist/docs/guides/agent-to-agent.html +58 -42
  162. package/dist/docs/guides/agent-to-agent.md +112 -35
  163. package/dist/docs/guides/bitbucket.html +179 -44
  164. package/dist/docs/guides/bitbucket.md +249 -48
  165. package/dist/docs/guides/cloud-agents.html +46 -40
  166. package/dist/docs/guides/cloud-agents.md +119 -66
  167. package/dist/docs/guides/convert-automation.html +80 -49
  168. package/dist/docs/guides/convert-automation.md +156 -147
  169. package/dist/docs/guides/github.html +184 -92
  170. package/dist/docs/guides/github.md +260 -245
  171. package/dist/docs/guides/gitlab.html +184 -45
  172. package/dist/docs/guides/gitlab.md +249 -50
  173. package/dist/docs/guides/grokbot-agents.html +48 -41
  174. package/dist/docs/guides/grokbot-agents.md +99 -53
  175. package/dist/docs/guides/improve.html +48 -40
  176. package/dist/docs/guides/improve.md +111 -58
  177. package/dist/docs/guides/mcp-oauth.html +74 -52
  178. package/dist/docs/guides/mcp-oauth.md +111 -121
  179. package/dist/docs/guides/opentelemetry.html +63 -54
  180. package/dist/docs/guides/opentelemetry.md +96 -165
  181. package/dist/docs/guides/slack.html +83 -59
  182. package/dist/docs/guides/slack.md +157 -227
  183. package/dist/docs/guides/webhooks.html +97 -230
  184. package/dist/docs/guides/webhooks.md +154 -385
  185. package/dist/docs/hashmap.json +1 -1
  186. package/dist/docs/hillclimbing.html +44 -38
  187. package/dist/docs/hillclimbing.md +101 -55
  188. package/dist/docs/index.html +38 -38
  189. package/dist/docs/index.md +2 -0
  190. package/dist/docs/llms-full.txt +3082 -3104
  191. package/dist/docs/llms.txt +21 -18
  192. package/dist/docs/quickstart.html +37 -37
  193. package/dist/docs/reference/agent-config.html +37 -37
  194. package/dist/docs/reference/artifacts.html +38 -38
  195. package/dist/docs/reference/channels.html +37 -37
  196. package/dist/docs/reference/cli.html +39 -37
  197. package/dist/docs/reference/cli.md +2 -0
  198. package/dist/docs/reference/connections.html +37 -37
  199. package/dist/docs/reference/evals.html +116 -0
  200. package/dist/docs/reference/evals.md +293 -0
  201. package/dist/docs/reference/extensions.html +80 -84
  202. package/dist/docs/reference/extensions.md +127 -199
  203. package/dist/docs/reference/hooks.html +39 -39
  204. package/dist/docs/reference/hooks.md +34 -34
  205. package/dist/docs/reference/http-api.html +37 -37
  206. package/dist/docs/reference/instructions.html +37 -37
  207. package/dist/docs/reference/playground.html +37 -37
  208. package/dist/docs/reference/project-layout.html +37 -37
  209. package/dist/docs/reference/prompt.html +37 -37
  210. package/dist/docs/reference/schedules.html +37 -37
  211. package/dist/docs/reference/sessions.html +37 -37
  212. package/dist/docs/reference/skills.html +37 -37
  213. package/dist/docs/reference/subagents.html +37 -37
  214. package/dist/docs/reference/tools.html +37 -37
  215. package/dist/docs/templates/agentic-owners.html +38 -38
  216. package/dist/docs/templates/pr-autofixer.html +37 -37
  217. package/dist/docs/templates/security-reviewer.html +38 -38
  218. package/dist/docs/templates/thermo-quality-review.html +62 -0
  219. package/dist/docs/templates/thermo-quality-review.md +75 -0
  220. package/dist/docs/templates/thermo-review.html +62 -0
  221. package/dist/docs/templates/thermo-review.md +74 -0
  222. package/dist/docs/templates/triage.html +37 -37
  223. package/dist/docs/troubleshooting.html +38 -38
  224. package/dist/docs/troubleshooting.md +97 -66
  225. package/dist/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  226. package/dist/extensions/improve/extension.d.ts +3 -1
  227. package/dist/extensions/improve/extension.d.ts.map +1 -1
  228. package/dist/extensions/improve/extension.js +4 -2
  229. package/dist/extensions/improve/skills/yourself.js +1 -1
  230. package/dist/filesystem.d.ts +46 -2
  231. package/dist/filesystem.d.ts.map +1 -1
  232. package/dist/filesystem.js +149 -102
  233. package/dist/index.d.ts +2 -2
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.js +1 -1
  236. package/dist/internal/cli-ax.d.ts +6 -0
  237. package/dist/internal/cli-ax.d.ts.map +1 -1
  238. package/dist/internal/cli-ax.js +72 -14
  239. package/dist/internal/continuation-identity.d.ts.map +1 -1
  240. package/dist/internal/continuation-identity.js +1 -0
  241. package/dist/internal/cursor-agent-template.d.ts +1 -1
  242. package/dist/internal/cursor-agent-template.d.ts.map +1 -1
  243. package/dist/internal/cursor-agent-template.js +2 -0
  244. package/dist/internal/filesystem/tools.d.ts.map +1 -1
  245. package/dist/internal/filesystem/tools.js +2 -2
  246. package/dist/internal/filesystem/walk.d.ts +7 -4
  247. package/dist/internal/filesystem/walk.d.ts.map +1 -1
  248. package/dist/internal/filesystem/walk.js +34 -11
  249. package/dist/internal/hosted-admission-adapter.d.ts +3 -0
  250. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  251. package/dist/internal/hosted-delivery-protocol.d.ts +17 -0
  252. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  253. package/dist/internal/hosted-delivery-protocol.js +50 -1
  254. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  255. package/dist/internal/hosted-delivery.js +8 -0
  256. package/dist/internal/init-project.d.ts.map +1 -1
  257. package/dist/internal/init-project.js +4 -0
  258. package/dist/internal/server.d.ts.map +1 -1
  259. package/dist/internal/server.js +94 -39
  260. package/dist/internal/session-engine.d.ts.map +1 -1
  261. package/dist/internal/session-engine.js +11 -5
  262. package/dist/internal/skill-catalog.d.ts +28 -0
  263. package/dist/internal/skill-catalog.d.ts.map +1 -0
  264. package/dist/internal/skill-catalog.js +44 -0
  265. package/dist/playground/assets/index-B1c1LeIf.js +67 -0
  266. package/dist/playground/assets/index-CK2LX3iD.css +1 -0
  267. package/dist/playground/index.html +2 -2
  268. package/dist/types.d.ts +9 -0
  269. package/dist/types.d.ts.map +1 -1
  270. package/docs/README.md +2 -0
  271. package/docs/building-with-agents.md +96 -84
  272. package/docs/deployment.md +118 -364
  273. package/docs/evals.md +147 -674
  274. package/docs/guides/agent-to-agent.md +113 -36
  275. package/docs/guides/bitbucket.md +250 -49
  276. package/docs/guides/cloud-agents.md +119 -67
  277. package/docs/guides/convert-automation.md +157 -148
  278. package/docs/guides/github.md +261 -246
  279. package/docs/guides/gitlab.md +250 -51
  280. package/docs/guides/grokbot-agents.md +100 -55
  281. package/docs/guides/improve.md +112 -59
  282. package/docs/guides/mcp-oauth.md +112 -122
  283. package/docs/guides/opentelemetry.md +97 -166
  284. package/docs/guides/slack.md +158 -228
  285. package/docs/guides/webhooks.md +155 -386
  286. package/docs/hillclimbing.md +102 -56
  287. package/docs/reference/cli.md +2 -0
  288. package/docs/reference/evals.md +298 -0
  289. package/docs/reference/extensions.md +128 -200
  290. package/docs/reference/hooks.md +34 -34
  291. package/docs/templates/thermo-quality-review.md +80 -0
  292. package/docs/templates/thermo-review.md +79 -0
  293. package/docs/troubleshooting.md +98 -67
  294. package/package.json +1 -1
  295. package/skills/github/SKILL.md +21 -13
  296. package/src/bin/agent-serve.ts +22 -0
  297. package/src/channels/github/github-channel.ts +29 -19
  298. package/src/channels/slack/agentic-delivery.ts +2 -0
  299. package/src/channels/slack/dispatch.ts +126 -4
  300. package/src/channels/slack/placeholder.ts +51 -0
  301. package/src/channels/slack/slack-channel.ts +9 -2
  302. package/src/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  303. package/src/extensions/improve/extension.ts +4 -2
  304. package/src/extensions/improve/skills/yourself.ts +1 -1
  305. package/src/filesystem.ts +168 -65
  306. package/src/index.ts +3 -0
  307. package/src/internal/cli-ax.ts +88 -15
  308. package/src/internal/continuation-identity.ts +1 -0
  309. package/src/internal/cursor-agent-template.ts +2 -0
  310. package/src/internal/filesystem/tools.ts +2 -0
  311. package/src/internal/filesystem/walk.ts +60 -15
  312. package/src/internal/hosted-admission-adapter.ts +3 -0
  313. package/src/internal/hosted-delivery-protocol.ts +78 -1
  314. package/src/internal/hosted-delivery.ts +8 -0
  315. package/src/internal/init-project.ts +4 -0
  316. package/src/internal/server.ts +104 -41
  317. package/src/internal/session-engine.ts +16 -4
  318. package/src/internal/skill-catalog.ts +69 -0
  319. package/src/types.ts +9 -0
  320. package/templates/thermo-quality-review/README.md +35 -0
  321. package/templates/thermo-quality-review/agent/agent.ts +8 -0
  322. package/templates/thermo-quality-review/agent/channels/github.ts +42 -0
  323. package/templates/thermo-quality-review/agent/instructions.md +43 -0
  324. package/templates/thermo-quality-review/agent/tools/post_findings.ts +70 -0
  325. package/templates/thermo-quality-review/evals/evals.config.ts +5 -0
  326. package/templates/thermo-quality-review/evals/review.eval.ts +62 -0
  327. package/templates/thermo-quality-review/package.json +18 -0
  328. package/templates/thermo-quality-review/tsconfig.json +12 -0
  329. package/templates/thermo-review/README.md +35 -0
  330. package/templates/thermo-review/agent/agent.ts +8 -0
  331. package/templates/thermo-review/agent/channels/github.ts +42 -0
  332. package/templates/thermo-review/agent/instructions.md +40 -0
  333. package/templates/thermo-review/agent/tools/post_findings.ts +70 -0
  334. package/templates/thermo-review/evals/evals.config.ts +5 -0
  335. package/templates/thermo-review/evals/review.eval.ts +53 -0
  336. package/templates/thermo-review/package.json +18 -0
  337. package/templates/thermo-review/tsconfig.json +12 -0
  338. package/dist/docs/assets/building-with-agents.md.CEGVXkmO.js +0 -13
  339. package/dist/docs/assets/building-with-agents.md.CEGVXkmO.lean.js +0 -1
  340. package/dist/docs/assets/chunks/@localSearchIndexroot.DtXk1hy-.js +0 -1
  341. package/dist/docs/assets/chunks/channel.Bkv1N-gK.js +0 -1
  342. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CZDco1o8.js +0 -1
  343. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CZDco1o8.js +0 -1
  344. package/dist/docs/assets/chunks/clone.YSt_40_s.js +0 -1
  345. package/dist/docs/assets/chunks/framework.dypDpWZ3.js +0 -19
  346. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C4CLm481.js +0 -1
  347. package/dist/docs/assets/chunks/wardley-RL74JXVD.g5efOWmT.js +0 -162
  348. package/dist/docs/assets/deployment.md.Dm4Qo3hp.js +0 -51
  349. package/dist/docs/assets/deployment.md.Dm4Qo3hp.lean.js +0 -1
  350. package/dist/docs/assets/evals.md.BLDRt5LH.js +0 -211
  351. package/dist/docs/assets/evals.md.BLDRt5LH.lean.js +0 -1
  352. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.js +0 -14
  353. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.lean.js +0 -1
  354. package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.js +0 -10
  355. package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.lean.js +0 -1
  356. package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.js +0 -9
  357. package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.lean.js +0 -1
  358. package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.js +0 -12
  359. package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.lean.js +0 -1
  360. package/dist/docs/assets/guides_github.md.D6ER29dG.js +0 -64
  361. package/dist/docs/assets/guides_github.md.D6ER29dG.lean.js +0 -1
  362. package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.js +0 -14
  363. package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.lean.js +0 -1
  364. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.js +0 -9
  365. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.lean.js +0 -1
  366. package/dist/docs/assets/guides_improve.md.BKaDuKKK.js +0 -14
  367. package/dist/docs/assets/guides_improve.md.BKaDuKKK.lean.js +0 -1
  368. package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.js +0 -28
  369. package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.lean.js +0 -1
  370. package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.js +0 -26
  371. package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.lean.js +0 -1
  372. package/dist/docs/assets/guides_slack.md.DdT8rmsj.js +0 -46
  373. package/dist/docs/assets/guides_slack.md.DdT8rmsj.lean.js +0 -1
  374. package/dist/docs/assets/guides_webhooks.md.aQW10HRe.js +0 -225
  375. package/dist/docs/assets/guides_webhooks.md.aQW10HRe.lean.js +0 -1
  376. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.js +0 -1
  377. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.lean.js +0 -1
  378. package/dist/docs/assets/reference_extensions.md.wlFD3cUR.js +0 -62
  379. package/dist/docs/assets/reference_extensions.md.wlFD3cUR.lean.js +0 -1
  380. package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.js +0 -1
  381. package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.lean.js +0 -1
  382. package/dist/playground/assets/index-BLlKgZtI.css +0 -1
  383. package/dist/playground/assets/index-CDS5p9sR.js +0 -67
@@ -13,6 +13,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
13
13
  import { continuationSource, normalizeIdentity, } from "../../internal/continuation-identity.js";
14
14
  import { isDeferredChannelSession } from "../../internal/deferred-channel-session.js";
15
15
  import { routeLocalIngressContinuation } from "../../internal/local-ingress.js";
16
+ import { mapThrownRequestError } from "../../internal/request-error-status.js";
16
17
  import { isSlackImChannel } from "../../internal/slack-thread-key.js";
17
18
  import { steeringEnabled } from "../../internal/steering.js";
18
19
  import { buildSlackBinding, slackContinuationKey } from "./api.js";
@@ -23,7 +24,7 @@ import { isExternalSlackSender } from "./external-policy.js";
23
24
  import { describeSlackEventShape, formatSlackContextBlock, parseAppHomeOpened, parseAppMentionEvent, parseAssistantThreadStarted, parseChannelMessageEvent, parseDirectMessageEvent, parseReactionAddedEvent, } from "./inbound.js";
24
25
  import { defaultSlackLog } from "./log.js";
25
26
  import { paintTurnStart, retractTurnStart } from "./paint-start.js";
26
- import { startPlaceholder } from "./placeholder.js";
27
+ import { adoptPlaceholder, retractPlaceholderMessage, retractPlaceholderSlot, startPlaceholder, } from "./placeholder.js";
27
28
  import { isWholeMessageStop } from "./stop.js";
28
29
  import { loadSlackThreadContextBlock, loadSlackThreadDeltaBlock, } from "./thread-context.js";
29
30
  const FOLLOWUP_TYPING = "Saw your follow-up…";
@@ -104,7 +105,9 @@ function inboundContinuation(deps) {
104
105
  : { interruptContinuation: deps.interruptContinuation }));
105
106
  }
106
107
  function scheduleInbound(deps, log, args) {
107
- deps.waitUntil(dispatchInboundMessage(Object.assign(Object.assign({ kind: args.kind, message: args.message, handler: args.handler, propagateHandlerErrors: deps.propagateHandlerErrors, send: deps.send, credentials: deps.credentials, host: deps.host, artifacts: deps.artifacts, log, evalCommandsEnabled: args.evalCommandsEnabled, followUpStatus: deps.followUpStatus, ack: deps.ack, placeholder: deps.placeholder, blockExternals: deps.blockExternals }, inboundContinuation(deps)), (args.eventId === undefined ? {} : { eventId: args.eventId }))));
108
+ deps.waitUntil(dispatchInboundMessage(Object.assign(Object.assign(Object.assign({ kind: args.kind, message: args.message, handler: args.handler, propagateHandlerErrors: deps.propagateHandlerErrors, send: deps.send, credentials: deps.credentials, host: deps.host, artifacts: deps.artifacts, log, evalCommandsEnabled: args.evalCommandsEnabled, followUpStatus: deps.followUpStatus, ack: deps.ack, placeholder: deps.placeholder, blockExternals: deps.blockExternals }, inboundContinuation(deps)), (args.eventId === undefined ? {} : { eventId: args.eventId })), (args.platformHandoff === undefined
109
+ ? {}
110
+ : { platformHandoff: args.platformHandoff }))));
108
111
  }
109
112
  function slackSessionContinuation(identity, channelId, threadTs) {
110
113
  if (continuationSource(identity, "slack") === "engine") {
@@ -125,10 +128,10 @@ function slackSessionContinuation(identity, channelId, threadTs) {
125
128
  }
126
129
  export function dispatchInboundMessage(args) {
127
130
  return __awaiter(this, void 0, void 0, function* () {
128
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;
129
- var _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15;
131
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2;
132
+ var _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17;
130
133
  const { message, kind } = args;
131
- const log = (_1 = args.log) !== null && _1 !== void 0 ? _1 : defaultSlackLog;
134
+ const log = (_3 = args.log) !== null && _3 !== void 0 ? _3 : defaultSlackLog;
132
135
  const binding = buildSlackBinding({
133
136
  botToken: (_a = args.credentials) === null || _a === void 0 ? void 0 : _a.botToken,
134
137
  channelId: message.channelId,
@@ -147,10 +150,72 @@ export function dispatchInboundMessage(args) {
147
150
  user: (_b = message.author) === null || _b === void 0 ? void 0 : _b.userId,
148
151
  team: message.teamId,
149
152
  });
150
- const userId = (_2 = (_c = message.author) === null || _c === void 0 ? void 0 : _c.userId) !== null && _2 !== void 0 ? _2 : "";
153
+ const handoff = (_c = args.platformHandoff) === null || _c === void 0 ? void 0 : _c.slackPlaceholder;
154
+ const matchedHandoff = args.placeholder !== undefined &&
155
+ kind !== "channel_post" &&
156
+ handoff !== undefined &&
157
+ handoff.channelId === message.channelId &&
158
+ handoff.threadTs === message.threadTs
159
+ ? handoff
160
+ : undefined;
161
+ let adoptedPlaceholder = false;
162
+ let handoffRetracted = false;
163
+ const retractUnadoptedHandoff = () => __awaiter(this, void 0, void 0, function* () {
164
+ var _a;
165
+ if (matchedHandoff === undefined || handoffRetracted) {
166
+ return;
167
+ }
168
+ handoffRetracted = true;
169
+ yield retractPlaceholderMessage({
170
+ botToken: (_a = args.credentials) === null || _a === void 0 ? void 0 : _a.botToken,
171
+ channelId: matchedHandoff.channelId,
172
+ ts: matchedHandoff.messageTs,
173
+ streamed: matchedHandoff.streamed,
174
+ log,
175
+ });
176
+ });
177
+ const adoptMatchedHandoff = () => __awaiter(this, void 0, void 0, function* () {
178
+ if (matchedHandoff === undefined) {
179
+ return;
180
+ }
181
+ const adoption = adoptPlaceholder({
182
+ channelId: matchedHandoff.channelId,
183
+ threadTs: matchedHandoff.threadTs,
184
+ ts: matchedHandoff.messageTs,
185
+ streamed: matchedHandoff.streamed,
186
+ });
187
+ if (adoption === "adopted") {
188
+ adoptedPlaceholder = true;
189
+ log.info("placeholder adopted from control-plane handoff", {
190
+ channel: message.channelId,
191
+ thread_ts: message.threadTs,
192
+ message_ts: matchedHandoff.messageTs,
193
+ });
194
+ return;
195
+ }
196
+ if (adoption === "occupied") {
197
+ // Another delivery owns this thread's slot. Remove only this delivery's
198
+ // redundant CP post.
199
+ yield retractUnadoptedHandoff();
200
+ }
201
+ });
202
+ const retractAdoptedPlaceholder = () => __awaiter(this, void 0, void 0, function* () {
203
+ var _a;
204
+ if (!adoptedPlaceholder) {
205
+ return;
206
+ }
207
+ adoptedPlaceholder = false;
208
+ yield retractPlaceholderSlot({
209
+ channelId: message.channelId,
210
+ threadTs: message.threadTs,
211
+ botToken: (_a = args.credentials) === null || _a === void 0 ? void 0 : _a.botToken,
212
+ log,
213
+ });
214
+ });
215
+ const userId = (_4 = (_d = message.author) === null || _d === void 0 ? void 0 : _d.userId) !== null && _4 !== void 0 ? _4 : "";
151
216
  const teamId = message.teamId;
152
217
  let membership;
153
- if (args.blockExternals !== false && ((_d = message.author) === null || _d === void 0 ? void 0 : _d.isBot) !== true) {
218
+ if (args.blockExternals !== false && ((_e = message.author) === null || _e === void 0 ? void 0 : _e.isBot) !== true) {
154
219
  if (teamId === undefined || teamId === "") {
155
220
  log.info("inbound dropped (missing team)", {
156
221
  kind,
@@ -159,10 +224,11 @@ export function dispatchInboundMessage(args) {
159
224
  user: userId,
160
225
  event_id: args.eventId,
161
226
  });
227
+ yield retractUnadoptedHandoff();
162
228
  return;
163
229
  }
164
230
  membership = isExternalSlackSender({
165
- botToken: (_e = args.credentials) === null || _e === void 0 ? void 0 : _e.botToken,
231
+ botToken: (_f = args.credentials) === null || _f === void 0 ? void 0 : _f.botToken,
166
232
  slackTeamId: teamId,
167
233
  userId,
168
234
  });
@@ -188,6 +254,7 @@ export function dispatchInboundMessage(args) {
188
254
  isWholeMessageStop(message.markdown)) {
189
255
  if (membership !== undefined && (yield membership)) {
190
256
  dropExternal();
257
+ yield retractUnadoptedHandoff();
191
258
  return;
192
259
  }
193
260
  log.info("stop directive", {
@@ -197,16 +264,17 @@ export function dispatchInboundMessage(args) {
197
264
  continuation,
198
265
  event_id: args.eventId,
199
266
  });
200
- yield (_f = args.host.slackNudges) === null || _f === void 0 ? void 0 : _f.clear(continuation);
267
+ yield (_g = args.host.slackNudges) === null || _g === void 0 ? void 0 : _g.clear(continuation);
201
268
  const interrupted = args.interruptContinuation === undefined
202
269
  ? false
203
270
  : yield args.interruptContinuation(continuation);
204
271
  try {
205
272
  yield binding.thread.startTyping(interrupted ? "Stopped." : "Nothing to stop.");
206
273
  }
207
- catch (_16) {
274
+ catch (_18) {
208
275
  // best-effort status
209
276
  }
277
+ yield retractUnadoptedHandoff();
210
278
  return;
211
279
  }
212
280
  // Built-in eval directive: run playground batches without an agent turn.
@@ -215,11 +283,12 @@ export function dispatchInboundMessage(args) {
215
283
  const evalCommandsEnabled = args.evalCommandsEnabled !== false &&
216
284
  (kind === "app_mention" || kind === "direct_message");
217
285
  const evalDirective = evalCommandsEnabled && args.host.evals !== undefined
218
- ? ((_3 = parseSlackEvalDirective(message.text)) !== null && _3 !== void 0 ? _3 : parseSlackEvalDirective(message.markdown))
286
+ ? ((_5 = parseSlackEvalDirective(message.text)) !== null && _5 !== void 0 ? _5 : parseSlackEvalDirective(message.markdown))
219
287
  : null;
220
288
  if (evalDirective !== null && args.host.evals !== undefined) {
221
289
  if (membership !== undefined && (yield membership)) {
222
290
  dropExternal();
291
+ yield retractUnadoptedHandoff();
223
292
  return;
224
293
  }
225
294
  log.info("eval directive", {
@@ -235,6 +304,7 @@ export function dispatchInboundMessage(args) {
235
304
  evals: args.host.evals,
236
305
  binding,
237
306
  });
307
+ yield retractUnadoptedHandoff();
238
308
  return;
239
309
  }
240
310
  let decision;
@@ -249,8 +319,12 @@ export function dispatchInboundMessage(args) {
249
319
  event_id: args.eventId,
250
320
  });
251
321
  if (args.propagateHandlerErrors === true) {
322
+ if (((_h = mapThrownRequestError(error)) === null || _h === void 0 ? void 0 : _h.retry) !== "transient") {
323
+ yield retractUnadoptedHandoff();
324
+ }
252
325
  throw error;
253
326
  }
327
+ yield retractUnadoptedHandoff();
254
328
  return;
255
329
  }
256
330
  if (decision === null || decision === undefined) {
@@ -260,10 +334,11 @@ export function dispatchInboundMessage(args) {
260
334
  thread_ts: message.threadTs,
261
335
  event_id: args.eventId,
262
336
  });
337
+ yield retractUnadoptedHandoff();
263
338
  return;
264
339
  }
265
340
  // Reply-once / delayed parent: claim channel:ts after the handler accepts.
266
- const claimed = yield (_g = args.host.slackNudges) === null || _g === void 0 ? void 0 : _g.tryClaimAsk(message.channelId, message.ts);
341
+ const claimed = yield (_j = args.host.slackNudges) === null || _j === void 0 ? void 0 : _j.tryClaimAsk(message.channelId, message.ts);
267
342
  if (claimed === false) {
268
343
  log.info("inbound ask dedupe drop", {
269
344
  kind,
@@ -274,10 +349,11 @@ export function dispatchInboundMessage(args) {
274
349
  });
275
350
  return;
276
351
  }
352
+ yield adoptMatchedHandoff();
277
353
  const painted = args.ack === undefined
278
354
  ? undefined
279
355
  : paintTurnStart({
280
- botToken: (_h = args.credentials) === null || _h === void 0 ? void 0 : _h.botToken,
356
+ botToken: (_k = args.credentials) === null || _k === void 0 ? void 0 : _k.botToken,
281
357
  channelId: message.channelId,
282
358
  threadTs: message.threadTs,
283
359
  ack: args.ack,
@@ -285,7 +361,7 @@ export function dispatchInboundMessage(args) {
285
361
  });
286
362
  if (message.ts === message.threadTs && !isSlackImChannel(message.channelId)) {
287
363
  void maybeSetThreadTitle({
288
- botToken: (_j = args.credentials) === null || _j === void 0 ? void 0 : _j.botToken,
364
+ botToken: (_l = args.credentials) === null || _l === void 0 ? void 0 : _l.botToken,
289
365
  channelId: message.channelId,
290
366
  threadTs: message.threadTs,
291
367
  title: firstLineTitle(message.markdown),
@@ -294,13 +370,13 @@ export function dispatchInboundMessage(args) {
294
370
  }
295
371
  const excludeThreadTimestamps = [
296
372
  message.ts,
297
- ...((_4 = decision.excludeThreadTimestamps) !== null && _4 !== void 0 ? _4 : []),
373
+ ...((_6 = decision.excludeThreadTimestamps) !== null && _6 !== void 0 ? _6 : []),
298
374
  ];
299
375
  const mergeMessages = [triggeringMergeMessage(message)];
300
376
  const mediaTask = slackTurnMedia({
301
377
  message,
302
378
  decision,
303
- botToken: (_k = args.credentials) === null || _k === void 0 ? void 0 : _k.botToken,
379
+ botToken: (_m = args.credentials) === null || _m === void 0 ? void 0 : _m.botToken,
304
380
  log,
305
381
  });
306
382
  const continuationExists = existsP === undefined ? false : yield existsP;
@@ -314,10 +390,10 @@ export function dispatchInboundMessage(args) {
314
390
  const threadTask = !loadThread
315
391
  ? Promise.resolve(undefined)
316
392
  : hasSession
317
- ? loadSlackThreadDeltaBlock(Object.assign(Object.assign({ botToken: (_l = args.credentials) === null || _l === void 0 ? void 0 : _l.botToken, channelId: message.channelId, threadTs: message.threadTs }, (afterTs === undefined ? {} : { afterTs })), { excludeTs: excludeThreadTimestamps, mergeMessages,
393
+ ? loadSlackThreadDeltaBlock(Object.assign(Object.assign({ botToken: (_o = args.credentials) === null || _o === void 0 ? void 0 : _o.botToken, channelId: message.channelId, threadTs: message.threadTs }, (afterTs === undefined ? {} : { afterTs })), { excludeTs: excludeThreadTimestamps, mergeMessages,
318
394
  log }))
319
395
  : loadSlackThreadContextBlock({
320
- botToken: (_m = args.credentials) === null || _m === void 0 ? void 0 : _m.botToken,
396
+ botToken: (_p = args.credentials) === null || _p === void 0 ? void 0 : _p.botToken,
321
397
  channelId: message.channelId,
322
398
  threadTs: message.threadTs,
323
399
  excludeTs: excludeThreadTimestamps,
@@ -334,14 +410,15 @@ export function dispatchInboundMessage(args) {
334
410
  if (painted !== undefined) {
335
411
  yield painted;
336
412
  yield retractTurnStart({
337
- botToken: (_o = args.credentials) === null || _o === void 0 ? void 0 : _o.botToken,
413
+ botToken: (_q = args.credentials) === null || _q === void 0 ? void 0 : _q.botToken,
338
414
  channelId: message.channelId,
339
415
  threadTs: message.threadTs,
340
- ack: (_5 = args.ack) !== null && _5 !== void 0 ? _5 : "",
416
+ ack: (_7 = args.ack) !== null && _7 !== void 0 ? _7 : "",
341
417
  log,
342
418
  });
343
419
  }
344
- yield (_p = args.host.slackNudges) === null || _p === void 0 ? void 0 : _p.releaseAsk(message.channelId, message.ts);
420
+ yield (_r = args.host.slackNudges) === null || _r === void 0 ? void 0 : _r.releaseAsk(message.channelId, message.ts);
421
+ yield retractAdoptedPlaceholder();
345
422
  return;
346
423
  }
347
424
  if (message.files !== undefined && message.files.length > 0) {
@@ -349,8 +426,8 @@ export function dispatchInboundMessage(args) {
349
426
  kind,
350
427
  channel: message.channelId,
351
428
  thread_ts: message.threadTs,
352
- images: (_6 = (_q = media.images) === null || _q === void 0 ? void 0 : _q.length) !== null && _6 !== void 0 ? _6 : 0,
353
- workspace_files: Object.keys((_7 = media.workspaceFiles) !== null && _7 !== void 0 ? _7 : {}).length,
429
+ images: (_8 = (_s = media.images) === null || _s === void 0 ? void 0 : _s.length) !== null && _8 !== void 0 ? _8 : 0,
430
+ workspace_files: Object.keys((_9 = media.workspaceFiles) !== null && _9 !== void 0 ? _9 : {}).length,
354
431
  event_id: args.eventId,
355
432
  });
356
433
  }
@@ -358,11 +435,11 @@ export function dispatchInboundMessage(args) {
358
435
  log.info(hasSession ? "thread delta loaded" : "thread context loaded", Object.assign({ kind, channel: message.channelId, thread_ts: message.threadTs, chars: threadContext.length, event_id: args.eventId }, (afterTs === undefined ? {} : { after_ts: afterTs })));
359
436
  }
360
437
  const prompt = [
361
- formatSlackContextBlock(Object.assign(Object.assign({ userId: (_8 = (_r = message.author) === null || _r === void 0 ? void 0 : _r.userId) !== null && _8 !== void 0 ? _8 : "", channelId: message.channelId, threadTs: message.threadTs }, (((_s = message.author) === null || _s === void 0 ? void 0 : _s.userName) === undefined
438
+ formatSlackContextBlock(Object.assign(Object.assign({ userId: (_10 = (_t = message.author) === null || _t === void 0 ? void 0 : _t.userId) !== null && _10 !== void 0 ? _10 : "", channelId: message.channelId, threadTs: message.threadTs }, (((_u = message.author) === null || _u === void 0 ? void 0 : _u.userName) === undefined
362
439
  ? {}
363
440
  : { userName: message.author.userName })), (message.teamId === undefined ? {} : { teamId: message.teamId }))),
364
441
  ...(threadContext === undefined ? [] : [threadContext]),
365
- ...((_9 = decision.context) !== null && _9 !== void 0 ? _9 : []),
442
+ ...((_11 = decision.context) !== null && _11 !== void 0 ? _11 : []),
366
443
  "",
367
444
  media.userText,
368
445
  ]
@@ -374,34 +451,36 @@ export function dispatchInboundMessage(args) {
374
451
  const hostedFollowup = hosted &&
375
452
  hasPlaceholder &&
376
453
  (message.ts !== message.threadTs || continuationExists);
377
- const placeholder = hasPlaceholder && (!hosted || hostedFollowup)
454
+ // Adopted slots already exist in Slack; skip a second post. Cold hosted
455
+ // without a handoff still defers to `turn.started`.
456
+ const placeholder = !adoptedPlaceholder && hasPlaceholder && (!hosted || hostedFollowup)
378
457
  ? startPlaceholder({
379
458
  line: placeholderLine,
380
- botToken: (_t = args.credentials) === null || _t === void 0 ? void 0 : _t.botToken,
459
+ botToken: (_v = args.credentials) === null || _v === void 0 ? void 0 : _v.botToken,
381
460
  channelId: message.channelId,
382
461
  threadTs: message.threadTs,
383
462
  log,
384
- recipientUserId: (_u = message.author) === null || _u === void 0 ? void 0 : _u.userId,
463
+ recipientUserId: (_w = message.author) === null || _w === void 0 ? void 0 : _w.userId,
385
464
  recipientTeamId: message.teamId,
386
465
  })
387
466
  : undefined;
388
- const posted = placeholder !== undefined;
467
+ const posted = adoptedPlaceholder || placeholder !== undefined;
389
468
  const state = emptySlackChannelState({
390
469
  channelId: message.channelId,
391
470
  threadTs: message.threadTs,
392
- teamId: (_10 = message.teamId) !== null && _10 !== void 0 ? _10 : null,
393
- triggeringUserId: (_11 = (_v = message.author) === null || _v === void 0 ? void 0 : _v.userId) !== null && _11 !== void 0 ? _11 : null,
471
+ teamId: (_12 = message.teamId) !== null && _12 !== void 0 ? _12 : null,
472
+ triggeringUserId: (_13 = (_x = message.author) === null || _x === void 0 ? void 0 : _x.userId) !== null && _13 !== void 0 ? _13 : null,
394
473
  startPainted: paintedStart,
395
474
  placeholderPosted: posted,
396
475
  });
397
476
  const sendOptions = Object.assign(Object.assign({ auth: decision.auth }, sendPatch), { admission: "coalesce", coalesceSourceTs: message.ts, state: state, refreshState: slackWakeChannelState({
398
477
  channelId: message.channelId,
399
478
  threadTs: message.threadTs,
400
- teamId: (_12 = message.teamId) !== null && _12 !== void 0 ? _12 : null,
401
- triggeringUserId: (_13 = (_w = message.author) === null || _w === void 0 ? void 0 : _w.userId) !== null && _13 !== void 0 ? _13 : null,
479
+ teamId: (_14 = message.teamId) !== null && _14 !== void 0 ? _14 : null,
480
+ triggeringUserId: (_15 = (_y = message.author) === null || _y === void 0 ? void 0 : _y.userId) !== null && _15 !== void 0 ? _15 : null,
402
481
  startPainted: paintedStart,
403
482
  placeholderPosted: posted,
404
- }), title: (_14 = decision.title) !== null && _14 !== void 0 ? _14 : `slack:${message.channelId}:${message.threadTs}`, workspaceDir: decision.workspaceDir, workspaceFiles: media.workspaceFiles, images: media.images, cloud: decision.cloud, sdkAgentId: decision.sdkAgentId });
483
+ }), title: (_16 = decision.title) !== null && _16 !== void 0 ? _16 : `slack:${message.channelId}:${message.threadTs}`, workspaceDir: decision.workspaceDir, workspaceFiles: media.workspaceFiles, images: media.images, cloud: decision.cloud, sdkAgentId: decision.sdkAgentId });
405
484
  try {
406
485
  const session = yield args.send(prompt, sendOptions);
407
486
  if (isDeferredChannelSession(session)) {
@@ -438,11 +517,11 @@ export function dispatchInboundMessage(args) {
438
517
  });
439
518
  if (!steeringEnabled()) {
440
519
  try {
441
- yield (_x = args.host.slackNudges) === null || _x === void 0 ? void 0 : _x.append({
520
+ yield (_z = args.host.slackNudges) === null || _z === void 0 ? void 0 : _z.append({
442
521
  continuationKey: continuation,
443
522
  sourceTs: message.ts,
444
523
  text: media.userText,
445
- author: (_y = message.author) === null || _y === void 0 ? void 0 : _y.userName,
524
+ author: (_0 = message.author) === null || _0 === void 0 ? void 0 : _0.userName,
446
525
  });
447
526
  }
448
527
  catch (nudgeError) {
@@ -472,17 +551,18 @@ export function dispatchInboundMessage(args) {
472
551
  }
473
552
  }
474
553
  catch (error) {
475
- yield (_z = args.host.slackNudges) === null || _z === void 0 ? void 0 : _z.releaseAsk(message.channelId, message.ts);
554
+ yield (_1 = args.host.slackNudges) === null || _1 === void 0 ? void 0 : _1.releaseAsk(message.channelId, message.ts);
476
555
  if (placeholder !== undefined) {
477
556
  yield placeholder.retract();
478
557
  }
558
+ yield retractAdoptedPlaceholder();
479
559
  if (painted !== undefined) {
480
560
  yield painted;
481
561
  yield retractTurnStart({
482
- botToken: (_0 = args.credentials) === null || _0 === void 0 ? void 0 : _0.botToken,
562
+ botToken: (_2 = args.credentials) === null || _2 === void 0 ? void 0 : _2.botToken,
483
563
  channelId: message.channelId,
484
564
  threadTs: message.threadTs,
485
- ack: (_15 = args.ack) !== null && _15 !== void 0 ? _15 : "",
565
+ ack: (_17 = args.ack) !== null && _17 !== void 0 ? _17 : "",
486
566
  log,
487
567
  });
488
568
  }
@@ -510,12 +590,27 @@ export function dispatchInboundFromEventBody(body, deps) {
510
590
  var _e, _f, _g, _h, _j;
511
591
  const log = (_e = deps.log) !== null && _e !== void 0 ? _e : defaultSlackLog;
512
592
  let eventId;
593
+ const retractUnscheduledHandoff = () => {
594
+ var _a, _b;
595
+ const placeholder = (_a = deps.platformHandoff) === null || _a === void 0 ? void 0 : _a.slackPlaceholder;
596
+ if (placeholder === undefined) {
597
+ return;
598
+ }
599
+ deps.waitUntil(retractPlaceholderMessage({
600
+ botToken: (_b = deps.credentials) === null || _b === void 0 ? void 0 : _b.botToken,
601
+ channelId: placeholder.channelId,
602
+ ts: placeholder.messageTs,
603
+ streamed: placeholder.streamed,
604
+ log,
605
+ }));
606
+ };
513
607
  if (body !== null && typeof body === "object" && !Array.isArray(body)) {
514
608
  const root = body;
515
609
  if (typeof root.event_id === "string" && root.event_id.length > 0) {
516
610
  eventId = root.event_id;
517
611
  if (!deps.eventIds.tryHandle(root.event_id)) {
518
612
  log.debug("inbound dedupe drop", { event_id: eventId });
613
+ retractUnscheduledHandoff();
519
614
  return false;
520
615
  }
521
616
  }
@@ -526,6 +621,7 @@ export function dispatchInboundFromEventBody(body, deps) {
526
621
  if (mention !== null) {
527
622
  if (deps.mentionsEnabled === false) {
528
623
  log.debug("inbound ignored (mentions disabled)", { event_id: eventId });
624
+ retractUnscheduledHandoff();
529
625
  return false;
530
626
  }
531
627
  if (((_a = mention.author) === null || _a === void 0 ? void 0 : _a.isBot) === true) {
@@ -543,6 +639,7 @@ export function dispatchInboundFromEventBody(body, deps) {
543
639
  from_bot: (_g = mention.author.botId) !== null && _g !== void 0 ? _g : mention.author.userId,
544
640
  reason: verdict.reason,
545
641
  });
642
+ retractUnscheduledHandoff();
546
643
  return false;
547
644
  }
548
645
  }
@@ -552,6 +649,7 @@ export function dispatchInboundFromEventBody(body, deps) {
552
649
  handler: deps.onAppMention,
553
650
  evalCommandsEnabled: deps.evalCommandsEnabled,
554
651
  eventId,
652
+ platformHandoff: deps.platformHandoff,
555
653
  });
556
654
  return true;
557
655
  }
@@ -561,6 +659,7 @@ export function dispatchInboundFromEventBody(body, deps) {
561
659
  log.debug("inbound ignored (direct messages disabled)", {
562
660
  event_id: eventId,
563
661
  });
662
+ retractUnscheduledHandoff();
564
663
  return false;
565
664
  }
566
665
  scheduleInbound(deps, log, {
@@ -569,11 +668,13 @@ export function dispatchInboundFromEventBody(body, deps) {
569
668
  handler: deps.onDirectMessage,
570
669
  evalCommandsEnabled: deps.evalCommandsEnabled,
571
670
  eventId,
671
+ platformHandoff: deps.platformHandoff,
572
672
  });
573
673
  return true;
574
674
  }
575
675
  const reaction = parseReactionAddedEvent(body);
576
676
  if (reaction !== null && deps.onReactionAdded !== undefined) {
677
+ retractUnscheduledHandoff();
577
678
  scheduleInbound(deps, log, {
578
679
  kind: "reaction_added",
579
680
  message: reaction,
@@ -631,9 +732,11 @@ export function dispatchInboundFromEventBody(body, deps) {
631
732
  includeBotAuthored: true,
632
733
  });
633
734
  if (channelEvent !== null) {
735
+ retractUnscheduledHandoff();
634
736
  return deps.channelWatch.handle(channelEvent, eventId);
635
737
  }
636
738
  }
637
739
  log.debug("inbound ignored (unhandled event shape)", Object.assign(Object.assign({}, describeSlackEventShape(body)), { event_id: eventId }));
740
+ retractUnscheduledHandoff();
638
741
  return false;
639
742
  }
@@ -9,6 +9,13 @@
9
9
  import { type SlackLog } from "./log.js";
10
10
  import type { SlackBotToken } from "./types.js";
11
11
  export declare function resetPlaceholderSlots(): void;
12
+ /** Retract only one thread's slot; admission cleanup must not sweep DM peers. */
13
+ export declare function retractPlaceholderSlot(args: {
14
+ channelId: string;
15
+ threadTs: string;
16
+ botToken: SlackBotToken | undefined;
17
+ log?: SlackLog;
18
+ }): Promise<void>;
12
19
  export declare function finishPlaceholder(args: {
13
20
  channelId: string;
14
21
  threadTs: string;
@@ -27,6 +34,25 @@ export declare function startPlaceholder(args: {
27
34
  done: Promise<void>;
28
35
  retract: () => Promise<void>;
29
36
  } | undefined;
37
+ /**
38
+ * Seed the in-process placeholder slot with a control-plane-posted message
39
+ * ts so the first agentic update overlays that exact Slack message.
40
+ */
41
+ export type PlaceholderAdoption = "adopted" | "already_adopted" | "occupied";
42
+ export declare function adoptPlaceholder(args: {
43
+ channelId: string;
44
+ threadTs: string;
45
+ ts: string;
46
+ streamed?: boolean;
47
+ }): PlaceholderAdoption;
48
+ /** Delete a control-plane placeholder that this process could not adopt. */
49
+ export declare function retractPlaceholderMessage(args: {
50
+ botToken: SlackBotToken | undefined;
51
+ channelId: string;
52
+ ts: string;
53
+ streamed: boolean;
54
+ log?: SlackLog;
55
+ }): Promise<void>;
30
56
  export declare function overlayPlaceholder(args: {
31
57
  channelId: string;
32
58
  threadTs: string;
@@ -1 +1 @@
1
- {"version":3,"file":"placeholder.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/placeholder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAyChD,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AA+DD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,GAAG,CAAC,EAAE,QAAQ,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,GAAG,SAAS,CAUpE;AAkFD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAO9B"}
1
+ {"version":3,"file":"placeholder.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/placeholder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAyChD,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AA+DD,iFAAiF;AACjF,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,GAAG,CAAC,EAAE,QAAQ,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhB;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,GAAG,CAAC,EAAE,QAAQ,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,GAAG,SAAS,CAUpE;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,iBAAiB,GAAG,UAAU,CAAC;AAE7E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,mBAAmB,CAiBtB;AAED,4EAA4E;AAC5E,wBAAsB,yBAAyB,CAAC,IAAI,EAAE;IACpD,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,QAAQ,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhB;AAkFD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAO9B"}
@@ -86,6 +86,12 @@ function retractKey(key, args) {
86
86
  });
87
87
  });
88
88
  }
89
+ /** Retract only one thread's slot; admission cleanup must not sweep DM peers. */
90
+ export function retractPlaceholderSlot(args) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ yield retractKey(slotKey(args.channelId, args.threadTs), args);
93
+ });
94
+ }
89
95
  export function finishPlaceholder(args) {
90
96
  return __awaiter(this, void 0, void 0, function* () {
91
97
  const first = slotKey(args.channelId, args.threadTs);
@@ -107,6 +113,28 @@ export function startPlaceholder(args) {
107
113
  retract: () => retractKey(key, Object.assign(Object.assign({}, args), { log })),
108
114
  };
109
115
  }
116
+ export function adoptPlaceholder(args) {
117
+ const key = slotKey(args.channelId, args.threadTs);
118
+ const existing = slots.get(key);
119
+ if (existing !== undefined &&
120
+ !existing.claimed &&
121
+ existing.ts === args.ts &&
122
+ existing.streamed === (args.streamed === true)) {
123
+ return "already_adopted";
124
+ }
125
+ if (!openPlaceholder(key)) {
126
+ return "occupied";
127
+ }
128
+ return rememberPlaceholder(key, args.ts, args.streamed === true)
129
+ ? "adopted"
130
+ : "occupied";
131
+ }
132
+ /** Delete a control-plane placeholder that this process could not adopt. */
133
+ export function retractPlaceholderMessage(args) {
134
+ return __awaiter(this, void 0, void 0, function* () {
135
+ yield retractPosted(args);
136
+ });
137
+ }
110
138
  function postPlaceholder(args) {
111
139
  return __awaiter(this, void 0, void 0, function* () {
112
140
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"slack-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/slack-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAaH,OAAO,KAAK,EAEV,iBAAiB,EAMlB,MAAM,gBAAgB,CAAC;AA+CxB,OAAO,KAAK,EAEV,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAQpB;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,GACjB,mBAAmB,GAAG,SAAS,CAEjC;AAED,0EAA0E;AAC1E,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,aAAa,CAAC;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9C,uBAAuB,GAAG,SAAS,CAYrC;AAaD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,GAAE,mBAAwB,GACjC,iBAAiB,CAAC,iBAAiB,CAAC,CA6gBtC"}
1
+ {"version":3,"file":"slack-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/slack-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAaH,OAAO,KAAK,EAEV,iBAAiB,EAMlB,MAAM,gBAAgB,CAAC;AA+CxB,OAAO,KAAK,EAEV,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAQpB;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,GACjB,mBAAmB,GAAG,SAAS,CAEjC;AAED,0EAA0E;AAC1E,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,aAAa,CAAC;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9C,uBAAuB,GAAG,SAAS,CAYrC;AAaD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,GAAE,mBAAwB,GACjC,iBAAiB,CAAC,iBAAiB,CAAC,CAohBtC"}
@@ -163,11 +163,13 @@ export function slackChannel(authored = {}) {
163
163
  let botMentionGate;
164
164
  function inboundDeps(args) {
165
165
  var _a;
166
- return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ send: args.send, continuation: options.continuation, waitUntil: args.waitUntil, onAppMention,
166
+ return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ send: args.send, continuation: options.continuation, waitUntil: args.waitUntil, onAppMention,
167
167
  onDirectMessage }, (onReactionAdded === undefined ? {} : { onReactionAdded })), { credentials, eventIds: (_a = args.eventIds) !== null && _a !== void 0 ? _a : eventIds, propagateHandlerErrors: args.propagateHandlerErrors, host: args.host, artifacts: args.artifacts, log: getLog(), mentionsEnabled,
168
168
  directMessagesEnabled,
169
169
  evalCommandsEnabled,
170
- followUpStatus, ack: reply.ack, placeholder: reply.placeholder, blockExternals }), (args.hasContinuationSession === undefined
170
+ followUpStatus, ack: reply.ack, placeholder: reply.placeholder, blockExternals }), (args.platformHandoff === undefined
171
+ ? {}
172
+ : { platformHandoff: args.platformHandoff })), (args.hasContinuationSession === undefined
171
173
  ? {}
172
174
  : { hasContinuationSession: args.hasContinuationSession })), (args.isContinuationBusy === undefined
173
175
  ? {}
@@ -190,7 +192,9 @@ export function slackChannel(authored = {}) {
190
192
  ? {
191
193
  slackReply: Object.assign({ mode: "agentic", ack: (_g = reply.ack) !== null && _g !== void 0 ? _g : DEFAULT_ACK }, (reply.placeholder === undefined
192
194
  ? {}
193
- : { placeholder: reply.placeholder })),
195
+ : {
196
+ placeholder: reply.placeholder,
197
+ })),
194
198
  }
195
199
  : {})), (channelPosts === undefined
196
200
  ? {}
@@ -449,19 +453,8 @@ export function slackChannel(authored = {}) {
449
453
  // claim already dedupes Slack retries, and on a warm pod the local set
450
454
  // would otherwise swallow the control plane's own retry of a delivery
451
455
  // that failed after the id was marked handled.
452
- dispatch: (_a) => __awaiter(this, [_a], void 0, function* ({ payload, args }) {
453
- const dispatched = dispatchInboundFromEventBody(payload, inboundDeps({
454
- send: args.send,
455
- waitUntil: args.waitUntil,
456
- host: args.host,
457
- artifacts: args.artifacts,
458
- eventIds: createEventIdDedupe(),
459
- propagateHandlerErrors: true,
460
- hasContinuationSession: args.hasContinuationSession,
461
- isContinuationBusy: args.isContinuationBusy,
462
- getContinuationLastBotMessageTs: args.getContinuationLastBotMessageTs,
463
- interruptContinuation: args.interruptContinuation,
464
- }));
456
+ dispatch: (_a) => __awaiter(this, [_a], void 0, function* ({ payload, args, platformHandoff }) {
457
+ const dispatched = dispatchInboundFromEventBody(payload, inboundDeps(Object.assign({ send: args.send, waitUntil: args.waitUntil, host: args.host, artifacts: args.artifacts, eventIds: createEventIdDedupe(), propagateHandlerErrors: true, hasContinuationSession: args.hasContinuationSession, isContinuationBusy: args.isContinuationBusy, getContinuationLastBotMessageTs: args.getContinuationLastBotMessageTs, interruptContinuation: args.interruptContinuation }, (platformHandoff === undefined ? {} : { platformHandoff }))));
465
458
  return skipped(dispatched ? "not_engaged" : "not_dispatchable");
466
459
  }),
467
460
  });