@cursor/bdk 0.2.6 → 0.2.7
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 +52 -57
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +34 -8
- package/dist/channels/github/types.d.ts +6 -0
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +37 -29
- package/dist/channels/slack/external-policy.d.ts.map +1 -1
- package/dist/channels/slack/external-policy.js +6 -6
- package/dist/channels/slack/inbound.d.ts +5 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +13 -0
- package/dist/channels/slack/index.d.ts +3 -0
- package/dist/channels/slack/index.d.ts.map +1 -1
- package/dist/channels/slack/index.js +3 -0
- package/dist/channels/slack/log.d.ts +1 -1
- package/dist/channels/slack/log.js +1 -1
- package/dist/channels/slack/self-identity.d.ts +15 -0
- package/dist/channels/slack/self-identity.d.ts.map +1 -0
- package/dist/channels/slack/self-identity.js +48 -0
- package/dist/channels/slack/sender-name.d.ts +17 -0
- package/dist/channels/slack/sender-name.d.ts.map +1 -0
- package/dist/channels/slack/sender-name.js +87 -0
- package/dist/channels/slack/setup.js +1 -1
- package/dist/channels/slack/user-info.d.ts +15 -0
- package/dist/channels/slack/user-info.d.ts.map +1 -0
- package/dist/channels/slack/user-info.js +57 -0
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.CJLKDVza.js → app.oyjtOr3W.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.C25zYVuc.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.BW9mrQmq.js → VPLocalSearchBox.D0P6J_UJ.js} +1 -1
- package/dist/docs/assets/chunks/{arc.D8ZOvM1m.js → arc.B0LY1J1h.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CXEKhLW-.js → architectureDiagram-Q4EWVU46.dPduLUxY.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.BJkVKblr.js → baseUniq.B_Ohm21h.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DQDbHxor.js → blockDiagram-DXYQGD6D.B4zcanaJ.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.ByMD6LYM.js → c4Diagram-AHTNJAMY.D9Iw21nx.js} +1 -1
- package/dist/docs/assets/chunks/channel.CRUyWDV-.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.Dtq1aVI9.js → chunk-4BX2VUAB.DDVwRShI.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.BL_XrkoQ.js → chunk-4TB4RGXK.DsYcdn1i.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.BDPXu94_.js → chunk-55IACEB6.BzzQvcYp.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DhGOQj4k.js → chunk-EDXVE4YY.BMiXZ7FX.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DSF5nr8v.js → chunk-FMBD7UC4.D_mBcLoc.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Day7wayw.js → chunk-OYMX7WX6.CMVjWVMx.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.CpBEC0zA.js → chunk-QZHKN3VN.BG-FrPv9.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.X_7rY1rx.js → chunk-YZCP3GAM.CkFE1ap3.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CG_UObcQ.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CG_UObcQ.js +1 -0
- package/dist/docs/assets/chunks/clone.NYSZ9qZN.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BVRmi2ko.js → cose-bilkent-S5V4N54A.BVNnCTvY.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.Dei9oslB.js → dagre-KV5264BT.CDN5PR9l.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD._M-efGt7.js → diagram-5BDNPKRD.DQRUlT-i.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.D1Vmhfsj.js → diagram-G4DWMVQ6.CoeblYQT.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.cE1bmvAC.js → diagram-MMDJMWI5.DW3ymjl0.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.DkXAfznP.js → diagram-TYMM5635.BP0uN4Jw.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DH_pSwPg.js → erDiagram-SMLLAGMA.DVFUWEn4.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.kAWVN9j1.js → flowDiagram-DWJPFMVM.HU-eHspv.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.8r0w49-p.js → ganttDiagram-T4ZO3ILL.DHNhXijY.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.BDa7Bi1i.js → gitGraphDiagram-UUTBAWPF.DkISXcO3.js} +1 -1
- package/dist/docs/assets/chunks/{graph.BMPXHz_B.js → graph.CCV0fuRR.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.BmlcqewS.js → infoDiagram-42DDH7IO.bgILzOoc.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.CVSEQSul.js → ishikawaDiagram-UXIWVN3A.CuryXC0F.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BpeWJ5n-.js → journeyDiagram-VCZTEJTY.BL1Pr-wu.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.DHbDXuxB.js → kanban-definition-6JOO6SKY.BbGjvk4l.js} +1 -1
- package/dist/docs/assets/chunks/{layout.CzrCDgkP.js → layout.C4PfdldS.js} +1 -1
- package/dist/docs/assets/chunks/{linear.HwBsflwN.js → linear.C3xD1T6X.js} +1 -1
- package/dist/docs/assets/chunks/{min.DqGHolT3.js → min.CzgRAQ9c.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.ZYGlOawh.js → mindmap-definition-QFDTVHPH.CA9rSWum.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.C2KRXlNR.js → pieDiagram-DEJITSTG.B8MprgJu.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CHj3Qefp.js → quadrantDiagram-34T5L4WZ.DndDwbKT.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.B1L4Tf7k.js → requirementDiagram-MS252O5E.Zhfgwlnn.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.dNR2yi1B.js → sankeyDiagram-XADWPNL6.B6RRm6N5.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.BrvQ3C6m.js → sequenceDiagram-FGHM5R23.Bfmz-1PN.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BtehEykA.js → stateDiagram-FHFEXIEX.gbrdNqgj.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DOOmulfQ.js +1 -0
- package/dist/docs/assets/chunks/{theme.BDHBZUkP.js → theme.gpWjytMh.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Bn7nhqEN.js → timeline-definition-GMOUNBTQ.Bl1l7M1f.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.DKhc38sz.js → vennDiagram-DHZGUBPP.Dfle4U0d.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.DOXQ0w8J.js → wardley-RL74JXVD.BJrCW6xc.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.Bbq5B2Ic.js → wardleyDiagram-NUSXRM2D.CM_4lmvZ.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B77HE1K8.js → xychartDiagram-5P7HB3ND.CHT5X28R.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.BsgDqYPh.js → reference_cli.md.GwugN3n-.js} +5 -5
- package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +1 -0
- package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
- package/dist/docs/building-with-agents.html +35 -35
- package/dist/docs/deployment.html +35 -35
- 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 +35 -35
- 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 +20 -9
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +35 -35
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +39 -39
- package/dist/docs/reference/cli.md +20 -9
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +35 -35
- package/dist/docs/reference/hooks.html +35 -35
- package/dist/docs/reference/http-api.html +35 -35
- package/dist/docs/reference/instructions.html +35 -35
- package/dist/docs/reference/playground.html +35 -35
- package/dist/docs/reference/project-layout.html +35 -35
- package/dist/docs/reference/prompt.html +35 -35
- package/dist/docs/reference/schedules.html +35 -35
- package/dist/docs/reference/sessions.html +35 -35
- package/dist/docs/reference/skills.html +38 -38
- package/dist/docs/reference/subagents.html +35 -35
- package/dist/docs/reference/tools.html +35 -35
- package/dist/docs/templates/agentic-owners.html +35 -35
- package/dist/docs/templates/grokbot-agents.html +35 -35
- package/dist/docs/templates/security-reviewer.html +35 -35
- package/dist/docs/templates/thermo-quality-review.html +35 -35
- package/dist/docs/templates/thermo-review.html +35 -35
- package/dist/docs/templates/triage.html +35 -35
- package/dist/docs/troubleshooting.html +35 -35
- package/dist/extensions/cursor-cloud-agents/extension.d.ts +14 -0
- package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.js +5 -0
- package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts +17 -0
- package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/watch.js +99 -0
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.d.ts +19 -0
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +71 -0
- package/dist/extensions/cursor-cloud-agents/skills/handoff.md +9 -5
- package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/cancel.js +3 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +3 -2
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.js +1 -1
- package/dist/files-backends/cursor-hosted.d.ts +22 -83
- package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/files-backends/cursor-hosted.js +46 -160
- package/dist/files.d.ts +9 -32
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +7 -32
- package/dist/internal/artifacts-store.d.ts +13 -25
- package/dist/internal/artifacts-store.d.ts.map +1 -1
- package/dist/internal/artifacts-store.js +25 -46
- package/dist/internal/cli-ax.d.ts +10 -17
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +87 -155
- package/dist/internal/cli-bitbucket.js +5 -5
- package/dist/internal/cli-deploy.d.ts +4 -1
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +117 -20
- package/dist/internal/cli-github.js +13 -13
- package/dist/internal/cli-gitlab.js +5 -5
- package/dist/internal/continuation-identity.d.ts +2 -0
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +4 -0
- package/dist/internal/conversation-mirror.d.ts +9 -38
- package/dist/internal/conversation-mirror.d.ts.map +1 -1
- package/dist/internal/conversation-mirror.js +62 -68
- package/dist/internal/cursor/account-mcp.d.ts +1 -1
- package/dist/internal/cursor/account-mcp.js +1 -1
- package/dist/internal/cursor/backend-client.js +1 -1
- package/dist/internal/cursor/github-credentials.js +3 -3
- package/dist/internal/cursor/hosted-bound-secrets.d.ts +6 -2
- package/dist/internal/cursor/hosted-bound-secrets.d.ts.map +1 -1
- package/dist/internal/cursor/hosted-bound-secrets.js +13 -2
- package/dist/internal/cursor/hosted-store-secrets.d.ts +13 -37
- package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +13 -37
- package/dist/internal/cursor/store-api-client.d.ts +17 -39
- package/dist/internal/cursor/store-api-client.d.ts.map +1 -1
- package/dist/internal/cursor/store-api-client.js +15 -37
- package/dist/internal/cursor-deployment-relay.js +3 -3
- package/dist/internal/cursor-event-relay.js +1 -1
- package/dist/internal/cursor-relay-core.d.ts +1 -1
- package/dist/internal/cursor-relay-core.d.ts.map +1 -1
- package/dist/internal/deploy-client.d.ts +55 -63
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +48 -28
- package/dist/internal/discovery/agent.d.ts +1 -1
- package/dist/internal/discovery/agent.d.ts.map +1 -1
- package/dist/internal/discovery/agent.js +4 -0
- package/dist/internal/discovery/extensions.d.ts +2 -1
- package/dist/internal/discovery/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +11 -1
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +1 -0
- package/dist/internal/distribution.d.ts +2 -2
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +2 -2
- package/dist/internal/docs-site.js +3 -3
- package/dist/internal/eval-run-store.js +8 -8
- package/dist/internal/framework-file-storage.d.ts +10 -34
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +12 -39
- package/dist/internal/framework-storage-selection.d.ts +10 -46
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +15 -64
- package/dist/internal/github-fanout.js +2 -2
- package/dist/internal/handleAgentServeTrigger.d.ts +5 -8
- package/dist/internal/handleAgentServeTrigger.d.ts.map +1 -1
- package/dist/internal/handleAgentServeTrigger.js +5 -8
- package/dist/internal/host-files.js +6 -9
- package/dist/internal/host-platforms.js +5 -5
- package/dist/internal/hosted-catch.d.ts +3 -2
- package/dist/internal/hosted-catch.d.ts.map +1 -1
- package/dist/internal/hosted-catch.js +27 -9
- package/dist/internal/hosted-delivery-protocol.d.ts +31 -8
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +102 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +32 -12
- package/dist/internal/hosted-execution-diag.d.ts +13 -24
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
- package/dist/internal/hosted-execution-diag.js +11 -20
- package/dist/internal/hosted-execution-flush.d.ts +22 -10
- package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
- package/dist/internal/hosted-execution-flush.js +45 -9
- package/dist/internal/hosted-managed-automation.js +5 -5
- package/dist/internal/hosting.d.ts +5 -10
- package/dist/internal/hosting.d.ts.map +1 -1
- package/dist/internal/hosting.js +5 -10
- package/dist/internal/legacy-command-guard.d.ts +1 -4
- package/dist/internal/legacy-command-guard.d.ts.map +1 -1
- package/dist/internal/legacy-command-guard.js +2 -11
- package/dist/internal/listen-port.js +1 -1
- package/dist/internal/local-control-plane.js +6 -6
- package/dist/internal/logs-client.d.ts +20 -1
- package/dist/internal/logs-client.d.ts.map +1 -1
- package/dist/internal/logs-client.js +89 -1
- package/dist/internal/mcp-endpoint.js +1 -1
- package/dist/internal/otel/collector.js +1 -1
- package/dist/internal/otel/runtime.js +13 -13
- package/dist/internal/platform-schedule-sync.js +2 -2
- package/dist/internal/playground/toolchain.js +6 -6
- package/dist/internal/process-memory-telemetry.js +2 -2
- package/dist/internal/reminder-runner.d.ts +8 -3
- package/dist/internal/reminder-runner.d.ts.map +1 -1
- package/dist/internal/reminder-runner.js +51 -52
- package/dist/internal/resolve-prod-target.d.ts +1 -12
- package/dist/internal/resolve-prod-target.d.ts.map +1 -1
- package/dist/internal/resolve-prod-target.js +2 -32
- package/dist/internal/resolved-connections.js +8 -8
- package/dist/internal/run-client.d.ts +4 -3
- package/dist/internal/run-client.d.ts.map +1 -1
- package/dist/internal/run-client.js +98 -61
- package/dist/internal/runtime-dispatch-runner.d.ts +1 -0
- package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
- package/dist/internal/runtime-dispatch-runner.js +7 -1
- package/dist/internal/schedule-runner.js +1 -1
- package/dist/internal/sdk-runner.d.ts +4 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +37 -22
- package/dist/internal/server.d.ts +2 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +39 -38
- package/dist/internal/session-engine.d.ts +31 -44
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +67 -83
- package/dist/internal/session-run-log.d.ts +10 -24
- package/dist/internal/session-run-log.d.ts.map +1 -1
- package/dist/internal/session-run-log.js +13 -27
- package/dist/internal/sessions-client.d.ts.map +1 -1
- package/dist/internal/sessions-client.js +6 -3
- package/dist/internal/skills-sync.d.ts +3 -5
- package/dist/internal/skills-sync.d.ts.map +1 -1
- package/dist/internal/skills-sync.js +3 -5
- package/dist/internal/start-log-store.d.ts +7 -18
- package/dist/internal/start-log-store.d.ts.map +1 -1
- package/dist/internal/start-log-store.js +47 -24
- package/dist/internal/storage-coordinator.d.ts +7 -10
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +18 -20
- package/dist/internal/storage-roles.d.ts +5 -0
- package/dist/internal/storage-roles.d.ts.map +1 -1
- package/dist/internal/store-api-protocol.d.ts +12 -33
- package/dist/internal/store-api-protocol.d.ts.map +1 -1
- package/dist/internal/store-api-protocol.js +6 -22
- package/dist/internal/store-mirror.d.ts +4 -5
- package/dist/internal/store-mirror.d.ts.map +1 -1
- package/dist/internal/store-mirror.js +6 -8
- package/dist/internal/turn-lease-store.d.ts +12 -5
- package/dist/internal/turn-lease-store.d.ts.map +1 -1
- package/dist/internal/turn-lease-store.js +61 -8
- package/dist/internal/v2-hosting.d.ts +4 -7
- package/dist/internal/v2-hosting.d.ts.map +1 -1
- package/dist/internal/v2-hosting.js +4 -7
- package/dist/internal/workspace-sync.d.ts +3 -6
- package/dist/internal/workspace-sync.d.ts.map +1 -1
- package/dist/internal/workspace-sync.js +3 -6
- package/dist/internal/workspace.d.ts +10 -16
- package/dist/internal/workspace.d.ts.map +1 -1
- package/dist/internal/workspace.js +9 -14
- package/dist/memory.d.ts +17 -43
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +34 -80
- package/dist/playground/assets/index-DPKLl4C_.css +1 -0
- package/dist/playground/assets/index-MijLHTbB.js +71 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage-backends/cursor-hosted-v2.d.ts +8 -36
- package/dist/storage-backends/cursor-hosted-v2.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted-v2.js +9 -37
- package/dist/storage-backends/cursor-hosted.d.ts +17 -30
- package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted.js +14 -27
- package/dist/storage-protocol.d.ts +13 -38
- package/dist/storage-protocol.d.ts.map +1 -1
- package/dist/storage-protocol.js +14 -39
- package/dist/types.d.ts +29 -30
- package/dist/types.d.ts.map +1 -1
- package/docs/reference/cli.md +20 -9
- package/package.json +1 -1
- package/templates/pr-autofixer/bot/instructions.md +3 -3
- package/dist/docs/assets/chunks/@localSearchIndexroot.Bq-pxRXm.js +0 -1
- package/dist/docs/assets/chunks/channel.DCU8W1RP.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DwpXsM06.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DwpXsM06.js +0 -1
- package/dist/docs/assets/chunks/clone.DH6Mx2zB.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.kzD0-U89.js +0 -1
- package/dist/docs/assets/reference_cli.md.BsgDqYPh.lean.js +0 -1
- package/dist/playground/assets/index-6BbTPnaT.css +0 -1
- package/dist/playground/assets/index-CI7FAmOP.js +0 -71
- /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Resolve a hosted (managed) agent-sdk deployment into a base URL +
|
|
3
|
-
* request headers for chat/run/call
|
|
3
|
+
* request headers for chat/run/call `--prod`.
|
|
4
4
|
*
|
|
5
5
|
* Uses short-lived `engineAccess` from the deployment status route
|
|
6
6
|
* (Cursor API key on the management API; `X-Anyrun-Port-Token` on the
|
|
@@ -20,7 +20,7 @@ import { resolveDeployAuth } from "./cli-deploy.js";
|
|
|
20
20
|
import { cursorWebsiteUrl } from "./cursor/credentials.js";
|
|
21
21
|
import { DeployApiError, slugFromDirectoryName, validateDeploymentSlug, } from "./deploy-client.js";
|
|
22
22
|
import { CLI_COMMAND_NAME as CLI } from "./distribution.js";
|
|
23
|
-
import { deploymentArchitecture, rejectV2ForLegacyCommand
|
|
23
|
+
import { deploymentArchitecture, rejectV2ForLegacyCommand } from "./legacy-command-guard.js";
|
|
24
24
|
import { sleep as defaultSleep } from "./sleep.js";
|
|
25
25
|
import { stderrPalette } from "./terminal-style.js";
|
|
26
26
|
/**
|
|
@@ -66,8 +66,6 @@ export function resolveProdTarget(options) {
|
|
|
66
66
|
err,
|
|
67
67
|
});
|
|
68
68
|
if (typeof auth === "number") {
|
|
69
|
-
// Not "--prod": `eval` resolves the hosted deployment by default,
|
|
70
|
-
// without any flag.
|
|
71
69
|
throw new Error(`Could not resolve Cursor credentials/team for the hosted deployment (see above).`);
|
|
72
70
|
}
|
|
73
71
|
if (options.skipLegacyArchitectureCheck !== true) {
|
|
@@ -75,7 +73,6 @@ export function resolveProdTarget(options) {
|
|
|
75
73
|
client: auth.client,
|
|
76
74
|
teamId: auth.teamId,
|
|
77
75
|
slug,
|
|
78
|
-
command: options.command,
|
|
79
76
|
});
|
|
80
77
|
}
|
|
81
78
|
// A hibernated engine can briefly omit engineAccess while getPod fails
|
|
@@ -173,33 +170,6 @@ export function resolveProdPlaygroundUrl(options) {
|
|
|
173
170
|
return Object.assign(Object.assign({}, resolved), { architecture });
|
|
174
171
|
});
|
|
175
172
|
}
|
|
176
|
-
/**
|
|
177
|
-
* Look up a running deployment and return its stable alias playground URL.
|
|
178
|
-
* Does not mint `engineAccess` — the browser signs in with the alias token.
|
|
179
|
-
* Throws {@link Error} with a CLI-ready message on failure.
|
|
180
|
-
*/
|
|
181
|
-
export function resolveProdAliasPlaygroundUrl(options) {
|
|
182
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
183
|
-
var _a;
|
|
184
|
-
const err = (_a = options.err) !== null && _a !== void 0 ? _a : ((text) => void process.stderr.write(text));
|
|
185
|
-
const slug = resolveProdSlug(options);
|
|
186
|
-
const auth = yield resolveDeployAuth({
|
|
187
|
-
team: options.team,
|
|
188
|
-
apiKey: options.apiKey,
|
|
189
|
-
fetchImpl: options.fetchImpl,
|
|
190
|
-
err,
|
|
191
|
-
});
|
|
192
|
-
if (typeof auth === "number") {
|
|
193
|
-
throw new Error(`Could not resolve Cursor credentials/team for the hosted deployment (see above).`);
|
|
194
|
-
}
|
|
195
|
-
yield rejectV2ForLegacyCommand({
|
|
196
|
-
client: auth.client,
|
|
197
|
-
teamId: auth.teamId,
|
|
198
|
-
slug,
|
|
199
|
-
});
|
|
200
|
-
return resolveProdAliasPlaygroundUrlWithAuth(options, auth, slug, err);
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
173
|
function resolveProdAliasPlaygroundUrlWithAuth(options, auth, slug, err) {
|
|
204
174
|
return __awaiter(this, void 0, void 0, function* () {
|
|
205
175
|
let detail;
|
|
@@ -26,7 +26,7 @@ export function validateMountConnectionsConfig(args) {
|
|
|
26
26
|
if (filteredRefs.length === 0) {
|
|
27
27
|
return;
|
|
28
28
|
}
|
|
29
|
-
throw new Error(`[
|
|
29
|
+
throw new Error(`[bdk] agent "${label}" has Cursor account MCP connections with \`servers\` filters (${filteredRefs
|
|
30
30
|
.map(ref => ref.name)
|
|
31
31
|
.join(", ")}) but no --public-url; cloud-runtime turns cannot honor those filters without a public bridge URL. Set --public-url or remove the \`servers\` filter.`);
|
|
32
32
|
}
|
|
@@ -41,7 +41,7 @@ export function assertCloudCanHonorAccountServersFilters(args) {
|
|
|
41
41
|
if (blocked.length === 0) {
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
|
-
throw new Error(`[
|
|
44
|
+
throw new Error(`[bdk] cloud turn cannot honor Cursor account \`servers\` filters (${blocked
|
|
45
45
|
.map(connection => connection.name)
|
|
46
46
|
.join(", ")}) without --public-url; set --public-url so cloud turns reach the filtered account bridge instead of falling back to native connectors.`);
|
|
47
47
|
}
|
|
@@ -53,7 +53,7 @@ export function assertAccountConnectionsNotAnonymous(args) {
|
|
|
53
53
|
if (args.allowAnonymousCursorAccountMcp === true) {
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
|
-
throw new Error("[
|
|
56
|
+
throw new Error("[bdk] --allow-anonymous cannot be used with Cursor account MCP connections (defineConnection({ cursorAccount: true })); use --bearer-token, or opt in with --allow-anonymous-cursor-account-mcp behind a trusted boundary.");
|
|
57
57
|
}
|
|
58
58
|
export function resolveMountConnections(args) {
|
|
59
59
|
const agent = args.project.agent;
|
|
@@ -66,15 +66,15 @@ export function resolveMountConnections(args) {
|
|
|
66
66
|
.map(connection => connection.name);
|
|
67
67
|
if (hostOauthNames.length > 0) {
|
|
68
68
|
args.logger(args.cloudToolsBridge === true
|
|
69
|
-
? `[
|
|
70
|
-
: `[
|
|
69
|
+
? `[bdk] agent "${label}": host-OAuth MCP connections (${hostOauthNames.join(", ")}) reach cloud turns through the host connection bridge; their tokens stay on this serve host.`
|
|
70
|
+
: `[bdk] warning: agent "${label}" has host-OAuth MCP connections (${hostOauthNames.join(", ")}) whose tokens live on this serve host; cloud-runtime turns omit them. Serve with a cloud tools URL so they reach turns through the host connection bridge, or drop \`oauth\` and authorize the server another way.`);
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
if (args.peerRefs !== undefined && args.peerRefs.length > 0) {
|
|
74
74
|
const peers = resolvePeerConnections(Object.assign(Object.assign({ refs: args.peerRefs, serverUrl: args.serverUrl }, (args.publicUrl === undefined ? {} : { publicUrl: args.publicUrl })), (args.authToken === undefined ? {} : { authToken: args.authToken })));
|
|
75
75
|
resolved.push(...peers);
|
|
76
76
|
if (cloudCapable && args.publicUrl === undefined) {
|
|
77
|
-
args.logger(`[
|
|
77
|
+
args.logger(`[bdk] warning: agent "${label}" has peer MCP connections (${peers
|
|
78
78
|
.map(peer => peer.name)
|
|
79
79
|
.join(", ")}) but no --public-url; cloud-runtime turns cannot reach this host's loopback address, so peers are omitted from cloud turns.`);
|
|
80
80
|
}
|
|
@@ -85,8 +85,8 @@ export function resolveMountConnections(args) {
|
|
|
85
85
|
args.accountBridge.logPreflight(args.accountRefs);
|
|
86
86
|
if (cloudCapable && args.publicUrl === undefined) {
|
|
87
87
|
args.logger(args.cloudToolsBridge === true
|
|
88
|
-
? `[
|
|
89
|
-
: `[
|
|
88
|
+
? `[bdk] agent "${label}": cloud-runtime turns reach filtered account connections through the host connection bridge (unfiltered ones fall back to the account's native connectors).`
|
|
89
|
+
: `[bdk] agent "${label}": cloud-runtime turns omit the account bridge without --public-url (cloud agents fall back to the account's native connectors).`);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
return resolved;
|
|
@@ -22,10 +22,11 @@ export interface RunClientOptions extends RequestAuth {
|
|
|
22
22
|
/** Abort a hung turn. */
|
|
23
23
|
timeoutMs?: number;
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
26
|
-
* settle the turn
|
|
25
|
+
* Longest any single read may stay silent: a quiet stream connection ends
|
|
26
|
+
* so the session's durable log can settle the turn, and each log read is
|
|
27
|
+
* bounded. Default 5s.
|
|
27
28
|
*/
|
|
28
|
-
|
|
29
|
+
stallMs?: number;
|
|
29
30
|
/** External cancel (combined with {@link timeoutMs} when both are set). */
|
|
30
31
|
signal?: AbortSignal;
|
|
31
32
|
/** Called for each stream event as it arrives (for CLI progress). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-client.d.ts","sourceRoot":"","sources":["../../src/internal/run-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEtF,6EAA6E;AAC7E,qBAAa,sBAAuB,SAAQ,KAAK;IAG7C,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE;IAJjC,YACE,OAAO,EAAE,MAAM,EACN,SAAS,EAAE,MAAM;IAC1B,oDAAoD;IAC3C,MAAM,EAAE,YAAY,EAAE,EAIhC;CACF;AACD,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB
|
|
1
|
+
{"version":3,"file":"run-client.d.ts","sourceRoot":"","sources":["../../src/internal/run-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEtF,6EAA6E;AAC7E,qBAAa,sBAAuB,SAAQ,KAAK;IAG7C,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE;IAJjC,YACE,OAAO,EAAE,MAAM,EACN,SAAS,EAAE,MAAM;IAC1B,oDAAoD;IAC3C,MAAM,EAAE,YAAY,EAAE,EAIhC;CACF;AACD,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,qEAAqE;IACrE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,OAAO,CAAC;IACZ;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAcD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,gBAAgB,GAAG;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,gEAAgE;IAChE,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B,GACA,OAAO,CAAC,gBAAgB,CAAC,CA0D3B"}
|
|
@@ -30,10 +30,16 @@ export class RunSessionTimeoutError extends Error {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
const TERMINAL_TYPES = new Set(["session.waiting", "session.completed", "session.failed"]);
|
|
33
|
-
const
|
|
33
|
+
const STALL_MS = 5000;
|
|
34
34
|
/** Pause before reopening a stream the server closed; doubles while closes bring nothing. */
|
|
35
35
|
const REOPEN_DELAY_MS = 500;
|
|
36
36
|
const MAX_REOPEN_DELAY_MS = 8000;
|
|
37
|
+
/** Refused reopens in a row, with no progress, before the turn fails. */
|
|
38
|
+
const MAX_REFUSALS = 5;
|
|
39
|
+
/** Reopen statuses worth retrying; any other failed open fails the turn. */
|
|
40
|
+
const TRANSIENT_STATUSES = new Set([429, 502, 503, 504]);
|
|
41
|
+
/** A log read's budget grows to at most this many `stallMs`; the deadline's last read gets all of it. */
|
|
42
|
+
const MAX_READ_STALLS = 4;
|
|
37
43
|
/**
|
|
38
44
|
* Run one or more messages against a live agent-serve base URL
|
|
39
45
|
* (e.g. `http://127.0.0.1:3000/weather-agent`).
|
|
@@ -62,7 +68,7 @@ export function runSession(options) {
|
|
|
62
68
|
startIndex: sessionId === undefined ? 0 : nextEventIndex,
|
|
63
69
|
auth,
|
|
64
70
|
timeoutMs: options.timeoutMs,
|
|
65
|
-
|
|
71
|
+
stallMs: options.stallMs,
|
|
66
72
|
signal: options.signal,
|
|
67
73
|
onEvent: options.onEvent,
|
|
68
74
|
purpose: sessionId === undefined ? options.purpose : undefined,
|
|
@@ -90,7 +96,7 @@ export function runSession(options) {
|
|
|
90
96
|
}
|
|
91
97
|
function runOneTurn(args) {
|
|
92
98
|
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
-
var _a, _b, _c, _d, _e;
|
|
99
|
+
var _a, _b, _c, _d, _e, _f;
|
|
94
100
|
let sessionId = args.sessionId;
|
|
95
101
|
let continuationToken = args.continuationToken;
|
|
96
102
|
if (sessionId === undefined) {
|
|
@@ -130,7 +136,7 @@ function runOneTurn(args) {
|
|
|
130
136
|
startIndex: args.startIndex,
|
|
131
137
|
auth: args.auth,
|
|
132
138
|
timeoutMs: args.timeoutMs,
|
|
133
|
-
|
|
139
|
+
stallMs: (_f = args.stallMs) !== null && _f !== void 0 ? _f : STALL_MS,
|
|
134
140
|
signal: args.signal,
|
|
135
141
|
onEvent: args.onEvent,
|
|
136
142
|
});
|
|
@@ -142,19 +148,20 @@ function runOneTurn(args) {
|
|
|
142
148
|
/** One turn's events in log order. Replays of events already seen are dropped. */
|
|
143
149
|
class TurnEvents {
|
|
144
150
|
constructor(start, onEvent) {
|
|
151
|
+
this.start = start;
|
|
145
152
|
this.onEvent = onEvent;
|
|
146
153
|
this.events = [];
|
|
147
|
-
this.ended = false;
|
|
148
154
|
this.asks = new Set();
|
|
149
|
-
this.cursor = start;
|
|
150
155
|
}
|
|
151
156
|
/** First event index this turn has not recorded. */
|
|
152
157
|
get next() {
|
|
153
|
-
|
|
158
|
+
const last = this.events.at(-1);
|
|
159
|
+
return last === undefined ? this.start : last.index + 1;
|
|
154
160
|
}
|
|
155
161
|
/** The turn's terminal event is recorded. */
|
|
156
162
|
get done() {
|
|
157
|
-
|
|
163
|
+
const last = this.events.at(-1);
|
|
164
|
+
return last !== undefined && TERMINAL_TYPES.has(last.type);
|
|
158
165
|
}
|
|
159
166
|
/**
|
|
160
167
|
* Waiting on an unanswered approval or auth request. The engine holds the
|
|
@@ -165,19 +172,17 @@ class TurnEvents {
|
|
|
165
172
|
}
|
|
166
173
|
add(event) {
|
|
167
174
|
var _a;
|
|
168
|
-
if (this.
|
|
175
|
+
if (this.done || event.index < this.next) {
|
|
169
176
|
return;
|
|
170
177
|
}
|
|
171
|
-
this.cursor = event.index + 1;
|
|
172
178
|
this.events.push(event);
|
|
173
|
-
(_a = this.onEvent) === null || _a === void 0 ? void 0 : _a.call(this, event);
|
|
174
179
|
if (event.type === "action.approval_requested" || event.type === "action.auth_requested") {
|
|
175
180
|
this.asks.add(event.data.callId);
|
|
176
181
|
}
|
|
177
182
|
else if (event.type === "action.approval_resolved" || event.type === "action.auth_resolved") {
|
|
178
183
|
this.asks.delete(event.data.callId);
|
|
179
184
|
}
|
|
180
|
-
this.
|
|
185
|
+
(_a = this.onEvent) === null || _a === void 0 ? void 0 : _a.call(this, event);
|
|
181
186
|
}
|
|
182
187
|
}
|
|
183
188
|
/**
|
|
@@ -185,27 +190,38 @@ class TurnEvents {
|
|
|
185
190
|
*
|
|
186
191
|
* The live stream is the fast path, not the source of truth. Whenever a
|
|
187
192
|
* connection ends without the terminal event (the server closes it, it breaks
|
|
188
|
-
* mid-body, or
|
|
189
|
-
* turn
|
|
190
|
-
* the stream after the last event recorded.
|
|
191
|
-
* more
|
|
193
|
+
* mid-body, goes quiet, or a reopen is refused), the session's durable log
|
|
194
|
+
* decides. A finished turn returns, as does a parked one once its stream has
|
|
195
|
+
* gone quiet; anything else reopens the stream after the last event recorded.
|
|
196
|
+
* At the deadline the log is read once more with the full read budget, and a
|
|
197
|
+
* finished or parked turn returns instead of timing out.
|
|
192
198
|
*/
|
|
193
199
|
function collectStream(args) {
|
|
194
200
|
return __awaiter(this, void 0, void 0, function* () {
|
|
195
|
-
var _a;
|
|
196
|
-
var
|
|
201
|
+
var _a, _b;
|
|
202
|
+
var _c;
|
|
197
203
|
const turn = new TurnEvents(args.startIndex, args.onEvent);
|
|
204
|
+
const readLog = logReader(args, turn);
|
|
198
205
|
const deadline = new AbortController();
|
|
199
206
|
const timer = args.timeoutMs === undefined ? undefined : setTimeout(() => deadline.abort(), args.timeoutMs);
|
|
200
207
|
const signal = args.signal === undefined ? deadline.signal : AbortSignal.any([args.signal, deadline.signal]);
|
|
201
208
|
try {
|
|
202
|
-
|
|
209
|
+
let retry = false;
|
|
210
|
+
let closes = 0;
|
|
211
|
+
let refusals = 0;
|
|
212
|
+
for (;;) {
|
|
203
213
|
const seen = turn.next;
|
|
204
|
-
const end = yield followStream(args, turn, signal);
|
|
205
|
-
|
|
214
|
+
const end = yield followStream(args, turn, signal, retry);
|
|
215
|
+
retry = true;
|
|
216
|
+
if (end === "done" || (yield readLog(signal)) || (end === "quiet" && turn.parked)) {
|
|
206
217
|
return turn.events;
|
|
207
218
|
}
|
|
208
|
-
|
|
219
|
+
const refused = typeof end === "object" ? end.refused : undefined;
|
|
220
|
+
refusals = refused !== undefined && turn.next === seen ? refusals + 1 : 0;
|
|
221
|
+
if (refusals === MAX_REFUSALS) {
|
|
222
|
+
throw new Error(`stream refused ${MAX_REFUSALS} reopens in a row, last: ${refused} (session ${args.sessionId})`);
|
|
223
|
+
}
|
|
224
|
+
if (end !== "quiet") {
|
|
209
225
|
closes = turn.next > seen ? 0 : closes + 1;
|
|
210
226
|
yield sleep(Math.min(REOPEN_DELAY_MS * Math.pow(2, closes), MAX_REOPEN_DELAY_MS), undefined, {
|
|
211
227
|
signal,
|
|
@@ -217,13 +233,14 @@ function collectStream(args) {
|
|
|
217
233
|
if (!signal.aborted) {
|
|
218
234
|
throw error;
|
|
219
235
|
}
|
|
220
|
-
if ((_a = args.signal) === null || _a === void 0 ? void 0 : _a.aborted)
|
|
221
|
-
|
|
222
|
-
}
|
|
223
|
-
if (yield settled(args, turn)) {
|
|
236
|
+
if (!((_a = args.signal) === null || _a === void 0 ? void 0 : _a.aborted) &&
|
|
237
|
+
((yield readLog(args.signal, MAX_READ_STALLS * args.stallMs)) || turn.parked)) {
|
|
224
238
|
return turn.events;
|
|
225
239
|
}
|
|
226
|
-
|
|
240
|
+
if ((_b = args.signal) === null || _b === void 0 ? void 0 : _b.aborted) {
|
|
241
|
+
throw new Error("cancelled");
|
|
242
|
+
}
|
|
243
|
+
throw new RunSessionTimeoutError(`turn timed out after ${(_c = args.timeoutMs) !== null && _c !== void 0 ? _c : "?"}ms (session ${args.sessionId})`, args.sessionId, turn.events);
|
|
227
244
|
}
|
|
228
245
|
finally {
|
|
229
246
|
clearTimeout(timer);
|
|
@@ -233,55 +250,69 @@ function collectStream(args) {
|
|
|
233
250
|
/**
|
|
234
251
|
* Follow one stream connection until the turn's terminal event (`done`), the
|
|
235
252
|
* connection closes or breaks mid-body (`closed`), or it stays silent for
|
|
236
|
-
* `
|
|
253
|
+
* `stallMs` (`quiet`). A stream that cannot be opened throws, except that a
|
|
254
|
+
* `retry` is `refused` on a network error, 429, 502, 503 or 504. Anything
|
|
255
|
+
* that goes wrong recording events throws.
|
|
237
256
|
*/
|
|
238
|
-
function followStream(args, turn, signal) {
|
|
257
|
+
function followStream(args, turn, signal, retry) {
|
|
239
258
|
return __awaiter(this, void 0, void 0, function* () {
|
|
240
|
-
var _a;
|
|
241
259
|
const quiet = new AbortController();
|
|
242
|
-
const idle = setTimeout(() => quiet.abort(),
|
|
243
|
-
let opened = false;
|
|
260
|
+
const idle = setTimeout(() => quiet.abort(), args.stallMs);
|
|
244
261
|
try {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
262
|
+
let resp;
|
|
263
|
+
try {
|
|
264
|
+
resp = yield fetch(`${args.baseUrl}/v1/session/${args.sessionId}/stream?startIndex=${turn.next}`, {
|
|
265
|
+
headers: mergeRequestHeaders(args.auth),
|
|
266
|
+
signal: AbortSignal.any([signal, quiet.signal]),
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
if (signal.aborted) {
|
|
271
|
+
throw error;
|
|
272
|
+
}
|
|
273
|
+
if (quiet.signal.aborted) {
|
|
274
|
+
return "quiet";
|
|
275
|
+
}
|
|
276
|
+
if (retry) {
|
|
277
|
+
return { refused: error instanceof Error ? error.message : String(error) };
|
|
278
|
+
}
|
|
279
|
+
throw error;
|
|
280
|
+
}
|
|
281
|
+
if (retry && TRANSIENT_STATUSES.has(resp.status)) {
|
|
282
|
+
return { refused: String(resp.status) };
|
|
283
|
+
}
|
|
249
284
|
if (!resp.ok || resp.body === null) {
|
|
250
285
|
throw new Error(`stream failed (${resp.status})`);
|
|
251
286
|
}
|
|
252
|
-
opened = true;
|
|
253
287
|
const reader = resp.body.getReader();
|
|
254
288
|
const decoder = new TextDecoder();
|
|
255
289
|
let buffer = "";
|
|
256
290
|
for (;;) {
|
|
257
|
-
|
|
291
|
+
let chunk;
|
|
292
|
+
try {
|
|
293
|
+
chunk = yield reader.read();
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
if (signal.aborted) {
|
|
297
|
+
throw error;
|
|
298
|
+
}
|
|
299
|
+
return quiet.signal.aborted ? "quiet" : "closed";
|
|
300
|
+
}
|
|
258
301
|
if (chunk.done) {
|
|
259
302
|
return "closed";
|
|
260
303
|
}
|
|
261
304
|
idle.refresh();
|
|
262
305
|
buffer += decoder.decode(chunk.value, { stream: true });
|
|
263
|
-
const
|
|
264
|
-
for (const event of parseEventsNdjson(buffer.slice(0,
|
|
306
|
+
const cut = buffer.lastIndexOf("\n") + 1;
|
|
307
|
+
for (const event of parseEventsNdjson(buffer.slice(0, cut))) {
|
|
265
308
|
turn.add(event);
|
|
266
309
|
}
|
|
267
|
-
buffer = buffer.slice(
|
|
310
|
+
buffer = buffer.slice(cut);
|
|
268
311
|
if (turn.done) {
|
|
269
312
|
return "done";
|
|
270
313
|
}
|
|
271
314
|
}
|
|
272
315
|
}
|
|
273
|
-
catch (error) {
|
|
274
|
-
if (signal.aborted) {
|
|
275
|
-
throw error;
|
|
276
|
-
}
|
|
277
|
-
if (quiet.signal.aborted) {
|
|
278
|
-
return "quiet";
|
|
279
|
-
}
|
|
280
|
-
if (opened) {
|
|
281
|
-
return "closed";
|
|
282
|
-
}
|
|
283
|
-
throw error;
|
|
284
|
-
}
|
|
285
316
|
finally {
|
|
286
317
|
clearTimeout(idle);
|
|
287
318
|
quiet.abort();
|
|
@@ -289,24 +320,30 @@ function followStream(args, turn, signal) {
|
|
|
289
320
|
});
|
|
290
321
|
}
|
|
291
322
|
/**
|
|
292
|
-
*
|
|
293
|
-
*
|
|
294
|
-
*
|
|
323
|
+
* Reads the turn's events from the session's durable log; each read resolves
|
|
324
|
+
* true once the log holds the terminal event. A read gets `ms`, by default a
|
|
325
|
+
* budget that starts at `stallMs` and doubles each time a read times out, up
|
|
326
|
+
* to MAX_READ_STALLS. It never shrinks within the turn, so a slow log answers
|
|
327
|
+
* every read once the budget has grown, and a hung one holds each quiet cycle
|
|
328
|
+
* for at most MAX_READ_STALLS x `stallMs`.
|
|
295
329
|
*/
|
|
296
|
-
function
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
const budget = AbortSignal.timeout(
|
|
330
|
+
function logReader(args, turn) {
|
|
331
|
+
let budgetMs = args.stallMs;
|
|
332
|
+
return (signal_1, ...args_1) => __awaiter(this, [signal_1, ...args_1], void 0, function* (signal, ms = budgetMs) {
|
|
333
|
+
const budget = AbortSignal.timeout(ms);
|
|
300
334
|
const events = yield fetchSessionEvents({
|
|
301
335
|
baseUrl: args.baseUrl,
|
|
302
336
|
sessionId: args.sessionId,
|
|
303
337
|
auth: args.auth,
|
|
304
338
|
signal: signal === undefined ? budget : AbortSignal.any([signal, budget]),
|
|
305
339
|
}).catch(() => []);
|
|
340
|
+
if (budget.aborted) {
|
|
341
|
+
budgetMs = Math.min(budgetMs * 2, MAX_READ_STALLS * args.stallMs);
|
|
342
|
+
}
|
|
306
343
|
for (const event of events) {
|
|
307
344
|
turn.add(event);
|
|
308
345
|
}
|
|
309
|
-
return turn.done
|
|
346
|
+
return turn.done;
|
|
310
347
|
});
|
|
311
348
|
}
|
|
312
349
|
function postJson(baseUrl, path, body, auth) {
|
|
@@ -19,6 +19,7 @@ export declare class RuntimeDispatchingRunner implements AgentRunner {
|
|
|
19
19
|
text: string;
|
|
20
20
|
}): Promise<SteerAckOutcome>;
|
|
21
21
|
prewarm(request: RunnerPrewarmRequest): Promise<PrewarmOutcome>;
|
|
22
|
+
drainConversation(sessionId: string): Promise<void>;
|
|
22
23
|
dispose(): Promise<void>;
|
|
23
24
|
}
|
|
24
25
|
//# sourceMappingURL=runtime-dispatch-runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-dispatch-runner.d.ts","sourceRoot":"","sources":["../../src/internal/runtime-dispatch-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,qBAAa,wBAAyB,YAAW,WAAW;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,+BAA+B,EAAI;IAEnE,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAK9D;IAEK,KAAK,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAElF;IAEK,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CASpE;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7B;CACF"}
|
|
1
|
+
{"version":3,"file":"runtime-dispatch-runner.d.ts","sourceRoot":"","sources":["../../src/internal/runtime-dispatch-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,qBAAa,wBAAyB,YAAW,WAAW;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,+BAA+B,EAAI;IAEnE,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAK9D;IAEK,KAAK,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAElF;IAEK,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CASpE;IAEK,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExD;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7B;CACF"}
|
|
@@ -40,10 +40,16 @@ export class RuntimeDispatchingRunner {
|
|
|
40
40
|
// local-runtime agents.
|
|
41
41
|
return ((_c = (_b = (_a = this.options.sdkRunner).prewarm) === null || _b === void 0 ? void 0 : _b.call(_a, request)) !== null && _c !== void 0 ? _c : {
|
|
42
42
|
warmed: false,
|
|
43
|
-
reason: "the
|
|
43
|
+
reason: "the local and cloud turn runner does not support prewarming",
|
|
44
44
|
});
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
|
+
drainConversation(sessionId) {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
var _a, _b;
|
|
50
|
+
yield (_b = (_a = this.options.sdkRunner).drainConversation) === null || _b === void 0 ? void 0 : _b.call(_a, sessionId);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
47
53
|
dispose() {
|
|
48
54
|
return __awaiter(this, void 0, void 0, function* () {
|
|
49
55
|
var _a, _b, _c, _d;
|
|
@@ -68,7 +68,7 @@ export class ScheduleRunner {
|
|
|
68
68
|
for (const schedule of this.schedules) {
|
|
69
69
|
if (schedule.cron.matches(now)) {
|
|
70
70
|
void this.dispatch(schedule.name).catch(error => {
|
|
71
|
-
this.logger(`[
|
|
71
|
+
this.logger(`[bdk] schedule "${schedule.name}" dispatch failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
74
|
}
|
|
@@ -24,6 +24,7 @@ export interface AgentRunner {
|
|
|
24
24
|
* success over a workspace that was never touched.
|
|
25
25
|
*/
|
|
26
26
|
prewarm?(request: RunnerPrewarmRequest): Promise<PrewarmOutcome>;
|
|
27
|
+
drainConversation?(sessionId: string): Promise<void>;
|
|
27
28
|
dispose?(): Promise<void>;
|
|
28
29
|
}
|
|
29
30
|
/**
|
|
@@ -113,6 +114,7 @@ export declare class CursorSdkRunner implements AgentRunner {
|
|
|
113
114
|
private readonly activeRuns;
|
|
114
115
|
private readonly stores;
|
|
115
116
|
private readonly prewarmReleases;
|
|
117
|
+
private readonly pendingPersists;
|
|
116
118
|
constructor(options?: CursorSdkRunnerOptions);
|
|
117
119
|
runTurn(request: RunnerTurnRequest): Promise<TurnOutcome>;
|
|
118
120
|
/**
|
|
@@ -146,6 +148,8 @@ export declare class CursorSdkRunner implements AgentRunner {
|
|
|
146
148
|
* delivery.
|
|
147
149
|
*/
|
|
148
150
|
evictSession(sessionId: string): void;
|
|
151
|
+
drainConversation(sessionId: string): Promise<void>;
|
|
152
|
+
private trackPersist;
|
|
149
153
|
dispose(): Promise<void>;
|
|
150
154
|
private getAgent;
|
|
151
155
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-runner.d.ts","sourceRoot":"","sources":["../../src/internal/sdk-runner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,cAAc,EAEnB,KAAK,SAAS,EAEf,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"sdk-runner.d.ts","sourceRoot":"","sources":["../../src/internal/sdk-runner.ts"],"names":[],"mappings":"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"}
|