@cursor/bdk 0.2.9 → 0.2.10
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/artifacts.js +3 -5
- package/dist/bin/agent-serve.js +803 -812
- package/dist/channels/bitbucket/api.js +305 -321
- package/dist/channels/bitbucket/binding.js +97 -61
- package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
- package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
- package/dist/channels/bitbucket/checks.js +9 -21
- package/dist/channels/bitbucket/cursor-account.js +1 -1
- package/dist/channels/bitbucket/defaults.js +14 -4
- package/dist/channels/bitbucket/events.js +1 -2
- package/dist/channels/bitbucket/index.d.ts +6 -2
- package/dist/channels/bitbucket/index.d.ts.map +1 -1
- package/dist/channels/bitbucket/index.js +6 -2
- package/dist/channels/bitbucket/replay.js +80 -56
- package/dist/channels/bitbucket/state.js +16 -7
- package/dist/channels/bitbucket/types.d.ts +11 -2
- package/dist/channels/bitbucket/types.d.ts.map +1 -1
- package/dist/channels/checks.js +18 -28
- package/dist/channels/deployments/deployments-channel.js +26 -34
- package/dist/channels/github/api.js +216 -210
- package/dist/channels/github/auth.d.ts +5 -1
- package/dist/channels/github/auth.d.ts.map +1 -1
- package/dist/channels/github/auth.js +157 -174
- package/dist/channels/github/binding.js +48 -39
- package/dist/channels/github/checks.js +9 -14
- package/dist/channels/github/cursor-account.js +6 -11
- package/dist/channels/github/defaults.js +105 -130
- package/dist/channels/github/forward.js +13 -17
- package/dist/channels/github/github-channel.d.ts +43 -2
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +1228 -958
- package/dist/channels/github/progress.js +145 -146
- package/dist/channels/github/replay.js +30 -39
- package/dist/channels/github/state.js +40 -16
- package/dist/channels/github/types.d.ts +30 -6
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/gitlab/api.js +100 -114
- package/dist/channels/gitlab/binding.js +52 -33
- package/dist/channels/gitlab/checks.js +28 -29
- package/dist/channels/gitlab/cursor-account.js +1 -1
- package/dist/channels/gitlab/defaults.js +9 -3
- package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
- package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-channel.js +95 -42
- package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
- package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-webhook.js +282 -249
- package/dist/channels/gitlab/index.d.ts +6 -2
- package/dist/channels/gitlab/index.d.ts.map +1 -1
- package/dist/channels/gitlab/index.js +6 -2
- package/dist/channels/gitlab/replay.js +50 -27
- package/dist/channels/gitlab/state.js +14 -6
- package/dist/channels/gitlab/types.d.ts +13 -2
- package/dist/channels/gitlab/types.d.ts.map +1 -1
- package/dist/channels/origin/api.js +100 -116
- package/dist/channels/origin/binding.js +15 -16
- package/dist/channels/origin/checks.js +30 -28
- package/dist/channels/origin/defaults.js +50 -65
- package/dist/channels/origin/origin-channel.js +266 -272
- package/dist/channels/origin/origin-webhook.js +70 -88
- package/dist/channels/origin/reactions.js +9 -21
- package/dist/channels/origin/state.js +13 -5
- package/dist/channels/slack/agentic-delivery.js +426 -478
- package/dist/channels/slack/agentic-posted.js +9 -10
- package/dist/channels/slack/agentic-signals.js +2 -3
- package/dist/channels/slack/api.js +417 -427
- package/dist/channels/slack/approvals.js +1 -1
- package/dist/channels/slack/assistant.js +37 -47
- package/dist/channels/slack/attachments.js +188 -206
- package/dist/channels/slack/auth.js +8 -6
- package/dist/channels/slack/bot-mentions.js +31 -45
- package/dist/channels/slack/channel-watch.js +42 -48
- package/dist/channels/slack/cli-project.js +112 -137
- package/dist/channels/slack/code-fences.js +3 -5
- package/dist/channels/slack/constants.js +2 -2
- package/dist/channels/slack/credentials.js +23 -38
- package/dist/channels/slack/defaults.js +292 -331
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +533 -460
- package/dist/channels/slack/doctor.js +200 -214
- package/dist/channels/slack/eval-directive.js +79 -96
- package/dist/channels/slack/event-id-dedupe.js +1 -1
- package/dist/channels/slack/external-policy.js +26 -39
- package/dist/channels/slack/footer.js +28 -41
- package/dist/channels/slack/inbound.d.ts +1 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +50 -31
- package/dist/channels/slack/init.d.ts +1 -5
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +42 -59
- package/dist/channels/slack/interactive.d.ts +9 -3
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +160 -162
- package/dist/channels/slack/links.js +1 -2
- package/dist/channels/slack/live-delivery.js +172 -190
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +44 -23
- package/dist/channels/slack/message-body.js +2 -2
- package/dist/channels/slack/nudge-carrier.js +30 -42
- package/dist/channels/slack/nudge-store.js +164 -191
- package/dist/channels/slack/paint-start.js +66 -81
- package/dist/channels/slack/placeholder.js +123 -152
- package/dist/channels/slack/pr-ref.js +1 -1
- package/dist/channels/slack/progress-delivery.js +65 -78
- package/dist/channels/slack/reasoning-card.js +36 -49
- package/dist/channels/slack/recording-sink.js +12 -24
- package/dist/channels/slack/reply-options.js +7 -12
- package/dist/channels/slack/self-identity.js +27 -35
- package/dist/channels/slack/sender-name.d.ts +12 -3
- package/dist/channels/slack/sender-name.d.ts.map +1 -1
- package/dist/channels/slack/sender-name.js +57 -61
- package/dist/channels/slack/setup.js +2 -4
- package/dist/channels/slack/slack-channel.d.ts +6 -4
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +441 -308
- package/dist/channels/slack/socket-mode.js +38 -52
- package/dist/channels/slack/thread-context.js +143 -160
- package/dist/channels/slack/tool-approval-events.js +149 -166
- package/dist/channels/slack/tool-cards.js +6 -11
- package/dist/channels/slack/tool-chip.js +1 -2
- package/dist/channels/slack/types.d.ts +15 -17
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/channels/slack/upload.js +84 -97
- package/dist/channels/slack/user-info.js +27 -41
- package/dist/channels.js +9 -20
- package/dist/dashboard-session-url.js +3 -4
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.BNhEdGa8.js → app.DXI7bwox.js} +4 -4
- package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DIdUV1Ph.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
- package/dist/docs/assets/chunks/{arc.lELI4_SR.js → arc.BOG1yms8.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.iCMdvuoM.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.C1-nDJBf.js → baseUniq.H044KjKs.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.ClemzBox.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BqTak6cR.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
- package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CUS3qs_R.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.dz5fdHcl.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.D6BEBmve.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.B5uK4ID9.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.PgOJgNQs.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CvkTrCii.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnSfKYsB.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.MZH6v5UC.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BBbw_YZi.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.CNJB2l7E.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.BQzlnFfq.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DkgqqZMz.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DIT8L7H_.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.3xLPZWGJ.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.5_IHz8jF.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BGUCXz8A.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DbfFavS1.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.D2yKdeNW.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CSCxwHba.js → graph.BVqKRmRo.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.FDeb6xHY.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DbeYs9VL.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CWjKINpx.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B4FrAlwz.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
- package/dist/docs/assets/chunks/{layout.DFGxQ9ab.js → layout.CGU3gfSf.js} +1 -1
- package/dist/docs/assets/chunks/{linear.BmjZ-G59.js → linear.DaihpW_n.js} +1 -1
- package/dist/docs/assets/chunks/{min.DZSxulMW.js → min.BS-j8kHQ.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CHLi3-aN.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DteG-CkU.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.D458ipN3.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DcFgUxst.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BwQAMmSA.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.B_Xdsrh9.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CdfDW6-C.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
- package/dist/docs/assets/chunks/{theme.sfdL3srp.js → theme.DaplWQhQ.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.56-4hXaC.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CvZSQBO7.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.C9qc8k39.js → wardley-RL74JXVD.iXazD3Z7.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D9s0nihi.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.BVJSpYrC.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
- package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
- package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
- package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
- package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
- package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +37 -37
- package/dist/docs/building-with-agents.md +2 -0
- package/dist/docs/deployment.html +38 -38
- package/dist/docs/deployment.md +7 -0
- package/dist/docs/evals.html +36 -36
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +38 -38
- package/dist/docs/guides/bitbucket.md +9 -1
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/github.html +39 -39
- package/dist/docs/guides/github.md +20 -4
- package/dist/docs/guides/gitlab.html +38 -38
- package/dist/docs/guides/gitlab.md +9 -1
- 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/migrate.html +66 -0
- package/dist/docs/guides/migrate.md +122 -0
- 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 +214 -6
- package/dist/docs/llms.txt +1 -0
- 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 -38
- package/dist/docs/reference/cli.md +39 -0
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +35 -35
- package/dist/docs/reference/hooks.html +35 -35
- package/dist/docs/reference/http-api.html +35 -35
- package/dist/docs/reference/instructions.html +35 -35
- package/dist/docs/reference/playground.html +35 -35
- package/dist/docs/reference/project-layout.html +35 -35
- package/dist/docs/reference/prompt.html +35 -35
- package/dist/docs/reference/schedules.html +35 -35
- package/dist/docs/reference/sessions.html +35 -35
- package/dist/docs/reference/skills.html +38 -38
- package/dist/docs/reference/subagents.html +35 -35
- package/dist/docs/reference/tools.html +35 -35
- package/dist/docs/templates/agentic-owners.html +35 -35
- package/dist/docs/templates/grokbot-agents.html +35 -35
- package/dist/docs/templates/security-reviewer.html +35 -35
- package/dist/docs/templates/thermo-quality-review.html +35 -35
- package/dist/docs/templates/thermo-review.html +35 -35
- package/dist/docs/templates/triage.html +35 -35
- package/dist/docs/troubleshooting.html +36 -36
- package/dist/docs/troubleshooting.md +1 -0
- package/dist/evals/assertions.js +20 -34
- package/dist/evals/expect.js +3 -6
- package/dist/evals/judge.js +5 -8
- package/dist/evals/loaders.js +45 -62
- package/dist/evals/matchers.js +2 -3
- package/dist/evals/reporters.js +43 -67
- package/dist/evals/results.js +1 -1
- package/dist/evals/run-facts.js +5 -6
- package/dist/evals.js +27 -15
- package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +100 -126
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
- package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
- package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
- package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
- package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
- package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
- package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
- package/dist/extensions/cursor-cloud-agents/tools/list.js +8 -19
- package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
- package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
- package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
- package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
- package/dist/extensions/jev/extension.js +3 -3
- package/dist/extensions/jev/lib/evaluate.js +43 -60
- package/dist/extensions/jev/tools/evaluate.js +6 -17
- package/dist/extensions/slack-communication/tools/post-file.js +1 -1
- package/dist/extensions.js +3 -5
- package/dist/files-backends/cursor-hosted.js +504 -523
- package/dist/files-backends/local-fs.js +72 -134
- package/dist/files.js +3 -3
- package/dist/filesystem.js +562 -861
- package/dist/index.js +16 -35
- package/dist/internal/advertise-tools.js +74 -86
- package/dist/internal/artifacts-store.js +298 -361
- package/dist/internal/as-of.js +2 -4
- package/dist/internal/authored-alias-hooks.js +6 -4
- package/dist/internal/authored-loaders.js +37 -52
- package/dist/internal/bounded-int.js +1 -2
- package/dist/internal/bounded.js +13 -24
- package/dist/internal/brand.js +1 -1
- package/dist/internal/browser-origin-guard.js +4 -4
- package/dist/internal/builtin-tools/artifacts.js +15 -27
- package/dist/internal/builtin-tools/index.js +2 -3
- package/dist/internal/builtin-tools/reminders.js +33 -52
- package/dist/internal/channel-architecture.d.ts +21 -0
- package/dist/internal/channel-architecture.d.ts.map +1 -0
- package/dist/internal/channel-architecture.js +41 -0
- package/dist/internal/channel-dispatch.js +3 -4
- package/dist/internal/channel-route-dispatch.js +40 -51
- package/dist/internal/channel-state.js +1 -1
- package/dist/internal/chat-client.js +319 -340
- package/dist/internal/cli-ax.js +1262 -1294
- package/dist/internal/cli-bitbucket.js +244 -272
- package/dist/internal/cli-convert-automation.js +137 -151
- package/dist/internal/cli-cursor.js +126 -147
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +1457 -1507
- package/dist/internal/cli-docs.js +130 -147
- package/dist/internal/cli-github.js +437 -476
- package/dist/internal/cli-gitlab.js +259 -288
- package/dist/internal/cli-images.js +266 -334
- package/dist/internal/cli-manifest.js +25 -37
- package/dist/internal/cli-mcp-oauth.js +228 -247
- package/dist/internal/cli-mcp.js +358 -383
- package/dist/internal/cli-migrate.js +73 -90
- package/dist/internal/cli-skills.js +35 -47
- package/dist/internal/cli-slack-manual.d.ts +0 -1
- package/dist/internal/cli-slack-manual.d.ts.map +1 -1
- package/dist/internal/cli-slack-manual.js +175 -204
- package/dist/internal/cli-slack.d.ts +1 -1
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +416 -456
- package/dist/internal/cloud-merge.js +7 -3
- package/dist/internal/cloud-turn-cost.js +8 -1
- package/dist/internal/connection-env.js +5 -6
- package/dist/internal/continuation-channel.js +10 -7
- package/dist/internal/continuation-identity.js +85 -67
- package/dist/internal/conversation-mirror.js +112 -131
- package/dist/internal/convert-automation/convert-workflow.js +21 -31
- package/dist/internal/cron.js +3 -3
- package/dist/internal/cursor/account-mcp.js +147 -146
- package/dist/internal/cursor/backend-client.js +290 -320
- package/dist/internal/cursor/bound-secret-file.js +3 -3
- package/dist/internal/cursor/credentials.js +127 -142
- package/dist/internal/cursor/cursor-api-transport.js +4 -8
- package/dist/internal/cursor/github-credentials.js +91 -108
- package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
- package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +5 -9
- package/dist/internal/cursor/session-token.js +36 -48
- package/dist/internal/cursor/store-api-client.js +77 -92
- package/dist/internal/cursor-account-mcp-auth.js +132 -149
- package/dist/internal/cursor-agent-template.js +1 -1
- package/dist/internal/cursor-deployment-relay.js +33 -54
- package/dist/internal/cursor-event-relay.js +65 -59
- package/dist/internal/cursor-relay-core.js +258 -286
- package/dist/internal/deferred-channel-session.js +3 -12
- package/dist/internal/deploy-client.js +410 -475
- package/dist/internal/deploy-manifest.d.ts +17 -0
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +71 -21
- package/dist/internal/deploy-source.js +31 -43
- package/dist/internal/discovery/agent-config.js +45 -59
- package/dist/internal/discovery/agent.js +276 -280
- package/dist/internal/discovery/channels.js +67 -80
- package/dist/internal/discovery/connections.js +286 -296
- package/dist/internal/discovery/context.js +2 -13
- package/dist/internal/discovery/cursor-plugin.js +223 -259
- package/dist/internal/discovery/extension-overlay.js +104 -131
- package/dist/internal/discovery/extensions.js +276 -281
- package/dist/internal/discovery/fs.js +56 -79
- package/dist/internal/discovery/hooks.js +39 -50
- package/dist/internal/discovery/info.js +17 -19
- package/dist/internal/discovery/instructions.js +58 -71
- package/dist/internal/discovery/modules.js +45 -58
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +192 -215
- package/dist/internal/discovery/reminders.js +41 -52
- package/dist/internal/discovery/runtime.js +1 -1
- package/dist/internal/discovery/schedules.js +71 -82
- package/dist/internal/discovery/seed-files.js +21 -32
- package/dist/internal/discovery/services.js +74 -96
- package/dist/internal/discovery/skills.js +77 -94
- package/dist/internal/discovery/subagent.js +79 -95
- package/dist/internal/discovery/tools.js +12 -23
- package/dist/internal/distribution.js +2 -2
- package/dist/internal/docs-site.js +30 -45
- package/dist/internal/duration.js +1 -1
- package/dist/internal/env-file.js +48 -64
- package/dist/internal/eval-judge-model.js +17 -28
- package/dist/internal/eval-run-store.js +265 -254
- package/dist/internal/eval-runner.d.ts +8 -0
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +406 -408
- package/dist/internal/eval-transport.d.ts +24 -0
- package/dist/internal/eval-transport.d.ts.map +1 -0
- package/dist/internal/eval-transport.js +22 -0
- package/dist/internal/evals-client.js +242 -246
- package/dist/internal/event-log.js +72 -120
- package/dist/internal/event-mapper.js +30 -31
- package/dist/internal/factory-resource-channel.js +16 -30
- package/dist/internal/filesystem/errors.js +6 -6
- package/dist/internal/filesystem/format.js +10 -13
- package/dist/internal/filesystem/merge.js +52 -94
- package/dist/internal/filesystem/nearest.js +15 -27
- package/dist/internal/filesystem/scratch.js +65 -85
- package/dist/internal/filesystem/tools.js +221 -241
- package/dist/internal/filesystem/walk.js +76 -143
- package/dist/internal/framework-file-storage.js +118 -139
- package/dist/internal/framework-storage-selection.js +21 -13
- package/dist/internal/frontmatter.js +4 -6
- package/dist/internal/github-fanout.js +50 -64
- package/dist/internal/guest-network.js +96 -109
- package/dist/internal/handleAgentServeTrigger.js +121 -126
- package/dist/internal/host-files.js +73 -88
- package/dist/internal/host-kv.js +21 -36
- package/dist/internal/host-otel.js +22 -19
- package/dist/internal/host-platforms.js +49 -63
- package/dist/internal/hosted-catch-protocol.d.ts +1 -0
- package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-catch-protocol.js +1 -0
- package/dist/internal/hosted-catch.d.ts +5 -3
- package/dist/internal/hosted-catch.d.ts.map +1 -1
- package/dist/internal/hosted-catch.js +84 -93
- package/dist/internal/hosted-delivery-protocol.js +32 -8
- package/dist/internal/hosted-delivery.d.ts +13 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +614 -584
- package/dist/internal/hosted-eval-cases.d.ts +21 -0
- package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
- package/dist/internal/hosted-eval-cases.js +162 -0
- package/dist/internal/hosted-execution-diag.js +38 -30
- package/dist/internal/hosted-execution-flush.js +75 -66
- package/dist/internal/hosted-execution-latency.js +16 -8
- package/dist/internal/hosted-managed-automation.js +2 -2
- package/dist/internal/hosting.js +2 -3
- package/dist/internal/http-channel-define.js +4 -1
- package/dist/internal/http-channel.js +101 -112
- package/dist/internal/http-control-plane-session.d.ts +18 -1
- package/dist/internal/http-control-plane-session.d.ts.map +1 -1
- package/dist/internal/http-control-plane-session.js +66 -32
- package/dist/internal/incoming-headers-to-fetch.js +1 -2
- package/dist/internal/init-interview.js +73 -93
- package/dist/internal/init-project.js +182 -214
- package/dist/internal/init-scaffold.js +10 -21
- package/dist/internal/inline-stdio-mcp.js +80 -86
- package/dist/internal/install-cursor-skills.js +231 -273
- package/dist/internal/legacy-command-guard.js +18 -31
- package/dist/internal/listen-port.js +34 -45
- package/dist/internal/local-control-plane.js +293 -307
- package/dist/internal/local-env.js +1 -1
- package/dist/internal/local-ingress.js +15 -9
- package/dist/internal/log-ring.js +1 -2
- package/dist/internal/logs-client.js +207 -227
- package/dist/internal/map-pool.js +24 -38
- package/dist/internal/mcp-endpoint.js +204 -180
- package/dist/internal/mcp-host.js +165 -168
- package/dist/internal/mcp-oauth-on-demand.js +170 -207
- package/dist/internal/mcp-oauth-persist.js +15 -29
- package/dist/internal/mcp-oauth.js +209 -266
- package/dist/internal/named-webhook-secret.d.ts +39 -0
- package/dist/internal/named-webhook-secret.d.ts.map +1 -0
- package/dist/internal/named-webhook-secret.js +47 -0
- package/dist/internal/open-browser.js +2 -3
- package/dist/internal/otel/collector.js +104 -68
- package/dist/internal/otel/config.js +24 -37
- package/dist/internal/otel/http.js +5 -7
- package/dist/internal/otel/mcp.js +3 -12
- package/dist/internal/otel/runtime.js +69 -83
- package/dist/internal/package-inline-stdio.js +57 -65
- package/dist/internal/peer-connections.js +9 -5
- package/dist/internal/platform-schedule-sync.js +39 -54
- package/dist/internal/platform-timers.js +176 -210
- package/dist/internal/playground/static.js +1 -2
- package/dist/internal/playground/toolchain.js +37 -53
- package/dist/internal/playground-proxy.js +230 -270
- package/dist/internal/process-memory-telemetry.js +33 -51
- package/dist/internal/prompt-context.js +3 -6
- package/dist/internal/reminder-control-plane-protocol.js +46 -13
- package/dist/internal/reminder-runner.js +770 -785
- package/dist/internal/reminder-schedule.js +1 -1
- package/dist/internal/reminder-store.js +57 -78
- package/dist/internal/request-error-status.js +1 -3
- package/dist/internal/request-headers.js +2 -2
- package/dist/internal/resolve-prod-target.js +119 -135
- package/dist/internal/resolved-connections.js +16 -6
- package/dist/internal/run-client.js +221 -229
- package/dist/internal/runtime-dispatch-runner.js +18 -43
- package/dist/internal/schedule-runner.js +49 -58
- package/dist/internal/scm/pr-url.js +7 -6
- package/dist/internal/sdk-runner.js +388 -363
- package/dist/internal/serve-restart.js +26 -39
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +1283 -1244
- package/dist/internal/session-cost.js +7 -9
- package/dist/internal/session-engine.d.ts +3 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +2801 -2777
- package/dist/internal/session-links.js +12 -16
- package/dist/internal/session-run-log.js +134 -82
- package/dist/internal/session-store.js +133 -164
- package/dist/internal/sessions-client.js +97 -118
- package/dist/internal/skill-catalog.js +18 -23
- package/dist/internal/skills-sync.js +16 -30
- package/dist/internal/slack-provision-client.js +90 -116
- package/dist/internal/start-log-store.js +48 -67
- package/dist/internal/steering.js +1 -2
- package/dist/internal/storage-coordinator.js +160 -196
- package/dist/internal/store-mirror.js +16 -30
- package/dist/internal/stream-progress.js +6 -8
- package/dist/internal/terminal-style.js +3 -4
- package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
- package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
- package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
- package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
- package/dist/internal/tool-catalog.js +11 -5
- package/dist/internal/tool-result.js +1 -1
- package/dist/internal/trajectory.js +19 -22
- package/dist/internal/turn-cost.js +52 -62
- package/dist/internal/turn-governor.js +5 -8
- package/dist/internal/turn-lease-store.js +85 -105
- package/dist/internal/turn-outbox.js +28 -43
- package/dist/internal/update-check.js +231 -259
- package/dist/internal/v2-hosting.js +1 -2
- package/dist/internal/workspace-sync.js +25 -41
- package/dist/internal/workspace.js +111 -139
- package/dist/kv/memory-kv.js +27 -51
- package/dist/memory.js +106 -148
- package/dist/otel.js +5 -8
- package/dist/playground/assets/index-DXm_VXAQ.css +1 -0
- package/dist/playground/assets/{index-Co4CUVTQ.js → index-JekUQERK.js} +45 -45
- package/dist/playground/index.html +2 -2
- package/dist/prompt.js +2 -4
- package/dist/storage-backends/cursor-hosted-v2.js +53 -83
- package/dist/storage-backends/cursor-hosted.js +105 -145
- package/dist/storage-backends/file-kv.js +100 -128
- package/dist/storage-protocol.js +3 -5
- package/dist/storage.js +17 -26
- package/dist/types.d.ts +68 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +20 -18
- package/docs/building-with-agents.md +2 -0
- package/docs/deployment.md +7 -0
- package/docs/guides/bitbucket.md +9 -1
- package/docs/guides/github.md +20 -4
- package/docs/guides/gitlab.md +9 -1
- package/docs/guides/migrate.md +127 -0
- package/docs/reference/cli.md +39 -0
- package/docs/troubleshooting.md +1 -0
- package/package.json +1 -1
- package/skills/debug/SKILL.md +1 -0
- package/skills/github/SKILL.md +23 -0
- package/skills/migrate-v2/SKILL.md +51 -10
- package/dist/docs/assets/chunks/@localSearchIndexroot.BJ8UZggu.js +0 -1
- package/dist/docs/assets/chunks/channel.BTJ5J9FI.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D4BZ3cVV.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D4BZ3cVV.js +0 -1
- package/dist/docs/assets/chunks/clone.62tX-O-1.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DkTs1aEU.js +0 -1
- package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
- package/dist/playground/assets/index-C1g_PTTZ.css +0 -1
- /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
- /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.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,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hosted eval cases. The control plane runs each `defineEval` case as its own
|
|
3
|
+
* architecture v2 session: admission reserves the session's send for the
|
|
4
|
+
* case, execution runs the case body there with every `t.send` a turn on
|
|
5
|
+
* that session, and the verdict lands on the session log as
|
|
6
|
+
* `eval.case.result`, which the control plane reads back.
|
|
7
|
+
*/
|
|
8
|
+
import type { AgentProjectEvalsInfo } from "../types.js";
|
|
9
|
+
import type { HostedSendStart } from "./hosted-delivery.js";
|
|
10
|
+
import type { SessionEngine } from "./session-engine.js";
|
|
11
|
+
type CaseEngine = Pick<SessionEngine, "listEvents" | "interrupt" | "recordEvalCaseResult">;
|
|
12
|
+
export declare function hostedEvalCatalog(projectRoot: string): Promise<AgentProjectEvalsInfo>;
|
|
13
|
+
/** One turn per captured send, or the whole case for an eval-case send. */
|
|
14
|
+
export declare function hostedSendStart(deps: {
|
|
15
|
+
engine: CaseEngine;
|
|
16
|
+
projectRoot: string;
|
|
17
|
+
logger: (line: string) => void;
|
|
18
|
+
caseDeadlineMs?: number;
|
|
19
|
+
}): HostedSendStart;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=hosted-eval-cases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-eval-cases.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-eval-cases.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,qBAAqB,EAKtB,MAAM,aAAa,CAAC;AAIrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,KAAK,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,GAAG,WAAW,GAAG,sBAAsB,CAAC,CAAC;AAO3F,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAY3F;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,eAAe,CAelB"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hosted eval cases. The control plane runs each `defineEval` case as its own
|
|
3
|
+
* architecture v2 session: admission reserves the session's send for the
|
|
4
|
+
* case, execution runs the case body there with every `t.send` a turn on
|
|
5
|
+
* that session, and the verdict lands on the session log as
|
|
6
|
+
* `eval.case.result`, which the control plane reads back.
|
|
7
|
+
*/
|
|
8
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
9
|
+
import { describeError } from "./describe-error.js";
|
|
10
|
+
import { discoverEvals, runEvalCase } from "./eval-runner.js";
|
|
11
|
+
import { evalCaseOf } from "./http-control-plane-session.js";
|
|
12
|
+
import { RunSessionTimeoutError } from "./run-client.js";
|
|
13
|
+
import { buildTrajectory } from "./trajectory.js";
|
|
14
|
+
/** Under the 26-minute limit the host puts on one delivery. */
|
|
15
|
+
const CASE_DEADLINE_MS = 20 * 60_000;
|
|
16
|
+
/** Per tool-call input or output kept on the result; the session log keeps all of it. */
|
|
17
|
+
const MAX_TOOL_IO_CHARS = 8 * 1024;
|
|
18
|
+
export async function hostedEvalCatalog(projectRoot) {
|
|
19
|
+
const { evals, config } = await discoverEvals(projectRoot);
|
|
20
|
+
return {
|
|
21
|
+
protocol: 1,
|
|
22
|
+
cases: evals.map(e => ({
|
|
23
|
+
id: e.id,
|
|
24
|
+
fileId: e.fileId,
|
|
25
|
+
description: e.definition.description,
|
|
26
|
+
tags: e.definition.tags,
|
|
27
|
+
})),
|
|
28
|
+
config: { maxConcurrency: config.maxConcurrency, timeoutMs: config.timeoutMs },
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** One turn per captured send, or the whole case for an eval-case send. */
|
|
32
|
+
export function hostedSendStart(deps) {
|
|
33
|
+
return async ({ args, message, options, sessionPublicId }) => {
|
|
34
|
+
const evalCase = evalCaseOf(options);
|
|
35
|
+
if (evalCase === undefined) {
|
|
36
|
+
return args.send(message, options);
|
|
37
|
+
}
|
|
38
|
+
const done = runHostedEvalCase({
|
|
39
|
+
...deps,
|
|
40
|
+
args,
|
|
41
|
+
options,
|
|
42
|
+
sessionId: sessionPublicId,
|
|
43
|
+
evalCase,
|
|
44
|
+
});
|
|
45
|
+
return { id: sessionPublicId, waitForCompletion: () => done };
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The delivery finishes once the verdict is recorded, whatever the verdict:
|
|
50
|
+
* a failed case must not look like a failed delivery, which would retry it.
|
|
51
|
+
*/
|
|
52
|
+
async function runHostedEvalCase(input) {
|
|
53
|
+
const startedAt = Date.now();
|
|
54
|
+
const deadlineMs = input.caseDeadlineMs ?? CASE_DEADLINE_MS;
|
|
55
|
+
const deadline = new AbortController();
|
|
56
|
+
const cancel = new AbortController();
|
|
57
|
+
const result = await Promise.race([
|
|
58
|
+
runCase({ ...input, signal: cancel.signal }).catch(error => failedResult(input.evalCase, describeError(error), startedAt)),
|
|
59
|
+
sleep(deadlineMs, undefined, { signal: deadline.signal }).then(async () => {
|
|
60
|
+
// The losing case body keeps running; it must not start turns after this verdict.
|
|
61
|
+
cancel.abort();
|
|
62
|
+
await input.engine.interrupt(input.sessionId);
|
|
63
|
+
return failedResult(input.evalCase, `eval case exceeded ${deadlineMs / 60_000} minutes`, startedAt);
|
|
64
|
+
}),
|
|
65
|
+
]).finally(() => deadline.abort());
|
|
66
|
+
input.logger(`[bdk] eval case ${input.evalCase.caseId} (${input.evalCase.runId}): ${result.verdict ?? "failed"}`);
|
|
67
|
+
await input.engine.recordEvalCaseResult(input.sessionId, resultEventData(input.evalCase, result));
|
|
68
|
+
return { status: "finished" };
|
|
69
|
+
}
|
|
70
|
+
async function runCase(input) {
|
|
71
|
+
const startedAt = Date.now();
|
|
72
|
+
const { evals, config } = await discoverEvals(input.projectRoot);
|
|
73
|
+
const discovered = evals.find(e => e.id === input.evalCase.caseId);
|
|
74
|
+
if (discovered === undefined) {
|
|
75
|
+
return failedResult(input.evalCase, `No eval case ${JSON.stringify(input.evalCase.caseId)} in this release`, startedAt);
|
|
76
|
+
}
|
|
77
|
+
return runEvalCase(discovered, config, sessionTransport(input.engine, input.args, input.options), input.signal);
|
|
78
|
+
}
|
|
79
|
+
/** `t.send` as a turn on the admitted session, read back from its event log. */
|
|
80
|
+
function sessionTransport(engine, args, base) {
|
|
81
|
+
return {
|
|
82
|
+
async send(turn) {
|
|
83
|
+
turn.signal?.throwIfAborted();
|
|
84
|
+
const session = await args.send(turn.message, {
|
|
85
|
+
...base,
|
|
86
|
+
workspaceDir: turn.options.workspaceDir,
|
|
87
|
+
workspaceFiles: turn.options.workspaceFiles,
|
|
88
|
+
cloud: turn.options.cloud,
|
|
89
|
+
});
|
|
90
|
+
if (turn.signal?.aborted) {
|
|
91
|
+
await engine.interrupt(session.id);
|
|
92
|
+
turn.signal.throwIfAborted();
|
|
93
|
+
}
|
|
94
|
+
const timer = new AbortController();
|
|
95
|
+
const settled = await Promise.race([
|
|
96
|
+
session.waitForCompletion().then(() => true),
|
|
97
|
+
sleep(Math.min(turn.timeoutMs, CASE_DEADLINE_MS), false, { signal: timer.signal }),
|
|
98
|
+
]).finally(() => timer.abort());
|
|
99
|
+
if (!settled) {
|
|
100
|
+
await engine.interrupt(session.id);
|
|
101
|
+
throw new RunSessionTimeoutError(`eval turn timed out after ${turn.timeoutMs}ms`, session.id, await engine.listEvents(session.id, turn.startIndex));
|
|
102
|
+
}
|
|
103
|
+
const events = await engine.listEvents(session.id, turn.startIndex);
|
|
104
|
+
for (const event of events) {
|
|
105
|
+
turn.onEvent?.(event);
|
|
106
|
+
}
|
|
107
|
+
const trajectory = buildTrajectory(events);
|
|
108
|
+
return {
|
|
109
|
+
sessionId: session.id,
|
|
110
|
+
events,
|
|
111
|
+
trajectory,
|
|
112
|
+
ok: trajectory.ok,
|
|
113
|
+
nextEventIndex: events.length === 0 ? undefined : events[events.length - 1].index + 1,
|
|
114
|
+
};
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function failedResult(ref, error, startedAt) {
|
|
119
|
+
return {
|
|
120
|
+
id: ref.caseId,
|
|
121
|
+
path: "",
|
|
122
|
+
ok: false,
|
|
123
|
+
verdict: "failed",
|
|
124
|
+
assertions: [],
|
|
125
|
+
inputs: [],
|
|
126
|
+
error,
|
|
127
|
+
logs: [],
|
|
128
|
+
metrics: {},
|
|
129
|
+
durationMs: Date.now() - startedAt,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function boundedIo(value) {
|
|
133
|
+
if (value === undefined) {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
const json = JSON.stringify(value) ?? "";
|
|
137
|
+
return json.length <= MAX_TOOL_IO_CHARS ? value : `${json.slice(0, MAX_TOOL_IO_CHARS)}…`;
|
|
138
|
+
}
|
|
139
|
+
function resultEventData(ref, result) {
|
|
140
|
+
return {
|
|
141
|
+
runId: ref.runId,
|
|
142
|
+
caseId: ref.caseId,
|
|
143
|
+
ok: result.ok,
|
|
144
|
+
verdict: result.verdict ?? (result.ok ? "passed" : "failed"),
|
|
145
|
+
skipReason: result.skipReason,
|
|
146
|
+
assertions: result.assertions,
|
|
147
|
+
durationMs: result.durationMs,
|
|
148
|
+
error: result.error,
|
|
149
|
+
logs: result.logs,
|
|
150
|
+
metrics: result.metrics,
|
|
151
|
+
metadata: result.metadata,
|
|
152
|
+
inputs: result.inputs,
|
|
153
|
+
finalText: result.finalText,
|
|
154
|
+
tools: result.tools,
|
|
155
|
+
toolCalls: result.toolCalls?.map(call => ({
|
|
156
|
+
toolName: call.toolName,
|
|
157
|
+
args: boundedIo(call.args),
|
|
158
|
+
output: boundedIo(call.output),
|
|
159
|
+
isError: call.isError,
|
|
160
|
+
})),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
@@ -2,15 +2,6 @@
|
|
|
2
2
|
* Local diagnostic record for one hosted execution. Flushed with durable
|
|
3
3
|
* execution history and process output.
|
|
4
4
|
*/
|
|
5
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
-
});
|
|
13
|
-
};
|
|
14
5
|
import { createHash, randomBytes } from "node:crypto";
|
|
15
6
|
import { mkdir, rename, unlink, writeFile } from "node:fs/promises";
|
|
16
7
|
import { join } from "node:path";
|
|
@@ -69,9 +60,8 @@ export const HOSTED_ERROR_SNIPPET_MAX_CHARS = 700;
|
|
|
69
60
|
* `Error.stack` with its message and first frames.
|
|
70
61
|
*/
|
|
71
62
|
export function hostedErrorStackSnippet(error) {
|
|
72
|
-
var _a;
|
|
73
63
|
if (error instanceof Error) {
|
|
74
|
-
const stack =
|
|
64
|
+
const stack = error.stack?.trim();
|
|
75
65
|
if (stack !== undefined && stack.length > 0) {
|
|
76
66
|
const lines = stack
|
|
77
67
|
.split("\n")
|
|
@@ -132,7 +122,7 @@ export function parseHostedExecutionDiag(raw) {
|
|
|
132
122
|
try {
|
|
133
123
|
parsed = JSON.parse(raw);
|
|
134
124
|
}
|
|
135
|
-
catch
|
|
125
|
+
catch {
|
|
136
126
|
return undefined;
|
|
137
127
|
}
|
|
138
128
|
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
@@ -185,27 +175,45 @@ export function parseHostedExecutionDiag(raw) {
|
|
|
185
175
|
if (body.signalAborted !== undefined && typeof body.signalAborted !== "boolean") {
|
|
186
176
|
return undefined;
|
|
187
177
|
}
|
|
188
|
-
return
|
|
178
|
+
return {
|
|
179
|
+
v: HOSTED_EXECUTION_DIAG_VERSION,
|
|
180
|
+
executionId: body.executionId,
|
|
181
|
+
writtenAt: body.writtenAt,
|
|
182
|
+
sessionPublicId: body.sessionPublicId,
|
|
183
|
+
sessionId: body.sessionId,
|
|
184
|
+
turnStatus: body.turnStatus,
|
|
185
|
+
durationMs: body.durationMs,
|
|
186
|
+
...(message === undefined ? {} : { message }),
|
|
187
|
+
...(stack === undefined ? {} : { stack }),
|
|
188
|
+
...(body.signalAborted === true ? { signalAborted: true } : {}),
|
|
189
|
+
...(requestId === undefined ? {} : { requestId }),
|
|
190
|
+
...(abortReason === undefined ? {} : { abortReason }),
|
|
191
|
+
...(failureCode === undefined ? {} : { failureCode }),
|
|
192
|
+
...(errorCode === undefined ? {} : { errorCode }),
|
|
193
|
+
...(classification === undefined ? {} : { classification }),
|
|
194
|
+
};
|
|
189
195
|
}
|
|
190
196
|
/**
|
|
191
197
|
* Overwrite the per-execution diag file. Soft-fail: a write error must not
|
|
192
198
|
* change the hosted-execution HTTP reply.
|
|
193
199
|
*/
|
|
194
|
-
export function writeHostedExecutionDiag(stateRoot, diag) {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
:
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
200
|
+
export async function writeHostedExecutionDiag(stateRoot, diag) {
|
|
201
|
+
const path = hostedExecutionDiagPath(stateRoot);
|
|
202
|
+
const tmp = `${path}.${randomBytes(8).toString("hex")}.tmp`;
|
|
203
|
+
try {
|
|
204
|
+
await mkdir(stateRoot, { recursive: true });
|
|
205
|
+
const serialized = JSON.stringify(diag);
|
|
206
|
+
const body = serialized.length > HOSTED_EXECUTION_DIAG_MAX_BYTES
|
|
207
|
+
? JSON.stringify({
|
|
208
|
+
...diag,
|
|
209
|
+
stack: undefined,
|
|
210
|
+
message: boundedOptionalString(diag.message, 256),
|
|
211
|
+
})
|
|
212
|
+
: serialized;
|
|
213
|
+
await writeFile(tmp, body, "utf8");
|
|
214
|
+
await rename(tmp, path);
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
await unlink(tmp).catch(() => undefined);
|
|
218
|
+
}
|
|
211
219
|
}
|
|
@@ -8,15 +8,6 @@
|
|
|
8
8
|
* Between running and terminal, {@link refreshStartLogWhile} refreshes only
|
|
9
9
|
* process output.
|
|
10
10
|
*/
|
|
11
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
12
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
13
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
14
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
15
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
16
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
17
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
18
|
-
});
|
|
19
|
-
};
|
|
20
11
|
import { hostedErrorStackSnippet, writeHostedExecutionDiag, } from "./hosted-execution-diag.js";
|
|
21
12
|
import { serializeSessionRunError, snapshotSessionRunLogs, } from "./session-run-log.js";
|
|
22
13
|
const MAX_ERROR_MESSAGE_LENGTH = 1024;
|
|
@@ -29,79 +20,97 @@ function boundedMessage(text) {
|
|
|
29
20
|
* Write local diagnostics and durable output together. Soft-fail per sink so
|
|
30
21
|
* a storage outage does not change the hosted response.
|
|
31
22
|
*/
|
|
32
|
-
export function flushHostedExecutionRecord(sinks, fields) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
23
|
+
export async function flushHostedExecutionRecord(sinks, fields) {
|
|
24
|
+
const writtenAt = new Date().toISOString();
|
|
25
|
+
const message = fields.message === undefined ? undefined : boundedMessage(fields.message);
|
|
26
|
+
const stack = fields.error === undefined ? undefined : hostedErrorStackSnippet(fields.error);
|
|
27
|
+
if (sinks.stateRoot !== undefined) {
|
|
28
|
+
await writeHostedExecutionDiag(sinks.stateRoot, {
|
|
29
|
+
v: 1,
|
|
30
|
+
executionId: fields.executionId,
|
|
31
|
+
writtenAt,
|
|
32
|
+
sessionPublicId: fields.sessionPublicId,
|
|
33
|
+
sessionId: fields.sessionId,
|
|
34
|
+
turnStatus: fields.turnStatus,
|
|
35
|
+
durationMs: fields.durationMs,
|
|
36
|
+
...(message === undefined ? {} : { message }),
|
|
37
|
+
...(stack === undefined || stack.length === 0 ? {} : { stack }),
|
|
38
|
+
signalAborted: fields.abortReason === "signal_abort" ? true : undefined,
|
|
39
|
+
...(fields.abortReason === undefined ? {} : { abortReason: fields.abortReason }),
|
|
40
|
+
failureCode: fields.failureCode,
|
|
41
|
+
...(fields.errorCode === undefined ? {} : { errorCode: fields.errorCode }),
|
|
42
|
+
classification: fields.classification,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
if (sinks.persistSessionRun !== undefined) {
|
|
46
|
+
const error = fields.error === undefined ? undefined : serializeSessionRunError(fields.error);
|
|
47
|
+
try {
|
|
48
|
+
await sinks.persistSessionRun({
|
|
49
|
+
executionId: fields.executionId,
|
|
50
|
+
writtenAt,
|
|
51
|
+
sessionPublicId: fields.sessionPublicId,
|
|
52
|
+
sessionId: fields.sessionId,
|
|
53
|
+
turnStatus: fields.turnStatus,
|
|
54
|
+
durationMs: fields.durationMs,
|
|
55
|
+
...(fields.abortReason === undefined ? {} : { abortReason: fields.abortReason }),
|
|
56
|
+
...(message === undefined ? {} : { message }),
|
|
57
|
+
...(error === undefined ? {} : { error }),
|
|
58
|
+
logs: snapshotSessionRunLogs(sinks.snapshotLogs?.() ?? []),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Soft-fail: a store outage must not change the HTTP reply.
|
|
41
63
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
catch (_c) {
|
|
48
|
-
// Soft-fail: a store outage must not change the HTTP reply.
|
|
49
|
-
}
|
|
64
|
+
}
|
|
65
|
+
if (sinks.flushStartLog !== undefined) {
|
|
66
|
+
try {
|
|
67
|
+
await sinks.flushStartLog(fields.sessionPublicId);
|
|
50
68
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
yield sinks.flushStartLog(fields.sessionPublicId);
|
|
54
|
-
}
|
|
55
|
-
catch (_d) {
|
|
56
|
-
// Soft-fail: same posture as the session-run persist.
|
|
57
|
-
}
|
|
69
|
+
catch {
|
|
70
|
+
// Soft-fail: same posture as the session-run persist.
|
|
58
71
|
}
|
|
59
|
-
}
|
|
72
|
+
}
|
|
60
73
|
}
|
|
61
74
|
/**
|
|
62
75
|
* Each refresh is a store write on the deployment's shared write budget, so
|
|
63
76
|
* keep it coarse. An unchanged tee costs nothing (the store skips the put).
|
|
64
77
|
*/
|
|
65
|
-
export const HOSTED_START_LOG_REFRESH_INTERVAL_MS =
|
|
78
|
+
export const HOSTED_START_LOG_REFRESH_INTERVAL_MS = 30_000;
|
|
66
79
|
/**
|
|
67
80
|
* Refresh the tee while `run` (the turn) settles: v2 has no engine to tail,
|
|
68
81
|
* so this snapshot is the only view of a running turn. A tick is skipped
|
|
69
82
|
* while a refresh is still in flight, and the last one settles before this
|
|
70
83
|
* returns so it cannot land after the terminal flush.
|
|
71
84
|
*/
|
|
72
|
-
export function refreshStartLogWhile(sinks, startLogId, run) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
});
|
|
85
|
+
export async function refreshStartLogWhile(sinks, startLogId, run) {
|
|
86
|
+
const flush = sinks.flushStartLog;
|
|
87
|
+
if (flush === undefined) {
|
|
88
|
+
return await run();
|
|
89
|
+
}
|
|
90
|
+
let refresh;
|
|
91
|
+
const timer = setInterval(() => {
|
|
92
|
+
// Soft-fail like the other flushes. A rejection left unhandled here would
|
|
93
|
+
// trip the process-death flush.
|
|
94
|
+
refresh ??= flush(startLogId)
|
|
95
|
+
.catch(() => undefined)
|
|
96
|
+
.finally(() => {
|
|
97
|
+
refresh = undefined;
|
|
98
|
+
});
|
|
99
|
+
}, HOSTED_START_LOG_REFRESH_INTERVAL_MS);
|
|
100
|
+
try {
|
|
101
|
+
return await run();
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
clearInterval(timer);
|
|
105
|
+
await refresh;
|
|
106
|
+
}
|
|
96
107
|
}
|
|
97
108
|
/**
|
|
98
109
|
* Durable-only crash flush. Leaves `hosted-execution.json` at `running`.
|
|
99
110
|
*/
|
|
100
|
-
export function flushHostedExecutionProcessDeath(args) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
});
|
|
111
|
+
export async function flushHostedExecutionProcessDeath(args) {
|
|
112
|
+
await args.flushProcessDeath(args.reason, args.error);
|
|
113
|
+
if (args.startLogId !== undefined && args.flushStartLog !== undefined) {
|
|
114
|
+
await args.flushStartLog(args.startLogId);
|
|
115
|
+
}
|
|
107
116
|
}
|
|
@@ -51,7 +51,7 @@ export function resetHostedExecutionLatencyForTests() {
|
|
|
51
51
|
nowOverride = undefined;
|
|
52
52
|
}
|
|
53
53
|
function resolveMeter() {
|
|
54
|
-
return meterOverride
|
|
54
|
+
return meterOverride ?? metrics.getMeter(INSTRUMENTATION);
|
|
55
55
|
}
|
|
56
56
|
function durationInstrument() {
|
|
57
57
|
if (durationHistogram === undefined) {
|
|
@@ -110,17 +110,19 @@ export function isDuringHostedExecutionLatency() {
|
|
|
110
110
|
* progress updates and final fallback posts are ignored.
|
|
111
111
|
*/
|
|
112
112
|
export function markHostedFirstVisibleReply(args) {
|
|
113
|
-
var _a;
|
|
114
113
|
const store = latencyAls.getStore();
|
|
115
114
|
if (store === undefined || store.firstVisibleAt !== undefined) {
|
|
116
115
|
return false;
|
|
117
116
|
}
|
|
118
117
|
store.firstVisibleAt = hostedExecutionNow();
|
|
119
118
|
store.firstVisibleOutcome = args.outcome;
|
|
120
|
-
store.deliverySurface =
|
|
119
|
+
store.deliverySurface = args.deliverySurface ?? "slack";
|
|
121
120
|
if (!store.visibleCounterEmitted) {
|
|
122
121
|
store.visibleCounterEmitted = true;
|
|
123
|
-
visibleInstrument().add(1,
|
|
122
|
+
visibleInstrument().add(1, {
|
|
123
|
+
...baseAttrs(store),
|
|
124
|
+
outcome: args.outcome,
|
|
125
|
+
});
|
|
124
126
|
}
|
|
125
127
|
return true;
|
|
126
128
|
}
|
|
@@ -134,7 +136,7 @@ export function noteHostedVisibleReplyError(args) {
|
|
|
134
136
|
return;
|
|
135
137
|
}
|
|
136
138
|
store.errorEmitted = true;
|
|
137
|
-
if (
|
|
139
|
+
if (args?.deliverySurface !== undefined) {
|
|
138
140
|
store.deliverySurface = args.deliverySurface;
|
|
139
141
|
}
|
|
140
142
|
else if (store.deliverySurface === "none") {
|
|
@@ -142,7 +144,10 @@ export function noteHostedVisibleReplyError(args) {
|
|
|
142
144
|
}
|
|
143
145
|
if (!store.visibleCounterEmitted) {
|
|
144
146
|
store.visibleCounterEmitted = true;
|
|
145
|
-
visibleInstrument().add(1,
|
|
147
|
+
visibleInstrument().add(1, {
|
|
148
|
+
...baseAttrs(store),
|
|
149
|
+
outcome: "error",
|
|
150
|
+
});
|
|
146
151
|
}
|
|
147
152
|
}
|
|
148
153
|
function resolveOutcome(store) {
|
|
@@ -171,7 +176,10 @@ export function finalizeHostedExecutionLatency(marks) {
|
|
|
171
176
|
const outcome = resolveOutcome(store);
|
|
172
177
|
if (!store.visibleCounterEmitted) {
|
|
173
178
|
store.visibleCounterEmitted = true;
|
|
174
|
-
visibleInstrument().add(1,
|
|
179
|
+
visibleInstrument().add(1, {
|
|
180
|
+
...baseAttrs(store),
|
|
181
|
+
outcome: "none",
|
|
182
|
+
});
|
|
175
183
|
}
|
|
176
184
|
const phases = {
|
|
177
185
|
durability_drain: Math.max(0, marks.drainAt - marks.completionAt),
|
|
@@ -189,7 +197,7 @@ export function finalizeHostedExecutionLatency(marks) {
|
|
|
189
197
|
};
|
|
190
198
|
const histogram = durationInstrument();
|
|
191
199
|
for (const [phase, value] of Object.entries(phases)) {
|
|
192
|
-
histogram.record(value,
|
|
200
|
+
histogram.record(value, { ...attrs, phase });
|
|
193
201
|
}
|
|
194
202
|
return {
|
|
195
203
|
channelKind: store.channelKind,
|
|
@@ -33,8 +33,8 @@ function managedAutomationTable() {
|
|
|
33
33
|
return table;
|
|
34
34
|
}
|
|
35
35
|
/** Long enough to outlive a slow review run kicked off by the delivery. */
|
|
36
|
-
const MANAGED_AUTOMATION_TTL_MS = 60 *
|
|
37
|
-
const MANAGED_AUTOMATION_MAX_ENTRIES =
|
|
36
|
+
const MANAGED_AUTOMATION_TTL_MS = 60 * 60_000;
|
|
37
|
+
const MANAGED_AUTOMATION_MAX_ENTRIES = 10_000;
|
|
38
38
|
export function recordHostedManagedAutomation(delivery) {
|
|
39
39
|
if (delivery.managedAutomation === undefined) {
|
|
40
40
|
console.info(`[bdk] hosted managedAutomation not recorded deliveryId=${delivery.deliveryId}: admission envelope carried no managedAutomation slice (non-managed delivery, or the control plane resolved no MCP servers and no Slack channels)`);
|
package/dist/internal/hosting.js
CHANGED
|
@@ -78,15 +78,14 @@ export function isReservedSecretName(name) {
|
|
|
78
78
|
* secret names, each prefixed with its field (`egressDomains: …`).
|
|
79
79
|
*/
|
|
80
80
|
export function hostingEntryErrors(declared) {
|
|
81
|
-
var _a, _b;
|
|
82
81
|
const errors = [];
|
|
83
|
-
for (const domain of
|
|
82
|
+
for (const domain of declared.egressDomains ?? []) {
|
|
84
83
|
const domainError = validateEgressDomain(domain);
|
|
85
84
|
if (domainError !== undefined) {
|
|
86
85
|
errors.push(`egressDomains: ${domainError}`);
|
|
87
86
|
}
|
|
88
87
|
}
|
|
89
|
-
for (const name of
|
|
88
|
+
for (const name of declared.secretNames ?? []) {
|
|
90
89
|
const nameError = validateSecretName(name);
|
|
91
90
|
if (nameError !== undefined) {
|
|
92
91
|
errors.push(`secretNames: ${nameError}`);
|
|
@@ -11,7 +11,10 @@ import { attachHttpControlPlaneAdmission } from "./http-control-plane-session.js
|
|
|
11
11
|
*/
|
|
12
12
|
export function httpChannel(config = {}) {
|
|
13
13
|
const definition = config.continuation !== undefined
|
|
14
|
-
? brandDefinition("http-channel",
|
|
14
|
+
? brandDefinition("http-channel", {
|
|
15
|
+
...config,
|
|
16
|
+
continuation: normalizeIdentity(config.continuation, "http"),
|
|
17
|
+
})
|
|
15
18
|
: brandDefinition("http-channel", config);
|
|
16
19
|
attachHttpControlPlaneAdmission(definition);
|
|
17
20
|
return definition;
|