@cursor/bdk 0.2.9 → 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.js +803 -812
- 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.BNhEdGa8.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.DIdUV1Ph.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
- package/dist/docs/assets/chunks/{arc.lELI4_SR.js → arc.BOG1yms8.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.iCMdvuoM.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.C1-nDJBf.js → baseUniq.H044KjKs.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.ClemzBox.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BqTak6cR.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
- package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CUS3qs_R.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.dz5fdHcl.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.D6BEBmve.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.B5uK4ID9.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.PgOJgNQs.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CvkTrCii.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnSfKYsB.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.MZH6v5UC.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.BBbw_YZi.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.CNJB2l7E.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.BQzlnFfq.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DkgqqZMz.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DIT8L7H_.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.3xLPZWGJ.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.5_IHz8jF.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BGUCXz8A.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DbfFavS1.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.D2yKdeNW.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CSCxwHba.js → graph.BVqKRmRo.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.FDeb6xHY.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DbeYs9VL.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CWjKINpx.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B4FrAlwz.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
- package/dist/docs/assets/chunks/{layout.DFGxQ9ab.js → layout.CGU3gfSf.js} +1 -1
- package/dist/docs/assets/chunks/{linear.BmjZ-G59.js → linear.DaihpW_n.js} +1 -1
- package/dist/docs/assets/chunks/{min.DZSxulMW.js → min.BS-j8kHQ.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CHLi3-aN.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DteG-CkU.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.D458ipN3.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DcFgUxst.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BwQAMmSA.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.B_Xdsrh9.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CdfDW6-C.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.sfdL3srp.js → theme.DaplWQhQ.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.56-4hXaC.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CvZSQBO7.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.C9qc8k39.js → wardley-RL74JXVD.iXazD3Z7.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D9s0nihi.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.BVJSpYrC.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.js +100 -126
- 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.js +8 -19
- 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.js +73 -90
- 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.js +127 -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.js +231 -273
- 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-Co4CUVTQ.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 +51 -10
- package/dist/docs/assets/chunks/@localSearchIndexroot.BJ8UZggu.js +0 -1
- package/dist/docs/assets/chunks/channel.BTJ5J9FI.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D4BZ3cVV.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D4BZ3cVV.js +0 -1
- package/dist/docs/assets/chunks/clone.62tX-O-1.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DkTs1aEU.js +0 -1
- 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-C1g_PTTZ.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
|
@@ -7,7 +7,7 @@ const HTTP_SPAN_HANDLE_KEY = Symbol.for("anysphere.july.otel.httpSpanHandle");
|
|
|
7
7
|
/** End the inbound SERVER span once the Fetch status is known (hosted flush). */
|
|
8
8
|
export function endActiveHttpSpan(statusCode, error) {
|
|
9
9
|
const handle = context.active().getValue(HTTP_SPAN_HANDLE_KEY);
|
|
10
|
-
handle
|
|
10
|
+
handle?.end(statusCode, error);
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Instrument one inbound Node request: SERVER span, W3C extract, auto-end
|
|
@@ -29,7 +29,6 @@ export function instrumentHttp(runtime, req, res, fn) {
|
|
|
29
29
|
return context.with(handle.context.setValue(HTTP_SPAN_HANDLE_KEY, handle), fn);
|
|
30
30
|
}
|
|
31
31
|
function startHttpSpan(runtime, req) {
|
|
32
|
-
var _a, _b, _c, _d;
|
|
33
32
|
if (runtime === undefined || runtime.config.traces === false) {
|
|
34
33
|
return undefined;
|
|
35
34
|
}
|
|
@@ -44,15 +43,15 @@ function startHttpSpan(runtime, req) {
|
|
|
44
43
|
}
|
|
45
44
|
}
|
|
46
45
|
const parent = propagation.extract(context.active(), headers);
|
|
47
|
-
const method =
|
|
48
|
-
const path = (
|
|
46
|
+
const method = req.method ?? "GET";
|
|
47
|
+
const path = (req.url ?? "/").split("?")[0] ?? "/";
|
|
49
48
|
const started = Date.now();
|
|
50
49
|
const span = runtime.tracer.startSpan("agent_sdk.http", {
|
|
51
50
|
kind: SpanKind.SERVER,
|
|
52
51
|
attributes: {
|
|
53
52
|
"http.request.method": method,
|
|
54
53
|
"url.path": path,
|
|
55
|
-
"network.peer.address":
|
|
54
|
+
"network.peer.address": req.socket.remoteAddress ?? "",
|
|
56
55
|
},
|
|
57
56
|
}, parent);
|
|
58
57
|
const ctx = trace.setSpan(parent, span);
|
|
@@ -60,7 +59,6 @@ function startHttpSpan(runtime, req) {
|
|
|
60
59
|
return {
|
|
61
60
|
context: ctx,
|
|
62
61
|
end(statusCode, error) {
|
|
63
|
-
var _a;
|
|
64
62
|
if (ended) {
|
|
65
63
|
return;
|
|
66
64
|
}
|
|
@@ -80,7 +78,7 @@ function startHttpSpan(runtime, req) {
|
|
|
80
78
|
span.setStatus({ code: SpanStatusCode.OK });
|
|
81
79
|
}
|
|
82
80
|
span.end();
|
|
83
|
-
|
|
81
|
+
runtime.httpDuration?.record(Date.now() - started, {
|
|
84
82
|
"http.request.method": method,
|
|
85
83
|
"http.response.status_code": statusCode,
|
|
86
84
|
"url.path": routeClass(path),
|
|
@@ -3,15 +3,6 @@
|
|
|
3
3
|
* HTTP + SSE fetches, SEP-414 `_meta.traceparent` on JSON-RPC params, and
|
|
4
4
|
* CLIENT spans for `tools/list` / `tools/call`.
|
|
5
5
|
*/
|
|
6
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
7
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
8
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
9
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
10
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
11
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
12
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
13
|
-
});
|
|
14
|
-
};
|
|
15
6
|
import { context, SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
|
|
16
7
|
import { activeTraceparent, instrumentedFetch } from "../../otel.js";
|
|
17
8
|
import { attrs } from "./attrs.js";
|
|
@@ -37,9 +28,9 @@ export function runMcpClientSpan(args, fn) {
|
|
|
37
28
|
"agent_sdk.mcp.connection": args.connection,
|
|
38
29
|
}),
|
|
39
30
|
});
|
|
40
|
-
return context.with(trace.setSpan(context.active(), span), () =>
|
|
31
|
+
return context.with(trace.setSpan(context.active(), span), async () => {
|
|
41
32
|
try {
|
|
42
|
-
return
|
|
33
|
+
return await fn();
|
|
43
34
|
}
|
|
44
35
|
catch (error) {
|
|
45
36
|
span.setStatus({
|
|
@@ -51,5 +42,5 @@ export function runMcpClientSpan(args, fn) {
|
|
|
51
42
|
finally {
|
|
52
43
|
span.end();
|
|
53
44
|
}
|
|
54
|
-
})
|
|
45
|
+
});
|
|
55
46
|
}
|
|
@@ -5,15 +5,6 @@
|
|
|
5
5
|
* already owns the process (CLI, extension host, etc.). Spans still use
|
|
6
6
|
* `trace.getTracer()` so they nest under an existing parent when present.
|
|
7
7
|
*/
|
|
8
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
8
|
import { DiagLogLevel, diag, metrics, trace } from "@opentelemetry/api";
|
|
18
9
|
import { logs } from "@opentelemetry/api-logs";
|
|
19
10
|
import { ExportResultCode } from "@opentelemetry/core";
|
|
@@ -38,29 +29,28 @@ const INSTRUMENTATION = "agent_sdk";
|
|
|
38
29
|
* lands. Bound the exporter wait so a slow collector cannot hold the
|
|
39
30
|
* delivery (OTLP BatchSpanProcessor defaults to 30s).
|
|
40
31
|
*/
|
|
41
|
-
export const OTEL_FORCE_FLUSH_TIMEOUT_MS =
|
|
32
|
+
export const OTEL_FORCE_FLUSH_TIMEOUT_MS = 1_000;
|
|
42
33
|
/**
|
|
43
34
|
* First hosted OTLP POST may include a cold TLS handshake to Datadog.
|
|
44
35
|
* Bound separately from {@link OTEL_FORCE_FLUSH_TIMEOUT_MS} so the
|
|
45
36
|
* queued turn/tool batch is not abandoned after 1s.
|
|
46
37
|
*/
|
|
47
|
-
export const OTEL_DEFERRED_EXPORT_TIMEOUT_MS =
|
|
38
|
+
export const OTEL_DEFERRED_EXPORT_TIMEOUT_MS = 5_000;
|
|
48
39
|
/** Drop oldest finished spans when no collector has drained the buffer. */
|
|
49
|
-
export const OTEL_IN_MEMORY_SPAN_LIMIT =
|
|
40
|
+
export const OTEL_IN_MEMORY_SPAN_LIMIT = 2_048;
|
|
50
41
|
export function createOtelRuntime(config, log, options) {
|
|
51
|
-
var _a;
|
|
52
42
|
if (!config.enabled) {
|
|
53
43
|
return undefined;
|
|
54
44
|
}
|
|
55
45
|
if (config.traces !== false) {
|
|
56
46
|
installOutboundFetchInstrumentation();
|
|
57
47
|
}
|
|
58
|
-
const proto =
|
|
48
|
+
const proto = process.env.OTEL_EXPORTER_OTLP_PROTOCOL?.trim().toLowerCase();
|
|
59
49
|
if (proto === "grpc") {
|
|
60
50
|
log("[bdk:otel] OTEL_EXPORTER_OTLP_PROTOCOL=grpc is unsupported; using http/protobuf");
|
|
61
51
|
}
|
|
62
52
|
ensureW3cPropagator();
|
|
63
|
-
const sdk = startOtelSdk(config, log, options
|
|
53
|
+
const sdk = startOtelSdk(config, log, options?.resolveExport);
|
|
64
54
|
const meter = config.metrics === false ? undefined : metrics.getMeterProvider().getMeter(INSTRUMENTATION);
|
|
65
55
|
return {
|
|
66
56
|
config,
|
|
@@ -77,36 +67,29 @@ export function createOtelRuntime(config, log, options) {
|
|
|
77
67
|
shutdown: sdk.shutdown,
|
|
78
68
|
};
|
|
79
69
|
}
|
|
80
|
-
export function forceFlushOtelRuntime(runtime) {
|
|
81
|
-
|
|
82
|
-
yield runtime === null || runtime === void 0 ? void 0 : runtime.forceFlush();
|
|
83
|
-
});
|
|
70
|
+
export async function forceFlushOtelRuntime(runtime) {
|
|
71
|
+
await runtime?.forceFlush();
|
|
84
72
|
}
|
|
85
|
-
export function shutdownOtelRuntime(runtime) {
|
|
86
|
-
|
|
87
|
-
yield runtime === null || runtime === void 0 ? void 0 : runtime.shutdown();
|
|
88
|
-
});
|
|
73
|
+
export async function shutdownOtelRuntime(runtime) {
|
|
74
|
+
await runtime?.shutdown();
|
|
89
75
|
}
|
|
90
|
-
export function raceOtelForceFlush(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
timer = setTimeout(() => resolve("timeout"), timeoutMs);
|
|
95
|
-
});
|
|
96
|
-
const result = yield Promise.race([
|
|
97
|
-
work.then(() => "done").catch(() => "done"),
|
|
98
|
-
timeout,
|
|
99
|
-
]);
|
|
100
|
-
if (timer !== undefined) {
|
|
101
|
-
clearTimeout(timer);
|
|
102
|
-
}
|
|
103
|
-
if (result === "timeout") {
|
|
104
|
-
log(`[bdk:otel] forceFlush exceeded ${timeoutMs}ms; continuing`);
|
|
105
|
-
}
|
|
76
|
+
export async function raceOtelForceFlush(work, log, timeoutMs = OTEL_FORCE_FLUSH_TIMEOUT_MS) {
|
|
77
|
+
let timer;
|
|
78
|
+
const timeout = new Promise(resolve => {
|
|
79
|
+
timer = setTimeout(() => resolve("timeout"), timeoutMs);
|
|
106
80
|
});
|
|
81
|
+
const result = await Promise.race([
|
|
82
|
+
work.then(() => "done").catch(() => "done"),
|
|
83
|
+
timeout,
|
|
84
|
+
]);
|
|
85
|
+
if (timer !== undefined) {
|
|
86
|
+
clearTimeout(timer);
|
|
87
|
+
}
|
|
88
|
+
if (result === "timeout") {
|
|
89
|
+
log(`[bdk:otel] forceFlush exceeded ${timeoutMs}ms; continuing`);
|
|
90
|
+
}
|
|
107
91
|
}
|
|
108
92
|
function startOtelSdk(config, logger, resolveExport) {
|
|
109
|
-
var _a, _b;
|
|
110
93
|
diag.setLogger({
|
|
111
94
|
verbose: m => logger(`[bdk:otel] ${m}`),
|
|
112
95
|
debug: m => logger(`[bdk:otel] ${m}`),
|
|
@@ -140,7 +123,7 @@ function startOtelSdk(config, logger, resolveExport) {
|
|
|
140
123
|
resource,
|
|
141
124
|
spanProcessors,
|
|
142
125
|
sampler: new ParentBasedSampler({
|
|
143
|
-
root: new TraceIdRatioBasedSampler(
|
|
126
|
+
root: new TraceIdRatioBasedSampler(traceOpts.sampleRatio ?? 1),
|
|
144
127
|
}),
|
|
145
128
|
});
|
|
146
129
|
tracerProvider.register();
|
|
@@ -150,7 +133,7 @@ function startOtelSdk(config, logger, resolveExport) {
|
|
|
150
133
|
if (metricOpts !== false) {
|
|
151
134
|
const exporters = exportersForSignal(config.exporters, "metrics");
|
|
152
135
|
if (exporters.length > 0) {
|
|
153
|
-
const exportIntervalMillis =
|
|
136
|
+
const exportIntervalMillis = metricOpts.exportIntervalMillis ?? 10_000;
|
|
154
137
|
const provider = new MeterProvider({
|
|
155
138
|
resource,
|
|
156
139
|
readers: exporters.map(exporter => new PeriodicExportingMetricReader({
|
|
@@ -190,8 +173,7 @@ function startOtelSdk(config, logger, resolveExport) {
|
|
|
190
173
|
else {
|
|
191
174
|
logger(`[bdk] otel recording service=${config.serviceName} (export on flush when OTLP exporters resolve)`);
|
|
192
175
|
}
|
|
193
|
-
const flushDeferred = () =>
|
|
194
|
-
var _a;
|
|
176
|
+
const flushDeferred = async () => {
|
|
195
177
|
if (memoryExporter === undefined) {
|
|
196
178
|
return;
|
|
197
179
|
}
|
|
@@ -199,7 +181,7 @@ function startOtelSdk(config, logger, resolveExport) {
|
|
|
199
181
|
if (spans.length === 0) {
|
|
200
182
|
return;
|
|
201
183
|
}
|
|
202
|
-
const exportConfig =
|
|
184
|
+
const exportConfig = resolveExport?.() ?? config;
|
|
203
185
|
const destinations = exportersForSignal(exportConfig.exporters, "traces");
|
|
204
186
|
if (destinations.length === 0) {
|
|
205
187
|
return;
|
|
@@ -207,30 +189,30 @@ function startOtelSdk(config, logger, resolveExport) {
|
|
|
207
189
|
// Spans already carry the bake-time Resource. Hosted v2 binds
|
|
208
190
|
// deployment secrets after bake, so env / service extras on
|
|
209
191
|
// exportConfig must replace that Resource on the wire.
|
|
210
|
-
const ok =
|
|
192
|
+
const ok = await exportQueuedSpans(spans, destinations, logger, buildResource(exportConfig));
|
|
211
193
|
if (ok) {
|
|
212
194
|
memoryExporter.reset();
|
|
213
195
|
}
|
|
214
|
-
}
|
|
196
|
+
};
|
|
215
197
|
return {
|
|
216
|
-
forceFlush: () =>
|
|
217
|
-
|
|
198
|
+
forceFlush: async () => {
|
|
199
|
+
await Promise.allSettled([
|
|
218
200
|
raceOtelForceFlush(Promise.allSettled([
|
|
219
|
-
tracerProvider
|
|
220
|
-
meterProvider
|
|
221
|
-
loggerProvider
|
|
201
|
+
tracerProvider?.forceFlush(),
|
|
202
|
+
meterProvider?.forceFlush(),
|
|
203
|
+
loggerProvider?.forceFlush(),
|
|
222
204
|
]), logger),
|
|
223
205
|
raceOtelForceFlush(flushDeferred(), logger, OTEL_DEFERRED_EXPORT_TIMEOUT_MS),
|
|
224
206
|
]);
|
|
225
|
-
}
|
|
226
|
-
shutdown: () =>
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
tracerProvider
|
|
230
|
-
meterProvider
|
|
231
|
-
loggerProvider
|
|
207
|
+
},
|
|
208
|
+
shutdown: async () => {
|
|
209
|
+
await flushDeferred();
|
|
210
|
+
await Promise.allSettled([
|
|
211
|
+
tracerProvider?.shutdown(),
|
|
212
|
+
meterProvider?.shutdown(),
|
|
213
|
+
loggerProvider?.shutdown(),
|
|
232
214
|
]);
|
|
233
|
-
}
|
|
215
|
+
},
|
|
234
216
|
};
|
|
235
217
|
}
|
|
236
218
|
function withExportResource(span, resource) {
|
|
@@ -243,31 +225,36 @@ function withExportResource(span, resource) {
|
|
|
243
225
|
},
|
|
244
226
|
});
|
|
245
227
|
}
|
|
246
|
-
function exportQueuedSpans(spans, destinations, logger, resource) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
}
|
|
265
|
-
});
|
|
228
|
+
async function exportQueuedSpans(spans, destinations, logger, resource) {
|
|
229
|
+
const payload = spans.map(span => withExportResource(span, resource));
|
|
230
|
+
const exporters = destinations.map(destination => createTraceExporter(destination, signalUrl(destination.url, "traces")));
|
|
231
|
+
try {
|
|
232
|
+
const results = await Promise.all(exporters.map(exporter => new Promise(resolve => {
|
|
233
|
+
exporter.export(payload, (result) => {
|
|
234
|
+
resolve(result.code === ExportResultCode.SUCCESS);
|
|
235
|
+
});
|
|
236
|
+
})));
|
|
237
|
+
return results.every(ok => ok);
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
logger(`[bdk:otel] deferred export failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
finally {
|
|
244
|
+
await Promise.allSettled(exporters.map(exporter => exporter.shutdown()));
|
|
245
|
+
}
|
|
266
246
|
}
|
|
267
247
|
function buildResource(config) {
|
|
268
248
|
// Align with Cursor enterprise wire resource attrs where they overlap so
|
|
269
249
|
// Agent SDK traces join org metrics/logs in the same collector.
|
|
270
|
-
const resourceAttrs =
|
|
250
|
+
const resourceAttrs = {
|
|
251
|
+
[ATTR_SERVICE_NAME]: config.serviceName,
|
|
252
|
+
"telemetry.sdk.language": "nodejs",
|
|
253
|
+
"cursor.surface": "unspecified",
|
|
254
|
+
"cursor.entrypoint": "sdk_ts",
|
|
255
|
+
"agent_sdk.framework": "@cursor/bdk",
|
|
256
|
+
...config.resourceAttributes,
|
|
257
|
+
};
|
|
271
258
|
if (config.serviceVersion !== undefined) {
|
|
272
259
|
resourceAttrs[ATTR_SERVICE_VERSION] = config.serviceVersion;
|
|
273
260
|
}
|
|
@@ -278,9 +265,8 @@ function signalUrl(base, signal) {
|
|
|
278
265
|
}
|
|
279
266
|
/** True when a non-noop TracerProvider already owns the process. */
|
|
280
267
|
function hasRealTracerProvider() {
|
|
281
|
-
var _a;
|
|
282
268
|
const provider = trace.getTracerProvider();
|
|
283
|
-
const delegate =
|
|
269
|
+
const delegate = provider.getDelegate?.();
|
|
284
270
|
return delegate !== undefined && delegate.constructor.name !== "NoopTracerProvider";
|
|
285
271
|
}
|
|
286
272
|
function isProtobuf(exporter) {
|
|
@@ -2,15 +2,6 @@
|
|
|
2
2
|
* Package `defineConnection({ tools })` into a `node -e` stdio transport a
|
|
3
3
|
* repo-less cloud VM can spawn.
|
|
4
4
|
*/
|
|
5
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
-
});
|
|
13
|
-
};
|
|
14
5
|
import { existsSync } from "node:fs";
|
|
15
6
|
import { createRequire } from "node:module";
|
|
16
7
|
import { dirname, join } from "node:path";
|
|
@@ -27,39 +18,41 @@ function jsonSchemaCatalog(tools) {
|
|
|
27
18
|
const catalog = {};
|
|
28
19
|
for (const [name, tool] of Object.entries(tools)) {
|
|
29
20
|
const outputSchema = toolOutputJsonSchema(tool.outputSchema);
|
|
30
|
-
catalog[name] =
|
|
21
|
+
catalog[name] = {
|
|
22
|
+
description: tool.description,
|
|
23
|
+
inputSchema: toolInputJsonSchema(tool.inputSchema),
|
|
24
|
+
...(outputSchema === undefined ? {} : { outputSchema: outputSchema }),
|
|
25
|
+
};
|
|
31
26
|
}
|
|
32
27
|
return catalog;
|
|
33
28
|
}
|
|
34
|
-
export function packageInlineStdioConnection(options) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
{
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
build.onLoad({ filter: /.*/, namespace: "inline-stdio" }, () => ({
|
|
62
|
-
contents: `import definition from ${JSON.stringify(options.entryPath)};
|
|
29
|
+
export async function packageInlineStdioConnection(options) {
|
|
30
|
+
const runtimePath = sibling("inline-stdio-mcp");
|
|
31
|
+
const stubPath = sibling("inline-stdio-define-stub");
|
|
32
|
+
const catalog = jsonSchemaCatalog(options.tools);
|
|
33
|
+
const result = await esbuild.build({
|
|
34
|
+
entryPoints: ["inline-stdio-entry"],
|
|
35
|
+
bundle: true,
|
|
36
|
+
write: false,
|
|
37
|
+
platform: "node",
|
|
38
|
+
format: "esm",
|
|
39
|
+
target: "node22",
|
|
40
|
+
minify: true,
|
|
41
|
+
legalComments: "none",
|
|
42
|
+
absWorkingDir: options.absWorkingDir,
|
|
43
|
+
alias: {
|
|
44
|
+
zod: require.resolve("zod"),
|
|
45
|
+
},
|
|
46
|
+
plugins: [
|
|
47
|
+
{
|
|
48
|
+
name: "inline-stdio-entry",
|
|
49
|
+
setup(build) {
|
|
50
|
+
build.onResolve({ filter: /^inline-stdio-entry$/ }, () => ({
|
|
51
|
+
path: "inline-stdio-entry",
|
|
52
|
+
namespace: "inline-stdio",
|
|
53
|
+
}));
|
|
54
|
+
build.onLoad({ filter: /.*/, namespace: "inline-stdio" }, () => ({
|
|
55
|
+
contents: `import definition from ${JSON.stringify(options.entryPath)};
|
|
63
56
|
import { serveInlineStdioMcp } from ${JSON.stringify(runtimePath)};
|
|
64
57
|
serveInlineStdioMcp(
|
|
65
58
|
${JSON.stringify(options.name)},
|
|
@@ -67,33 +60,32 @@ serveInlineStdioMcp(
|
|
|
67
60
|
${JSON.stringify(catalog)}
|
|
68
61
|
);
|
|
69
62
|
`,
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
},
|
|
63
|
+
resolveDir: dirname(options.entryPath),
|
|
64
|
+
loader: "ts",
|
|
65
|
+
}));
|
|
74
66
|
},
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "inline-stdio-connection-stub",
|
|
70
|
+
setup(build) {
|
|
71
|
+
build.onResolve({ filter: /^@cursor\/(?:bdk|july)\/connections$/ }, () => ({
|
|
72
|
+
path: stubPath,
|
|
73
|
+
}));
|
|
82
74
|
},
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const file = (_a = result.outputFiles) === null || _a === void 0 ? void 0 : _a[0];
|
|
86
|
-
if (file === undefined) {
|
|
87
|
-
throw new Error(`Failed to package inline stdio MCP connection "${options.name}": esbuild produced no output.`);
|
|
88
|
-
}
|
|
89
|
-
const source = file.text.replace(/^#!.*\r?\n/, "");
|
|
90
|
-
if (source.trim() === "") {
|
|
91
|
-
throw new Error(`Failed to package inline stdio MCP connection "${options.name}": empty bundle.`);
|
|
92
|
-
}
|
|
93
|
-
return {
|
|
94
|
-
type: "stdio",
|
|
95
|
-
command: "node",
|
|
96
|
-
args: ["--input-type=module", "-e", source],
|
|
97
|
-
};
|
|
75
|
+
},
|
|
76
|
+
],
|
|
98
77
|
});
|
|
78
|
+
const file = result.outputFiles?.[0];
|
|
79
|
+
if (file === undefined) {
|
|
80
|
+
throw new Error(`Failed to package inline stdio MCP connection "${options.name}": esbuild produced no output.`);
|
|
81
|
+
}
|
|
82
|
+
const source = file.text.replace(/^#!.*\r?\n/, "");
|
|
83
|
+
if (source.trim() === "") {
|
|
84
|
+
throw new Error(`Failed to package inline stdio MCP connection "${options.name}": empty bundle.`);
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
type: "stdio",
|
|
88
|
+
command: "node",
|
|
89
|
+
args: ["--input-type=module", "-e", source],
|
|
90
|
+
};
|
|
99
91
|
}
|
|
@@ -18,14 +18,13 @@ import { MCP_ENDPOINT_PATH } from "./mcp-endpoint.js";
|
|
|
18
18
|
* self-references (an agent asking itself recurses forever).
|
|
19
19
|
*/
|
|
20
20
|
export function collectPeerConnections(mounts) {
|
|
21
|
-
var _a;
|
|
22
21
|
const knownSlugs = new Set(mounts.map(({ slug }) => slug).filter(slug => slug !== ""));
|
|
23
22
|
const bySlug = new Map();
|
|
24
23
|
for (const { slug, project } of mounts) {
|
|
25
24
|
const refs = [];
|
|
26
25
|
for (const connection of [
|
|
27
26
|
...project.agent.connections,
|
|
28
|
-
...(
|
|
27
|
+
...(project.agent.hostConnections ?? []),
|
|
29
28
|
]) {
|
|
30
29
|
if (!isPeerConnectionTransport(connection.transport)) {
|
|
31
30
|
continue;
|
|
@@ -58,9 +57,14 @@ export function resolvePeerConnections(args) {
|
|
|
58
57
|
const serverBase = trimTrailingSlash(args.serverUrl);
|
|
59
58
|
const publicBase = args.publicUrl === undefined ? undefined : trimTrailingSlash(args.publicUrl);
|
|
60
59
|
const headers = args.authToken === undefined ? undefined : { authorization: `Bearer ${args.authToken}` };
|
|
61
|
-
return args.refs.map(ref => (
|
|
62
|
-
|
|
63
|
-
:
|
|
60
|
+
return args.refs.map(ref => ({
|
|
61
|
+
name: ref.name,
|
|
62
|
+
localUrl: `${serverBase}/${ref.targetSlug}${MCP_ENDPOINT_PATH}`,
|
|
63
|
+
...(publicBase === undefined
|
|
64
|
+
? {}
|
|
65
|
+
: { cloudUrl: `${publicBase}/${ref.targetSlug}${MCP_ENDPOINT_PATH}` }),
|
|
66
|
+
...(headers === undefined ? {} : { headers }),
|
|
67
|
+
}));
|
|
64
68
|
}
|
|
65
69
|
function trimTrailingSlash(url) {
|
|
66
70
|
return url.endsWith("/") ? url.slice(0, -1) : url;
|
|
@@ -3,68 +3,53 @@
|
|
|
3
3
|
* `agent/schedules/*`. Upsert current names and delete ones that disappeared
|
|
4
4
|
* since the last successful sync (persisted under the engine state root).
|
|
5
5
|
*/
|
|
6
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
7
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
8
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
9
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
10
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
11
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
12
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
13
|
-
});
|
|
14
|
-
};
|
|
15
6
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
16
7
|
import { dirname } from "node:path";
|
|
17
8
|
export const PLATFORM_SCHEDULE_CATALOG_FILENAME = "platform-schedule-names.json";
|
|
18
|
-
export function syncHostedPlatformSchedules(args) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
continue;
|
|
27
|
-
}
|
|
28
|
-
try {
|
|
29
|
-
yield args.timers.deleteSchedule(name);
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
failedDeletes.push(name);
|
|
33
|
-
args.logger(`[bdk] platform timer delete failed for schedule "${name}": ${error instanceof Error ? error.message : String(error)}`);
|
|
34
|
-
}
|
|
9
|
+
export async function syncHostedPlatformSchedules(args) {
|
|
10
|
+
const previous = await readScheduleCatalog(args.catalogPath);
|
|
11
|
+
const currentNames = args.schedules.map(schedule => schedule.name);
|
|
12
|
+
const currentSet = new Set(currentNames);
|
|
13
|
+
const failedDeletes = [];
|
|
14
|
+
for (const name of previous) {
|
|
15
|
+
if (currentSet.has(name)) {
|
|
16
|
+
continue;
|
|
35
17
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
yield args.timers.upsertSchedule({
|
|
39
|
-
name: schedule.name,
|
|
40
|
-
cron: schedule.cron,
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
args.logger(`[bdk] platform timer upsert failed for schedule "${schedule.name}": ${error instanceof Error ? error.message : String(error)}`);
|
|
45
|
-
}
|
|
18
|
+
try {
|
|
19
|
+
await args.timers.deleteSchedule(name);
|
|
46
20
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
21
|
+
catch (error) {
|
|
22
|
+
failedDeletes.push(name);
|
|
23
|
+
args.logger(`[bdk] platform timer delete failed for schedule "${name}": ${error instanceof Error ? error.message : String(error)}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
for (const schedule of args.schedules) {
|
|
53
27
|
try {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
return parsed.filter((entry) => typeof entry === "string");
|
|
28
|
+
await args.timers.upsertSchedule({
|
|
29
|
+
name: schedule.name,
|
|
30
|
+
cron: schedule.cron,
|
|
31
|
+
});
|
|
59
32
|
}
|
|
60
|
-
catch (
|
|
33
|
+
catch (error) {
|
|
34
|
+
args.logger(`[bdk] platform timer upsert failed for schedule "${schedule.name}": ${error instanceof Error ? error.message : String(error)}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Keep failed removals in the catalog so the next boot retries them.
|
|
38
|
+
await writeScheduleCatalog(args.catalogPath, [...new Set([...currentNames, ...failedDeletes])]);
|
|
39
|
+
}
|
|
40
|
+
async function readScheduleCatalog(catalogPath) {
|
|
41
|
+
try {
|
|
42
|
+
const parsed = JSON.parse(await readFile(catalogPath, "utf8"));
|
|
43
|
+
if (!Array.isArray(parsed)) {
|
|
61
44
|
return [];
|
|
62
45
|
}
|
|
63
|
-
|
|
46
|
+
return parsed.filter((entry) => typeof entry === "string");
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
64
51
|
}
|
|
65
|
-
function writeScheduleCatalog(catalogPath, names) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
yield writeFile(catalogPath, `${JSON.stringify(names)}\n`, "utf8");
|
|
69
|
-
});
|
|
52
|
+
async function writeScheduleCatalog(catalogPath, names) {
|
|
53
|
+
await mkdir(dirname(catalogPath), { recursive: true });
|
|
54
|
+
await writeFile(catalogPath, `${JSON.stringify(names)}\n`, "utf8");
|
|
70
55
|
}
|