@cursor/bdk 0.2.10 → 0.2.12
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 +28 -26
- package/dist/channels/bitbucket/api.js +8 -8
- package/dist/channels/bitbucket/binding.js +4 -4
- package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +1 -1
- package/dist/channels/bitbucket/checks.js +1 -1
- package/dist/channels/bitbucket/cursor-account.js +1 -1
- package/dist/channels/bitbucket/events.js +1 -1
- package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
- package/dist/channels/checks.js +2 -2
- package/dist/channels/deployments/deployments-channel.js +1 -1
- package/dist/channels/github/cursor-account.js +3 -3
- package/dist/channels/github/defaults.js +3 -3
- package/dist/channels/github/events.js +1 -1
- package/dist/channels/github/forward.js +8 -8
- package/dist/channels/github/github-channel.js +2 -2
- package/dist/channels/gitlab/binding.js +4 -4
- package/dist/channels/gitlab/checks.js +1 -1
- package/dist/channels/gitlab/cursor-account.js +1 -1
- package/dist/channels/gitlab/events.js +1 -1
- package/dist/channels/gitlab/gitlab-channel.js +1 -1
- package/dist/channels/gitlab/gitlab-webhook.js +1 -1
- package/dist/channels/gitlab/replay.js +2 -2
- package/dist/channels/origin/binding.js +3 -3
- package/dist/channels/origin/checks.js +1 -1
- package/dist/channels/origin/cursor-account.js +1 -1
- package/dist/channels/origin/events.js +1 -1
- package/dist/channels/origin/origin-channel.js +1 -1
- package/dist/channels/origin/origin-webhook.js +2 -2
- package/dist/channels/slack/agentic-delivery.js +3 -3
- package/dist/channels/slack/agentic-signals.js +1 -1
- package/dist/channels/slack/api.js +5 -5
- package/dist/channels/slack/approvals.js +1 -1
- package/dist/channels/slack/attachments.js +3 -3
- package/dist/channels/slack/blocks.js +3 -3
- package/dist/channels/slack/bot-mentions.js +4 -4
- package/dist/channels/slack/channel-watch.js +4 -4
- package/dist/channels/slack/cli-project.js +3 -3
- package/dist/channels/slack/dispatch.js +1 -1
- package/dist/channels/slack/doctor.js +1 -1
- package/dist/channels/slack/eval-directive.js +1 -1
- package/dist/channels/slack/footer.js +1 -1
- package/dist/channels/slack/interactive.js +2 -2
- package/dist/channels/slack/log.d.ts.map +1 -1
- package/dist/channels/slack/log.js +1 -1
- package/dist/channels/slack/manifest.js +1 -1
- package/dist/channels/slack/nudge-carrier.js +1 -1
- package/dist/channels/slack/nudge-store.js +2 -2
- package/dist/channels/slack/recording-sink.js +6 -6
- package/dist/channels/slack/reply-options.js +6 -6
- package/dist/channels/slack/self-identity.d.ts +7 -4
- package/dist/channels/slack/self-identity.d.ts.map +1 -1
- package/dist/channels/slack/self-identity.js +17 -8
- package/dist/channels/slack/sender-name.d.ts.map +1 -1
- package/dist/channels/slack/sender-name.js +2 -6
- package/dist/channels/slack/setup.d.ts.map +1 -1
- package/dist/channels/slack/setup.js +1 -1
- package/dist/channels/slack/slack-channel.js +2 -2
- package/dist/channels/slack/socket-mode.js +2 -2
- package/dist/channels/slack/thread-context.js +8 -8
- package/dist/channels/slack/tool-cards.js +1 -1
- package/dist/channels/slack/user-info.d.ts +2 -1
- package/dist/channels/slack/user-info.d.ts.map +1 -1
- package/dist/channels/slack/user-info.js +16 -1
- package/dist/channels.js +1 -1
- package/dist/docs/404.html +3 -3
- package/dist/docs/assets/{app.DXI7bwox.js → app.CKta5zX1.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.DtlCe4t6.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.BrbO5mEe.js → VPLocalSearchBox.4vRM3EDG.js} +2 -2
- package/dist/docs/assets/chunks/{arc.BOG1yms8.js → arc.CofbA8tA.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.C0hsMZnZ.js → architectureDiagram-Q4EWVU46.Mt2UV5M-.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.H044KjKs.js → baseUniq.C_W0Aqp4.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.BsRW6GoB.js → blockDiagram-DXYQGD6D.dAc4goE-.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.B9HV5PFR.js → c4Diagram-AHTNJAMY.dnbRC3Dm.js} +1 -1
- package/dist/docs/assets/chunks/channel.DpljPUVU.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CPoT_ajl.js → chunk-4BX2VUAB.B42ltSTd.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DZBwWuCL.js → chunk-4TB4RGXK.2GbAul_E.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.CZ3yTiyq.js → chunk-55IACEB6.pjzY-v-B.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.6DfvHSd8.js → chunk-EDXVE4YY.BB1GXLj2.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CpBj8HfK.js → chunk-FMBD7UC4.B2WxZkoA.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.BdKo8YqS.js → chunk-OYMX7WX6.BMvb2w73.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnXNyxJx.js → chunk-QZHKN3VN.Bmu_2lNr.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.Cg1OcF8G.js → chunk-YZCP3GAM.Cth65EaC.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DFNHq2OM.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DFNHq2OM.js +1 -0
- package/dist/docs/assets/chunks/clone.DssygCzX.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.1SP8al9c.js → cose-bilkent-S5V4N54A.CrfA7Iw_.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.DS1L6hJt.js → dagre-KV5264BT.PCD6KQDb.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.ChsausbG.js → diagram-5BDNPKRD.CGNlYlP1.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.3XsptNWj.js → diagram-G4DWMVQ6.C0cvryPD.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DPA9Dk_P.js → diagram-MMDJMWI5.DHlkZHNV.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.BVswXWrB.js → diagram-TYMM5635.DDGqH_4B.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.BSak5OSP.js → erDiagram-SMLLAGMA.4gOY_C3v.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.CQgN4TTz.js → flowDiagram-DWJPFMVM.8i7zsxuh.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.GrT0kA4a.js → ganttDiagram-T4ZO3ILL.BEKHYdM-.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CdS7Ucll.js → gitGraphDiagram-UUTBAWPF.ACzeLGiB.js} +1 -1
- package/dist/docs/assets/chunks/{graph.BVqKRmRo.js → graph.08C3hS6m.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.C3C9FRto.js → infoDiagram-42DDH7IO.D8R9obOH.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js → ishikawaDiagram-UXIWVN3A.CmgYpCWL.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CaHMfK4b.js → journeyDiagram-VCZTEJTY.DUzjGfoZ.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.CjhIUwcA.js → kanban-definition-6JOO6SKY.DbcW2iZ0.js} +1 -1
- package/dist/docs/assets/chunks/{layout.CGU3gfSf.js → layout.BaDEpJzu.js} +1 -1
- package/dist/docs/assets/chunks/{linear.DaihpW_n.js → linear.B_zRQgCU.js} +1 -1
- package/dist/docs/assets/chunks/{min.BS-j8kHQ.js → min.BYscCdSu.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.BVJ1Bbnk.js → mindmap-definition-QFDTVHPH.Ggu0jg86.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.Cz1WIv9r.js → pieDiagram-DEJITSTG.D_q4SVDT.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DKLFxcjy.js → quadrantDiagram-34T5L4WZ.D3zGj5ok.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.BHegiK7x.js → requirementDiagram-MS252O5E.DVTg7zr2.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.DYkY6yPc.js → sankeyDiagram-XADWPNL6.D3X8jm57.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DYQ1QUrI.js → sequenceDiagram-FGHM5R23.Dpjai9YP.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.Iru8BsFo.js → stateDiagram-FHFEXIEX.D_AbQBuP.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CWKWRxRx.js +1 -0
- package/dist/docs/assets/chunks/{theme.DaplWQhQ.js → theme.BcgOnbZ6.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.BwFA8hiX.js → timeline-definition-GMOUNBTQ.Cp3DKBe2.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CZ60W1C_.js → vennDiagram-DHZGUBPP.Bcvg-Aqu.js} +1 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.CCpdcUSq.js +162 -0
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.B69D2r8-.js → wardleyDiagram-NUSXRM2D.L0yehCc5.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CLPZEIU9.js → xychartDiagram-5P7HB3ND.Cw8-tJmw.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.Bljpve-y.js → reference_connections.md.DLrgAd5f.js} +1 -1
- package/dist/docs/assets/{reference_hooks.md.C5LCJ1R3.js → reference_hooks.md.B-eGa2km.js} +3 -3
- package/dist/docs/assets/{reference_hooks.md.C5LCJ1R3.lean.js → reference_hooks.md.B-eGa2km.lean.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.CM5zo3w4.js → reference_sessions.md.CyM7ARz1.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.C0guGcH0.js → reference_skills.md.ClkMoQsV.js} +3 -3
- package/dist/docs/assets/{reference_tools.md.v3SXVSs_.js → reference_tools.md.DzIY9JzY.js} +3 -3
- package/dist/docs/assets/{reference_tools.md.v3SXVSs_.lean.js → reference_tools.md.DzIY9JzY.lean.js} +1 -1
- package/dist/docs/assets/{style.C130MVnH.css → style.Dwls12uf.css} +1 -1
- package/dist/docs/building-with-agents.html +37 -37
- package/dist/docs/deployment.html +37 -37
- package/dist/docs/evals.html +37 -37
- package/dist/docs/guides/agent-to-agent.html +37 -37
- package/dist/docs/guides/bitbucket.html +37 -37
- package/dist/docs/guides/cloud-agents.html +37 -37
- package/dist/docs/guides/convert-automation.html +37 -37
- package/dist/docs/guides/github.html +37 -37
- package/dist/docs/guides/gitlab.html +37 -37
- package/dist/docs/guides/grokbot-agents.html +37 -37
- package/dist/docs/guides/hooks.html +37 -37
- package/dist/docs/guides/improve.html +37 -37
- package/dist/docs/guides/jev.html +37 -37
- package/dist/docs/guides/mcp-oauth.html +37 -37
- package/dist/docs/guides/migrate.html +37 -37
- package/dist/docs/guides/opentelemetry.html +37 -37
- package/dist/docs/guides/slack.html +37 -37
- package/dist/docs/guides/webhooks.html +37 -37
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +37 -37
- package/dist/docs/index.html +37 -37
- package/dist/docs/llms-full.txt +15 -2
- package/dist/docs/quickstart.html +37 -37
- package/dist/docs/reference/agent-config.html +37 -37
- package/dist/docs/reference/artifacts.html +37 -37
- package/dist/docs/reference/channels.html +37 -37
- package/dist/docs/reference/cli.html +37 -37
- package/dist/docs/reference/connections.html +39 -39
- package/dist/docs/reference/connections.md +2 -1
- package/dist/docs/reference/evals.html +37 -37
- package/dist/docs/reference/extensions.html +37 -37
- package/dist/docs/reference/hooks.html +39 -39
- package/dist/docs/reference/hooks.md +1 -0
- package/dist/docs/reference/http-api.html +37 -37
- package/dist/docs/reference/instructions.html +37 -37
- package/dist/docs/reference/playground.html +36 -36
- package/dist/docs/reference/project-layout.html +37 -37
- package/dist/docs/reference/prompt.html +37 -37
- package/dist/docs/reference/schedules.html +37 -37
- package/dist/docs/reference/sessions.html +37 -37
- package/dist/docs/reference/sessions.md +1 -1
- package/dist/docs/reference/skills.html +40 -40
- package/dist/docs/reference/subagents.html +37 -37
- package/dist/docs/reference/tools.html +39 -39
- package/dist/docs/reference/tools.md +11 -0
- package/dist/docs/templates/agentic-owners.html +37 -37
- package/dist/docs/templates/grokbot-agents.html +37 -37
- package/dist/docs/templates/security-reviewer.html +37 -37
- package/dist/docs/templates/thermo-quality-review.html +37 -37
- package/dist/docs/templates/thermo-review.html +37 -37
- package/dist/docs/templates/triage.html +37 -37
- package/dist/docs/troubleshooting.html +36 -36
- package/dist/evals/assertions.d.ts.map +1 -1
- package/dist/evals/assertions.js +21 -19
- package/dist/evals/expect.js +1 -1
- package/dist/evals/judge.js +1 -1
- package/dist/evals/reporters.js +8 -8
- package/dist/evals/run-facts.js +2 -2
- package/dist/evals.js +6 -6
- package/dist/extensions/cursor-cloud-agents/extension.d.ts +2 -0
- package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.js +2 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +16 -0
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +44 -3
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts +23 -0
- package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/launch-agent.js +32 -0
- package/dist/extensions/cursor-cloud-agents/lib/repos.js +2 -2
- package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -2
- package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/watch.js +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +3 -8
- package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/extension.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +4 -4
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +1 -1
- package/dist/extensions/improve/skills/yourself.js +1 -1
- package/dist/extensions/jev/extension.js +2 -2
- package/dist/extensions/jev/tools/evaluate.js +1 -1
- package/dist/extensions/slack-communication/tools/react.js +1 -1
- package/dist/files-backends/cursor-hosted.js +8 -8
- package/dist/files-backends/local-fs.js +1 -1
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +15 -15
- package/dist/internal/advertise-tools.d.ts +3 -2
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +11 -9
- package/dist/internal/approval-gate.js +1 -1
- package/dist/internal/artifacts-store.js +13 -13
- package/dist/internal/as-of.js +2 -2
- package/dist/internal/authored-alias-hooks.js +1 -1
- package/dist/internal/builtin-tools/reminders.js +2 -2
- package/dist/internal/chat-client.js +5 -5
- package/dist/internal/cli-ax.js +14 -14
- package/dist/internal/cli-bitbucket.js +10 -10
- package/dist/internal/cli-convert-automation.js +2 -2
- package/dist/internal/cli-cursor.js +2 -2
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +40 -40
- package/dist/internal/cli-docs.js +5 -5
- package/dist/internal/cli-github.js +15 -15
- package/dist/internal/cli-gitlab.js +10 -10
- package/dist/internal/cli-images.js +16 -16
- package/dist/internal/cli-manifest.js +1 -1
- package/dist/internal/cli-mcp-oauth.js +5 -5
- package/dist/internal/cli-mcp.js +3 -3
- package/dist/internal/cli-migrate.js +1 -1
- package/dist/internal/cli-skills.js +2 -2
- package/dist/internal/cli-slack.js +5 -5
- package/dist/internal/cloud-turn-cost.js +1 -1
- package/dist/internal/continuation-identity.js +6 -6
- package/dist/internal/conversation-mirror.js +5 -5
- package/dist/internal/convert-automation/convert-workflow.js +24 -24
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
- package/dist/internal/cursor/account-mcp.js +20 -20
- package/dist/internal/cursor/backend-client.js +6 -6
- package/dist/internal/cursor/credentials.js +1 -1
- package/dist/internal/cursor/store-api-client.js +1 -1
- package/dist/internal/cursor-account-mcp-auth.js +9 -9
- package/dist/internal/cursor-deployment-relay.d.ts.map +1 -1
- package/dist/internal/cursor-deployment-relay.js +9 -9
- package/dist/internal/cursor-event-relay.js +10 -10
- package/dist/internal/cursor-relay-core.js +2 -2
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +3 -0
- package/dist/internal/deploy-manifest.js +10 -10
- package/dist/internal/discovery/agent-config.js +2 -2
- package/dist/internal/discovery/agent.js +6 -6
- package/dist/internal/discovery/connections.js +5 -5
- package/dist/internal/discovery/cursor-plugin.js +12 -12
- package/dist/internal/discovery/extension-overlay.js +3 -3
- package/dist/internal/discovery/extensions.js +6 -6
- package/dist/internal/discovery/info.js +9 -9
- package/dist/internal/discovery/instructions.js +1 -1
- package/dist/internal/discovery/project.js +3 -3
- package/dist/internal/discovery/services.js +1 -1
- package/dist/internal/discovery/tools.js +1 -1
- package/dist/internal/docs-site.js +2 -2
- package/dist/internal/env-file.js +1 -1
- package/dist/internal/eval-run-store.js +7 -7
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +14 -14
- package/dist/internal/eval-transport.js +1 -1
- package/dist/internal/evals-client.js +4 -4
- package/dist/internal/event-log.js +8 -8
- package/dist/internal/event-mapper.js +13 -13
- package/dist/internal/expected-delivery-failure.js +2 -2
- package/dist/internal/filesystem/format.js +2 -2
- package/dist/internal/filesystem/nearest.js +3 -3
- package/dist/internal/filesystem/scratch.js +3 -3
- package/dist/internal/filesystem/tools.js +6 -6
- package/dist/internal/filesystem/walk.d.ts.map +1 -1
- package/dist/internal/filesystem/walk.js +2 -2
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +6 -5
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +4 -2
- package/dist/internal/github-fanout.d.ts.map +1 -1
- package/dist/internal/github-fanout.js +3 -3
- package/dist/internal/guest-network.js +4 -4
- package/dist/internal/host-files.js +1 -1
- package/dist/internal/host-kv.js +2 -2
- package/dist/internal/hosted-catch-protocol.js +1 -1
- package/dist/internal/hosted-catch.js +1 -1
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +14 -14
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +23 -9
- package/dist/internal/hosted-eval-cases.js +4 -4
- package/dist/internal/hosted-execution-diag.js +3 -3
- package/dist/internal/hosting.js +1 -1
- package/dist/internal/http-channel.js +1 -1
- package/dist/internal/http-control-plane-session.js +2 -2
- package/dist/internal/init-interview.js +7 -7
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +12 -12
- package/dist/internal/inline-stdio-mcp.js +2 -2
- package/dist/internal/install-cursor-skills.js +11 -11
- package/dist/internal/json-schema.js +1 -1
- package/dist/internal/local-control-plane.js +3 -3
- package/dist/internal/local-env.js +3 -3
- package/dist/internal/log-ring.js +1 -1
- package/dist/internal/logs-client.js +1 -1
- package/dist/internal/mcp-endpoint.js +8 -8
- package/dist/internal/mcp-host.d.ts.map +1 -1
- package/dist/internal/mcp-host.js +5 -5
- package/dist/internal/mcp-oauth-on-demand.js +3 -3
- package/dist/internal/mcp-oauth.js +5 -5
- package/dist/internal/net.js +2 -2
- package/dist/internal/otel/config.js +3 -3
- package/dist/internal/otel/runtime.js +13 -13
- package/dist/internal/peer-connections.js +2 -2
- package/dist/internal/persistent-stage-log-mirror.d.ts +57 -0
- package/dist/internal/persistent-stage-log-mirror.d.ts.map +1 -0
- package/dist/internal/persistent-stage-log-mirror.js +231 -0
- package/dist/internal/platform-schedule-sync.js +1 -1
- package/dist/internal/platform-timers.js +1 -1
- package/dist/internal/playground/static.js +2 -2
- package/dist/internal/playground/toolchain.js +2 -2
- package/dist/internal/playground-proxy.js +3 -3
- package/dist/internal/process-memory-telemetry.js +1 -1
- package/dist/internal/reminder-runner.d.ts +1 -1
- package/dist/internal/reminder-runner.d.ts.map +1 -1
- package/dist/internal/reminder-runner.js +14 -16
- package/dist/internal/reminder-store.js +1 -1
- package/dist/internal/resolved-connections.js +8 -8
- package/dist/internal/router.js +4 -4
- package/dist/internal/run-client.js +2 -2
- package/dist/internal/schedule-runner.js +6 -6
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +6 -6
- package/dist/internal/serve-restart.js +1 -1
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +93 -72
- package/dist/internal/session-cost.js +3 -3
- package/dist/internal/session-engine.d.ts +8 -0
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +183 -118
- package/dist/internal/session-live-publisher.d.ts +46 -0
- package/dist/internal/session-live-publisher.d.ts.map +1 -0
- package/dist/internal/session-live-publisher.js +352 -0
- package/dist/internal/session-run-log.js +6 -6
- package/dist/internal/sessions-client.js +3 -3
- package/dist/internal/skill-catalog.js +2 -2
- package/dist/internal/sleep.js +1 -1
- package/dist/internal/start-log-store.d.ts +5 -1
- package/dist/internal/start-log-store.d.ts.map +1 -1
- package/dist/internal/start-log-store.js +5 -3
- package/dist/internal/storage-coordinator.js +12 -12
- package/dist/internal/store-api-protocol.d.ts +51 -0
- package/dist/internal/store-api-protocol.d.ts.map +1 -1
- package/dist/internal/store-api-protocol.js +39 -2
- package/dist/internal/store-mirror.js +4 -4
- package/dist/internal/stream-progress.d.ts.map +1 -1
- package/dist/internal/stream-progress.js +4 -0
- package/dist/internal/terminal-style.js +2 -2
- package/dist/internal/tool-call-retry.d.ts +87 -0
- package/dist/internal/tool-call-retry.d.ts.map +1 -0
- package/dist/internal/tool-call-retry.js +387 -0
- package/dist/internal/tool-result.js +3 -3
- package/dist/internal/trajectory.js +7 -7
- package/dist/internal/turn-governor.js +2 -2
- package/dist/internal/turn-outbox.js +1 -1
- package/dist/internal/update-check.d.ts.map +1 -1
- package/dist/internal/update-check.js +4 -2
- package/dist/internal/v2-hosting.d.ts +6 -0
- package/dist/internal/v2-hosting.d.ts.map +1 -1
- package/dist/internal/v2-hosting.js +7 -1
- package/dist/internal/workspace.js +4 -4
- package/dist/kv/memory-kv.js +3 -3
- package/dist/playground/assets/{index-JekUQERK.js → index-HN5lOuAX.js} +42 -42
- package/dist/playground/assets/index-JY1wKCMg.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/prompt.js +1 -1
- package/dist/storage-backends/cursor-hosted-v2.js +2 -2
- package/dist/storage-backends/file-kv.js +7 -7
- package/dist/storage-protocol.d.ts +7 -0
- package/dist/storage-protocol.d.ts.map +1 -1
- package/dist/storage-protocol.js +7 -0
- package/dist/storage.js +3 -3
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -4
- package/docs/reference/connections.md +2 -1
- package/docs/reference/hooks.md +1 -0
- package/docs/reference/sessions.md +1 -1
- package/docs/reference/tools.md +11 -0
- package/package.json +6 -6
- package/templates/agentic-owners/bot/channels/github.ts +2 -2
- package/templates/agentic-owners/bot/lib/github.ts +7 -5
- package/templates/agentic-owners/bot/lib/owners/decision.ts +9 -9
- package/templates/agentic-owners/bot/lib/owners/handles.ts +2 -2
- package/templates/agentic-owners/bot/lib/owners/match.ts +5 -3
- package/templates/agentic-owners/bot/lib/owners/matching.ts +1 -1
- package/templates/agentic-owners/bot/lib/owners/parse.ts +4 -4
- package/templates/agentic-owners/bot/lib/owners/prompt.ts +1 -1
- package/templates/agentic-owners/bot/lib/review.ts +18 -17
- package/templates/agentic-owners/evals/owners.eval.ts +2 -2
- package/templates/agents-md/bot/lib/collect.ts +6 -6
- package/templates/agents-md/bot/lib/config.ts +1 -1
- package/templates/agents-md/bot/tools/apply_agents.ts +4 -4
- package/templates/code-wiki/bot/channels/github.ts +3 -3
- package/templates/code-wiki/bot/lib/repos.ts +1 -1
- package/templates/code-wiki/bot/tools/apply_wiki.ts +2 -2
- package/templates/demo/bot/lib/collect.ts +1 -1
- package/templates/demo/bot/lib/repos.ts +1 -1
- package/templates/demo/bot/tools/record_demo.ts +1 -1
- package/templates/pr-autofixer/bot/channels/github.ts +2 -2
- package/templates/pr-autofixer/bot/lib/merge-watch.ts +2 -2
- package/templates/pr-autofixer/bot/lib/repos.ts +2 -2
- package/templates/pr-autofixer/bot/lib/webhook-routing.ts +1 -1
- package/templates/security-help/bot/lib/repos.ts +1 -1
- package/templates/security-reviewer/bot/lib/repos.ts +1 -1
- package/templates/triage/bot/lib/actuate.ts +15 -15
- package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +0 -1
- package/dist/docs/assets/chunks/channel.CBwrU9rP.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +0 -1
- package/dist/docs/assets/chunks/clone.BTvFyY1a.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +0 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.iXazD3Z7.js +0 -162
- package/dist/playground/assets/index-DXm_VXAQ.css +0 -1
- /package/dist/docs/assets/{reference_connections.md.Bljpve-y.lean.js → reference_connections.md.DLrgAd5f.lean.js} +0 -0
- /package/dist/docs/assets/{reference_sessions.md.CM5zo3w4.lean.js → reference_sessions.md.CyM7ARz1.lean.js} +0 -0
- /package/dist/docs/assets/{reference_skills.md.C0guGcH0.lean.js → reference_skills.md.ClkMoQsV.lean.js} +0 -0
package/dist/evals/judge.js
CHANGED
|
@@ -82,7 +82,7 @@ export function parseJudgeReply(reply, allowed) {
|
|
|
82
82
|
throw new Error(`judge reply had no choice from [${allowed.join(", ")}]: ${JSON.stringify(text.slice(0, 160))}`);
|
|
83
83
|
}
|
|
84
84
|
function normalizeChoice(token, allowed) {
|
|
85
|
-
return allowed.find(choice => choice.toLowerCase() === token.toLowerCase());
|
|
85
|
+
return allowed.find((choice) => choice.toLowerCase() === token.toLowerCase());
|
|
86
86
|
}
|
|
87
87
|
function graderFromChoices(args) {
|
|
88
88
|
const allowed = Object.keys(args.scores);
|
package/dist/evals/reporters.js
CHANGED
|
@@ -55,10 +55,10 @@ export function renderJUnitXml(summary, suiteName) {
|
|
|
55
55
|
lines.push(` <skipped message="${escapeXml(result.skipReason ?? "skipped")}"/>`);
|
|
56
56
|
}
|
|
57
57
|
else if (verdict === "failed" || (verdict === "scored" && summary.strict)) {
|
|
58
|
-
const failures = result.assertions.filter(a => !a.passed);
|
|
58
|
+
const failures = result.assertions.filter((a) => !a.passed);
|
|
59
59
|
const message = result.error ??
|
|
60
60
|
failures
|
|
61
|
-
.map(a => `${a.name}${a.detail === undefined ? "" : ` (${a.detail})`}`)
|
|
61
|
+
.map((a) => `${a.name}${a.detail === undefined ? "" : ` (${a.detail})`}`)
|
|
62
62
|
.join("; ") ??
|
|
63
63
|
verdict;
|
|
64
64
|
lines.push(` <failure message="${escapeXml(message === "" ? verdict : message)}" type="${escapeXml(verdict)}"/>`);
|
|
@@ -156,7 +156,7 @@ export function Artifacts(options) {
|
|
|
156
156
|
...totals,
|
|
157
157
|
caseCount: results.length,
|
|
158
158
|
target,
|
|
159
|
-
discovered: discovered.map(e => e.id),
|
|
159
|
+
discovered: discovered.map((e) => e.id),
|
|
160
160
|
}, null, 2)}\n`, "utf8");
|
|
161
161
|
},
|
|
162
162
|
};
|
|
@@ -171,8 +171,8 @@ export function Artifacts(options) {
|
|
|
171
171
|
export function sanitizeCaseId(id) {
|
|
172
172
|
return id
|
|
173
173
|
.split("/")
|
|
174
|
-
.map(segment => segment.replace(/[^A-Za-z0-9._-]/g, "_"))
|
|
175
|
-
.filter(segment => segment !== "" && segment !== "." && segment !== "..")
|
|
174
|
+
.map((segment) => segment.replace(/[^A-Za-z0-9._-]/g, "_"))
|
|
175
|
+
.filter((segment) => segment !== "" && segment !== "." && segment !== "..")
|
|
176
176
|
.join("/");
|
|
177
177
|
}
|
|
178
178
|
/** Fan one lifecycle call out to several reporters, isolating failures. */
|
|
@@ -189,8 +189,8 @@ export function combineReporters(reporters, onError) {
|
|
|
189
189
|
}
|
|
190
190
|
};
|
|
191
191
|
return {
|
|
192
|
-
onRunStart: (evals, target) => forEach(r => r.onRunStart?.(evals, target)),
|
|
193
|
-
onEvalComplete: result => forEach(r => r.onEvalComplete?.(result)),
|
|
194
|
-
onRunComplete: summary => forEach(r => r.onRunComplete?.(summary)),
|
|
192
|
+
onRunStart: (evals, target) => forEach((r) => r.onRunStart?.(evals, target)),
|
|
193
|
+
onEvalComplete: (result) => forEach((r) => r.onEvalComplete?.(result)),
|
|
194
|
+
onRunComplete: (summary) => forEach((r) => r.onRunComplete?.(summary)),
|
|
195
195
|
};
|
|
196
196
|
}
|
package/dist/evals/run-facts.js
CHANGED
|
@@ -192,7 +192,7 @@ export function deriveRunFacts(events) {
|
|
|
192
192
|
break;
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
|
-
const pendingInputRequests = inputRequests.filter(r => !r.resolved);
|
|
195
|
+
const pendingInputRequests = inputRequests.filter((r) => !r.resolved);
|
|
196
196
|
// `turn.*` events all carry a turnId; session-scoped events do not, so the
|
|
197
197
|
// turn count is the number of distinct turn ids seen.
|
|
198
198
|
const turns = turnIds.size;
|
|
@@ -208,6 +208,6 @@ export function deriveRunFacts(events) {
|
|
|
208
208
|
ok: failedTurnIds.size === 0 && !sessionFailed && turns > 0,
|
|
209
209
|
assistantMessages,
|
|
210
210
|
assistantText: assistantMessages.join("\n"),
|
|
211
|
-
failedToolCalls: toolCalls.filter(c => c.status === "failed"),
|
|
211
|
+
failedToolCalls: toolCalls.filter((c) => c.status === "failed"),
|
|
212
212
|
};
|
|
213
213
|
}
|
package/dist/evals.js
CHANGED
|
@@ -135,7 +135,7 @@ function validateDatapointId(id) {
|
|
|
135
135
|
*/
|
|
136
136
|
export function expandEvalDefinition(fileId, definition) {
|
|
137
137
|
if (definition.cases !== undefined) {
|
|
138
|
-
return definition.cases.flatMap(datapoint => {
|
|
138
|
+
return definition.cases.flatMap((datapoint) => {
|
|
139
139
|
const description = datapoint.description ?? definition.description;
|
|
140
140
|
const timeoutMs = datapoint.timeoutMs ?? definition.timeoutMs;
|
|
141
141
|
const iterations = normalizeEvalIterations(datapoint.iterations ?? definition.iterations ?? 1);
|
|
@@ -231,17 +231,17 @@ export function isEvalSummaryCase(tags) {
|
|
|
231
231
|
* Preserves discovery order from `all`.
|
|
232
232
|
*/
|
|
233
233
|
export function expandSummarySuiteSelection(all, selected, isSummary) {
|
|
234
|
-
const fileIdsNeedingSuite = new Set(selected.filter(item => isSummary(item)).map(item => item.fileId));
|
|
234
|
+
const fileIdsNeedingSuite = new Set(selected.filter((item) => isSummary(item)).map((item) => item.fileId));
|
|
235
235
|
if (fileIdsNeedingSuite.size === 0) {
|
|
236
236
|
return [...selected];
|
|
237
237
|
}
|
|
238
|
-
const selectedIds = new Set(selected.map(item => item.id));
|
|
239
|
-
const extras = all.filter(item => fileIdsNeedingSuite.has(item.fileId) && !selectedIds.has(item.id));
|
|
238
|
+
const selectedIds = new Set(selected.map((item) => item.id));
|
|
239
|
+
const extras = all.filter((item) => fileIdsNeedingSuite.has(item.fileId) && !selectedIds.has(item.id));
|
|
240
240
|
if (extras.length === 0) {
|
|
241
241
|
return [...selected];
|
|
242
242
|
}
|
|
243
|
-
const want = new Set([...selectedIds, ...extras.map(item => item.id)]);
|
|
244
|
-
return all.filter(item => want.has(item.id));
|
|
243
|
+
const want = new Set([...selectedIds, ...extras.map((item) => item.id)]);
|
|
244
|
+
return all.filter((item) => want.has(item.id));
|
|
245
245
|
}
|
|
246
246
|
/**
|
|
247
247
|
* Hard ceiling for concurrent eval cases.
|
|
@@ -28,6 +28,8 @@
|
|
|
28
28
|
* agent; no model turn runs until the one wake.
|
|
29
29
|
*/
|
|
30
30
|
import type { AgentCloudOptions, Extension, ModelSetting } from "../../types.js";
|
|
31
|
+
export type { CloudAgentLaunch, CloudEnvironment } from "./lib/backend.js";
|
|
32
|
+
export { type CloudAgentLaunchResult, getCloudEnvironment, launchCloudAgent, listCloudEnvironmentsNamed, } from "./lib/launch-agent.js";
|
|
31
33
|
type CloudRepo = NonNullable<AgentCloudOptions["repos"]>[number];
|
|
32
34
|
export type CursorCloudAgentsCloudOptions = Omit<AgentCloudOptions, "repos"> & {
|
|
33
35
|
repos?: CloudRepo[] | (() => CloudRepo[]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../src/extensions/cursor-cloud-agents/extension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEjF,KAAK,SAAS,GAAG,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG;IAC7E,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC;CAC3C,CAAC;AAEF,8CAA8C;AAC9C,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,6BAA6B,CAAC;IACtC,mEAAmE;IACnE,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,8DAA8D;AAC9D,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,6BAA6B,CAAC;IACrC,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB;AAoDD,QAAA,MAAM,iBAAiB,EAAE,SAAS,CAAC,uBAAuB,EAAE,wBAAwB,GAAG,SAAS,CAK5F,CAAC;eAEU,iBAAiB"}
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../src/extensions/cursor-cloud-agents/extension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEjF,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EACL,KAAK,sBAAsB,EAC3B,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAE/B,KAAK,SAAS,GAAG,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG;IAC7E,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC;CAC3C,CAAC;AAEF,8CAA8C;AAC9C,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,6BAA6B,CAAC;IACtC,mEAAmE;IACnE,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,8DAA8D;AAC9D,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,6BAA6B,CAAC;IACrC,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB;AAoDD,QAAA,MAAM,iBAAiB,EAAE,SAAS,CAAC,uBAAuB,EAAE,wBAAwB,GAAG,SAAS,CAK5F,CAAC;eAEU,iBAAiB"}
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
*/
|
|
30
30
|
import { z } from "zod";
|
|
31
31
|
import { defineExtension } from "../../extensions.js";
|
|
32
|
+
export { getCloudEnvironment, launchCloudAgent, listCloudEnvironmentsNamed, } from "./lib/launch-agent.js";
|
|
32
33
|
const repo = z.object({
|
|
33
34
|
url: z.string().url(),
|
|
34
35
|
startingRef: z.string().optional(),
|
|
@@ -66,7 +67,7 @@ const config = z
|
|
|
66
67
|
watchStops: z.boolean().default(true),
|
|
67
68
|
})
|
|
68
69
|
.default({})
|
|
69
|
-
.transform(options => ({
|
|
70
|
+
.transform((options) => ({
|
|
70
71
|
...options,
|
|
71
72
|
needsApproval: options.needsApproval ?? options.cloud.repos === undefined,
|
|
72
73
|
}));
|
|
@@ -47,6 +47,14 @@ export type CloudAgentLaunch = {
|
|
|
47
47
|
status: string;
|
|
48
48
|
url: string;
|
|
49
49
|
};
|
|
50
|
+
/** A saved cloud environment as the caller's API key can see it. */
|
|
51
|
+
export type CloudEnvironment = {
|
|
52
|
+
publicId: string;
|
|
53
|
+
name: string;
|
|
54
|
+
repoUrls: string[];
|
|
55
|
+
/** False when the backend marks the environment unable to launch agents. */
|
|
56
|
+
eligible: boolean;
|
|
57
|
+
};
|
|
50
58
|
export type LaunchRequest = {
|
|
51
59
|
prompt: string;
|
|
52
60
|
name?: string;
|
|
@@ -60,6 +68,14 @@ export declare class CloudAgentsBackend {
|
|
|
60
68
|
constructor(apiKey: () => string, fetchImpl?: typeof fetch);
|
|
61
69
|
/** `POST /v1/agents`: create the agent and start its first run in one call. */
|
|
62
70
|
launch(request: LaunchRequest): Promise<CloudAgentLaunch>;
|
|
71
|
+
/** `GetEnvironment`: one saved environment by public id, or undefined when not visible. */
|
|
72
|
+
environment(publicId: string): Promise<CloudEnvironment | undefined>;
|
|
73
|
+
/**
|
|
74
|
+
* `ListEnvironments`: the caller's visible environments whose display name
|
|
75
|
+
* is exactly `name`. The v1 launch API resolves `env.name` by name, so this
|
|
76
|
+
* is how a caller confirms the name picks one environment.
|
|
77
|
+
*/
|
|
78
|
+
environmentsNamed(name: string): Promise<CloudEnvironment[]>;
|
|
63
79
|
info(agentId: string): Promise<CloudAgentInfo>;
|
|
64
80
|
conversation(agentId: string): Promise<CloudAgentMessage[]>;
|
|
65
81
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../../src/extensions/cursor-cloud-agents/lib/backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUzE,qBAAa,mBAAoB,SAAQ,KAAK;IAG1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IAF1B,YACE,OAAO,EAAE,MAAM,EACN,MAAM,CAAC,EAAE,MAAM,YAAA,EAIzB;CACF;AAED,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,SAAS,GACT,UAAU,GACV,OAAO,GACP,SAAS,GACT,SAAS,CAAC;AAGd,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9E,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB,CAAC;
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../../src/extensions/cursor-cloud-agents/lib/backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUzE,qBAAa,mBAAoB,SAAQ,KAAK;IAG1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IAF1B,YACE,OAAO,EAAE,MAAM,EACN,MAAM,CAAC,EAAE,MAAM,YAAA,EAIzB;CACF;AAED,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,SAAS,GACT,UAAU,GACV,OAAO,GACP,SAAS,GACT,SAAS,CAAC;AAGd,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9E,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,oEAAoE;AACpE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4EAA4E;IAC5E,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB,CAAC;AA2FF,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAJ5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAEhD,YACmB,MAAM,EAAE,MAAM,MAAM,EACpB,SAAS,GAAE,OAAO,KAAa,EASjD;IAED,+EAA+E;IACzE,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8C9D;IAED,2FAA2F;IACrF,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAKzE;IAED;;;;OAIG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAYjE;IAEK,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA8BnD;IAEK,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAuBhE;IAED;;;OAGG;IACG,QAAQ,CACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAmBxC;IAEK,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1C;CACF;AAID,mEAAmE;AACnE,wBAAgB,kBAAkB,IAAI,kBAAkB,CAGvD;AAED,wBAAgB,MAAM,IAAI,MAAM,CAM/B"}
|
|
@@ -69,6 +69,31 @@ const conversationResponseSchema = z.object({
|
|
|
69
69
|
.optional(),
|
|
70
70
|
});
|
|
71
71
|
const followupResponseSchema = z.object({ runId: z.string().optional() });
|
|
72
|
+
const environmentSchema = z.object({
|
|
73
|
+
publicId: z.string(),
|
|
74
|
+
name: z.string().optional(),
|
|
75
|
+
repoConfig: z
|
|
76
|
+
.object({ repos: z.array(z.object({ repoUrl: z.string().optional() })).optional() })
|
|
77
|
+
.optional(),
|
|
78
|
+
ineligibilityReason: z.string().optional(),
|
|
79
|
+
});
|
|
80
|
+
const getEnvironmentResponseSchema = z.object({ environment: environmentSchema.optional() });
|
|
81
|
+
const listEnvironmentsResponseSchema = z.object({
|
|
82
|
+
environments: z.array(environmentSchema).optional(),
|
|
83
|
+
});
|
|
84
|
+
function toCloudEnvironment(environment) {
|
|
85
|
+
const reason = environment.ineligibilityReason;
|
|
86
|
+
return {
|
|
87
|
+
publicId: environment.publicId,
|
|
88
|
+
name: environment.name ?? "",
|
|
89
|
+
repoUrls: (environment.repoConfig?.repos ?? [])
|
|
90
|
+
.map((repo) => repo.repoUrl ?? "")
|
|
91
|
+
.filter((url) => url !== ""),
|
|
92
|
+
eligible: reason === undefined ||
|
|
93
|
+
reason === "" ||
|
|
94
|
+
reason === "ENVIRONMENT_INELIGIBILITY_REASON_UNSPECIFIED",
|
|
95
|
+
};
|
|
96
|
+
}
|
|
72
97
|
const launchResponseSchema = z.object({
|
|
73
98
|
agent: z.object({ id: z.string(), url: z.string().optional() }),
|
|
74
99
|
run: z.object({ id: z.string(), status: z.string() }),
|
|
@@ -130,6 +155,22 @@ export class CloudAgentsBackend {
|
|
|
130
155
|
url: parsed.agent.url ?? cloudAgentUrl(parsed.agent.id),
|
|
131
156
|
};
|
|
132
157
|
}
|
|
158
|
+
/** `GetEnvironment`: one saved environment by public id, or undefined when not visible. */
|
|
159
|
+
async environment(publicId) {
|
|
160
|
+
const { environment } = getEnvironmentResponseSchema.parse(await this.rpcClient.serviceRpc(SERVICE, "GetEnvironment", { publicId }, RPC_TIMEOUT_MS));
|
|
161
|
+
return environment === undefined ? undefined : toCloudEnvironment(environment);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* `ListEnvironments`: the caller's visible environments whose display name
|
|
165
|
+
* is exactly `name`. The v1 launch API resolves `env.name` by name, so this
|
|
166
|
+
* is how a caller confirms the name picks one environment.
|
|
167
|
+
*/
|
|
168
|
+
async environmentsNamed(name) {
|
|
169
|
+
const { environments } = listEnvironmentsResponseSchema.parse(await this.rpcClient.serviceRpc(SERVICE, "ListEnvironments", { searchQuery: name, limit: 100 }, RPC_TIMEOUT_MS));
|
|
170
|
+
return (environments ?? [])
|
|
171
|
+
.filter((environment) => environment.name === name)
|
|
172
|
+
.map(toCloudEnvironment);
|
|
173
|
+
}
|
|
133
174
|
async info(agentId) {
|
|
134
175
|
const { composer } = infoResponseSchema.parse(await this.rpcClient.serviceRpc(SERVICE, "GetBackgroundComposerInfo", { bcId: agentId }, RPC_TIMEOUT_MS));
|
|
135
176
|
const { composer: summary } = composer;
|
|
@@ -155,8 +196,8 @@ export class CloudAgentsBackend {
|
|
|
155
196
|
}
|
|
156
197
|
async conversation(agentId) {
|
|
157
198
|
const { conversation } = conversationResponseSchema.parse(await this.rpcClient.serviceRpc(SERVICE, "GetBackgroundComposerConversation", { bcId: agentId }, RPC_TIMEOUT_MS));
|
|
158
|
-
return (conversation ?? []).map(message => {
|
|
159
|
-
const toolCalls = (message.toolResults ?? []).map(result => ({
|
|
199
|
+
return (conversation ?? []).map((message) => {
|
|
200
|
+
const toolCalls = (message.toolResults ?? []).map((result) => ({
|
|
160
201
|
name: result.toolName ?? "",
|
|
161
202
|
args: parseArgs(result.args ?? result.rawArgs),
|
|
162
203
|
content: result.content,
|
|
@@ -243,7 +284,7 @@ function apiErrorMessage(text) {
|
|
|
243
284
|
const parsed = JSON.parse(text);
|
|
244
285
|
const code = parsed.error?.code ?? parsed.code;
|
|
245
286
|
const message = parsed.error?.message ?? parsed.message;
|
|
246
|
-
return [code, message].filter(part => part !== undefined).join(": ") || text;
|
|
287
|
+
return [code, message].filter((part) => part !== undefined).join(": ") || text;
|
|
247
288
|
}
|
|
248
289
|
catch {
|
|
249
290
|
return text;
|
|
@@ -58,7 +58,7 @@ export async function assertOwned(ctx, agentId) {
|
|
|
58
58
|
export async function listFleet(ctx, scope = "all") {
|
|
59
59
|
const fleet = fleetSchema.safeParse(await ctx.host.kv.get(fleetKey(principalOf(ctx))));
|
|
60
60
|
const entries = fleet.success ? fleet.data : [];
|
|
61
|
-
return scope === "all" ? entries : entries.filter(entry => entry.sessionId === ctx.session.id);
|
|
61
|
+
return scope === "all" ? entries : entries.filter((entry) => entry.sessionId === ctx.session.id);
|
|
62
62
|
}
|
|
63
63
|
function fleetKey(principal) {
|
|
64
64
|
return `${PREFIX}/principals/${encodeURIComponent(principal)}`;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one launch path: channel gate, v1 launch with the mount's model,
|
|
3
|
+
* principal binding, and the stop watch. `cloud__launch` calls it with the
|
|
4
|
+
* mount's repositories; an authored tool can call it with its own
|
|
5
|
+
* `cloud` target (a named saved environment, say) after applying its own
|
|
6
|
+
* gates, and the launched agent is then steerable with the mount's
|
|
7
|
+
* `get` / `dump` / `reply` / `cancel` like any other.
|
|
8
|
+
*/
|
|
9
|
+
import type { AgentCloudOptions, ToolContext } from "../../../types.js";
|
|
10
|
+
import { type CloudAgentLaunch, type CloudEnvironment } from "./backend.js";
|
|
11
|
+
export type CloudAgentLaunchResult = CloudAgentLaunch & {
|
|
12
|
+
watching: boolean;
|
|
13
|
+
};
|
|
14
|
+
export declare function launchCloudAgent(ctx: ToolContext, request: {
|
|
15
|
+
prompt: string;
|
|
16
|
+
name?: string;
|
|
17
|
+
cloud: AgentCloudOptions;
|
|
18
|
+
}): Promise<CloudAgentLaunchResult>;
|
|
19
|
+
/** A saved environment by public id under the mount's API key; undefined when not visible. */
|
|
20
|
+
export declare function getCloudEnvironment(publicId: string): Promise<CloudEnvironment | undefined>;
|
|
21
|
+
/** Visible saved environments whose display name is exactly `name`. */
|
|
22
|
+
export declare function listCloudEnvironmentsNamed(name: string): Promise<CloudEnvironment[]>;
|
|
23
|
+
//# sourceMappingURL=launch-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch-agent.d.ts","sourceRoot":"","sources":["../../../../src/extensions/cursor-cloud-agents/lib/launch-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAExE,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAsB,MAAM,cAAc,CAAC;AAKhG,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9E,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,GACnE,OAAO,CAAC,sBAAsB,CAAC,CAUjC;AAED,8FAA8F;AAC9F,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAE3F;AAED,uEAAuE;AACvE,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAEpF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one launch path: channel gate, v1 launch with the mount's model,
|
|
3
|
+
* principal binding, and the stop watch. `cloud__launch` calls it with the
|
|
4
|
+
* mount's repositories; an authored tool can call it with its own
|
|
5
|
+
* `cloud` target (a named saved environment, say) after applying its own
|
|
6
|
+
* gates, and the launched agent is then steerable with the mount's
|
|
7
|
+
* `get` / `dump` / `reply` / `cancel` like any other.
|
|
8
|
+
*/
|
|
9
|
+
import extension from "../extension.js";
|
|
10
|
+
import { cloudAgentsBackend } from "./backend.js";
|
|
11
|
+
import { assertWriteChannel } from "./channels.js";
|
|
12
|
+
import { recordLaunch } from "./fleet.js";
|
|
13
|
+
import { armWatch } from "./watch.js";
|
|
14
|
+
export async function launchCloudAgent(ctx, request) {
|
|
15
|
+
assertWriteChannel(ctx);
|
|
16
|
+
const launched = await cloudAgentsBackend().launch({
|
|
17
|
+
prompt: request.prompt,
|
|
18
|
+
name: request.name,
|
|
19
|
+
model: extension.config.model,
|
|
20
|
+
cloud: request.cloud,
|
|
21
|
+
});
|
|
22
|
+
await recordLaunch(ctx, launched.agentId, request.name);
|
|
23
|
+
return { ...launched, watching: await armWatch(ctx, launched) };
|
|
24
|
+
}
|
|
25
|
+
/** A saved environment by public id under the mount's API key; undefined when not visible. */
|
|
26
|
+
export function getCloudEnvironment(publicId) {
|
|
27
|
+
return cloudAgentsBackend().environment(publicId);
|
|
28
|
+
}
|
|
29
|
+
/** Visible saved environments whose display name is exactly `name`. */
|
|
30
|
+
export function listCloudEnvironmentsNamed(name) {
|
|
31
|
+
return cloudAgentsBackend().environmentsNamed(name);
|
|
32
|
+
}
|
|
@@ -35,7 +35,7 @@ export function launchRepos(target, cloud) {
|
|
|
35
35
|
if (prRepo !== undefined && repoKey(prRepo) !== repoKey(url)) {
|
|
36
36
|
throw new Error(`prUrl ${target.prUrl} is not a pull request of ${url}.`);
|
|
37
37
|
}
|
|
38
|
-
const allowlisted = allowlist?.some(configured => repoKey(configured.url) === repoKey(url));
|
|
38
|
+
const allowlisted = allowlist?.some((configured) => repoKey(configured.url) === repoKey(url));
|
|
39
39
|
if (allowlisted !== true) {
|
|
40
40
|
throw new Error(allowlist === undefined
|
|
41
41
|
? `Configure cloud.repos before launching against a model-chosen repository (${url}).`
|
|
@@ -44,7 +44,7 @@ export function launchRepos(target, cloud) {
|
|
|
44
44
|
// Keep the matching allowlist entry's branch / PR defaults when the model
|
|
45
45
|
// only names the repository (handoff always passes `repo`). An explicit
|
|
46
46
|
// `ref` clears an inherited `prUrl` so branch and PR targets do not mix.
|
|
47
|
-
const match = configured.find(configuredRepo => repoKey(configuredRepo.url) === repoKey(url));
|
|
47
|
+
const match = configured.find((configuredRepo) => repoKey(configuredRepo.url) === repoKey(url));
|
|
48
48
|
return [
|
|
49
49
|
{
|
|
50
50
|
url: match?.url ?? url,
|
|
@@ -4,11 +4,11 @@ export function transcriptPath(agentId) {
|
|
|
4
4
|
return `cloud-agent-transcripts/${agentId}.jsonl`;
|
|
5
5
|
}
|
|
6
6
|
export function transcriptLines(messages) {
|
|
7
|
-
return messages.map(message => JSON.stringify(message));
|
|
7
|
+
return messages.map((message) => JSON.stringify(message));
|
|
8
8
|
}
|
|
9
9
|
/** The text of the last assistant message, the agent's report. */
|
|
10
10
|
export function lastAssistantText(messages) {
|
|
11
11
|
return messages
|
|
12
12
|
.toReversed()
|
|
13
|
-
.find(message => message.role === "assistant" && message.text !== undefined)?.text;
|
|
13
|
+
.find((message) => message.role === "assistant" && message.text !== undefined)?.text;
|
|
14
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../../src/extensions/cursor-cloud-agents/lib/watch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAerD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../../src/extensions/cursor-cloud-agents/lib/watch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAerD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CA2C3F;AAED,sEAAsE;AACtE,wBAAsB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBpF"}
|
|
@@ -39,7 +39,7 @@ export async function armWatch(ctx, launch) {
|
|
|
39
39
|
purpose: WATCH_PURPOSE,
|
|
40
40
|
continuationToken,
|
|
41
41
|
});
|
|
42
|
-
if (armed.some(reminder => reminder.channelId === channelId && watched(reminder) === agentId)) {
|
|
42
|
+
if (armed.some((reminder) => reminder.channelId === channelId && watched(reminder) === agentId)) {
|
|
43
43
|
return true;
|
|
44
44
|
}
|
|
45
45
|
const args = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../../src/extensions/cursor-cloud-agents/tools/launch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../../src/extensions/cursor-cloud-agents/tools/launch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMxD,QAAA,MAAM,MAAM,EAAE,cA+CZ,CAAC;eAEY,MAAM"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { defineTool } from "../../../tools.js";
|
|
3
3
|
import extension from "../extension.js";
|
|
4
|
-
import { cloudAgentsBackend } from "../lib/backend.js";
|
|
5
4
|
import { assertWriteChannel } from "../lib/channels.js";
|
|
6
|
-
import {
|
|
5
|
+
import { launchCloudAgent } from "../lib/launch-agent.js";
|
|
7
6
|
import { launchRepos } from "../lib/repos.js";
|
|
8
|
-
import { armWatch } from "../lib/watch.js";
|
|
9
7
|
const launch = defineTool({
|
|
10
8
|
description: "Launch a Cursor cloud agent on a repository with a self-contained task. Returns the agent id and URL, and watching: true when this conversation will be woken once the agent stops; check on it with get, read what it did with dump.",
|
|
11
9
|
effect: "write",
|
|
@@ -37,18 +35,15 @@ const launch = defineTool({
|
|
|
37
35
|
}),
|
|
38
36
|
async execute(input, ctx) {
|
|
39
37
|
assertWriteChannel(ctx);
|
|
40
|
-
const { cloud
|
|
41
|
-
|
|
38
|
+
const { cloud } = extension.config;
|
|
39
|
+
return launchCloudAgent(ctx, {
|
|
42
40
|
prompt: input.prompt,
|
|
43
41
|
name: input.name,
|
|
44
|
-
model,
|
|
45
42
|
cloud: {
|
|
46
43
|
...cloud,
|
|
47
44
|
repos: launchRepos({ repo: input.repo, ref: input.starting_ref, prUrl: input.pr_url }, cloud),
|
|
48
45
|
},
|
|
49
46
|
});
|
|
50
|
-
await recordLaunch(ctx, launched.agentId, input.name);
|
|
51
|
-
return { ...launched, watching: await armWatch(ctx, launched) };
|
|
52
47
|
},
|
|
53
48
|
});
|
|
54
49
|
export default launch;
|
|
@@ -41,11 +41,11 @@ const agentName = z
|
|
|
41
41
|
.max(AGENT_NAME_MAX_LENGTH);
|
|
42
42
|
const configuredAgent = z
|
|
43
43
|
.union([agentName, z.object({ name: agentName, description: z.string().optional() })])
|
|
44
|
-
.transform(agent => (typeof agent === "string" ? { name: agent } : agent));
|
|
44
|
+
.transform((agent) => (typeof agent === "string" ? { name: agent } : agent));
|
|
45
45
|
const agents = z
|
|
46
46
|
.array(configuredAgent)
|
|
47
47
|
.min(1, "agents must name at least one Grok Bot agent; omit it to allow any.")
|
|
48
|
-
.refine(list => new Set(list.map(agent => agent.name.toLowerCase())).size === list.length, "agents must not repeat a name (names match case-insensitively).");
|
|
48
|
+
.refine((list) => new Set(list.map((agent) => agent.name.toLowerCase())).size === list.length, "agents must not repeat a name (names match case-insensitively).");
|
|
49
49
|
const config = z
|
|
50
50
|
.object({
|
|
51
51
|
agents: agents.optional(),
|
|
@@ -54,7 +54,7 @@ const config = z
|
|
|
54
54
|
pollIntervalMs: z.number().int().min(1).default(DEFAULT_POLL_INTERVAL_MS),
|
|
55
55
|
})
|
|
56
56
|
.default({})
|
|
57
|
-
.transform(options => ({
|
|
57
|
+
.transform((options) => ({
|
|
58
58
|
...options,
|
|
59
59
|
needsApproval: options.needsApproval ?? options.agents === undefined,
|
|
60
60
|
}));
|
|
@@ -14,7 +14,7 @@ export function resolveAgentName(requested, configured) {
|
|
|
14
14
|
}
|
|
15
15
|
return name;
|
|
16
16
|
}
|
|
17
|
-
const names = configured.map(agent => `"${agent.name}"`).join(", ");
|
|
17
|
+
const names = configured.map((agent) => `"${agent.name}"`).join(", ");
|
|
18
18
|
if (name === undefined || name === "") {
|
|
19
19
|
const only = configured.length === 1 ? configured[0] : undefined;
|
|
20
20
|
if (only === undefined) {
|
|
@@ -22,8 +22,8 @@ export function resolveAgentName(requested, configured) {
|
|
|
22
22
|
}
|
|
23
23
|
return only.name;
|
|
24
24
|
}
|
|
25
|
-
const match = configured.find(agent => agent.name === name) ??
|
|
26
|
-
configured.find(agent => agent.name.toLowerCase() === name.toLowerCase());
|
|
25
|
+
const match = configured.find((agent) => agent.name === name) ??
|
|
26
|
+
configured.find((agent) => agent.name.toLowerCase() === name.toLowerCase());
|
|
27
27
|
if (match === undefined) {
|
|
28
28
|
throw new Error(`"${name}" is not one of this extension's configured Grok Bot agents (${names}).`);
|
|
29
29
|
}
|
|
@@ -30,14 +30,14 @@ export async function listContacts(ctx) {
|
|
|
30
30
|
/** The contact of that name, exact spelling first, then case-insensitively. */
|
|
31
31
|
export function findContact(contacts, name) {
|
|
32
32
|
const wanted = name.trim();
|
|
33
|
-
return (contacts.find(contact => contact.name === wanted) ??
|
|
34
|
-
contacts.find(contact => contact.name.toLowerCase() === wanted.toLowerCase()));
|
|
33
|
+
return (contacts.find((contact) => contact.name === wanted) ??
|
|
34
|
+
contacts.find((contact) => contact.name.toLowerCase() === wanted.toLowerCase()));
|
|
35
35
|
}
|
|
36
36
|
/** Insert or replace the caller's record of one agent, newest first. */
|
|
37
37
|
export async function saveContact(ctx, contact) {
|
|
38
38
|
const key = contactsKey(principalOf(ctx));
|
|
39
39
|
await locks.run(key, async () => {
|
|
40
|
-
const others = (await listContacts(ctx)).filter(existing => existing.sessionId !== contact.sessionId);
|
|
40
|
+
const others = (await listContacts(ctx)).filter((existing) => existing.sessionId !== contact.sessionId);
|
|
41
41
|
await ctx.host.kv.put(key, [contact, ...others]);
|
|
42
42
|
});
|
|
43
43
|
}
|
|
@@ -39,7 +39,7 @@ export async function ask(ctx, input) {
|
|
|
39
39
|
const startedAt = Date.now();
|
|
40
40
|
const session = await backend.session(name);
|
|
41
41
|
return agentLocks.run(session.sessionId, async () => {
|
|
42
|
-
const contact = (await listContacts(ctx)).find(candidate => candidate.sessionId === session.sessionId);
|
|
42
|
+
const contact = (await listContacts(ctx)).find((candidate) => candidate.sessionId === session.sessionId);
|
|
43
43
|
const created = contact === undefined &&
|
|
44
44
|
session.latestUpdatedSeq === EMPTY_TRANSCRIPT_TAIL &&
|
|
45
45
|
session.createdAtMs >= startedAt - CREATED_WINDOW_MS;
|
|
@@ -75,7 +75,7 @@ export async function ask(ctx, input) {
|
|
|
75
75
|
? `No Grok Bot agent named "${session.name}" existed on this account, so an empty one was created. Check the name if that is unexpected.`
|
|
76
76
|
: undefined,
|
|
77
77
|
runningNote(session.name, replies.status),
|
|
78
|
-
].filter(note => note !== undefined);
|
|
78
|
+
].filter((note) => note !== undefined);
|
|
79
79
|
return {
|
|
80
80
|
agent: session.name,
|
|
81
81
|
sessionId: session.sessionId,
|
|
@@ -92,7 +92,7 @@ export async function check(ctx, input) {
|
|
|
92
92
|
const backend = grokBotAgentsBackend();
|
|
93
93
|
return agentLocks.run(contact.sessionId, async () => {
|
|
94
94
|
// Re-read under the lock: a parallel call may have moved the cursor.
|
|
95
|
-
const current = (await listContacts(ctx)).find(candidate => candidate.sessionId === contact.sessionId) ??
|
|
95
|
+
const current = (await listContacts(ctx)).find((candidate) => candidate.sessionId === contact.sessionId) ??
|
|
96
96
|
contact;
|
|
97
97
|
const replies = await collectReplies(backend, current.sessionId, {
|
|
98
98
|
cursor: current.cursor,
|
|
@@ -180,7 +180,7 @@ function runningNote(name, status) {
|
|
|
180
180
|
: undefined;
|
|
181
181
|
}
|
|
182
182
|
function sleep(ms) {
|
|
183
|
-
return new Promise(resolve => {
|
|
183
|
+
return new Promise((resolve) => {
|
|
184
184
|
setTimeout(resolve, ms);
|
|
185
185
|
});
|
|
186
186
|
}
|
|
@@ -10,7 +10,7 @@ const list = defineTool({
|
|
|
10
10
|
const contacts = await listContacts(ctx);
|
|
11
11
|
return {
|
|
12
12
|
configured: extension.config.agents ?? [],
|
|
13
|
-
contacted: contacts.map(contact => ({
|
|
13
|
+
contacted: contacts.map((contact) => ({
|
|
14
14
|
name: contact.name,
|
|
15
15
|
sessionId: contact.sessionId,
|
|
16
16
|
firstContactAt: contact.firstContactAt,
|
|
@@ -3,7 +3,7 @@ import extension from "../extension.js";
|
|
|
3
3
|
const { repo, path, ref, notes, deploy } = extension.config;
|
|
4
4
|
const treeNotes = notes.length === 0
|
|
5
5
|
? ""
|
|
6
|
-
: `\nAbout this tree in particular; copy these into the brief verbatim:\n\n${notes.map(note => `- ${note}`).join("\n")}\n`;
|
|
6
|
+
: `\nAbout this tree in particular; copy these into the brief verbatim:\n\n${notes.map((note) => `- ${note}`).join("\n")}\n`;
|
|
7
7
|
const yourself = defineSkill({
|
|
8
8
|
description: "Change your own source (instructions, skills, tools, channels, connections, model, deployment) through a one-off Cursor cloud agent and a pull request. Use whenever the ask is about how you yourself behave, including adding or editing a skill, so the change lands in the repository instead of the tree you happen to be running from.",
|
|
9
9
|
markdown: `# Improve yourself
|
|
@@ -31,7 +31,7 @@ const config = z
|
|
|
31
31
|
skills: z.boolean().default(true),
|
|
32
32
|
})
|
|
33
33
|
.default({})
|
|
34
|
-
.transform(options => ({
|
|
34
|
+
.transform((options) => ({
|
|
35
35
|
apiKey: options.apiKey,
|
|
36
36
|
model: options.model ?? DEFAULT_EVALUATION_MODEL,
|
|
37
37
|
harnessTools: options.harnessTools,
|
|
@@ -41,7 +41,7 @@ const jev = defineExtension({
|
|
|
41
41
|
root: import.meta.dirname,
|
|
42
42
|
description: "Ask Jev for typed choice, score, and boolean answers.",
|
|
43
43
|
config,
|
|
44
|
-
contributions: options => ({
|
|
44
|
+
contributions: (options) => ({
|
|
45
45
|
tools: options.harnessTools,
|
|
46
46
|
skills: options.skills,
|
|
47
47
|
}),
|
|
@@ -59,7 +59,7 @@ const evaluateTool = defineTool({
|
|
|
59
59
|
.min(1)
|
|
60
60
|
.describe("One or more typed questions over the same state."),
|
|
61
61
|
})
|
|
62
|
-
.refine(input => new Set(input.questions.map(item => item.id)).size === input.questions.length, "questions must not repeat an id"),
|
|
62
|
+
.refine((input) => new Set(input.questions.map((item) => item.id)).size === input.questions.length, "questions must not repeat an id"),
|
|
63
63
|
async execute(input) {
|
|
64
64
|
return evaluate({
|
|
65
65
|
state: input.state,
|
|
@@ -13,7 +13,7 @@ const react = defineTool({
|
|
|
13
13
|
.string()
|
|
14
14
|
.trim()
|
|
15
15
|
.min(1)
|
|
16
|
-
.refine(value => emojiName(value) !== undefined, "emoji must be a Slack reaction name"),
|
|
16
|
+
.refine((value) => emojiName(value) !== undefined, "emoji must be a Slack reaction name"),
|
|
17
17
|
ts: z.string().trim().min(1).optional(),
|
|
18
18
|
}),
|
|
19
19
|
execute: ({ emoji, ts }) => {
|