@cursor/bdk 0.2.8 → 0.2.10
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/dist/artifacts.js +3 -5
- package/dist/bin/agent-serve.d.ts +1 -0
- package/dist/bin/agent-serve.d.ts.map +1 -1
- package/dist/bin/agent-serve.js +820 -807
- package/dist/channels/bitbucket/api.js +305 -321
- package/dist/channels/bitbucket/binding.js +97 -61
- package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
- package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
- package/dist/channels/bitbucket/checks.js +9 -21
- package/dist/channels/bitbucket/cursor-account.js +1 -1
- package/dist/channels/bitbucket/defaults.js +14 -4
- package/dist/channels/bitbucket/events.js +1 -2
- package/dist/channels/bitbucket/index.d.ts +6 -2
- package/dist/channels/bitbucket/index.d.ts.map +1 -1
- package/dist/channels/bitbucket/index.js +6 -2
- package/dist/channels/bitbucket/replay.js +80 -56
- package/dist/channels/bitbucket/state.js +16 -7
- package/dist/channels/bitbucket/types.d.ts +11 -2
- package/dist/channels/bitbucket/types.d.ts.map +1 -1
- package/dist/channels/checks.js +18 -28
- package/dist/channels/deployments/deployments-channel.js +26 -34
- package/dist/channels/github/api.js +216 -210
- package/dist/channels/github/auth.d.ts +5 -1
- package/dist/channels/github/auth.d.ts.map +1 -1
- package/dist/channels/github/auth.js +157 -174
- package/dist/channels/github/binding.js +48 -39
- package/dist/channels/github/checks.js +9 -14
- package/dist/channels/github/cursor-account.js +6 -11
- package/dist/channels/github/defaults.js +105 -130
- package/dist/channels/github/forward.js +13 -17
- package/dist/channels/github/github-channel.d.ts +43 -2
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +1228 -958
- package/dist/channels/github/progress.js +145 -146
- package/dist/channels/github/replay.js +30 -39
- package/dist/channels/github/state.js +40 -16
- package/dist/channels/github/types.d.ts +30 -6
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/gitlab/api.js +100 -114
- package/dist/channels/gitlab/binding.js +52 -33
- package/dist/channels/gitlab/checks.js +28 -29
- package/dist/channels/gitlab/cursor-account.js +1 -1
- package/dist/channels/gitlab/defaults.js +9 -3
- package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
- package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-channel.js +95 -42
- package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
- package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-webhook.js +282 -249
- package/dist/channels/gitlab/index.d.ts +6 -2
- package/dist/channels/gitlab/index.d.ts.map +1 -1
- package/dist/channels/gitlab/index.js +6 -2
- package/dist/channels/gitlab/replay.js +50 -27
- package/dist/channels/gitlab/state.js +14 -6
- package/dist/channels/gitlab/types.d.ts +13 -2
- package/dist/channels/gitlab/types.d.ts.map +1 -1
- package/dist/channels/origin/api.js +100 -116
- package/dist/channels/origin/binding.js +15 -16
- package/dist/channels/origin/checks.js +30 -28
- package/dist/channels/origin/defaults.js +50 -65
- package/dist/channels/origin/origin-channel.js +266 -272
- package/dist/channels/origin/origin-webhook.js +70 -88
- package/dist/channels/origin/reactions.js +9 -21
- package/dist/channels/origin/state.js +13 -5
- package/dist/channels/slack/agentic-delivery.js +426 -478
- package/dist/channels/slack/agentic-posted.js +9 -10
- package/dist/channels/slack/agentic-signals.js +2 -3
- package/dist/channels/slack/api.js +417 -427
- package/dist/channels/slack/approvals.js +1 -1
- package/dist/channels/slack/assistant.js +37 -47
- package/dist/channels/slack/attachments.js +188 -206
- package/dist/channels/slack/auth.js +8 -6
- package/dist/channels/slack/bot-mentions.js +31 -45
- package/dist/channels/slack/channel-watch.js +42 -48
- package/dist/channels/slack/cli-project.js +112 -137
- package/dist/channels/slack/code-fences.js +3 -5
- package/dist/channels/slack/constants.js +2 -2
- package/dist/channels/slack/credentials.js +23 -38
- package/dist/channels/slack/defaults.js +292 -331
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +533 -460
- package/dist/channels/slack/doctor.js +200 -214
- package/dist/channels/slack/eval-directive.js +79 -96
- package/dist/channels/slack/event-id-dedupe.js +1 -1
- package/dist/channels/slack/external-policy.js +26 -39
- package/dist/channels/slack/footer.js +28 -41
- package/dist/channels/slack/inbound.d.ts +1 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +50 -31
- package/dist/channels/slack/init.d.ts +1 -5
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +42 -59
- package/dist/channels/slack/interactive.d.ts +9 -3
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +160 -162
- package/dist/channels/slack/links.js +1 -2
- package/dist/channels/slack/live-delivery.js +172 -190
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +44 -23
- package/dist/channels/slack/message-body.js +2 -2
- package/dist/channels/slack/nudge-carrier.js +30 -42
- package/dist/channels/slack/nudge-store.js +164 -191
- package/dist/channels/slack/paint-start.js +66 -81
- package/dist/channels/slack/placeholder.js +123 -152
- package/dist/channels/slack/pr-ref.js +1 -1
- package/dist/channels/slack/progress-delivery.js +65 -78
- package/dist/channels/slack/reasoning-card.js +36 -49
- package/dist/channels/slack/recording-sink.js +12 -24
- package/dist/channels/slack/reply-options.js +7 -12
- package/dist/channels/slack/self-identity.js +27 -35
- package/dist/channels/slack/sender-name.d.ts +12 -3
- package/dist/channels/slack/sender-name.d.ts.map +1 -1
- package/dist/channels/slack/sender-name.js +57 -61
- package/dist/channels/slack/setup.js +2 -4
- package/dist/channels/slack/slack-channel.d.ts +6 -4
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +441 -308
- package/dist/channels/slack/socket-mode.js +38 -52
- package/dist/channels/slack/thread-context.js +143 -160
- package/dist/channels/slack/tool-approval-events.js +149 -166
- package/dist/channels/slack/tool-cards.js +6 -11
- package/dist/channels/slack/tool-chip.js +1 -2
- package/dist/channels/slack/types.d.ts +15 -17
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/channels/slack/upload.js +84 -97
- package/dist/channels/slack/user-info.js +27 -41
- package/dist/channels.js +9 -20
- package/dist/dashboard-session-url.js +3 -4
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.oyjtOr3W.js → app.DXI7bwox.js} +4 -4
- package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.D0P6J_UJ.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
- package/dist/docs/assets/chunks/{arc.B0LY1J1h.js → arc.BOG1yms8.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.dPduLUxY.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.B_Ohm21h.js → baseUniq.H044KjKs.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.B4zcanaJ.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.D9Iw21nx.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
- package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.DDVwRShI.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DsYcdn1i.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.BzzQvcYp.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BMiXZ7FX.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.D_mBcLoc.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CMVjWVMx.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BG-FrPv9.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.CkFE1ap3.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BVNnCTvY.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.CDN5PR9l.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DQRUlT-i.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.CoeblYQT.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DW3ymjl0.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.BP0uN4Jw.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DVFUWEn4.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.HU-eHspv.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DHNhXijY.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.DkISXcO3.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CCV0fuRR.js → graph.BVqKRmRo.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.bgILzOoc.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.CuryXC0F.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BL1Pr-wu.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.BbGjvk4l.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
- package/dist/docs/assets/chunks/{layout.C4PfdldS.js → layout.CGU3gfSf.js} +1 -1
- package/dist/docs/assets/chunks/{linear.C3xD1T6X.js → linear.DaihpW_n.js} +1 -1
- package/dist/docs/assets/chunks/{min.CzgRAQ9c.js → min.BS-j8kHQ.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CA9rSWum.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.B8MprgJu.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DndDwbKT.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.Zhfgwlnn.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.B6RRm6N5.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Bfmz-1PN.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.gbrdNqgj.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
- package/dist/docs/assets/chunks/{theme.gpWjytMh.js → theme.DaplWQhQ.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Bl1l7M1f.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.Dfle4U0d.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.iXazD3Z7.js +162 -0
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.CM_4lmvZ.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CHT5X28R.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
- package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
- package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
- package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
- package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
- package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +37 -37
- package/dist/docs/building-with-agents.md +2 -0
- package/dist/docs/deployment.html +38 -38
- package/dist/docs/deployment.md +7 -0
- package/dist/docs/evals.html +36 -36
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +38 -38
- package/dist/docs/guides/bitbucket.md +9 -1
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/github.html +39 -39
- package/dist/docs/guides/github.md +20 -4
- package/dist/docs/guides/gitlab.html +38 -38
- package/dist/docs/guides/gitlab.md +9 -1
- package/dist/docs/guides/grokbot-agents.html +35 -35
- package/dist/docs/guides/hooks.html +35 -35
- package/dist/docs/guides/improve.html +35 -35
- package/dist/docs/guides/jev.html +35 -35
- package/dist/docs/guides/mcp-oauth.html +35 -35
- package/dist/docs/guides/migrate.html +66 -0
- package/dist/docs/guides/migrate.md +122 -0
- package/dist/docs/guides/opentelemetry.html +35 -35
- package/dist/docs/guides/slack.html +35 -35
- package/dist/docs/guides/webhooks.html +35 -35
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +35 -35
- package/dist/docs/index.html +35 -35
- package/dist/docs/llms-full.txt +214 -6
- package/dist/docs/llms.txt +1 -0
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +35 -35
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +39 -38
- package/dist/docs/reference/cli.md +39 -0
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +35 -35
- package/dist/docs/reference/hooks.html +35 -35
- package/dist/docs/reference/http-api.html +35 -35
- package/dist/docs/reference/instructions.html +35 -35
- package/dist/docs/reference/playground.html +35 -35
- package/dist/docs/reference/project-layout.html +35 -35
- package/dist/docs/reference/prompt.html +35 -35
- package/dist/docs/reference/schedules.html +35 -35
- package/dist/docs/reference/sessions.html +35 -35
- package/dist/docs/reference/skills.html +38 -38
- package/dist/docs/reference/subagents.html +35 -35
- package/dist/docs/reference/tools.html +35 -35
- package/dist/docs/templates/agentic-owners.html +35 -35
- package/dist/docs/templates/grokbot-agents.html +35 -35
- package/dist/docs/templates/security-reviewer.html +35 -35
- package/dist/docs/templates/thermo-quality-review.html +35 -35
- package/dist/docs/templates/thermo-review.html +35 -35
- package/dist/docs/templates/triage.html +35 -35
- package/dist/docs/troubleshooting.html +36 -36
- package/dist/docs/troubleshooting.md +1 -0
- package/dist/evals/assertions.js +20 -34
- package/dist/evals/expect.js +3 -6
- package/dist/evals/judge.js +5 -8
- package/dist/evals/loaders.js +45 -62
- package/dist/evals/matchers.js +2 -3
- package/dist/evals/reporters.js +43 -67
- package/dist/evals/results.js +1 -1
- package/dist/evals/run-facts.js +5 -6
- package/dist/evals.js +27 -15
- package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +0 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +101 -130
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
- package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
- package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
- package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
- package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
- package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
- package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
- package/dist/extensions/cursor-cloud-agents/tools/list.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/list.js +9 -20
- package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
- package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
- package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
- package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
- package/dist/extensions/jev/extension.js +3 -3
- package/dist/extensions/jev/lib/evaluate.js +43 -60
- package/dist/extensions/jev/tools/evaluate.js +6 -17
- package/dist/extensions/slack-communication/tools/post-file.js +1 -1
- package/dist/extensions.js +3 -5
- package/dist/files-backends/cursor-hosted.js +504 -523
- package/dist/files-backends/local-fs.js +72 -134
- package/dist/files.js +3 -3
- package/dist/filesystem.js +562 -861
- package/dist/index.js +16 -35
- package/dist/internal/advertise-tools.js +74 -86
- package/dist/internal/artifacts-store.js +298 -361
- package/dist/internal/as-of.js +2 -4
- package/dist/internal/authored-alias-hooks.js +6 -4
- package/dist/internal/authored-loaders.js +37 -52
- package/dist/internal/bounded-int.js +1 -2
- package/dist/internal/bounded.js +13 -24
- package/dist/internal/brand.js +1 -1
- package/dist/internal/browser-origin-guard.js +4 -4
- package/dist/internal/builtin-tools/artifacts.js +15 -27
- package/dist/internal/builtin-tools/index.js +2 -3
- package/dist/internal/builtin-tools/reminders.js +33 -52
- package/dist/internal/channel-architecture.d.ts +21 -0
- package/dist/internal/channel-architecture.d.ts.map +1 -0
- package/dist/internal/channel-architecture.js +41 -0
- package/dist/internal/channel-dispatch.js +3 -4
- package/dist/internal/channel-route-dispatch.js +40 -51
- package/dist/internal/channel-state.js +1 -1
- package/dist/internal/chat-client.js +319 -340
- package/dist/internal/cli-ax.js +1262 -1294
- package/dist/internal/cli-bitbucket.js +244 -272
- package/dist/internal/cli-convert-automation.js +137 -151
- package/dist/internal/cli-cursor.js +126 -147
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +1457 -1507
- package/dist/internal/cli-docs.js +130 -147
- package/dist/internal/cli-github.js +437 -476
- package/dist/internal/cli-gitlab.js +259 -288
- package/dist/internal/cli-images.js +266 -334
- package/dist/internal/cli-manifest.js +25 -37
- package/dist/internal/cli-mcp-oauth.js +228 -247
- package/dist/internal/cli-mcp.js +358 -383
- package/dist/internal/cli-migrate.d.ts +18 -0
- package/dist/internal/cli-migrate.d.ts.map +1 -0
- package/dist/internal/cli-migrate.js +136 -0
- package/dist/internal/cli-skills.js +35 -47
- package/dist/internal/cli-slack-manual.d.ts +0 -1
- package/dist/internal/cli-slack-manual.d.ts.map +1 -1
- package/dist/internal/cli-slack-manual.js +175 -204
- package/dist/internal/cli-slack.d.ts +1 -1
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +416 -456
- package/dist/internal/cloud-merge.js +7 -3
- package/dist/internal/cloud-turn-cost.js +8 -1
- package/dist/internal/connection-env.js +5 -6
- package/dist/internal/continuation-channel.js +10 -7
- package/dist/internal/continuation-identity.js +85 -67
- package/dist/internal/conversation-mirror.js +112 -131
- package/dist/internal/convert-automation/convert-workflow.js +21 -31
- package/dist/internal/cron.js +3 -3
- package/dist/internal/cursor/account-mcp.js +147 -146
- package/dist/internal/cursor/backend-client.js +290 -320
- package/dist/internal/cursor/bound-secret-file.js +3 -3
- package/dist/internal/cursor/credentials.d.ts +1 -0
- package/dist/internal/cursor/credentials.d.ts.map +1 -1
- package/dist/internal/cursor/credentials.js +130 -142
- package/dist/internal/cursor/cursor-api-transport.js +4 -8
- package/dist/internal/cursor/github-credentials.js +91 -108
- package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
- package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +5 -9
- package/dist/internal/cursor/session-token.js +36 -48
- package/dist/internal/cursor/store-api-client.js +77 -92
- package/dist/internal/cursor-account-mcp-auth.js +132 -149
- package/dist/internal/cursor-agent-template.js +1 -1
- package/dist/internal/cursor-deployment-relay.js +33 -54
- package/dist/internal/cursor-event-relay.js +65 -59
- package/dist/internal/cursor-relay-core.js +258 -286
- package/dist/internal/deferred-channel-session.js +3 -12
- package/dist/internal/deploy-client.js +410 -475
- package/dist/internal/deploy-manifest.d.ts +17 -0
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +71 -21
- package/dist/internal/deploy-source.js +31 -43
- package/dist/internal/discovery/agent-config.js +45 -59
- package/dist/internal/discovery/agent.js +276 -280
- package/dist/internal/discovery/channels.js +67 -80
- package/dist/internal/discovery/connections.js +286 -296
- package/dist/internal/discovery/context.js +2 -13
- package/dist/internal/discovery/cursor-plugin.js +223 -259
- package/dist/internal/discovery/extension-overlay.js +104 -131
- package/dist/internal/discovery/extensions.js +276 -281
- package/dist/internal/discovery/fs.js +56 -79
- package/dist/internal/discovery/hooks.js +39 -50
- package/dist/internal/discovery/info.js +17 -19
- package/dist/internal/discovery/instructions.js +58 -71
- package/dist/internal/discovery/modules.js +45 -58
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +192 -215
- package/dist/internal/discovery/reminders.js +41 -52
- package/dist/internal/discovery/runtime.js +1 -1
- package/dist/internal/discovery/schedules.js +71 -82
- package/dist/internal/discovery/seed-files.js +21 -32
- package/dist/internal/discovery/services.js +74 -96
- package/dist/internal/discovery/skills.js +77 -94
- package/dist/internal/discovery/subagent.js +79 -95
- package/dist/internal/discovery/tools.js +12 -23
- package/dist/internal/distribution.js +2 -2
- package/dist/internal/docs-site.js +30 -45
- package/dist/internal/duration.js +1 -1
- package/dist/internal/env-file.js +48 -64
- package/dist/internal/eval-judge-model.js +17 -28
- package/dist/internal/eval-run-store.js +265 -254
- package/dist/internal/eval-runner.d.ts +8 -0
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +406 -408
- package/dist/internal/eval-transport.d.ts +24 -0
- package/dist/internal/eval-transport.d.ts.map +1 -0
- package/dist/internal/eval-transport.js +22 -0
- package/dist/internal/evals-client.js +242 -246
- package/dist/internal/event-log.js +72 -120
- package/dist/internal/event-mapper.js +30 -31
- package/dist/internal/factory-resource-channel.js +16 -30
- package/dist/internal/filesystem/errors.js +6 -6
- package/dist/internal/filesystem/format.js +10 -13
- package/dist/internal/filesystem/merge.js +52 -94
- package/dist/internal/filesystem/nearest.js +15 -27
- package/dist/internal/filesystem/scratch.js +65 -85
- package/dist/internal/filesystem/tools.js +221 -241
- package/dist/internal/filesystem/walk.js +76 -143
- package/dist/internal/framework-file-storage.js +118 -139
- package/dist/internal/framework-storage-selection.js +21 -13
- package/dist/internal/frontmatter.js +4 -6
- package/dist/internal/github-fanout.js +50 -64
- package/dist/internal/guest-network.js +96 -109
- package/dist/internal/handleAgentServeTrigger.js +121 -126
- package/dist/internal/host-files.js +73 -88
- package/dist/internal/host-kv.js +21 -36
- package/dist/internal/host-otel.js +22 -19
- package/dist/internal/host-platforms.js +49 -63
- package/dist/internal/hosted-catch-protocol.d.ts +1 -0
- package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-catch-protocol.js +1 -0
- package/dist/internal/hosted-catch.d.ts +5 -3
- package/dist/internal/hosted-catch.d.ts.map +1 -1
- package/dist/internal/hosted-catch.js +84 -93
- package/dist/internal/hosted-delivery-protocol.js +32 -8
- package/dist/internal/hosted-delivery.d.ts +13 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +614 -584
- package/dist/internal/hosted-eval-cases.d.ts +21 -0
- package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
- package/dist/internal/hosted-eval-cases.js +162 -0
- package/dist/internal/hosted-execution-diag.js +38 -30
- package/dist/internal/hosted-execution-flush.js +75 -66
- package/dist/internal/hosted-execution-latency.js +16 -8
- package/dist/internal/hosted-managed-automation.js +2 -2
- package/dist/internal/hosting.js +2 -3
- package/dist/internal/http-channel-define.js +4 -1
- package/dist/internal/http-channel.js +101 -112
- package/dist/internal/http-control-plane-session.d.ts +18 -1
- package/dist/internal/http-control-plane-session.d.ts.map +1 -1
- package/dist/internal/http-control-plane-session.js +66 -32
- package/dist/internal/incoming-headers-to-fetch.js +1 -2
- package/dist/internal/init-interview.js +73 -93
- package/dist/internal/init-project.js +182 -214
- package/dist/internal/init-scaffold.js +10 -21
- package/dist/internal/inline-stdio-mcp.js +80 -86
- package/dist/internal/install-cursor-skills.d.ts.map +1 -1
- package/dist/internal/install-cursor-skills.js +238 -274
- package/dist/internal/legacy-command-guard.js +18 -31
- package/dist/internal/listen-port.js +34 -45
- package/dist/internal/local-control-plane.js +293 -307
- package/dist/internal/local-env.js +1 -1
- package/dist/internal/local-ingress.js +15 -9
- package/dist/internal/log-ring.js +1 -2
- package/dist/internal/logs-client.js +207 -227
- package/dist/internal/map-pool.js +24 -38
- package/dist/internal/mcp-endpoint.js +204 -180
- package/dist/internal/mcp-host.js +165 -168
- package/dist/internal/mcp-oauth-on-demand.js +170 -207
- package/dist/internal/mcp-oauth-persist.js +15 -29
- package/dist/internal/mcp-oauth.js +209 -266
- package/dist/internal/named-webhook-secret.d.ts +39 -0
- package/dist/internal/named-webhook-secret.d.ts.map +1 -0
- package/dist/internal/named-webhook-secret.js +47 -0
- package/dist/internal/open-browser.js +2 -3
- package/dist/internal/otel/collector.js +104 -68
- package/dist/internal/otel/config.js +24 -37
- package/dist/internal/otel/http.js +5 -7
- package/dist/internal/otel/mcp.js +3 -12
- package/dist/internal/otel/runtime.js +69 -83
- package/dist/internal/package-inline-stdio.js +57 -65
- package/dist/internal/peer-connections.js +9 -5
- package/dist/internal/platform-schedule-sync.js +39 -54
- package/dist/internal/platform-timers.js +176 -210
- package/dist/internal/playground/static.js +1 -2
- package/dist/internal/playground/toolchain.js +37 -53
- package/dist/internal/playground-proxy.js +230 -270
- package/dist/internal/process-memory-telemetry.js +33 -51
- package/dist/internal/prompt-context.js +3 -6
- package/dist/internal/reminder-control-plane-protocol.js +46 -13
- package/dist/internal/reminder-runner.js +770 -785
- package/dist/internal/reminder-schedule.js +1 -1
- package/dist/internal/reminder-store.js +57 -78
- package/dist/internal/request-error-status.js +1 -3
- package/dist/internal/request-headers.js +2 -2
- package/dist/internal/resolve-prod-target.js +119 -135
- package/dist/internal/resolved-connections.js +16 -6
- package/dist/internal/run-client.js +221 -229
- package/dist/internal/runtime-dispatch-runner.js +18 -43
- package/dist/internal/schedule-runner.js +49 -58
- package/dist/internal/scm/pr-url.js +7 -6
- package/dist/internal/sdk-runner.js +388 -363
- package/dist/internal/serve-restart.js +26 -39
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +1283 -1244
- package/dist/internal/session-cost.js +7 -9
- package/dist/internal/session-engine.d.ts +3 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +2801 -2777
- package/dist/internal/session-links.js +12 -16
- package/dist/internal/session-run-log.js +134 -82
- package/dist/internal/session-store.js +133 -164
- package/dist/internal/sessions-client.js +97 -118
- package/dist/internal/skill-catalog.js +18 -23
- package/dist/internal/skills-sync.js +16 -30
- package/dist/internal/slack-provision-client.js +90 -116
- package/dist/internal/start-log-store.js +48 -67
- package/dist/internal/steering.js +1 -2
- package/dist/internal/storage-coordinator.js +160 -196
- package/dist/internal/store-mirror.js +16 -30
- package/dist/internal/stream-progress.js +6 -8
- package/dist/internal/terminal-style.js +3 -4
- package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
- package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
- package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
- package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
- package/dist/internal/tool-catalog.js +11 -5
- package/dist/internal/tool-result.js +1 -1
- package/dist/internal/trajectory.js +19 -22
- package/dist/internal/turn-cost.js +52 -62
- package/dist/internal/turn-governor.js +5 -8
- package/dist/internal/turn-lease-store.js +85 -105
- package/dist/internal/turn-outbox.js +28 -43
- package/dist/internal/update-check.js +231 -259
- package/dist/internal/v2-hosting.js +1 -2
- package/dist/internal/workspace-sync.js +25 -41
- package/dist/internal/workspace.js +111 -139
- package/dist/kv/memory-kv.js +27 -51
- package/dist/memory.js +106 -148
- package/dist/otel.js +5 -8
- package/dist/playground/assets/index-DXm_VXAQ.css +1 -0
- package/dist/playground/assets/{index-MijLHTbB.js → index-JekUQERK.js} +45 -45
- package/dist/playground/index.html +2 -2
- package/dist/prompt.js +2 -4
- package/dist/storage-backends/cursor-hosted-v2.js +53 -83
- package/dist/storage-backends/cursor-hosted.js +105 -145
- package/dist/storage-backends/file-kv.js +100 -128
- package/dist/storage-protocol.js +3 -5
- package/dist/storage.js +17 -26
- package/dist/types.d.ts +68 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +20 -18
- package/docs/building-with-agents.md +2 -0
- package/docs/deployment.md +7 -0
- package/docs/guides/bitbucket.md +9 -1
- package/docs/guides/github.md +20 -4
- package/docs/guides/gitlab.md +9 -1
- package/docs/guides/migrate.md +127 -0
- package/docs/reference/cli.md +39 -0
- package/docs/troubleshooting.md +1 -0
- package/package.json +1 -1
- package/skills/debug/SKILL.md +1 -0
- package/skills/github/SKILL.md +23 -0
- package/skills/migrate-v2/SKILL.md +264 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.C25zYVuc.js +0 -1
- package/dist/docs/assets/chunks/channel.CRUyWDV-.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CG_UObcQ.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CG_UObcQ.js +0 -1
- package/dist/docs/assets/chunks/clone.NYSZ9qZN.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DOOmulfQ.js +0 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.BJrCW6xc.js +0 -162
- package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
- package/dist/playground/assets/index-DPKLl4C_.css +0 -1
- /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
- /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
- /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
|
@@ -14,15 +14,6 @@
|
|
|
14
14
|
* `streaming_mode_mismatch`, so assistant text goes out as `markdown_text`
|
|
15
15
|
* chunks and tool steps can land in the same message.
|
|
16
16
|
*/
|
|
17
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
17
|
import { markHostedFirstVisibleReply } from "../../internal/hosted-execution-latency.js";
|
|
27
18
|
import { appendChatStream, postMessage, startChatStream, stopChatStream } from "./api.js";
|
|
28
19
|
import { highlightCodeFences } from "./code-fences.js";
|
|
@@ -42,21 +33,27 @@ function activeStreamTs(channel) {
|
|
|
42
33
|
}
|
|
43
34
|
export function createStreamDeliveryStrategy(deps) {
|
|
44
35
|
const { botToken, getLog } = deps;
|
|
45
|
-
const open =
|
|
36
|
+
const open = async ({ channel, channelId, threadTs, sessionId, markdown_text, chunks, }) => {
|
|
46
37
|
if (activeStreamTs(channel) !== null) {
|
|
47
38
|
return true;
|
|
48
39
|
}
|
|
49
|
-
const openingText = markdown_text
|
|
40
|
+
const openingText = markdown_text ?? "";
|
|
50
41
|
const opening = [];
|
|
51
42
|
if (openingText !== "") {
|
|
52
43
|
opening.push(markdownChunk(highlightCodeFences(openingText)));
|
|
53
44
|
}
|
|
54
|
-
opening.push(...(chunks
|
|
45
|
+
opening.push(...(chunks ?? []));
|
|
55
46
|
if (opening.length === 0) {
|
|
56
47
|
return false;
|
|
57
48
|
}
|
|
58
49
|
const log = getLog();
|
|
59
|
-
const started =
|
|
50
|
+
const started = await startChatStream({
|
|
51
|
+
botToken,
|
|
52
|
+
channel: channelId,
|
|
53
|
+
thread_ts: threadTs,
|
|
54
|
+
chunks: opening,
|
|
55
|
+
...streamRecipients(channel),
|
|
56
|
+
});
|
|
60
57
|
if (!started.ok) {
|
|
61
58
|
log.warn("chat.startStream unavailable", {
|
|
62
59
|
error: started.error,
|
|
@@ -85,8 +82,8 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
85
82
|
deliverySurface: "slack",
|
|
86
83
|
});
|
|
87
84
|
return true;
|
|
88
|
-
}
|
|
89
|
-
const ensureOpen = (args) =>
|
|
85
|
+
};
|
|
86
|
+
const ensureOpen = async (args) => {
|
|
90
87
|
const existing = activeStreamTs(args.channel);
|
|
91
88
|
if (existing !== null) {
|
|
92
89
|
return existing;
|
|
@@ -97,7 +94,7 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
97
94
|
if (args.channel.state.threadTs === null || args.channel.state.threadTs === "") {
|
|
98
95
|
return null;
|
|
99
96
|
}
|
|
100
|
-
const opened =
|
|
97
|
+
const opened = await open({
|
|
101
98
|
channel: args.channel,
|
|
102
99
|
channelId: args.channelId,
|
|
103
100
|
threadTs: args.channel.state.threadTs,
|
|
@@ -106,26 +103,25 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
106
103
|
chunks: args.chunks,
|
|
107
104
|
});
|
|
108
105
|
return opened ? activeStreamTs(args.channel) : null;
|
|
109
|
-
}
|
|
106
|
+
};
|
|
110
107
|
/**
|
|
111
108
|
* What to append for the new cumulative text, as Slack should see it: the
|
|
112
109
|
* block text on both sides goes through the same fence rewrite, so the
|
|
113
110
|
* delta lines up with what the stream already holds.
|
|
114
111
|
*/
|
|
115
|
-
const streamDelta = (channel, text) =>
|
|
112
|
+
const streamDelta = (channel, text) => computeStreamAppend(highlightCodeFences(channel.state.streamBlockText ?? ""), highlightCodeFences(text));
|
|
116
113
|
/**
|
|
117
114
|
* The reply does not extend what the stream already holds, so there is no
|
|
118
115
|
* delta to append and the text on Slack is not the reply.
|
|
119
116
|
*/
|
|
120
|
-
const rewound = (channel, text) =>
|
|
121
|
-
!highlightCodeFences(text).startsWith(highlightCodeFences(
|
|
117
|
+
const rewound = (channel, text) => streamDelta(channel, text) === "" &&
|
|
118
|
+
!highlightCodeFences(text).startsWith(highlightCodeFences(channel.state.streamBlockText ?? ""));
|
|
122
119
|
const countAppended = (channel, chunks) => {
|
|
123
|
-
|
|
124
|
-
channel.state.streamAppendedChunks = ((_a = channel.state.streamAppendedChunks) !== null && _a !== void 0 ? _a : 0) + chunks;
|
|
120
|
+
channel.state.streamAppendedChunks = (channel.state.streamAppendedChunks ?? 0) + chunks;
|
|
125
121
|
};
|
|
126
|
-
const stopWithSuffix = (args) =>
|
|
122
|
+
const stopWithSuffix = async (args) => {
|
|
127
123
|
const appendText = streamDelta(args.channel, args.text);
|
|
128
|
-
const stopped =
|
|
124
|
+
const stopped = await stopChatStream({
|
|
129
125
|
botToken,
|
|
130
126
|
channel: args.channelId,
|
|
131
127
|
ts: args.ts,
|
|
@@ -141,17 +137,16 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
141
137
|
args.channel.state.streamingUnavailable = true;
|
|
142
138
|
}
|
|
143
139
|
return { ok: false, error: stopped.error };
|
|
144
|
-
}
|
|
145
|
-
const closeOrphan = (channel) =>
|
|
146
|
-
var _a;
|
|
140
|
+
};
|
|
141
|
+
const closeOrphan = async (channel) => {
|
|
147
142
|
const orphanTs = activeStreamTs(channel);
|
|
148
|
-
const channelId =
|
|
143
|
+
const channelId = channel.state.streamChannelId ?? channel.state.channelId;
|
|
149
144
|
if (orphanTs === null || channelId === null || channelId === "") {
|
|
150
145
|
return;
|
|
151
146
|
}
|
|
152
|
-
|
|
147
|
+
await stopChatStream({ botToken, channel: channelId, ts: orphanTs });
|
|
153
148
|
channel.state.streamTs = null;
|
|
154
|
-
}
|
|
149
|
+
};
|
|
155
150
|
/**
|
|
156
151
|
* `msg_too_long` means the message is full: every further append would
|
|
157
152
|
* fail the same way, so appends stop until `finalize` continues the reply
|
|
@@ -170,10 +165,10 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
170
165
|
* reply no longer extends what it holds. Close it as it stands so it stops
|
|
171
166
|
* spinning and post the remainder as a new thread message.
|
|
172
167
|
*/
|
|
173
|
-
const continueInNewMessage = (args) =>
|
|
168
|
+
const continueInNewMessage = async (args) => {
|
|
174
169
|
const { channel, channelId, ts, remainder, reason, sessionId } = args;
|
|
175
170
|
const log = getLog();
|
|
176
|
-
|
|
171
|
+
await stopChatStream({ botToken, channel: channelId, ts });
|
|
177
172
|
channel.state.streamTs = null;
|
|
178
173
|
if (remainder === "") {
|
|
179
174
|
return true;
|
|
@@ -182,7 +177,7 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
182
177
|
return true;
|
|
183
178
|
}
|
|
184
179
|
try {
|
|
185
|
-
const posted =
|
|
180
|
+
const posted = await postMessage({
|
|
186
181
|
botToken,
|
|
187
182
|
channel: channelId,
|
|
188
183
|
text: remainder,
|
|
@@ -213,187 +208,174 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
213
208
|
});
|
|
214
209
|
return false;
|
|
215
210
|
}
|
|
216
|
-
}
|
|
211
|
+
};
|
|
217
212
|
return {
|
|
218
213
|
inlineToolSteps: true,
|
|
219
214
|
open,
|
|
220
|
-
append(
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
markdown_text: text,
|
|
230
|
-
});
|
|
231
|
-
if (ts === null) {
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
const appendText = streamDelta(channel, text);
|
|
235
|
-
if (appendText === "") {
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
const result = yield appendChatStream({
|
|
239
|
-
botToken,
|
|
240
|
-
channel: channelId,
|
|
241
|
-
ts,
|
|
242
|
-
chunks: [markdownChunk(appendText)],
|
|
243
|
-
});
|
|
244
|
-
if (!result.ok) {
|
|
245
|
-
getLog().warn("appendStream failed", {
|
|
246
|
-
error: result.error,
|
|
247
|
-
channel: channelId,
|
|
248
|
-
stream_ts: ts,
|
|
249
|
-
session: sessionId,
|
|
250
|
-
});
|
|
251
|
-
noteAppendFailure(channel, result);
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
countAppended(channel, 1);
|
|
255
|
-
channel.state.lastPostedText = text;
|
|
256
|
-
channel.state.streamBlockText = text;
|
|
215
|
+
async append({ channel, channelId, text, sessionId }) {
|
|
216
|
+
if (channel.state.streamFull === true) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
const ts = await ensureOpen({
|
|
220
|
+
channel,
|
|
221
|
+
channelId,
|
|
222
|
+
sessionId,
|
|
223
|
+
markdown_text: text,
|
|
257
224
|
});
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
if (!hadStream) {
|
|
275
|
-
return true;
|
|
276
|
-
}
|
|
277
|
-
const result = yield appendChatStream({
|
|
278
|
-
botToken,
|
|
225
|
+
if (ts === null) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
const appendText = streamDelta(channel, text);
|
|
229
|
+
if (appendText === "") {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
const result = await appendChatStream({
|
|
233
|
+
botToken,
|
|
234
|
+
channel: channelId,
|
|
235
|
+
ts,
|
|
236
|
+
chunks: [markdownChunk(appendText)],
|
|
237
|
+
});
|
|
238
|
+
if (!result.ok) {
|
|
239
|
+
getLog().warn("appendStream failed", {
|
|
240
|
+
error: result.error,
|
|
279
241
|
channel: channelId,
|
|
280
|
-
ts,
|
|
281
|
-
|
|
242
|
+
stream_ts: ts,
|
|
243
|
+
session: sessionId,
|
|
282
244
|
});
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
245
|
+
noteAppendFailure(channel, result);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
countAppended(channel, 1);
|
|
249
|
+
channel.state.lastPostedText = text;
|
|
250
|
+
channel.state.streamBlockText = text;
|
|
251
|
+
},
|
|
252
|
+
async appendChunks({ channel, channelId, chunks, sessionId }) {
|
|
253
|
+
if (channel.state.streamFull === true) {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
const hadStream = activeStreamTs(channel) !== null;
|
|
257
|
+
const ts = await ensureOpen({
|
|
258
|
+
channel,
|
|
259
|
+
channelId,
|
|
260
|
+
sessionId,
|
|
261
|
+
chunks,
|
|
262
|
+
});
|
|
263
|
+
if (ts === null) {
|
|
264
|
+
return false;
|
|
265
|
+
}
|
|
266
|
+
if (!hadStream) {
|
|
295
267
|
return true;
|
|
268
|
+
}
|
|
269
|
+
const result = await appendChatStream({
|
|
270
|
+
botToken,
|
|
271
|
+
channel: channelId,
|
|
272
|
+
ts,
|
|
273
|
+
chunks,
|
|
296
274
|
});
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
var _b;
|
|
301
|
-
const log = getLog();
|
|
302
|
-
const ts = yield ensureOpen({
|
|
303
|
-
channel,
|
|
304
|
-
channelId,
|
|
305
|
-
sessionId,
|
|
306
|
-
markdown_text: text,
|
|
307
|
-
});
|
|
308
|
-
if (ts === null) {
|
|
309
|
-
return { delivered: false };
|
|
310
|
-
}
|
|
311
|
-
// Measured before the stop attempt mutates stream state.
|
|
312
|
-
const remainder = streamDelta(channel, text);
|
|
313
|
-
// Nothing to append and the stream does not hold the reply: closing it
|
|
314
|
-
// here would leave the answer nowhere and report it as delivered.
|
|
315
|
-
if (rewound(channel, text)) {
|
|
316
|
-
const posted = yield continueInNewMessage({
|
|
317
|
-
channel,
|
|
318
|
-
channelId,
|
|
319
|
-
ts,
|
|
320
|
-
remainder: text,
|
|
321
|
-
reason: "rewound",
|
|
322
|
-
sessionId,
|
|
323
|
-
});
|
|
324
|
-
if (posted) {
|
|
325
|
-
channel.state.lastPostedText = text;
|
|
326
|
-
}
|
|
327
|
-
return { delivered: posted };
|
|
328
|
-
}
|
|
329
|
-
const stopped = channel.state.streamFull === true
|
|
330
|
-
? { ok: false, error: "msg_too_long" }
|
|
331
|
-
: yield stopWithSuffix({ channel, channelId, ts, text });
|
|
332
|
-
if (stopped.ok) {
|
|
333
|
-
log.info("reply delivered via stream", {
|
|
334
|
-
channel: channelId,
|
|
335
|
-
stream_ts: ts,
|
|
336
|
-
session: sessionId,
|
|
337
|
-
chars: text.length,
|
|
338
|
-
appends: (_b = channel.state.streamAppendedChunks) !== null && _b !== void 0 ? _b : 0,
|
|
339
|
-
});
|
|
340
|
-
return { delivered: true };
|
|
341
|
-
}
|
|
342
|
-
if (stopped.error === "msg_too_long") {
|
|
343
|
-
yield continueInNewMessage({
|
|
344
|
-
channel,
|
|
345
|
-
channelId,
|
|
346
|
-
ts,
|
|
347
|
-
remainder,
|
|
348
|
-
reason: "msg_too_long",
|
|
349
|
-
sessionId,
|
|
350
|
-
});
|
|
351
|
-
channel.state.lastPostedText = text;
|
|
352
|
-
return { delivered: true };
|
|
353
|
-
}
|
|
354
|
-
log.warn("chat.stopStream failed; falling back to postMessage", {
|
|
355
|
-
error: stopped.error,
|
|
275
|
+
if (!result.ok) {
|
|
276
|
+
getLog().warn("appendStream chunks failed", {
|
|
277
|
+
error: result.error,
|
|
356
278
|
channel: channelId,
|
|
357
279
|
stream_ts: ts,
|
|
358
280
|
session: sessionId,
|
|
281
|
+
chunks: chunks.length,
|
|
359
282
|
});
|
|
360
|
-
|
|
361
|
-
return
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
return __awaiter(this, arguments, void 0, function* ({ channel }) {
|
|
366
|
-
yield closeOrphan(channel);
|
|
367
|
-
});
|
|
283
|
+
noteAppendFailure(channel, result);
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
countAppended(channel, chunks.length);
|
|
287
|
+
return true;
|
|
368
288
|
},
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
289
|
+
async finalize({ channel, channelId, text, sessionId }) {
|
|
290
|
+
const log = getLog();
|
|
291
|
+
const ts = await ensureOpen({
|
|
292
|
+
channel,
|
|
293
|
+
channelId,
|
|
294
|
+
sessionId,
|
|
295
|
+
markdown_text: text,
|
|
372
296
|
});
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
297
|
+
if (ts === null) {
|
|
298
|
+
return { delivered: false };
|
|
299
|
+
}
|
|
300
|
+
// Measured before the stop attempt mutates stream state.
|
|
301
|
+
const remainder = streamDelta(channel, text);
|
|
302
|
+
// Nothing to append and the stream does not hold the reply: closing it
|
|
303
|
+
// here would leave the answer nowhere and report it as delivered.
|
|
304
|
+
if (rewound(channel, text)) {
|
|
305
|
+
const posted = await continueInNewMessage({
|
|
377
306
|
channel,
|
|
378
307
|
channelId,
|
|
308
|
+
ts,
|
|
309
|
+
remainder: text,
|
|
310
|
+
reason: "rewound",
|
|
379
311
|
sessionId,
|
|
380
|
-
markdown_text: errorText,
|
|
381
312
|
});
|
|
382
|
-
if (
|
|
383
|
-
|
|
313
|
+
if (posted) {
|
|
314
|
+
channel.state.lastPostedText = text;
|
|
384
315
|
}
|
|
385
|
-
|
|
316
|
+
return { delivered: posted };
|
|
317
|
+
}
|
|
318
|
+
const stopped = channel.state.streamFull === true
|
|
319
|
+
? { ok: false, error: "msg_too_long" }
|
|
320
|
+
: await stopWithSuffix({ channel, channelId, ts, text });
|
|
321
|
+
if (stopped.ok) {
|
|
322
|
+
log.info("reply delivered via stream", {
|
|
323
|
+
channel: channelId,
|
|
324
|
+
stream_ts: ts,
|
|
325
|
+
session: sessionId,
|
|
326
|
+
chars: text.length,
|
|
327
|
+
appends: channel.state.streamAppendedChunks ?? 0,
|
|
328
|
+
});
|
|
329
|
+
return { delivered: true };
|
|
330
|
+
}
|
|
331
|
+
if (stopped.error === "msg_too_long") {
|
|
332
|
+
await continueInNewMessage({
|
|
386
333
|
channel,
|
|
387
334
|
channelId,
|
|
388
335
|
ts,
|
|
389
|
-
|
|
336
|
+
remainder,
|
|
337
|
+
reason: "msg_too_long",
|
|
338
|
+
sessionId,
|
|
390
339
|
});
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
340
|
+
channel.state.lastPostedText = text;
|
|
341
|
+
return { delivered: true };
|
|
342
|
+
}
|
|
343
|
+
log.warn("chat.stopStream failed; falling back to postMessage", {
|
|
344
|
+
error: stopped.error,
|
|
345
|
+
channel: channelId,
|
|
346
|
+
stream_ts: ts,
|
|
347
|
+
session: sessionId,
|
|
348
|
+
});
|
|
349
|
+
const alreadyStreamed = typeof channel.state.lastPostedText === "string" && channel.state.lastPostedText.length > 0;
|
|
350
|
+
return { delivered: alreadyStreamed };
|
|
351
|
+
},
|
|
352
|
+
async finalizeEmpty({ channel }) {
|
|
353
|
+
await closeOrphan(channel);
|
|
354
|
+
},
|
|
355
|
+
async cleanupOrphan({ channel }) {
|
|
356
|
+
await closeOrphan(channel);
|
|
357
|
+
},
|
|
358
|
+
async fail({ channel, channelId, errorText, sessionId }) {
|
|
359
|
+
const ts = await ensureOpen({
|
|
360
|
+
channel,
|
|
361
|
+
channelId,
|
|
362
|
+
sessionId,
|
|
363
|
+
markdown_text: errorText,
|
|
396
364
|
});
|
|
365
|
+
if (ts === null) {
|
|
366
|
+
return { delivered: false };
|
|
367
|
+
}
|
|
368
|
+
const stopped = await stopWithSuffix({
|
|
369
|
+
channel,
|
|
370
|
+
channelId,
|
|
371
|
+
ts,
|
|
372
|
+
text: errorText,
|
|
373
|
+
});
|
|
374
|
+
if (stopped.ok) {
|
|
375
|
+
return { delivered: true };
|
|
376
|
+
}
|
|
377
|
+
const alreadyStreamed = typeof channel.state.lastPostedText === "string" && channel.state.lastPostedText.length > 0;
|
|
378
|
+
return { delivered: alreadyStreamed };
|
|
397
379
|
},
|
|
398
380
|
};
|
|
399
381
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,iDAAiD,CAAC;AAEhG,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE;QACR,QAAQ,EAAE;YACR,YAAY,EAAE,MAAM,CAAC;YACrB,aAAa,EAAE,OAAO,CAAC;SACxB,CAAC;QACF,UAAU,CAAC,EAAE;YACX,iBAAiB,EAAE,MAAM,CAAC;YAC1B,iBAAiB,EAAE,KAAK,CAAC;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;SAC9D,CAAC;QACF,QAAQ,CAAC,EAAE;YACT,gBAAgB,EAAE,OAAO,CAAC;YAC1B,oBAAoB,EAAE,OAAO,CAAC;YAC9B,8BAA8B,EAAE,OAAO,CAAC;SACzC,CAAC;KACH,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE;YACN,GAAG,EAAE,MAAM,EAAE,CAAC;SACf,CAAC;QACF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,QAAQ,EAAE;QACR,mBAAmB,EAAE;YACnB,UAAU,EAAE,MAAM,EAAE,CAAC;SACtB,CAAC;QACF,aAAa,EAAE;YACb,UAAU,EAAE,OAAO,CAAC;SACrB,CAAC;QACF,kBAAkB,EAAE,OAAO,CAAC;QAC5B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,sBAAsB,EAAE,OAAO,CAAC;QAChC,cAAc,EAAE,OAAO,CAAC;QACxB,oBAAoB,CAAC,EAAE;YACrB,8BAA8B,EAAE,OAAO,CAAC;YACxC,2BAA2B,EAAE,MAAM,CAAC;SACrC,CAAC;KACH,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,iDAAiD,CAAC;AAEhG,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE;QACR,QAAQ,EAAE;YACR,YAAY,EAAE,MAAM,CAAC;YACrB,aAAa,EAAE,OAAO,CAAC;SACxB,CAAC;QACF,UAAU,CAAC,EAAE;YACX,iBAAiB,EAAE,MAAM,CAAC;YAC1B,iBAAiB,EAAE,KAAK,CAAC;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;SAC9D,CAAC;QACF,QAAQ,CAAC,EAAE;YACT,gBAAgB,EAAE,OAAO,CAAC;YAC1B,oBAAoB,EAAE,OAAO,CAAC;YAC9B,8BAA8B,EAAE,OAAO,CAAC;SACzC,CAAC;KACH,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE;YACN,GAAG,EAAE,MAAM,EAAE,CAAC;SACf,CAAC;QACF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,QAAQ,EAAE;QACR,mBAAmB,EAAE;YACnB,UAAU,EAAE,MAAM,EAAE,CAAC;SACtB,CAAC;QACF,aAAa,EAAE;YACb,UAAU,EAAE,OAAO,CAAC;SACrB,CAAC;QACF,kBAAkB,EAAE,OAAO,CAAC;QAC5B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,sBAAsB,EAAE,OAAO,CAAC;QAChC,cAAc,EAAE,OAAO,CAAC;QACxB,oBAAoB,CAAC,EAAE;YACrB,8BAA8B,EAAE,OAAO,CAAC;YACxC,2BAA2B,EAAE,MAAM,CAAC;SACrC,CAAC;KACH,CAAC;CACH;AAiFD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,gBAAgB,CAsElF;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG;IAClF,GAAG,EAAE,gBAAgB,CAAC;IACtB,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAKA;AAED,kDAAkD;AAClD,wBAAgB,wBAAwB,CACtC,IAAI,EAAE;IAAE,GAAG,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,EACvD,GAAG,GAAE,KAAK,GAAG,MAAM,GAAG,MAAe,GACpC,aAAa,CAAC;IACf,IAAI,EAAE,mBAAmB,GAAG,oBAAoB,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAkBD"}
|
|
@@ -14,28 +14,47 @@
|
|
|
14
14
|
* not an install callback. `apps.managedInstall` still installs.
|
|
15
15
|
*/
|
|
16
16
|
export const SLACK_EXTERNAL_APP_MANAGEMENT_URL = "https://cursor.com/dashboard/deployed-agents";
|
|
17
|
+
/**
|
|
18
|
+
* Every scope any Slack channel feature can use, requested by every app: a
|
|
19
|
+
* feature never needs a manifest option or a re-provision (a new scope
|
|
20
|
+
* forces a reinstall), and the same agent runs over Socket Mode locally
|
|
21
|
+
* and over the Events API on Cursor-managed v2. Nothing that workspace
|
|
22
|
+
* policies commonly refuse (`chat:write.public`, `channels:join`) is here.
|
|
23
|
+
*/
|
|
17
24
|
const BOT_SCOPES = [
|
|
18
25
|
"app_mentions:read",
|
|
19
26
|
"assistant:write",
|
|
20
27
|
"channels:history",
|
|
28
|
+
// Resolve and verify watched channels (`#name` allowlists, `slack doctor`).
|
|
29
|
+
"channels:read",
|
|
21
30
|
"chat:write",
|
|
22
31
|
"files:read",
|
|
23
32
|
"files:write",
|
|
24
33
|
"groups:history",
|
|
34
|
+
"groups:read",
|
|
25
35
|
"im:history",
|
|
26
36
|
"im:read",
|
|
27
37
|
"im:write",
|
|
28
38
|
"mpim:history",
|
|
39
|
+
// `reaction_added` wakes (`onReactionAdded`).
|
|
40
|
+
"reactions:read",
|
|
29
41
|
// Emoji acknowledgements (e.g. an agent reacting 👀 when it locks onto
|
|
30
42
|
// a watched-channel post before investigating).
|
|
31
43
|
"reactions:write",
|
|
44
|
+
// Resolve user groups and people by email in agent tools.
|
|
45
|
+
"usergroups:read",
|
|
32
46
|
"users:read",
|
|
47
|
+
"users:read.email",
|
|
33
48
|
];
|
|
49
|
+
/** Every event the channel dispatches on. */
|
|
34
50
|
const BOT_EVENTS = [
|
|
35
51
|
"app_mention",
|
|
36
52
|
"message.im",
|
|
37
53
|
// agent_view DMs: Slack no longer fires assistant_thread_started.
|
|
38
54
|
"app_home_opened",
|
|
55
|
+
"message.channels",
|
|
56
|
+
"message.groups",
|
|
57
|
+
"reaction_added",
|
|
39
58
|
];
|
|
40
59
|
/** Slack's display_information.description bound. */
|
|
41
60
|
const MAX_DESCRIPTION_LENGTH = 140;
|
|
@@ -71,22 +90,18 @@ function toBotDisplayName(name, env) {
|
|
|
71
90
|
* Build a Slack app manifest suitable for Create from Manifest.
|
|
72
91
|
*/
|
|
73
92
|
export function buildSlackManifest(options) {
|
|
74
|
-
var _a, _b, _c;
|
|
75
93
|
const env = options.env;
|
|
76
94
|
const benny = isBennyApp(options.name);
|
|
77
95
|
// Benny's app title matches its handle so the Install App UI shows
|
|
78
96
|
// benny-dev (not "benny (dev)" / "Benny").
|
|
79
97
|
const displayName = benny ? "benny-dev" : env === "dev" ? `${options.name} (dev)` : options.name;
|
|
80
|
-
const botName =
|
|
81
|
-
const description =
|
|
82
|
-
const agentDescription =
|
|
98
|
+
const botName = options.botDisplayName ?? toBotDisplayName(options.name, env);
|
|
99
|
+
const description = options.description ?? defaultDescription(options.name);
|
|
100
|
+
const agentDescription = options.agentDescription ?? description;
|
|
83
101
|
const includeAgentView = options.assistant !== false;
|
|
84
102
|
const botScopes = includeAgentView
|
|
85
103
|
? [...BOT_SCOPES]
|
|
86
104
|
: BOT_SCOPES.filter(scope => scope !== "assistant:write");
|
|
87
|
-
const botEvents = options.channelPosts === true
|
|
88
|
-
? [...BOT_EVENTS, "message.channels", "message.groups"]
|
|
89
|
-
: [...BOT_EVENTS];
|
|
90
105
|
const suggested = options.suggestedPrompts !== undefined ? options.suggestedPrompts : [];
|
|
91
106
|
return {
|
|
92
107
|
display_information: {
|
|
@@ -116,29 +131,35 @@ export function buildSlackManifest(options) {
|
|
|
116
131
|
},
|
|
117
132
|
redirect_urls: options.managedByCursor === false ? undefined : [SLACK_EXTERNAL_APP_MANAGEMENT_URL],
|
|
118
133
|
},
|
|
119
|
-
settings:
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
134
|
+
settings: {
|
|
135
|
+
event_subscriptions: {
|
|
136
|
+
bot_events: [...BOT_EVENTS],
|
|
137
|
+
},
|
|
138
|
+
interactivity: {
|
|
139
|
+
is_enabled: true,
|
|
140
|
+
},
|
|
124
141
|
// Benny installs org-wide in the Cursor FE & ADM workspace.
|
|
125
|
-
org_deploy_enabled: benny,
|
|
142
|
+
org_deploy_enabled: benny,
|
|
126
143
|
// Always Socket Mode — agent-serve has no Events Request URL path.
|
|
127
144
|
// (Do not set false even if Slack's empty-app stub defaults to off.)
|
|
128
|
-
socket_mode_enabled: true,
|
|
129
|
-
|
|
130
|
-
:
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
145
|
+
socket_mode_enabled: true,
|
|
146
|
+
token_rotation_enabled: false,
|
|
147
|
+
is_mcp_enabled: false,
|
|
148
|
+
...(options.managedByCursor === false
|
|
149
|
+
? {}
|
|
150
|
+
: {
|
|
151
|
+
managed_app_settings: {
|
|
152
|
+
is_install_from_slack_disabled: true,
|
|
153
|
+
external_app_management_url: SLACK_EXTERNAL_APP_MANAGEMENT_URL,
|
|
154
|
+
},
|
|
155
|
+
}),
|
|
156
|
+
},
|
|
136
157
|
};
|
|
137
158
|
}
|
|
138
159
|
export function buildSlackManifestPair(options) {
|
|
139
160
|
return {
|
|
140
|
-
dev: buildSlackManifest(
|
|
141
|
-
prod: buildSlackManifest(
|
|
161
|
+
dev: buildSlackManifest({ ...options, env: "dev" }),
|
|
162
|
+
prod: buildSlackManifest({ ...options, env: "prod" }),
|
|
142
163
|
};
|
|
143
164
|
}
|
|
144
165
|
/** Manifest filenames written under `.slack/`. */
|
|
@@ -46,14 +46,14 @@ export function slackApiMessageBody(message) {
|
|
|
46
46
|
continue;
|
|
47
47
|
}
|
|
48
48
|
const blockText = asRecord(rec.text);
|
|
49
|
-
const blockTextValue = asString(blockText
|
|
49
|
+
const blockTextValue = asString(blockText?.text);
|
|
50
50
|
if (blockTextValue !== undefined && blockTextValue.trim() !== "") {
|
|
51
51
|
parts.push(blockTextValue);
|
|
52
52
|
}
|
|
53
53
|
const fields = Array.isArray(rec.fields) ? rec.fields : [];
|
|
54
54
|
for (const field of fields) {
|
|
55
55
|
const fieldRec = asRecord(field);
|
|
56
|
-
const fieldText = asString(fieldRec
|
|
56
|
+
const fieldText = asString(fieldRec?.text);
|
|
57
57
|
if (fieldText !== undefined && fieldText.trim() !== "") {
|
|
58
58
|
parts.push(fieldText);
|
|
59
59
|
}
|