@cursor/bdk 0.2.11 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/agent-serve.js +28 -26
- package/dist/channels/bitbucket/api.js +8 -8
- package/dist/channels/bitbucket/binding.js +4 -4
- package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +1 -1
- package/dist/channels/bitbucket/checks.js +1 -1
- package/dist/channels/bitbucket/cursor-account.js +1 -1
- package/dist/channels/bitbucket/events.js +1 -1
- package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
- package/dist/channels/checks.js +2 -2
- package/dist/channels/deployments/deployments-channel.js +1 -1
- package/dist/channels/github/cursor-account.js +3 -3
- package/dist/channels/github/defaults.js +3 -3
- package/dist/channels/github/events.js +1 -1
- package/dist/channels/github/forward.js +8 -8
- package/dist/channels/github/github-channel.js +2 -2
- package/dist/channels/github/index.d.ts +22 -12
- package/dist/channels/github/index.d.ts.map +1 -1
- package/dist/channels/github/index.js +11 -12
- package/dist/channels/gitlab/binding.js +4 -4
- package/dist/channels/gitlab/checks.js +1 -1
- package/dist/channels/gitlab/cursor-account.js +1 -1
- package/dist/channels/gitlab/events.js +1 -1
- package/dist/channels/gitlab/gitlab-channel.js +1 -1
- package/dist/channels/gitlab/gitlab-webhook.js +1 -1
- package/dist/channels/gitlab/replay.js +2 -2
- package/dist/channels/origin/binding.js +3 -3
- package/dist/channels/origin/checks.js +1 -1
- package/dist/channels/origin/cursor-account.js +1 -1
- package/dist/channels/origin/events.js +1 -1
- package/dist/channels/origin/index.d.ts +21 -11
- package/dist/channels/origin/index.d.ts.map +1 -1
- package/dist/channels/origin/index.js +10 -11
- package/dist/channels/origin/origin-channel.js +1 -1
- package/dist/channels/origin/origin-webhook.js +2 -2
- package/dist/channels/slack/agentic-delivery.js +3 -3
- package/dist/channels/slack/agentic-signals.js +1 -1
- package/dist/channels/slack/api.js +5 -5
- package/dist/channels/slack/approvals.js +1 -1
- package/dist/channels/slack/attachments.js +3 -3
- package/dist/channels/slack/blocks.js +3 -3
- package/dist/channels/slack/bot-mentions.js +4 -4
- package/dist/channels/slack/channel-watch.js +4 -4
- package/dist/channels/slack/cli-project.js +3 -3
- package/dist/channels/slack/dispatch.js +1 -1
- package/dist/channels/slack/doctor.js +1 -1
- package/dist/channels/slack/eval-directive.js +1 -1
- package/dist/channels/slack/footer.js +1 -1
- package/dist/channels/slack/interactive.js +2 -2
- package/dist/channels/slack/log.d.ts.map +1 -1
- package/dist/channels/slack/log.js +1 -1
- package/dist/channels/slack/manifest.js +1 -1
- package/dist/channels/slack/nudge-carrier.js +1 -1
- package/dist/channels/slack/nudge-store.js +2 -2
- package/dist/channels/slack/recording-sink.js +6 -6
- package/dist/channels/slack/reply-options.js +6 -6
- package/dist/channels/slack/self-identity.d.ts +7 -4
- package/dist/channels/slack/self-identity.d.ts.map +1 -1
- package/dist/channels/slack/self-identity.js +17 -8
- package/dist/channels/slack/sender-name.d.ts.map +1 -1
- package/dist/channels/slack/sender-name.js +2 -6
- package/dist/channels/slack/setup.d.ts.map +1 -1
- package/dist/channels/slack/setup.js +1 -1
- package/dist/channels/slack/slack-channel.js +2 -2
- package/dist/channels/slack/socket-mode.js +2 -2
- package/dist/channels/slack/thread-context.js +8 -8
- package/dist/channels/slack/tool-cards.js +1 -1
- package/dist/channels/slack/user-info.d.ts +2 -1
- package/dist/channels/slack/user-info.d.ts.map +1 -1
- package/dist/channels/slack/user-info.js +16 -1
- package/dist/channels.js +1 -1
- package/dist/docs/404.html +3 -3
- package/dist/docs/assets/{app.DXI7bwox.js → app.CaLG1pPt.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.DvlKuIO-.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.BrbO5mEe.js → VPLocalSearchBox.YsP_2wqD.js} +2 -2
- package/dist/docs/assets/chunks/{arc.BOG1yms8.js → arc.C2j9hR7c.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.C0hsMZnZ.js → architectureDiagram-Q4EWVU46.C5qkGp7y.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.H044KjKs.js → baseUniq.U6GgTHOD.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.BsRW6GoB.js → blockDiagram-DXYQGD6D.D51mJop2.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.B9HV5PFR.js → c4Diagram-AHTNJAMY.w1d6QxV7.js} +1 -1
- package/dist/docs/assets/chunks/channel.BRSFxCcD.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CPoT_ajl.js → chunk-4BX2VUAB.B_A815un.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DZBwWuCL.js → chunk-4TB4RGXK.DMrm-ZCb.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.CZ3yTiyq.js → chunk-55IACEB6.8qw6Xdal.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.6DfvHSd8.js → chunk-EDXVE4YY.Cq_nHODn.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CpBj8HfK.js → chunk-FMBD7UC4.B67ohCYn.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.BdKo8YqS.js → chunk-OYMX7WX6.Bo8rQI8F.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnXNyxJx.js → chunk-QZHKN3VN.BERUMfE9.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.Cg1OcF8G.js → chunk-YZCP3GAM.DWG2tXIX.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Cmtm6WkN.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Cmtm6WkN.js +1 -0
- package/dist/docs/assets/chunks/clone.JMC96Eo6.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.1SP8al9c.js → cose-bilkent-S5V4N54A.tezXBs9b.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.DS1L6hJt.js → dagre-KV5264BT.aSbEUwT7.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.ChsausbG.js → diagram-5BDNPKRD.vnT6aJ57.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.3XsptNWj.js → diagram-G4DWMVQ6.hGYdrDa2.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DPA9Dk_P.js → diagram-MMDJMWI5.CmdSUP6L.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.BVswXWrB.js → diagram-TYMM5635.BbAnLEBB.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.BSak5OSP.js → erDiagram-SMLLAGMA.H40W4HWE.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.CQgN4TTz.js → flowDiagram-DWJPFMVM.BFMtUSv-.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.GrT0kA4a.js → ganttDiagram-T4ZO3ILL.CbYiu7Dt.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CdS7Ucll.js → gitGraphDiagram-UUTBAWPF.Cyc5mzZD.js} +1 -1
- package/dist/docs/assets/chunks/{graph.BVqKRmRo.js → graph.BRptDG1H.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.C3C9FRto.js → infoDiagram-42DDH7IO.Bz6KCA3a.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js → ishikawaDiagram-UXIWVN3A.DDJ_7_Fq.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CaHMfK4b.js → journeyDiagram-VCZTEJTY.D0t_ltlb.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.CjhIUwcA.js → kanban-definition-6JOO6SKY.DyyNsMfi.js} +1 -1
- package/dist/docs/assets/chunks/{layout.CGU3gfSf.js → layout.Cbxq-Rhp.js} +1 -1
- package/dist/docs/assets/chunks/{linear.DaihpW_n.js → linear.DxGYL0MP.js} +1 -1
- package/dist/docs/assets/chunks/{min.BS-j8kHQ.js → min.DA5KL8wu.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.BVJ1Bbnk.js → mindmap-definition-QFDTVHPH.Bc72Utls.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.Cz1WIv9r.js → pieDiagram-DEJITSTG.BtpHnIB_.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DKLFxcjy.js → quadrantDiagram-34T5L4WZ.Cx4oCSRR.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.BHegiK7x.js → requirementDiagram-MS252O5E.BC0hXWlW.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.DYkY6yPc.js → sankeyDiagram-XADWPNL6.Dg8T1SEp.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DYQ1QUrI.js → sequenceDiagram-FGHM5R23.CWSdHYAF.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.Iru8BsFo.js → stateDiagram-FHFEXIEX.0MVPRI28.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.N4Am6sXd.js +1 -0
- package/dist/docs/assets/chunks/{theme.DaplWQhQ.js → theme.DO1avLBn.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.BwFA8hiX.js → timeline-definition-GMOUNBTQ.BuRinAVi.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CZ60W1C_.js → vennDiagram-DHZGUBPP.DXf0PCoJ.js} +1 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD._eATmGtu.js +162 -0
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.B69D2r8-.js → wardleyDiagram-NUSXRM2D.T4ThngYV.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CLPZEIU9.js → xychartDiagram-5P7HB3ND.b4pZF3D5.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.Bljpve-y.js → reference_connections.md.DLrgAd5f.js} +1 -1
- package/dist/docs/assets/{reference_hooks.md.C5LCJ1R3.js → reference_hooks.md.B-eGa2km.js} +3 -3
- package/dist/docs/assets/{reference_hooks.md.C5LCJ1R3.lean.js → reference_hooks.md.B-eGa2km.lean.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.CM5zo3w4.js → reference_sessions.md.CyM7ARz1.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
- package/dist/docs/assets/{reference_tools.md.v3SXVSs_.js → reference_tools.md.DzIY9JzY.js} +3 -3
- package/dist/docs/assets/{reference_tools.md.v3SXVSs_.lean.js → reference_tools.md.DzIY9JzY.lean.js} +1 -1
- package/dist/docs/assets/{style.C130MVnH.css → style.Dwls12uf.css} +1 -1
- package/dist/docs/building-with-agents.html +37 -37
- package/dist/docs/deployment.html +37 -37
- package/dist/docs/evals.html +37 -37
- package/dist/docs/guides/agent-to-agent.html +37 -37
- package/dist/docs/guides/bitbucket.html +37 -37
- package/dist/docs/guides/cloud-agents.html +37 -37
- package/dist/docs/guides/convert-automation.html +37 -37
- package/dist/docs/guides/github.html +37 -37
- package/dist/docs/guides/gitlab.html +37 -37
- package/dist/docs/guides/grokbot-agents.html +37 -37
- package/dist/docs/guides/hooks.html +37 -37
- package/dist/docs/guides/improve.html +37 -37
- package/dist/docs/guides/jev.html +37 -37
- package/dist/docs/guides/mcp-oauth.html +37 -37
- package/dist/docs/guides/migrate.html +37 -37
- package/dist/docs/guides/opentelemetry.html +37 -37
- package/dist/docs/guides/slack.html +37 -37
- package/dist/docs/guides/webhooks.html +37 -37
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +37 -37
- package/dist/docs/index.html +37 -37
- package/dist/docs/llms-full.txt +15 -2
- package/dist/docs/quickstart.html +37 -37
- package/dist/docs/reference/agent-config.html +37 -37
- package/dist/docs/reference/artifacts.html +37 -37
- package/dist/docs/reference/channels.html +37 -37
- package/dist/docs/reference/cli.html +37 -37
- package/dist/docs/reference/connections.html +39 -39
- package/dist/docs/reference/connections.md +2 -1
- package/dist/docs/reference/evals.html +37 -37
- package/dist/docs/reference/extensions.html +37 -37
- package/dist/docs/reference/hooks.html +39 -39
- package/dist/docs/reference/hooks.md +1 -0
- package/dist/docs/reference/http-api.html +37 -37
- package/dist/docs/reference/instructions.html +37 -37
- package/dist/docs/reference/playground.html +36 -36
- package/dist/docs/reference/project-layout.html +37 -37
- package/dist/docs/reference/prompt.html +37 -37
- package/dist/docs/reference/schedules.html +37 -37
- package/dist/docs/reference/sessions.html +37 -37
- package/dist/docs/reference/sessions.md +1 -1
- package/dist/docs/reference/skills.html +40 -40
- package/dist/docs/reference/subagents.html +37 -37
- package/dist/docs/reference/tools.html +39 -39
- package/dist/docs/reference/tools.md +11 -0
- package/dist/docs/templates/agentic-owners.html +37 -37
- package/dist/docs/templates/grokbot-agents.html +37 -37
- package/dist/docs/templates/security-reviewer.html +37 -37
- package/dist/docs/templates/thermo-quality-review.html +37 -37
- package/dist/docs/templates/thermo-review.html +37 -37
- package/dist/docs/templates/triage.html +37 -37
- package/dist/docs/troubleshooting.html +36 -36
- package/dist/evals/assertions.d.ts.map +1 -1
- package/dist/evals/assertions.js +21 -19
- package/dist/evals/expect.js +1 -1
- package/dist/evals/judge.js +1 -1
- package/dist/evals/reporters.js +8 -8
- package/dist/evals/run-facts.js +2 -2
- package/dist/evals.js +6 -6
- package/dist/extensions/cursor-cloud-agents/extension.d.ts +2 -0
- package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.js +2 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +16 -0
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +44 -3
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts +23 -0
- package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/launch-agent.js +32 -0
- package/dist/extensions/cursor-cloud-agents/lib/repos.js +2 -2
- package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -2
- package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/watch.js +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +3 -8
- package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/extension.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +4 -4
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +1 -1
- package/dist/extensions/improve/skills/yourself.js +1 -1
- package/dist/extensions/jev/extension.js +2 -2
- package/dist/extensions/jev/tools/evaluate.js +1 -1
- package/dist/extensions/slack-communication/tools/react.js +1 -1
- package/dist/files-backends/cursor-hosted.js +8 -8
- package/dist/files-backends/local-fs.js +1 -1
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +15 -15
- package/dist/internal/advertise-tools.d.ts +3 -2
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +11 -9
- package/dist/internal/approval-gate.js +1 -1
- package/dist/internal/artifacts-store.js +13 -13
- package/dist/internal/as-of.js +2 -2
- package/dist/internal/authored-alias-hooks.d.ts +4 -3
- package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
- package/dist/internal/authored-alias-hooks.js +16 -7
- package/dist/internal/authored-loaders.d.ts.map +1 -1
- package/dist/internal/authored-loaders.js +21 -5
- package/dist/internal/builtin-tools/reminders.js +2 -2
- package/dist/internal/chat-client.js +5 -5
- package/dist/internal/cli-ax.js +14 -14
- package/dist/internal/cli-bitbucket.js +10 -10
- package/dist/internal/cli-convert-automation.js +2 -2
- package/dist/internal/cli-cursor.js +2 -2
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +40 -40
- package/dist/internal/cli-docs.js +5 -5
- package/dist/internal/cli-github.js +15 -15
- package/dist/internal/cli-gitlab.js +10 -10
- package/dist/internal/cli-images.js +16 -16
- package/dist/internal/cli-manifest.js +1 -1
- package/dist/internal/cli-mcp-oauth.js +5 -5
- package/dist/internal/cli-mcp.js +3 -3
- package/dist/internal/cli-migrate.js +1 -1
- package/dist/internal/cli-skills.js +2 -2
- package/dist/internal/cli-slack.js +5 -5
- package/dist/internal/cloud-turn-cost.js +1 -1
- package/dist/internal/continuation-identity.js +6 -6
- package/dist/internal/conversation-mirror.js +5 -5
- package/dist/internal/convert-automation/convert-workflow.js +24 -24
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
- package/dist/internal/cursor/account-mcp.js +20 -20
- package/dist/internal/cursor/backend-client.js +6 -6
- package/dist/internal/cursor/credentials.js +1 -1
- package/dist/internal/cursor/store-api-client.js +1 -1
- package/dist/internal/cursor-account-mcp-auth.js +9 -9
- package/dist/internal/cursor-deployment-relay.d.ts.map +1 -1
- package/dist/internal/cursor-deployment-relay.js +9 -9
- package/dist/internal/cursor-event-relay.js +10 -10
- package/dist/internal/cursor-relay-core.js +2 -2
- package/dist/internal/deploy-manifest.d.ts +14 -0
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +33 -10
- package/dist/internal/discovery/agent-config.js +2 -2
- package/dist/internal/discovery/agent.js +6 -6
- package/dist/internal/discovery/connections.js +5 -5
- package/dist/internal/discovery/cursor-plugin.js +12 -12
- package/dist/internal/discovery/extension-overlay.js +3 -3
- package/dist/internal/discovery/extensions.js +6 -6
- package/dist/internal/discovery/info.js +9 -9
- package/dist/internal/discovery/instructions.js +1 -1
- package/dist/internal/discovery/project.js +3 -3
- package/dist/internal/discovery/services.js +1 -1
- package/dist/internal/discovery/tools.js +1 -1
- package/dist/internal/docs-site.js +2 -2
- package/dist/internal/env-file.js +1 -1
- package/dist/internal/eval-run-store.js +7 -7
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +14 -14
- package/dist/internal/eval-transport.js +1 -1
- package/dist/internal/evals-client.d.ts.map +1 -1
- package/dist/internal/evals-client.js +4 -4
- package/dist/internal/event-log.js +8 -8
- package/dist/internal/event-mapper.js +13 -13
- package/dist/internal/expected-delivery-failure.js +2 -2
- package/dist/internal/filesystem/format.js +2 -2
- package/dist/internal/filesystem/nearest.js +3 -3
- package/dist/internal/filesystem/scratch.js +3 -3
- package/dist/internal/filesystem/tools.js +6 -6
- package/dist/internal/filesystem/walk.d.ts.map +1 -1
- package/dist/internal/filesystem/walk.js +2 -2
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +6 -5
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +4 -2
- package/dist/internal/github-fanout.d.ts.map +1 -1
- package/dist/internal/github-fanout.js +3 -3
- package/dist/internal/guest-network.js +4 -4
- package/dist/internal/host-files.js +1 -1
- package/dist/internal/host-kv.js +2 -2
- package/dist/internal/hosted-catch-protocol.js +1 -1
- package/dist/internal/hosted-catch.js +1 -1
- package/dist/internal/hosted-delivery-protocol.d.ts +24 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +58 -14
- package/dist/internal/hosted-delivery.d.ts +6 -0
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +64 -13
- package/dist/internal/hosted-eval-cases.js +4 -4
- package/dist/internal/hosted-execution-diag.js +3 -3
- package/dist/internal/hosted-managed-automation.d.ts +3 -3
- package/dist/internal/hosted-managed-automation.js +3 -3
- package/dist/internal/hosting.js +1 -1
- package/dist/internal/http-channel.js +1 -1
- package/dist/internal/http-control-plane-session.js +2 -2
- package/dist/internal/init-interview.js +7 -7
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +12 -12
- package/dist/internal/inline-stdio-mcp.js +2 -2
- package/dist/internal/install-cursor-skills.js +11 -11
- package/dist/internal/json-schema.js +1 -1
- package/dist/internal/local-control-plane.js +3 -3
- package/dist/internal/local-env.js +3 -3
- package/dist/internal/log-ring.js +1 -1
- package/dist/internal/logs-client.js +1 -1
- package/dist/internal/mcp-endpoint.js +8 -8
- package/dist/internal/mcp-host.d.ts.map +1 -1
- package/dist/internal/mcp-host.js +5 -5
- package/dist/internal/mcp-oauth-on-demand.js +3 -3
- package/dist/internal/mcp-oauth.js +5 -5
- package/dist/internal/net.js +2 -2
- package/dist/internal/otel/config.js +3 -3
- package/dist/internal/otel/runtime.js +13 -13
- package/dist/internal/peer-connections.js +2 -2
- package/dist/internal/persistent-stage-log-mirror.d.ts +57 -0
- package/dist/internal/persistent-stage-log-mirror.d.ts.map +1 -0
- package/dist/internal/persistent-stage-log-mirror.js +231 -0
- package/dist/internal/platform-schedule-sync.js +1 -1
- package/dist/internal/platform-timers.js +1 -1
- package/dist/internal/playground/static.js +2 -2
- package/dist/internal/playground/toolchain.js +2 -2
- package/dist/internal/playground-proxy.js +3 -3
- package/dist/internal/process-memory-telemetry.js +1 -1
- package/dist/internal/reminder-runner.d.ts +1 -1
- package/dist/internal/reminder-runner.d.ts.map +1 -1
- package/dist/internal/reminder-runner.js +14 -16
- package/dist/internal/reminder-store.js +1 -1
- package/dist/internal/resolved-connections.js +8 -8
- package/dist/internal/router.js +4 -4
- package/dist/internal/run-client.js +2 -2
- package/dist/internal/schedule-runner.d.ts +13 -2
- package/dist/internal/schedule-runner.d.ts.map +1 -1
- package/dist/internal/schedule-runner.js +48 -9
- package/dist/internal/sdk-runner.d.ts +2 -1
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +13 -8
- package/dist/internal/serve-restart.js +1 -1
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +101 -76
- package/dist/internal/session-cost.js +3 -3
- package/dist/internal/session-engine.d.ts +8 -0
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +183 -118
- package/dist/internal/session-live-publisher.d.ts +48 -0
- package/dist/internal/session-live-publisher.d.ts.map +1 -0
- package/dist/internal/session-live-publisher.js +415 -0
- package/dist/internal/session-run-log.js +6 -6
- package/dist/internal/sessions-client.js +3 -3
- package/dist/internal/skill-catalog.js +2 -2
- package/dist/internal/sleep.js +1 -1
- package/dist/internal/start-log-store.d.ts +5 -1
- package/dist/internal/start-log-store.d.ts.map +1 -1
- package/dist/internal/start-log-store.js +5 -3
- package/dist/internal/storage-coordinator.js +12 -12
- package/dist/internal/store-api-protocol.d.ts +51 -0
- package/dist/internal/store-api-protocol.d.ts.map +1 -1
- package/dist/internal/store-api-protocol.js +39 -2
- package/dist/internal/store-mirror.js +4 -4
- package/dist/internal/stream-progress.d.ts.map +1 -1
- package/dist/internal/stream-progress.js +4 -0
- package/dist/internal/terminal-style.js +2 -2
- package/dist/internal/testing/conversation-identity-vectors.d.ts +48 -0
- package/dist/internal/testing/conversation-identity-vectors.d.ts.map +1 -0
- package/dist/internal/testing/conversation-identity-vectors.js +136 -0
- package/dist/internal/tool-call-retry.d.ts +87 -0
- package/dist/internal/tool-call-retry.d.ts.map +1 -0
- package/dist/internal/tool-call-retry.js +387 -0
- package/dist/internal/tool-result.js +3 -3
- package/dist/internal/trajectory.js +7 -7
- package/dist/internal/turn-governor.js +2 -2
- package/dist/internal/turn-outbox.js +1 -1
- package/dist/internal/update-check.d.ts.map +1 -1
- package/dist/internal/update-check.js +4 -2
- package/dist/internal/v2-hosting.d.ts +6 -0
- package/dist/internal/v2-hosting.d.ts.map +1 -1
- package/dist/internal/v2-hosting.js +7 -1
- package/dist/internal/workspace.js +4 -4
- package/dist/kv/memory-kv.js +3 -3
- package/dist/playground/assets/index-CzttDc-d.css +1 -0
- package/dist/playground/assets/{index-Be0-1hw2.js → index-DIiKbZ25.js} +42 -42
- package/dist/playground/index.html +2 -2
- package/dist/prompt.js +1 -1
- package/dist/storage-backends/cursor-hosted-v2.js +2 -2
- package/dist/storage-backends/file-kv.js +7 -7
- package/dist/storage-protocol.d.ts +7 -0
- package/dist/storage-protocol.d.ts.map +1 -1
- package/dist/storage-protocol.js +7 -0
- package/dist/storage.js +3 -3
- package/dist/types.d.ts +21 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -4
- package/docs/reference/connections.md +2 -1
- package/docs/reference/hooks.md +1 -0
- package/docs/reference/sessions.md +1 -1
- package/docs/reference/tools.md +11 -0
- package/package.json +6 -6
- package/templates/agentic-owners/bot/channels/github.ts +2 -2
- package/templates/agentic-owners/bot/lib/github.ts +7 -5
- package/templates/agentic-owners/bot/lib/owners/decision.ts +9 -9
- package/templates/agentic-owners/bot/lib/owners/handles.ts +2 -2
- package/templates/agentic-owners/bot/lib/owners/match.ts +5 -3
- package/templates/agentic-owners/bot/lib/owners/matching.ts +1 -1
- package/templates/agentic-owners/bot/lib/owners/parse.ts +4 -4
- package/templates/agentic-owners/bot/lib/owners/prompt.ts +1 -1
- package/templates/agentic-owners/bot/lib/review.ts +18 -17
- package/templates/agentic-owners/evals/owners.eval.ts +2 -2
- package/templates/agents-md/bot/lib/collect.ts +6 -6
- package/templates/agents-md/bot/lib/config.ts +1 -1
- package/templates/agents-md/bot/tools/apply_agents.ts +4 -4
- package/templates/code-wiki/bot/channels/github.ts +3 -3
- package/templates/code-wiki/bot/lib/repos.ts +1 -1
- package/templates/code-wiki/bot/tools/apply_wiki.ts +2 -2
- package/templates/demo/bot/lib/collect.ts +1 -1
- package/templates/demo/bot/lib/repos.ts +1 -1
- package/templates/demo/bot/tools/record_demo.ts +1 -1
- package/templates/pr-autofixer/bot/channels/github.ts +2 -2
- package/templates/pr-autofixer/bot/lib/merge-watch.ts +2 -2
- package/templates/pr-autofixer/bot/lib/repos.ts +2 -2
- package/templates/pr-autofixer/bot/lib/webhook-routing.ts +1 -1
- package/templates/security-help/bot/lib/repos.ts +1 -1
- package/templates/security-reviewer/bot/lib/repos.ts +1 -1
- package/templates/triage/bot/lib/actuate.ts +15 -15
- package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +0 -1
- package/dist/docs/assets/chunks/channel.CBwrU9rP.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +0 -1
- package/dist/docs/assets/chunks/clone.BTvFyY1a.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +0 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.iXazD3Z7.js +0 -162
- package/dist/playground/assets/index-Clz6uHj9.css +0 -1
- /package/dist/docs/assets/{reference_connections.md.Bljpve-y.lean.js → reference_connections.md.DLrgAd5f.lean.js} +0 -0
- /package/dist/docs/assets/{reference_sessions.md.CM5zo3w4.lean.js → reference_sessions.md.CyM7ARz1.lean.js} +0 -0
- /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mirror a persistent slot's `/state/logs` directory onto the framework store.
|
|
3
|
+
*
|
|
4
|
+
* One loop for every file in the folder. A file whose size and mtime match
|
|
5
|
+
* the last upload is left alone, including the read. Anything else is read
|
|
6
|
+
* from its tail, masked, and written over the same key. Store keys whose
|
|
7
|
+
* files are gone are deleted. The timer lives on the serve process, because
|
|
8
|
+
* a persistent VM stays up between turns. Freeze pods do not enter this path.
|
|
9
|
+
*/
|
|
10
|
+
import type { FileSink } from "../files.js";
|
|
11
|
+
import type { AgentProject } from "../types.js";
|
|
12
|
+
/** How often the resident process snapshots the directory. */
|
|
13
|
+
export declare const PERSISTENT_STAGE_LOG_SYNC_INTERVAL_MS = 30000;
|
|
14
|
+
/**
|
|
15
|
+
* Basenames written by the persistent stage logger: timestamp, optional generation, stage.
|
|
16
|
+
* Rejects paths, so a listing cannot escape the directory.
|
|
17
|
+
*/
|
|
18
|
+
export declare const PERSISTENT_STAGE_LOG_FILE_NAME: RegExp;
|
|
19
|
+
export interface PersistentStageLogMirror {
|
|
20
|
+
logsDir: string;
|
|
21
|
+
sink: FileSink;
|
|
22
|
+
agentName: string;
|
|
23
|
+
logger: (line: string) => void;
|
|
24
|
+
}
|
|
25
|
+
export declare function selectPersistentStageLogMirror(input: {
|
|
26
|
+
project: AgentProject;
|
|
27
|
+
logsDir: string;
|
|
28
|
+
logger?: (line: string) => void;
|
|
29
|
+
env?: Record<string, string | undefined>;
|
|
30
|
+
}): PersistentStageLogMirror | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Start the directory sync and return a stop that flushes once more. The
|
|
33
|
+
* interval does not keep the process alive on its own. A tick that lands
|
|
34
|
+
* while a sync is running is dropped; stop still runs one more after it.
|
|
35
|
+
*/
|
|
36
|
+
export declare function startPersistentStageLogMirror(mirror: PersistentStageLogMirror, options?: {
|
|
37
|
+
intervalMs?: number;
|
|
38
|
+
}): {
|
|
39
|
+
stop: () => Promise<void>;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Upload changed files under `persistent-stage-logs/`, then drop keys for files that are
|
|
43
|
+
* no longer in the directory. A missing directory is a no-op, so a tick before
|
|
44
|
+
* the first stage command does not sweep a previous snapshot.
|
|
45
|
+
*/
|
|
46
|
+
export declare function syncPersistentStageLogDirectory(args: {
|
|
47
|
+
dir: string;
|
|
48
|
+
sink: FileSink;
|
|
49
|
+
agentName: string;
|
|
50
|
+
uploaded: Map<string, {
|
|
51
|
+
size: number;
|
|
52
|
+
mtimeMs: number;
|
|
53
|
+
}>;
|
|
54
|
+
maxBytes?: number;
|
|
55
|
+
logger?: (line: string) => void;
|
|
56
|
+
}): Promise<void>;
|
|
57
|
+
//# sourceMappingURL=persistent-stage-log-mirror.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistent-stage-log-mirror.d.ts","sourceRoot":"","sources":["../../src/internal/persistent-stage-log-mirror.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,8DAA8D;AAC9D,eAAO,MAAM,qCAAqC,QAAS,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAkD,CAAC;AAEhG,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C,GAAG,wBAAwB,GAAG,SAAS,CAiBvC;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,wBAAwB,EAChC,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAgD/B;AAED;;;;GAIG;AACH,wBAAsB,+BAA+B,CAAC,IAAI,EAAE;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFhB"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mirror a persistent slot's `/state/logs` directory onto the framework store.
|
|
3
|
+
*
|
|
4
|
+
* One loop for every file in the folder. A file whose size and mtime match
|
|
5
|
+
* the last upload is left alone, including the read. Anything else is read
|
|
6
|
+
* from its tail, masked, and written over the same key. Store keys whose
|
|
7
|
+
* files are gone are deleted. The timer lives on the serve process, because
|
|
8
|
+
* a persistent VM stays up between turns. Freeze pods do not enter this path.
|
|
9
|
+
*/
|
|
10
|
+
import { open, readdir, stat } from "node:fs/promises";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
import { cursorHostedFiles } from "../files-backends/cursor-hosted.js";
|
|
13
|
+
import { agentSdkStorageKeys } from "../storage-protocol.js";
|
|
14
|
+
import { resolveApiKeySync } from "./cursor/credentials.js";
|
|
15
|
+
import { describeError } from "./describe-error.js";
|
|
16
|
+
import { maskStartLogTokens, START_LOG_STORE_MAX_BYTES } from "./start-log-store.js";
|
|
17
|
+
import { resolveAgentV2Hosting } from "./v2-hosting.js";
|
|
18
|
+
/** How often the resident process snapshots the directory. */
|
|
19
|
+
export const PERSISTENT_STAGE_LOG_SYNC_INTERVAL_MS = 30_000;
|
|
20
|
+
/**
|
|
21
|
+
* Basenames written by the persistent stage logger: timestamp, optional generation, stage.
|
|
22
|
+
* Rejects paths, so a listing cannot escape the directory.
|
|
23
|
+
*/
|
|
24
|
+
export const PERSISTENT_STAGE_LOG_FILE_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]{0,180}\.log$/;
|
|
25
|
+
export function selectPersistentStageLogMirror(input) {
|
|
26
|
+
const hosting = resolveAgentV2Hosting({
|
|
27
|
+
architecture: input.project.agent.architecture,
|
|
28
|
+
env: input.env,
|
|
29
|
+
});
|
|
30
|
+
if (hosting.kind !== "cursor-managed-persistent") {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
logsDir: input.logsDir,
|
|
35
|
+
sink: cursorHostedFiles({
|
|
36
|
+
resolveStoreSourceId: () => hosting.resolveStoreIds().frameworkStoreSourceId,
|
|
37
|
+
resolveApiKey: () => resolveApiKeySync()?.apiKey,
|
|
38
|
+
}),
|
|
39
|
+
agentName: input.project.name,
|
|
40
|
+
logger: input.logger ?? (() => { }),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Start the directory sync and return a stop that flushes once more. The
|
|
45
|
+
* interval does not keep the process alive on its own. A tick that lands
|
|
46
|
+
* while a sync is running is dropped; stop still runs one more after it.
|
|
47
|
+
*/
|
|
48
|
+
export function startPersistentStageLogMirror(mirror, options) {
|
|
49
|
+
const uploaded = new Map();
|
|
50
|
+
let stopped = false;
|
|
51
|
+
let syncing = false;
|
|
52
|
+
let chain = Promise.resolve();
|
|
53
|
+
const syncOnce = () => {
|
|
54
|
+
chain = chain
|
|
55
|
+
.then(() => syncPersistentStageLogDirectory({
|
|
56
|
+
dir: mirror.logsDir,
|
|
57
|
+
sink: mirror.sink,
|
|
58
|
+
agentName: mirror.agentName,
|
|
59
|
+
uploaded,
|
|
60
|
+
logger: mirror.logger,
|
|
61
|
+
}))
|
|
62
|
+
.catch((error) => {
|
|
63
|
+
mirror.logger(`[bdk] persistent-stage-logs: sync failed (${describeError(error)})`);
|
|
64
|
+
});
|
|
65
|
+
return chain;
|
|
66
|
+
};
|
|
67
|
+
const timer = setInterval(() => {
|
|
68
|
+
if (stopped || syncing) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
syncing = true;
|
|
72
|
+
void syncOnce().finally(() => {
|
|
73
|
+
syncing = false;
|
|
74
|
+
});
|
|
75
|
+
}, options?.intervalMs ?? PERSISTENT_STAGE_LOG_SYNC_INTERVAL_MS);
|
|
76
|
+
timer.unref();
|
|
77
|
+
syncing = true;
|
|
78
|
+
void syncOnce().finally(() => {
|
|
79
|
+
syncing = false;
|
|
80
|
+
});
|
|
81
|
+
return {
|
|
82
|
+
stop: () => {
|
|
83
|
+
if (stopped) {
|
|
84
|
+
return chain;
|
|
85
|
+
}
|
|
86
|
+
stopped = true;
|
|
87
|
+
clearInterval(timer);
|
|
88
|
+
return syncOnce();
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Upload changed files under `persistent-stage-logs/`, then drop keys for files that are
|
|
94
|
+
* no longer in the directory. A missing directory is a no-op, so a tick before
|
|
95
|
+
* the first stage command does not sweep a previous snapshot.
|
|
96
|
+
*/
|
|
97
|
+
export async function syncPersistentStageLogDirectory(args) {
|
|
98
|
+
const logger = args.logger ?? (() => { });
|
|
99
|
+
const maxBytes = args.maxBytes ?? START_LOG_STORE_MAX_BYTES;
|
|
100
|
+
let entries;
|
|
101
|
+
try {
|
|
102
|
+
entries = await readdir(args.dir, { withFileTypes: true });
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (isEnoent(error)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
logger(`[bdk] persistent-stage-logs: read dir failed (${describeError(error)})`);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const desired = new Set();
|
|
112
|
+
const names = entries
|
|
113
|
+
.filter((entry) => entry.isFile() && PERSISTENT_STAGE_LOG_FILE_NAME.test(entry.name))
|
|
114
|
+
.map((entry) => entry.name)
|
|
115
|
+
.sort();
|
|
116
|
+
for (const name of names) {
|
|
117
|
+
const path = join(args.dir, name);
|
|
118
|
+
let fileStat;
|
|
119
|
+
try {
|
|
120
|
+
fileStat = await stat(path);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (isEnoent(error)) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
// Keep the previous snapshot when this tick cannot see the file.
|
|
127
|
+
logger(`[bdk] persistent-stage-logs: read failed for ${name} (${describeError(error)})`);
|
|
128
|
+
desired.add(name);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (fileStat.size === 0) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
const previous = args.uploaded.get(name);
|
|
135
|
+
if (previous?.size === fileStat.size && previous.mtimeMs === fileStat.mtimeMs) {
|
|
136
|
+
desired.add(name);
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
let raw;
|
|
140
|
+
try {
|
|
141
|
+
raw = await readLogTail(path, fileStat.size, maxBytes);
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
if (isEnoent(error)) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
logger(`[bdk] persistent-stage-logs: read failed for ${name} (${describeError(error)})`);
|
|
148
|
+
desired.add(name);
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (raw.length === 0) {
|
|
152
|
+
desired.add(name);
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
const body = maskStartLogTokens(raw);
|
|
156
|
+
desired.add(name);
|
|
157
|
+
const key = agentSdkStorageKeys.persistentStageLog(args.agentName, name);
|
|
158
|
+
try {
|
|
159
|
+
await args.sink.put(key, new TextEncoder().encode(body));
|
|
160
|
+
args.uploaded.set(name, { size: fileStat.size, mtimeMs: fileStat.mtimeMs });
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
logger(`[bdk] persistent-stage-logs: persist failed for ${name} (${describeError(error)})`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const prefix = agentSdkStorageKeys.persistentStageLogsPrefix(args.agentName);
|
|
167
|
+
let listed;
|
|
168
|
+
try {
|
|
169
|
+
listed = await args.sink.list(prefix);
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
logger(`[bdk] persistent-stage-logs: list failed (${describeError(error)})`);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
for (const item of listed) {
|
|
176
|
+
const name = fileNameFromPersistentStageLogKey(item.key, prefix);
|
|
177
|
+
if (name === undefined || desired.has(name)) {
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
try {
|
|
181
|
+
await args.sink.delete(item.key);
|
|
182
|
+
args.uploaded.delete(name);
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
logger(`[bdk] persistent-stage-logs: delete failed for ${name} (${describeError(error)})`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/** Read the last `maxBytes` of a file without loading the rest of it. */
|
|
190
|
+
async function readLogTail(path, size, maxBytes) {
|
|
191
|
+
const length = Math.min(size, maxBytes);
|
|
192
|
+
const position = size - length;
|
|
193
|
+
const handle = await open(path, "r");
|
|
194
|
+
try {
|
|
195
|
+
const buffer = Buffer.alloc(length);
|
|
196
|
+
let offset = 0;
|
|
197
|
+
while (offset < length) {
|
|
198
|
+
const { bytesRead } = await handle.read(buffer, offset, length - offset, position + offset);
|
|
199
|
+
if (bytesRead === 0) {
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
offset += bytesRead;
|
|
203
|
+
}
|
|
204
|
+
return new TextDecoder().decode(buffer.subarray(0, offset));
|
|
205
|
+
}
|
|
206
|
+
finally {
|
|
207
|
+
await handle.close();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function fileNameFromPersistentStageLogKey(key, prefix) {
|
|
211
|
+
if (!key.startsWith(prefix)) {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
const segment = key.slice(prefix.length);
|
|
215
|
+
if (segment.length === 0 || segment.includes("/")) {
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
try {
|
|
219
|
+
const name = decodeURIComponent(segment);
|
|
220
|
+
return PERSISTENT_STAGE_LOG_FILE_NAME.test(name) ? name : undefined;
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
return undefined;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
function isEnoent(error) {
|
|
227
|
+
return (error !== null &&
|
|
228
|
+
typeof error === "object" &&
|
|
229
|
+
"code" in error &&
|
|
230
|
+
error.code === "ENOENT");
|
|
231
|
+
}
|
|
@@ -8,7 +8,7 @@ import { dirname } from "node:path";
|
|
|
8
8
|
export const PLATFORM_SCHEDULE_CATALOG_FILENAME = "platform-schedule-names.json";
|
|
9
9
|
export async function syncHostedPlatformSchedules(args) {
|
|
10
10
|
const previous = await readScheduleCatalog(args.catalogPath);
|
|
11
|
-
const currentNames = args.schedules.map(schedule => schedule.name);
|
|
11
|
+
const currentNames = args.schedules.map((schedule) => schedule.name);
|
|
12
12
|
const currentSet = new Set(currentNames);
|
|
13
13
|
const failedDeletes = [];
|
|
14
14
|
for (const name of previous) {
|
|
@@ -110,7 +110,7 @@ const AGENTSDK_REMINDERS_PREFIX = "/internal/agentsdk";
|
|
|
110
110
|
const APPLY_REMINDER_OUTCOME_MAX_ATTEMPTS = 3;
|
|
111
111
|
const APPLY_REMINDER_OUTCOME_RETRY_DELAY_MS = 50;
|
|
112
112
|
async function sleepMs(ms) {
|
|
113
|
-
await new Promise(resolve => setTimeout(resolve, ms));
|
|
113
|
+
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
114
114
|
}
|
|
115
115
|
async function withBoundedApplyRetries(run) {
|
|
116
116
|
let lastError;
|
|
@@ -92,7 +92,7 @@ export function renderAgentsIndexHtml(agents, options = {}) {
|
|
|
92
92
|
const docs = options.docs !== false;
|
|
93
93
|
const multi = options.multi === true;
|
|
94
94
|
const cards = agents
|
|
95
|
-
.map(agent => {
|
|
95
|
+
.map((agent) => {
|
|
96
96
|
const playground = agent.slug === "" ? "/playground" : `/${agent.slug}/playground`;
|
|
97
97
|
const slugLabel = agent.slug === "" ? "/" : `/${agent.slug}`;
|
|
98
98
|
const meta = `${agent.model || "—"} · ${agent.tools} tool${agent.tools === 1 ? "" : "s"} · ${agent.channels} channel${agent.channels === 1 ? "" : "s"}`;
|
|
@@ -104,7 +104,7 @@ export function renderAgentsIndexHtml(agents, options = {}) {
|
|
|
104
104
|
})
|
|
105
105
|
.join("\n");
|
|
106
106
|
const routes = hostRouteRows(agents, docs, multi)
|
|
107
|
-
.map(row => ` <tr><td><a href="${escapeHtml(row.href)}"><code>${escapeHtml(row.path)}</code></a></td><td>${escapeHtml(row.blurb)}</td></tr>`)
|
|
107
|
+
.map((row) => ` <tr><td><a href="${escapeHtml(row.href)}"><code>${escapeHtml(row.path)}</code></a></td><td>${escapeHtml(row.blurb)}</td></tr>`)
|
|
108
108
|
.join("\n");
|
|
109
109
|
return HOST_HOME_TEMPLATE.replace("<!--CARDS-->", cards || ' <div class="card-meta">No agents mounted.</div>')
|
|
110
110
|
.replace("<!--COUNT-->", String(agents.length))
|
|
@@ -167,7 +167,7 @@ export function startPlaygroundDevServer(options) {
|
|
|
167
167
|
}
|
|
168
168
|
});
|
|
169
169
|
let stopped = false;
|
|
170
|
-
child.on("error", err => {
|
|
170
|
+
child.on("error", (err) => {
|
|
171
171
|
if (stopped) {
|
|
172
172
|
return;
|
|
173
173
|
}
|
|
@@ -206,7 +206,7 @@ function spawnVite(toolchain, args, options) {
|
|
|
206
206
|
stdio: "inherit",
|
|
207
207
|
});
|
|
208
208
|
child.on("error", reject);
|
|
209
|
-
child.on("exit", code => {
|
|
209
|
+
child.on("exit", (code) => {
|
|
210
210
|
resolve(code ?? 1);
|
|
211
211
|
});
|
|
212
212
|
});
|
|
@@ -134,7 +134,7 @@ export async function startPlaygroundProxy(args) {
|
|
|
134
134
|
// Drop keep-alive / streamed playground connections so Ctrl-C
|
|
135
135
|
// does not hang waiting for active sockets.
|
|
136
136
|
server.closeAllConnections();
|
|
137
|
-
server.close(error => {
|
|
137
|
+
server.close((error) => {
|
|
138
138
|
if (error) {
|
|
139
139
|
reject(error);
|
|
140
140
|
return;
|
|
@@ -355,7 +355,7 @@ async function forwardOnce(args) {
|
|
|
355
355
|
headers: outboundHeaders,
|
|
356
356
|
};
|
|
357
357
|
return await new Promise((resolve, reject) => {
|
|
358
|
-
const upstreamReq = requestFn(options, upstreamRes => {
|
|
358
|
+
const upstreamReq = requestFn(options, (upstreamRes) => {
|
|
359
359
|
const status = upstreamRes.statusCode ?? 502;
|
|
360
360
|
if (status === 401 && args.deferWriteOnUnauthorized) {
|
|
361
361
|
// Drain so the socket can be reused; caller will refresh + retry.
|
|
@@ -380,7 +380,7 @@ async function forwardOnce(args) {
|
|
|
380
380
|
resolve(status);
|
|
381
381
|
});
|
|
382
382
|
});
|
|
383
|
-
upstreamReq.on("error", error => {
|
|
383
|
+
upstreamReq.on("error", (error) => {
|
|
384
384
|
reject(error);
|
|
385
385
|
});
|
|
386
386
|
res.on("close", () => {
|
|
@@ -115,7 +115,7 @@ export function buildDatadogGaugeSeries(args) {
|
|
|
115
115
|
value: args.eventLog.residentSessions,
|
|
116
116
|
},
|
|
117
117
|
];
|
|
118
|
-
return points.map(point => ({
|
|
118
|
+
return points.map((point) => ({
|
|
119
119
|
metric: point.name,
|
|
120
120
|
type: "gauge",
|
|
121
121
|
points: [[args.timestampSec, point.value]],
|
|
@@ -137,7 +137,7 @@ export declare class ReminderRunner {
|
|
|
137
137
|
continuationToken?: string;
|
|
138
138
|
}): Promise<ReminderInfo[]>;
|
|
139
139
|
cancel(id: string, reason?: string): Promise<ReminderInfo | undefined>;
|
|
140
|
-
/** Cancel
|
|
140
|
+
/** Cancel armed and firing reminders for one continuation. */
|
|
141
141
|
cancelForContinuation(continuationToken: string, reason: string): Promise<number>;
|
|
142
142
|
/**
|
|
143
143
|
* Re-key armed reminders when a channel rotates a session's continuation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -234,7 +234,7 @@ export class ReminderRunner {
|
|
|
234
234
|
if (this.platformTimers !== undefined) {
|
|
235
235
|
return;
|
|
236
236
|
}
|
|
237
|
-
const armed = [...this.records.values()].filter(r => r.status === "armed");
|
|
237
|
+
const armed = [...this.records.values()].filter((r) => r.status === "armed");
|
|
238
238
|
let restored = 0;
|
|
239
239
|
let disarmedOrphan = 0;
|
|
240
240
|
for (const record of armed) {
|
|
@@ -476,7 +476,7 @@ export class ReminderRunner {
|
|
|
476
476
|
async list(filter) {
|
|
477
477
|
const all = await this.recordsForList(filter);
|
|
478
478
|
return all
|
|
479
|
-
.filter(r => {
|
|
479
|
+
.filter((r) => {
|
|
480
480
|
if (filter?.status !== undefined) {
|
|
481
481
|
const publicStatus = r.status === "firing" ? "armed" : r.status;
|
|
482
482
|
if (publicStatus !== filter.status) {
|
|
@@ -492,7 +492,7 @@ export class ReminderRunner {
|
|
|
492
492
|
}
|
|
493
493
|
return true;
|
|
494
494
|
})
|
|
495
|
-
.map(r => {
|
|
495
|
+
.map((r) => {
|
|
496
496
|
const live = this.handlers.get(r.id);
|
|
497
497
|
const info = toInfo(r);
|
|
498
498
|
if (live === undefined)
|
|
@@ -535,17 +535,15 @@ export class ReminderRunner {
|
|
|
535
535
|
this.handlers.delete(id);
|
|
536
536
|
return toInfo(updated);
|
|
537
537
|
}
|
|
538
|
-
/** Cancel
|
|
538
|
+
/** Cancel armed and firing reminders for one continuation. */
|
|
539
539
|
async cancelForContinuation(continuationToken, reason) {
|
|
540
|
-
const
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
}
|
|
548
|
-
return n;
|
|
540
|
+
const records = this.usesControlPlaneProtocol
|
|
541
|
+
? await this.recordsForList({ continuationToken })
|
|
542
|
+
: await this.allRecords();
|
|
543
|
+
const live = records.filter((record) => (record.status === "armed" || record.status === "firing") &&
|
|
544
|
+
record.continuationToken === continuationToken);
|
|
545
|
+
await Promise.all(live.map((record) => this.cancel(record.id, reason)));
|
|
546
|
+
return live.length;
|
|
549
547
|
}
|
|
550
548
|
/**
|
|
551
549
|
* Re-key armed reminders when a channel rotates a session's continuation
|
|
@@ -557,7 +555,7 @@ export class ReminderRunner {
|
|
|
557
555
|
if (this.usesControlPlaneProtocol) {
|
|
558
556
|
return this.controlPlane.rekeyReminders(channelId, oldToken, newToken);
|
|
559
557
|
}
|
|
560
|
-
const armed = (await this.allRecords()).filter(r => r.status === "armed" || r.status === "firing");
|
|
558
|
+
const armed = (await this.allRecords()).filter((r) => r.status === "armed" || r.status === "firing");
|
|
561
559
|
let n = 0;
|
|
562
560
|
for (const record of armed) {
|
|
563
561
|
if (record.channelId !== channelId || record.continuationToken !== oldToken) {
|
|
@@ -577,7 +575,7 @@ export class ReminderRunner {
|
|
|
577
575
|
async dispatch(reminderId, opts = {}) {
|
|
578
576
|
const record = await this.getRecord(reminderId);
|
|
579
577
|
if (record === undefined) {
|
|
580
|
-
const ids = (await this.allRecords()).map(r => r.id);
|
|
578
|
+
const ids = (await this.allRecords()).map((r) => r.id);
|
|
581
579
|
throw new UnknownReminderError(reminderId, ids);
|
|
582
580
|
}
|
|
583
581
|
if (opts.expectedFireCount !== undefined && record.fireCount !== opts.expectedFireCount) {
|
|
@@ -1026,7 +1024,7 @@ export class ReminderRunner {
|
|
|
1026
1024
|
}
|
|
1027
1025
|
const identity = channelId === HTTP_CHANNEL_ID
|
|
1028
1026
|
? httpContinuationIdentity(project.httpChannel)
|
|
1029
|
-
: channelContinuationIdentity(project.channels.find(channel => channel.id === channelId)?.definition);
|
|
1027
|
+
: channelContinuationIdentity(project.channels.find((channel) => channel.id === channelId)?.definition);
|
|
1030
1028
|
return continuationSource(identity) === "control-plane";
|
|
1031
1029
|
}
|
|
1032
1030
|
/**
|
|
@@ -61,7 +61,7 @@ export class ReminderStore {
|
|
|
61
61
|
async listArmed() {
|
|
62
62
|
const all = await this.list();
|
|
63
63
|
// Treat in-flight claims as still armed for restart / listing purposes.
|
|
64
|
-
return all.filter(r => r.status === "armed" || r.status === "firing");
|
|
64
|
+
return all.filter((r) => r.status === "armed" || r.status === "firing");
|
|
65
65
|
}
|
|
66
66
|
async get(id) {
|
|
67
67
|
try {
|
|
@@ -20,13 +20,13 @@ export function validateMountConnectionsConfig(args) {
|
|
|
20
20
|
return;
|
|
21
21
|
}
|
|
22
22
|
const label = args.slug === "" ? args.project.name : args.slug;
|
|
23
|
-
const hostConnectionNames = new Set((args.project.agent.hostConnections ?? []).map(connection => connection.name));
|
|
24
|
-
const filteredRefs = args.accountRefs.filter(ref => ref.servers !== undefined && !hostConnectionNames.has(ref.name));
|
|
23
|
+
const hostConnectionNames = new Set((args.project.agent.hostConnections ?? []).map((connection) => connection.name));
|
|
24
|
+
const filteredRefs = args.accountRefs.filter((ref) => ref.servers !== undefined && !hostConnectionNames.has(ref.name));
|
|
25
25
|
if (filteredRefs.length === 0) {
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
28
|
throw new Error(`[bdk] agent "${label}" has Cursor account MCP connections with \`servers\` filters (${filteredRefs
|
|
29
|
-
.map(ref => ref.name)
|
|
29
|
+
.map((ref) => ref.name)
|
|
30
30
|
.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.`);
|
|
31
31
|
}
|
|
32
32
|
/** Fail closed when a cloud turn cannot honor a `servers` filter. */
|
|
@@ -34,14 +34,14 @@ export function assertCloudCanHonorAccountServersFilters(args) {
|
|
|
34
34
|
if (args.runtime !== "cloud") {
|
|
35
35
|
return;
|
|
36
36
|
}
|
|
37
|
-
const blocked = args.resolvedConnections.filter(connection => connection.accountServersFilter !== undefined &&
|
|
37
|
+
const blocked = args.resolvedConnections.filter((connection) => connection.accountServersFilter !== undefined &&
|
|
38
38
|
connection.cloudUrl === undefined &&
|
|
39
39
|
args.bridgedNames?.has(connection.name) !== true);
|
|
40
40
|
if (blocked.length === 0) {
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
43
|
throw new Error(`[bdk] cloud turn cannot honor Cursor account \`servers\` filters (${blocked
|
|
44
|
-
.map(connection => connection.name)
|
|
44
|
+
.map((connection) => connection.name)
|
|
45
45
|
.join(", ")}) without --public-url; set --public-url so cloud turns reach the filtered account bridge instead of falling back to native connectors.`);
|
|
46
46
|
}
|
|
47
47
|
/** Fail closed when anonymous HTTP admission would expose account connectors. */
|
|
@@ -61,8 +61,8 @@ export function resolveMountConnections(args) {
|
|
|
61
61
|
const resolved = [];
|
|
62
62
|
if (cloudCapable) {
|
|
63
63
|
const hostOauthNames = agent.connections
|
|
64
|
-
.filter(connection => isHostOauthConnectionTransport(connection.transport))
|
|
65
|
-
.map(connection => connection.name);
|
|
64
|
+
.filter((connection) => isHostOauthConnectionTransport(connection.transport))
|
|
65
|
+
.map((connection) => connection.name);
|
|
66
66
|
if (hostOauthNames.length > 0) {
|
|
67
67
|
args.logger(args.cloudToolsBridge === true
|
|
68
68
|
? `[bdk] agent "${label}": host-OAuth MCP connections (${hostOauthNames.join(", ")}) reach cloud turns through the host connection bridge; their tokens stay on this serve host.`
|
|
@@ -79,7 +79,7 @@ export function resolveMountConnections(args) {
|
|
|
79
79
|
resolved.push(...peers);
|
|
80
80
|
if (cloudCapable && args.publicUrl === undefined) {
|
|
81
81
|
args.logger(`[bdk] warning: agent "${label}" has peer MCP connections (${peers
|
|
82
|
-
.map(peer => peer.name)
|
|
82
|
+
.map((peer) => peer.name)
|
|
83
83
|
.join(", ")}) but no --public-url; cloud-runtime turns cannot reach this host's loopback address, so peers are omitted from cloud turns.`);
|
|
84
84
|
}
|
|
85
85
|
}
|
package/dist/internal/router.js
CHANGED
|
@@ -41,19 +41,19 @@ export class Router {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
function compilePattern(pattern) {
|
|
44
|
-
const segments = splitPath(pattern).map(part => part.startsWith(":")
|
|
44
|
+
const segments = splitPath(pattern).map((part) => part.startsWith(":")
|
|
45
45
|
? { kind: "param", name: part.slice(1) }
|
|
46
46
|
: part.startsWith("*")
|
|
47
47
|
? { kind: "rest", name: part.slice(1) }
|
|
48
48
|
: { kind: "literal", value: part });
|
|
49
|
-
const restIndex = segments.findIndex(segment => segment.kind === "rest");
|
|
49
|
+
const restIndex = segments.findIndex((segment) => segment.kind === "rest");
|
|
50
50
|
if (restIndex !== -1 && restIndex !== segments.length - 1) {
|
|
51
51
|
throw new Error(`Route pattern "${pattern}" may only use a catch-all (*name) as the last segment.`);
|
|
52
52
|
}
|
|
53
53
|
return segments;
|
|
54
54
|
}
|
|
55
55
|
function splitPath(path) {
|
|
56
|
-
return path.split("/").filter(part => part !== "");
|
|
56
|
+
return path.split("/").filter((part) => part !== "");
|
|
57
57
|
}
|
|
58
58
|
function matchSegments(segments, pathSegments) {
|
|
59
59
|
const last = segments[segments.length - 1];
|
|
@@ -86,7 +86,7 @@ function matchSegments(segments, pathSegments) {
|
|
|
86
86
|
if (hasRest) {
|
|
87
87
|
params[last.name] = pathSegments
|
|
88
88
|
.slice(fixedCount)
|
|
89
|
-
.map(value => decodeURIComponent(value))
|
|
89
|
+
.map((value) => decodeURIComponent(value))
|
|
90
90
|
.join("/");
|
|
91
91
|
}
|
|
92
92
|
return params;
|
|
@@ -134,8 +134,8 @@ async function runOneTurn(args) {
|
|
|
134
134
|
signal: args.signal,
|
|
135
135
|
onEvent: args.onEvent,
|
|
136
136
|
});
|
|
137
|
-
const turnFailed = events.some(e => e.type === "turn.failed");
|
|
138
|
-
const sessionFailed = events.some(e => e.type === "session.failed");
|
|
137
|
+
const turnFailed = events.some((e) => e.type === "turn.failed");
|
|
138
|
+
const sessionFailed = events.some((e) => e.type === "session.failed");
|
|
139
139
|
return {
|
|
140
140
|
sessionId,
|
|
141
141
|
...(continuationToken === undefined ? {} : { continuationToken }),
|
|
@@ -23,9 +23,20 @@ export declare class ScheduleRunner {
|
|
|
23
23
|
stop(): void;
|
|
24
24
|
private arm;
|
|
25
25
|
private tick;
|
|
26
|
-
/**
|
|
27
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Fire a schedule by name, exactly once. Returns the started sessions.
|
|
28
|
+
*
|
|
29
|
+
* `awaitCompletion` is the hosted v2 fire: the VM may be parked as soon as
|
|
30
|
+
* the delivery replies, so resolve only after every started turn finished
|
|
31
|
+
* and flushed to durable storage, and every `waitUntil` promise settled.
|
|
32
|
+
* Without it the dispatch returns at message accept and work continues in
|
|
33
|
+
* the background (the resident / local control plane path).
|
|
34
|
+
*/
|
|
35
|
+
dispatch(scheduleId: string, options?: {
|
|
36
|
+
awaitCompletion?: boolean;
|
|
37
|
+
}): Promise<{
|
|
28
38
|
sessionIds: string[];
|
|
29
39
|
}>;
|
|
40
|
+
private settleSession;
|
|
30
41
|
}
|
|
31
42
|
//# sourceMappingURL=schedule-runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule-runner.d.ts","sourceRoot":"","sources":["../../src/internal/schedule-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAgC,MAAM,aAAa,CAAC;AAE3F,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAElF,eAAO,MAAM,QAAQ,EAAE,WAItB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAFzC,YACE,UAAU,EAAE,MAAM,EACT,oBAAoB,EAAE,MAAM,EAAE,EAIxC;CACF;AAQD,qBAAa,cAAc;IAMvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,eAAe,CAAM;IAE7B,YACmB,MAAM,EAAE,aAAa,EACtC,OAAO,EAAE,YAAY,EACJ,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EAO3D;IAED,IAAI,WAAW,IAAI,MAAM,EAAE,CAE1B;IAED,KAAK,IAAI,IAAI,CAKZ;IAED,IAAI,IAAI,IAAI,CAKX;IAED,OAAO,CAAC,GAAG;IAOX,OAAO,CAAC,IAAI;IAoBZ
|
|
1
|
+
{"version":3,"file":"schedule-runner.d.ts","sourceRoot":"","sources":["../../src/internal/schedule-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAgC,MAAM,aAAa,CAAC;AAE3F,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAElF,eAAO,MAAM,QAAQ,EAAE,WAItB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAFzC,YACE,UAAU,EAAE,MAAM,EACT,oBAAoB,EAAE,MAAM,EAAE,EAIxC;CACF;AAQD,qBAAa,cAAc;IAMvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,eAAe,CAAM;IAE7B,YACmB,MAAM,EAAE,aAAa,EACtC,OAAO,EAAE,YAAY,EACJ,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EAO3D;IAED,IAAI,WAAW,IAAI,MAAM,EAAE,CAE1B;IAED,KAAK,IAAI,IAAI,CAKZ;IAED,IAAI,IAAI,IAAI,CAKX;IAED,OAAO,CAAC,GAAG;IAOX,OAAO,CAAC,IAAI;IAoBZ;;;;;;;;OAQG;IACG,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO,GAC1C,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAkFnC;YAEa,aAAa;CAO5B"}
|