@cursor/bdk 0.2.3 → 0.2.4
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/bin/agent-serve.js +9 -1
- package/dist/channels/slack/attachments.d.ts +2 -1
- package/dist/channels/slack/attachments.d.ts.map +1 -1
- package/dist/channels/slack/attachments.js +19 -9
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +26 -24
- package/dist/channels/slack/thread-context.d.ts +21 -11
- package/dist/channels/slack/thread-context.d.ts.map +1 -1
- package/dist/channels/slack/thread-context.js +75 -27
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.BOIHhrKi.js → app.4kQ8Db_q.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.CvuAJ0My.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.D49zVZqM.js → VPLocalSearchBox.DY1RwB8Q.js} +1 -1
- package/dist/docs/assets/chunks/{arc.hmjb-sc4.js → arc.CxE_fSPK.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CxEI1KqM.js → architectureDiagram-Q4EWVU46.CPX426ui.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.DHHvBWoV.js → baseUniq.CB52JrKG.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DnXW-3bu.js → blockDiagram-DXYQGD6D.J0cNaQCL.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.e-47O2jM.js → c4Diagram-AHTNJAMY.DJn3vEGT.js} +1 -1
- package/dist/docs/assets/chunks/channel.BoNycAoN.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.3ry4pYXB.js → chunk-4BX2VUAB.Dao618F6.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DGIZFRx6.js → chunk-4TB4RGXK.QW8Rhjai.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.DKBnqg9U.js → chunk-55IACEB6.DfRLLKF_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BIU8Ue5k.js → chunk-EDXVE4YY.CIV2ApKQ.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DP-TFhjI.js → chunk-FMBD7UC4.BEheSuxp.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Ux0OYj5v.js → chunk-OYMX7WX6.CUN88ENB.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BzHMwYox.js → chunk-QZHKN3VN.CgqCs8b_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.D4OGAsSP.js → chunk-YZCP3GAM.iCH0nnTJ.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.C4x07Gkj.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.C4x07Gkj.js +1 -0
- package/dist/docs/assets/chunks/clone.Db22cH_-.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.Jq_7BUNx.js → cose-bilkent-S5V4N54A.BLcUxhWE.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.Di-skR2x.js → dagre-KV5264BT.Ep7LofOm.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DeREHIdH.js → diagram-5BDNPKRD.Bzf4GSQ4.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.C7Kcqxro.js → diagram-G4DWMVQ6.DD6Jh-eM.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BK3eohyo.js → diagram-MMDJMWI5.oOIl8bWd.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.C6TyymXT.js → diagram-TYMM5635.DHs85Ade.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DYGG-gGx.js → erDiagram-SMLLAGMA.BIb5ghCk.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.C9nBcSV4.js → flowDiagram-DWJPFMVM.DV4paY9k.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.wAg_ymsp.js → ganttDiagram-T4ZO3ILL.AyEKA6_v.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.B87j9Oeg.js → gitGraphDiagram-UUTBAWPF.BltiCDFo.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CuFMj31w.js → graph.DzuEYGdC.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.P_mLGumP.js → infoDiagram-42DDH7IO.BV2l981J.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DyuL_MsT.js → ishikawaDiagram-UXIWVN3A.BA4Izf-m.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CtP09IoJ.js → journeyDiagram-VCZTEJTY.DjaFbFS3.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.BoeSYPZo.js → kanban-definition-6JOO6SKY.CfTFieDs.js} +1 -1
- package/dist/docs/assets/chunks/{layout.B0lMMtNo.js → layout.DzfWqTBV.js} +1 -1
- package/dist/docs/assets/chunks/{linear.HxRBiAFX.js → linear.BO6mpulV.js} +1 -1
- package/dist/docs/assets/chunks/{min.BGlFFHwS.js → min.BGgTadgT.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.JyLBD9M8.js → mindmap-definition-QFDTVHPH.DPuIXVWY.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DnSmNZF8.js → pieDiagram-DEJITSTG.BOnl3bBg.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CUCnbfCa.js → quadrantDiagram-34T5L4WZ.DNB6Ckdc.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.py0IVUn5.js → requirementDiagram-MS252O5E.D5-Qo7vb.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.Bkc-HWYp.js → sankeyDiagram-XADWPNL6.8t65cesf.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Dqn8Mlv2.js → sequenceDiagram-FGHM5R23.CaG07BdS.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.JikkoQUU.js → stateDiagram-FHFEXIEX.TKOweTB6.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CuqmyQc4.js +1 -0
- package/dist/docs/assets/chunks/{theme.b6HQ6zG_.js → theme.Dx-JhpTB.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.BvpSXiBj.js → timeline-definition-GMOUNBTQ.fE53zQ2s.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CU7MVnZx.js → vennDiagram-DHZGUBPP.DJsZZaJg.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.BKwC4ctG.js → wardley-RL74JXVD.844kyrjl.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.BfaF6Uhe.js → wardleyDiagram-NUSXRM2D.CMZ-Ru_t.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.Bg5dcpj4.js → xychartDiagram-5P7HB3ND.XXrhBc7a.js} +1 -1
- package/dist/docs/assets/{deployment.md.BJ8i7Q6p.js → deployment.md.UhnJIMr-.js} +2 -2
- package/dist/docs/assets/{deployment.md.BJ8i7Q6p.lean.js → deployment.md.UhnJIMr-.lean.js} +1 -1
- package/dist/docs/assets/{guides_jev.md.BNDm14Gy.js → guides_jev.md.CRcgmjDb.js} +2 -2
- package/dist/docs/assets/{guides_jev.md.BNDm14Gy.lean.js → guides_jev.md.CRcgmjDb.lean.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.DzGI777n.js → reference_agent-config.md.Cj5uBKp4.js} +1 -1
- package/dist/docs/assets/{reference_extensions.md.CPPrkWlJ.js → reference_extensions.md.pa2tN-e4.js} +4 -3
- package/dist/docs/assets/{reference_extensions.md.CPPrkWlJ.lean.js → reference_extensions.md.pa2tN-e4.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +35 -35
- package/dist/docs/deployment.html +37 -37
- package/dist/docs/deployment.md +4 -1
- package/dist/docs/evals.html +35 -35
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +35 -35
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/github.html +35 -35
- package/dist/docs/guides/gitlab.html +35 -35
- 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 +37 -37
- package/dist/docs/guides/jev.md +7 -0
- package/dist/docs/guides/mcp-oauth.html +35 -35
- 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 +25 -2
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +37 -37
- package/dist/docs/reference/agent-config.md +1 -1
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +35 -35
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +39 -38
- package/dist/docs/reference/extensions.md +13 -0
- 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 +35 -35
- 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/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 +35 -35
- package/dist/extensions/jev/extension.d.ts +3 -0
- package/dist/extensions/jev/extension.d.ts.map +1 -1
- package/dist/extensions/jev/extension.js +10 -1
- package/dist/extensions/jev/lib/evaluate.d.ts +4 -0
- package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -1
- package/dist/extensions/jev/lib/evaluate.js +6 -2
- package/dist/extensions.d.ts +4 -2
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +5 -2
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +19 -5
- package/dist/internal/discovery/agent-config.d.ts +6 -5
- package/dist/internal/discovery/agent-config.d.ts.map +1 -1
- package/dist/internal/discovery/agent-config.js +29 -28
- package/dist/internal/discovery/agent.js +1 -1
- package/dist/internal/discovery/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +12 -0
- package/dist/internal/hosting.d.ts +8 -0
- package/dist/internal/hosting.d.ts.map +1 -1
- package/dist/internal/hosting.js +24 -0
- package/dist/types.d.ts +18 -2
- package/dist/types.d.ts.map +1 -1
- package/docs/deployment.md +4 -1
- package/docs/guides/jev.md +7 -0
- package/docs/reference/agent-config.md +1 -1
- package/docs/reference/extensions.md +13 -0
- package/package.json +1 -9
- package/dist/docs/assets/chunks/@localSearchIndexroot.D5L-b34G.js +0 -1
- package/dist/docs/assets/chunks/channel.BbOGaJQP.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Db58HCb1.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Db58HCb1.js +0 -1
- package/dist/docs/assets/chunks/clone.Co4MBflG.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CMsKhrW0.js +0 -1
- package/src/artifacts.ts +0 -68
- package/src/bin/agent-serve.ts +0 -1854
- package/src/channels/bitbucket/api.ts +0 -891
- package/src/channels/bitbucket/binding.ts +0 -417
- package/src/channels/bitbucket/bitbucket-channel.ts +0 -162
- package/src/channels/bitbucket/bitbucket-webhook.ts +0 -519
- package/src/channels/bitbucket/checks.ts +0 -146
- package/src/channels/bitbucket/cursor-account.ts +0 -106
- package/src/channels/bitbucket/defaults.ts +0 -100
- package/src/channels/bitbucket/events.ts +0 -74
- package/src/channels/bitbucket/index.ts +0 -51
- package/src/channels/bitbucket/replay.ts +0 -421
- package/src/channels/bitbucket/state.ts +0 -59
- package/src/channels/bitbucket/types.ts +0 -261
- package/src/channels/change-monitors/change-monitors-channel.ts +0 -63
- package/src/channels/change-monitors/index.ts +0 -8
- package/src/channels/change-monitors/types.ts +0 -42
- package/src/channels/checks.ts +0 -185
- package/src/channels/deployments/deployments-channel.ts +0 -224
- package/src/channels/deployments/index.ts +0 -25
- package/src/channels/deployments/types.ts +0 -92
- package/src/channels/github/api.ts +0 -526
- package/src/channels/github/auth.ts +0 -293
- package/src/channels/github/binding.ts +0 -233
- package/src/channels/github/checks.ts +0 -145
- package/src/channels/github/cursor-account.ts +0 -303
- package/src/channels/github/defaults.ts +0 -168
- package/src/channels/github/events.ts +0 -67
- package/src/channels/github/forward.ts +0 -359
- package/src/channels/github/github-channel.ts +0 -2334
- package/src/channels/github/index.ts +0 -54
- package/src/channels/github/progress.ts +0 -365
- package/src/channels/github/replay.ts +0 -372
- package/src/channels/github/state.ts +0 -124
- package/src/channels/github/types.ts +0 -590
- package/src/channels/gitlab/api.ts +0 -329
- package/src/channels/gitlab/binding.ts +0 -231
- package/src/channels/gitlab/checks.ts +0 -228
- package/src/channels/gitlab/cursor-account.ts +0 -105
- package/src/channels/gitlab/defaults.ts +0 -80
- package/src/channels/gitlab/events.ts +0 -37
- package/src/channels/gitlab/gitlab-channel.ts +0 -160
- package/src/channels/gitlab/gitlab-webhook.ts +0 -509
- package/src/channels/gitlab/index.ts +0 -44
- package/src/channels/gitlab/replay.ts +0 -328
- package/src/channels/gitlab/state.ts +0 -55
- package/src/channels/gitlab/types.ts +0 -247
- package/src/channels/issues/index.ts +0 -9
- package/src/channels/issues/issues-channel.ts +0 -45
- package/src/channels/issues/types.ts +0 -38
- package/src/channels/origin/api.ts +0 -507
- package/src/channels/origin/binding.ts +0 -114
- package/src/channels/origin/checks.ts +0 -250
- package/src/channels/origin/cursor-account.ts +0 -58
- package/src/channels/origin/defaults.ts +0 -140
- package/src/channels/origin/events.ts +0 -35
- package/src/channels/origin/index.ts +0 -35
- package/src/channels/origin/origin-channel.ts +0 -815
- package/src/channels/origin/origin-webhook.ts +0 -296
- package/src/channels/origin/reactions.ts +0 -72
- package/src/channels/origin/state.ts +0 -54
- package/src/channels/origin/types.ts +0 -295
- package/src/channels/slack/agentic-delivery.ts +0 -634
- package/src/channels/slack/agentic-posted.ts +0 -135
- package/src/channels/slack/agentic-signals.ts +0 -231
- package/src/channels/slack/api.ts +0 -761
- package/src/channels/slack/approvals.ts +0 -279
- package/src/channels/slack/assistant.ts +0 -76
- package/src/channels/slack/attachments.ts +0 -596
- package/src/channels/slack/auth.ts +0 -127
- package/src/channels/slack/blocks.ts +0 -131
- package/src/channels/slack/bot-mentions.ts +0 -318
- package/src/channels/slack/channel-watch.ts +0 -314
- package/src/channels/slack/cli-project.ts +0 -249
- package/src/channels/slack/code-fences.ts +0 -171
- package/src/channels/slack/constants.ts +0 -38
- package/src/channels/slack/credentials.ts +0 -88
- package/src/channels/slack/defaults.ts +0 -714
- package/src/channels/slack/dispatch.ts +0 -1060
- package/src/channels/slack/doctor.ts +0 -338
- package/src/channels/slack/eval-directive.ts +0 -306
- package/src/channels/slack/event-id-dedupe.ts +0 -30
- package/src/channels/slack/external-policy.ts +0 -75
- package/src/channels/slack/footer.ts +0 -106
- package/src/channels/slack/inbound.ts +0 -416
- package/src/channels/slack/index.ts +0 -53
- package/src/channels/slack/init.ts +0 -169
- package/src/channels/slack/interactive.ts +0 -406
- package/src/channels/slack/links.ts +0 -23
- package/src/channels/slack/live-delivery.ts +0 -489
- package/src/channels/slack/log.ts +0 -70
- package/src/channels/slack/manifest.ts +0 -240
- package/src/channels/slack/message-body.ts +0 -82
- package/src/channels/slack/nudge-carrier.ts +0 -224
- package/src/channels/slack/nudge-store.ts +0 -334
- package/src/channels/slack/paint-start.ts +0 -93
- package/src/channels/slack/placeholder.ts +0 -358
- package/src/channels/slack/pr-ref.ts +0 -74
- package/src/channels/slack/progress-delivery.ts +0 -138
- package/src/channels/slack/reasoning-card.ts +0 -125
- package/src/channels/slack/reasoning-chip.ts +0 -41
- package/src/channels/slack/recording-sink.ts +0 -167
- package/src/channels/slack/redact.ts +0 -6
- package/src/channels/slack/reply-options.ts +0 -279
- package/src/channels/slack/setup.ts +0 -125
- package/src/channels/slack/slack-channel.ts +0 -744
- package/src/channels/slack/socket-mode.ts +0 -140
- package/src/channels/slack/stop.ts +0 -25
- package/src/channels/slack/stream.ts +0 -66
- package/src/channels/slack/thread-context.ts +0 -485
- package/src/channels/slack/tool-approval-events.ts +0 -233
- package/src/channels/slack/tool-cards.ts +0 -198
- package/src/channels/slack/tool-chip.ts +0 -34
- package/src/channels/slack/types.ts +0 -787
- package/src/channels/slack/upload.ts +0 -137
- package/src/channels.ts +0 -543
- package/src/connections.ts +0 -153
- package/src/dashboard-session-url.ts +0 -30
- package/src/evals/assertions.ts +0 -688
- package/src/evals/expect.ts +0 -250
- package/src/evals/judge.ts +0 -329
- package/src/evals/loaders.ts +0 -111
- package/src/evals/matchers.ts +0 -223
- package/src/evals/reporters.ts +0 -257
- package/src/evals/results.ts +0 -130
- package/src/evals/run-facts.ts +0 -306
- package/src/evals.ts +0 -709
- package/src/extensions/cursor-cloud-agents/extension.ts +0 -131
- package/src/extensions/cursor-cloud-agents/lib/backend.ts +0 -386
- package/src/extensions/cursor-cloud-agents/lib/channels.ts +0 -11
- package/src/extensions/cursor-cloud-agents/lib/fleet.ts +0 -98
- package/src/extensions/cursor-cloud-agents/lib/inputs.ts +0 -5
- package/src/extensions/cursor-cloud-agents/lib/repos.ts +0 -80
- package/src/extensions/cursor-cloud-agents/lib/transcript.ts +0 -19
- package/src/extensions/cursor-cloud-agents/skills/handoff.md +0 -37
- package/src/extensions/cursor-cloud-agents/tools/cancel.ts +0 -21
- package/src/extensions/cursor-cloud-agents/tools/dump.ts +0 -47
- package/src/extensions/cursor-cloud-agents/tools/get.ts +0 -18
- package/src/extensions/cursor-cloud-agents/tools/launch.ts +0 -62
- package/src/extensions/cursor-cloud-agents/tools/list.ts +0 -31
- package/src/extensions/cursor-cloud-agents/tools/reply.ts +0 -36
- package/src/extensions/cursor-grokbot-agents/extension.ts +0 -132
- package/src/extensions/cursor-grokbot-agents/lib/agents.ts +0 -42
- package/src/extensions/cursor-grokbot-agents/lib/backend.ts +0 -208
- package/src/extensions/cursor-grokbot-agents/lib/contacts.ts +0 -74
- package/src/extensions/cursor-grokbot-agents/lib/conversation.ts +0 -260
- package/src/extensions/cursor-grokbot-agents/lib/inputs.ts +0 -21
- package/src/extensions/cursor-grokbot-agents/lib/lock.ts +0 -26
- package/src/extensions/cursor-grokbot-agents/skills/consult.md +0 -40
- package/src/extensions/cursor-grokbot-agents/tools/ask.ts +0 -32
- package/src/extensions/cursor-grokbot-agents/tools/check.ts +0 -25
- package/src/extensions/cursor-grokbot-agents/tools/interrupt.ts +0 -17
- package/src/extensions/cursor-grokbot-agents/tools/list.ts +0 -26
- package/src/extensions/improve/extension.ts +0 -69
- package/src/extensions/improve/skills/yourself.ts +0 -50
- package/src/extensions/jev/extension.ts +0 -95
- package/src/extensions/jev/lib/evaluate.ts +0 -266
- package/src/extensions/jev/skills/gated-write.md +0 -25
- package/src/extensions/jev/skills/questions.md +0 -33
- package/src/extensions/jev/tools/evaluate.ts +0 -82
- package/src/extensions/slack-communication/evals/harness.ts +0 -705
- package/src/extensions/slack-communication/evals/slack-communication.eval.ts +0 -830
- package/src/extensions/slack-communication/evals/slack-placeholder.eval.ts +0 -172
- package/src/extensions/slack-communication/extension.ts +0 -44
- package/src/extensions/slack-communication/skills/slack-voice.ts +0 -56
- package/src/extensions/slack-communication/tools/delete-message.ts +0 -33
- package/src/extensions/slack-communication/tools/edit-message.ts +0 -42
- package/src/extensions/slack-communication/tools/post-card.ts +0 -28
- package/src/extensions/slack-communication/tools/post-file.ts +0 -82
- package/src/extensions/slack-communication/tools/post-update.ts +0 -40
- package/src/extensions/slack-communication/tools/react.ts +0 -30
- package/src/extensions/slack-communication/tools/set-status.ts +0 -21
- package/src/extensions.ts +0 -179
- package/src/files-backends/agent-store-presigned-url.ts +0 -11
- package/src/files-backends/cursor-hosted.ts +0 -1212
- package/src/files-backends/local-fs.ts +0 -163
- package/src/files.ts +0 -293
- package/src/filesystem.ts +0 -2005
- package/src/hooks.ts +0 -30
- package/src/index.ts +0 -259
- package/src/internal/advertise-tools.ts +0 -370
- package/src/internal/approval-gate.ts +0 -103
- package/src/internal/artifacts-store.ts +0 -836
- package/src/internal/as-of.ts +0 -257
- package/src/internal/auth.ts +0 -46
- package/src/internal/authored-alias-hooks.ts +0 -138
- package/src/internal/authored-loaders.ts +0 -188
- package/src/internal/bounded-int.ts +0 -24
- package/src/internal/bounded.ts +0 -25
- package/src/internal/brand.ts +0 -28
- package/src/internal/browser-origin-guard.ts +0 -67
- package/src/internal/builtin-tools/artifacts.ts +0 -62
- package/src/internal/builtin-tools/index.ts +0 -53
- package/src/internal/builtin-tools/reminders.ts +0 -145
- package/src/internal/channel-dispatch.ts +0 -129
- package/src/internal/channel-route-dispatch.ts +0 -58
- package/src/internal/channel-state.ts +0 -83
- package/src/internal/chat-client.ts +0 -594
- package/src/internal/cli-ax.ts +0 -2318
- package/src/internal/cli-bitbucket.ts +0 -438
- package/src/internal/cli-convert-automation.ts +0 -335
- package/src/internal/cli-cursor.ts +0 -282
- package/src/internal/cli-deploy.ts +0 -2519
- package/src/internal/cli-docs.ts +0 -192
- package/src/internal/cli-github.ts +0 -806
- package/src/internal/cli-gitlab.ts +0 -452
- package/src/internal/cli-images.ts +0 -672
- package/src/internal/cli-manifest.ts +0 -56
- package/src/internal/cli-mcp-oauth.ts +0 -396
- package/src/internal/cli-mcp.ts +0 -808
- package/src/internal/cli-skills.ts +0 -98
- package/src/internal/cli-slack-manual.ts +0 -418
- package/src/internal/cli-slack.ts +0 -874
- package/src/internal/cloud-merge.ts +0 -51
- package/src/internal/cloud-turn-cost.ts +0 -159
- package/src/internal/connection-env.ts +0 -106
- package/src/internal/continuation-channel.ts +0 -233
- package/src/internal/continuation-identity.ts +0 -935
- package/src/internal/conversation-mirror.ts +0 -423
- package/src/internal/convert-automation/convert-workflow.ts +0 -1377
- package/src/internal/convert-automation/slug.ts +0 -29
- package/src/internal/convert-automation/types.ts +0 -212
- package/src/internal/cron.ts +0 -76
- package/src/internal/cursor/account-mcp.ts +0 -692
- package/src/internal/cursor/backend-client.ts +0 -984
- package/src/internal/cursor/bound-secret-file.ts +0 -101
- package/src/internal/cursor/credentials.ts +0 -560
- package/src/internal/cursor/cursor-api-transport.ts +0 -65
- package/src/internal/cursor/github-credentials.ts +0 -228
- package/src/internal/cursor/hosted-bound-secrets.ts +0 -71
- package/src/internal/cursor/hosted-deployment-secrets.ts +0 -100
- package/src/internal/cursor/hosted-store-secrets.ts +0 -152
- package/src/internal/cursor/session-token.ts +0 -111
- package/src/internal/cursor/store-api-client.ts +0 -323
- package/src/internal/cursor-account-mcp-auth.ts +0 -303
- package/src/internal/cursor-agent-template.ts +0 -50
- package/src/internal/cursor-deployment-relay.ts +0 -315
- package/src/internal/cursor-event-relay.ts +0 -675
- package/src/internal/cursor-relay-core.ts +0 -563
- package/src/internal/deferred-channel-session.ts +0 -61
- package/src/internal/deploy-client.ts +0 -1574
- package/src/internal/deploy-manifest.ts +0 -361
- package/src/internal/deploy-source.ts +0 -144
- package/src/internal/describe-error.ts +0 -32
- package/src/internal/dev-mode.ts +0 -20
- package/src/internal/discovery/agent-config.ts +0 -288
- package/src/internal/discovery/agent.ts +0 -381
- package/src/internal/discovery/channels.ts +0 -100
- package/src/internal/discovery/connections.ts +0 -516
- package/src/internal/discovery/context.ts +0 -38
- package/src/internal/discovery/cursor-plugin.ts +0 -628
- package/src/internal/discovery/extension-overlay.ts +0 -247
- package/src/internal/discovery/extensions.ts +0 -490
- package/src/internal/discovery/fs.ts +0 -103
- package/src/internal/discovery/hooks.ts +0 -63
- package/src/internal/discovery/info.ts +0 -174
- package/src/internal/discovery/instructions.ts +0 -98
- package/src/internal/discovery/modules.ts +0 -107
- package/src/internal/discovery/names.ts +0 -45
- package/src/internal/discovery/project.ts +0 -319
- package/src/internal/discovery/reminders.ts +0 -65
- package/src/internal/discovery/runtime.ts +0 -158
- package/src/internal/discovery/schedules.ts +0 -120
- package/src/internal/discovery/seed-files.ts +0 -34
- package/src/internal/discovery/services.ts +0 -151
- package/src/internal/discovery/skills.ts +0 -174
- package/src/internal/discovery/subagent.ts +0 -138
- package/src/internal/discovery/tools.ts +0 -170
- package/src/internal/discovery.ts +0 -27
- package/src/internal/distribution.ts +0 -126
- package/src/internal/docs-site.ts +0 -248
- package/src/internal/duration.ts +0 -37
- package/src/internal/env-file.ts +0 -83
- package/src/internal/eval-judge-model.ts +0 -142
- package/src/internal/eval-run-store.ts +0 -585
- package/src/internal/eval-runner.ts +0 -823
- package/src/internal/evals-client.ts +0 -475
- package/src/internal/event-log.ts +0 -342
- package/src/internal/event-mapper.ts +0 -811
- package/src/internal/expected-delivery-failure.ts +0 -34
- package/src/internal/factory-resource-channel.ts +0 -103
- package/src/internal/filesystem/errors.ts +0 -207
- package/src/internal/filesystem/format.ts +0 -253
- package/src/internal/filesystem/merge.ts +0 -192
- package/src/internal/filesystem/nearest.ts +0 -112
- package/src/internal/filesystem/scratch.ts +0 -239
- package/src/internal/filesystem/sdk-schemas.ts +0 -204
- package/src/internal/filesystem/tools.ts +0 -804
- package/src/internal/filesystem/walk.ts +0 -366
- package/src/internal/fixtures/units-server.ts +0 -52
- package/src/internal/framework-file-storage.ts +0 -357
- package/src/internal/framework-storage-selection.ts +0 -156
- package/src/internal/frontmatter.ts +0 -108
- package/src/internal/github-fanout.ts +0 -144
- package/src/internal/guest-network.ts +0 -391
- package/src/internal/handleAgentServeTrigger.ts +0 -286
- package/src/internal/host-files.ts +0 -341
- package/src/internal/host-kv.ts +0 -81
- package/src/internal/host-otel.ts +0 -231
- package/src/internal/host-platforms.ts +0 -170
- package/src/internal/hosted-admission-adapter.ts +0 -47
- package/src/internal/hosted-admission-context.ts +0 -37
- package/src/internal/hosted-catch-protocol.ts +0 -112
- package/src/internal/hosted-catch.ts +0 -179
- package/src/internal/hosted-delivery-protocol.ts +0 -824
- package/src/internal/hosted-delivery.ts +0 -1410
- package/src/internal/hosted-execution-diag.ts +0 -291
- package/src/internal/hosted-execution-flush.ts +0 -136
- package/src/internal/hosted-execution-latency.ts +0 -301
- package/src/internal/hosted-managed-automation.ts +0 -116
- package/src/internal/hosting.ts +0 -114
- package/src/internal/http-channel-define.ts +0 -25
- package/src/internal/http-channel.ts +0 -669
- package/src/internal/http-control-plane-session.ts +0 -110
- package/src/internal/ids.ts +0 -39
- package/src/internal/incoming-headers-to-fetch.ts +0 -45
- package/src/internal/init-interview.ts +0 -360
- package/src/internal/init-project.ts +0 -711
- package/src/internal/init-scaffold.ts +0 -182
- package/src/internal/inline-stdio-define-stub.ts +0 -4
- package/src/internal/inline-stdio-mcp.ts +0 -230
- package/src/internal/install-cursor-skills.ts +0 -604
- package/src/internal/is-record.ts +0 -3
- package/src/internal/json-schema.ts +0 -95
- package/src/internal/legacy-command-guard.ts +0 -66
- package/src/internal/listen-port.ts +0 -85
- package/src/internal/local-control-plane.ts +0 -442
- package/src/internal/local-env.ts +0 -59
- package/src/internal/local-ingress.ts +0 -90
- package/src/internal/log-ring.ts +0 -59
- package/src/internal/logs-client.ts +0 -477
- package/src/internal/map-pool.ts +0 -39
- package/src/internal/mcp-endpoint.ts +0 -747
- package/src/internal/mcp-host.ts +0 -509
- package/src/internal/mcp-oauth-on-demand.ts +0 -337
- package/src/internal/mcp-oauth-persist.ts +0 -118
- package/src/internal/mcp-oauth.ts +0 -549
- package/src/internal/net.ts +0 -29
- package/src/internal/open-browser.ts +0 -41
- package/src/internal/otel/attrs.ts +0 -16
- package/src/internal/otel/collector.ts +0 -937
- package/src/internal/otel/config.ts +0 -287
- package/src/internal/otel/http.ts +0 -122
- package/src/internal/otel/mcp.ts +0 -56
- package/src/internal/otel/propagation.ts +0 -17
- package/src/internal/otel/runtime.ts +0 -441
- package/src/internal/package-inline-stdio.ts +0 -114
- package/src/internal/peer-connections.ts +0 -96
- package/src/internal/platform-schedule-sync.ts +0 -75
- package/src/internal/platform-timers.ts +0 -365
- package/src/internal/playground/static.ts +0 -278
- package/src/internal/playground/toolchain.ts +0 -270
- package/src/internal/playground-proxy.ts +0 -564
- package/src/internal/process-memory-telemetry.ts +0 -334
- package/src/internal/project-layout.ts +0 -31
- package/src/internal/prompt-context.ts +0 -116
- package/src/internal/reminder-control-plane-protocol.ts +0 -482
- package/src/internal/reminder-runner.ts +0 -1559
- package/src/internal/reminder-schedule.ts +0 -104
- package/src/internal/reminder-store.ts +0 -176
- package/src/internal/request-error-status.ts +0 -95
- package/src/internal/request-headers.ts +0 -21
- package/src/internal/resolve-prod-target.ts +0 -334
- package/src/internal/resolved-connections.ts +0 -190
- package/src/internal/router.ts +0 -143
- package/src/internal/run-client.ts +0 -354
- package/src/internal/runtime-dispatch-runner.ts +0 -50
- package/src/internal/sanitize-mcp-tool-name.ts +0 -31
- package/src/internal/schedule-runner.ts +0 -154
- package/src/internal/scm/pr-url.ts +0 -245
- package/src/internal/sdk-runner.ts +0 -959
- package/src/internal/serve-restart.ts +0 -113
- package/src/internal/server.ts +0 -3147
- package/src/internal/session-cost.ts +0 -208
- package/src/internal/session-engine.ts +0 -5622
- package/src/internal/session-links.ts +0 -84
- package/src/internal/session-run-log.ts +0 -535
- package/src/internal/session-store.ts +0 -307
- package/src/internal/session-urls.ts +0 -32
- package/src/internal/sessions-client.ts +0 -239
- package/src/internal/skill-catalog.ts +0 -66
- package/src/internal/skills-sync.ts +0 -55
- package/src/internal/slack-provision-client.ts +0 -544
- package/src/internal/slack-thread-key.ts +0 -11
- package/src/internal/sleep.ts +0 -3
- package/src/internal/start-log-store.ts +0 -164
- package/src/internal/steering.ts +0 -17
- package/src/internal/storage-coordinator.ts +0 -800
- package/src/internal/storage-roles.ts +0 -86
- package/src/internal/storage.ts +0 -1
- package/src/internal/store-api-protocol.ts +0 -205
- package/src/internal/store-mirror.ts +0 -73
- package/src/internal/stream-progress.ts +0 -294
- package/src/internal/terminal-style.ts +0 -133
- package/src/internal/testing/factory-resource-fixtures.ts +0 -84
- package/src/internal/testing/scm-continuation-fixtures.ts +0 -285
- package/src/internal/tool-catalog.ts +0 -104
- package/src/internal/tool-policy.ts +0 -222
- package/src/internal/tool-result.ts +0 -50
- package/src/internal/trajectory.ts +0 -418
- package/src/internal/turn-cost.ts +0 -136
- package/src/internal/turn-governor.ts +0 -145
- package/src/internal/turn-lease-store.ts +0 -144
- package/src/internal/turn-outbox.ts +0 -77
- package/src/internal/update-check.ts +0 -517
- package/src/internal/v2-hosting.ts +0 -52
- package/src/internal/workspace-sync.ts +0 -114
- package/src/internal/workspace.ts +0 -505
- package/src/kv/memory-kv.ts +0 -94
- package/src/kv.ts +0 -18
- package/src/memory.ts +0 -487
- package/src/otel-public.ts +0 -24
- package/src/otel.ts +0 -320
- package/src/prompt.ts +0 -80
- package/src/reminders.ts +0 -65
- package/src/schedules.ts +0 -31
- package/src/skills.ts +0 -27
- package/src/storage-backends/cursor-hosted-v2.ts +0 -204
- package/src/storage-backends/cursor-hosted.ts +0 -388
- package/src/storage-backends/file-kv.ts +0 -276
- package/src/storage-protocol.ts +0 -261
- package/src/storage.ts +0 -408
- package/src/tools.ts +0 -166
- package/src/types.ts +0 -3776
- /package/dist/docs/assets/{reference_agent-config.md.DzGI777n.lean.js → reference_agent-config.md.Cj5uBKp4.lean.js} +0 -0
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cursor cloud agents as an extension. Mount it and the agent can hand
|
|
3
|
-
* coding work to Cursor cloud agents and steer a fleet of them:
|
|
4
|
-
*
|
|
5
|
-
* ```ts
|
|
6
|
-
* // agent/extensions/cloud.ts
|
|
7
|
-
* import cursorCloudAgents from "@cursor/bdk/extensions/cursor-cloud-agents";
|
|
8
|
-
*
|
|
9
|
-
* export default cursorCloudAgents({
|
|
10
|
-
* cloud: { repos: [{ url: "https://github.com/acme/api" }], autoCreatePR: true },
|
|
11
|
-
* });
|
|
12
|
-
* ```
|
|
13
|
-
*
|
|
14
|
-
* Contributes `cloud__launch`, `cloud__get`, `cloud__dump`, `cloud__reply`,
|
|
15
|
-
* `cloud__cancel`, `cloud__list` and the `cloud__handoff` skill (the
|
|
16
|
-
* namespace is the mount filename), the action vocabulary Sand's CloudAgent
|
|
17
|
-
* tool uses, over the same backend calls: launches through the v1 Cloud
|
|
18
|
-
* Agents API, everything else through the BackgroundComposerService RPCs,
|
|
19
|
-
* all under the serve host's Cursor API key (`CURSOR_API_KEY`, key file, or
|
|
20
|
-
* `login`). Each launched agent stays bound to the principal that launched
|
|
21
|
-
* it, and launches go to the configured repositories. `channels` limits
|
|
22
|
-
* launch, reply, and cancel to sessions on those channel ids, so a channel
|
|
23
|
-
* whose input is untrusted (an alert webhook) cannot start or steer an agent.
|
|
24
|
-
* The tools run on the serve host, so they need the local runtime.
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
import { z } from "zod";
|
|
28
|
-
import { defineExtension } from "../../extensions.js";
|
|
29
|
-
import type { AgentCloudOptions, Extension, ModelSetting } from "../../types.js";
|
|
30
|
-
|
|
31
|
-
type CloudRepo = NonNullable<AgentCloudOptions["repos"]>[number];
|
|
32
|
-
|
|
33
|
-
export type CursorCloudAgentsCloudOptions = Omit<AgentCloudOptions, "repos"> & {
|
|
34
|
-
repos?: CloudRepo[] | (() => CloudRepo[]);
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
/** Mount options; every field is optional. */
|
|
38
|
-
export interface CursorCloudAgentsOptions {
|
|
39
|
-
/**
|
|
40
|
-
* Launch defaults: target `repos`, `env`, `autoCreatePR`, ... in the same
|
|
41
|
-
* vocabulary as `defineAgent({ cloud })`. Configured `repos` are also the
|
|
42
|
-
* allowlist for a launch's own `repo` / `prUrl`; model-chosen targets are
|
|
43
|
-
* refused when no allowlist is configured. With none configured,
|
|
44
|
-
* `needsApproval` defaults to true so prompt-only launches park first.
|
|
45
|
-
* `repos` may be a function, called on every launch, for an allowlist that
|
|
46
|
-
* is only known at request time (a multi-tenant deployment's per-install
|
|
47
|
-
* secrets). A launch against a function allowlist always targets exactly
|
|
48
|
-
* one of its repositories, never the whole list and never none.
|
|
49
|
-
*/
|
|
50
|
-
cloud?: CursorCloudAgentsCloudOptions;
|
|
51
|
-
/** Model for launched agents. The account default when omitted. */
|
|
52
|
-
model?: ModelSetting;
|
|
53
|
-
/**
|
|
54
|
-
* Park launches and follow-ups for a human approval. Defaults to `true`
|
|
55
|
-
* when no `cloud.repos` are configured (prompt-only launches still use
|
|
56
|
-
* the host key); `false` once repositories are configured. Pass an
|
|
57
|
-
* explicit boolean to override. Model-chosen `repo` / `prUrl` still
|
|
58
|
-
* require the allowlist regardless of this flag.
|
|
59
|
-
*/
|
|
60
|
-
needsApproval?: boolean;
|
|
61
|
-
channels?: string[];
|
|
62
|
-
/** Cursor API key. Defaults to the serve host's own key. */
|
|
63
|
-
apiKey?: string;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/** {@link CursorCloudAgentsOptions} with defaults applied. */
|
|
67
|
-
export interface CursorCloudAgentsConfig {
|
|
68
|
-
cloud: CursorCloudAgentsCloudOptions;
|
|
69
|
-
model?: ModelSetting;
|
|
70
|
-
needsApproval: boolean;
|
|
71
|
-
channels?: string[];
|
|
72
|
-
apiKey?: string;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const repo = z.object({
|
|
76
|
-
url: z.string().url(),
|
|
77
|
-
startingRef: z.string().optional(),
|
|
78
|
-
prUrl: z.string().url().optional(),
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
const repos = z.array(repo);
|
|
82
|
-
|
|
83
|
-
const cloud: z.ZodType<CursorCloudAgentsCloudOptions> = z.object({
|
|
84
|
-
env: z
|
|
85
|
-
.discriminatedUnion("type", [
|
|
86
|
-
z.object({ type: z.literal("cloud"), name: z.string().optional() }),
|
|
87
|
-
z.object({ type: z.literal("pool"), name: z.string().optional() }),
|
|
88
|
-
z.object({ type: z.literal("machine"), name: z.string().optional() }),
|
|
89
|
-
])
|
|
90
|
-
.optional(),
|
|
91
|
-
repos: z.union([repos, z.function().args().returns(repos)]).optional(),
|
|
92
|
-
workOnCurrentBranch: z.boolean().optional(),
|
|
93
|
-
autoCreatePR: z.boolean().optional(),
|
|
94
|
-
skipReviewerRequest: z.boolean().optional(),
|
|
95
|
-
envVars: z.record(z.string()).optional(),
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
const model: z.ZodType<ModelSetting> = z.union([
|
|
99
|
-
z.string().min(1),
|
|
100
|
-
z.object({
|
|
101
|
-
id: z.string().min(1),
|
|
102
|
-
params: z.array(z.object({ id: z.string(), value: z.string() })).optional(),
|
|
103
|
-
}),
|
|
104
|
-
]);
|
|
105
|
-
|
|
106
|
-
const config: z.ZodType<
|
|
107
|
-
CursorCloudAgentsConfig,
|
|
108
|
-
z.ZodTypeDef,
|
|
109
|
-
CursorCloudAgentsOptions | undefined
|
|
110
|
-
> = z
|
|
111
|
-
.object({
|
|
112
|
-
cloud: cloud.default({}),
|
|
113
|
-
model: model.optional(),
|
|
114
|
-
needsApproval: z.boolean().optional(),
|
|
115
|
-
channels: z.array(z.string().min(1)).optional(),
|
|
116
|
-
apiKey: z.string().optional(),
|
|
117
|
-
})
|
|
118
|
-
.default({})
|
|
119
|
-
.transform(options => ({
|
|
120
|
-
...options,
|
|
121
|
-
needsApproval: options.needsApproval ?? options.cloud.repos === undefined,
|
|
122
|
-
}));
|
|
123
|
-
|
|
124
|
-
const cursorCloudAgents: Extension<CursorCloudAgentsConfig, CursorCloudAgentsOptions | undefined> =
|
|
125
|
-
defineExtension({
|
|
126
|
-
root: import.meta.dirname,
|
|
127
|
-
description: "Launch, steer, and monitor Cursor cloud agents.",
|
|
128
|
-
config,
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
export default cursorCloudAgents;
|
|
@@ -1,386 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The Cursor backend as the tools use it: launches go through the public
|
|
3
|
-
* v1 Cloud Agents API (the only surface that takes per-launch `envVars`),
|
|
4
|
-
* everything about an existing agent goes through the same
|
|
5
|
-
* `aiserver.v1.BackgroundComposerService` RPCs Sand's CloudAgent tool
|
|
6
|
-
* calls, so follow-ups queue, runs pause, and the full conversation is
|
|
7
|
-
* readable. Both authenticate with the host's Cursor API key; the RPCs
|
|
8
|
-
* exchange it for a session token the way the dashboard client does.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { randomUUID } from "node:crypto";
|
|
12
|
-
import { z } from "zod";
|
|
13
|
-
import { CursorBackendClient } from "../../../internal/cursor/backend-client.js";
|
|
14
|
-
import {
|
|
15
|
-
cursorBackendUrl,
|
|
16
|
-
cursorExternalApiUrl,
|
|
17
|
-
cursorWebsiteUrl,
|
|
18
|
-
resolveApiKeySync,
|
|
19
|
-
SIGN_IN_HINT,
|
|
20
|
-
} from "../../../internal/cursor/credentials.js";
|
|
21
|
-
import { toModelSelection } from "../../../internal/sdk-runner.js";
|
|
22
|
-
import type { AgentCloudOptions, ModelSetting } from "../../../types.js";
|
|
23
|
-
import extension from "../extension.js";
|
|
24
|
-
|
|
25
|
-
const SERVICE = "BackgroundComposerService";
|
|
26
|
-
/** Launches and follow-ups from this extension carry the SDK source, like the v1 API. */
|
|
27
|
-
const SOURCE = "BACKGROUND_COMPOSER_SOURCE_SDK";
|
|
28
|
-
const RPC_TIMEOUT_MS = 60_000;
|
|
29
|
-
// The create call returns once the initial run exists, which can wait on a VM.
|
|
30
|
-
const LAUNCH_TIMEOUT_MS = 300_000;
|
|
31
|
-
|
|
32
|
-
export class CloudAgentsApiError extends Error {
|
|
33
|
-
constructor(
|
|
34
|
-
message: string,
|
|
35
|
-
readonly status?: number,
|
|
36
|
-
) {
|
|
37
|
-
super(message);
|
|
38
|
-
this.name = "CloudAgentsApiError";
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export type CloudAgentStatus =
|
|
43
|
-
| "creating"
|
|
44
|
-
| "running"
|
|
45
|
-
| "finished"
|
|
46
|
-
| "error"
|
|
47
|
-
| "expired"
|
|
48
|
-
| "unknown";
|
|
49
|
-
|
|
50
|
-
// Type aliases, not interfaces: these flow into tool results.
|
|
51
|
-
export type CloudAgentInfo = {
|
|
52
|
-
agentId: string;
|
|
53
|
-
name: string;
|
|
54
|
-
status: CloudAgentStatus;
|
|
55
|
-
archived: boolean;
|
|
56
|
-
url: string;
|
|
57
|
-
branch?: string;
|
|
58
|
-
prUrl?: string;
|
|
59
|
-
summary?: string;
|
|
60
|
-
error?: string;
|
|
61
|
-
changes?: { filesChanged: number; linesAdded: number; linesRemoved: number };
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
export type CloudAgentToolCall = {
|
|
65
|
-
name: string;
|
|
66
|
-
args: unknown;
|
|
67
|
-
content?: string;
|
|
68
|
-
error?: string;
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
export type CloudAgentMessage = {
|
|
72
|
-
role: "user" | "assistant";
|
|
73
|
-
text?: string;
|
|
74
|
-
thinking?: string;
|
|
75
|
-
toolCalls?: CloudAgentToolCall[];
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
export type CloudAgentLaunch = {
|
|
79
|
-
agentId: string;
|
|
80
|
-
runId: string;
|
|
81
|
-
status: string;
|
|
82
|
-
url: string;
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
export type LaunchRequest = {
|
|
86
|
-
prompt: string;
|
|
87
|
-
name?: string;
|
|
88
|
-
cloud: AgentCloudOptions;
|
|
89
|
-
model?: ModelSetting;
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
// ---------------------------------------------------------------------------
|
|
93
|
-
// Proto-JSON response schemas (camelCase; default-valued fields are omitted)
|
|
94
|
-
// ---------------------------------------------------------------------------
|
|
95
|
-
|
|
96
|
-
const composerSchema = z.object({
|
|
97
|
-
bcId: z.string(),
|
|
98
|
-
name: z.string().optional(),
|
|
99
|
-
status: z.string().optional(),
|
|
100
|
-
isArchived: z.boolean().optional(),
|
|
101
|
-
branchName: z.string().optional(),
|
|
102
|
-
prUrl: z.string().optional(),
|
|
103
|
-
linesAdded: z.number().optional(),
|
|
104
|
-
linesRemoved: z.number().optional(),
|
|
105
|
-
filesChanged: z.number().optional(),
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
const errorDetailsSchema = z.object({
|
|
109
|
-
details: z.object({ title: z.string().optional(), detail: z.string().optional() }).optional(),
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
const infoResponseSchema = z.object({
|
|
113
|
-
composer: z.object({
|
|
114
|
-
composer: composerSchema,
|
|
115
|
-
summary: z.string().optional(),
|
|
116
|
-
startError: errorDetailsSchema.optional(),
|
|
117
|
-
permanentError: errorDetailsSchema.optional(),
|
|
118
|
-
}),
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
const toolResultSchema = z.object({
|
|
122
|
-
toolName: z.string().optional(),
|
|
123
|
-
args: z.string().optional(),
|
|
124
|
-
rawArgs: z.string().optional(),
|
|
125
|
-
content: z.string().optional(),
|
|
126
|
-
error: z.object({ clientVisibleErrorMessage: z.string().optional() }).optional(),
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
const conversationResponseSchema = z.object({
|
|
130
|
-
conversation: z
|
|
131
|
-
.array(
|
|
132
|
-
z.object({
|
|
133
|
-
type: z.string().optional(),
|
|
134
|
-
text: z.string().optional(),
|
|
135
|
-
thinking: z.object({ text: z.string().optional() }).optional(),
|
|
136
|
-
toolResults: z.array(toolResultSchema).optional(),
|
|
137
|
-
}),
|
|
138
|
-
)
|
|
139
|
-
.optional(),
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
const followupResponseSchema = z.object({ runId: z.string().optional() });
|
|
143
|
-
|
|
144
|
-
const launchResponseSchema = z.object({
|
|
145
|
-
agent: z.object({ id: z.string(), url: z.string().optional() }),
|
|
146
|
-
run: z.object({ id: z.string(), status: z.string() }),
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
// ---------------------------------------------------------------------------
|
|
150
|
-
|
|
151
|
-
export class CloudAgentsBackend {
|
|
152
|
-
private readonly rpcClient: CursorBackendClient;
|
|
153
|
-
|
|
154
|
-
constructor(
|
|
155
|
-
private readonly apiKey: () => string,
|
|
156
|
-
private readonly fetchImpl: typeof fetch = fetch,
|
|
157
|
-
) {
|
|
158
|
-
// The key is read per call: the host can sign in after the mount.
|
|
159
|
-
this.rpcClient = new CursorBackendClient({
|
|
160
|
-
backendUrl: cursorBackendUrl(),
|
|
161
|
-
apiKey: "",
|
|
162
|
-
getApiKey: apiKey,
|
|
163
|
-
fetchImpl,
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/** `POST /v1/agents`: create the agent and start its first run in one call. */
|
|
168
|
-
async launch(request: LaunchRequest): Promise<CloudAgentLaunch> {
|
|
169
|
-
const { cloud } = request;
|
|
170
|
-
const body = {
|
|
171
|
-
prompt: { text: request.prompt },
|
|
172
|
-
name: request.name,
|
|
173
|
-
model: request.model === undefined ? undefined : toModelSelection(request.model),
|
|
174
|
-
env: cloud.env,
|
|
175
|
-
envVars: cloud.envVars,
|
|
176
|
-
repos: cloud.repos,
|
|
177
|
-
workOnCurrentBranch: cloud.workOnCurrentBranch,
|
|
178
|
-
autoCreatePR: cloud.autoCreatePR,
|
|
179
|
-
skipReviewerRequest: cloud.skipReviewerRequest,
|
|
180
|
-
};
|
|
181
|
-
let response: Response;
|
|
182
|
-
try {
|
|
183
|
-
response = await this.fetchImpl(`${cursorExternalApiUrl()}/v1/agents`, {
|
|
184
|
-
method: "POST",
|
|
185
|
-
headers: {
|
|
186
|
-
"content-type": "application/json",
|
|
187
|
-
authorization: `Bearer ${this.apiKey()}`,
|
|
188
|
-
"x-ghost-mode": "true",
|
|
189
|
-
"x-cursor-client-type": "agent-serve",
|
|
190
|
-
"x-request-id": randomUUID(),
|
|
191
|
-
},
|
|
192
|
-
body: JSON.stringify(body),
|
|
193
|
-
signal: AbortSignal.timeout(LAUNCH_TIMEOUT_MS),
|
|
194
|
-
});
|
|
195
|
-
} catch (error) {
|
|
196
|
-
throw new CloudAgentsApiError(
|
|
197
|
-
`Cloud agent launch failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
198
|
-
);
|
|
199
|
-
}
|
|
200
|
-
const text = await response.text();
|
|
201
|
-
if (!response.ok) {
|
|
202
|
-
throw new CloudAgentsApiError(
|
|
203
|
-
`Cloud agent launch failed (${response.status}): ${apiErrorMessage(text)}`,
|
|
204
|
-
response.status,
|
|
205
|
-
);
|
|
206
|
-
}
|
|
207
|
-
const parsed = launchResponseSchema.parse(JSON.parse(text));
|
|
208
|
-
return {
|
|
209
|
-
agentId: parsed.agent.id,
|
|
210
|
-
runId: parsed.run.id,
|
|
211
|
-
status: parsed.run.status.toLowerCase(),
|
|
212
|
-
url: parsed.agent.url ?? agentUrl(parsed.agent.id),
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
async info(agentId: string): Promise<CloudAgentInfo> {
|
|
217
|
-
const { composer } = infoResponseSchema.parse(
|
|
218
|
-
await this.rpcClient.serviceRpc(
|
|
219
|
-
SERVICE,
|
|
220
|
-
"GetBackgroundComposerInfo",
|
|
221
|
-
{ bcId: agentId },
|
|
222
|
-
RPC_TIMEOUT_MS,
|
|
223
|
-
),
|
|
224
|
-
);
|
|
225
|
-
const { composer: summary } = composer;
|
|
226
|
-
const failure = composer.permanentError ?? composer.startError;
|
|
227
|
-
return {
|
|
228
|
-
agentId: summary.bcId,
|
|
229
|
-
name: summary.name ?? "",
|
|
230
|
-
status: statusOf(summary.status),
|
|
231
|
-
archived: summary.isArchived === true,
|
|
232
|
-
url: agentUrl(summary.bcId),
|
|
233
|
-
branch: emptyToUndefined(summary.branchName),
|
|
234
|
-
prUrl: emptyToUndefined(summary.prUrl),
|
|
235
|
-
summary: emptyToUndefined(composer.summary),
|
|
236
|
-
error: failureMessage(failure),
|
|
237
|
-
changes:
|
|
238
|
-
summary.filesChanged === undefined
|
|
239
|
-
? undefined
|
|
240
|
-
: {
|
|
241
|
-
filesChanged: summary.filesChanged,
|
|
242
|
-
linesAdded: summary.linesAdded ?? 0,
|
|
243
|
-
linesRemoved: summary.linesRemoved ?? 0,
|
|
244
|
-
},
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
async conversation(agentId: string): Promise<CloudAgentMessage[]> {
|
|
249
|
-
const { conversation } = conversationResponseSchema.parse(
|
|
250
|
-
await this.rpcClient.serviceRpc(
|
|
251
|
-
SERVICE,
|
|
252
|
-
"GetBackgroundComposerConversation",
|
|
253
|
-
{ bcId: agentId },
|
|
254
|
-
RPC_TIMEOUT_MS,
|
|
255
|
-
),
|
|
256
|
-
);
|
|
257
|
-
return (conversation ?? []).map(message => {
|
|
258
|
-
const toolCalls = (message.toolResults ?? []).map(result => ({
|
|
259
|
-
name: result.toolName ?? "",
|
|
260
|
-
args: parseArgs(result.args ?? result.rawArgs),
|
|
261
|
-
content: result.content,
|
|
262
|
-
error: result.error?.clientVisibleErrorMessage,
|
|
263
|
-
}));
|
|
264
|
-
return {
|
|
265
|
-
role: message.type === "MESSAGE_TYPE_HUMAN" ? "user" : "assistant",
|
|
266
|
-
text: emptyToUndefined(message.text),
|
|
267
|
-
thinking: emptyToUndefined(message.thinking?.text),
|
|
268
|
-
toolCalls: toolCalls.length === 0 ? undefined : toolCalls,
|
|
269
|
-
};
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
/**
|
|
274
|
-
* Queue a follow-up behind the current run, or with `interrupt` cancel the
|
|
275
|
-
* in-flight step and run it now; the backend's `synchronous` switch.
|
|
276
|
-
*/
|
|
277
|
-
async followUp(
|
|
278
|
-
agentId: string,
|
|
279
|
-
prompt: string,
|
|
280
|
-
interrupt: boolean,
|
|
281
|
-
): Promise<{ runId: string | undefined }> {
|
|
282
|
-
const { runId } = followupResponseSchema.parse(
|
|
283
|
-
await this.rpcClient.serviceRpc(
|
|
284
|
-
SERVICE,
|
|
285
|
-
"AddAsyncFollowupBackgroundComposer",
|
|
286
|
-
{
|
|
287
|
-
bcId: agentId,
|
|
288
|
-
synchronous: interrupt,
|
|
289
|
-
followupSource: SOURCE,
|
|
290
|
-
followupMessage: {
|
|
291
|
-
text: prompt,
|
|
292
|
-
type: "MESSAGE_TYPE_HUMAN",
|
|
293
|
-
bubbleId: randomUUID(),
|
|
294
|
-
},
|
|
295
|
-
},
|
|
296
|
-
RPC_TIMEOUT_MS,
|
|
297
|
-
),
|
|
298
|
-
);
|
|
299
|
-
return { runId };
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
async pause(agentId: string): Promise<void> {
|
|
303
|
-
await this.rpcClient.serviceRpc(
|
|
304
|
-
SERVICE,
|
|
305
|
-
"PauseBackgroundComposer",
|
|
306
|
-
{ bcId: agentId, source: SOURCE },
|
|
307
|
-
RPC_TIMEOUT_MS,
|
|
308
|
-
);
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
let backend: CloudAgentsBackend | undefined;
|
|
313
|
-
|
|
314
|
-
/** The process-wide backend for this mount, built on first use. */
|
|
315
|
-
export function cloudAgentsBackend(): CloudAgentsBackend {
|
|
316
|
-
backend ??= new CloudAgentsBackend(apiKey);
|
|
317
|
-
return backend;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
export function apiKey(): string {
|
|
321
|
-
const key = resolveApiKeySync({ apiKey: extension.config.apiKey });
|
|
322
|
-
if (key === undefined) {
|
|
323
|
-
throw new Error(`Cloud agents need a Cursor API key. ${SIGN_IN_HINT}`);
|
|
324
|
-
}
|
|
325
|
-
return key.apiKey;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
export function agentUrl(agentId: string): string {
|
|
329
|
-
return `${cursorWebsiteUrl()}/agents/${agentId}`;
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
function statusOf(status: string | undefined): CloudAgentStatus {
|
|
333
|
-
switch (status) {
|
|
334
|
-
case "BACKGROUND_COMPOSER_STATUS_CREATING":
|
|
335
|
-
return "creating";
|
|
336
|
-
case "BACKGROUND_COMPOSER_STATUS_RUNNING":
|
|
337
|
-
return "running";
|
|
338
|
-
case "BACKGROUND_COMPOSER_STATUS_FINISHED":
|
|
339
|
-
return "finished";
|
|
340
|
-
case "BACKGROUND_COMPOSER_STATUS_ERROR":
|
|
341
|
-
return "error";
|
|
342
|
-
case "BACKGROUND_COMPOSER_STATUS_EXPIRED":
|
|
343
|
-
return "expired";
|
|
344
|
-
default:
|
|
345
|
-
return "unknown";
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
function failureMessage(
|
|
350
|
-
failure: z.infer<typeof errorDetailsSchema> | undefined,
|
|
351
|
-
): string | undefined {
|
|
352
|
-
const parts = [failure?.details?.title, failure?.details?.detail].filter(
|
|
353
|
-
(part): part is string => part !== undefined && part !== "",
|
|
354
|
-
);
|
|
355
|
-
return parts.length === 0 ? undefined : parts.join(": ");
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
function parseArgs(args: string | undefined): unknown {
|
|
359
|
-
if (args === undefined || args === "") {
|
|
360
|
-
return undefined;
|
|
361
|
-
}
|
|
362
|
-
try {
|
|
363
|
-
return JSON.parse(args) as unknown;
|
|
364
|
-
} catch {
|
|
365
|
-
return args;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
function emptyToUndefined(value: string | undefined): string | undefined {
|
|
370
|
-
return value === undefined || value === "" ? undefined : value;
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
function apiErrorMessage(text: string): string {
|
|
374
|
-
try {
|
|
375
|
-
const parsed = JSON.parse(text) as {
|
|
376
|
-
error?: { code?: string; message?: string };
|
|
377
|
-
code?: string;
|
|
378
|
-
message?: string;
|
|
379
|
-
};
|
|
380
|
-
const code = parsed.error?.code ?? parsed.code;
|
|
381
|
-
const message = parsed.error?.message ?? parsed.message;
|
|
382
|
-
return [code, message].filter(part => part !== undefined).join(": ") || text;
|
|
383
|
-
} catch {
|
|
384
|
-
return text;
|
|
385
|
-
}
|
|
386
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { ToolContext } from "../../../types.js";
|
|
2
|
-
import extension from "../extension.js";
|
|
3
|
-
|
|
4
|
-
export function assertWriteChannel(ctx: ToolContext): void {
|
|
5
|
-
const { channels } = extension.config;
|
|
6
|
-
if (channels !== undefined && !channels.includes(ctx.session.channelId)) {
|
|
7
|
-
throw new Error(
|
|
8
|
-
`Cloud agents cannot be launched or steered from the "${ctx.session.channelId}" channel.`,
|
|
9
|
-
);
|
|
10
|
-
}
|
|
11
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Who launched which cloud agent. The tools authenticate with the serve
|
|
3
|
-
* host's one Cursor API key, so the host itself must keep every session's
|
|
4
|
-
* cloud agents bound to the principal that launched them: status and
|
|
5
|
-
* follow-ups only reach agents recorded here for the same principal, and
|
|
6
|
-
* the fleet listing is that principal's records, by default narrowed to the
|
|
7
|
-
* session that launched them.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { z } from "zod";
|
|
11
|
-
import type { ToolContext } from "../../../types.js";
|
|
12
|
-
|
|
13
|
-
const PREFIX = "cloud-agents";
|
|
14
|
-
|
|
15
|
-
// Type alias, not an interface: fleet entries flow into tool results.
|
|
16
|
-
export type FleetEntry = {
|
|
17
|
-
agentId: string;
|
|
18
|
-
name?: string;
|
|
19
|
-
launchedAt: string;
|
|
20
|
-
/** The session whose turn launched the agent; absent on records older than this field. */
|
|
21
|
-
sessionId?: string;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export type FleetScope = "session" | "all";
|
|
25
|
-
|
|
26
|
-
const fleetSchema: z.ZodType<FleetEntry[]> = z.array(
|
|
27
|
-
z.object({
|
|
28
|
-
agentId: z.string(),
|
|
29
|
-
name: z.string().optional(),
|
|
30
|
-
launchedAt: z.string(),
|
|
31
|
-
sessionId: z.string().optional(),
|
|
32
|
-
}),
|
|
33
|
-
);
|
|
34
|
-
const ownerSchema = z.object({ principal: z.string() });
|
|
35
|
-
|
|
36
|
-
// `host.kv` has no compare-and-swap, and a model that launches two agents in
|
|
37
|
-
// one turn calls this tool in parallel. Chain the index read-modify-write per
|
|
38
|
-
// principal so neither launch overwrites the other's entry.
|
|
39
|
-
const indexWrites = new Map<string, Promise<void>>();
|
|
40
|
-
|
|
41
|
-
function withIndexLock(key: string, task: () => Promise<void>): Promise<void> {
|
|
42
|
-
const run = (indexWrites.get(key) ?? Promise.resolve()).then(task, task);
|
|
43
|
-
indexWrites.set(key, run);
|
|
44
|
-
return run.finally(() => {
|
|
45
|
-
if (indexWrites.get(key) === run) {
|
|
46
|
-
indexWrites.delete(key);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/** Unauthenticated sessions (local dev, direct calls) share one principal. */
|
|
52
|
-
export function principalOf(ctx: ToolContext): string {
|
|
53
|
-
const auth = ctx.session.auth;
|
|
54
|
-
return auth === null ? "anonymous" : `${auth.principalType}:${auth.principalId}`;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export async function recordLaunch(
|
|
58
|
-
ctx: ToolContext,
|
|
59
|
-
agentId: string,
|
|
60
|
-
name: string | undefined,
|
|
61
|
-
): Promise<void> {
|
|
62
|
-
const principal = principalOf(ctx);
|
|
63
|
-
const entry: FleetEntry = {
|
|
64
|
-
agentId,
|
|
65
|
-
name,
|
|
66
|
-
launchedAt: new Date().toISOString(),
|
|
67
|
-
sessionId: ctx.session.id,
|
|
68
|
-
};
|
|
69
|
-
await ctx.host.kv.put(`${PREFIX}/agents/${agentId}`, { principal });
|
|
70
|
-
await withIndexLock(fleetKey(principal), async () => {
|
|
71
|
-
const fleet = await listFleet(ctx);
|
|
72
|
-
await ctx.host.kv.put(fleetKey(principal), [entry, ...fleet]);
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/** Refuse agents launched by another principal, or not through the extension. */
|
|
77
|
-
export async function assertOwned(ctx: ToolContext, agentId: string): Promise<void> {
|
|
78
|
-
const owner = ownerSchema.safeParse(await ctx.host.kv.get(`${PREFIX}/agents/${agentId}`));
|
|
79
|
-
if (!owner.success || owner.data.principal !== principalOf(ctx)) {
|
|
80
|
-
throw new Error(
|
|
81
|
-
`Agent ${agentId} was not launched through this extension by this principal; only your own launches can be read or steered.`,
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/** The caller's launches, newest first: this session's, or every session's. */
|
|
87
|
-
export async function listFleet(
|
|
88
|
-
ctx: ToolContext,
|
|
89
|
-
scope: FleetScope = "all",
|
|
90
|
-
): Promise<FleetEntry[]> {
|
|
91
|
-
const fleet = fleetSchema.safeParse(await ctx.host.kv.get(fleetKey(principalOf(ctx))));
|
|
92
|
-
const entries = fleet.success ? fleet.data : [];
|
|
93
|
-
return scope === "all" ? entries : entries.filter(entry => entry.sessionId === ctx.session.id);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function fleetKey(principal: string): string {
|
|
97
|
-
return `${PREFIX}/principals/${encodeURIComponent(principal)}`;
|
|
98
|
-
}
|