@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
|
@@ -9,15 +9,6 @@
|
|
|
9
9
|
* existing thread into a fresh conversation. Run bookkeeping remains local;
|
|
10
10
|
* the durable session event stream already records user-visible history.
|
|
11
11
|
*/
|
|
12
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
12
|
import { agentSdkAgentStoreKeys } from "../files.js";
|
|
22
13
|
import { cursorHostedFiles } from "../files-backends/cursor-hosted.js";
|
|
23
14
|
import { mapBounded } from "./bounded.js";
|
|
@@ -26,9 +17,8 @@ import { describeError } from "./describe-error.js";
|
|
|
26
17
|
import { resolveAgentV2Hosting } from "./v2-hosting.js";
|
|
27
18
|
/** Build a {@link ConversationMirror} over a {@link FileSink}. */
|
|
28
19
|
export function createConversationMirror(options) {
|
|
29
|
-
var _a;
|
|
30
20
|
const { sink, agentName } = options;
|
|
31
|
-
const logger =
|
|
21
|
+
const logger = options.logger ?? (() => { });
|
|
32
22
|
/**
|
|
33
23
|
* Blob ids known to be in the sink, per SDK agent id (upload dedupe).
|
|
34
24
|
* Bounded oldest-out like the files backend's etag cache: a resident
|
|
@@ -72,8 +62,7 @@ export function createConversationMirror(options) {
|
|
|
72
62
|
*/
|
|
73
63
|
const chains = new Map();
|
|
74
64
|
function serialize(sdkAgentId, run) {
|
|
75
|
-
|
|
76
|
-
const previous = (_a = chains.get(sdkAgentId)) !== null && _a !== void 0 ? _a : Promise.resolve();
|
|
65
|
+
const previous = chains.get(sdkAgentId) ?? Promise.resolve();
|
|
77
66
|
const next = previous.then(run, run);
|
|
78
67
|
const stored = next
|
|
79
68
|
.catch(() => { })
|
|
@@ -85,90 +74,87 @@ export function createConversationMirror(options) {
|
|
|
85
74
|
chains.set(sdkAgentId, stored);
|
|
86
75
|
return next;
|
|
87
76
|
}
|
|
88
|
-
function mirroredBlobIds(sdkAgentId) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
seeded.add(blobId);
|
|
103
|
-
}
|
|
77
|
+
async function mirroredBlobIds(sdkAgentId) {
|
|
78
|
+
const cached = mirrored.get(sdkAgentId);
|
|
79
|
+
if (cached !== undefined) {
|
|
80
|
+
return cached;
|
|
81
|
+
}
|
|
82
|
+
// Seed from the previous manifest so a new process does not re-upload the
|
|
83
|
+
// whole history on its first persist. A miss, an unusable manifest, or
|
|
84
|
+
// a failed read seeds empty — re-uploading is wasteful, never wrong.
|
|
85
|
+
const seeded = new Set();
|
|
86
|
+
try {
|
|
87
|
+
const read = await readManifest(sink, agentName, sdkAgentId);
|
|
88
|
+
if (read.outcome === "found") {
|
|
89
|
+
for (const blobId of read.manifest.blobIds) {
|
|
90
|
+
seeded.add(blobId);
|
|
104
91
|
}
|
|
105
92
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
logger(`[bdk] conversation mirror: could not read the prior manifest for ${sdkAgentId} (${describeError(error)}); re-uploading blobs`);
|
|
96
|
+
}
|
|
97
|
+
rememberMirrored(sdkAgentId, seeded);
|
|
98
|
+
return seeded;
|
|
112
99
|
}
|
|
113
|
-
function uploadBlobs(store, sdkAgentId, blobIds, uploaded) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
body,
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
if (entries.length === 0) {
|
|
128
|
-
return;
|
|
100
|
+
async function uploadBlobs(store, sdkAgentId, blobIds, uploaded) {
|
|
101
|
+
const entries = [];
|
|
102
|
+
for (const blobId of blobIds) {
|
|
103
|
+
const body = await store.checkpoints.get({ agentId: sdkAgentId, blobId });
|
|
104
|
+
if (body !== null) {
|
|
105
|
+
entries.push({
|
|
106
|
+
blobId,
|
|
107
|
+
key: agentSdkAgentStoreKeys.conversationBlob(agentName, sdkAgentId, blobId),
|
|
108
|
+
body,
|
|
109
|
+
});
|
|
129
110
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
111
|
+
}
|
|
112
|
+
if (entries.length === 0) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (sink.putMany === undefined) {
|
|
116
|
+
for (const entry of entries) {
|
|
117
|
+
await sink.put(entry.key, entry.body);
|
|
118
|
+
uploaded.add(entry.blobId);
|
|
136
119
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
failure = (_a = outcome === null || outcome === void 0 ? void 0 : outcome.reason) !== null && _a !== void 0 ? _a : new Error(`conversation mirror: batched upload of "${entry.key}" returned no outcome`);
|
|
146
|
-
}
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const settled = await sink.putMany(entries.map(({ key, body }) => ({ key, body })));
|
|
123
|
+
let failure;
|
|
124
|
+
for (const [index, entry] of entries.entries()) {
|
|
125
|
+
const outcome = settled[index];
|
|
126
|
+
if (outcome?.status === "fulfilled") {
|
|
127
|
+
uploaded.add(entry.blobId);
|
|
147
128
|
}
|
|
148
|
-
if (failure
|
|
149
|
-
|
|
129
|
+
else if (failure === undefined) {
|
|
130
|
+
failure =
|
|
131
|
+
outcome?.reason ??
|
|
132
|
+
new Error(`conversation mirror: batched upload of "${entry.key}" returned no outcome`);
|
|
150
133
|
}
|
|
151
|
-
}
|
|
134
|
+
}
|
|
135
|
+
if (failure !== undefined) {
|
|
136
|
+
throw failure;
|
|
137
|
+
}
|
|
152
138
|
}
|
|
153
139
|
return {
|
|
154
140
|
persist(store, sdkAgentId) {
|
|
155
|
-
return serialize(sdkAgentId, () =>
|
|
156
|
-
const document =
|
|
141
|
+
return serialize(sdkAgentId, async () => {
|
|
142
|
+
const document = await store.agents.get({ agentId: sdkAgentId });
|
|
157
143
|
if (document === null || document.latestCheckpoint == null) {
|
|
158
144
|
// Nothing restorable yet (no conversation, or no checkpoint).
|
|
159
145
|
return;
|
|
160
146
|
}
|
|
161
|
-
const uploaded =
|
|
162
|
-
const blobIds =
|
|
147
|
+
const uploaded = await mirroredBlobIds(sdkAgentId);
|
|
148
|
+
const blobIds = await listCheckpointBlobIds(store, sdkAgentId);
|
|
163
149
|
const pending = blobIds.filter(blobId => !uploaded.has(blobId));
|
|
164
150
|
for (let start = 0; start < pending.length; start += PERSIST_UPLOAD_BATCH_SIZE) {
|
|
165
|
-
|
|
151
|
+
await uploadBlobs(store, sdkAgentId, pending.slice(start, start + PERSIST_UPLOAD_BATCH_SIZE), uploaded);
|
|
166
152
|
}
|
|
167
153
|
const manifest = {
|
|
168
154
|
v: 1,
|
|
169
155
|
// The referenced run is process-local bookkeeping and is not mirrored;
|
|
170
156
|
// a hydrated store must not point at a run row it does not hold.
|
|
171
|
-
agent:
|
|
157
|
+
agent: { ...document, activeRunId: null },
|
|
172
158
|
blobIds: blobIds.filter(blobId => uploaded.has(blobId)),
|
|
173
159
|
persistedAtMs: Date.now(),
|
|
174
160
|
};
|
|
@@ -184,18 +170,17 @@ export function createConversationMirror(options) {
|
|
|
184
170
|
}
|
|
185
171
|
lastManifestContent.delete(sdkAgentId);
|
|
186
172
|
// Manifest last: it only ever references blobs already uploaded.
|
|
187
|
-
|
|
173
|
+
await sink.put(agentSdkAgentStoreKeys.conversationManifest(agentName, sdkAgentId), new TextEncoder().encode(JSON.stringify(manifest)));
|
|
188
174
|
rememberManifest(sdkAgentId, content);
|
|
189
|
-
})
|
|
175
|
+
});
|
|
190
176
|
},
|
|
191
177
|
hydrate(store, sdkAgentId) {
|
|
192
|
-
return serialize(sdkAgentId, () =>
|
|
193
|
-
|
|
194
|
-
const existing = yield store.agents.get({ agentId: sdkAgentId });
|
|
178
|
+
return serialize(sdkAgentId, async () => {
|
|
179
|
+
const existing = await store.agents.get({ agentId: sdkAgentId });
|
|
195
180
|
if (existing !== null) {
|
|
196
181
|
return false;
|
|
197
182
|
}
|
|
198
|
-
const read =
|
|
183
|
+
const read = await readManifest(sink, agentName, sdkAgentId);
|
|
199
184
|
if (read.outcome === "miss") {
|
|
200
185
|
return false;
|
|
201
186
|
}
|
|
@@ -208,7 +193,7 @@ export function createConversationMirror(options) {
|
|
|
208
193
|
return false;
|
|
209
194
|
}
|
|
210
195
|
const manifest = read.manifest;
|
|
211
|
-
const rootBlobId =
|
|
196
|
+
const rootBlobId = manifest.agent.latestCheckpoint?.rootBlobId;
|
|
212
197
|
if (rootBlobId === undefined || !manifest.blobIds.includes(rootBlobId)) {
|
|
213
198
|
logger(`[bdk] conversation mirror: the manifest for ${sdkAgentId} does not list its root checkpoint blob; treating the conversation as unrestorable`);
|
|
214
199
|
return false;
|
|
@@ -217,8 +202,8 @@ export function createConversationMirror(options) {
|
|
|
217
202
|
// fall back to bounded parallel reads when the sink has no batch API.
|
|
218
203
|
const blobKeys = manifest.blobIds.map(blobId => agentSdkAgentStoreKeys.conversationBlob(agentName, sdkAgentId, blobId));
|
|
219
204
|
const blobBodies = sink.getMany !== undefined
|
|
220
|
-
?
|
|
221
|
-
:
|
|
205
|
+
? await sink.getMany(blobKeys)
|
|
206
|
+
: await mapBounded(blobKeys, HYDRATE_DOWNLOAD_CONCURRENCY, key => sink.get(key));
|
|
222
207
|
const bodies = manifest.blobIds.map((blobId, index) => ({
|
|
223
208
|
blobId,
|
|
224
209
|
body: blobBodies[index],
|
|
@@ -237,11 +222,11 @@ export function createConversationMirror(options) {
|
|
|
237
222
|
for (const entry of bodies) {
|
|
238
223
|
const body = entry.body;
|
|
239
224
|
const bytes = body instanceof Uint8Array ? body : body.body;
|
|
240
|
-
if ((
|
|
225
|
+
if ((await store.checkpoints.get({
|
|
241
226
|
agentId: sdkAgentId,
|
|
242
227
|
blobId: entry.blobId,
|
|
243
228
|
})) === null) {
|
|
244
|
-
|
|
229
|
+
await store.checkpoints.create({
|
|
245
230
|
agentId: sdkAgentId,
|
|
246
231
|
blobId: entry.blobId,
|
|
247
232
|
data: bytes,
|
|
@@ -249,18 +234,18 @@ export function createConversationMirror(options) {
|
|
|
249
234
|
}
|
|
250
235
|
restored.add(entry.blobId);
|
|
251
236
|
}
|
|
252
|
-
|
|
253
|
-
agent:
|
|
237
|
+
await store.agents.create({
|
|
238
|
+
agent: { ...manifest.agent, activeRunId: null },
|
|
254
239
|
});
|
|
255
240
|
rememberMirrored(sdkAgentId, restored);
|
|
256
241
|
logger(`[bdk] conversation mirror: restored the conversation for ${sdkAgentId} (${restored.size} checkpoint blob(s))`);
|
|
257
242
|
return true;
|
|
258
|
-
})
|
|
243
|
+
});
|
|
259
244
|
},
|
|
260
245
|
};
|
|
261
246
|
}
|
|
262
247
|
/** Oldest-out cap on the per-conversation upload-dedupe cache. */
|
|
263
|
-
const MAX_TRACKED_CONVERSATIONS =
|
|
248
|
+
const MAX_TRACKED_CONVERSATIONS = 1_000;
|
|
264
249
|
/** Parallel blob downloads during hydrate (resume critical path). */
|
|
265
250
|
const HYDRATE_DOWNLOAD_CONCURRENCY = 8;
|
|
266
251
|
const PERSIST_UPLOAD_BATCH_SIZE = 50;
|
|
@@ -269,46 +254,42 @@ const PERSIST_UPLOAD_BATCH_SIZE = 50;
|
|
|
269
254
|
* outage must fail the follow-up, not fork the thread); everything the
|
|
270
255
|
* bytes themselves can be wrong about is reported as `unusable`.
|
|
271
256
|
*/
|
|
272
|
-
function readManifest(sink, agentName, sdkAgentId) {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
return { outcome: "found", manifest };
|
|
297
|
-
});
|
|
257
|
+
async function readManifest(sink, agentName, sdkAgentId) {
|
|
258
|
+
const body = await sink.get(agentSdkAgentStoreKeys.conversationManifest(agentName, sdkAgentId));
|
|
259
|
+
if (body === undefined) {
|
|
260
|
+
return { outcome: "miss" };
|
|
261
|
+
}
|
|
262
|
+
const bytes = body instanceof Uint8Array ? body : body.body;
|
|
263
|
+
let parsed;
|
|
264
|
+
try {
|
|
265
|
+
parsed = JSON.parse(new TextDecoder().decode(bytes));
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
return { outcome: "unusable", reason: "not JSON" };
|
|
269
|
+
}
|
|
270
|
+
if (parsed === null || typeof parsed !== "object" || parsed.v !== 1) {
|
|
271
|
+
return { outcome: "unusable", reason: "unsupported manifest version" };
|
|
272
|
+
}
|
|
273
|
+
const manifest = parsed;
|
|
274
|
+
if (manifest.agent === null ||
|
|
275
|
+
typeof manifest.agent !== "object" ||
|
|
276
|
+
manifest.agent.agentId !== sdkAgentId ||
|
|
277
|
+
!Array.isArray(manifest.blobIds)) {
|
|
278
|
+
return { outcome: "unusable", reason: "malformed manifest" };
|
|
279
|
+
}
|
|
280
|
+
return { outcome: "found", manifest };
|
|
298
281
|
}
|
|
299
|
-
function listCheckpointBlobIds(store, sdkAgentId) {
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
return blobIds;
|
|
311
|
-
});
|
|
282
|
+
async function listCheckpointBlobIds(store, sdkAgentId) {
|
|
283
|
+
const blobIds = [];
|
|
284
|
+
let cursor;
|
|
285
|
+
do {
|
|
286
|
+
const page = await store.checkpoints.list({
|
|
287
|
+
filter: { agentIds: [sdkAgentId], cursor },
|
|
288
|
+
});
|
|
289
|
+
blobIds.push(...page.items);
|
|
290
|
+
cursor = page.nextCursor;
|
|
291
|
+
} while (cursor !== undefined);
|
|
292
|
+
return blobIds;
|
|
312
293
|
}
|
|
313
294
|
/**
|
|
314
295
|
* Whether (and over which sink) this serve process mirrors conversations.
|
|
@@ -328,7 +309,7 @@ export function selectConversationMirror(input) {
|
|
|
328
309
|
return createConversationMirror({
|
|
329
310
|
sink: cursorHostedFiles({
|
|
330
311
|
resolveStoreSourceId: () => hosting.resolveStoreIds().frameworkStoreSourceId,
|
|
331
|
-
resolveApiKey: () =>
|
|
312
|
+
resolveApiKey: () => resolveApiKeySync()?.apiKey,
|
|
332
313
|
}),
|
|
333
314
|
agentName: input.project.name,
|
|
334
315
|
logger: input.logger,
|
|
@@ -11,10 +11,8 @@ import { MEMORY_TS } from "../init-scaffold.js";
|
|
|
11
11
|
import { CANONICAL_PROJECT_ROOT, projectPath } from "../project-layout.js";
|
|
12
12
|
import { SlugRegistry, slugify } from "./slug.js";
|
|
13
13
|
export function convertWorkflow(input) {
|
|
14
|
-
var _a, _b;
|
|
15
|
-
var _c, _d, _e;
|
|
16
14
|
const { automation, workflow, mcpServers, exportedAt } = input;
|
|
17
|
-
const projectRoot =
|
|
15
|
+
const projectRoot = input.projectRoot ?? CANONICAL_PROJECT_ROOT;
|
|
18
16
|
const out = {
|
|
19
17
|
projectRoot,
|
|
20
18
|
files: [],
|
|
@@ -27,7 +25,7 @@ export function convertWorkflow(input) {
|
|
|
27
25
|
}
|
|
28
26
|
// Pin the model the prompt actually ran with; the workflow-level model is
|
|
29
27
|
// only a fallback. Silently swapping models changes cost and behavior.
|
|
30
|
-
const promptModel =
|
|
28
|
+
const promptModel = workflow.prompts?.[0]?.model;
|
|
31
29
|
const pinnedModel = promptModel !== undefined && promptModel !== "" ? promptModel : workflow.model;
|
|
32
30
|
if (promptModel !== undefined &&
|
|
33
31
|
promptModel !== "" &&
|
|
@@ -44,7 +42,7 @@ export function convertWorkflow(input) {
|
|
|
44
42
|
path: projectPath(projectRoot, "agent.ts"),
|
|
45
43
|
contents: renderAgentTs(automation, workflow, pinnedModel),
|
|
46
44
|
});
|
|
47
|
-
const triggers =
|
|
45
|
+
const triggers = workflow.triggers ?? [];
|
|
48
46
|
const scheduleSlugs = new SlugRegistry();
|
|
49
47
|
const channelSlugs = new SlugRegistry();
|
|
50
48
|
const gitTriggers = [];
|
|
@@ -80,7 +78,7 @@ export function convertWorkflow(input) {
|
|
|
80
78
|
emitBoilerplateChannel(automation, trigger, kind, channelSlugs, out);
|
|
81
79
|
}
|
|
82
80
|
emitMcpConnections(automation, mcpServers, out);
|
|
83
|
-
const hasSlackAction = (
|
|
81
|
+
const hasSlackAction = (workflow.actions ?? []).some(action => action.slack !== undefined || action.readSlack !== undefined);
|
|
84
82
|
const hasSlackConnection = hasSlackAction && emitSlackAccountConnection(automation, out);
|
|
85
83
|
if (workflow.memoryEnabled === true) {
|
|
86
84
|
out.files.push({
|
|
@@ -99,7 +97,6 @@ export function convertWorkflow(input) {
|
|
|
99
97
|
// instructions.md
|
|
100
98
|
// ============================================================================
|
|
101
99
|
function renderInstructions(automation, workflow, exportedAt, warnings, projectRoot) {
|
|
102
|
-
var _a, _b;
|
|
103
100
|
const header = [
|
|
104
101
|
"<!--",
|
|
105
102
|
` Exported from Cursor automation "${commentSafe(automation.name)}"`,
|
|
@@ -108,7 +105,7 @@ function renderInstructions(automation, workflow, exportedAt, warnings, projectR
|
|
|
108
105
|
` exported: ${commentSafe(exportedAt)}`,
|
|
109
106
|
"-->",
|
|
110
107
|
].join("\n");
|
|
111
|
-
const prompts =
|
|
108
|
+
const prompts = workflow.prompts ?? [];
|
|
112
109
|
if (prompts.length === 0) {
|
|
113
110
|
warnings.push(`The source automation has no prompts — ${projectPath(projectRoot, "instructions.md")} contains a placeholder.`);
|
|
114
111
|
return `${header}\n\nTODO: the source automation had no prompt text. Write this agent's instructions.\n`;
|
|
@@ -121,7 +118,7 @@ function renderInstructions(automation, workflow, exportedAt, warnings, projectR
|
|
|
121
118
|
const prompt = prompts[0];
|
|
122
119
|
const meta = promptMeta(prompt);
|
|
123
120
|
const heading = meta === "" ? "" : `<!-- ${meta} -->\n\n`;
|
|
124
|
-
return `${header}\n\n${heading}${sanitizePromptText(
|
|
121
|
+
return `${header}\n\n${heading}${sanitizePromptText(prompt.prompt ?? "", warnings, projectRoot)}\n`;
|
|
125
122
|
}
|
|
126
123
|
/**
|
|
127
124
|
* Strip Cursor-backend prompt markup that means nothing in BDK:
|
|
@@ -182,8 +179,7 @@ function renderAgentTs(automation, workflow, pinnedModel) {
|
|
|
182
179
|
// Schedules (cron triggers)
|
|
183
180
|
// ============================================================================
|
|
184
181
|
function emitSchedule(automation, trigger, slugs, out) {
|
|
185
|
-
|
|
186
|
-
const cron = (_a = trigger.cron) === null || _a === void 0 ? void 0 : _a.cron;
|
|
182
|
+
const cron = trigger.cron?.cron;
|
|
187
183
|
if (cron === undefined || cron === "") {
|
|
188
184
|
out.warnings.push("A cron trigger had no cron expression and was skipped.");
|
|
189
185
|
return;
|
|
@@ -265,8 +261,6 @@ const PR_ACTION_NUMBERS = {
|
|
|
265
261
|
7: "GIT_PULL_REQUEST_ACTION_UNLABELED",
|
|
266
262
|
};
|
|
267
263
|
function emitGithubChannel(automation, workflow, triggers, slugs, out) {
|
|
268
|
-
var _a, _b;
|
|
269
|
-
var _c, _d, _e, _f, _g, _h;
|
|
270
264
|
const slug = slugs.claim("github");
|
|
271
265
|
const path = projectPath(out.projectRoot, `channels/${slug}.ts`);
|
|
272
266
|
const webhookEvents = [];
|
|
@@ -290,7 +284,7 @@ function emitGithubChannel(automation, workflow, triggers, slugs, out) {
|
|
|
290
284
|
const userAllowlist = [];
|
|
291
285
|
for (const trigger of triggers) {
|
|
292
286
|
const git = trigger.git;
|
|
293
|
-
userAllowlist.push(...(
|
|
287
|
+
userAllowlist.push(...(git.userAllowlist ?? []).filter(user => user !== ""));
|
|
294
288
|
for (const [eventKey, events] of Object.entries(GIT_EVENT_WEBHOOKS)) {
|
|
295
289
|
const event = git[eventKey];
|
|
296
290
|
if (event === undefined || typeof event !== "object") {
|
|
@@ -299,12 +293,12 @@ function emitGithubChannel(automation, workflow, triggers, slugs, out) {
|
|
|
299
293
|
webhookEvents.push(...events);
|
|
300
294
|
const eventObject = event;
|
|
301
295
|
if (eventKey === "pullRequest") {
|
|
302
|
-
const raw = String(
|
|
303
|
-
const prAction =
|
|
296
|
+
const raw = String(eventObject.prAction ?? "");
|
|
297
|
+
const prAction = PR_ACTION_NUMBERS[raw] ?? (raw === "" ? "GIT_PULL_REQUEST_ACTION_UNSPECIFIED" : raw);
|
|
304
298
|
if (prAction === "GIT_PULL_REQUEST_ACTION_COMMENTED") {
|
|
305
299
|
webhookEvents.push("issue_comment");
|
|
306
300
|
hasCommentedAction = true;
|
|
307
|
-
if ((
|
|
301
|
+
if ((git.userAllowlist ?? []).length > 0 ||
|
|
308
302
|
(Array.isArray(eventObject.commenterAllowlist) &&
|
|
309
303
|
eventObject.commenterAllowlist.length > 0) ||
|
|
310
304
|
(typeof eventObject.commentContains === "string" && eventObject.commentContains !== "")) {
|
|
@@ -340,7 +334,7 @@ function emitGithubChannel(automation, workflow, triggers, slugs, out) {
|
|
|
340
334
|
// user_allowlist gates the PR author and commenter_allowlist the
|
|
341
335
|
// commenter here — neither identity is visible to onComment — and
|
|
342
336
|
// comment_contains filters the body.
|
|
343
|
-
if ((
|
|
337
|
+
if ((git.userAllowlist ?? []).length > 0 ||
|
|
344
338
|
(Array.isArray(eventObject.commenterAllowlist) &&
|
|
345
339
|
eventObject.commenterAllowlist.length > 0) ||
|
|
346
340
|
(typeof eventObject.commentContains === "string" && eventObject.commentContains !== "")) {
|
|
@@ -421,10 +415,10 @@ function emitGithubChannel(automation, workflow, triggers, slugs, out) {
|
|
|
421
415
|
}
|
|
422
416
|
}
|
|
423
417
|
}
|
|
424
|
-
if (
|
|
418
|
+
if (workflow.gitConfig?.repo !== undefined && workflow.gitConfig.repo !== "") {
|
|
425
419
|
repos.push(workflow.gitConfig.repo);
|
|
426
420
|
}
|
|
427
|
-
repos.push(...(
|
|
421
|
+
repos.push(...(workflow.gitConfig?.repos ?? []));
|
|
428
422
|
const uniqueEvents = dedupe(webhookEvents);
|
|
429
423
|
const uniqueRepos = dedupe(dedupe(repos.filter(repo => repo !== "")).flatMap(repo => {
|
|
430
424
|
const normalized = normalizeRepoIdentifier(repo, out);
|
|
@@ -647,7 +641,6 @@ function isSlackTrigger(trigger) {
|
|
|
647
641
|
trigger.slackChannelCreated !== undefined);
|
|
648
642
|
}
|
|
649
643
|
function emitSlackChannel(automation, triggers, slugs, out) {
|
|
650
|
-
var _a;
|
|
651
644
|
const slug = slugs.claim("slack");
|
|
652
645
|
const path = projectPath(out.projectRoot, `channels/${slug}.ts`);
|
|
653
646
|
const watches = triggers.filter(t => t.slackTrigger !== undefined);
|
|
@@ -667,7 +660,7 @@ function emitSlackChannel(automation, triggers, slugs, out) {
|
|
|
667
660
|
}
|
|
668
661
|
// The backend defaults a missing/UNSPECIFIED mode to ON (checkmark
|
|
669
662
|
// reaction); only explicit OFF means no reaction was added.
|
|
670
|
-
const reactionMode = String(
|
|
663
|
+
const reactionMode = String(config.slackCompletionReactionMode ?? "");
|
|
671
664
|
if (reactionMode !== "SLACK_COMPLETION_REACTION_MODE_OFF" && reactionMode !== "2") {
|
|
672
665
|
reactionDropped = true;
|
|
673
666
|
}
|
|
@@ -676,7 +669,7 @@ function emitSlackChannel(automation, triggers, slugs, out) {
|
|
|
676
669
|
out.warnings.push(`The Slack trigger marked triggering messages with a completion reaction; BDK has no completion-reaction option, so that signal is lost unless ${projectPath(out.projectRoot, "instructions.md")} tells the agent to add the reaction itself via Slack tools.`);
|
|
677
670
|
}
|
|
678
671
|
out.setupSteps.push(socketMode
|
|
679
|
-
? `Slack channel-watch / reaction / channel-created triggers need a dedicated Socket Mode Slack app: run \`${CLI_COMMAND_NAME} slack create
|
|
672
|
+
? `Slack channel-watch / reaction / channel-created triggers need a dedicated Socket Mode Slack app: run \`${CLI_COMMAND_NAME} slack create\`, then finish in the dashboard wizard.`
|
|
680
673
|
: `Slack mentions need a dedicated Socket Mode Slack app: run \`${CLI_COMMAND_NAME} slack create\`, then finish in the dashboard wizard.`);
|
|
681
674
|
const header = [
|
|
682
675
|
`import { slackChannel } from "${PACKAGE_NAME}/channels/slack";`,
|
|
@@ -719,7 +712,7 @@ function emitSlackChannel(automation, triggers, slugs, out) {
|
|
|
719
712
|
}
|
|
720
713
|
body = [
|
|
721
714
|
"//",
|
|
722
|
-
`// Run \`${CLI_COMMAND_NAME} slack create
|
|
715
|
+
`// Run \`${CLI_COMMAND_NAME} slack create\` for a dedicated Slack app.`,
|
|
723
716
|
...slackChannelExport(automation.name, engagement),
|
|
724
717
|
];
|
|
725
718
|
}
|
|
@@ -750,8 +743,7 @@ function slackChannelExport(name, optionLines) {
|
|
|
750
743
|
return ["export default slackChannel({", ...options, "});"];
|
|
751
744
|
}
|
|
752
745
|
function slackChannelList(trigger) {
|
|
753
|
-
|
|
754
|
-
return [...((_a = trigger === null || trigger === void 0 ? void 0 : trigger.channels) !== null && _a !== void 0 ? _a : []), trigger === null || trigger === void 0 ? void 0 : trigger.channel].filter((channel) => typeof channel === "string" && channel !== "");
|
|
746
|
+
return [...(trigger?.channels ?? []), trigger?.channel].filter((channel) => typeof channel === "string" && channel !== "");
|
|
755
747
|
}
|
|
756
748
|
const BOILERPLATE_KINDS = [
|
|
757
749
|
{ key: "linear", slug: "linear", label: "Linear" },
|
|
@@ -938,11 +930,9 @@ function slackActionStep(action, { hasSlackChannel, hasSlackConnection }, projec
|
|
|
938
930
|
return `Verify: slack post (target: ${target}) — the automation posted to Slack, but the exported project has no Slack integration; wire a Slack channel or a Cursor account MCP connection (defineConnection({ cursorAccount: true, servers: ["Slack"] })) to restore it.`;
|
|
939
931
|
}
|
|
940
932
|
function behaviorSteps(workflow, warnings, slack, projectRoot) {
|
|
941
|
-
var _a;
|
|
942
|
-
var _b, _c;
|
|
943
933
|
const steps = [];
|
|
944
934
|
const knownActionSteps = actionSteps(projectRoot);
|
|
945
|
-
for (const action of
|
|
935
|
+
for (const action of workflow.actions ?? []) {
|
|
946
936
|
if (action.mcp !== undefined) {
|
|
947
937
|
continue; // Covered by the exported mcpServers list.
|
|
948
938
|
}
|
|
@@ -956,14 +946,14 @@ function behaviorSteps(workflow, warnings, slack, projectRoot) {
|
|
|
956
946
|
: 'Verify: read_slack — expose Slack read access via a Cursor account MCP connection (defineConnection({ cursorAccount: true, servers: ["Slack"] })).');
|
|
957
947
|
continue;
|
|
958
948
|
}
|
|
959
|
-
const step =
|
|
949
|
+
const step = Object.entries(knownActionSteps).find(([key]) => action[key] !== undefined)?.[1];
|
|
960
950
|
if (step === undefined) {
|
|
961
951
|
warnings.push(`Unrecognized action (keys: ${Object.keys(action).join(", ") || "none"}) was skipped — verify its behavior manually.`);
|
|
962
952
|
continue;
|
|
963
953
|
}
|
|
964
954
|
steps.push(step);
|
|
965
955
|
}
|
|
966
|
-
const disabled =
|
|
956
|
+
const disabled = workflow.disabledDefaultTools ?? [];
|
|
967
957
|
if (disabled.length > 0) {
|
|
968
958
|
steps.push(`Verify: disabled_default_tools (${disabled.join(", ")}) — BDK has no default automation tools; enforce the equivalent restriction in ${projectPath(projectRoot, "instructions.md")}.`);
|
|
969
959
|
}
|
package/dist/internal/cron.js
CHANGED
|
@@ -24,8 +24,8 @@ function createCroner(source) {
|
|
|
24
24
|
* Implemented via croner's nextRun from one second before the minute floor.
|
|
25
25
|
*/
|
|
26
26
|
function matchesCron(cron, date) {
|
|
27
|
-
const floorMs = Math.floor(date.getTime() /
|
|
28
|
-
const next = cron.nextRun(new Date(floorMs -
|
|
27
|
+
const floorMs = Math.floor(date.getTime() / 60_000) * 60_000;
|
|
28
|
+
const next = cron.nextRun(new Date(floorMs - 1_000));
|
|
29
29
|
return next !== null && next.getTime() === floorMs;
|
|
30
30
|
}
|
|
31
31
|
export function parseCron(source) {
|
|
@@ -54,7 +54,7 @@ export function isValidCron(source) {
|
|
|
54
54
|
parseCron(source);
|
|
55
55
|
return true;
|
|
56
56
|
}
|
|
57
|
-
catch
|
|
57
|
+
catch {
|
|
58
58
|
return false;
|
|
59
59
|
}
|
|
60
60
|
}
|