@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.
- package/README.md +4 -0
- package/dist/bin/agent-serve.js +20 -4
- package/dist/channels/checks.d.ts +10 -0
- package/dist/channels/checks.d.ts.map +1 -1
- package/dist/channels/github/github-channel.d.ts +29 -19
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +29 -19
- package/dist/channels/origin/checks.d.ts +1 -1
- package/dist/channels/origin/checks.d.ts.map +1 -1
- package/dist/channels/slack/agentic-delivery.d.ts.map +1 -1
- package/dist/channels/slack/agentic-delivery.js +2 -0
- package/dist/channels/slack/dispatch.d.ts +11 -1
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +146 -39
- package/dist/channels/slack/placeholder.d.ts +26 -0
- package/dist/channels/slack/placeholder.d.ts.map +1 -1
- package/dist/channels/slack/placeholder.js +28 -0
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +9 -16
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.Drol6mi6.js → app.CAeK13eM.js} +4 -4
- package/dist/docs/assets/building-with-agents.md.BBCx0AUo.js +9 -0
- package/dist/docs/assets/building-with-agents.md.BBCx0AUo.lean.js +1 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.Ck9E52Ls.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.CdqoBZJX.js → VPLocalSearchBox.C9LbPHod.js} +1 -1
- package/dist/docs/assets/chunks/{arc.BVX3ycTn.js → arc.CmMq2zmS.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CcChnMxX.js → architectureDiagram-Q4EWVU46.CCXB8Uj5.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.xwtXO-yt.js → baseUniq.CyQo6eLe.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CijZ_taK.js → blockDiagram-DXYQGD6D.JYq6w91N.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.0FBvwBvK.js → c4Diagram-AHTNJAMY.BRV8GPJJ.js} +1 -1
- package/dist/docs/assets/chunks/channel.BHiYmnZ4.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CELMmMDA.js → chunk-4BX2VUAB.Bv4ooYQR.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C4bhFtSm.js → chunk-4TB4RGXK.t4JtKPcj.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.ZnQ9gRRQ.js → chunk-55IACEB6.34lCHj9Y.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DPlmglG-.js → chunk-EDXVE4YY.BSwrPNrt.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.BrUk8pff.js → chunk-FMBD7UC4.Beeun-R-.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CcmWIncu.js → chunk-OYMX7WX6.BUUFUcJc.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D65-cs8I.js → chunk-QZHKN3VN.B2XjHzN_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.qoXZpG9F.js → chunk-YZCP3GAM.CLYG8znk.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Degh8l90.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Degh8l90.js +1 -0
- package/dist/docs/assets/chunks/clone.BIywbczV.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.8rYtqudO.js → cose-bilkent-S5V4N54A.DVEa6fZp.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.DrRP1fOh.js → dagre-KV5264BT.C9PZQK-S.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DHj_xA2_.js → diagram-5BDNPKRD.DoN0uv3Y.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.Bz_6nAKj.js → diagram-G4DWMVQ6.Czv3duqx.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BWA0xSW9.js → diagram-MMDJMWI5.BinJ5kWb.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.CpTJLNJI.js → diagram-TYMM5635.DW326M4K.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.-7AWWSrP.js → erDiagram-SMLLAGMA.U2pR_OA7.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BTnQ742_.js → flowDiagram-DWJPFMVM.ByWJXeYK.js} +1 -1
- package/dist/docs/assets/chunks/framework.BNw1pucY.js +19 -0
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.B5_HiiQ5.js → ganttDiagram-T4ZO3ILL.OquF0Rtg.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CZcNTFZd.js → gitGraphDiagram-UUTBAWPF.Bpn01P7X.js} +1 -1
- package/dist/docs/assets/chunks/{graph.V2GLaab4.js → graph.CNRB6ETL.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.7pZOkCCU.js → infoDiagram-42DDH7IO.CqhknMWi.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DSMo3Qa3.js → ishikawaDiagram-UXIWVN3A.C6xpR2af.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BNEgWN1S.js → journeyDiagram-VCZTEJTY.Cg5f7oB3.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B-4d4tC7.js → kanban-definition-6JOO6SKY.Cx9YTwlU.js} +1 -1
- package/dist/docs/assets/chunks/{layout.Dvbn9nSb.js → layout.ljS-wFtK.js} +1 -1
- package/dist/docs/assets/chunks/{linear.D2GM4p4b.js → linear.jSxNrsFC.js} +1 -1
- package/dist/docs/assets/chunks/{min.DVBtLK-B.js → min.Cum8AlQw.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CnJRI55x.js → mindmap-definition-QFDTVHPH.BLiysLpe.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.CtoaTFlA.js → pieDiagram-DEJITSTG.BoIDyuKF.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DtT24_vN.js → quadrantDiagram-34T5L4WZ.DLkpDytR.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CjSO4o8f.js → requirementDiagram-MS252O5E.DqTVqSu2.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.-wWiIVWa.js → sankeyDiagram-XADWPNL6.CG_6FF7j.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DSk8s4gX.js → sequenceDiagram-FGHM5R23.BIp9602K.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BFKAsdkN.js → stateDiagram-FHFEXIEX.COSXsD9I.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.qrxrbFsX.js +1 -0
- package/dist/docs/assets/chunks/{theme.C0MctGaz.js → theme.CXJ7PNwy.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.TUNJbAFe.js → timeline-definition-GMOUNBTQ.CXdVqkLq.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.C-RGNnk4.js → vennDiagram-DHZGUBPP.CZxGuc4r.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.g5efOWmT.js → wardley-RL74JXVD.3oVgfqQk.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.DH4zt73Y.js → wardleyDiagram-NUSXRM2D.6_irCgGJ.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B-3k6bF6.js → xychartDiagram-5P7HB3ND.TRPe92m3.js} +1 -1
- package/dist/docs/assets/deployment.md.D2jQZuFx.js +32 -0
- package/dist/docs/assets/deployment.md.D2jQZuFx.lean.js +1 -0
- package/dist/docs/assets/evals.md.D3Y3Aixt.js +72 -0
- package/dist/docs/assets/evals.md.D3Y3Aixt.lean.js +1 -0
- package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.js +41 -0
- package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.lean.js +1 -0
- package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.js +145 -0
- package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.lean.js +1 -0
- package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.js +15 -0
- package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.lean.js +1 -0
- package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.js +43 -0
- package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.lean.js +1 -0
- package/dist/docs/assets/guides_github.md.BwpBp3ed.js +156 -0
- package/dist/docs/assets/guides_github.md.BwpBp3ed.lean.js +1 -0
- package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.js +153 -0
- package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.lean.js +1 -0
- package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.js +16 -0
- package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.lean.js +1 -0
- package/dist/docs/assets/guides_improve.md.Bnp4F99w.js +22 -0
- package/dist/docs/assets/guides_improve.md.Bnp4F99w.lean.js +1 -0
- package/dist/docs/assets/guides_jev.md.F5fAkkfN.js +189 -0
- package/dist/docs/assets/guides_jev.md.F5fAkkfN.lean.js +1 -0
- package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.js +50 -0
- package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.lean.js +1 -0
- package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.js +35 -0
- package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.lean.js +1 -0
- package/dist/docs/assets/guides_slack.md.Bo96y42E.js +70 -0
- package/dist/docs/assets/guides_slack.md.Bo96y42E.lean.js +1 -0
- package/dist/docs/assets/guides_webhooks.md.1A72_VEE.js +92 -0
- package/dist/docs/assets/guides_webhooks.md.1A72_VEE.lean.js +1 -0
- package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.js +7 -0
- package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.lean.js +1 -0
- package/dist/docs/assets/{index.md.BFVyY2KT.js → index.md.C-t81M5J.js} +2 -2
- package/dist/docs/assets/{index.md.BFVyY2KT.lean.js → index.md.C-t81M5J.lean.js} +1 -1
- package/dist/docs/assets/{quickstart.md.D3MjSZN-.js → quickstart.md.DAvVhuuU.js} +1 -1
- package/dist/docs/assets/{quickstart.md.D3MjSZN-.lean.js → quickstart.md.DAvVhuuU.lean.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.js → reference_agent-config.md.DGPyw7ms.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.lean.js → reference_agent-config.md.DGPyw7ms.lean.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.js → reference_artifacts.md.Bu_4HmsD.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.lean.js → reference_artifacts.md.Bu_4HmsD.lean.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.icqLKcTc.js → reference_channels.md.nFWbzAic.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.icqLKcTc.lean.js → reference_channels.md.nFWbzAic.lean.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.B2dBL6L8.js → reference_cli.md.DLWDz9ij.js} +3 -1
- package/dist/docs/assets/{reference_cli.md.B2dBL6L8.lean.js → reference_cli.md.DLWDz9ij.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.js → reference_connections.md.Je9dMsdd.js} +2 -2
- package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.lean.js → reference_connections.md.Je9dMsdd.lean.js} +1 -1
- package/dist/docs/assets/reference_evals.md.DNJzM_yf.js +57 -0
- package/dist/docs/assets/reference_evals.md.DNJzM_yf.lean.js +1 -0
- package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.js +58 -0
- package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.lean.js +1 -0
- package/dist/docs/assets/{reference_hooks.md.CZuynAxj.js → reference_hooks.md.B7uzNENk.js} +2 -2
- package/dist/docs/assets/{reference_hooks.md.CZuynAxj.lean.js → reference_hooks.md.B7uzNENk.lean.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.js → reference_http-api.md.CduHavZ2.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.lean.js → reference_http-api.md.CduHavZ2.lean.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.D7gkckK-.js → reference_instructions.md.CU1My5My.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.D7gkckK-.lean.js → reference_instructions.md.CU1My5My.lean.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.D2YExv5K.js → reference_playground.md.Ch2d0Iqi.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.D2YExv5K.lean.js → reference_playground.md.Ch2d0Iqi.lean.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.js → reference_project-layout.md.BGhgpy9V.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.lean.js → reference_project-layout.md.BGhgpy9V.lean.js} +1 -1
- package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.js → reference_prompt.md.Ccp0R53H.js} +1 -1
- package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.lean.js → reference_prompt.md.Ccp0R53H.lean.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.BasfZWO-.js → reference_schedules.md.B2Nm6FaD.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.BasfZWO-.lean.js → reference_schedules.md.B2Nm6FaD.lean.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.js → reference_sessions.md.1_6Vyv7x.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.lean.js → reference_sessions.md.1_6Vyv7x.lean.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.rNgpsGd0.js → reference_skills.md.DjQkRefx.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.rNgpsGd0.lean.js → reference_skills.md.DjQkRefx.lean.js} +1 -1
- package/dist/docs/assets/{reference_subagents.md.e5qitjJt.js → reference_subagents.md.Dl16gcBj.js} +2 -2
- package/dist/docs/assets/{reference_subagents.md.e5qitjJt.lean.js → reference_subagents.md.Dl16gcBj.lean.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.js → reference_tools.md.B1dH1lpa.js} +3 -3
- package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.lean.js → reference_tools.md.B1dH1lpa.lean.js} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.js → templates_agentic-owners.md.9M575F5C.js} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.lean.js → templates_agentic-owners.md.9M575F5C.lean.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.js → templates_pr-autofixer.md.ws0DDXDy.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.lean.js → templates_pr-autofixer.md.ws0DDXDy.lean.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.js → templates_security-reviewer.md.KEFYXzfK.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.lean.js → templates_security-reviewer.md.KEFYXzfK.lean.js} +1 -1
- package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.js +3 -0
- package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.lean.js +1 -0
- package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.js +3 -0
- package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.lean.js +1 -0
- package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.js → templates_triage.md.CVGe_FG6.js} +1 -1
- package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.lean.js → templates_triage.md.CVGe_FG6.lean.js} +1 -1
- package/dist/docs/assets/troubleshooting.md.mnfFG2Em.js +1 -0
- package/dist/docs/assets/troubleshooting.md.mnfFG2Em.lean.js +1 -0
- package/dist/docs/building-with-agents.html +44 -48
- package/dist/docs/building-with-agents.md +94 -82
- package/dist/docs/deployment.html +59 -78
- package/dist/docs/deployment.md +117 -363
- package/dist/docs/evals.html +85 -224
- package/dist/docs/evals.md +149 -673
- package/dist/docs/guides/agent-to-agent.html +74 -47
- package/dist/docs/guides/agent-to-agent.md +128 -46
- package/dist/docs/guides/bitbucket.html +179 -44
- package/dist/docs/guides/bitbucket.md +249 -48
- package/dist/docs/guides/cloud-agents.html +46 -40
- package/dist/docs/guides/cloud-agents.md +119 -66
- package/dist/docs/guides/convert-automation.html +80 -49
- package/dist/docs/guides/convert-automation.md +156 -147
- package/dist/docs/guides/github.html +184 -92
- package/dist/docs/guides/github.md +260 -245
- package/dist/docs/guides/gitlab.html +184 -45
- package/dist/docs/guides/gitlab.md +249 -50
- package/dist/docs/guides/grokbot-agents.html +48 -41
- package/dist/docs/guides/grokbot-agents.md +99 -53
- package/dist/docs/guides/improve.html +48 -40
- package/dist/docs/guides/improve.md +111 -58
- package/dist/docs/guides/jev.html +248 -0
- package/dist/docs/guides/jev.md +348 -0
- package/dist/docs/guides/mcp-oauth.html +74 -52
- package/dist/docs/guides/mcp-oauth.md +111 -121
- package/dist/docs/guides/opentelemetry.html +63 -54
- package/dist/docs/guides/opentelemetry.md +96 -165
- package/dist/docs/guides/slack.html +83 -59
- package/dist/docs/guides/slack.md +157 -227
- package/dist/docs/guides/webhooks.html +97 -230
- package/dist/docs/guides/webhooks.md +154 -385
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +44 -38
- package/dist/docs/hillclimbing.md +101 -55
- package/dist/docs/index.html +38 -38
- package/dist/docs/index.md +2 -0
- package/dist/docs/llms-full.txt +3490 -3146
- package/dist/docs/llms.txt +22 -18
- package/dist/docs/quickstart.html +37 -37
- package/dist/docs/reference/agent-config.html +37 -37
- package/dist/docs/reference/artifacts.html +38 -38
- package/dist/docs/reference/channels.html +37 -37
- package/dist/docs/reference/cli.html +39 -37
- package/dist/docs/reference/cli.md +2 -0
- package/dist/docs/reference/connections.html +38 -38
- package/dist/docs/reference/connections.md +1 -1
- package/dist/docs/reference/evals.html +116 -0
- package/dist/docs/reference/evals.md +293 -0
- package/dist/docs/reference/extensions.html +80 -84
- package/dist/docs/reference/extensions.md +131 -202
- package/dist/docs/reference/hooks.html +39 -39
- package/dist/docs/reference/hooks.md +34 -34
- package/dist/docs/reference/http-api.html +37 -37
- package/dist/docs/reference/instructions.html +37 -37
- package/dist/docs/reference/playground.html +37 -37
- package/dist/docs/reference/project-layout.html +37 -37
- package/dist/docs/reference/prompt.html +37 -37
- package/dist/docs/reference/schedules.html +37 -37
- package/dist/docs/reference/sessions.html +37 -37
- package/dist/docs/reference/skills.html +37 -37
- package/dist/docs/reference/subagents.html +38 -38
- package/dist/docs/reference/subagents.md +1 -1
- package/dist/docs/reference/tools.html +38 -38
- package/dist/docs/reference/tools.md +4 -0
- package/dist/docs/templates/agentic-owners.html +38 -38
- package/dist/docs/templates/pr-autofixer.html +37 -37
- package/dist/docs/templates/security-reviewer.html +38 -38
- package/dist/docs/templates/thermo-quality-review.html +62 -0
- package/dist/docs/templates/thermo-quality-review.md +75 -0
- package/dist/docs/templates/thermo-review.html +62 -0
- package/dist/docs/templates/thermo-review.md +74 -0
- package/dist/docs/templates/triage.html +37 -37
- package/dist/docs/troubleshooting.html +38 -38
- package/dist/docs/troubleshooting.md +97 -66
- package/dist/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
- package/dist/extensions/improve/extension.d.ts +3 -1
- package/dist/extensions/improve/extension.d.ts.map +1 -1
- package/dist/extensions/improve/extension.js +4 -2
- package/dist/extensions/improve/skills/yourself.js +1 -1
- package/dist/extensions/jev/extension.d.ts +43 -0
- package/dist/extensions/jev/extension.d.ts.map +1 -0
- package/dist/extensions/jev/extension.js +47 -0
- package/dist/extensions/jev/lib/evaluate.d.ts +101 -0
- package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -0
- package/dist/extensions/jev/lib/evaluate.js +167 -0
- package/dist/extensions/jev/skills/gated-write.md +25 -0
- package/dist/extensions/jev/skills/questions.md +33 -0
- package/dist/extensions/jev/tools/evaluate.d.ts +4 -0
- package/dist/extensions/jev/tools/evaluate.d.ts.map +1 -0
- package/dist/extensions/jev/tools/evaluate.js +88 -0
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +2 -0
- package/dist/filesystem.d.ts +46 -2
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +149 -102
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +6 -0
- package/dist/internal/cli-ax.d.ts +6 -0
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +72 -14
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +1 -0
- package/dist/internal/cursor-agent-template.d.ts +1 -1
- package/dist/internal/cursor-agent-template.d.ts.map +1 -1
- package/dist/internal/cursor-agent-template.js +2 -0
- package/dist/internal/discovery/connections.d.ts.map +1 -1
- package/dist/internal/discovery/connections.js +18 -0
- package/dist/internal/discovery/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +8 -4
- package/dist/internal/discovery/info.d.ts.map +1 -1
- package/dist/internal/discovery/info.js +1 -0
- package/dist/internal/filesystem/tools.d.ts.map +1 -1
- package/dist/internal/filesystem/tools.js +2 -2
- package/dist/internal/filesystem/walk.d.ts +7 -4
- package/dist/internal/filesystem/walk.d.ts.map +1 -1
- package/dist/internal/filesystem/walk.js +34 -11
- package/dist/internal/hosted-admission-adapter.d.ts +3 -0
- package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.d.ts +20 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +51 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +23 -25
- package/dist/internal/hosted-execution-diag.d.ts +12 -4
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
- package/dist/internal/hosted-execution-diag.js +26 -4
- package/dist/internal/hosted-execution-flush.d.ts +1 -0
- package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
- package/dist/internal/hosted-execution-flush.js +4 -2
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +4 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +111 -48
- package/dist/internal/session-engine.d.ts +4 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +39 -9
- package/dist/internal/skill-catalog.d.ts +28 -0
- package/dist/internal/skill-catalog.d.ts.map +1 -0
- package/dist/internal/skill-catalog.js +44 -0
- package/dist/playground/assets/index-DSMAewbx.css +1 -0
- package/dist/playground/assets/index-De_lpFxE.js +67 -0
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +32 -3
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +2 -0
- package/docs/building-with-agents.md +96 -84
- package/docs/deployment.md +118 -364
- package/docs/evals.md +149 -673
- package/docs/guides/agent-to-agent.md +130 -48
- package/docs/guides/bitbucket.md +250 -49
- package/docs/guides/cloud-agents.md +119 -67
- package/docs/guides/convert-automation.md +157 -148
- package/docs/guides/github.md +261 -246
- package/docs/guides/gitlab.md +250 -51
- package/docs/guides/grokbot-agents.md +100 -55
- package/docs/guides/improve.md +112 -59
- package/docs/guides/jev.md +353 -0
- package/docs/guides/mcp-oauth.md +112 -122
- package/docs/guides/opentelemetry.md +97 -166
- package/docs/guides/slack.md +158 -228
- package/docs/guides/webhooks.md +155 -386
- package/docs/hillclimbing.md +102 -56
- package/docs/reference/cli.md +2 -0
- package/docs/reference/connections.md +1 -1
- package/docs/reference/evals.md +298 -0
- package/docs/reference/extensions.md +132 -203
- package/docs/reference/hooks.md +34 -34
- package/docs/reference/subagents.md +1 -1
- package/docs/reference/tools.md +4 -0
- package/docs/templates/thermo-quality-review.md +80 -0
- package/docs/templates/thermo-review.md +79 -0
- package/docs/troubleshooting.md +98 -67
- package/package.json +8 -1
- package/skills/github/SKILL.md +21 -13
- package/src/bin/agent-serve.ts +24 -3
- package/src/channels/checks.ts +8 -0
- package/src/channels/github/github-channel.ts +29 -19
- package/src/channels/origin/checks.ts +3 -1
- package/src/channels/slack/agentic-delivery.ts +2 -0
- package/src/channels/slack/dispatch.ts +131 -4
- package/src/channels/slack/placeholder.ts +51 -0
- package/src/channels/slack/slack-channel.ts +9 -2
- package/src/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
- package/src/extensions/improve/extension.ts +4 -2
- package/src/extensions/improve/skills/yourself.ts +1 -1
- package/src/extensions/jev/extension.ts +95 -0
- package/src/extensions/jev/lib/evaluate.ts +289 -0
- package/src/extensions/jev/skills/gated-write.md +25 -0
- package/src/extensions/jev/skills/questions.md +33 -0
- package/src/extensions/jev/tools/evaluate.ts +90 -0
- package/src/extensions.ts +2 -0
- package/src/filesystem.ts +168 -65
- package/src/index.ts +3 -0
- package/src/internal/advertise-tools.ts +6 -0
- package/src/internal/cli-ax.ts +88 -15
- package/src/internal/continuation-identity.ts +1 -0
- package/src/internal/cursor-agent-template.ts +2 -0
- package/src/internal/discovery/connections.ts +21 -0
- package/src/internal/discovery/extensions.ts +12 -4
- package/src/internal/discovery/info.ts +1 -0
- package/src/internal/filesystem/tools.ts +2 -0
- package/src/internal/filesystem/walk.ts +60 -15
- package/src/internal/hosted-admission-adapter.ts +3 -0
- package/src/internal/hosted-delivery-protocol.ts +82 -1
- package/src/internal/hosted-delivery.ts +23 -0
- package/src/internal/hosted-execution-diag.ts +33 -4
- package/src/internal/hosted-execution-flush.ts +4 -0
- package/src/internal/init-project.ts +4 -0
- package/src/internal/server.ts +130 -53
- package/src/internal/session-engine.ts +46 -8
- package/src/internal/skill-catalog.ts +69 -0
- package/src/types.ts +33 -3
- package/templates/thermo-quality-review/README.md +35 -0
- package/templates/thermo-quality-review/agent/agent.ts +8 -0
- package/templates/thermo-quality-review/agent/channels/github.ts +42 -0
- package/templates/thermo-quality-review/agent/instructions.md +43 -0
- package/templates/thermo-quality-review/agent/tools/post_findings.ts +70 -0
- package/templates/thermo-quality-review/evals/evals.config.ts +5 -0
- package/templates/thermo-quality-review/evals/review.eval.ts +62 -0
- package/templates/thermo-quality-review/package.json +18 -0
- package/templates/thermo-quality-review/tsconfig.json +12 -0
- package/templates/thermo-review/README.md +35 -0
- package/templates/thermo-review/agent/agent.ts +8 -0
- package/templates/thermo-review/agent/channels/github.ts +42 -0
- package/templates/thermo-review/agent/instructions.md +40 -0
- package/templates/thermo-review/agent/tools/post_findings.ts +70 -0
- package/templates/thermo-review/evals/evals.config.ts +5 -0
- package/templates/thermo-review/evals/review.eval.ts +53 -0
- package/templates/thermo-review/package.json +18 -0
- package/templates/thermo-review/tsconfig.json +12 -0
- package/dist/docs/assets/building-with-agents.md.CEGVXkmO.js +0 -13
- package/dist/docs/assets/building-with-agents.md.CEGVXkmO.lean.js +0 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DtXk1hy-.js +0 -1
- package/dist/docs/assets/chunks/channel.Bkv1N-gK.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CZDco1o8.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CZDco1o8.js +0 -1
- package/dist/docs/assets/chunks/clone.YSt_40_s.js +0 -1
- package/dist/docs/assets/chunks/framework.dypDpWZ3.js +0 -19
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C4CLm481.js +0 -1
- package/dist/docs/assets/deployment.md.Dm4Qo3hp.js +0 -51
- package/dist/docs/assets/deployment.md.Dm4Qo3hp.lean.js +0 -1
- package/dist/docs/assets/evals.md.BLDRt5LH.js +0 -211
- package/dist/docs/assets/evals.md.BLDRt5LH.lean.js +0 -1
- package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.js +0 -14
- package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.lean.js +0 -1
- package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.js +0 -10
- package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.lean.js +0 -1
- package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.js +0 -9
- package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.lean.js +0 -1
- package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.js +0 -12
- package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.lean.js +0 -1
- package/dist/docs/assets/guides_github.md.D6ER29dG.js +0 -64
- package/dist/docs/assets/guides_github.md.D6ER29dG.lean.js +0 -1
- package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.js +0 -14
- package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.lean.js +0 -1
- package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.js +0 -9
- package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.lean.js +0 -1
- package/dist/docs/assets/guides_improve.md.BKaDuKKK.js +0 -14
- package/dist/docs/assets/guides_improve.md.BKaDuKKK.lean.js +0 -1
- package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.js +0 -28
- package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.lean.js +0 -1
- package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.js +0 -26
- package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.lean.js +0 -1
- package/dist/docs/assets/guides_slack.md.DdT8rmsj.js +0 -46
- package/dist/docs/assets/guides_slack.md.DdT8rmsj.lean.js +0 -1
- package/dist/docs/assets/guides_webhooks.md.aQW10HRe.js +0 -225
- package/dist/docs/assets/guides_webhooks.md.aQW10HRe.lean.js +0 -1
- package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.js +0 -1
- package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.lean.js +0 -1
- package/dist/docs/assets/reference_extensions.md.wlFD3cUR.js +0 -62
- package/dist/docs/assets/reference_extensions.md.wlFD3cUR.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.js +0 -1
- package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.lean.js +0 -1
- package/dist/playground/assets/index-BLlKgZtI.css +0 -1
- 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
|
|
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 = (
|
|
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
|
|
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 && ((
|
|
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: (
|
|
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 (
|
|
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 (
|
|
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
|
-
? ((
|
|
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 (
|
|
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: (
|
|
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: (
|
|
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
|
-
...(
|
|
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: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
420
|
+
ack: (_7 = args.ack) !== null && _7 !== void 0 ? _7 : "",
|
|
341
421
|
log,
|
|
342
422
|
});
|
|
343
423
|
}
|
|
344
|
-
yield (
|
|
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: (
|
|
353
|
-
workspace_files: Object.keys((
|
|
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: (
|
|
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
|
-
...((
|
|
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
|
-
|
|
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: (
|
|
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: (
|
|
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: (
|
|
393
|
-
triggeringUserId: (
|
|
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: (
|
|
401
|
-
triggeringUserId: (
|
|
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: (
|
|
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 (
|
|
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: (
|
|
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 (
|
|
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: (
|
|
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: (
|
|
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,
|
|
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.
|
|
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
|
-
: {
|
|
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
|
});
|