@cursor/july 0.1.111 → 0.1.113

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 (441) hide show
  1. package/README.md +4 -0
  2. package/dist/bin/agent-serve.js +20 -4
  3. package/dist/channels/checks.d.ts +10 -0
  4. package/dist/channels/checks.d.ts.map +1 -1
  5. package/dist/channels/github/github-channel.d.ts +29 -19
  6. package/dist/channels/github/github-channel.d.ts.map +1 -1
  7. package/dist/channels/github/github-channel.js +29 -19
  8. package/dist/channels/origin/checks.d.ts +1 -1
  9. package/dist/channels/origin/checks.d.ts.map +1 -1
  10. package/dist/channels/slack/agentic-delivery.d.ts.map +1 -1
  11. package/dist/channels/slack/agentic-delivery.js +2 -0
  12. package/dist/channels/slack/dispatch.d.ts +11 -1
  13. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  14. package/dist/channels/slack/dispatch.js +146 -39
  15. package/dist/channels/slack/placeholder.d.ts +26 -0
  16. package/dist/channels/slack/placeholder.d.ts.map +1 -1
  17. package/dist/channels/slack/placeholder.js +28 -0
  18. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  19. package/dist/channels/slack/slack-channel.js +9 -16
  20. package/dist/docs/404.html +2 -2
  21. package/dist/docs/assets/{app.Drol6mi6.js → app.CAeK13eM.js} +4 -4
  22. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.js +9 -0
  23. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.lean.js +1 -0
  24. package/dist/docs/assets/chunks/@localSearchIndexroot.Ck9E52Ls.js +1 -0
  25. package/dist/docs/assets/chunks/{VPLocalSearchBox.CdqoBZJX.js → VPLocalSearchBox.C9LbPHod.js} +1 -1
  26. package/dist/docs/assets/chunks/{arc.BVX3ycTn.js → arc.CmMq2zmS.js} +1 -1
  27. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CcChnMxX.js → architectureDiagram-Q4EWVU46.CCXB8Uj5.js} +1 -1
  28. package/dist/docs/assets/chunks/{baseUniq.xwtXO-yt.js → baseUniq.CyQo6eLe.js} +1 -1
  29. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CijZ_taK.js → blockDiagram-DXYQGD6D.JYq6w91N.js} +1 -1
  30. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.0FBvwBvK.js → c4Diagram-AHTNJAMY.BRV8GPJJ.js} +1 -1
  31. package/dist/docs/assets/chunks/channel.BHiYmnZ4.js +1 -0
  32. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CELMmMDA.js → chunk-4BX2VUAB.Bv4ooYQR.js} +1 -1
  33. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C4bhFtSm.js → chunk-4TB4RGXK.t4JtKPcj.js} +1 -1
  34. package/dist/docs/assets/chunks/{chunk-55IACEB6.ZnQ9gRRQ.js → chunk-55IACEB6.34lCHj9Y.js} +1 -1
  35. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DPlmglG-.js → chunk-EDXVE4YY.BSwrPNrt.js} +1 -1
  36. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.BrUk8pff.js → chunk-FMBD7UC4.Beeun-R-.js} +1 -1
  37. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CcmWIncu.js → chunk-OYMX7WX6.BUUFUcJc.js} +1 -1
  38. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D65-cs8I.js → chunk-QZHKN3VN.B2XjHzN_.js} +1 -1
  39. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.qoXZpG9F.js → chunk-YZCP3GAM.CLYG8znk.js} +1 -1
  40. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Degh8l90.js +1 -0
  41. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Degh8l90.js +1 -0
  42. package/dist/docs/assets/chunks/clone.BIywbczV.js +1 -0
  43. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.8rYtqudO.js → cose-bilkent-S5V4N54A.DVEa6fZp.js} +1 -1
  44. package/dist/docs/assets/chunks/{dagre-KV5264BT.DrRP1fOh.js → dagre-KV5264BT.C9PZQK-S.js} +1 -1
  45. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DHj_xA2_.js → diagram-5BDNPKRD.DoN0uv3Y.js} +1 -1
  46. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.Bz_6nAKj.js → diagram-G4DWMVQ6.Czv3duqx.js} +1 -1
  47. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BWA0xSW9.js → diagram-MMDJMWI5.BinJ5kWb.js} +1 -1
  48. package/dist/docs/assets/chunks/{diagram-TYMM5635.CpTJLNJI.js → diagram-TYMM5635.DW326M4K.js} +1 -1
  49. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.-7AWWSrP.js → erDiagram-SMLLAGMA.U2pR_OA7.js} +1 -1
  50. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BTnQ742_.js → flowDiagram-DWJPFMVM.ByWJXeYK.js} +1 -1
  51. package/dist/docs/assets/chunks/framework.BNw1pucY.js +19 -0
  52. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.B5_HiiQ5.js → ganttDiagram-T4ZO3ILL.OquF0Rtg.js} +1 -1
  53. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CZcNTFZd.js → gitGraphDiagram-UUTBAWPF.Bpn01P7X.js} +1 -1
  54. package/dist/docs/assets/chunks/{graph.V2GLaab4.js → graph.CNRB6ETL.js} +1 -1
  55. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.7pZOkCCU.js → infoDiagram-42DDH7IO.CqhknMWi.js} +1 -1
  56. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DSMo3Qa3.js → ishikawaDiagram-UXIWVN3A.C6xpR2af.js} +1 -1
  57. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BNEgWN1S.js → journeyDiagram-VCZTEJTY.Cg5f7oB3.js} +1 -1
  58. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B-4d4tC7.js → kanban-definition-6JOO6SKY.Cx9YTwlU.js} +1 -1
  59. package/dist/docs/assets/chunks/{layout.Dvbn9nSb.js → layout.ljS-wFtK.js} +1 -1
  60. package/dist/docs/assets/chunks/{linear.D2GM4p4b.js → linear.jSxNrsFC.js} +1 -1
  61. package/dist/docs/assets/chunks/{min.DVBtLK-B.js → min.Cum8AlQw.js} +1 -1
  62. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CnJRI55x.js → mindmap-definition-QFDTVHPH.BLiysLpe.js} +1 -1
  63. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.CtoaTFlA.js → pieDiagram-DEJITSTG.BoIDyuKF.js} +1 -1
  64. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DtT24_vN.js → quadrantDiagram-34T5L4WZ.DLkpDytR.js} +1 -1
  65. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CjSO4o8f.js → requirementDiagram-MS252O5E.DqTVqSu2.js} +1 -1
  66. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.-wWiIVWa.js → sankeyDiagram-XADWPNL6.CG_6FF7j.js} +1 -1
  67. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DSk8s4gX.js → sequenceDiagram-FGHM5R23.BIp9602K.js} +1 -1
  68. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BFKAsdkN.js → stateDiagram-FHFEXIEX.COSXsD9I.js} +1 -1
  69. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.qrxrbFsX.js +1 -0
  70. package/dist/docs/assets/chunks/{theme.C0MctGaz.js → theme.CXJ7PNwy.js} +2 -2
  71. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.TUNJbAFe.js → timeline-definition-GMOUNBTQ.CXdVqkLq.js} +1 -1
  72. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.C-RGNnk4.js → vennDiagram-DHZGUBPP.CZxGuc4r.js} +1 -1
  73. package/dist/docs/assets/chunks/{wardley-RL74JXVD.g5efOWmT.js → wardley-RL74JXVD.3oVgfqQk.js} +1 -1
  74. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.DH4zt73Y.js → wardleyDiagram-NUSXRM2D.6_irCgGJ.js} +1 -1
  75. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B-3k6bF6.js → xychartDiagram-5P7HB3ND.TRPe92m3.js} +1 -1
  76. package/dist/docs/assets/deployment.md.D2jQZuFx.js +32 -0
  77. package/dist/docs/assets/deployment.md.D2jQZuFx.lean.js +1 -0
  78. package/dist/docs/assets/evals.md.D3Y3Aixt.js +72 -0
  79. package/dist/docs/assets/evals.md.D3Y3Aixt.lean.js +1 -0
  80. package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.js +41 -0
  81. package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.lean.js +1 -0
  82. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.js +145 -0
  83. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.lean.js +1 -0
  84. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.js +15 -0
  85. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.lean.js +1 -0
  86. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.js +43 -0
  87. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.lean.js +1 -0
  88. package/dist/docs/assets/guides_github.md.BwpBp3ed.js +156 -0
  89. package/dist/docs/assets/guides_github.md.BwpBp3ed.lean.js +1 -0
  90. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.js +153 -0
  91. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.lean.js +1 -0
  92. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.js +16 -0
  93. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.lean.js +1 -0
  94. package/dist/docs/assets/guides_improve.md.Bnp4F99w.js +22 -0
  95. package/dist/docs/assets/guides_improve.md.Bnp4F99w.lean.js +1 -0
  96. package/dist/docs/assets/guides_jev.md.F5fAkkfN.js +189 -0
  97. package/dist/docs/assets/guides_jev.md.F5fAkkfN.lean.js +1 -0
  98. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.js +50 -0
  99. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.lean.js +1 -0
  100. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.js +35 -0
  101. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.lean.js +1 -0
  102. package/dist/docs/assets/guides_slack.md.Bo96y42E.js +70 -0
  103. package/dist/docs/assets/guides_slack.md.Bo96y42E.lean.js +1 -0
  104. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.js +92 -0
  105. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.lean.js +1 -0
  106. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.js +7 -0
  107. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.lean.js +1 -0
  108. package/dist/docs/assets/{index.md.BFVyY2KT.js → index.md.C-t81M5J.js} +2 -2
  109. package/dist/docs/assets/{index.md.BFVyY2KT.lean.js → index.md.C-t81M5J.lean.js} +1 -1
  110. package/dist/docs/assets/{quickstart.md.D3MjSZN-.js → quickstart.md.DAvVhuuU.js} +1 -1
  111. package/dist/docs/assets/{quickstart.md.D3MjSZN-.lean.js → quickstart.md.DAvVhuuU.lean.js} +1 -1
  112. package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.js → reference_agent-config.md.DGPyw7ms.js} +1 -1
  113. package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.lean.js → reference_agent-config.md.DGPyw7ms.lean.js} +1 -1
  114. package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.js → reference_artifacts.md.Bu_4HmsD.js} +1 -1
  115. package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.lean.js → reference_artifacts.md.Bu_4HmsD.lean.js} +1 -1
  116. package/dist/docs/assets/{reference_channels.md.icqLKcTc.js → reference_channels.md.nFWbzAic.js} +1 -1
  117. package/dist/docs/assets/{reference_channels.md.icqLKcTc.lean.js → reference_channels.md.nFWbzAic.lean.js} +1 -1
  118. package/dist/docs/assets/{reference_cli.md.B2dBL6L8.js → reference_cli.md.DLWDz9ij.js} +3 -1
  119. package/dist/docs/assets/{reference_cli.md.B2dBL6L8.lean.js → reference_cli.md.DLWDz9ij.lean.js} +1 -1
  120. package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.js → reference_connections.md.Je9dMsdd.js} +2 -2
  121. package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.lean.js → reference_connections.md.Je9dMsdd.lean.js} +1 -1
  122. package/dist/docs/assets/reference_evals.md.DNJzM_yf.js +57 -0
  123. package/dist/docs/assets/reference_evals.md.DNJzM_yf.lean.js +1 -0
  124. package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.js +58 -0
  125. package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.lean.js +1 -0
  126. package/dist/docs/assets/{reference_hooks.md.CZuynAxj.js → reference_hooks.md.B7uzNENk.js} +2 -2
  127. package/dist/docs/assets/{reference_hooks.md.CZuynAxj.lean.js → reference_hooks.md.B7uzNENk.lean.js} +1 -1
  128. package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.js → reference_http-api.md.CduHavZ2.js} +1 -1
  129. package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.lean.js → reference_http-api.md.CduHavZ2.lean.js} +1 -1
  130. package/dist/docs/assets/{reference_instructions.md.D7gkckK-.js → reference_instructions.md.CU1My5My.js} +1 -1
  131. package/dist/docs/assets/{reference_instructions.md.D7gkckK-.lean.js → reference_instructions.md.CU1My5My.lean.js} +1 -1
  132. package/dist/docs/assets/{reference_playground.md.D2YExv5K.js → reference_playground.md.Ch2d0Iqi.js} +1 -1
  133. package/dist/docs/assets/{reference_playground.md.D2YExv5K.lean.js → reference_playground.md.Ch2d0Iqi.lean.js} +1 -1
  134. package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.js → reference_project-layout.md.BGhgpy9V.js} +1 -1
  135. package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.lean.js → reference_project-layout.md.BGhgpy9V.lean.js} +1 -1
  136. package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.js → reference_prompt.md.Ccp0R53H.js} +1 -1
  137. package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.lean.js → reference_prompt.md.Ccp0R53H.lean.js} +1 -1
  138. package/dist/docs/assets/{reference_schedules.md.BasfZWO-.js → reference_schedules.md.B2Nm6FaD.js} +1 -1
  139. package/dist/docs/assets/{reference_schedules.md.BasfZWO-.lean.js → reference_schedules.md.B2Nm6FaD.lean.js} +1 -1
  140. package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.js → reference_sessions.md.1_6Vyv7x.js} +1 -1
  141. package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.lean.js → reference_sessions.md.1_6Vyv7x.lean.js} +1 -1
  142. package/dist/docs/assets/{reference_skills.md.rNgpsGd0.js → reference_skills.md.DjQkRefx.js} +1 -1
  143. package/dist/docs/assets/{reference_skills.md.rNgpsGd0.lean.js → reference_skills.md.DjQkRefx.lean.js} +1 -1
  144. package/dist/docs/assets/{reference_subagents.md.e5qitjJt.js → reference_subagents.md.Dl16gcBj.js} +2 -2
  145. package/dist/docs/assets/{reference_subagents.md.e5qitjJt.lean.js → reference_subagents.md.Dl16gcBj.lean.js} +1 -1
  146. package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.js → reference_tools.md.B1dH1lpa.js} +3 -3
  147. package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.lean.js → reference_tools.md.B1dH1lpa.lean.js} +1 -1
  148. package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.js → templates_agentic-owners.md.9M575F5C.js} +1 -1
  149. package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.lean.js → templates_agentic-owners.md.9M575F5C.lean.js} +1 -1
  150. package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.js → templates_pr-autofixer.md.ws0DDXDy.js} +1 -1
  151. package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.lean.js → templates_pr-autofixer.md.ws0DDXDy.lean.js} +1 -1
  152. package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.js → templates_security-reviewer.md.KEFYXzfK.js} +1 -1
  153. package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.lean.js → templates_security-reviewer.md.KEFYXzfK.lean.js} +1 -1
  154. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.js +3 -0
  155. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.lean.js +1 -0
  156. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.js +3 -0
  157. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.lean.js +1 -0
  158. package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.js → templates_triage.md.CVGe_FG6.js} +1 -1
  159. package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.lean.js → templates_triage.md.CVGe_FG6.lean.js} +1 -1
  160. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.js +1 -0
  161. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.lean.js +1 -0
  162. package/dist/docs/building-with-agents.html +44 -48
  163. package/dist/docs/building-with-agents.md +94 -82
  164. package/dist/docs/deployment.html +59 -78
  165. package/dist/docs/deployment.md +117 -363
  166. package/dist/docs/evals.html +85 -224
  167. package/dist/docs/evals.md +149 -673
  168. package/dist/docs/guides/agent-to-agent.html +74 -47
  169. package/dist/docs/guides/agent-to-agent.md +128 -46
  170. package/dist/docs/guides/bitbucket.html +179 -44
  171. package/dist/docs/guides/bitbucket.md +249 -48
  172. package/dist/docs/guides/cloud-agents.html +46 -40
  173. package/dist/docs/guides/cloud-agents.md +119 -66
  174. package/dist/docs/guides/convert-automation.html +80 -49
  175. package/dist/docs/guides/convert-automation.md +156 -147
  176. package/dist/docs/guides/github.html +184 -92
  177. package/dist/docs/guides/github.md +260 -245
  178. package/dist/docs/guides/gitlab.html +184 -45
  179. package/dist/docs/guides/gitlab.md +249 -50
  180. package/dist/docs/guides/grokbot-agents.html +48 -41
  181. package/dist/docs/guides/grokbot-agents.md +99 -53
  182. package/dist/docs/guides/improve.html +48 -40
  183. package/dist/docs/guides/improve.md +111 -58
  184. package/dist/docs/guides/jev.html +248 -0
  185. package/dist/docs/guides/jev.md +348 -0
  186. package/dist/docs/guides/mcp-oauth.html +74 -52
  187. package/dist/docs/guides/mcp-oauth.md +111 -121
  188. package/dist/docs/guides/opentelemetry.html +63 -54
  189. package/dist/docs/guides/opentelemetry.md +96 -165
  190. package/dist/docs/guides/slack.html +83 -59
  191. package/dist/docs/guides/slack.md +157 -227
  192. package/dist/docs/guides/webhooks.html +97 -230
  193. package/dist/docs/guides/webhooks.md +154 -385
  194. package/dist/docs/hashmap.json +1 -1
  195. package/dist/docs/hillclimbing.html +44 -38
  196. package/dist/docs/hillclimbing.md +101 -55
  197. package/dist/docs/index.html +38 -38
  198. package/dist/docs/index.md +2 -0
  199. package/dist/docs/llms-full.txt +3490 -3146
  200. package/dist/docs/llms.txt +22 -18
  201. package/dist/docs/quickstart.html +37 -37
  202. package/dist/docs/reference/agent-config.html +37 -37
  203. package/dist/docs/reference/artifacts.html +38 -38
  204. package/dist/docs/reference/channels.html +37 -37
  205. package/dist/docs/reference/cli.html +39 -37
  206. package/dist/docs/reference/cli.md +2 -0
  207. package/dist/docs/reference/connections.html +38 -38
  208. package/dist/docs/reference/connections.md +1 -1
  209. package/dist/docs/reference/evals.html +116 -0
  210. package/dist/docs/reference/evals.md +293 -0
  211. package/dist/docs/reference/extensions.html +80 -84
  212. package/dist/docs/reference/extensions.md +131 -202
  213. package/dist/docs/reference/hooks.html +39 -39
  214. package/dist/docs/reference/hooks.md +34 -34
  215. package/dist/docs/reference/http-api.html +37 -37
  216. package/dist/docs/reference/instructions.html +37 -37
  217. package/dist/docs/reference/playground.html +37 -37
  218. package/dist/docs/reference/project-layout.html +37 -37
  219. package/dist/docs/reference/prompt.html +37 -37
  220. package/dist/docs/reference/schedules.html +37 -37
  221. package/dist/docs/reference/sessions.html +37 -37
  222. package/dist/docs/reference/skills.html +37 -37
  223. package/dist/docs/reference/subagents.html +38 -38
  224. package/dist/docs/reference/subagents.md +1 -1
  225. package/dist/docs/reference/tools.html +38 -38
  226. package/dist/docs/reference/tools.md +4 -0
  227. package/dist/docs/templates/agentic-owners.html +38 -38
  228. package/dist/docs/templates/pr-autofixer.html +37 -37
  229. package/dist/docs/templates/security-reviewer.html +38 -38
  230. package/dist/docs/templates/thermo-quality-review.html +62 -0
  231. package/dist/docs/templates/thermo-quality-review.md +75 -0
  232. package/dist/docs/templates/thermo-review.html +62 -0
  233. package/dist/docs/templates/thermo-review.md +74 -0
  234. package/dist/docs/templates/triage.html +37 -37
  235. package/dist/docs/troubleshooting.html +38 -38
  236. package/dist/docs/troubleshooting.md +97 -66
  237. package/dist/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  238. package/dist/extensions/improve/extension.d.ts +3 -1
  239. package/dist/extensions/improve/extension.d.ts.map +1 -1
  240. package/dist/extensions/improve/extension.js +4 -2
  241. package/dist/extensions/improve/skills/yourself.js +1 -1
  242. package/dist/extensions/jev/extension.d.ts +43 -0
  243. package/dist/extensions/jev/extension.d.ts.map +1 -0
  244. package/dist/extensions/jev/extension.js +47 -0
  245. package/dist/extensions/jev/lib/evaluate.d.ts +101 -0
  246. package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -0
  247. package/dist/extensions/jev/lib/evaluate.js +167 -0
  248. package/dist/extensions/jev/skills/gated-write.md +25 -0
  249. package/dist/extensions/jev/skills/questions.md +33 -0
  250. package/dist/extensions/jev/tools/evaluate.d.ts +4 -0
  251. package/dist/extensions/jev/tools/evaluate.d.ts.map +1 -0
  252. package/dist/extensions/jev/tools/evaluate.js +88 -0
  253. package/dist/extensions.d.ts +1 -1
  254. package/dist/extensions.d.ts.map +1 -1
  255. package/dist/extensions.js +2 -0
  256. package/dist/filesystem.d.ts +46 -2
  257. package/dist/filesystem.d.ts.map +1 -1
  258. package/dist/filesystem.js +149 -102
  259. package/dist/index.d.ts +2 -2
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +1 -1
  262. package/dist/internal/advertise-tools.d.ts.map +1 -1
  263. package/dist/internal/advertise-tools.js +6 -0
  264. package/dist/internal/cli-ax.d.ts +6 -0
  265. package/dist/internal/cli-ax.d.ts.map +1 -1
  266. package/dist/internal/cli-ax.js +72 -14
  267. package/dist/internal/continuation-identity.d.ts.map +1 -1
  268. package/dist/internal/continuation-identity.js +1 -0
  269. package/dist/internal/cursor-agent-template.d.ts +1 -1
  270. package/dist/internal/cursor-agent-template.d.ts.map +1 -1
  271. package/dist/internal/cursor-agent-template.js +2 -0
  272. package/dist/internal/discovery/connections.d.ts.map +1 -1
  273. package/dist/internal/discovery/connections.js +18 -0
  274. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  275. package/dist/internal/discovery/extensions.js +8 -4
  276. package/dist/internal/discovery/info.d.ts.map +1 -1
  277. package/dist/internal/discovery/info.js +1 -0
  278. package/dist/internal/filesystem/tools.d.ts.map +1 -1
  279. package/dist/internal/filesystem/tools.js +2 -2
  280. package/dist/internal/filesystem/walk.d.ts +7 -4
  281. package/dist/internal/filesystem/walk.d.ts.map +1 -1
  282. package/dist/internal/filesystem/walk.js +34 -11
  283. package/dist/internal/hosted-admission-adapter.d.ts +3 -0
  284. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  285. package/dist/internal/hosted-delivery-protocol.d.ts +20 -0
  286. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  287. package/dist/internal/hosted-delivery-protocol.js +51 -1
  288. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  289. package/dist/internal/hosted-delivery.js +23 -25
  290. package/dist/internal/hosted-execution-diag.d.ts +12 -4
  291. package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
  292. package/dist/internal/hosted-execution-diag.js +26 -4
  293. package/dist/internal/hosted-execution-flush.d.ts +1 -0
  294. package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
  295. package/dist/internal/hosted-execution-flush.js +4 -2
  296. package/dist/internal/init-project.d.ts.map +1 -1
  297. package/dist/internal/init-project.js +4 -0
  298. package/dist/internal/server.d.ts.map +1 -1
  299. package/dist/internal/server.js +111 -48
  300. package/dist/internal/session-engine.d.ts +4 -1
  301. package/dist/internal/session-engine.d.ts.map +1 -1
  302. package/dist/internal/session-engine.js +39 -9
  303. package/dist/internal/skill-catalog.d.ts +28 -0
  304. package/dist/internal/skill-catalog.d.ts.map +1 -0
  305. package/dist/internal/skill-catalog.js +44 -0
  306. package/dist/playground/assets/index-DSMAewbx.css +1 -0
  307. package/dist/playground/assets/index-De_lpFxE.js +67 -0
  308. package/dist/playground/index.html +2 -2
  309. package/dist/types.d.ts +32 -3
  310. package/dist/types.d.ts.map +1 -1
  311. package/docs/README.md +2 -0
  312. package/docs/building-with-agents.md +96 -84
  313. package/docs/deployment.md +118 -364
  314. package/docs/evals.md +149 -673
  315. package/docs/guides/agent-to-agent.md +130 -48
  316. package/docs/guides/bitbucket.md +250 -49
  317. package/docs/guides/cloud-agents.md +119 -67
  318. package/docs/guides/convert-automation.md +157 -148
  319. package/docs/guides/github.md +261 -246
  320. package/docs/guides/gitlab.md +250 -51
  321. package/docs/guides/grokbot-agents.md +100 -55
  322. package/docs/guides/improve.md +112 -59
  323. package/docs/guides/jev.md +353 -0
  324. package/docs/guides/mcp-oauth.md +112 -122
  325. package/docs/guides/opentelemetry.md +97 -166
  326. package/docs/guides/slack.md +158 -228
  327. package/docs/guides/webhooks.md +155 -386
  328. package/docs/hillclimbing.md +102 -56
  329. package/docs/reference/cli.md +2 -0
  330. package/docs/reference/connections.md +1 -1
  331. package/docs/reference/evals.md +298 -0
  332. package/docs/reference/extensions.md +132 -203
  333. package/docs/reference/hooks.md +34 -34
  334. package/docs/reference/subagents.md +1 -1
  335. package/docs/reference/tools.md +4 -0
  336. package/docs/templates/thermo-quality-review.md +80 -0
  337. package/docs/templates/thermo-review.md +79 -0
  338. package/docs/troubleshooting.md +98 -67
  339. package/package.json +8 -1
  340. package/skills/github/SKILL.md +21 -13
  341. package/src/bin/agent-serve.ts +24 -3
  342. package/src/channels/checks.ts +8 -0
  343. package/src/channels/github/github-channel.ts +29 -19
  344. package/src/channels/origin/checks.ts +3 -1
  345. package/src/channels/slack/agentic-delivery.ts +2 -0
  346. package/src/channels/slack/dispatch.ts +131 -4
  347. package/src/channels/slack/placeholder.ts +51 -0
  348. package/src/channels/slack/slack-channel.ts +9 -2
  349. package/src/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  350. package/src/extensions/improve/extension.ts +4 -2
  351. package/src/extensions/improve/skills/yourself.ts +1 -1
  352. package/src/extensions/jev/extension.ts +95 -0
  353. package/src/extensions/jev/lib/evaluate.ts +289 -0
  354. package/src/extensions/jev/skills/gated-write.md +25 -0
  355. package/src/extensions/jev/skills/questions.md +33 -0
  356. package/src/extensions/jev/tools/evaluate.ts +90 -0
  357. package/src/extensions.ts +2 -0
  358. package/src/filesystem.ts +168 -65
  359. package/src/index.ts +3 -0
  360. package/src/internal/advertise-tools.ts +6 -0
  361. package/src/internal/cli-ax.ts +88 -15
  362. package/src/internal/continuation-identity.ts +1 -0
  363. package/src/internal/cursor-agent-template.ts +2 -0
  364. package/src/internal/discovery/connections.ts +21 -0
  365. package/src/internal/discovery/extensions.ts +12 -4
  366. package/src/internal/discovery/info.ts +1 -0
  367. package/src/internal/filesystem/tools.ts +2 -0
  368. package/src/internal/filesystem/walk.ts +60 -15
  369. package/src/internal/hosted-admission-adapter.ts +3 -0
  370. package/src/internal/hosted-delivery-protocol.ts +82 -1
  371. package/src/internal/hosted-delivery.ts +23 -0
  372. package/src/internal/hosted-execution-diag.ts +33 -4
  373. package/src/internal/hosted-execution-flush.ts +4 -0
  374. package/src/internal/init-project.ts +4 -0
  375. package/src/internal/server.ts +130 -53
  376. package/src/internal/session-engine.ts +46 -8
  377. package/src/internal/skill-catalog.ts +69 -0
  378. package/src/types.ts +33 -3
  379. package/templates/thermo-quality-review/README.md +35 -0
  380. package/templates/thermo-quality-review/agent/agent.ts +8 -0
  381. package/templates/thermo-quality-review/agent/channels/github.ts +42 -0
  382. package/templates/thermo-quality-review/agent/instructions.md +43 -0
  383. package/templates/thermo-quality-review/agent/tools/post_findings.ts +70 -0
  384. package/templates/thermo-quality-review/evals/evals.config.ts +5 -0
  385. package/templates/thermo-quality-review/evals/review.eval.ts +62 -0
  386. package/templates/thermo-quality-review/package.json +18 -0
  387. package/templates/thermo-quality-review/tsconfig.json +12 -0
  388. package/templates/thermo-review/README.md +35 -0
  389. package/templates/thermo-review/agent/agent.ts +8 -0
  390. package/templates/thermo-review/agent/channels/github.ts +42 -0
  391. package/templates/thermo-review/agent/instructions.md +40 -0
  392. package/templates/thermo-review/agent/tools/post_findings.ts +70 -0
  393. package/templates/thermo-review/evals/evals.config.ts +5 -0
  394. package/templates/thermo-review/evals/review.eval.ts +53 -0
  395. package/templates/thermo-review/package.json +18 -0
  396. package/templates/thermo-review/tsconfig.json +12 -0
  397. package/dist/docs/assets/building-with-agents.md.CEGVXkmO.js +0 -13
  398. package/dist/docs/assets/building-with-agents.md.CEGVXkmO.lean.js +0 -1
  399. package/dist/docs/assets/chunks/@localSearchIndexroot.DtXk1hy-.js +0 -1
  400. package/dist/docs/assets/chunks/channel.Bkv1N-gK.js +0 -1
  401. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CZDco1o8.js +0 -1
  402. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CZDco1o8.js +0 -1
  403. package/dist/docs/assets/chunks/clone.YSt_40_s.js +0 -1
  404. package/dist/docs/assets/chunks/framework.dypDpWZ3.js +0 -19
  405. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C4CLm481.js +0 -1
  406. package/dist/docs/assets/deployment.md.Dm4Qo3hp.js +0 -51
  407. package/dist/docs/assets/deployment.md.Dm4Qo3hp.lean.js +0 -1
  408. package/dist/docs/assets/evals.md.BLDRt5LH.js +0 -211
  409. package/dist/docs/assets/evals.md.BLDRt5LH.lean.js +0 -1
  410. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.js +0 -14
  411. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.lean.js +0 -1
  412. package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.js +0 -10
  413. package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.lean.js +0 -1
  414. package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.js +0 -9
  415. package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.lean.js +0 -1
  416. package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.js +0 -12
  417. package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.lean.js +0 -1
  418. package/dist/docs/assets/guides_github.md.D6ER29dG.js +0 -64
  419. package/dist/docs/assets/guides_github.md.D6ER29dG.lean.js +0 -1
  420. package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.js +0 -14
  421. package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.lean.js +0 -1
  422. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.js +0 -9
  423. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.lean.js +0 -1
  424. package/dist/docs/assets/guides_improve.md.BKaDuKKK.js +0 -14
  425. package/dist/docs/assets/guides_improve.md.BKaDuKKK.lean.js +0 -1
  426. package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.js +0 -28
  427. package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.lean.js +0 -1
  428. package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.js +0 -26
  429. package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.lean.js +0 -1
  430. package/dist/docs/assets/guides_slack.md.DdT8rmsj.js +0 -46
  431. package/dist/docs/assets/guides_slack.md.DdT8rmsj.lean.js +0 -1
  432. package/dist/docs/assets/guides_webhooks.md.aQW10HRe.js +0 -225
  433. package/dist/docs/assets/guides_webhooks.md.aQW10HRe.lean.js +0 -1
  434. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.js +0 -1
  435. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.lean.js +0 -1
  436. package/dist/docs/assets/reference_extensions.md.wlFD3cUR.js +0 -62
  437. package/dist/docs/assets/reference_extensions.md.wlFD3cUR.lean.js +0 -1
  438. package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.js +0 -1
  439. package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.lean.js +0 -1
  440. package/dist/playground/assets/index-BLlKgZtI.css +0 -1
  441. 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 handoffInThread = kind !== "channel_post" &&
