@cursor/bdk 0.2.5 → 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 +55 -54
- package/dist/channels/github/github-channel.d.ts +4 -4
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +39 -13
- 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/eval-directive.js +1 -1
- 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.94Iu5dyD.js → app.oyjtOr3W.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.C25zYVuc.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DTKFDlBr.js → VPLocalSearchBox.D0P6J_UJ.js} +1 -1
- package/dist/docs/assets/chunks/{arc.DuzwHEeg.js → arc.B0LY1J1h.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.C6lyhLs0.js → architectureDiagram-Q4EWVU46.dPduLUxY.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.DUNEWlY8.js → baseUniq.B_Ohm21h.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CXOQGI0O.js → blockDiagram-DXYQGD6D.B4zcanaJ.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BYdPE-Oe.js → c4Diagram-AHTNJAMY.D9Iw21nx.js} +1 -1
- package/dist/docs/assets/chunks/channel.CRUyWDV-.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.YIV9HeX0.js → chunk-4BX2VUAB.DDVwRShI.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.BG80DEOc.js → chunk-4TB4RGXK.DsYcdn1i.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.BDKJSZQc.js → chunk-55IACEB6.BzzQvcYp.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.CtYnQqts.js → chunk-EDXVE4YY.BMiXZ7FX.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CityOth-.js → chunk-FMBD7UC4.D_mBcLoc.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CMD22CQX.js → chunk-OYMX7WX6.CMVjWVMx.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.WWpc3ND0.js → chunk-QZHKN3VN.BG-FrPv9.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.BMg-yhj3.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.Buu_LC5q.js → cose-bilkent-S5V4N54A.BVNnCTvY.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.DW7onj6E.js → dagre-KV5264BT.CDN5PR9l.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.B3NxIbEV.js → diagram-5BDNPKRD.DQRUlT-i.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.BJvN6Vkv.js → diagram-G4DWMVQ6.CoeblYQT.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.wfRWrexs.js → diagram-MMDJMWI5.DW3ymjl0.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.7QtjSYio.js → diagram-TYMM5635.BP0uN4Jw.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.jxPgDH1t.js → erDiagram-SMLLAGMA.DVFUWEn4.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BhDWA-TO.js → flowDiagram-DWJPFMVM.HU-eHspv.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.Ijq8iYKv.js → ganttDiagram-T4ZO3ILL.DHNhXijY.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.DXpfW4YG.js → gitGraphDiagram-UUTBAWPF.DkISXcO3.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CoPlssRl.js → graph.CCV0fuRR.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.eJuv_EOz.js → infoDiagram-42DDH7IO.bgILzOoc.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A._OEzenCR.js → ishikawaDiagram-UXIWVN3A.CuryXC0F.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CwlTjirB.js → journeyDiagram-VCZTEJTY.BL1Pr-wu.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.DSp_C8cZ.js → kanban-definition-6JOO6SKY.BbGjvk4l.js} +1 -1
- package/dist/docs/assets/chunks/{layout.Bms9s7uB.js → layout.C4PfdldS.js} +1 -1
- package/dist/docs/assets/chunks/{linear.BjnmB4je.js → linear.C3xD1T6X.js} +1 -1
- package/dist/docs/assets/chunks/{min.CKkYlMsn.js → min.CzgRAQ9c.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.T2d0vJ7X.js → mindmap-definition-QFDTVHPH.CA9rSWum.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DU0RoCvx.js → pieDiagram-DEJITSTG.B8MprgJu.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.9QZjM-x0.js → quadrantDiagram-34T5L4WZ.DndDwbKT.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CZpylJMd.js → requirementDiagram-MS252O5E.Zhfgwlnn.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.CnFdfW95.js → sankeyDiagram-XADWPNL6.B6RRm6N5.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.-jC0PP1t.js → sequenceDiagram-FGHM5R23.Bfmz-1PN.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.DG7yBRUU.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.B3O9koXV.js → theme.gpWjytMh.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Bf9u4Ebb.js → timeline-definition-GMOUNBTQ.Bl1l7M1f.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.BjhbbYE6.js → vennDiagram-DHZGUBPP.Dfle4U0d.js} +1 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.BJrCW6xc.js +162 -0
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.8fRb4Nb5.js → wardleyDiagram-NUSXRM2D.CM_4lmvZ.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.DoOP3zZM.js → xychartDiagram-5P7HB3ND.CHT5X28R.js} +1 -1
- package/dist/docs/assets/{evals.md.LRCSn6Ik.js → evals.md.C851kViu.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/{templates_agentic-owners.md.vtjfwxbf.js → templates_agentic-owners.md.CvmABtia.js} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.vtjfwxbf.lean.js → templates_agentic-owners.md.CvmABtia.lean.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.CX9l9bcg.js → templates_security-reviewer.md.Gh6EF9Us.js} +3 -2
- package/dist/docs/assets/{templates_security-reviewer.md.CX9l9bcg.lean.js → templates_security-reviewer.md.Gh6EF9Us.lean.js} +1 -1
- package/dist/docs/assets/{templates_thermo-quality-review.md.95qmTmr1.js → templates_thermo-quality-review.md.B77UyTrX.js} +1 -1
- package/dist/docs/assets/{templates_thermo-review.md.DQh6Q0C-.js → templates_thermo-review.md.DRJ7mC5U.js} +1 -1
- package/dist/docs/assets/{templates_triage.md.BFlQhWXf.js → templates_triage.md.CNN6b0JZ.js} +3 -3
- package/dist/docs/assets/{templates_triage.md.BFlQhWXf.lean.js → templates_triage.md.CNN6b0JZ.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +35 -35
- package/dist/docs/deployment.html +35 -35
- package/dist/docs/evals.html +37 -37
- package/dist/docs/evals.md +2 -2
- 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 +41 -24
- 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 +35 -35
- package/dist/docs/reference/subagents.html +35 -35
- package/dist/docs/reference/tools.html +35 -35
- package/dist/docs/templates/agentic-owners.html +37 -37
- package/dist/docs/templates/agentic-owners.md +2 -0
- package/dist/docs/templates/grokbot-agents.html +35 -35
- package/dist/docs/templates/security-reviewer.html +38 -37
- package/dist/docs/templates/security-reviewer.md +7 -8
- package/dist/docs/templates/thermo-quality-review.html +37 -37
- package/dist/docs/templates/thermo-quality-review.md +2 -2
- package/dist/docs/templates/thermo-review.html +37 -37
- package/dist/docs/templates/thermo-review.md +2 -2
- package/dist/docs/templates/triage.html +38 -38
- package/dist/docs/templates/triage.md +6 -1
- package/dist/docs/troubleshooting.html +35 -35
- package/dist/evals.d.ts +2 -2
- 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 +92 -153
- 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/eval-runner.js +7 -4
- 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/init-interview.d.ts +0 -1
- package/dist/internal/init-interview.d.ts.map +1 -1
- package/dist/internal/init-interview.js +15 -24
- 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/platform-timers.d.ts +8 -1
- package/dist/internal/platform-timers.d.ts.map +1 -1
- package/dist/internal/platform-timers.js +10 -2
- package/dist/internal/playground/toolchain.js +6 -6
- package/dist/internal/process-memory-telemetry.js +2 -2
- package/dist/internal/reminder-control-plane-protocol.d.ts +8 -1
- package/dist/internal/reminder-control-plane-protocol.d.ts.map +1 -1
- package/dist/internal/reminder-runner.d.ts +13 -3
- package/dist/internal/reminder-runner.d.ts.map +1 -1
- package/dist/internal/reminder-runner.js +78 -53
- package/dist/internal/resolve-prod-target.d.ts +1 -9
- package/dist/internal/resolve-prod-target.d.ts.map +1 -1
- package/dist/internal/resolve-prod-target.js +1 -30
- package/dist/internal/resolved-connections.js +8 -8
- package/dist/internal/run-client.d.ts +11 -1
- package/dist/internal/run-client.d.ts.map +1 -1
- package/dist/internal/run-client.js +197 -59
- 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 +8 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +58 -45
- 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-links.d.ts.map +1 -1
- package/dist/internal/session-links.js +8 -7
- 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 +1 -0
- package/dist/internal/sessions-client.d.ts.map +1 -1
- package/dist/internal/sessions-client.js +8 -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/evals.md +2 -2
- package/docs/reference/cli.md +20 -9
- package/docs/templates/agentic-owners.md +2 -0
- package/docs/templates/security-reviewer.md +7 -8
- package/docs/templates/thermo-quality-review.md +2 -2
- package/docs/templates/thermo-review.md +2 -2
- package/docs/templates/triage.md +6 -1
- package/package.json +1 -1
- package/templates/agents-md/evals/agents.eval.ts +1 -0
- package/templates/code-wiki/bot/instructions.md +4 -4
- package/templates/pr-autofixer/bot/instructions.md +3 -3
- package/templates/security-reviewer/README.md +5 -3
- package/templates/security-reviewer/bot/tools/post_findings.ts +8 -8
- package/templates/thermo-quality-review/bot/tools/post_findings.ts +8 -8
- package/templates/thermo-review/bot/tools/post_findings.ts +8 -8
- package/dist/docs/assets/chunks/@localSearchIndexroot.BITLoOQa.js +0 -1
- package/dist/docs/assets/chunks/channel.B46uXH41.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.0cmCFsSf.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.0cmCFsSf.js +0 -1
- package/dist/docs/assets/chunks/clone.1vTOFZT1.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CbsZcOOu.js +0 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.DEA21akR.js +0 -162
- 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/{evals.md.LRCSn6Ik.lean.js → evals.md.C851kViu.lean.js} +0 -0
- /package/dist/docs/assets/{templates_thermo-quality-review.md.95qmTmr1.lean.js → templates_thermo-quality-review.md.B77UyTrX.lean.js} +0 -0
- /package/dist/docs/assets/{templates_thermo-review.md.DQh6Q0C-.lean.js → templates_thermo-review.md.DRJ7mC5U.lean.js} +0 -0
|
@@ -14,17 +14,32 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
14
14
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
15
|
});
|
|
16
16
|
};
|
|
17
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
17
18
|
import { mergeRequestHeaders } from "./request-headers.js";
|
|
18
|
-
import {
|
|
19
|
+
import { fetchSessionEvents } from "./sessions-client.js";
|
|
20
|
+
import { buildTrajectory, parseEventsNdjson } from "./trajectory.js";
|
|
19
21
|
/** Thrown when a turn stream exceeds `timeoutMs`; carries the session id. */
|
|
20
22
|
export class RunSessionTimeoutError extends Error {
|
|
21
|
-
constructor(message, sessionId
|
|
23
|
+
constructor(message, sessionId,
|
|
24
|
+
/** Events the turn recorded before the deadline. */
|
|
25
|
+
events) {
|
|
22
26
|
super(message);
|
|
23
27
|
this.sessionId = sessionId;
|
|
28
|
+
this.events = events;
|
|
24
29
|
this.name = "RunSessionTimeoutError";
|
|
25
30
|
}
|
|
26
31
|
}
|
|
27
32
|
const TERMINAL_TYPES = new Set(["session.waiting", "session.completed", "session.failed"]);
|
|
33
|
+
const STALL_MS = 5000;
|
|
34
|
+
/** Pause before reopening a stream the server closed; doubles while closes bring nothing. */
|
|
35
|
+
const REOPEN_DELAY_MS = 500;
|
|
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;
|
|
28
43
|
/**
|
|
29
44
|
* Run one or more messages against a live agent-serve base URL
|
|
30
45
|
* (e.g. `http://127.0.0.1:3000/weather-agent`).
|
|
@@ -53,6 +68,7 @@ export function runSession(options) {
|
|
|
53
68
|
startIndex: sessionId === undefined ? 0 : nextEventIndex,
|
|
54
69
|
auth,
|
|
55
70
|
timeoutMs: options.timeoutMs,
|
|
71
|
+
stallMs: options.stallMs,
|
|
56
72
|
signal: options.signal,
|
|
57
73
|
onEvent: options.onEvent,
|
|
58
74
|
purpose: sessionId === undefined ? options.purpose : undefined,
|
|
@@ -80,7 +96,7 @@ export function runSession(options) {
|
|
|
80
96
|
}
|
|
81
97
|
function runOneTurn(args) {
|
|
82
98
|
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
-
var _a, _b, _c, _d, _e;
|
|
99
|
+
var _a, _b, _c, _d, _e, _f;
|
|
84
100
|
let sessionId = args.sessionId;
|
|
85
101
|
let continuationToken = args.continuationToken;
|
|
86
102
|
if (sessionId === undefined) {
|
|
@@ -120,6 +136,7 @@ function runOneTurn(args) {
|
|
|
120
136
|
startIndex: args.startIndex,
|
|
121
137
|
auth: args.auth,
|
|
122
138
|
timeoutMs: args.timeoutMs,
|
|
139
|
+
stallMs: (_f = args.stallMs) !== null && _f !== void 0 ? _f : STALL_MS,
|
|
123
140
|
signal: args.signal,
|
|
124
141
|
onEvent: args.onEvent,
|
|
125
142
|
});
|
|
@@ -128,84 +145,205 @@ function runOneTurn(args) {
|
|
|
128
145
|
return Object.assign(Object.assign({ sessionId }, (continuationToken === undefined ? {} : { continuationToken })), { events, ok: !turnFailed && !sessionFailed });
|
|
129
146
|
});
|
|
130
147
|
}
|
|
148
|
+
/** One turn's events in log order. Replays of events already seen are dropped. */
|
|
149
|
+
class TurnEvents {
|
|
150
|
+
constructor(start, onEvent) {
|
|
151
|
+
this.start = start;
|
|
152
|
+
this.onEvent = onEvent;
|
|
153
|
+
this.events = [];
|
|
154
|
+
this.asks = new Set();
|
|
155
|
+
}
|
|
156
|
+
/** First event index this turn has not recorded. */
|
|
157
|
+
get next() {
|
|
158
|
+
const last = this.events.at(-1);
|
|
159
|
+
return last === undefined ? this.start : last.index + 1;
|
|
160
|
+
}
|
|
161
|
+
/** The turn's terminal event is recorded. */
|
|
162
|
+
get done() {
|
|
163
|
+
const last = this.events.at(-1);
|
|
164
|
+
return last !== undefined && TERMINAL_TYPES.has(last.type);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Waiting on an unanswered approval or auth request. The engine holds the
|
|
168
|
+
* turn open without a terminal event until someone answers.
|
|
169
|
+
*/
|
|
170
|
+
get parked() {
|
|
171
|
+
return this.asks.size > 0;
|
|
172
|
+
}
|
|
173
|
+
add(event) {
|
|
174
|
+
var _a;
|
|
175
|
+
if (this.done || event.index < this.next) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
this.events.push(event);
|
|
179
|
+
if (event.type === "action.approval_requested" || event.type === "action.auth_requested") {
|
|
180
|
+
this.asks.add(event.data.callId);
|
|
181
|
+
}
|
|
182
|
+
else if (event.type === "action.approval_resolved" || event.type === "action.auth_resolved") {
|
|
183
|
+
this.asks.delete(event.data.callId);
|
|
184
|
+
}
|
|
185
|
+
(_a = this.onEvent) === null || _a === void 0 ? void 0 : _a.call(this, event);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Collect one turn's events from `startIndex` through its terminal event.
|
|
190
|
+
*
|
|
191
|
+
* The live stream is the fast path, not the source of truth. Whenever a
|
|
192
|
+
* connection ends without the terminal event (the server closes it, it breaks
|
|
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.
|
|
198
|
+
*/
|
|
131
199
|
function collectStream(args) {
|
|
132
200
|
return __awaiter(this, void 0, void 0, function* () {
|
|
133
|
-
var _a, _b
|
|
134
|
-
var
|
|
135
|
-
const
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
201
|
+
var _a, _b;
|
|
202
|
+
var _c;
|
|
203
|
+
const turn = new TurnEvents(args.startIndex, args.onEvent);
|
|
204
|
+
const readLog = logReader(args, turn);
|
|
205
|
+
const deadline = new AbortController();
|
|
206
|
+
const timer = args.timeoutMs === undefined ? undefined : setTimeout(() => deadline.abort(), args.timeoutMs);
|
|
207
|
+
const signal = args.signal === undefined ? deadline.signal : AbortSignal.any([args.signal, deadline.signal]);
|
|
208
|
+
try {
|
|
209
|
+
let retry = false;
|
|
210
|
+
let closes = 0;
|
|
211
|
+
let refusals = 0;
|
|
212
|
+
for (;;) {
|
|
213
|
+
const seen = turn.next;
|
|
214
|
+
const end = yield followStream(args, turn, signal, retry);
|
|
215
|
+
retry = true;
|
|
216
|
+
if (end === "done" || (yield readLog(signal)) || (end === "quiet" && turn.parked)) {
|
|
217
|
+
return turn.events;
|
|
218
|
+
}
|
|
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") {
|
|
225
|
+
closes = turn.next > seen ? 0 : closes + 1;
|
|
226
|
+
yield sleep(Math.min(REOPEN_DELAY_MS * Math.pow(2, closes), MAX_REOPEN_DELAY_MS), undefined, {
|
|
227
|
+
signal,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
if (!signal.aborted) {
|
|
234
|
+
throw error;
|
|
142
235
|
}
|
|
143
|
-
|
|
144
|
-
args.signal
|
|
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)) {
|
|
238
|
+
return turn.events;
|
|
145
239
|
}
|
|
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);
|
|
244
|
+
}
|
|
245
|
+
finally {
|
|
246
|
+
clearTimeout(timer);
|
|
146
247
|
}
|
|
147
|
-
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Follow one stream connection until the turn's terminal event (`done`), the
|
|
252
|
+
* connection closes or breaks mid-body (`closed`), or it stays silent for
|
|
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.
|
|
256
|
+
*/
|
|
257
|
+
function followStream(args, turn, signal, retry) {
|
|
258
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
259
|
+
const quiet = new AbortController();
|
|
260
|
+
const idle = setTimeout(() => quiet.abort(), args.stallMs);
|
|
148
261
|
try {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
+
}
|
|
153
284
|
if (!resp.ok || resp.body === null) {
|
|
154
285
|
throw new Error(`stream failed (${resp.status})`);
|
|
155
286
|
}
|
|
156
287
|
const reader = resp.body.getReader();
|
|
157
288
|
const decoder = new TextDecoder();
|
|
158
289
|
let buffer = "";
|
|
159
|
-
const events = [];
|
|
160
290
|
for (;;) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
291
|
+
let chunk;
|
|
292
|
+
try {
|
|
293
|
+
chunk = yield reader.read();
|
|
164
294
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
let stop = false;
|
|
169
|
-
for (const line of lines) {
|
|
170
|
-
if (line.trim() === "") {
|
|
171
|
-
continue;
|
|
172
|
-
}
|
|
173
|
-
let event;
|
|
174
|
-
try {
|
|
175
|
-
event = JSON.parse(line);
|
|
176
|
-
}
|
|
177
|
-
catch (_f) {
|
|
178
|
-
continue;
|
|
179
|
-
}
|
|
180
|
-
events.push(event);
|
|
181
|
-
(_a = args.onEvent) === null || _a === void 0 ? void 0 : _a.call(args, event);
|
|
182
|
-
if (TERMINAL_TYPES.has(event.type)) {
|
|
183
|
-
stop = true;
|
|
184
|
-
break;
|
|
295
|
+
catch (error) {
|
|
296
|
+
if (signal.aborted) {
|
|
297
|
+
throw error;
|
|
185
298
|
}
|
|
299
|
+
return quiet.signal.aborted ? "quiet" : "closed";
|
|
186
300
|
}
|
|
187
|
-
if (
|
|
188
|
-
|
|
301
|
+
if (chunk.done) {
|
|
302
|
+
return "closed";
|
|
189
303
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
304
|
+
idle.refresh();
|
|
305
|
+
buffer += decoder.decode(chunk.value, { stream: true });
|
|
306
|
+
const cut = buffer.lastIndexOf("\n") + 1;
|
|
307
|
+
for (const event of parseEventsNdjson(buffer.slice(0, cut))) {
|
|
308
|
+
turn.add(event);
|
|
309
|
+
}
|
|
310
|
+
buffer = buffer.slice(cut);
|
|
311
|
+
if (turn.done) {
|
|
312
|
+
return "done";
|
|
198
313
|
}
|
|
199
|
-
throw new RunSessionTimeoutError(`turn timed out after ${(_e = args.timeoutMs) !== null && _e !== void 0 ? _e : "?"}ms (session ${args.sessionId})`, args.sessionId);
|
|
200
314
|
}
|
|
201
|
-
throw error;
|
|
202
315
|
}
|
|
203
316
|
finally {
|
|
204
|
-
(
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
317
|
+
clearTimeout(idle);
|
|
318
|
+
quiet.abort();
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
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`.
|
|
329
|
+
*/
|
|
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);
|
|
334
|
+
const events = yield fetchSessionEvents({
|
|
335
|
+
baseUrl: args.baseUrl,
|
|
336
|
+
sessionId: args.sessionId,
|
|
337
|
+
auth: args.auth,
|
|
338
|
+
signal: signal === undefined ? budget : AbortSignal.any([signal, budget]),
|
|
339
|
+
}).catch(() => []);
|
|
340
|
+
if (budget.aborted) {
|
|
341
|
+
budgetMs = Math.min(budgetMs * 2, MAX_READ_STALLS * args.stallMs);
|
|
342
|
+
}
|
|
343
|
+
for (const event of events) {
|
|
344
|
+
turn.add(event);
|
|
208
345
|
}
|
|
346
|
+
return turn.done;
|
|
209
347
|
});
|
|
210
348
|
}
|
|
211
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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"}
|
|
@@ -19,9 +19,8 @@ import { Agent, Cursor, createAgentPlatform, } from "@cursor/sdk";
|
|
|
19
19
|
import { SqliteLocalAgentStore } from "@cursor/sdk/sqlite";
|
|
20
20
|
import { DEFAULT_MODEL, } from "../types.js";
|
|
21
21
|
import { mapSdkTokenUsage, usageTokenSum } from "./cloud-turn-cost.js";
|
|
22
|
-
import { resolveApiKeySync } from "./cursor/credentials.js";
|
|
22
|
+
import { resolveApiKeySync, SIGN_IN_HINT } from "./cursor/credentials.js";
|
|
23
23
|
import { describeError } from "./describe-error.js";
|
|
24
|
-
import { CLI_COMMAND_NAME as CLI } from "./distribution.js";
|
|
25
24
|
import { sleep } from "./sleep.js";
|
|
26
25
|
/**
|
|
27
26
|
* How long a non-`--dev` serve holds workspace scans (rules, skills,
|
|
@@ -190,11 +189,12 @@ export class CursorSdkRunner {
|
|
|
190
189
|
this.activeRuns = new Map();
|
|
191
190
|
this.stores = new Map();
|
|
192
191
|
this.prewarmReleases = [];
|
|
192
|
+
this.pendingPersists = new Map();
|
|
193
193
|
if (options.workspaceScanCacheTtlMs !== undefined) {
|
|
194
194
|
Cursor.configure({
|
|
195
195
|
local: { workspaceScanCacheTtlMs: options.workspaceScanCacheTtlMs },
|
|
196
196
|
});
|
|
197
|
-
this.log(`[
|
|
197
|
+
this.log(`[bdk] workspace scan cache ttl=${options.workspaceScanCacheTtlMs}ms`);
|
|
198
198
|
}
|
|
199
199
|
}
|
|
200
200
|
runTurn(request) {
|
|
@@ -205,7 +205,7 @@ export class CursorSdkRunner {
|
|
|
205
205
|
// the Grok Bot runner — running it on the local harness would silently
|
|
206
206
|
// swap the box (and the SendToUser contract) out from under the agent.
|
|
207
207
|
if (request.runtime === "grokbot") {
|
|
208
|
-
throw new Error(`Session ${request.sessionId} is a grokbot turn, which the
|
|
208
|
+
throw new Error(`Session ${request.sessionId} is a grokbot turn, which the local and cloud turn runner cannot execute. Serve must route grokbot turns to the Grok Bot runner.`);
|
|
209
209
|
}
|
|
210
210
|
const models = modelAttemptChain(request);
|
|
211
211
|
let lastError;
|
|
@@ -266,7 +266,7 @@ export class CursorSdkRunner {
|
|
|
266
266
|
}
|
|
267
267
|
// Log the original error even when the retry succeeds so the expiry
|
|
268
268
|
// still shows up in Datadog.
|
|
269
|
-
this.log(`[
|
|
269
|
+
this.log(`[bdk] session ${request.sessionId}: ${reason}: ${outcome.errorMessage}; retrying the turn`);
|
|
270
270
|
try {
|
|
271
271
|
return yield this.runTurnAttempt(tracked);
|
|
272
272
|
}
|
|
@@ -276,7 +276,7 @@ export class CursorSdkRunner {
|
|
|
276
276
|
});
|
|
277
277
|
}
|
|
278
278
|
logModelFallback(sessionId, from, to, message) {
|
|
279
|
-
this.log(`[
|
|
279
|
+
this.log(`[bdk] session ${sessionId}: cannot use model ${modelSettingLabel(from)}; retrying on ${modelSettingLabel(to)}: ${message !== null && message !== void 0 ? message : "model unavailable"}`);
|
|
280
280
|
}
|
|
281
281
|
runTurnAttempt(request) {
|
|
282
282
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -363,17 +363,18 @@ export class CursorSdkRunner {
|
|
|
363
363
|
this.activeRuns.delete(request.sessionId);
|
|
364
364
|
}
|
|
365
365
|
signal === null || signal === void 0 ? void 0 : signal.removeEventListener("abort", onAbort);
|
|
366
|
-
// Mirror the conversation
|
|
367
|
-
// be parked as soon as the execution reply
|
|
368
|
-
//
|
|
369
|
-
//
|
|
370
|
-
//
|
|
371
|
-
//
|
|
372
|
-
//
|
|
373
|
-
//
|
|
374
|
-
//
|
|
366
|
+
// Mirror the conversation without holding the turn outcome: on
|
|
367
|
+
// hosted v2 the pod can be parked as soon as the execution reply
|
|
368
|
+
// lands, so the engine's durability drain awaits this write through
|
|
369
|
+
// drainConversation before that reply, not before turn.completed.
|
|
370
|
+
// In the `finally` so a `wait()` that THROWS (transport death
|
|
371
|
+
// mid-turn, an abort with no follow-up) still persists the
|
|
372
|
+
// checkpoints the turn already wrote — the store is local SQLite,
|
|
373
|
+
// safe to read on the throw path, and persistConversation swallows
|
|
374
|
+
// its own errors. Guarded here (not just inside the helper) so
|
|
375
|
+
// unmirrored turns keep their exact post-wait sequencing.
|
|
375
376
|
if (request.runtime === "local" && this.options.conversationMirror !== undefined) {
|
|
376
|
-
|
|
377
|
+
this.trackPersist(request.sessionId, this.persistConversation(request, agent.agentId));
|
|
377
378
|
}
|
|
378
379
|
}
|
|
379
380
|
}
|
|
@@ -395,7 +396,7 @@ export class CursorSdkRunner {
|
|
|
395
396
|
return yield run.steer(request.text);
|
|
396
397
|
}
|
|
397
398
|
catch (error) {
|
|
398
|
-
this.log(`[
|
|
399
|
+
this.log(`[bdk] session ${request.sessionId}: steer failed: ${describeError(error)}`);
|
|
399
400
|
return "revert_to_followup";
|
|
400
401
|
}
|
|
401
402
|
});
|
|
@@ -431,8 +432,22 @@ export class CursorSdkRunner {
|
|
|
431
432
|
}
|
|
432
433
|
this.evictAgent(sessionId, cached.agent);
|
|
433
434
|
}
|
|
435
|
+
drainConversation(sessionId) {
|
|
436
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
437
|
+
yield this.pendingPersists.get(sessionId);
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
trackPersist(sessionId, persist) {
|
|
441
|
+
const tracked = Promise.all([this.pendingPersists.get(sessionId), persist]).then(() => {
|
|
442
|
+
if (this.pendingPersists.get(sessionId) === tracked) {
|
|
443
|
+
this.pendingPersists.delete(sessionId);
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
this.pendingPersists.set(sessionId, tracked);
|
|
447
|
+
}
|
|
434
448
|
dispose() {
|
|
435
449
|
return __awaiter(this, void 0, void 0, function* () {
|
|
450
|
+
yield Promise.allSettled([...this.pendingPersists.values()]);
|
|
436
451
|
const releases = this.prewarmReleases.splice(0);
|
|
437
452
|
yield Promise.allSettled(releases.map(release => release()));
|
|
438
453
|
const agents = yield Promise.allSettled([...this.agents.values()].map(handle => handle.agent));
|
|
@@ -453,7 +468,7 @@ export class CursorSdkRunner {
|
|
|
453
468
|
}
|
|
454
469
|
// Past this age the handle's exchanged access token could expire
|
|
455
470
|
// mid-turn. Retire it and reopen below on a fresh transport.
|
|
456
|
-
this.log(`[
|
|
471
|
+
this.log(`[bdk] session ${request.sessionId}: recycling the SDK agent handle after ${Math.round(ageMs / 60000)} min so the turn runs on a fresh access token`);
|
|
457
472
|
this.evictAgent(request.sessionId, cached.agent);
|
|
458
473
|
}
|
|
459
474
|
const agentPromise = this.openAgent(request).catch(error => {
|
|
@@ -492,7 +507,7 @@ export class CursorSdkRunner {
|
|
|
492
507
|
requireApiKey() {
|
|
493
508
|
const resolved = resolveApiKeySync({ apiKey: this.options.apiKey });
|
|
494
509
|
if (resolved === undefined) {
|
|
495
|
-
throw new Error(`
|
|
510
|
+
throw new Error(`BDK needs a Cursor credential to run turns. ${SIGN_IN_HINT}`);
|
|
496
511
|
}
|
|
497
512
|
return resolved.apiKey;
|
|
498
513
|
}
|
|
@@ -562,7 +577,7 @@ export class CursorSdkRunner {
|
|
|
562
577
|
// conversation under the same id beats failing this thread's turns
|
|
563
578
|
// forever ("Agent … not found" on every follow-up). The channel's
|
|
564
579
|
// warm-turn prompt context re-hydrates the thread history.
|
|
565
|
-
this.log(`[
|
|
580
|
+
this.log(`[bdk] no stored conversation for ${agentId} on this host; starting a fresh one`);
|
|
566
581
|
return Agent.create(Object.assign(Object.assign({}, options), { agentId }));
|
|
567
582
|
}
|
|
568
583
|
});
|
|
@@ -599,7 +614,7 @@ export class CursorSdkRunner {
|
|
|
599
614
|
// session would otherwise fail every future turn. Mirror the local
|
|
600
615
|
// host-replacement path above: a fresh conversation beats failing this
|
|
601
616
|
// thread forever, and the new id binds to the session for later resumes.
|
|
602
|
-
this.log(`[
|
|
617
|
+
this.log(`[bdk] cloud session ${request.sessionId} has no bound cloud agent; creating a fresh one`);
|
|
603
618
|
return Agent.create(options);
|
|
604
619
|
});
|
|
605
620
|
}
|
|
@@ -623,7 +638,7 @@ export class CursorSdkRunner {
|
|
|
623
638
|
yield mirror.persist(store, sdkAgentId);
|
|
624
639
|
}
|
|
625
640
|
catch (error) {
|
|
626
|
-
this.log(`[
|
|
641
|
+
this.log(`[bdk] conversation mirror: persist for ${sdkAgentId} failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
627
642
|
}
|
|
628
643
|
});
|
|
629
644
|
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* routes, custom channel routes (under `/v1/channels/<id>`), and the
|
|
5
5
|
* server-level health / info / dev-dispatch routes.
|
|
6
6
|
*/
|
|
7
|
+
import { type ServerResponse } from "node:http";
|
|
7
8
|
import type { AgentProject, AgentServeHandle, ServeOptions } from "../types.js";
|
|
8
9
|
import type { McpOauthSecretsTarget } from "./mcp-oauth-persist.js";
|
|
9
10
|
import { type AgentRunner } from "./sdk-runner.js";
|
|
@@ -24,6 +25,12 @@ export interface StartServerInternalOptions {
|
|
|
24
25
|
sessionRunLog?: ReturnType<typeof selectSessionRunLogStore>;
|
|
25
26
|
/** Test seam: persist the engine start.log tee without a live store. */
|
|
26
27
|
startLogStore?: ReturnType<typeof selectStartLogStore>;
|
|
28
|
+
/**
|
|
29
|
+
* `bdk eval` server. Cases drive seeded sessions, so live SCM and deployment
|
|
30
|
+
* ingest stay off, and a Cursor account GitHub credential that cannot be
|
|
31
|
+
* minted fails only the calls that need it.
|
|
32
|
+
*/
|
|
33
|
+
evals?: boolean;
|
|
27
34
|
}
|
|
28
35
|
/**
|
|
29
36
|
* Start an HTTP server hosting one or more agents. A single agent with an
|
|
@@ -31,4 +38,5 @@ export interface StartServerInternalOptions {
|
|
|
31
38
|
* under `/<slug>/v1/*` and `/<slug>/playground`, with an index at `/`.
|
|
32
39
|
*/
|
|
33
40
|
export declare function startServer(mounts: AgentMount[], options?: ServeOptions & StartServerInternalOptions): Promise<AgentServeHandle>;
|
|
41
|
+
export declare function writeFetchResponse(response: Response, res: ServerResponse, method?: string): Promise<void>;
|
|
34
42
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAsC,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AA6CpF,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAQhB,YAAY,EACb,MAAM,aAAa,CAAC;AA2FrB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAgDpE,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AAUpE,OAAO,EAEL,wBAAwB,EAEzB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAsB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAW/E,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;CACvB;AAuCD,6EAA6E;AAC7E,MAAM,WAAW,0BAA0B;IACzC,oEAAoE;IACpE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,yEAAyE;IACzE,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;IAC5D,wEAAwE;IACxE,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IACvD;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,GAAE,YAAY,GAAG,0BAA+B,GACtD,OAAO,CAAC,gBAAgB,CAAC,CAwmC3B;AAilDD,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,cAAc,EACnB,MAAM,SAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAkDf"}
|