@cursor/july 0.1.102 → 0.1.104
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 +34 -32
- package/README.md +10 -12
- package/dist/ab.d.ts +1 -1
- package/dist/ab.js +1 -1
- package/dist/bin/agent-serve.d.ts +12 -12
- package/dist/bin/agent-serve.js +114 -36
- package/dist/channels/bitbucket/api.d.ts +176 -0
- package/dist/channels/bitbucket/api.d.ts.map +1 -0
- package/dist/channels/bitbucket/api.js +419 -0
- package/dist/channels/bitbucket/binding.d.ts +71 -0
- package/dist/channels/bitbucket/binding.d.ts.map +1 -0
- package/dist/channels/bitbucket/binding.js +269 -0
- package/dist/channels/bitbucket/bitbucket-channel.d.ts +33 -0
- package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -0
- package/dist/channels/bitbucket/bitbucket-channel.js +120 -0
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts +61 -0
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -0
- package/dist/channels/bitbucket/bitbucket-webhook.js +394 -0
- package/dist/channels/bitbucket/checks.d.ts +67 -0
- package/dist/channels/bitbucket/checks.d.ts.map +1 -0
- package/dist/channels/bitbucket/checks.js +102 -0
- package/dist/channels/bitbucket/cursor-account.d.ts +37 -0
- package/dist/channels/bitbucket/cursor-account.d.ts.map +1 -0
- package/dist/channels/bitbucket/cursor-account.js +65 -0
- package/dist/channels/bitbucket/defaults.d.ts +26 -0
- package/dist/channels/bitbucket/defaults.d.ts.map +1 -0
- package/dist/channels/bitbucket/defaults.js +73 -0
- package/dist/channels/bitbucket/events.d.ts +22 -0
- package/dist/channels/bitbucket/events.d.ts.map +1 -0
- package/dist/channels/bitbucket/events.js +64 -0
- package/dist/channels/bitbucket/index.d.ts +34 -0
- package/dist/channels/bitbucket/index.d.ts.map +1 -0
- package/dist/channels/bitbucket/index.js +33 -0
- package/dist/channels/bitbucket/replay.d.ts +63 -0
- package/dist/channels/bitbucket/replay.d.ts.map +1 -0
- package/dist/channels/bitbucket/replay.js +304 -0
- package/dist/channels/bitbucket/state.d.ts +35 -0
- package/dist/channels/bitbucket/state.d.ts.map +1 -0
- package/dist/channels/bitbucket/state.js +21 -0
- package/dist/channels/bitbucket/types.d.ts +229 -0
- package/dist/channels/bitbucket/types.d.ts.map +1 -0
- package/dist/channels/bitbucket/types.js +1 -0
- package/dist/channels/change-monitors/change-monitors-channel.d.ts +5 -0
- package/dist/channels/change-monitors/change-monitors-channel.d.ts.map +1 -0
- package/dist/channels/change-monitors/change-monitors-channel.js +41 -0
- package/dist/channels/change-monitors/index.d.ts +4 -0
- package/dist/channels/change-monitors/index.d.ts.map +1 -0
- package/dist/channels/change-monitors/index.js +2 -0
- package/dist/channels/change-monitors/types.d.ts +39 -0
- package/dist/channels/change-monitors/types.d.ts.map +1 -0
- package/dist/channels/change-monitors/types.js +1 -0
- package/dist/channels/deployments/deployments-channel.d.ts +22 -14
- package/dist/channels/deployments/deployments-channel.d.ts.map +1 -1
- package/dist/channels/deployments/deployments-channel.js +25 -27
- package/dist/channels/deployments/types.d.ts +12 -6
- package/dist/channels/deployments/types.d.ts.map +1 -1
- package/dist/channels/github/binding.d.ts +6 -0
- package/dist/channels/github/binding.d.ts.map +1 -1
- package/dist/channels/github/binding.js +3 -3
- package/dist/channels/github/cursor-account.d.ts +7 -3
- package/dist/channels/github/cursor-account.d.ts.map +1 -1
- package/dist/channels/github/cursor-account.js +10 -6
- package/dist/channels/github/defaults.d.ts.map +1 -1
- package/dist/channels/github/defaults.js +4 -0
- package/dist/channels/github/events.d.ts +1 -1
- package/dist/channels/github/events.js +1 -1
- package/dist/channels/github/forward.d.ts +1 -1
- package/dist/channels/github/forward.d.ts.map +1 -1
- package/dist/channels/github/forward.js +3 -2
- package/dist/channels/github/github-channel.d.ts +29 -39
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +68 -101
- package/dist/channels/github/progress.d.ts +22 -0
- package/dist/channels/github/progress.d.ts.map +1 -1
- package/dist/channels/github/progress.js +32 -5
- package/dist/channels/github/replay.d.ts +1 -1
- package/dist/channels/github/replay.js +1 -1
- package/dist/channels/github/state.d.ts +2 -0
- package/dist/channels/github/state.d.ts.map +1 -1
- package/dist/channels/github/state.js +14 -11
- package/dist/channels/github/types.d.ts +2 -4
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/gitlab/api.d.ts +91 -0
- package/dist/channels/gitlab/api.d.ts.map +1 -0
- package/dist/channels/gitlab/api.js +150 -0
- package/dist/channels/gitlab/binding.d.ts +58 -0
- package/dist/channels/gitlab/binding.d.ts.map +1 -0
- package/dist/channels/gitlab/binding.js +139 -0
- package/dist/channels/gitlab/checks.d.ts +110 -0
- package/dist/channels/gitlab/checks.d.ts.map +1 -0
- package/dist/channels/gitlab/checks.js +126 -0
- package/dist/channels/gitlab/cursor-account.d.ts +36 -0
- package/dist/channels/gitlab/cursor-account.d.ts.map +1 -0
- package/dist/channels/gitlab/cursor-account.js +65 -0
- package/dist/channels/gitlab/defaults.d.ts +25 -0
- package/dist/channels/gitlab/defaults.d.ts.map +1 -0
- package/dist/channels/gitlab/defaults.js +60 -0
- package/dist/channels/gitlab/events.d.ts +12 -0
- package/dist/channels/gitlab/events.d.ts.map +1 -0
- package/dist/channels/gitlab/events.js +28 -0
- package/dist/channels/gitlab/gitlab-channel.d.ts +33 -0
- package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -0
- package/dist/channels/gitlab/gitlab-channel.js +120 -0
- package/dist/channels/gitlab/gitlab-webhook.d.ts +45 -0
- package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -0
- package/dist/channels/gitlab/gitlab-webhook.js +397 -0
- package/dist/channels/gitlab/index.d.ts +31 -0
- package/dist/channels/gitlab/index.d.ts.map +1 -0
- package/dist/channels/gitlab/index.js +30 -0
- package/dist/channels/gitlab/replay.d.ts +105 -0
- package/dist/channels/gitlab/replay.d.ts.map +1 -0
- package/dist/channels/gitlab/replay.js +206 -0
- package/dist/channels/gitlab/state.d.ts +33 -0
- package/dist/channels/gitlab/state.d.ts.map +1 -0
- package/dist/channels/gitlab/state.js +23 -0
- package/dist/channels/gitlab/types.d.ts +214 -0
- package/dist/channels/gitlab/types.d.ts.map +1 -0
- package/dist/channels/gitlab/types.js +1 -0
- package/dist/channels/issues/index.d.ts +4 -0
- package/dist/channels/issues/index.d.ts.map +1 -0
- package/dist/channels/issues/index.js +2 -0
- package/dist/channels/issues/issues-channel.d.ts +5 -0
- package/dist/channels/issues/issues-channel.d.ts.map +1 -0
- package/dist/channels/issues/issues-channel.js +37 -0
- package/dist/channels/issues/types.d.ts +33 -0
- package/dist/channels/issues/types.d.ts.map +1 -0
- package/dist/channels/issues/types.js +1 -0
- package/dist/channels/origin/api.d.ts.map +1 -1
- package/dist/channels/origin/api.js +4 -2
- package/dist/channels/origin/origin-channel.d.ts +4 -9
- package/dist/channels/origin/origin-channel.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.js +8 -48
- package/dist/channels/origin/types.d.ts +20 -2
- package/dist/channels/origin/types.d.ts.map +1 -1
- package/dist/channels/slack/eval-directive.d.ts.map +1 -1
- package/dist/channels/slack/eval-directive.js +1 -7
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +3 -3
- package/dist/channels/slack/setup.d.ts +1 -1
- package/dist/channels/slack/setup.d.ts.map +1 -1
- package/dist/channels/slack/setup.js +6 -13
- package/dist/channels/slack/types.d.ts +1 -1
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/channels.d.ts +1 -1
- package/dist/channels.d.ts.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +1 -1
- package/dist/connections.d.ts +1 -1
- package/dist/connections.js +1 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +4 -4
- package/dist/docs/assets/{app.CLA03RCz.js → app.DbMWUyGb.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.Bqsulb9K.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.ifxv-cJV.js → VPLocalSearchBox.DcNeTh9o.js} +1 -1
- package/dist/docs/assets/chunks/{theme.DWCwM6p-.js → theme.DMjhY3gl.js} +2 -2
- package/dist/docs/assets/concepts.md.DgEcZOfT.js +1 -0
- package/dist/docs/assets/{concepts.md.rPzW2HZN.lean.js → concepts.md.DgEcZOfT.lean.js} +1 -1
- package/dist/docs/assets/{evals.md.CPzDAwoH.js → evals.md.CbMoebP1.js} +1 -1
- package/dist/docs/assets/guides_cloud-agents.md.DS8RIjwx.js +9 -0
- package/dist/docs/assets/{guides_github.md.BtPr9GaP.js → guides_github.md.c0gdGJ-D.js} +1 -1
- package/dist/docs/assets/{guides_github.md.BtPr9GaP.lean.js → guides_github.md.c0gdGJ-D.lean.js} +1 -1
- package/dist/docs/assets/{guides_opentelemetry.md.BVTXDCRg.js → guides_opentelemetry.md.COh9jFVg.js} +7 -8
- package/dist/docs/assets/{guides_opentelemetry.md.BVTXDCRg.lean.js → guides_opentelemetry.md.COh9jFVg.lean.js} +1 -1
- package/dist/docs/assets/{index.md.Kiht7ell.js → index.md.D75GWhPl.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.BHeYMgme.js → reference_agent-config.md.CHNpiyp4.js} +3 -3
- package/dist/docs/assets/{reference_channels.md.Cd2f2iyV.js → reference_channels.md.DBGcaB7m.js} +2 -2
- package/dist/docs/assets/{reference_channels.md.Cd2f2iyV.lean.js → reference_channels.md.DBGcaB7m.lean.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.DfoeyvL0.js → reference_cli.md.CJNc_xYK.js} +1 -1
- package/dist/docs/assets/{reference_extensions.md.9WQMZe1l.js → reference_extensions.md.DykHW3qL.js} +11 -5
- package/dist/docs/assets/reference_extensions.md.DykHW3qL.lean.js +1 -0
- package/dist/docs/assets/reference_hooks.md.Ddt5DdgJ.js +73 -0
- package/dist/docs/assets/{reference_hooks.md.a8BJxMR5.lean.js → reference_hooks.md.Ddt5DdgJ.lean.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.DnX5nL-B.js → reference_playground.md.4myJPxrf.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.CA6QP6Lw.js → reference_project-layout.md.DuBu9a96.js} +2 -2
- package/dist/docs/assets/reference_result.md.BK5SxDrf.js +19 -0
- package/dist/docs/assets/reference_result.md.BK5SxDrf.lean.js +1 -0
- package/dist/docs/assets/{reference_sessions.md.NxFP_CAC.js → reference_sessions.md.CueyOHSL.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.NxFP_CAC.lean.js → reference_sessions.md.CueyOHSL.lean.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.B1up2r9W.js → reference_tools.md.aGrn99hP.js} +1 -1
- package/dist/docs/assets/skills_framework-map.md.haibFyoB.js +1 -0
- package/dist/docs/assets/{skills_otel.md.CgiZryR3.js → skills_otel.md.CqhobH3B.js} +3 -3
- package/dist/docs/assets/{skills_otel.md.CgiZryR3.lean.js → skills_otel.md.CqhobH3B.lean.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.x5zl6-GT.js → templates_pr-autofixer.md.Bds_XWcV.js} +2 -2
- package/dist/docs/assets/{templates_pr-autofixer.md.x5zl6-GT.lean.js → templates_pr-autofixer.md.Bds_XWcV.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +4 -4
- package/dist/docs/concepts.html +5 -5
- package/dist/docs/concepts.md +2 -4
- package/dist/docs/deployment.html +4 -4
- package/dist/docs/design/filesystem.md +376 -0
- package/dist/docs/design/runtime-abstraction.md +2 -3
- package/dist/docs/evals.html +6 -6
- package/dist/docs/evals.md +9 -7
- package/dist/docs/guides/agent-to-agent.html +4 -4
- package/dist/docs/guides/cloud-agents.html +6 -6
- package/dist/docs/guides/cloud-agents.md +4 -6
- package/dist/docs/guides/convert-automation.html +4 -4
- package/dist/docs/guides/github.html +6 -6
- package/dist/docs/guides/github.md +5 -1
- package/dist/docs/guides/human-in-the-loop.html +4 -4
- package/dist/docs/guides/mcp-oauth.html +5 -5
- package/dist/docs/guides/opentelemetry.html +10 -11
- package/dist/docs/guides/opentelemetry.md +41 -17
- package/dist/docs/guides/slack.html +4 -4
- package/dist/docs/guides/webhooks.html +4 -4
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +4 -4
- package/dist/docs/index.html +6 -6
- package/dist/docs/index.md +2 -2
- package/dist/docs/llms-full.txt +907 -262
- package/dist/docs/llms.txt +3 -2
- package/dist/docs/quickstart.html +4 -4
- package/dist/docs/reference/agent-config.html +8 -8
- package/dist/docs/reference/agent-config.md +6 -10
- package/dist/docs/reference/artifacts.html +5 -5
- package/dist/docs/reference/channels.html +6 -6
- package/dist/docs/reference/channels.md +38 -8
- package/dist/docs/reference/cli.html +5 -5
- package/dist/docs/reference/cli.md +3 -4
- package/dist/docs/reference/connections.html +4 -4
- package/dist/docs/reference/extensions.html +16 -10
- package/dist/docs/reference/extensions.md +86 -22
- package/dist/docs/reference/hooks.html +69 -10
- package/dist/docs/reference/hooks.md +215 -46
- package/dist/docs/reference/http-api.html +4 -4
- package/dist/docs/reference/instructions.html +4 -4
- package/dist/docs/reference/playground.html +5 -5
- package/dist/docs/reference/playground.md +3 -0
- package/dist/docs/reference/project-layout.html +6 -6
- package/dist/docs/reference/project-layout.md +2 -1
- package/dist/docs/reference/prompt.html +4 -4
- package/dist/docs/reference/result.html +45 -0
- package/dist/docs/reference/result.md +89 -0
- package/dist/docs/reference/schedules.html +4 -4
- package/dist/docs/reference/sessions.html +5 -5
- package/dist/docs/reference/sessions.md +3 -1
- package/dist/docs/reference/skills.html +4 -4
- package/dist/docs/reference/subagents.html +4 -4
- package/dist/docs/reference/tools.html +5 -5
- package/dist/docs/reference/tools.md +1 -2
- package/dist/docs/scaffolding-agents.html +4 -4
- package/dist/docs/skills/ab.html +4 -4
- package/dist/docs/skills/create-agent.html +4 -4
- package/dist/docs/skills/debug.html +4 -4
- package/dist/docs/skills/evals.html +4 -4
- package/dist/docs/skills/framework-map.html +5 -5
- package/dist/docs/skills/framework-map.md +3 -1
- package/dist/docs/skills/github.html +4 -4
- package/dist/docs/skills/hillclimb.html +4 -4
- package/dist/docs/skills/index.html +4 -4
- package/dist/docs/skills/mcp-auth.html +4 -4
- package/dist/docs/skills/otel.html +7 -7
- package/dist/docs/skills/otel.md +8 -3
- package/dist/docs/skills/setup-slack.html +4 -4
- package/dist/docs/storage.html +4 -4
- package/dist/docs/templates/agentic-owners.html +4 -4
- package/dist/docs/templates/agents-md.html +4 -4
- package/dist/docs/templates/code-wiki.html +4 -4
- package/dist/docs/templates/demo.html +4 -4
- package/dist/docs/templates/pr-autofixer.html +6 -6
- package/dist/docs/templates/pr-autofixer.md +0 -3
- package/dist/docs/templates/security-help.html +4 -4
- package/dist/docs/templates/security-reviewer.html +4 -4
- package/dist/docs/templates/triage.html +4 -4
- package/dist/docs/troubleshooting.html +4 -4
- package/dist/evals.d.ts +1 -1
- package/dist/evals.d.ts.map +1 -1
- package/dist/extensions.d.ts +20 -7
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +36 -5
- package/dist/files.d.ts +16 -3
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +16 -3
- package/dist/filesystem.d.ts +440 -0
- package/dist/filesystem.d.ts.map +1 -0
- package/dist/filesystem.js +1694 -0
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/internal/ab-snapshot.d.ts.map +1 -1
- package/dist/internal/ab-snapshot.js +0 -1
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +1 -3
- package/dist/internal/authored-alias-hooks.d.ts +4 -13
- package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
- package/dist/internal/authored-alias-hooks.js +4 -20
- package/dist/internal/authored-loaders.d.ts +2 -3
- package/dist/internal/authored-loaders.d.ts.map +1 -1
- package/dist/internal/authored-loaders.js +6 -20
- package/dist/internal/channel-dispatch.d.ts +43 -0
- package/dist/internal/channel-dispatch.d.ts.map +1 -0
- package/dist/internal/channel-dispatch.js +77 -0
- package/dist/internal/chat-client.d.ts +1 -1
- package/dist/internal/chat-client.js +1 -1
- package/dist/internal/cli-ax.d.ts +5 -5
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +5 -5
- package/dist/internal/cli-bitbucket.d.ts +33 -0
- package/dist/internal/cli-bitbucket.d.ts.map +1 -0
- package/dist/internal/cli-bitbucket.js +359 -0
- package/dist/internal/cli-convert-automation.d.ts +1 -1
- package/dist/internal/cli-convert-automation.js +2 -2
- package/dist/internal/cli-cursor.d.ts +1 -1
- package/dist/internal/cli-cursor.d.ts.map +1 -1
- package/dist/internal/cli-cursor.js +2 -4
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +2 -6
- package/dist/internal/cli-github.d.ts +1 -1
- package/dist/internal/cli-github.js +3 -3
- package/dist/internal/cli-gitlab.d.ts +37 -0
- package/dist/internal/cli-gitlab.d.ts.map +1 -0
- package/dist/internal/cli-gitlab.js +380 -0
- package/dist/internal/cli-mcp.d.ts.map +1 -1
- package/dist/internal/cli-mcp.js +2 -6
- 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 +2 -4
- package/dist/internal/continuation-channel.d.ts +18 -2
- package/dist/internal/continuation-channel.d.ts.map +1 -1
- package/dist/internal/continuation-channel.js +67 -5
- package/dist/internal/continuation-identity.d.ts +24 -17
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +246 -32
- package/dist/internal/conversation-mirror.d.ts.map +1 -1
- package/dist/internal/conversation-mirror.js +4 -3
- package/dist/internal/convert-automation/types.d.ts +1 -1
- package/dist/internal/convert-automation/types.js +1 -1
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
- package/dist/internal/cursor/account-mcp.js +1 -3
- package/dist/internal/cursor/backend-client.d.ts +5 -4
- package/dist/internal/cursor/backend-client.d.ts.map +1 -1
- package/dist/internal/cursor/backend-client.js +5 -6
- package/dist/internal/cursor/bound-secret-file.d.ts +56 -0
- package/dist/internal/cursor/bound-secret-file.d.ts.map +1 -0
- package/dist/internal/cursor/bound-secret-file.js +88 -0
- package/dist/internal/cursor/credentials.d.ts +39 -5
- package/dist/internal/cursor/credentials.d.ts.map +1 -1
- package/dist/internal/cursor/credentials.js +58 -8
- package/dist/internal/cursor/hosted-bound-secrets.d.ts +41 -0
- package/dist/internal/cursor/hosted-bound-secrets.d.ts.map +1 -0
- package/dist/internal/cursor/hosted-bound-secrets.js +54 -0
- package/dist/internal/cursor/hosted-deployment-secrets.d.ts +19 -5
- package/dist/internal/cursor/hosted-deployment-secrets.d.ts.map +1 -1
- package/dist/internal/cursor/hosted-deployment-secrets.js +29 -9
- package/dist/internal/cursor/hosted-store-secrets.d.ts +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +1 -1
- package/dist/internal/cursor-account-mcp-auth.d.ts.map +1 -1
- package/dist/internal/cursor-account-mcp-auth.js +2 -4
- package/dist/internal/cursor-deployment-relay.d.ts +6 -2
- package/dist/internal/cursor-deployment-relay.d.ts.map +1 -1
- package/dist/internal/cursor-deployment-relay.js +13 -9
- package/dist/internal/deploy-manifest.d.ts +1 -1
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +1 -1
- package/dist/internal/discovery/ab.d.ts +1 -1
- package/dist/internal/discovery/ab.d.ts.map +1 -1
- package/dist/internal/discovery/ab.js +21 -9
- package/dist/internal/discovery/agent.d.ts +6 -1
- package/dist/internal/discovery/agent.d.ts.map +1 -1
- package/dist/internal/discovery/agent.js +141 -120
- package/dist/internal/discovery/channels.d.ts +1 -1
- package/dist/internal/discovery/channels.d.ts.map +1 -1
- package/dist/internal/discovery/channels.js +14 -14
- package/dist/internal/discovery/connections.d.ts +1 -5
- package/dist/internal/discovery/connections.d.ts.map +1 -1
- package/dist/internal/discovery/connections.js +30 -44
- package/dist/internal/discovery/cursor-plugin.d.ts.map +1 -1
- package/dist/internal/discovery/cursor-plugin.js +1 -3
- package/dist/internal/discovery/extension-overlay.d.ts +32 -0
- package/dist/internal/discovery/extension-overlay.d.ts.map +1 -0
- package/dist/internal/discovery/extension-overlay.js +191 -0
- package/dist/internal/discovery/extensions.d.ts +11 -2
- package/dist/internal/discovery/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +211 -74
- package/dist/internal/discovery/hooks.d.ts +1 -1
- package/dist/internal/discovery/hooks.d.ts.map +1 -1
- package/dist/internal/discovery/hooks.js +15 -2
- package/dist/internal/discovery/info.d.ts.map +1 -1
- package/dist/internal/discovery/info.js +10 -1
- package/dist/internal/discovery/modules.d.ts.map +1 -1
- package/dist/internal/discovery/modules.js +8 -2
- package/dist/internal/discovery/names.d.ts +1 -1
- package/dist/internal/discovery/names.d.ts.map +1 -1
- package/dist/internal/discovery/names.js +1 -0
- package/dist/internal/discovery/project.d.ts +0 -2
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +64 -10
- package/dist/internal/discovery/runtime.d.ts.map +1 -1
- package/dist/internal/discovery/runtime.js +1 -2
- package/dist/internal/discovery/schedules.d.ts +1 -1
- package/dist/internal/discovery/schedules.d.ts.map +1 -1
- package/dist/internal/discovery/schedules.js +23 -2
- package/dist/internal/discovery/services.d.ts +6 -2
- package/dist/internal/discovery/services.d.ts.map +1 -1
- package/dist/internal/discovery/services.js +31 -1
- package/dist/internal/discovery/skills.d.ts +1 -6
- package/dist/internal/discovery/skills.d.ts.map +1 -1
- package/dist/internal/discovery/skills.js +8 -3
- package/dist/internal/discovery/subagent.d.ts +3 -0
- package/dist/internal/discovery/subagent.d.ts.map +1 -1
- package/dist/internal/discovery/subagent.js +109 -0
- package/dist/internal/discovery.d.ts +1 -2
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +1 -2
- package/dist/internal/distribution.d.ts +10 -27
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +25 -73
- package/dist/internal/docs-site.js +1 -1
- package/dist/internal/eval-run-store.d.ts +0 -1
- package/dist/internal/eval-run-store.d.ts.map +1 -1
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/factory-resource-channel.d.ts +33 -0
- package/dist/internal/factory-resource-channel.d.ts.map +1 -0
- package/dist/internal/factory-resource-channel.js +77 -0
- package/dist/internal/filesystem/errors.d.ts +64 -0
- package/dist/internal/filesystem/errors.d.ts.map +1 -0
- package/dist/internal/filesystem/errors.js +175 -0
- package/dist/internal/filesystem/format.d.ts +28 -0
- package/dist/internal/filesystem/format.d.ts.map +1 -0
- package/dist/internal/filesystem/format.js +213 -0
- package/dist/internal/filesystem/merge.d.ts +34 -0
- package/dist/internal/filesystem/merge.d.ts.map +1 -0
- package/dist/internal/filesystem/merge.js +196 -0
- package/dist/internal/filesystem/scratch.d.ts +59 -0
- package/dist/internal/filesystem/scratch.d.ts.map +1 -0
- package/dist/internal/filesystem/scratch.js +212 -0
- package/dist/internal/filesystem/sdk-schemas.d.ts +29 -0
- package/dist/internal/filesystem/sdk-schemas.d.ts.map +1 -0
- package/dist/internal/filesystem/sdk-schemas.js +153 -0
- package/dist/internal/filesystem/tools.d.ts +42 -0
- package/dist/internal/filesystem/tools.d.ts.map +1 -0
- package/dist/internal/filesystem/tools.js +618 -0
- package/dist/internal/filesystem/walk.d.ts +74 -0
- package/dist/internal/filesystem/walk.d.ts.map +1 -0
- package/dist/internal/filesystem/walk.js +339 -0
- package/dist/internal/framework-file-storage.d.ts +8 -0
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +8 -8
- package/dist/internal/github-fanout.d.ts +1 -1
- package/dist/internal/github-fanout.js +1 -1
- package/dist/internal/guest-network.d.ts +104 -0
- package/dist/internal/guest-network.d.ts.map +1 -0
- package/dist/internal/guest-network.js +309 -0
- package/dist/internal/host-otel.d.ts +3 -3
- package/dist/internal/host-otel.d.ts.map +1 -1
- package/dist/internal/host-otel.js +8 -4
- package/dist/internal/hosted-admission-adapter.d.ts +8 -7
- package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.d.ts +6 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +18 -5
- package/dist/internal/hosted-delivery.d.ts +18 -0
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +258 -118
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +1 -3
- package/dist/internal/init-interview.d.ts.map +1 -1
- package/dist/internal/init-interview.js +1 -3
- package/dist/internal/init-project.d.ts +2 -2
- package/dist/internal/init-project.js +2 -2
- package/dist/internal/inline-stdio-define-stub.d.ts +1 -1
- package/dist/internal/inline-stdio-define-stub.d.ts.map +1 -1
- package/dist/internal/inline-stdio-define-stub.js +1 -1
- package/dist/internal/is-record.d.ts +2 -0
- package/dist/internal/is-record.d.ts.map +1 -0
- package/dist/internal/is-record.js +3 -0
- package/dist/internal/json-schema.d.ts.map +1 -1
- package/dist/internal/json-schema.js +18 -10
- package/dist/internal/local-control-plane.d.ts +1 -2
- package/dist/internal/local-control-plane.d.ts.map +1 -1
- package/dist/internal/local-control-plane.js +3 -20
- package/dist/internal/mcp-endpoint.d.ts.map +1 -1
- package/dist/internal/mcp-endpoint.js +1 -3
- package/dist/internal/otel/collector.d.ts +12 -3
- package/dist/internal/otel/collector.d.ts.map +1 -1
- package/dist/internal/otel/collector.js +77 -125
- package/dist/internal/otel/config.d.ts +0 -2
- package/dist/internal/otel/config.d.ts.map +1 -1
- package/dist/internal/otel/config.js +17 -20
- package/dist/internal/otel/http.d.ts +2 -0
- package/dist/internal/otel/http.d.ts.map +1 -1
- package/dist/internal/otel/http.js +7 -1
- package/dist/internal/otel/mcp.d.ts.map +1 -1
- package/dist/internal/otel/mcp.js +3 -16
- package/dist/internal/otel/runtime.d.ts +26 -1
- package/dist/internal/otel/runtime.d.ts.map +1 -1
- package/dist/internal/otel/runtime.js +164 -15
- package/dist/internal/package-inline-stdio.d.ts.map +1 -1
- package/dist/internal/package-inline-stdio.js +3 -11
- package/dist/internal/playground/toolchain.d.ts +1 -1
- package/dist/internal/playground/toolchain.d.ts.map +1 -1
- package/dist/internal/playground/toolchain.js +1 -1
- package/dist/internal/request-error-status.d.ts +12 -0
- package/dist/internal/request-error-status.d.ts.map +1 -0
- package/dist/internal/request-error-status.js +52 -0
- package/dist/internal/resolve-prod-target.d.ts +1 -1
- package/dist/internal/resolve-prod-target.d.ts.map +1 -1
- package/dist/internal/resolve-prod-target.js +3 -7
- package/dist/internal/result-output.d.ts +18 -0
- package/dist/internal/result-output.d.ts.map +1 -0
- package/dist/internal/result-output.js +33 -0
- package/dist/internal/run-client.d.ts +2 -2
- package/dist/internal/run-client.js +2 -2
- package/dist/internal/runtime-dispatch-runner.d.ts +1 -11
- package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
- package/dist/internal/runtime-dispatch-runner.js +2 -15
- package/dist/internal/sdk-runner.d.ts +1 -1
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +6 -7
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +110 -35
- package/dist/internal/session-cost.d.ts +3 -3
- package/dist/internal/session-cost.d.ts.map +1 -1
- package/dist/internal/session-cost.js +3 -3
- package/dist/internal/session-engine.d.ts +48 -11
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +507 -115
- package/dist/internal/session-run-log.d.ts.map +1 -1
- package/dist/internal/session-run-log.js +1 -3
- package/dist/internal/skills-sync.d.ts +1 -4
- package/dist/internal/skills-sync.d.ts.map +1 -1
- package/dist/internal/skills-sync.js +10 -50
- package/dist/internal/sleep.d.ts +2 -0
- package/dist/internal/sleep.d.ts.map +1 -0
- package/dist/internal/sleep.js +3 -0
- package/dist/internal/store-mirror.d.ts +29 -0
- package/dist/internal/store-mirror.d.ts.map +1 -0
- package/dist/internal/store-mirror.js +70 -0
- package/dist/internal/tenant-slack/relay.d.ts +73 -0
- package/dist/internal/tenant-slack/relay.d.ts.map +1 -0
- package/dist/internal/tenant-slack/relay.js +138 -0
- package/dist/internal/testing/factory-resource-fixtures.d.ts +48 -0
- package/dist/internal/testing/factory-resource-fixtures.d.ts.map +1 -0
- package/dist/internal/testing/factory-resource-fixtures.js +41 -0
- package/dist/internal/testing/scm-continuation-fixtures.d.ts +33 -0
- package/dist/internal/testing/scm-continuation-fixtures.d.ts.map +1 -0
- package/dist/internal/testing/scm-continuation-fixtures.js +253 -0
- package/dist/internal/workspace-sync.d.ts +22 -0
- package/dist/internal/workspace-sync.d.ts.map +1 -0
- package/dist/internal/workspace-sync.js +49 -0
- package/dist/internal/workspace.d.ts +7 -0
- package/dist/internal/workspace.d.ts.map +1 -1
- package/dist/internal/workspace.js +13 -0
- package/dist/otel.d.ts +23 -1
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +93 -2
- package/dist/playground/assets/index-8YiozU89.js +67 -0
- package/dist/playground/assets/index-MbMxXg-y.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/result.d.ts +24 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +27 -0
- package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted.js +7 -4
- package/dist/storage-protocol.d.ts.map +1 -1
- package/dist/storage-protocol.js +1 -3
- package/dist/types.d.ts +141 -26
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +2 -2
- package/docs/concepts.md +2 -4
- package/docs/design/filesystem.md +376 -0
- package/docs/design/runtime-abstraction.md +2 -3
- package/docs/evals.md +9 -7
- package/docs/guides/cloud-agents.md +4 -6
- package/docs/guides/github.md +5 -1
- package/docs/guides/opentelemetry.md +41 -17
- package/docs/reference/agent-config.md +6 -10
- package/docs/reference/channels.md +38 -8
- package/docs/reference/cli.md +3 -4
- package/docs/reference/extensions.md +87 -23
- package/docs/reference/hooks.md +215 -46
- package/docs/reference/playground.md +3 -0
- package/docs/reference/project-layout.md +2 -1
- package/docs/reference/result.md +94 -0
- package/docs/reference/sessions.md +3 -1
- package/docs/reference/tools.md +1 -2
- package/docs/templates/pr-autofixer.md +0 -3
- package/package.json +42 -9
- package/skills/framework-map/SKILL.md +3 -1
- package/skills/otel/SKILL.md +8 -3
- package/src/ab.ts +1 -1
- package/src/bin/agent-serve.ts +121 -21
- package/src/channels/bitbucket/api.ts +623 -0
- package/src/channels/bitbucket/binding.ts +414 -0
- package/src/channels/bitbucket/bitbucket-channel.ts +182 -0
- package/src/channels/bitbucket/bitbucket-webhook.ts +576 -0
- package/src/channels/bitbucket/checks.ts +154 -0
- package/src/channels/bitbucket/cursor-account.ts +117 -0
- package/src/channels/bitbucket/defaults.ts +110 -0
- package/src/channels/bitbucket/events.ts +84 -0
- package/src/channels/bitbucket/index.ts +49 -0
- package/src/channels/bitbucket/replay.ts +439 -0
- package/src/channels/bitbucket/state.ts +59 -0
- package/src/channels/bitbucket/types.ts +266 -0
- package/src/channels/change-monitors/change-monitors-channel.ts +62 -0
- package/src/channels/change-monitors/index.ts +8 -0
- package/src/channels/change-monitors/types.ts +44 -0
- package/src/channels/deployments/deployments-channel.ts +25 -43
- package/src/channels/deployments/types.ts +12 -6
- package/src/channels/github/binding.ts +8 -1
- package/src/channels/github/cursor-account.ts +17 -6
- package/src/channels/github/defaults.ts +4 -0
- package/src/channels/github/events.ts +1 -1
- package/src/channels/github/forward.ts +3 -2
- package/src/channels/github/github-channel.ts +74 -221
- package/src/channels/github/progress.ts +76 -10
- package/src/channels/github/replay.ts +1 -1
- package/src/channels/github/state.ts +6 -0
- package/src/channels/github/types.ts +2 -5
- package/src/channels/gitlab/api.ts +228 -0
- package/src/channels/gitlab/binding.ts +233 -0
- package/src/channels/gitlab/checks.ts +243 -0
- package/src/channels/gitlab/cursor-account.ts +114 -0
- package/src/channels/gitlab/defaults.ts +93 -0
- package/src/channels/gitlab/events.ts +44 -0
- package/src/channels/gitlab/gitlab-channel.ts +176 -0
- package/src/channels/gitlab/gitlab-webhook.ts +555 -0
- package/src/channels/gitlab/index.ts +43 -0
- package/src/channels/gitlab/replay.ts +347 -0
- package/src/channels/gitlab/state.ts +55 -0
- package/src/channels/gitlab/types.ts +263 -0
- package/src/channels/issues/index.ts +9 -0
- package/src/channels/issues/issues-channel.ts +51 -0
- package/src/channels/issues/types.ts +41 -0
- package/src/channels/origin/api.ts +4 -2
- package/src/channels/origin/origin-channel.ts +19 -94
- package/src/channels/origin/types.ts +23 -2
- package/src/channels/slack/eval-directive.ts +1 -6
- package/src/channels/slack/init.ts +6 -3
- package/src/channels/slack/setup.ts +7 -6
- package/src/channels/slack/types.ts +1 -1
- package/src/channels.ts +0 -1
- package/src/client.ts +1 -1
- package/src/connections.ts +1 -1
- package/src/evals.ts +1 -1
- package/src/extensions.ts +47 -5
- package/src/files.ts +21 -3
- package/src/filesystem.ts +2074 -0
- package/src/index.ts +48 -28
- package/src/internal/ab-snapshot.ts +0 -3
- package/src/internal/advertise-tools.ts +1 -4
- package/src/internal/authored-alias-hooks.ts +4 -21
- package/src/internal/authored-loaders.ts +6 -23
- package/src/internal/channel-dispatch.ts +160 -0
- package/src/internal/chat-client.ts +1 -1
- package/src/internal/cli-ax.ts +5 -5
- package/src/internal/cli-bitbucket.ts +477 -0
- package/src/internal/cli-convert-automation.ts +7 -7
- package/src/internal/cli-cursor.ts +2 -5
- package/src/internal/cli-deploy.ts +2 -8
- package/src/internal/cli-github.ts +3 -3
- package/src/internal/cli-gitlab.ts +485 -0
- package/src/internal/cli-mcp.ts +2 -7
- package/src/internal/cli-slack.ts +2 -5
- package/src/internal/continuation-channel.ts +102 -4
- package/src/internal/continuation-identity.ts +338 -35
- package/src/internal/conversation-mirror.ts +4 -3
- package/src/internal/convert-automation/types.ts +1 -1
- package/src/internal/cursor/account-mcp.ts +1 -4
- package/src/internal/cursor/backend-client.ts +9 -10
- package/src/internal/cursor/bound-secret-file.ts +108 -0
- package/src/internal/cursor/credentials.ts +75 -10
- package/src/internal/cursor/hosted-bound-secrets.ts +75 -0
- package/src/internal/cursor/hosted-deployment-secrets.ts +42 -11
- package/src/internal/cursor/hosted-store-secrets.ts +1 -1
- package/src/internal/cursor-account-mcp-auth.ts +2 -5
- package/src/internal/cursor-deployment-relay.ts +11 -7
- package/src/internal/deploy-manifest.ts +4 -2
- package/src/internal/discovery/ab.ts +29 -9
- package/src/internal/discovery/agent.ts +181 -136
- package/src/internal/discovery/channels.ts +15 -13
- package/src/internal/discovery/connections.ts +55 -50
- package/src/internal/discovery/cursor-plugin.ts +1 -4
- package/src/internal/discovery/extension-overlay.ts +274 -0
- package/src/internal/discovery/extensions.ts +330 -105
- package/src/internal/discovery/hooks.ts +20 -2
- package/src/internal/discovery/info.ts +10 -0
- package/src/internal/discovery/modules.ts +8 -2
- package/src/internal/discovery/names.ts +2 -1
- package/src/internal/discovery/project.ts +80 -9
- package/src/internal/discovery/runtime.ts +1 -2
- package/src/internal/discovery/schedules.ts +28 -2
- package/src/internal/discovery/services.ts +37 -1
- package/src/internal/discovery/skills.ts +13 -3
- package/src/internal/discovery/subagent.ts +107 -0
- package/src/internal/discovery.ts +0 -2
- package/src/internal/distribution.ts +35 -83
- package/src/internal/docs-site.ts +1 -1
- package/src/internal/eval-run-store.ts +0 -7
- package/src/internal/eval-runner.ts +0 -1
- package/src/internal/factory-resource-channel.ts +122 -0
- package/src/internal/filesystem/errors.ts +220 -0
- package/src/internal/filesystem/format.ts +276 -0
- package/src/internal/filesystem/merge.ts +195 -0
- package/src/internal/filesystem/scratch.ts +255 -0
- package/src/internal/filesystem/sdk-schemas.ts +204 -0
- package/src/internal/filesystem/tools.ts +821 -0
- package/src/internal/filesystem/walk.ts +369 -0
- package/src/internal/framework-file-storage.ts +8 -8
- package/src/internal/github-fanout.ts +1 -1
- package/src/internal/guest-network.ts +389 -0
- package/src/internal/host-otel.ts +8 -4
- package/src/internal/hosted-admission-adapter.ts +8 -8
- package/src/internal/hosted-delivery-protocol.ts +26 -1
- package/src/internal/hosted-delivery.ts +393 -192
- package/src/internal/http-channel.ts +1 -4
- package/src/internal/init-interview.ts +1 -4
- package/src/internal/init-project.ts +2 -2
- package/src/internal/inline-stdio-define-stub.ts +1 -1
- package/src/internal/is-record.ts +3 -0
- package/src/internal/json-schema.ts +19 -10
- package/src/internal/local-control-plane.ts +5 -24
- package/src/internal/mcp-endpoint.ts +1 -4
- package/src/internal/otel/collector.ts +94 -159
- package/src/internal/otel/config.ts +10 -14
- package/src/internal/otel/http.ts +14 -1
- package/src/internal/otel/mcp.ts +3 -16
- package/src/internal/otel/runtime.ts +240 -25
- package/src/internal/package-inline-stdio.ts +3 -12
- package/src/internal/playground/toolchain.ts +1 -1
- package/src/internal/request-error-status.ts +72 -0
- package/src/internal/resolve-prod-target.ts +3 -8
- package/src/internal/result-output.ts +34 -0
- package/src/internal/run-client.ts +2 -2
- package/src/internal/runtime-dispatch-runner.ts +3 -21
- package/src/internal/sdk-runner.ts +7 -7
- package/src/internal/server.ts +153 -44
- package/src/internal/session-cost.ts +3 -3
- package/src/internal/session-engine.ts +621 -103
- package/src/internal/session-run-log.ts +1 -4
- package/src/internal/skills-sync.ts +13 -63
- package/src/internal/sleep.ts +3 -0
- package/src/internal/store-mirror.ts +86 -0
- package/src/internal/tenant-slack/relay.ts +179 -0
- package/src/internal/testing/factory-resource-fixtures.ts +85 -0
- package/src/internal/testing/scm-continuation-fixtures.ts +286 -0
- package/src/internal/workspace-sync.ts +55 -0
- package/src/internal/workspace.ts +14 -0
- package/src/otel.ts +143 -3
- package/src/result.ts +36 -0
- package/src/storage-backends/cursor-hosted.ts +7 -4
- package/src/storage-protocol.ts +1 -4
- package/src/types.ts +154 -37
- package/templates/triage/agent/lib/types.ts +0 -2
- package/dist/continuation.d.ts +0 -20
- package/dist/continuation.d.ts.map +0 -1
- package/dist/continuation.js +0 -18
- package/dist/docs/assets/chunks/@localSearchIndexroot.FAqdWIXo.js +0 -1
- package/dist/docs/assets/concepts.md.rPzW2HZN.js +0 -1
- package/dist/docs/assets/guides_cloud-agents.md.DumwWXba.js +0 -9
- package/dist/docs/assets/guides_cloud-runtime.md.BRirbRAN.js +0 -9
- package/dist/docs/assets/guides_cloud-runtime.md.BRirbRAN.lean.js +0 -1
- package/dist/docs/assets/reference_extensions.md.9WQMZe1l.lean.js +0 -1
- package/dist/docs/assets/reference_hooks.md.a8BJxMR5.js +0 -14
- package/dist/docs/assets/skills_framework-map.md.DDa4MeEW.js +0 -1
- package/dist/docs/guides/cloud-runtime.html +0 -35
- package/dist/docs/guides/cloud-runtime.md +0 -117
- package/dist/internal/convert-automation/index.d.ts +0 -3
- package/dist/internal/convert-automation/index.d.ts.map +0 -1
- package/dist/internal/convert-automation/index.js +0 -1
- package/dist/internal/grokbot/runner.d.ts +0 -64
- package/dist/internal/grokbot/runner.d.ts.map +0 -1
- package/dist/internal/grokbot/runner.js +0 -282
- package/dist/internal/managed-delivery.d.ts +0 -80
- package/dist/internal/managed-delivery.d.ts.map +0 -1
- package/dist/internal/managed-delivery.js +0 -86
- package/dist/internal/review-comments.d.ts +0 -370
- package/dist/internal/review-comments.d.ts.map +0 -1
- package/dist/internal/review-comments.js +0 -921
- package/dist/internal/shallow-clone.d.ts +0 -176
- package/dist/internal/shallow-clone.d.ts.map +0 -1
- package/dist/internal/shallow-clone.js +0 -419
- package/dist/playground/assets/index-B6C9S9nG.css +0 -1
- package/dist/playground/assets/index-ZqNoT8Ie.js +0 -69
- package/docs/guides/cloud-runtime.md +0 -122
- package/src/continuation.ts +0 -49
- package/src/internal/convert-automation/index.ts +0 -10
- package/src/internal/grokbot/runner.ts +0 -370
- package/src/internal/managed-delivery.ts +0 -125
- package/src/internal/review-comments.ts +0 -1363
- package/src/internal/shallow-clone.ts +0 -609
- /package/dist/docs/assets/{evals.md.CPzDAwoH.lean.js → evals.md.CbMoebP1.lean.js} +0 -0
- /package/dist/docs/assets/{guides_cloud-agents.md.DumwWXba.lean.js → guides_cloud-agents.md.DS8RIjwx.lean.js} +0 -0
- /package/dist/docs/assets/{index.md.Kiht7ell.lean.js → index.md.D75GWhPl.lean.js} +0 -0
- /package/dist/docs/assets/{reference_agent-config.md.BHeYMgme.lean.js → reference_agent-config.md.CHNpiyp4.lean.js} +0 -0
- /package/dist/docs/assets/{reference_cli.md.DfoeyvL0.lean.js → reference_cli.md.CJNc_xYK.lean.js} +0 -0
- /package/dist/docs/assets/{reference_playground.md.DnX5nL-B.lean.js → reference_playground.md.4myJPxrf.lean.js} +0 -0
- /package/dist/docs/assets/{reference_project-layout.md.CA6QP6Lw.lean.js → reference_project-layout.md.DuBu9a96.lean.js} +0 -0
- /package/dist/docs/assets/{reference_tools.md.B1up2r9W.lean.js → reference_tools.md.aGrn99hP.lean.js} +0 -0
- /package/dist/docs/assets/{skills_framework-map.md.DDa4MeEW.lean.js → skills_framework-map.md.haibFyoB.lean.js} +0 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitLab commit statuses — the GitLab {@link CiCheckWriter} behind the shared
|
|
3
|
+
* check lifecycle in `../checks.js`.
|
|
4
|
+
*
|
|
5
|
+
* GitLab has no Checks API; the merge-request widget shows **commit
|
|
6
|
+
* statuses** (`POST /projects/:id/statuses/:sha`, one row per `name`). The
|
|
7
|
+
* writer maps the shared status / conclusion pair onto GitLab's state set
|
|
8
|
+
* and re-posts the full desired state on every write, so `resumeGitLabCheck`
|
|
9
|
+
* needs only `(project, sha, name)` to rebuild a handle after a restart.
|
|
10
|
+
*
|
|
11
|
+
* Posting needs a token with `api` scope (Developer role or above); through
|
|
12
|
+
* the SCM proxy that is the tenant's project / host credential.
|
|
13
|
+
*/
|
|
14
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
import { openCiCheck, resumeCiCheck, } from "../checks.js";
|
|
24
|
+
import { gitlabProjectPathSegment } from "./api.js";
|
|
25
|
+
const DESCRIPTION_MAX_CHARS = 255;
|
|
26
|
+
/** Post one commit status. Throws `GitLabApiError` on API failure. */
|
|
27
|
+
export function setGitLabCommitStatus(gitlab, input) {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
return yield gitlab.request({
|
|
30
|
+
method: "POST",
|
|
31
|
+
path: `/projects/${gitlabProjectPathSegment(input.project)}/statuses/${encodeURIComponent(input.sha)}`,
|
|
32
|
+
body: Object.assign(Object.assign(Object.assign({ state: input.state, name: input.name }, (input.targetUrl === undefined ? {} : { target_url: input.targetUrl })), (input.description === undefined
|
|
33
|
+
? {}
|
|
34
|
+
: { description: input.description.slice(0, DESCRIPTION_MAX_CHARS) })), (input.pipelineId === undefined
|
|
35
|
+
? {}
|
|
36
|
+
: { pipeline_id: input.pipelineId })),
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/** Shared check status / conclusion → GitLab commit status state. */
|
|
41
|
+
export function gitlabCommitStatusState(input) {
|
|
42
|
+
if (input.status === "queued") {
|
|
43
|
+
return "pending";
|
|
44
|
+
}
|
|
45
|
+
if (input.status === "in_progress") {
|
|
46
|
+
return "running";
|
|
47
|
+
}
|
|
48
|
+
switch (input.conclusion) {
|
|
49
|
+
case "success":
|
|
50
|
+
case "neutral":
|
|
51
|
+
case "skipped":
|
|
52
|
+
return "success";
|
|
53
|
+
case "cancelled":
|
|
54
|
+
return "canceled";
|
|
55
|
+
case "failure":
|
|
56
|
+
case "action_required":
|
|
57
|
+
case "timed_out":
|
|
58
|
+
case undefined:
|
|
59
|
+
return "failed";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* GitLab writer: every write re-posts the status row for `(sha, name)`, and
|
|
64
|
+
* a commit status has no partial update, so the writer carries the last
|
|
65
|
+
* status, details link, and title forward when a write omits them.
|
|
66
|
+
*/
|
|
67
|
+
function gitlabCheckWriter(input) {
|
|
68
|
+
var _a;
|
|
69
|
+
let lastStatus = (_a = input.status) !== null && _a !== void 0 ? _a : "in_progress";
|
|
70
|
+
let lastUrl = input.url;
|
|
71
|
+
let lastTitle = input.title;
|
|
72
|
+
return (write) => __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
var _a;
|
|
74
|
+
var _b, _c, _d;
|
|
75
|
+
const status = (_b = write.status) !== null && _b !== void 0 ? _b : (write.conclusion === undefined ? lastStatus : "completed");
|
|
76
|
+
lastStatus = status;
|
|
77
|
+
lastUrl = (_c = write.detailsUrl) !== null && _c !== void 0 ? _c : lastUrl;
|
|
78
|
+
lastTitle = (_d = (_a = write.output) === null || _a === void 0 ? void 0 : _a.title) !== null && _d !== void 0 ? _d : lastTitle;
|
|
79
|
+
const posted = yield setGitLabCommitStatus(input.gitlab, {
|
|
80
|
+
project: input.project,
|
|
81
|
+
sha: input.sha,
|
|
82
|
+
name: input.name,
|
|
83
|
+
state: gitlabCommitStatusState({ status, conclusion: write.conclusion }),
|
|
84
|
+
targetUrl: lastUrl,
|
|
85
|
+
description: lastTitle,
|
|
86
|
+
pipelineId: input.pipelineId,
|
|
87
|
+
});
|
|
88
|
+
return Object.assign(Object.assign({}, (typeof (posted === null || posted === void 0 ? void 0 : posted.id) === "number" ? { id: posted.id } : {})), (typeof (posted === null || posted === void 0 ? void 0 : posted.target_url) === "string"
|
|
89
|
+
? { url: posted.target_url }
|
|
90
|
+
: {}));
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Open a commit status on `sha` and return a handle for later updates.
|
|
95
|
+
*
|
|
96
|
+
* ```ts
|
|
97
|
+
* const check = await createGitLabCheck({
|
|
98
|
+
* gitlab: ctx.gitlab,
|
|
99
|
+
* project: ctx.project.id,
|
|
100
|
+
* name: "cursor/security-review",
|
|
101
|
+
* sha: mergeRequest.headSha,
|
|
102
|
+
* detailsUrl: sessionUrl,
|
|
103
|
+
* output: { title: "Running…", summary: "" },
|
|
104
|
+
* });
|
|
105
|
+
* await check.conclude({ conclusion: "success", output: { title: "Clean", summary: "" } });
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
export function createGitLabCheck(input) {
|
|
109
|
+
return openCiCheck(gitlabCheckWriter(input), input);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Rebuild a {@link GitLabCheck} handle for an existing status row from its
|
|
113
|
+
* identity. No API call is made until the first update.
|
|
114
|
+
*/
|
|
115
|
+
export function resumeGitLabCheck(input) {
|
|
116
|
+
return resumeCiCheck(gitlabCheckWriter(input), input.id === undefined ? undefined : { id: input.id });
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Project-bound checks adapter satisfying the shared {@link CiChecksClient}
|
|
120
|
+
* contract for forge-agnostic check code.
|
|
121
|
+
*/
|
|
122
|
+
export function bindGitLabChecks(input) {
|
|
123
|
+
return {
|
|
124
|
+
createCheck: (check) => createGitLabCheck(Object.assign(Object.assign({}, check), { gitlab: input.gitlab, project: input.project })),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cursor-account mode for GitLab channels.
|
|
3
|
+
*
|
|
4
|
+
* `gitlabChannel({ cursorAccount })` declares that outbound GitLab calls run
|
|
5
|
+
* through the Cursor SCM proxy (`/v0/gitlab-proxy`) with the tenant's
|
|
6
|
+
* credential swapped in server-side. The serve host binds the Cursor API key
|
|
7
|
+
* and the proxy transport at startup when `--cursor-scm-proxy` is set; until
|
|
8
|
+
* then `ctx.gitlab` falls back to direct `GITLAB_TOKEN` access.
|
|
9
|
+
*/
|
|
10
|
+
import type { GitLabProxyTransport } from "./api.js";
|
|
11
|
+
import type { GitLabChannelOptions } from "./types.js";
|
|
12
|
+
export declare const CURSOR_GITLAB_MAX_PROJECTS = 20;
|
|
13
|
+
export interface CursorGitLabProjectScope {
|
|
14
|
+
/** Lowercased `group/project` paths. */
|
|
15
|
+
projects: readonly string[];
|
|
16
|
+
}
|
|
17
|
+
/** Host-bound credential: Cursor API key + proxy transport, bound at serve. */
|
|
18
|
+
export interface PendingCursorGitLabCredentials {
|
|
19
|
+
bind(getApiKey: () => Promise<string>): void;
|
|
20
|
+
bindProxyTransport(transport: Omit<GitLabProxyTransport, "getApiKey">): void;
|
|
21
|
+
/** The full proxy transport once both halves are bound. */
|
|
22
|
+
getProxyTransport(): GitLabProxyTransport | undefined;
|
|
23
|
+
}
|
|
24
|
+
export interface GitLabCursorAccountRuntime {
|
|
25
|
+
/** Authored channel options (not rewritten). */
|
|
26
|
+
options: GitLabChannelOptions;
|
|
27
|
+
credentials: PendingCursorGitLabCredentials;
|
|
28
|
+
scope: CursorGitLabProjectScope | undefined;
|
|
29
|
+
}
|
|
30
|
+
export declare function parseCursorGitLabProjectScope(values: readonly string[]): CursorGitLabProjectScope;
|
|
31
|
+
export declare function createPendingCursorGitLabCredentials(): PendingCursorGitLabCredentials;
|
|
32
|
+
/** GitLab-proxy base URL (`/v0/gitlab-proxy`, `AGENT_SERVE_GITLAB_PROXY_URL`). */
|
|
33
|
+
export declare function resolveCursorGitLabProxyUrl(backendBaseUrl: string): string;
|
|
34
|
+
export declare function registerGitLabCursorAccountRuntime(definition: object, runtime: GitLabCursorAccountRuntime): void;
|
|
35
|
+
export declare function getGitLabCursorAccountRuntime(definition: object): GitLabCursorAccountRuntime | undefined;
|
|
36
|
+
//# sourceMappingURL=cursor-account.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-account.d.ts","sourceRoot":"","sources":["../../../src/channels/gitlab/cursor-account.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAI7C,MAAM,WAAW,wBAAwB;IACvC,wCAAwC;IACxC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,+EAA+E;AAC/E,MAAM,WAAW,8BAA8B;IAC7C,IAAI,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC7C,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;IAC7E,2DAA2D;IAC3D,iBAAiB,IAAI,oBAAoB,GAAG,SAAS,CAAC;CACvD;AAED,MAAM,WAAW,0BAA0B;IACzC,gDAAgD;IAChD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,WAAW,EAAE,8BAA8B,CAAC;IAC5C,KAAK,EAAE,wBAAwB,GAAG,SAAS,CAAC;CAC7C;AAID,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,wBAAwB,CAkC1B;AAED,wBAAgB,oCAAoC,IAAI,8BAA8B,CAiBrF;AAED,kFAAkF;AAClF,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,kCAAkC,CAChD,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,0BAA0B,GAClC,IAAI,CAEN;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,MAAM,GACjB,0BAA0B,GAAG,SAAS,CAExC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cursor-account mode for GitLab channels.
|
|
3
|
+
*
|
|
4
|
+
* `gitlabChannel({ cursorAccount })` declares that outbound GitLab calls run
|
|
5
|
+
* through the Cursor SCM proxy (`/v0/gitlab-proxy`) with the tenant's
|
|
6
|
+
* credential swapped in server-side. The serve host binds the Cursor API key
|
|
7
|
+
* and the proxy transport at startup when `--cursor-scm-proxy` is set; until
|
|
8
|
+
* then `ctx.gitlab` falls back to direct `GITLAB_TOKEN` access.
|
|
9
|
+
*/
|
|
10
|
+
import { resolveCursorScmProxyUrl } from "../github/cursor-account.js";
|
|
11
|
+
export const CURSOR_GITLAB_MAX_PROJECTS = 20;
|
|
12
|
+
/** `group/project`, with nested groups (`group/sub/project`). */
|
|
13
|
+
const CURSOR_GITLAB_PROJECT_PATTERN = /^[A-Za-z0-9_.-]+(?:\/[A-Za-z0-9_.-]+)+$/;
|
|
14
|
+
const runtimeByDefinition = new WeakMap();
|
|
15
|
+
export function parseCursorGitLabProjectScope(values) {
|
|
16
|
+
const projects = [
|
|
17
|
+
...new Set(values
|
|
18
|
+
.map((project) => project
|
|
19
|
+
.trim()
|
|
20
|
+
.replace(/^\/+|\/+$/g, "")
|
|
21
|
+
.toLowerCase())
|
|
22
|
+
.filter(Boolean)),
|
|
23
|
+
];
|
|
24
|
+
if (projects.length === 0) {
|
|
25
|
+
throw new Error("gitlabChannel({ cursorAccount }) requires at least one project.");
|
|
26
|
+
}
|
|
27
|
+
if (projects.length > CURSOR_GITLAB_MAX_PROJECTS) {
|
|
28
|
+
throw new Error(`gitlabChannel({ cursorAccount }) supports at most ${CURSOR_GITLAB_MAX_PROJECTS} projects.`);
|
|
29
|
+
}
|
|
30
|
+
for (const project of projects) {
|
|
31
|
+
if (!CURSOR_GITLAB_PROJECT_PATTERN.test(project) ||
|
|
32
|
+
project.includes("..")) {
|
|
33
|
+
throw new Error(`Invalid GitLab project "${project}"; expected group/project.`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return { projects };
|
|
37
|
+
}
|
|
38
|
+
export function createPendingCursorGitLabCredentials() {
|
|
39
|
+
let getApiKey;
|
|
40
|
+
let transport;
|
|
41
|
+
return {
|
|
42
|
+
bind(next) {
|
|
43
|
+
getApiKey = next;
|
|
44
|
+
},
|
|
45
|
+
bindProxyTransport(next) {
|
|
46
|
+
transport = next;
|
|
47
|
+
},
|
|
48
|
+
getProxyTransport() {
|
|
49
|
+
if (getApiKey === undefined || transport === undefined) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
return Object.assign(Object.assign({}, transport), { getApiKey });
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** GitLab-proxy base URL (`/v0/gitlab-proxy`, `AGENT_SERVE_GITLAB_PROXY_URL`). */
|
|
57
|
+
export function resolveCursorGitLabProxyUrl(backendBaseUrl) {
|
|
58
|
+
return resolveCursorScmProxyUrl("gitlab", backendBaseUrl);
|
|
59
|
+
}
|
|
60
|
+
export function registerGitLabCursorAccountRuntime(definition, runtime) {
|
|
61
|
+
runtimeByDefinition.set(definition, runtime);
|
|
62
|
+
}
|
|
63
|
+
export function getGitLabCursorAccountRuntime(definition) {
|
|
64
|
+
return runtimeByDefinition.get(definition);
|
|
65
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default dispatch decisions for the GitLab channel: turn auth derived from
|
|
3
|
+
* the delivery's actor, the title / message a turn starts with, and which
|
|
4
|
+
* merge-request actions dispatch when no `onMergeRequest` hook is declared.
|
|
5
|
+
*/
|
|
6
|
+
import type { AuthContext } from "../../types.js";
|
|
7
|
+
import type { GitLabEventContext, GitLabMergeRequestEvent, GitLabTurnDispatch } from "./types.js";
|
|
8
|
+
type DispatchContext = Omit<GitLabEventContext, "host" | "artifacts" | "gitlab" | "send">;
|
|
9
|
+
/**
|
|
10
|
+
* Derive the turn's auth from the actor that triggered the delivery — the
|
|
11
|
+
* standard `{ auth: defaultGitLabAuth(ctx) }` dispatch from an inbound hook.
|
|
12
|
+
* The subscriber's Cursor identity is not the turn principal (same pattern
|
|
13
|
+
* as `defaultGitHubAuth` / `defaultOriginAuth`).
|
|
14
|
+
*/
|
|
15
|
+
export declare function defaultGitLabAuth(ctx: DispatchContext): AuthContext;
|
|
16
|
+
export declare function defaultGitLabTitle(ctx: Pick<GitLabEventContext, "project" | "mergeRequestIid" | "eventType">): string;
|
|
17
|
+
export declare function defaultGitLabMergeRequestMessage(ctx: DispatchContext, mergeRequest: GitLabMergeRequestEvent): string;
|
|
18
|
+
/**
|
|
19
|
+
* Default gate when no `onMergeRequest` hook is declared: a new or reopened
|
|
20
|
+
* merge request, or an `update` that pushed commits (`oldrev` present —
|
|
21
|
+
* title / label edits carry no `oldrev`), starts a turn as the actor.
|
|
22
|
+
*/
|
|
23
|
+
export declare function defaultGitLabMergeRequestDispatch(ctx: DispatchContext, mergeRequest: GitLabMergeRequestEvent): GitLabTurnDispatch | null;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/channels/gitlab/defaults.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,KAAK,eAAe,GAAG,IAAI,CACzB,kBAAkB,EAClB,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CACzC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,GAAG,WAAW,CAmBnE;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,iBAAiB,GAAG,WAAW,CAAC,GACzE,MAAM,CAIR;AAED,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,eAAe,EACpB,YAAY,EAAE,uBAAuB,GACpC,MAAM,CAgBR;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,eAAe,EACpB,YAAY,EAAE,uBAAuB,GACpC,kBAAkB,GAAG,IAAI,CAU3B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default dispatch decisions for the GitLab channel: turn auth derived from
|
|
3
|
+
* the delivery's actor, the title / message a turn starts with, and which
|
|
4
|
+
* merge-request actions dispatch when no `onMergeRequest` hook is declared.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Derive the turn's auth from the actor that triggered the delivery — the
|
|
8
|
+
* standard `{ auth: defaultGitLabAuth(ctx) }` dispatch from an inbound hook.
|
|
9
|
+
* The subscriber's Cursor identity is not the turn principal (same pattern
|
|
10
|
+
* as `defaultGitHubAuth` / `defaultOriginAuth`).
|
|
11
|
+
*/
|
|
12
|
+
export function defaultGitLabAuth(ctx) {
|
|
13
|
+
const sender = ctx.sender;
|
|
14
|
+
const host = new URL(ctx.project.webUrl).host;
|
|
15
|
+
return {
|
|
16
|
+
authenticator: "gitlab-webhook",
|
|
17
|
+
principalId: sender === undefined ? "gitlab" : String(sender.id),
|
|
18
|
+
principalType: "user",
|
|
19
|
+
attributes: Object.assign(Object.assign(Object.assign({ conversation_kind: ctx.mergeRequestIid === undefined ? ctx.eventType : "merge_request", project: ctx.project.pathWithNamespace, project_id: String(ctx.project.id) }, (ctx.deliveryId === undefined ? {} : { delivery_id: ctx.deliveryId })), (sender === undefined
|
|
20
|
+
? {}
|
|
21
|
+
: { subject: String(sender.id), username: sender.username })), { issuer: `gitlab:${host}` }),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function defaultGitLabTitle(ctx) {
|
|
25
|
+
return ctx.mergeRequestIid === undefined
|
|
26
|
+
? `GitLab ${ctx.project.pathWithNamespace} ${ctx.eventType}`
|
|
27
|
+
: `GitLab ${ctx.project.pathWithNamespace}!${ctx.mergeRequestIid}`;
|
|
28
|
+
}
|
|
29
|
+
export function defaultGitLabMergeRequestMessage(ctx, mergeRequest) {
|
|
30
|
+
var _a;
|
|
31
|
+
const head = mergeRequest.sourceBranch !== undefined &&
|
|
32
|
+
mergeRequest.headSha !== undefined
|
|
33
|
+
? `Head: ${mergeRequest.sourceBranch} (${mergeRequest.headSha})`
|
|
34
|
+
: undefined;
|
|
35
|
+
return [
|
|
36
|
+
`GitLab merge request trigger: ${ctx.project.pathWithNamespace}!${mergeRequest.iid}`,
|
|
37
|
+
`Action: ${(_a = mergeRequest.action) !== null && _a !== void 0 ? _a : "unknown"}`,
|
|
38
|
+
`URL: ${mergeRequest.url}`,
|
|
39
|
+
...(mergeRequest.title === undefined
|
|
40
|
+
? []
|
|
41
|
+
: [`Title: ${mergeRequest.title}`]),
|
|
42
|
+
...(head === undefined ? [] : [head]),
|
|
43
|
+
"Handle this merge request event.",
|
|
44
|
+
].join("\n");
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Default gate when no `onMergeRequest` hook is declared: a new or reopened
|
|
48
|
+
* merge request, or an `update` that pushed commits (`oldrev` present —
|
|
49
|
+
* title / label edits carry no `oldrev`), starts a turn as the actor.
|
|
50
|
+
*/
|
|
51
|
+
export function defaultGitLabMergeRequestDispatch(ctx, mergeRequest) {
|
|
52
|
+
const action = mergeRequest.action;
|
|
53
|
+
const dispatches = action === "open" ||
|
|
54
|
+
action === "reopen" ||
|
|
55
|
+
(action === "update" && mergeRequest.oldrev !== undefined);
|
|
56
|
+
if (!dispatches) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
return { auth: defaultGitLabAuth(ctx) };
|
|
60
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** {@link ChannelMeta.kind} value used by {@link gitlabChannel}. */
|
|
2
|
+
export declare const GITLAB_CHANNEL_KIND = "gitlab";
|
|
3
|
+
export interface GitLabWebhookEventOptions {
|
|
4
|
+
webhookEvents?: readonly string[];
|
|
5
|
+
onMergeRequest?: unknown;
|
|
6
|
+
onNote?: unknown;
|
|
7
|
+
onPush?: unknown;
|
|
8
|
+
onPipeline?: unknown;
|
|
9
|
+
onTagPush?: unknown;
|
|
10
|
+
}
|
|
11
|
+
export declare function deriveGitLabWebhookEvents(options: GitLabWebhookEventOptions): string[];
|
|
12
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/channels/gitlab/events.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAgB5C,MAAM,WAAW,yBAAyB;IACxC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,yBAAyB,GACjC,MAAM,EAAE,CAeV"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** {@link ChannelMeta.kind} value used by {@link gitlabChannel}. */
|
|
2
|
+
export const GITLAB_CHANNEL_KIND = "gitlab";
|
|
3
|
+
/**
|
|
4
|
+
* GitLab `object_kind` values (the `X-Gitlab-Event` payload discriminator)
|
|
5
|
+
* each authored hook subscribes to. `merge_request` is always declared: it
|
|
6
|
+
* is the default dispatch when no `onMergeRequest` hook exists.
|
|
7
|
+
*/
|
|
8
|
+
const HOOK_EVENTS = [
|
|
9
|
+
["onMergeRequest", "merge_request"],
|
|
10
|
+
["onNote", "note"],
|
|
11
|
+
["onPush", "push"],
|
|
12
|
+
["onPipeline", "pipeline"],
|
|
13
|
+
["onTagPush", "tag_push"],
|
|
14
|
+
];
|
|
15
|
+
export function deriveGitLabWebhookEvents(options) {
|
|
16
|
+
if (options.webhookEvents !== undefined) {
|
|
17
|
+
return [
|
|
18
|
+
...new Set(options.webhookEvents.map((event) => event.trim()).filter(Boolean)),
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
const events = ["merge_request"];
|
|
22
|
+
for (const [hook, objectKind] of HOOK_EVENTS) {
|
|
23
|
+
if (options[hook] !== undefined) {
|
|
24
|
+
events.push(objectKind);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return [...new Set(events)];
|
|
28
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ChannelDefinition } from "../../types.js";
|
|
2
|
+
import { type GitLabChannelState } from "./state.js";
|
|
3
|
+
import type { GitLabChannelOptions } from "./types.js";
|
|
4
|
+
export declare function getGitLabChannelOptions(definition: object): GitLabChannelOptions | undefined;
|
|
5
|
+
export declare function gitlabChannel(options?: GitLabChannelOptions): ChannelDefinition<GitLabChannelState>;
|
|
6
|
+
/** Minimal mount shape shared by `serve` / the `gitlab` CLI. */
|
|
7
|
+
export interface GitLabAgentMountLike {
|
|
8
|
+
slug: string;
|
|
9
|
+
project: {
|
|
10
|
+
channels: Array<{
|
|
11
|
+
id: string;
|
|
12
|
+
definition: {
|
|
13
|
+
meta?: {
|
|
14
|
+
kind?: string;
|
|
15
|
+
gitlabWebhookEvents?: readonly string[];
|
|
16
|
+
};
|
|
17
|
+
routes?: ReadonlyArray<{
|
|
18
|
+
method: string;
|
|
19
|
+
path: string;
|
|
20
|
+
}>;
|
|
21
|
+
};
|
|
22
|
+
}>;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface GitLabChannelTarget {
|
|
26
|
+
slug: string;
|
|
27
|
+
channelId: string;
|
|
28
|
+
/** Route path under the channel (default `/`). */
|
|
29
|
+
routePath: string;
|
|
30
|
+
events: string[];
|
|
31
|
+
}
|
|
32
|
+
export declare function findGitLabChannelTargets(mounts: ReadonlyArray<GitLabAgentMountLike>): GitLabChannelTarget[];
|
|
33
|
+
//# sourceMappingURL=gitlab-channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitlab-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/gitlab/gitlab-channel.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAaxD,OAAO,EAA2B,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOvD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,GACjB,oBAAoB,GAAG,SAAS,CAElC;AAED,wBAAgB,aAAa,CAC3B,OAAO,GAAE,oBAAyB,GACjC,iBAAiB,CAAC,kBAAkB,CAAC,CAwFvC;AAED,gEAAgE;AAChE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,QAAQ,EAAE,KAAK,CAAC;YACd,EAAE,EAAE,MAAM,CAAC;YACX,UAAU,EAAE;gBACV,IAAI,CAAC,EAAE;oBAAE,IAAI,CAAC,EAAE,MAAM,CAAC;oBAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;iBAAE,CAAC;gBAClE,MAAM,CAAC,EAAE,aAAa,CAAC;oBAAE,MAAM,EAAE,MAAM,CAAC;oBAAC,IAAI,EAAE,MAAM,CAAA;iBAAE,CAAC,CAAC;aAC1D,CAAC;SACH,CAAC,CAAC;KACJ,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAC1C,mBAAmB,EAAE,CAoBvB"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import { allowAll, defineChannel, localDevStrict, loopbackOnly, POST, } from "../../channels.js";
|
|
12
|
+
import { withPropagatingBackgroundErrors } from "../../internal/channel-dispatch.js";
|
|
13
|
+
import { normalizeIdentity } from "../../internal/continuation-identity.js";
|
|
14
|
+
import { isDevMode } from "../../internal/dev-mode.js";
|
|
15
|
+
import { attachHostedAdmissionAdapter } from "../../internal/hosted-admission-adapter.js";
|
|
16
|
+
import { createPendingCursorGitLabCredentials, parseCursorGitLabProjectScope, registerGitLabCursorAccountRuntime, } from "./cursor-account.js";
|
|
17
|
+
import { deriveGitLabWebhookEvents, GITLAB_CHANNEL_KIND } from "./events.js";
|
|
18
|
+
import { dispatchGitLabWebhook, handleGitLabWebhookRequest, parseGitLabWebhookPayload, resolveGitLabWebhookSecret, } from "./gitlab-webhook.js";
|
|
19
|
+
import { emptyGitLabChannelState } from "./state.js";
|
|
20
|
+
const gitlabChannelOptionsByDefinition = new WeakMap();
|
|
21
|
+
export function getGitLabChannelOptions(definition) {
|
|
22
|
+
return gitlabChannelOptionsByDefinition.get(definition);
|
|
23
|
+
}
|
|
24
|
+
export function gitlabChannel(options = {}) {
|
|
25
|
+
var _a, _b, _c;
|
|
26
|
+
const routePath = (_a = options.path) !== null && _a !== void 0 ? _a : "/";
|
|
27
|
+
// With a hook secret the `X-Gitlab-Token` compare is the request auth
|
|
28
|
+
// (allowAll), matching GitHub HMAC + webhookSecret. Without one, prod stays
|
|
29
|
+
// loopback-strict; `--dev` admits loopback only. `isDevMode()` and the
|
|
30
|
+
// secret are read per request: channel modules construct at import time.
|
|
31
|
+
const auth = (_b = options.auth) !== null && _b !== void 0 ? _b : [
|
|
32
|
+
(request, info) => (resolveGitLabWebhookSecret(options) !== undefined
|
|
33
|
+
? allowAll()
|
|
34
|
+
: isDevMode()
|
|
35
|
+
? loopbackOnly()
|
|
36
|
+
: localDevStrict())(request, info),
|
|
37
|
+
];
|
|
38
|
+
const channelOptions = Object.assign({}, options);
|
|
39
|
+
if (channelOptions.continuation !== undefined) {
|
|
40
|
+
channelOptions.continuation = normalizeIdentity(channelOptions.continuation, GITLAB_CHANNEL_KIND);
|
|
41
|
+
}
|
|
42
|
+
// `cursorAccount` routes `ctx.gitlab` through the SCM proxy once the serve
|
|
43
|
+
// host binds the Cursor API key + transport (`--cursor-scm-proxy`).
|
|
44
|
+
const cursorAccount = options.cursorAccount === undefined || options.cursorAccount === false
|
|
45
|
+
? undefined
|
|
46
|
+
: {
|
|
47
|
+
credentials: createPendingCursorGitLabCredentials(),
|
|
48
|
+
scope: typeof options.cursorAccount === "object"
|
|
49
|
+
? parseCursorGitLabProjectScope(options.cursorAccount.projects)
|
|
50
|
+
: undefined,
|
|
51
|
+
};
|
|
52
|
+
const proxy = () => cursorAccount === null || cursorAccount === void 0 ? void 0 : cursorAccount.credentials.getProxyTransport();
|
|
53
|
+
const definition = defineChannel({
|
|
54
|
+
auth,
|
|
55
|
+
state: emptyGitLabChannelState(),
|
|
56
|
+
events: (_c = options.events) !== null && _c !== void 0 ? _c : {},
|
|
57
|
+
onStart: options.onStart,
|
|
58
|
+
onStop: options.onStop,
|
|
59
|
+
meta: {
|
|
60
|
+
kind: GITLAB_CHANNEL_KIND,
|
|
61
|
+
gitlabWebhookEvents: deriveGitLabWebhookEvents(channelOptions),
|
|
62
|
+
},
|
|
63
|
+
routes: [
|
|
64
|
+
POST(routePath, {
|
|
65
|
+
bodySchema: z.unknown(),
|
|
66
|
+
description: "GitLab webhook ingress",
|
|
67
|
+
handler: (request, args) => __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
return handleGitLabWebhookRequest({
|
|
69
|
+
options: channelOptions,
|
|
70
|
+
request,
|
|
71
|
+
args,
|
|
72
|
+
proxy,
|
|
73
|
+
});
|
|
74
|
+
}),
|
|
75
|
+
}),
|
|
76
|
+
],
|
|
77
|
+
});
|
|
78
|
+
gitlabChannelOptionsByDefinition.set(definition, channelOptions);
|
|
79
|
+
if (cursorAccount !== undefined) {
|
|
80
|
+
registerGitLabCursorAccountRuntime(definition, Object.assign({ options: channelOptions }, cursorAccount));
|
|
81
|
+
}
|
|
82
|
+
attachHostedAdmissionAdapter(definition, {
|
|
83
|
+
kind: GITLAB_CHANNEL_KIND,
|
|
84
|
+
prepareArgs: withPropagatingBackgroundErrors,
|
|
85
|
+
dispatch: (_a) => __awaiter(this, [_a], void 0, function* ({ eventType, payload, deliveryId, args }) {
|
|
86
|
+
const delivery = parseGitLabWebhookPayload(payload, eventType);
|
|
87
|
+
if (delivery === null) {
|
|
88
|
+
return Response.json({ ok: false, error: "invalid_gitlab_payload" }, { status: 400 });
|
|
89
|
+
}
|
|
90
|
+
delivery.deliveryId = deliveryId;
|
|
91
|
+
return dispatchGitLabWebhook({
|
|
92
|
+
options: channelOptions,
|
|
93
|
+
delivery,
|
|
94
|
+
args,
|
|
95
|
+
proxy,
|
|
96
|
+
});
|
|
97
|
+
}),
|
|
98
|
+
});
|
|
99
|
+
return definition;
|
|
100
|
+
}
|
|
101
|
+
export function findGitLabChannelTargets(mounts) {
|
|
102
|
+
var _a, _b, _c;
|
|
103
|
+
const targets = [];
|
|
104
|
+
for (const { slug, project } of mounts) {
|
|
105
|
+
for (const channel of project.channels) {
|
|
106
|
+
const meta = channel.definition.meta;
|
|
107
|
+
if ((meta === null || meta === void 0 ? void 0 : meta.kind) !== GITLAB_CHANNEL_KIND) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const postRoute = ((_a = channel.definition.routes) !== null && _a !== void 0 ? _a : []).find((route) => route.method === "POST");
|
|
111
|
+
targets.push({
|
|
112
|
+
slug,
|
|
113
|
+
channelId: channel.id,
|
|
114
|
+
routePath: (_b = postRoute === null || postRoute === void 0 ? void 0 : postRoute.path) !== null && _b !== void 0 ? _b : "/",
|
|
115
|
+
events: [...((_c = meta.gitlabWebhookEvents) !== null && _c !== void 0 ? _c : [])],
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return targets;
|
|
120
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ChannelHandlerArgs } from "../../types.js";
|
|
2
|
+
import type { GitLabProxyTransport } from "./api.js";
|
|
3
|
+
import type { GitLabChannelOptions, GitLabEventContext, GitLabWebhookDelivery } from "./types.js";
|
|
4
|
+
/** `GITLAB_WEBHOOK_SECRET` fallback for {@link GitLabChannelOptions.webhookSecret}. */
|
|
5
|
+
export declare function envGitLabWebhookSecret(): string | undefined;
|
|
6
|
+
export declare function resolveGitLabWebhookSecret(options: Pick<GitLabChannelOptions, "webhookSecret">): string | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* GitLab sends the hook's secret verbatim in `X-Gitlab-Token` (no HMAC).
|
|
9
|
+
* Constant-time compare so a reachable URL leaks nothing about the secret.
|
|
10
|
+
*/
|
|
11
|
+
export declare function verifyGitLabWebhookToken(headerValue: string | null | undefined, secret: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Accept a raw GitLab payload. `object_kind` is the event discriminator;
|
|
14
|
+
* hosted admission passes the envelope's event type, which wins when set.
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseGitLabWebhookPayload(payload: unknown, eventType?: string): GitLabWebhookDelivery | null;
|
|
17
|
+
export declare function parseGitLabEventContext(delivery: GitLabWebhookDelivery): Omit<GitLabEventContext, "host" | "artifacts" | "gitlab" | "send"> | null;
|
|
18
|
+
/**
|
|
19
|
+
* Run the authored hooks for one GitLab delivery and `send()` the turn.
|
|
20
|
+
* Callers own delivery auth: the HTTP route compares `X-Gitlab-Token`;
|
|
21
|
+
* hosted admission arrives verified. The v2 mailbox is stamped upstream
|
|
22
|
+
* (local CP or hosted ingress), never here.
|
|
23
|
+
*/
|
|
24
|
+
export declare function dispatchGitLabWebhook(input: {
|
|
25
|
+
options: GitLabChannelOptions;
|
|
26
|
+
delivery: GitLabWebhookDelivery;
|
|
27
|
+
args: ChannelHandlerArgs;
|
|
28
|
+
/** Host-bound SCM-proxy transport (`cursorAccount` + `--cursor-scm-proxy`). */
|
|
29
|
+
proxy?: () => GitLabProxyTransport | undefined;
|
|
30
|
+
}): Promise<Response>;
|
|
31
|
+
/**
|
|
32
|
+
* HTTP entry for a single agent's GitLab channel: `X-Gitlab-Token` compare
|
|
33
|
+
* when a secret is configured, then {@link dispatchGitLabWebhook}. Without
|
|
34
|
+
* a secret the route auth owns admission (`serve --dev` admits loopback
|
|
35
|
+
* only; production stays loopback-strict).
|
|
36
|
+
*/
|
|
37
|
+
export declare function handleGitLabWebhookRequest(input: {
|
|
38
|
+
options: GitLabChannelOptions;
|
|
39
|
+
request: Request;
|
|
40
|
+
args: ChannelHandlerArgs;
|
|
41
|
+
/** When true, skip the token compare even if a secret is configured. */
|
|
42
|
+
skipSignatureVerification?: boolean;
|
|
43
|
+
proxy?: () => GitLabProxyTransport | undefined;
|
|
44
|
+
}): Promise<Response>;
|
|
45
|
+
//# sourceMappingURL=gitlab-webhook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitlab-webhook.d.ts","sourceRoot":"","sources":["../../../src/channels/gitlab/gitlab-webhook.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAEV,kBAAkB,EAEnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAuBrD,OAAO,KAAK,EACV,oBAAoB,EAEpB,kBAAkB,EAOlB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAEpB,uFAAuF;AACvF,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAG3D;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,GACnD,MAAM,GAAG,SAAS,CASpB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,MAAM,EAAE,MAAM,GACb,OAAO,CAST;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,qBAAqB,GAAG,IAAI,CAU9B;AA2CD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,qBAAqB,GAC9B,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC,GAAG,IAAI,CA+B3E;AAiKD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IACjD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,IAAI,EAAE,kBAAkB,CAAC;IACzB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,oBAAoB,GAAG,SAAS,CAAC;CAChD,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkJpB;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;IACzB,wEAAwE;IACxE,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,oBAAoB,GAAG,SAAS,CAAC;CAChD,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwCpB"}
|