155
+ handoff !== undefined &&
156
+ handoff.channelId === message.channelId &&
157
+ handoff.threadTs === message.threadTs
158
+ ? handoff
159
+ : undefined;
160
+ const matchedHandoff = args.placeholder !== undefined ? handoffInThread : 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,22 +361,26 @@ 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),
292
368
  log,
293
369
  });
294
370
  }
371
+ // A control-plane placeholder is turn scaffolding, not thread history: the
372
+ // guest posts the reply over that exact ts, so hydrating it would feed the
373
+ // model its own "still working" line as an already-sent reply.
295
374
  const excludeThreadTimestamps = [
296
375
  message.ts,
297
- ...((_4 = decision.excludeThreadTimestamps) !== null && _4 !== void 0 ? _4 : []),
376
+ ...(handoffInThread === undefined ? [] : [handoffInThread.messageTs]),
377
+ ...((_6 = decision.excludeThreadTimestamps) !== null && _6 !== void 0 ? _6 : []),
298
378
  ];
299
379
  const mergeMessages = [triggeringMergeMessage(message)];
300
380
  const mediaTask = slackTurnMedia({
301
381
  message,
302
382
  decision,
303
- botToken: (_k = args.credentials) === null || _k === void 0 ? void 0 : _k.botToken,
383
+ botToken: (_m = args.credentials) === null || _m === void 0 ? void 0 : _m.botToken,
304
384
  log,
305
385
  });
