@cursor/bdk 0.2.2 → 0.2.3
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/AGENTS.md +1 -1
- package/dist/bin/agent-serve.js +23 -7
- package/dist/channels/github/auth.d.ts.map +1 -1
- package/dist/channels/github/auth.js +36 -5
- package/dist/connections.d.ts +1 -1
- package/dist/connections.js +1 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.DtYVVVyK.js → app.BOIHhrKi.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.D5L-b34G.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.D47xT7J4.js → VPLocalSearchBox.D49zVZqM.js} +1 -1
- package/dist/docs/assets/chunks/{arc.CDJ6xzxR.js → arc.hmjb-sc4.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.l1Xnjd3N.js → architectureDiagram-Q4EWVU46.CxEI1KqM.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.x-finShZ.js → baseUniq.DHHvBWoV.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.COC3qynH.js → blockDiagram-DXYQGD6D.DnXW-3bu.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.DdQO850E.js → c4Diagram-AHTNJAMY.e-47O2jM.js} +1 -1
- package/dist/docs/assets/chunks/channel.BbOGaJQP.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.Dpn8omLk.js → chunk-4BX2VUAB.3ry4pYXB.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C0XWStUN.js → chunk-4TB4RGXK.DGIZFRx6.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.DsKSZfIM.js → chunk-55IACEB6.DKBnqg9U.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.dNU6JDu6.js → chunk-EDXVE4YY.BIU8Ue5k.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DN41fxKE.js → chunk-FMBD7UC4.DP-TFhjI.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.COpKCZus.js → chunk-OYMX7WX6.Ux0OYj5v.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.HDB-azx2.js → chunk-QZHKN3VN.BzHMwYox.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.DEeX_a2j.js → chunk-YZCP3GAM.D4OGAsSP.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Db58HCb1.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Db58HCb1.js +1 -0
- package/dist/docs/assets/chunks/clone.Co4MBflG.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.C3yGL2A8.js → cose-bilkent-S5V4N54A.Jq_7BUNx.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.Bpl24en4.js → dagre-KV5264BT.Di-skR2x.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.nFco6seU.js → diagram-5BDNPKRD.DeREHIdH.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DXhA6DWR.js → diagram-G4DWMVQ6.C7Kcqxro.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.8GoOYcwk.js → diagram-MMDJMWI5.BK3eohyo.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.DDBlqvlJ.js → diagram-TYMM5635.C6TyymXT.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.vl_N81P4.js → erDiagram-SMLLAGMA.DYGG-gGx.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.Cteg8g7I.js → flowDiagram-DWJPFMVM.C9nBcSV4.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.D4aMhlMM.js → ganttDiagram-T4ZO3ILL.wAg_ymsp.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.DF_J0D4q.js → gitGraphDiagram-UUTBAWPF.B87j9Oeg.js} +1 -1
- package/dist/docs/assets/chunks/{graph.DJs0LDCf.js → graph.CuFMj31w.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.Bb-4RQwg.js → infoDiagram-42DDH7IO.P_mLGumP.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DEtQRSbc.js → ishikawaDiagram-UXIWVN3A.DyuL_MsT.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.DhQQ75FA.js → journeyDiagram-VCZTEJTY.CtP09IoJ.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.C4gEw3Rk.js → kanban-definition-6JOO6SKY.BoeSYPZo.js} +1 -1
- package/dist/docs/assets/chunks/{layout.DT-PGlXa.js → layout.B0lMMtNo.js} +1 -1
- package/dist/docs/assets/chunks/{linear.BMMe__JW.js → linear.HxRBiAFX.js} +1 -1
- package/dist/docs/assets/chunks/{min.XyaU9K9Q.js → min.BGlFFHwS.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CbBM6xZ-.js → mindmap-definition-QFDTVHPH.JyLBD9M8.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DFJoIVou.js → pieDiagram-DEJITSTG.DnSmNZF8.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CQjkDYqb.js → quadrantDiagram-34T5L4WZ.CUCnbfCa.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.D-mK-JQu.js → requirementDiagram-MS252O5E.py0IVUn5.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BStQInpd.js → sankeyDiagram-XADWPNL6.Bkc-HWYp.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.CA_eooPJ.js → sequenceDiagram-FGHM5R23.Dqn8Mlv2.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BXl-b7ad.js → stateDiagram-FHFEXIEX.JikkoQUU.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CMsKhrW0.js +1 -0
- package/dist/docs/assets/chunks/{theme.q37tOs4x.js → theme.b6HQ6zG_.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.vjuaGOSe.js → timeline-definition-GMOUNBTQ.BvpSXiBj.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.BxduJl-F.js → vennDiagram-DHZGUBPP.CU7MVnZx.js} +1 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.BKwC4ctG.js +162 -0
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D1z3ds0D.js → wardleyDiagram-NUSXRM2D.BfaF6Uhe.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CRU5Ti9b.js → xychartDiagram-5P7HB3ND.Bg5dcpj4.js} +1 -1
- package/dist/docs/assets/{deployment.md.nGo1yIsa.js → deployment.md.BJ8i7Q6p.js} +5 -8
- package/dist/docs/assets/{deployment.md.nGo1yIsa.lean.js → deployment.md.BJ8i7Q6p.lean.js} +1 -1
- package/dist/docs/assets/{guides_github.md.C2_DSWlE.js → guides_github.md.Bq9kQU9B.js} +9 -3
- package/dist/docs/assets/{guides_github.md.C2_DSWlE.lean.js → guides_github.md.Bq9kQU9B.lean.js} +1 -1
- package/dist/docs/assets/{guides_slack.md.ZbHQETOT.js → guides_slack.md.diqqXTTm.js} +2 -2
- package/dist/docs/assets/{guides_slack.md.ZbHQETOT.lean.js → guides_slack.md.diqqXTTm.lean.js} +1 -1
- package/dist/docs/assets/{quickstart.md.wG4shE1f.js → quickstart.md.CHpHPBUN.js} +5 -3
- package/dist/docs/assets/{quickstart.md.wG4shE1f.lean.js → quickstart.md.CHpHPBUN.lean.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.CFMNPreZ.js → reference_artifacts.md.CQfKq8F2.js} +1 -1
- package/dist/docs/assets/reference_cli.md.DgeLTO18.js +91 -0
- package/dist/docs/assets/reference_cli.md.DgeLTO18.lean.js +1 -0
- package/dist/docs/assets/{reference_connections.md._XpKiOaF.js → reference_connections.md.COq--gAm.js} +7 -3
- package/dist/docs/assets/{reference_connections.md._XpKiOaF.lean.js → reference_connections.md.COq--gAm.lean.js} +1 -1
- package/dist/docs/assets/{reference_evals.md.DqNyHMA6.js → reference_evals.md.CJm3uCUm.js} +4 -4
- package/dist/docs/assets/{reference_evals.md.DqNyHMA6.lean.js → reference_evals.md.CJm3uCUm.lean.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.CRFTxt9M.js → reference_skills.md.Cy00QMKS.js} +3 -3
- package/dist/docs/assets/{reference_skills.md.CRFTxt9M.lean.js → reference_skills.md.Cy00QMKS.lean.js} +1 -1
- package/dist/docs/assets/troubleshooting.md.Cw5PKa3t.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.BzZSu1Gz.lean.js → troubleshooting.md.Cw5PKa3t.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +35 -35
- package/dist/docs/deployment.html +40 -43
- package/dist/docs/deployment.md +45 -15
- package/dist/docs/evals.html +35 -35
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +35 -35
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/github.html +43 -37
- package/dist/docs/guides/github.md +34 -0
- package/dist/docs/guides/gitlab.html +35 -35
- package/dist/docs/guides/grokbot-agents.html +35 -35
- package/dist/docs/guides/hooks.html +35 -35
- package/dist/docs/guides/improve.html +35 -35
- package/dist/docs/guides/jev.html +35 -35
- package/dist/docs/guides/mcp-oauth.html +35 -35
- package/dist/docs/guides/opentelemetry.html +35 -35
- package/dist/docs/guides/slack.html +37 -37
- package/dist/docs/guides/slack.md +5 -0
- 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 +198 -92
- package/dist/docs/quickstart.html +40 -38
- package/dist/docs/quickstart.md +7 -1
- package/dist/docs/reference/agent-config.html +35 -35
- package/dist/docs/reference/artifacts.html +37 -37
- package/dist/docs/reference/artifacts.md +1 -1
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +55 -61
- package/dist/docs/reference/cli.md +65 -63
- package/dist/docs/reference/connections.html +42 -38
- package/dist/docs/reference/connections.md +28 -2
- package/dist/docs/reference/evals.html +39 -39
- package/dist/docs/reference/evals.md +6 -7
- 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/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 +7 -3
- package/dist/extensions/cursor-grokbot-agents/extension.d.ts +77 -0
- package/dist/extensions/cursor-grokbot-agents/extension.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/extension.js +63 -0
- package/dist/extensions/cursor-grokbot-agents/lib/agents.d.ts +11 -0
- package/dist/extensions/cursor-grokbot-agents/lib/agents.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/agents.js +31 -0
- package/dist/extensions/cursor-grokbot-agents/lib/backend.d.ts +56 -0
- package/dist/extensions/cursor-grokbot-agents/lib/backend.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/backend.js +158 -0
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.d.ts +28 -0
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +59 -0
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.d.ts +53 -0
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +206 -0
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.js +15 -0
- package/dist/extensions/cursor-grokbot-agents/lib/lock.d.ts +12 -0
- package/dist/extensions/cursor-grokbot-agents/lib/lock.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/lib/lock.js +25 -0
- package/dist/extensions/cursor-grokbot-agents/skills/consult.md +40 -0
- package/dist/extensions/cursor-grokbot-agents/tools/ask.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/tools/ask.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/tools/ask.js +37 -0
- package/dist/extensions/cursor-grokbot-agents/tools/check.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/tools/check.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/tools/check.js +32 -0
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +24 -0
- package/dist/extensions/cursor-grokbot-agents/tools/list.d.ts +4 -0
- package/dist/extensions/cursor-grokbot-agents/tools/list.d.ts.map +1 -0
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +34 -0
- package/dist/internal/cli-ax.d.ts +1 -0
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +43 -10
- package/dist/internal/cli-deploy.d.ts +5 -1
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +22 -4
- package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
- package/dist/internal/cli-mcp-oauth.js +2 -1
- package/dist/internal/cli-skills.d.ts +1 -1
- package/dist/internal/cli-skills.d.ts.map +1 -1
- package/dist/internal/cli-skills.js +5 -5
- package/dist/internal/connection-env.d.ts +31 -0
- package/dist/internal/connection-env.d.ts.map +1 -0
- package/dist/internal/connection-env.js +84 -0
- package/dist/internal/cursor/backend-client.js +5 -0
- package/dist/internal/deploy-client.d.ts +30 -6
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +45 -9
- package/dist/internal/discovery/connections.d.ts.map +1 -1
- package/dist/internal/discovery/connections.js +11 -0
- package/dist/internal/hosted-delivery-protocol.d.ts +36 -11
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +31 -8
- package/dist/internal/hosted-delivery.d.ts +2 -2
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +228 -48
- package/dist/internal/hosting.d.ts +2 -2
- package/dist/internal/hosting.d.ts.map +1 -1
- package/dist/internal/hosting.js +9 -3
- package/dist/internal/install-cursor-skills.d.ts +20 -24
- package/dist/internal/install-cursor-skills.d.ts.map +1 -1
- package/dist/internal/install-cursor-skills.js +50 -48
- package/dist/internal/legacy-command-guard.d.ts +2 -0
- package/dist/internal/legacy-command-guard.d.ts.map +1 -1
- package/dist/internal/legacy-command-guard.js +10 -1
- package/dist/internal/mcp-host.d.ts +6 -0
- package/dist/internal/mcp-host.d.ts.map +1 -1
- package/dist/internal/mcp-host.js +35 -16
- package/dist/internal/sdk-runner.d.ts +2 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +10 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +11 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +9 -5
- package/dist/types.d.ts +11 -1
- package/dist/types.d.ts.map +1 -1
- package/docs/deployment.md +45 -15
- package/docs/guides/github.md +34 -0
- package/docs/guides/slack.md +5 -0
- package/docs/quickstart.md +7 -1
- package/docs/reference/artifacts.md +1 -1
- package/docs/reference/cli.md +65 -63
- package/docs/reference/connections.md +28 -2
- package/docs/reference/evals.md +6 -7
- package/docs/troubleshooting.md +7 -3
- package/package.json +1 -3
- package/scripts/install-cursor-skills.mjs +1 -1
- package/skills/create-agent/SKILL.md +1 -1
- package/skills/debug/SKILL.md +1 -1
- package/skills/deploy/SKILL.md +1 -1
- package/skills/evals/SKILL.md +1 -1
- package/skills/framework-map/SKILL.md +1 -1
- package/skills/github/SKILL.md +1 -1
- package/skills/hillclimb/SKILL.md +1 -1
- package/skills/mcp-auth/SKILL.md +1 -1
- package/skills/otel/SKILL.md +1 -1
- package/skills/setup-slack/SKILL.md +1 -1
- package/src/bin/agent-serve.ts +27 -6
- package/src/channels/github/auth.ts +44 -5
- package/src/connections.ts +1 -1
- package/src/extensions/cursor-grokbot-agents/extension.ts +132 -0
- package/src/extensions/cursor-grokbot-agents/lib/agents.ts +42 -0
- package/src/extensions/cursor-grokbot-agents/lib/backend.ts +208 -0
- package/src/extensions/cursor-grokbot-agents/lib/contacts.ts +74 -0
- package/src/extensions/cursor-grokbot-agents/lib/conversation.ts +260 -0
- package/src/extensions/cursor-grokbot-agents/lib/inputs.ts +21 -0
- package/src/extensions/cursor-grokbot-agents/lib/lock.ts +26 -0
- package/src/extensions/cursor-grokbot-agents/skills/consult.md +40 -0
- package/src/extensions/cursor-grokbot-agents/tools/ask.ts +32 -0
- package/src/extensions/cursor-grokbot-agents/tools/check.ts +25 -0
- package/src/extensions/cursor-grokbot-agents/tools/interrupt.ts +17 -0
- package/src/extensions/cursor-grokbot-agents/tools/list.ts +26 -0
- package/src/internal/cli-ax.ts +52 -7
- package/src/internal/cli-deploy.ts +39 -6
- package/src/internal/cli-mcp-oauth.ts +2 -1
- package/src/internal/cli-skills.ts +4 -5
- package/src/internal/connection-env.ts +106 -0
- package/src/internal/cursor/backend-client.ts +6 -0
- package/src/internal/deploy-client.ts +79 -9
- package/src/internal/discovery/connections.ts +11 -0
- package/src/internal/hosted-delivery-protocol.ts +57 -20
- package/src/internal/hosted-delivery.ts +486 -228
- package/src/internal/hosting.ts +10 -3
- package/src/internal/install-cursor-skills.ts +56 -53
- package/src/internal/legacy-command-guard.ts +13 -1
- package/src/internal/mcp-host.ts +45 -17
- package/src/internal/sdk-runner.ts +11 -0
- package/src/internal/server.ts +13 -1
- package/src/internal/session-engine.ts +9 -5
- package/src/types.ts +11 -1
- package/templates/agents-md/bot/lib/collect.ts +1 -4
- package/templates/code-wiki/bot/channels/github.ts +2 -2
- package/templates/demo/bot/channels/github.ts +5 -1
- package/templates/pr-autofixer/bot/lib/start-drive.ts +4 -4
- package/templates/triage/bot/lib/types.ts +6 -6
- package/dist/docs/assets/chunks/@localSearchIndexroot.BgTA2tV1.js +0 -1
- package/dist/docs/assets/chunks/channel.B2nMEx82.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D8iCH2ve.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D8iCH2ve.js +0 -1
- package/dist/docs/assets/chunks/clone.5XNLjby0.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.yGM2uLZQ.js +0 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.DKfyIejL.js +0 -162
- package/dist/docs/assets/reference_cli.md.BK2QUH67.js +0 -97
- package/dist/docs/assets/reference_cli.md.BK2QUH67.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.BzZSu1Gz.js +0 -1
- /package/dist/docs/assets/{reference_artifacts.md.CFMNPreZ.lean.js → reference_artifacts.md.CQfKq8F2.lean.js} +0 -0
|
@@ -26,6 +26,29 @@ import { endActiveHttpSpan } from "./otel/http.js";
|
|
|
26
26
|
import { ReminderValidationError, UnknownReminderError } from "./reminder-runner.js";
|
|
27
27
|
import { mapThrownRequestError, statusForThrownRequestError } from "./request-error-status.js";
|
|
28
28
|
import { HostedEnqueueNotActiveError } from "./session-engine.js";
|
|
29
|
+
function responseToReply(response) {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
var _a;
|
|
32
|
+
const value = (yield response.json());
|
|
33
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
34
|
+
throw new Error("Hosted delivery produced a non-object JSON response.");
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
status: response.status,
|
|
38
|
+
body: value,
|
|
39
|
+
serverTiming: (_a = response.headers.get("server-timing")) !== null && _a !== void 0 ? _a : undefined,
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function responseFromReply(reply) {
|
|
44
|
+
return Response.json(reply.body, {
|
|
45
|
+
status: reply.status,
|
|
46
|
+
headers: reply.serverTiming === undefined ? undefined : { "server-timing": reply.serverTiming },
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function isTransientRetryReply(reply) {
|
|
50
|
+
return reply.body.retry === HOSTED_GUEST_RETRY_TRANSIENT;
|
|
51
|
+
}
|
|
29
52
|
/**
|
|
30
53
|
* A second `send()` in one delivery is a deterministic authored bug — the
|
|
31
54
|
* wire protocol carries exactly one pending send per delivery — so it must
|
|
@@ -49,6 +72,23 @@ function boundedMessage(text) {
|
|
|
49
72
|
? `${text.slice(0, MAX_ERROR_MESSAGE_LENGTH)}…`
|
|
50
73
|
: text;
|
|
51
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* A channel's non-OK dispatch response body is the only record of why the
|
|
77
|
+
* delivery was refused (e.g. an authored 400 with a validation message).
|
|
78
|
+
* Carry it, bounded, into the terminal channel_dispatch_failed so the
|
|
79
|
+
* control plane's failure log is diagnosable.
|
|
80
|
+
*/
|
|
81
|
+
function channelDispatchDetail(response) {
|
|
82
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
+
try {
|
|
84
|
+
const text = (yield response.text()).trim();
|
|
85
|
+
return text === "" ? undefined : boundedMessage(text);
|
|
86
|
+
}
|
|
87
|
+
catch (_a) {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
52
92
|
function terminalHostedError(status, error, message) {
|
|
53
93
|
return hostedGuestErrorResponse({
|
|
54
94
|
status,
|
|
@@ -231,7 +271,7 @@ function runAdmission(input, adapter) {
|
|
|
231
271
|
}
|
|
232
272
|
if (!dispatched.ok) {
|
|
233
273
|
return {
|
|
234
|
-
response: terminalHostedError(dispatched.status >= 400 ? dispatched.status : 502, "channel_dispatch_failed"),
|
|
274
|
+
response: terminalHostedError(dispatched.status >= 400 ? dispatched.status : 502, "channel_dispatch_failed", yield channelDispatchDetail(dispatched)),
|
|
235
275
|
};
|
|
236
276
|
}
|
|
237
277
|
try {
|
|
@@ -333,8 +373,11 @@ function logGuestNetworkWait(phase, stats) {
|
|
|
333
373
|
export function registerHostedDeliveryRoute(input) {
|
|
334
374
|
var _a, _b;
|
|
335
375
|
const pending = new Map();
|
|
376
|
+
const admissions = new Map();
|
|
336
377
|
const activeOwners = new Map();
|
|
337
378
|
const pendingTtlMs = 10 * 60000;
|
|
379
|
+
/** Keep an in-flight owner turn addressable for status polls. */
|
|
380
|
+
const ownerTurnPendingTtlMs = 12 * 60 * 60000;
|
|
338
381
|
const waitForNetwork = (_a = input.waitForGuestNetwork) !== null && _a !== void 0 ? _a : (() => waitForGuestNetworkReady());
|
|
339
382
|
const consumeBoundSecrets = (_b = input.consumeBoundSecrets) !== null && _b !== void 0 ? _b : (() => consumeHostedBoundSecrets());
|
|
340
383
|
/**
|
|
@@ -375,7 +418,57 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
375
418
|
pending.delete(token);
|
|
376
419
|
}
|
|
377
420
|
}
|
|
421
|
+
for (const [deliveryId, operation] of admissions) {
|
|
422
|
+
if (operation.expiresAt <= now) {
|
|
423
|
+
admissions.delete(deliveryId);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
378
426
|
};
|
|
427
|
+
const runAdmissionOperation = (delivery, definition) => __awaiter(this, void 0, void 0, function* () {
|
|
428
|
+
return afterHostedWork(input.flushOtel, () => __awaiter(this, void 0, void 0, function* () {
|
|
429
|
+
const startedAt = performance.now();
|
|
430
|
+
let guestNetwork;
|
|
431
|
+
const finish = (response) => withServerTiming(response, performance.now() - startedAt, guestNetwork);
|
|
432
|
+
try {
|
|
433
|
+
const network = yield finishNetworkWait("admission");
|
|
434
|
+
guestNetwork = network.timing;
|
|
435
|
+
if (network.response !== undefined) {
|
|
436
|
+
return yield responseToReply(finish(network.response));
|
|
437
|
+
}
|
|
438
|
+
if (isHostedReminderAdmission(delivery)) {
|
|
439
|
+
return yield responseToReply(finish(yield dispatchHostedReminderAdmission(input, delivery)));
|
|
440
|
+
}
|
|
441
|
+
if (definition === undefined) {
|
|
442
|
+
return yield responseToReply(finish(terminalHostedError(404, "channel_not_found", `No channel named "${delivery.channelId}" is mounted.`)));
|
|
443
|
+
}
|
|
444
|
+
const admitted = yield dispatchHostedAdmission({
|
|
445
|
+
delivery,
|
|
446
|
+
definition,
|
|
447
|
+
args: input.buildHandlerArgs(delivery.channelId),
|
|
448
|
+
});
|
|
449
|
+
if (admitted.pendingSend === undefined) {
|
|
450
|
+
return yield responseToReply(finish(admitted.response));
|
|
451
|
+
}
|
|
452
|
+
pruneExpired();
|
|
453
|
+
const admissionToken = randomBytes(24).toString("hex");
|
|
454
|
+
pending.set(admissionToken, {
|
|
455
|
+
send: admitted.pendingSend,
|
|
456
|
+
channelKind: delivery.channelKind,
|
|
457
|
+
expiresAt: Date.now() + pendingTtlMs,
|
|
458
|
+
deliveryId: delivery.deliveryId,
|
|
459
|
+
});
|
|
460
|
+
return yield responseToReply(finish(Response.json({
|
|
461
|
+
ok: true,
|
|
462
|
+
v: HOSTED_DELIVERY_PROTOCOL_VERSION,
|
|
463
|
+
outcome: "send",
|
|
464
|
+
admissionToken,
|
|
465
|
+
})));
|
|
466
|
+
}
|
|
467
|
+
catch (error) {
|
|
468
|
+
return yield responseToReply(finish(terminalHostedError(503, "internal_error", boundedMessage(error instanceof Error ? error.message : String(error)))));
|
|
469
|
+
}
|
|
470
|
+
}));
|
|
471
|
+
});
|
|
379
472
|
// Hosted callers reach this only through Anyrun's signed pod-port URL.
|
|
380
473
|
// The marker is a second, route-specific fence distinct from channel auth.
|
|
381
474
|
const auth = request => {
|
|
@@ -394,9 +487,9 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
394
487
|
auth: [auth],
|
|
395
488
|
handler: (request) => __awaiter(this, void 0, void 0, function* () {
|
|
396
489
|
return afterHostedWork(input.flushOtel, () => __awaiter(this, void 0, void 0, function* () {
|
|
490
|
+
var _a;
|
|
397
491
|
const startedAt = performance.now();
|
|
398
|
-
|
|
399
|
-
const finish = (response) => withServerTiming(response, performance.now() - startedAt, guestNetwork);
|
|
492
|
+
const finish = (response) => withServerTiming(response, performance.now() - startedAt);
|
|
400
493
|
const unconsumed = finishBoundSecrets();
|
|
401
494
|
if (unconsumed !== undefined) {
|
|
402
495
|
return finish(unconsumed);
|
|
@@ -412,46 +505,65 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
412
505
|
console.info(`[agent-sdk] hosted admission rejected: envelope failed to parse keys=${JSON.stringify(rawKeys)} hasManagedAutomation=${String(rawKeys.includes("managedAutomation"))}`);
|
|
413
506
|
return finish(terminalHostedError(400, "invalid_hosted_admission", "Expected a supported Agent SDK hosted-admission envelope."));
|
|
414
507
|
}
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
if (
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
if (network.response !== undefined) {
|
|
421
|
-
return finish(network.response);
|
|
508
|
+
pruneExpired();
|
|
509
|
+
const existing = admissions.get(delivery.deliveryId);
|
|
510
|
+
if (delivery.mode === "status") {
|
|
511
|
+
if (existing === undefined) {
|
|
512
|
+
return finish(transientHostedError(409, "hosted_admission_unavailable", "No hosted admission is in flight for this delivery."));
|
|
422
513
|
}
|
|
423
|
-
return
|
|
514
|
+
return existing.settledReply === undefined
|
|
515
|
+
? finish(Response.json({
|
|
516
|
+
ok: true,
|
|
517
|
+
v: HOSTED_DELIVERY_PROTOCOL_VERSION,
|
|
518
|
+
outcome: "running",
|
|
519
|
+
}))
|
|
520
|
+
: responseFromReply(existing.settledReply);
|
|
424
521
|
}
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
522
|
+
if (existing !== undefined) {
|
|
523
|
+
if (existing.settledReply !== undefined && isTransientRetryReply(existing.settledReply)) {
|
|
524
|
+
admissions.delete(delivery.deliveryId);
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
return existing.settledReply === undefined
|
|
528
|
+
? finish(Response.json({
|
|
529
|
+
ok: true,
|
|
530
|
+
v: HOSTED_DELIVERY_PROTOCOL_VERSION,
|
|
531
|
+
outcome: "started",
|
|
532
|
+
}))
|
|
533
|
+
: responseFromReply(existing.settledReply);
|
|
534
|
+
}
|
|
428
535
|
}
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
536
|
+
console.info(`[agent-sdk] hosted admission received deliveryId=${delivery.deliveryId} channelId=${delivery.channelId} channelKind=${delivery.channelKind} eventType=${delivery.eventType} sessionMode=${delivery.sessionMode} managedAutomation=${delivery.managedAutomation === undefined ? "<absent>" : `automationUuid=${delivery.managedAutomation.automationUuid} mcpServerNames=${String(delivery.managedAutomation.mcpServerNames.length)} slackChannels=${delivery.managedAutomation.slackChannels === undefined ? "<absent>" : JSON.stringify(delivery.managedAutomation.slackChannels)}`}`);
|
|
537
|
+
recordHostedManagedAutomation(delivery);
|
|
538
|
+
const reminder = isHostedReminderAdmission(delivery);
|
|
539
|
+
const definition = reminder
|
|
540
|
+
? undefined
|
|
541
|
+
: (_a = input.channels.find(candidate => candidate.id === delivery.channelId)) === null || _a === void 0 ? void 0 : _a.definition;
|
|
542
|
+
if (!reminder && definition === undefined) {
|
|
543
|
+
return finish(terminalHostedError(404, "channel_not_found", `No channel named "${delivery.channelId}" is mounted.`));
|
|
433
544
|
}
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
545
|
+
let operation;
|
|
546
|
+
const execution = runAdmissionOperation(delivery, definition).then(reply => {
|
|
547
|
+
operation.settledReply = reply;
|
|
548
|
+
operation.expiresAt = Date.now() + pendingTtlMs;
|
|
549
|
+
return reply;
|
|
438
550
|
});
|
|
439
|
-
|
|
440
|
-
|
|
551
|
+
operation = {
|
|
552
|
+
execution,
|
|
553
|
+
expiresAt: Date.now() + ownerTurnPendingTtlMs,
|
|
554
|
+
};
|
|
555
|
+
admissions.set(delivery.deliveryId, operation);
|
|
556
|
+
const quickReply = yield Promise.race([
|
|
557
|
+
execution,
|
|
558
|
+
new Promise(resolve => setImmediate(() => resolve(undefined))),
|
|
559
|
+
]);
|
|
560
|
+
if (quickReply !== undefined) {
|
|
561
|
+
return responseFromReply(quickReply);
|
|
441
562
|
}
|
|
442
|
-
pruneExpired();
|
|
443
|
-
const admissionToken = randomBytes(24).toString("hex");
|
|
444
|
-
pending.set(admissionToken, {
|
|
445
|
-
send: admitted.pendingSend,
|
|
446
|
-
channelKind: delivery.channelKind,
|
|
447
|
-
expiresAt: Date.now() + pendingTtlMs,
|
|
448
|
-
deliveryId: delivery.deliveryId,
|
|
449
|
-
});
|
|
450
563
|
return finish(Response.json({
|
|
451
564
|
ok: true,
|
|
452
565
|
v: HOSTED_DELIVERY_PROTOCOL_VERSION,
|
|
453
|
-
outcome: "
|
|
454
|
-
admissionToken,
|
|
566
|
+
outcome: "started",
|
|
455
567
|
}));
|
|
456
568
|
}));
|
|
457
569
|
}),
|
|
@@ -484,13 +596,40 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
484
596
|
admitted.sessionPublicId !== execution.sessionPublicId) {
|
|
485
597
|
return finish(transientHostedError(409, "hosted_admission_session_mismatch", "The hosted admission token is already bound to another session."));
|
|
486
598
|
}
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
599
|
+
if (execution.mode === "start" &&
|
|
600
|
+
admitted.settledReply !== undefined &&
|
|
601
|
+
isTransientRetryReply(admitted.settledReply)) {
|
|
602
|
+
delete admitted.settledReply;
|
|
603
|
+
delete admitted.execution;
|
|
604
|
+
}
|
|
605
|
+
if (execution.mode === "status" ||
|
|
606
|
+
(execution.mode === "start" && admitted.execution !== undefined)) {
|
|
607
|
+
if (admitted.settledReply !== undefined) {
|
|
608
|
+
return responseFromReply(admitted.settledReply);
|
|
609
|
+
}
|
|
610
|
+
if (admitted.execution === undefined) {
|
|
611
|
+
return finish(transientHostedError(409, "hosted_admission_unavailable", "The hosted admission token has no owner turn in flight."));
|
|
612
|
+
}
|
|
613
|
+
if (execution.mode === "start") {
|
|
614
|
+
return finish(Response.json({
|
|
615
|
+
ok: true,
|
|
616
|
+
v: HOSTED_DELIVERY_PROTOCOL_VERSION,
|
|
617
|
+
outcome: "started",
|
|
618
|
+
}));
|
|
619
|
+
}
|
|
620
|
+
return finish(Response.json({
|
|
621
|
+
ok: true,
|
|
622
|
+
v: HOSTED_DELIVERY_PROTOCOL_VERSION,
|
|
623
|
+
outcome: "running",
|
|
624
|
+
}));
|
|
491
625
|
}
|
|
492
626
|
admitted.sessionPublicId = execution.sessionPublicId;
|
|
493
627
|
if (execution.mode === "enqueue") {
|
|
628
|
+
const network = yield finishNetworkWait("execution");
|
|
629
|
+
guestNetwork = network.timing;
|
|
630
|
+
if (network.response !== undefined) {
|
|
631
|
+
return finish(network.response);
|
|
632
|
+
}
|
|
494
633
|
const enqueueOutcome = yield enqueueIntoActiveOwner({
|
|
495
634
|
activeOwners,
|
|
496
635
|
sessionPublicId: execution.sessionPublicId,
|
|
@@ -500,7 +639,15 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
500
639
|
});
|
|
501
640
|
return finish(Response.json(Object.assign({ ok: true, v: HOSTED_DELIVERY_PROTOCOL_VERSION }, enqueueOutcome)));
|
|
502
641
|
}
|
|
503
|
-
|
|
642
|
+
if (admitted.execution === undefined) {
|
|
643
|
+
admitted.expiresAt = Date.now() + ownerTurnPendingTtlMs;
|
|
644
|
+
}
|
|
645
|
+
(_a = admitted.execution) !== null && _a !== void 0 ? _a : (admitted.execution = afterHostedWork(input.flushOtel, () => __awaiter(this, void 0, void 0, function* () {
|
|
646
|
+
const network = yield finishNetworkWait("execution");
|
|
647
|
+
guestNetwork = network.timing;
|
|
648
|
+
if (network.response !== undefined) {
|
|
649
|
+
return yield responseToReply(finish(network.response));
|
|
650
|
+
}
|
|
504
651
|
const startedAt = performance.now();
|
|
505
652
|
const executionId = hostedExecutionDiagId(execution.admissionToken);
|
|
506
653
|
const sinks = Object.assign(Object.assign(Object.assign(Object.assign({}, (input.stateRoot === undefined ? {} : { stateRoot: input.stateRoot })), (input.persistSessionRun === undefined
|
|
@@ -512,10 +659,10 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
512
659
|
: hostedFailureClassification(fields.failureCode);
|
|
513
660
|
yield flushHostedExecutionRecord(sinks, Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ executionId, sessionPublicId: execution.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs: Math.max(0, Math.round(performance.now() - startedAt)) }, (fields.message === undefined ? {} : { message: fields.message })), (fields.abortReason === undefined ? {} : { abortReason: fields.abortReason })), { failureCode: fields.failureCode }), (fields.errorCode === undefined ? {} : { errorCode: fields.errorCode })), { classification }), (fields.error === undefined ? {} : { error: fields.error })));
|
|
514
661
|
});
|
|
515
|
-
// Claim the file before the turn runs.
|
|
516
|
-
//
|
|
517
|
-
//
|
|
518
|
-
//
|
|
662
|
+
// Claim the file before the turn runs. If a later status request
|
|
663
|
+
// fails, the host reads this record while the turn may still be
|
|
664
|
+
// running; the marker prevents it from surfacing the previous
|
|
665
|
+
// delivery's terminal record.
|
|
519
666
|
yield writeDiag({
|
|
520
667
|
sessionId: "",
|
|
521
668
|
turnStatus: HOSTED_EXECUTION_DIAG_RUNNING_STATUS,
|
|
@@ -562,7 +709,10 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
562
709
|
// survive the park just like a finished turn's.
|
|
563
710
|
yield (_a = input.drainSessionDurability) === null || _a === void 0 ? void 0 : _a.call(input, session.id);
|
|
564
711
|
drainAt = hostedExecutionNow();
|
|
565
|
-
const consumedDeliveryIds = [
|
|
712
|
+
const consumedDeliveryIds = [
|
|
713
|
+
owner.primaryDeliveryId,
|
|
714
|
+
...owner.acceptedDeliveryIds,
|
|
715
|
+
];
|
|
566
716
|
if (consumedDeliveryIds.length > HOSTED_MAX_CONSUMED_DELIVERY_IDS) {
|
|
567
717
|
throw new Error(`hosted execute consumedDeliveryIds length ${String(consumedDeliveryIds.length)} exceeds cap ${String(HOSTED_MAX_CONSUMED_DELIVERY_IDS)}`);
|
|
568
718
|
}
|
|
@@ -597,7 +747,7 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
597
747
|
drainAt,
|
|
598
748
|
endedAt: hostedExecutionNow(),
|
|
599
749
|
});
|
|
600
|
-
return reply;
|
|
750
|
+
return yield responseToReply(finish(Response.json(reply.body, { status: reply.status })));
|
|
601
751
|
}
|
|
602
752
|
catch (error) {
|
|
603
753
|
owner.accepting = false;
|
|
@@ -623,9 +773,39 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
623
773
|
}
|
|
624
774
|
}
|
|
625
775
|
}));
|
|
626
|
-
}))(
|
|
627
|
-
|
|
628
|
-
|
|
776
|
+
})).then(reply => {
|
|
777
|
+
admitted.settledReply = reply;
|
|
778
|
+
admitted.expiresAt = Date.now() + pendingTtlMs;
|
|
779
|
+
return reply;
|
|
780
|
+
}, error => {
|
|
781
|
+
admitted.settledReply = {
|
|
782
|
+
status: 503,
|
|
783
|
+
body: {
|
|
784
|
+
ok: false,
|
|
785
|
+
error: "internal_error",
|
|
786
|
+
retry: HOSTED_GUEST_RETRY_TERMINAL,
|
|
787
|
+
classification: hostedFailureClassification("internal_error"),
|
|
788
|
+
message: error instanceof Error ? error.message : String(error),
|
|
789
|
+
},
|
|
790
|
+
};
|
|
791
|
+
admitted.expiresAt = Date.now() + pendingTtlMs;
|
|
792
|
+
return admitted.settledReply;
|
|
793
|
+
}));
|
|
794
|
+
if (execution.mode === "start") {
|
|
795
|
+
const quickReply = yield Promise.race([
|
|
796
|
+
admitted.execution,
|
|
797
|
+
new Promise(resolve => setImmediate(() => resolve(undefined))),
|
|
798
|
+
]);
|
|
799
|
+
if (quickReply !== undefined) {
|
|
800
|
+
return responseFromReply(quickReply);
|
|
801
|
+
}
|
|
802
|
+
return finish(Response.json({
|
|
803
|
+
ok: true,
|
|
804
|
+
v: HOSTED_DELIVERY_PROTOCOL_VERSION,
|
|
805
|
+
outcome: "started",
|
|
806
|
+
}));
|
|
807
|
+
}
|
|
808
|
+
return finish(terminalHostedError(400, "invalid_hosted_execution", "Owner execution requires start or status mode."));
|
|
629
809
|
}));
|
|
630
810
|
}),
|
|
631
811
|
});
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* backend stays authoritative — these exist so mistakes fail fast and
|
|
7
7
|
* locally with the same grammar the server enforces.
|
|
8
8
|
*/
|
|
9
|
-
/** `hosting.egressDomains` cap (
|
|
10
|
-
export declare const MAX_EGRESS_DOMAINS =
|
|
9
|
+
/** `hosting.egressDomains` cap (the manifest schema and deploy body agree). */
|
|
10
|
+
export declare const MAX_EGRESS_DOMAINS = 64;
|
|
11
11
|
/** Max secrets per deployment. */
|
|
12
12
|
export declare const MAX_SECRETS = 32;
|
|
13
13
|
/** Max secret value size in bytes. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosting.d.ts","sourceRoot":"","sources":["../../src/internal/hosting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH
|
|
1
|
+
{"version":3,"file":"hosting.d.ts","sourceRoot":"","sources":["../../src/internal/hosting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,kCAAkC;AAClC,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,sCAAsC;AACtC,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,8BAA8B;AAC9B,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,mEAAmE;AACnE,eAAO,MAAM,2BAA2B,YAAY,CAAC;AACrD,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,sDAAsD;AACtD,eAAO,MAAM,yBAAyB,EAAE,MAA+B,CAAC;AAIxE,gFAAgF;AAChF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK3E;AAED;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,YAAI,2BAA2B,CAAU,CAAC;AAW3F,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASvE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQnE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ1D;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAS3E;AAID,sEAAsE;AACtE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D"}
|
package/dist/internal/hosting.js
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* backend stays authoritative — these exist so mistakes fail fast and
|
|
7
7
|
* locally with the same grammar the server enforces.
|
|
8
8
|
*/
|
|
9
|
-
/** `hosting.egressDomains` cap (
|
|
10
|
-
export const MAX_EGRESS_DOMAINS =
|
|
9
|
+
/** `hosting.egressDomains` cap (the manifest schema and deploy body agree). */
|
|
10
|
+
export const MAX_EGRESS_DOMAINS = 64;
|
|
11
11
|
/** Max secrets per deployment. */
|
|
12
12
|
export const MAX_SECRETS = 32;
|
|
13
13
|
/** Max secret value size in bytes. */
|
|
@@ -39,12 +39,18 @@ const SECRET_NAME_PATTERN = /^[A-Z][A-Z0-9_]*$/;
|
|
|
39
39
|
// Lowercase hostname with >=2 labels, an alphabetic TLD, and at most one
|
|
40
40
|
// leading `*.` wildcard. Labels: alphanumeric with interior hyphens.
|
|
41
41
|
const EGRESS_DOMAIN_PATTERN = /^(\*\.)?([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z]+$/;
|
|
42
|
+
/** `host:port` asks for raw TCP egress; a wildcard host has no address to open. */
|
|
43
|
+
const EGRESS_TCP_PATTERN = /^([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z]+:([1-9]\d{0,4})$/;
|
|
42
44
|
/** Returns a human error message, or undefined when the domain is valid. */
|
|
43
45
|
export function validateEgressDomain(domain) {
|
|
44
46
|
if (EGRESS_DOMAIN_PATTERN.test(domain)) {
|
|
45
47
|
return undefined;
|
|
46
48
|
}
|
|
47
|
-
|
|
49
|
+
const tcp = EGRESS_TCP_PATTERN.exec(domain);
|
|
50
|
+
if (tcp !== null && Number(tcp[3]) <= 65535) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
return `Invalid egress domain ${JSON.stringify(domain)}: use a lowercase hostname with at least two labels and an alphabetic TLD (e.g. "api.example.com"), optionally with a single leading "*." wildcard or a trailing ":port" for raw TCP.`;
|
|
48
54
|
}
|
|
49
55
|
/**
|
|
50
56
|
* Returns a human error message, or undefined when the name is a valid
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Offer to install the package's coding-agent skills into the user's
|
|
3
|
-
* personal Cursor skills dir under `~/.cursor/skills/
|
|
3
|
+
* personal Cursor skills dir under `~/.cursor/skills/bdk/<skill>/`.
|
|
4
4
|
*
|
|
5
|
-
* Cursor walks `~/.cursor/skills` recursively, so the `
|
|
5
|
+
* Cursor walks `~/.cursor/skills` recursively, so the `bdk/` folder is
|
|
6
6
|
* only organizational — identity comes from the leaf folder that holds
|
|
7
7
|
* SKILL.md. Installed copies get `alwaysApply: true` so Cursor injects the
|
|
8
8
|
* skill body as a global rule instead of leaving it as an on-demand catalog
|
|
@@ -14,9 +14,7 @@
|
|
|
14
14
|
* install, so `pnpm install` in everysphere does not overwrite `~/.cursor`.
|
|
15
15
|
*/
|
|
16
16
|
/** Category folder under ~/.cursor/skills (Cursor discovers nested skills). */
|
|
17
|
-
export declare const CURSOR_SKILLS_NAMESPACE = "
|
|
18
|
-
/** Pre-rename install folder. Install deletes this so `/agentkit-*` rows disappear. */
|
|
19
|
-
export declare const LEGACY_CURSOR_SKILLS_NAMESPACE = "agentkit";
|
|
17
|
+
export declare const CURSOR_SKILLS_NAMESPACE = "bdk";
|
|
20
18
|
/** How long the `init` offer waits for an answer before skipping the install. */
|
|
21
19
|
export declare const SKILL_PROMPT_TIMEOUT_MS = 45000;
|
|
22
20
|
/**
|
|
@@ -27,9 +25,9 @@ export declare const CURSOR_JULY_SKILLS_HOME_ENV = "CURSOR_JULY_SKILLS_HOME";
|
|
|
27
25
|
/** Set to `1` to skip the postinstall skill copy. */
|
|
28
26
|
export declare const CURSOR_JULY_SKIP_SKILL_INSTALL_ENV = "CURSOR_JULY_SKIP_SKILL_INSTALL";
|
|
29
27
|
export interface PackageSkill {
|
|
30
|
-
/** Frontmatter `name` (e.g.
|
|
28
|
+
/** Frontmatter `name` (e.g. bdk-create-agent). */
|
|
31
29
|
name: string;
|
|
32
|
-
/** Leaf install directory under
|
|
30
|
+
/** Leaf install directory under bdk/ (e.g. create-agent). */
|
|
33
31
|
leafDir: string;
|
|
34
32
|
/** Absolute path to the source skill directory in the package. */
|
|
35
33
|
sourceDir: string;
|
|
@@ -42,19 +40,17 @@ export declare function cursorSkillsHome(home?: string): string;
|
|
|
42
40
|
* (npm, pnpm, yarn, npx, global), not the everysphere source checkout.
|
|
43
41
|
*/
|
|
44
42
|
export declare function isConsumerPackageInstall(packageRoot: string): boolean;
|
|
45
|
-
/** `~/.cursor/skills/
|
|
46
|
-
export declare function
|
|
47
|
-
/**
|
|
48
|
-
export declare function legacyAgentkitCursorSkillsDir(skillsHome?: string): string;
|
|
49
|
-
/** Absolute install path for one skill: `…/agentsdk/<leafDir>`. */
|
|
43
|
+
/** `~/.cursor/skills/bdk` — where package skills are installed. */
|
|
44
|
+
export declare function bdkCursorSkillsDir(skillsHome?: string): string;
|
|
45
|
+
/** Absolute install path for one skill: `…/bdk/<leafDir>`. */
|
|
50
46
|
export declare function skillInstallPath(skill: Pick<PackageSkill, "leafDir">, skillsHome?: string): string;
|
|
51
47
|
/**
|
|
52
48
|
* Skills shipped next to the running package. Uses the frontmatter `name`
|
|
53
|
-
* when present, otherwise `
|
|
49
|
+
* when present, otherwise `bdk-<dir>`.
|
|
54
50
|
*/
|
|
55
51
|
export declare function listShippedPackageSkills(packageRoot?: string): Promise<PackageSkill[]>;
|
|
56
52
|
/**
|
|
57
|
-
* Skills that do not yet have a SKILL.md under ~/.cursor/skills/
|
|
53
|
+
* Skills that do not yet have a SKILL.md under ~/.cursor/skills/bdk/.
|
|
58
54
|
* Install still overwrites every shipped skill when the user confirms — this
|
|
59
55
|
* helper is for messaging (fresh install vs update).
|
|
60
56
|
*/
|
|
@@ -67,15 +63,15 @@ export interface SkillInstallResult {
|
|
|
67
63
|
installed: string[];
|
|
68
64
|
/** Leaf dirs deleted because the package no longer ships them. */
|
|
69
65
|
removed: string[];
|
|
70
|
-
/**
|
|
71
|
-
|
|
66
|
+
/** Leftover namespace dirs deleted (`…/agentsdk`, `…/agentkit`). */
|
|
67
|
+
removedLegacyDirs: string[];
|
|
72
68
|
}
|
|
73
69
|
/**
|
|
74
|
-
* Copy each skill directory into `skillsHome/
|
|
70
|
+
* Copy each skill directory into `skillsHome/bdk/<leafDir>/`.
|
|
75
71
|
* Always overwrites so a package upgrade refreshes local Cursor skills.
|
|
76
72
|
* Strips monorepo-only frontmatter, sets `alwaysApply: true` so Cursor
|
|
77
73
|
* loads the body into context, and removes leaf dirs no longer shipped.
|
|
78
|
-
* Also deletes leftover `skillsHome/
|
|
74
|
+
* Also deletes leftover `skillsHome/agentsdk/` and `skillsHome/agentkit/`.
|
|
79
75
|
*/
|
|
80
76
|
export declare function installCursorSkills(skills: readonly PackageSkill[], skillsHome?: string): Promise<SkillInstallResult>;
|
|
81
77
|
/**
|
|
@@ -88,7 +84,7 @@ export interface SkillInstallPlan {
|
|
|
88
84
|
shipped: PackageSkill[];
|
|
89
85
|
/** Resolved `~/.cursor/skills`, to install into. */
|
|
90
86
|
skillsHome: string;
|
|
91
|
-
/** Install target: `<skillsHome>/
|
|
87
|
+
/** Install target: `<skillsHome>/bdk`. */
|
|
92
88
|
directory: string;
|
|
93
89
|
/** Leaf dirs the package ships. */
|
|
94
90
|
leaves: string[];
|
|
@@ -96,15 +92,15 @@ export interface SkillInstallPlan {
|
|
|
96
92
|
firstInstall: boolean;
|
|
97
93
|
/** Installed leaf dirs the package dropped; installing deletes them. */
|
|
98
94
|
orphans: string[];
|
|
99
|
-
/**
|
|
100
|
-
|
|
95
|
+
/** Leftover namespace dirs that still exist. Installing deletes them. */
|
|
96
|
+
legacyDirs: string[];
|
|
101
97
|
}
|
|
102
98
|
/** What an install would do, for the offer and for `install-skills`. */
|
|
103
99
|
export declare function planSkillInstall(options?: {
|
|
104
100
|
packageRoot?: string;
|
|
105
101
|
skillsHome?: string;
|
|
106
102
|
}): Promise<SkillInstallPlan>;
|
|
107
|
-
/** `Installed 9
|
|
103
|
+
/** `Installed 9 BDK skills`, what it dropped, and where it went. */
|
|
108
104
|
export declare function formatSkillInstall(plan: SkillInstallPlan, result: SkillInstallResult): string;
|
|
109
105
|
export type PackageInstallSkillSyncResult = {
|
|
110
106
|
status: "installed";
|
|
@@ -123,7 +119,7 @@ export interface SyncCursorSkillsOnPackageInstallOptions {
|
|
|
123
119
|
out?: (text: string) => void;
|
|
124
120
|
}
|
|
125
121
|
/**
|
|
126
|
-
* Copy shipped coding-agent skills into ~/.cursor/skills/
|
|
122
|
+
* Copy shipped coding-agent skills into ~/.cursor/skills/bdk during a
|
|
127
123
|
* consumer `npm install` / `npx`. Never throws: a failed copy must not fail
|
|
128
124
|
* the package install. No-op in the monorepo source tree and when
|
|
129
125
|
* `CURSOR_JULY_SKIP_SKILL_INSTALL=1`.
|
|
@@ -140,7 +136,7 @@ export interface OfferInstallCursorSkillsOptions {
|
|
|
140
136
|
}
|
|
141
137
|
/**
|
|
142
138
|
* On a TTY, offer to install/update every shipped package skill into
|
|
143
|
-
* ~/.cursor/skills/
|
|
139
|
+
* ~/.cursor/skills/bdk (always overwriting). No-op when non-interactive
|
|
144
140
|
* or the package ships no skills. An unanswered prompt skips the install
|
|
145
141
|
* rather than blocking the caller — see `SKILL_PROMPT_TIMEOUT_MS`.
|
|
146
142
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-cursor-skills.d.ts","sourceRoot":"","sources":["../../src/internal/install-cursor-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"install-cursor-skills.d.ts","sourceRoot":"","sources":["../../src/internal/install-cursor-skills.ts"],"names":[],"mappings":"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"}
|