306
386
  const continuationExists = existsP === undefined ? false : yield existsP;
@@ -314,10 +394,10 @@ export function dispatchInboundMessage(args) {
314
394
  const threadTask = !loadThread
315
395
  ? Promise.resolve(undefined)
316
396
  : 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,
397
+ ? 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
398
  log }))
319
399
  : loadSlackThreadContextBlock({
320
- botToken: (_m = args.credentials) === null || _m === void 0 ? void 0 : _m.botToken,
400
+ botToken: (_p = args.credentials) === null || _p === void 0 ? void 0 : _p.botToken,
321
401
  channelId: message.channelId,
322
402
  threadTs: message.threadTs,
323
403
  excludeTs: excludeThreadTimestamps,
@@ -334,14 +414,15 @@ export function dispatchInboundMessage(args) {
334
414
  if (painted !== undefined) {
335
415
  yield painted;
336
416
  yield retractTurnStart({
337
- botToken: (_o = args.credentials) === null || _o === void 0 ? void 0 : _o.botToken,
417
+ botToken: (_q = args.credentials) === null || _q === void 0 ? void 0 : _q.botToken,
338
418
  channelId: message.channelId,
339
419
  threadTs: message.threadTs,
340
- ack: (_5 = args.ack) !== null && _5 !== void 0 ? _5 : "",
420
+ ack: (_7 = args.ack) !== null && _7 !== void 0 ? _7 : "",
341
421
  log,
342
422
  });
343
423
  }
344
- yield (_p = args.host.slackNudges) === null || _p === void 0 ? void 0 : _p.releaseAsk(message.channelId, message.ts);
424
+ yield (_r = args.host.slackNudges) === null || _r === void 0 ? void 0 : _r.releaseAsk(message.channelId, message.ts);
425
+ yield retractAdoptedPlaceholder();
345
426
  return;
346
427
  }
347
428
  if (message.files !== undefined && message.files.length > 0) {
@@ -349,8 +430,8 @@ export function dispatchInboundMessage(args) {
349
430
  kind,
350
431
  channel: message.channelId,
351
432
  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,
433
+ images: (_8 = (_s = media.images) === null || _s === void 0 ? void 0 : _s.length) !== null && _8 !== void 0 ? _8 : 0,
434
+ workspace_files: Object.keys((_9 = media.workspaceFiles) !== null && _9 !== void 0 ? _9 : {}).length,
354
435
  event_id: args.eventId,
355
436
  });
356
437
  }
@@ -358,11 +439,11 @@ export function dispatchInboundMessage(args) {
358
439
  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
440
  }
360
441
  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
442
+ 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
443
  ? {}
363
444
  : { userName: message.author.userName })), (message.teamId === undefined ? {} : { teamId: message.teamId }))),
364
445
  ...(threadContext === undefined ? [] : [threadContext]),
365
- ...((_9 = decision.context) !== null && _9 !== void 0 ? _9 : []),
446
+ ...((_11 = decision.context) !== null && _11 !== void 0 ? _11 : []),
366
447
  "",
367
448
  media.userText,
368
449
  ]
@@ -374,34 +455,36 @@ export function dispatchInboundMessage(args) {
374
455
  const hostedFollowup = hosted &&
375
456
  hasPlaceholder &&
376
457
  (message.ts !== message.threadTs || continuationExists);
377
- const placeholder = hasPlaceholder && (!hosted || hostedFollowup)
458
+ // Adopted slots already exist in Slack; skip a second post. Cold hosted
459
+ // without a handoff still defers to `turn.started`.
460
+ const placeholder = !adoptedPlaceholder && hasPlaceholder && (!hosted || hostedFollowup)
378
461
  ? startPlaceholder({
379
462
  line: placeholderLine,
380
- botToken: (_t = args.credentials) === null || _t === void 0 ? void 0 : _t.botToken,
463
+ botToken: (_v = args.credentials) === null || _v === void 0 ? void 0 : _v.botToken,
381
464
  channelId: message.channelId,
382
465
  threadTs: message.threadTs,
383
466
  log,
384
- recipientUserId: (_u = message.author) === null || _u === void 0 ? void 0 : _u.userId,
467
+ recipientUserId: (_w = message.author) === null || _w === void 0 ? void 0 : _w.userId,
385
468
  recipientTeamId: message.teamId,
386
469
  })
387
470
  : undefined;
388
- const posted = placeholder !== undefined;
471
+ const posted = adoptedPlaceholder || placeholder !== undefined;
389
472
  const state = emptySlackChannelState({
390
473
  channelId: message.channelId,
391
474
  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,
475
+ teamId: (_12 = message.teamId) !== null && _12 !== void 0 ? _12 : null,
476
+ triggeringUserId: (_13 = (_x = message.author) === null || _x === void 0 ? void 0 : _x.userId) !== null && _13 !== void 0 ? _13 : null,
394
477
  startPainted: paintedStart,
395
478
  placeholderPosted: posted,
396
479
  });
397
480
  const sendOptions = Object.assign(Object.assign({ auth: decision.auth }, sendPatch), { admission: "coalesce", coalesceSourceTs: message.ts, state: state, refreshState: slackWakeChannelState({
398
481
  channelId: message.channelId,
399
482
  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,
483
+ teamId: (_14 = message.teamId) !== null && _14 !== void 0 ? _14 : null,
484
+ triggeringUserId: (_15 = (_y = message.author) === null || _y === void 0 ? void 0 : _y.userId) !== null && _15 !== void 0 ? _15 : null,
402
485
  startPainted: paintedStart,
403
486
  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 });
487
+ }), 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
488
  try {
406
489
  const session = yield args.send(prompt, sendOptions);
407
490
  if (isDeferredChannelSession(session)) {
@@ -438,11 +521,11 @@ export function dispatchInboundMessage(args) {
438
521
  });
439
522
  if (!steeringEnabled()) {
440
523
  try {
441
- yield (_x = args.host.slackNudges) === null || _x === void 0 ? void 0 : _x.append({
524
+ yield (_z = args.host.slackNudges) === null || _z === void 0 ? void 0 : _z.append({
442
525
  continuationKey: continuation,
443
526
  sourceTs: message.ts,
444
527
  text: media.userText,
445
- author: (_y = message.author) === null || _y === void 0 ? void 0 : _y.userName,
528
+ author: (_0 = message.author) === null || _0 === void 0 ? void 0 : _0.userName,
446
529
  });
447
530
  }
448
531
  catch (nudgeError) {
@@ -472,17 +555,18 @@ export function dispatchInboundMessage(args) {
472
555
  }
473
556
  }
474
557
  catch (error) {
475
- yield (_z = args.host.slackNudges) === null || _z === void 0 ? void 0 : _z.releaseAsk(message.channelId, message.ts);
558
+ yield (_1 = args.host.slackNudges) === null || _1 === void 0 ? void 0 : _1.releaseAsk(message.channelId, message.ts);
476
559
  if (placeholder !== undefined) {
477
560
  yield placeholder.retract();
478
561
  }
562
+ yield retractAdoptedPlaceholder();
479
563
  if (painted !== undefined) {
480
564
  yield painted;
481
565
  yield retractTurnStart({
482
- botToken: (_0 = args.credentials) === null || _0 === void 0 ? void 0 : _0.botToken,
566
+ botToken: (_2 = args.credentials) === null || _2 === void 0 ? void 0 : _2.botToken,
483
567
  channelId: message.channelId,
484
568
  threadTs: message.threadTs,
485
- ack: (_15 = args.ack) !== null && _15 !== void 0 ? _15 : "",
569
+ ack: (_17 = args.ack) !== null && _17 !== void 0 ? _17 : "",
486
570
  log,
487
571
  });
488
572
  }
@@ -510,12 +594,27 @@ export function dispatchInboundFromEventBody(body, deps) {
510
594
  var _e, _f, _g, _h, _j;
511
595
  const log = (_e = deps.log) !== null && _e !== void 0 ? _e : defaultSlackLog;
512
596
  let eventId;
597
+ const retractUnscheduledHandoff = () => {
598
+ var _a, _b;
599
+ const placeholder = (_a = deps.platformHandoff) === null || _a === void 0 ? void 0 : _a.slackPlaceholder;
600
+ if (placeholder === undefined) {
601
+ return;
602
+ }
603
+ deps.waitUntil(retractPlaceholderMessage({
604
+ botToken: (_b = deps.credentials) === null || _b === void 0 ? void 0 : _b.botToken,
605
+ channelId: placeholder.channelId,
606
+ ts: placeholder.messageTs,
607
+ streamed: placeholder.streamed,
608
+ log,
609
+ }));
610
+ };
513
611
  if (body !== null && typeof body === "object" && !Array.isArray(body)) {
514
612
  const root = body;
515
613
  if (typeof root.event_id === "string" && root.event_id.length > 0) {
516
614
  eventId = root.event_id;
517
615
  if (!deps.eventIds.tryHandle(root.event_id)) {
518
616
  log.debug("inbound dedupe drop", { event_id: eventId });
617
+ retractUnscheduledHandoff();
519
618
  return false;
520
619
  }
521
620
  }
@@ -526,6 +625,7 @@ export function dispatchInboundFromEventBody(body, deps) {
526
625
  if (mention !== null) {
527
626
  if (deps.mentionsEnabled === false) {
528
627
  log.debug("inbound ignored (mentions disabled)", { event_id: eventId });
628
+ retractUnscheduledHandoff();
529
629
  return false;
530
630
  }
531
631
  if (((_a = mention.author) === null || _a === void 0 ? void 0 : _a.isBot) === true) {
@@ -543,6 +643,7 @@ export function dispatchInboundFromEventBody(body, deps) {
543
643
  from_bot: (_g = mention.author.botId) !== null && _g !== void 0 ? _g : mention.author.userId,
544
644
  reason: verdict.reason,
545
645
  });
646
+ retractUnscheduledHandoff();
546
647
  return false;
547
648
  }
548
649
  }
@@ -552,6 +653,7 @@ export function dispatchInboundFromEventBody(body, deps) {
552
653
  handler: deps.onAppMention,
553
654
  evalCommandsEnabled: deps.evalCommandsEnabled,
554
655
  eventId,
656
+ platformHandoff: deps.platformHandoff,
555
657
  });
556
658
  return true;
557
659
  }
@@ -561,6 +663,7 @@ export function dispatchInboundFromEventBody(body, deps) {
561
663
  log.debug("inbound ignored (direct messages disabled)", {
562
664
  event_id: eventId,
563
665
  });
666
+ retractUnscheduledHandoff();
564
667
  return false;
565
668
  }
566
669
  scheduleInbound(deps, log, {
@@ -569,11 +672,13 @@ export function dispatchInboundFromEventBody(body, deps) {
569
672
  handler: deps.onDirectMessage,
570
673
  evalCommandsEnabled: deps.evalCommandsEnabled,
571
674
  eventId,
675
+ platformHandoff: deps.platformHandoff,
572
676
  });
573
677
  return true;
574
678
  }
575
679
  const reaction = parseReactionAddedEvent(body);
576
680
  if (reaction !== null && deps.onReactionAdded !== undefined) {
681
+ retractUnscheduledHandoff();
577
682
  scheduleInbound(deps, log, {
578
683
  kind: "reaction_added",
579
684
  message: reaction,
@@ -631,9 +736,11 @@ export function dispatchInboundFromEventBody(body, deps) {
631
736
  includeBotAuthored: true,
632
737
  });
633
738
  if (channelEvent !== null) {
739
+ retractUnscheduledHandoff();
634
740
  return deps.channelWatch.handle(channelEvent, eventId);
635
741
  }
636
742
  }
637
743
  log.debug("inbound ignored (unhandled event shape)", Object.assign(Object.assign({}, describeSlackEventShape(body)), { event_id: eventId }));
744
+ retractUnscheduledHandoff();
638
745
  return false;
639
746
  }
@@ -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
  });