@cursor/july 0.1.1
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 +290 -0
- package/LICENSE.md +3 -0
- package/README.md +1233 -0
- package/dist/ab.d.ts +290 -0
- package/dist/ab.d.ts.map +1 -0
- package/dist/ab.js +386 -0
- package/dist/bin/agent-serve.d.ts +15 -0
- package/dist/bin/agent-serve.d.ts.map +1 -0
- package/dist/bin/agent-serve.js +754 -0
- package/dist/channels/github/api.d.ts +101 -0
- package/dist/channels/github/api.d.ts.map +1 -0
- package/dist/channels/github/api.js +229 -0
- package/dist/channels/github/auth.d.ts +67 -0
- package/dist/channels/github/auth.d.ts.map +1 -0
- package/dist/channels/github/auth.js +239 -0
- package/dist/channels/github/binding.d.ts +73 -0
- package/dist/channels/github/binding.d.ts.map +1 -0
- package/dist/channels/github/binding.js +114 -0
- package/dist/channels/github/defaults.d.ts +24 -0
- package/dist/channels/github/defaults.d.ts.map +1 -0
- package/dist/channels/github/defaults.js +100 -0
- package/dist/channels/github/events.d.ts +18 -0
- package/dist/channels/github/events.d.ts.map +1 -0
- package/dist/channels/github/events.js +59 -0
- package/dist/channels/github/forward.d.ts +137 -0
- package/dist/channels/github/forward.d.ts.map +1 -0
- package/dist/channels/github/forward.js +271 -0
- package/dist/channels/github/github-channel.d.ts +127 -0
- package/dist/channels/github/github-channel.d.ts.map +1 -0
- package/dist/channels/github/github-channel.js +1688 -0
- package/dist/channels/github/index.d.ts +52 -0
- package/dist/channels/github/index.d.ts.map +1 -0
- package/dist/channels/github/index.js +51 -0
- package/dist/channels/github/replay.d.ts +115 -0
- package/dist/channels/github/replay.d.ts.map +1 -0
- package/dist/channels/github/replay.js +282 -0
- package/dist/channels/github/state.d.ts +26 -0
- package/dist/channels/github/state.d.ts.map +1 -0
- package/dist/channels/github/state.js +50 -0
- package/dist/channels/github/types.d.ts +385 -0
- package/dist/channels/github/types.d.ts.map +1 -0
- package/dist/channels/github/types.js +1 -0
- package/dist/channels/slack/api.d.ts +117 -0
- package/dist/channels/slack/api.d.ts.map +1 -0
- package/dist/channels/slack/api.js +437 -0
- package/dist/channels/slack/approvals.d.ts +32 -0
- package/dist/channels/slack/approvals.d.ts.map +1 -0
- package/dist/channels/slack/approvals.js +157 -0
- package/dist/channels/slack/assistant.d.ts +23 -0
- package/dist/channels/slack/assistant.d.ts.map +1 -0
- package/dist/channels/slack/assistant.js +67 -0
- package/dist/channels/slack/auth.d.ts +40 -0
- package/dist/channels/slack/auth.d.ts.map +1 -0
- package/dist/channels/slack/auth.js +71 -0
- package/dist/channels/slack/channel-watch.d.ts +46 -0
- package/dist/channels/slack/channel-watch.d.ts.map +1 -0
- package/dist/channels/slack/channel-watch.js +180 -0
- package/dist/channels/slack/constants.d.ts +17 -0
- package/dist/channels/slack/constants.d.ts.map +1 -0
- package/dist/channels/slack/constants.js +27 -0
- package/dist/channels/slack/credentials.d.ts +35 -0
- package/dist/channels/slack/credentials.d.ts.map +1 -0
- package/dist/channels/slack/credentials.js +88 -0
- package/dist/channels/slack/cursor-account.d.ts +76 -0
- package/dist/channels/slack/cursor-account.d.ts.map +1 -0
- package/dist/channels/slack/cursor-account.js +88 -0
- package/dist/channels/slack/defaults.d.ts +32 -0
- package/dist/channels/slack/defaults.d.ts.map +1 -0
- package/dist/channels/slack/defaults.js +380 -0
- package/dist/channels/slack/dispatch.d.ts +43 -0
- package/dist/channels/slack/dispatch.d.ts.map +1 -0
- package/dist/channels/slack/dispatch.js +185 -0
- package/dist/channels/slack/doctor.d.ts +24 -0
- package/dist/channels/slack/doctor.d.ts.map +1 -0
- package/dist/channels/slack/doctor.js +115 -0
- package/dist/channels/slack/event-id-dedupe.d.ts +10 -0
- package/dist/channels/slack/event-id-dedupe.d.ts.map +1 -0
- package/dist/channels/slack/event-id-dedupe.js +23 -0
- package/dist/channels/slack/inbound.d.ts +41 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -0
- package/dist/channels/slack/inbound.js +166 -0
- package/dist/channels/slack/index.d.ts +45 -0
- package/dist/channels/slack/index.d.ts.map +1 -0
- package/dist/channels/slack/index.js +44 -0
- package/dist/channels/slack/init.d.ts +32 -0
- package/dist/channels/slack/init.d.ts.map +1 -0
- package/dist/channels/slack/init.js +82 -0
- package/dist/channels/slack/interactive.d.ts +19 -0
- package/dist/channels/slack/interactive.d.ts.map +1 -0
- package/dist/channels/slack/interactive.js +142 -0
- package/dist/channels/slack/links.d.ts +10 -0
- package/dist/channels/slack/links.d.ts.map +1 -0
- package/dist/channels/slack/links.js +19 -0
- package/dist/channels/slack/live-delivery.d.ts +75 -0
- package/dist/channels/slack/live-delivery.d.ts.map +1 -0
- package/dist/channels/slack/live-delivery.js +143 -0
- package/dist/channels/slack/log.d.ts +25 -0
- package/dist/channels/slack/log.d.ts.map +1 -0
- package/dist/channels/slack/log.js +47 -0
- package/dist/channels/slack/manifest.d.ts +57 -0
- package/dist/channels/slack/manifest.d.ts.map +1 -0
- package/dist/channels/slack/manifest.js +110 -0
- package/dist/channels/slack/pr-ref.d.ts +18 -0
- package/dist/channels/slack/pr-ref.d.ts.map +1 -0
- package/dist/channels/slack/pr-ref.js +36 -0
- package/dist/channels/slack/setup.d.ts +14 -0
- package/dist/channels/slack/setup.d.ts.map +1 -0
- package/dist/channels/slack/setup.js +86 -0
- package/dist/channels/slack/slack-channel.d.ts +15 -0
- package/dist/channels/slack/slack-channel.d.ts.map +1 -0
- package/dist/channels/slack/slack-channel.js +281 -0
- package/dist/channels/slack/socket-mode.d.ts +26 -0
- package/dist/channels/slack/socket-mode.d.ts.map +1 -0
- package/dist/channels/slack/socket-mode.js +116 -0
- package/dist/channels/slack/stream.d.ts +26 -0
- package/dist/channels/slack/stream.d.ts.map +1 -0
- package/dist/channels/slack/stream.js +39 -0
- package/dist/channels/slack/tool-approval-events.d.ts +33 -0
- package/dist/channels/slack/tool-approval-events.d.ts.map +1 -0
- package/dist/channels/slack/tool-approval-events.js +129 -0
- package/dist/channels/slack/types.d.ts +326 -0
- package/dist/channels/slack/types.d.ts.map +1 -0
- package/dist/channels/slack/types.js +4 -0
- package/dist/channels.d.ts +116 -0
- package/dist/channels.d.ts.map +1 -0
- package/dist/channels.js +294 -0
- package/dist/connections.d.ts +75 -0
- package/dist/connections.d.ts.map +1 -0
- package/dist/connections.js +75 -0
- package/dist/docs/404.html +22 -0
- package/dist/docs/ab.html +87 -0
- package/dist/docs/assets/ab.md.COdXkces.js +63 -0
- package/dist/docs/assets/ab.md.COdXkces.lean.js +1 -0
- package/dist/docs/assets/app.DqfFEmJd.js +1 -0
- package/dist/docs/assets/building-with-agents.md.CJCtZCyi.js +13 -0
- package/dist/docs/assets/building-with-agents.md.CJCtZCyi.lean.js +1 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.CcVk1uKq.js +1 -0
- package/dist/docs/assets/chunks/VPLocalSearchBox.BaLEdS15.js +9 -0
- package/dist/docs/assets/chunks/framework.CAZyNGu9.js +19 -0
- package/dist/docs/assets/chunks/theme.CZRvu_0q.js +2 -0
- package/dist/docs/assets/concepts.md.Cfb9b-k1.js +4 -0
- package/dist/docs/assets/concepts.md.Cfb9b-k1.lean.js +1 -0
- package/dist/docs/assets/deployment.md.Dx1TYNk5.js +14 -0
- package/dist/docs/assets/deployment.md.Dx1TYNk5.lean.js +1 -0
- package/dist/docs/assets/evals.md.DPZ_MAnI.js +85 -0
- package/dist/docs/assets/evals.md.DPZ_MAnI.lean.js +1 -0
- package/dist/docs/assets/guides_agent-to-agent.md.CrtrsySy.js +10 -0
- package/dist/docs/assets/guides_agent-to-agent.md.CrtrsySy.lean.js +1 -0
- package/dist/docs/assets/guides_cloud-runtime.md.CYlNMTNp.js +9 -0
- package/dist/docs/assets/guides_cloud-runtime.md.CYlNMTNp.lean.js +1 -0
- package/dist/docs/assets/guides_github.md.DwbKhCeS.js +20 -0
- package/dist/docs/assets/guides_github.md.DwbKhCeS.lean.js +1 -0
- package/dist/docs/assets/guides_human-in-the-loop.md.Dvuctx7s.js +28 -0
- package/dist/docs/assets/guides_human-in-the-loop.md.Dvuctx7s.lean.js +1 -0
- package/dist/docs/assets/guides_slack.md.bv41fHfW.js +37 -0
- package/dist/docs/assets/guides_slack.md.bv41fHfW.lean.js +1 -0
- package/dist/docs/assets/guides_webhooks.md.hFTik3lf.js +50 -0
- package/dist/docs/assets/guides_webhooks.md.hFTik3lf.lean.js +1 -0
- package/dist/docs/assets/hillclimbing.md.DHNast08.js +4 -0
- package/dist/docs/assets/hillclimbing.md.DHNast08.lean.js +1 -0
- package/dist/docs/assets/index.md.BPKcj5AI.js +20 -0
- package/dist/docs/assets/index.md.BPKcj5AI.lean.js +1 -0
- package/dist/docs/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
- package/dist/docs/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
- package/dist/docs/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
- package/dist/docs/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
- package/dist/docs/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
- package/dist/docs/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
- package/dist/docs/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
- package/dist/docs/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
- package/dist/docs/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
- package/dist/docs/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
- package/dist/docs/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
- package/dist/docs/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
- package/dist/docs/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
- package/dist/docs/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
- package/dist/docs/assets/quickstart.md.tVPiGK_L.js +35 -0
- package/dist/docs/assets/quickstart.md.tVPiGK_L.lean.js +1 -0
- package/dist/docs/assets/reference_agent-config.md.Bpd7HQwf.js +34 -0
- package/dist/docs/assets/reference_agent-config.md.Bpd7HQwf.lean.js +1 -0
- package/dist/docs/assets/reference_channels.md.D7JTR03W.js +53 -0
- package/dist/docs/assets/reference_channels.md.D7JTR03W.lean.js +1 -0
- package/dist/docs/assets/reference_cli.md.DA730zCu.js +33 -0
- package/dist/docs/assets/reference_cli.md.DA730zCu.lean.js +1 -0
- package/dist/docs/assets/reference_connections.md.C3vNH_DE.js +26 -0
- package/dist/docs/assets/reference_connections.md.C3vNH_DE.lean.js +1 -0
- package/dist/docs/assets/reference_hooks.md.BCEc3MyM.js +12 -0
- package/dist/docs/assets/reference_hooks.md.BCEc3MyM.lean.js +1 -0
- package/dist/docs/assets/reference_http-api.md.DBAahtdz.js +11 -0
- package/dist/docs/assets/reference_http-api.md.DBAahtdz.lean.js +1 -0
- package/dist/docs/assets/reference_instructions.md.BC05LEQ8.js +12 -0
- package/dist/docs/assets/reference_instructions.md.BC05LEQ8.lean.js +1 -0
- package/dist/docs/assets/reference_playground.md.CPZhfYaO.js +1 -0
- package/dist/docs/assets/reference_playground.md.CPZhfYaO.lean.js +1 -0
- package/dist/docs/assets/reference_project-layout.md.Bd_CKtNS.js +31 -0
- package/dist/docs/assets/reference_project-layout.md.Bd_CKtNS.lean.js +1 -0
- package/dist/docs/assets/reference_schedules.md.D7qijxLk.js +82 -0
- package/dist/docs/assets/reference_schedules.md.D7qijxLk.lean.js +1 -0
- package/dist/docs/assets/reference_sessions.md.DdjWabnN.js +8 -0
- package/dist/docs/assets/reference_sessions.md.DdjWabnN.lean.js +1 -0
- package/dist/docs/assets/reference_skills.md.VQnlBT3Q.js +15 -0
- package/dist/docs/assets/reference_skills.md.VQnlBT3Q.lean.js +1 -0
- package/dist/docs/assets/reference_subagents.md.CIRAVcPK.js +10 -0
- package/dist/docs/assets/reference_subagents.md.CIRAVcPK.lean.js +1 -0
- package/dist/docs/assets/reference_tools.md.DF5kwlt0.js +46 -0
- package/dist/docs/assets/reference_tools.md.DF5kwlt0.lean.js +1 -0
- package/dist/docs/assets/scaffolding-agents.md.CyYfWGdc.js +1 -0
- package/dist/docs/assets/scaffolding-agents.md.CyYfWGdc.lean.js +1 -0
- package/dist/docs/assets/style.Bj-IXa5W.css +1 -0
- package/dist/docs/assets/troubleshooting.md.DkovjS7h.js +1 -0
- package/dist/docs/assets/troubleshooting.md.DkovjS7h.lean.js +1 -0
- package/dist/docs/building-with-agents.html +37 -0
- package/dist/docs/concepts.html +28 -0
- package/dist/docs/deployment.html +38 -0
- package/dist/docs/evals.html +109 -0
- package/dist/docs/guides/agent-to-agent.html +34 -0
- package/dist/docs/guides/cloud-runtime.html +33 -0
- package/dist/docs/guides/github.html +44 -0
- package/dist/docs/guides/human-in-the-loop.html +52 -0
- package/dist/docs/guides/slack.html +61 -0
- package/dist/docs/guides/webhooks.html +74 -0
- package/dist/docs/hashmap.json +1 -0
- package/dist/docs/hillclimbing.html +28 -0
- package/dist/docs/index.html +44 -0
- package/dist/docs/quickstart.html +59 -0
- package/dist/docs/reference/agent-config.html +58 -0
- package/dist/docs/reference/channels.html +77 -0
- package/dist/docs/reference/cli.html +57 -0
- package/dist/docs/reference/connections.html +50 -0
- package/dist/docs/reference/hooks.html +36 -0
- package/dist/docs/reference/http-api.html +35 -0
- package/dist/docs/reference/instructions.html +36 -0
- package/dist/docs/reference/playground.html +25 -0
- package/dist/docs/reference/project-layout.html +55 -0
- package/dist/docs/reference/schedules.html +106 -0
- package/dist/docs/reference/sessions.html +32 -0
- package/dist/docs/reference/skills.html +39 -0
- package/dist/docs/reference/subagents.html +34 -0
- package/dist/docs/reference/tools.html +70 -0
- package/dist/docs/scaffolding-agents.html +25 -0
- package/dist/docs/troubleshooting.html +25 -0
- package/dist/docs/vp-icons.css +0 -0
- package/dist/evals.d.ts +312 -0
- package/dist/evals.d.ts.map +1 -0
- package/dist/evals.js +254 -0
- package/dist/hooks.d.ts +23 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +23 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +101 -0
- package/dist/internal/ab-collector.d.ts +42 -0
- package/dist/internal/ab-collector.d.ts.map +1 -0
- package/dist/internal/ab-collector.js +153 -0
- package/dist/internal/ab-fold.d.ts +36 -0
- package/dist/internal/ab-fold.d.ts.map +1 -0
- package/dist/internal/ab-fold.js +171 -0
- package/dist/internal/ab-snapshot.d.ts +70 -0
- package/dist/internal/ab-snapshot.d.ts.map +1 -0
- package/dist/internal/ab-snapshot.js +208 -0
- package/dist/internal/approval-gate.d.ts +34 -0
- package/dist/internal/approval-gate.d.ts.map +1 -0
- package/dist/internal/approval-gate.js +85 -0
- package/dist/internal/auth.d.ts +8 -0
- package/dist/internal/auth.d.ts.map +1 -0
- package/dist/internal/auth.js +27 -0
- package/dist/internal/authored-alias-hooks.d.ts +31 -0
- package/dist/internal/authored-alias-hooks.d.ts.map +1 -0
- package/dist/internal/authored-alias-hooks.js +43 -0
- package/dist/internal/authored-loaders.d.ts +25 -0
- package/dist/internal/authored-loaders.d.ts.map +1 -0
- package/dist/internal/authored-loaders.js +129 -0
- package/dist/internal/bounded-int.d.ts +11 -0
- package/dist/internal/bounded-int.d.ts.map +1 -0
- package/dist/internal/bounded-int.js +13 -0
- package/dist/internal/brand.d.ts +6 -0
- package/dist/internal/brand.d.ts.map +1 -0
- package/dist/internal/brand.js +17 -0
- package/dist/internal/chat-client.d.ts +19 -0
- package/dist/internal/chat-client.d.ts.map +1 -0
- package/dist/internal/chat-client.js +327 -0
- package/dist/internal/cli-ax.d.ts +58 -0
- package/dist/internal/cli-ax.d.ts.map +1 -0
- package/dist/internal/cli-ax.js +345 -0
- package/dist/internal/cli-cursor.d.ts +20 -0
- package/dist/internal/cli-cursor.d.ts.map +1 -0
- package/dist/internal/cli-cursor.js +227 -0
- package/dist/internal/cli-github.d.ts +47 -0
- package/dist/internal/cli-github.d.ts.map +1 -0
- package/dist/internal/cli-github.js +644 -0
- package/dist/internal/cli-slack.d.ts +18 -0
- package/dist/internal/cli-slack.d.ts.map +1 -0
- package/dist/internal/cli-slack.js +144 -0
- package/dist/internal/cloud-merge.d.ts +23 -0
- package/dist/internal/cloud-merge.d.ts.map +1 -0
- package/dist/internal/cloud-merge.js +28 -0
- package/dist/internal/cron.d.ts +17 -0
- package/dist/internal/cron.d.ts.map +1 -0
- package/dist/internal/cron.js +60 -0
- package/dist/internal/cursor/account-mcp.d.ts +95 -0
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -0
- package/dist/internal/cursor/account-mcp.js +342 -0
- package/dist/internal/cursor/backend-client.d.ts +118 -0
- package/dist/internal/cursor/backend-client.d.ts.map +1 -0
- package/dist/internal/cursor/backend-client.js +477 -0
- package/dist/internal/cursor/credentials.d.ts +112 -0
- package/dist/internal/cursor/credentials.d.ts.map +1 -0
- package/dist/internal/cursor/credentials.js +329 -0
- package/dist/internal/cursor-event-relay.d.ts +111 -0
- package/dist/internal/cursor-event-relay.d.ts.map +1 -0
- package/dist/internal/cursor-event-relay.js +181 -0
- package/dist/internal/cursor-relay-core.d.ts +113 -0
- package/dist/internal/cursor-relay-core.d.ts.map +1 -0
- package/dist/internal/cursor-relay-core.js +364 -0
- package/dist/internal/cursor-slack-relay.d.ts +94 -0
- package/dist/internal/cursor-slack-relay.d.ts.map +1 -0
- package/dist/internal/cursor-slack-relay.js +171 -0
- package/dist/internal/describe-error.d.ts +3 -0
- package/dist/internal/describe-error.d.ts.map +1 -0
- package/dist/internal/describe-error.js +4 -0
- package/dist/internal/dev-mode.d.ts +13 -0
- package/dist/internal/dev-mode.d.ts.map +1 -0
- package/dist/internal/dev-mode.js +17 -0
- package/dist/internal/discovery.d.ts +55 -0
- package/dist/internal/discovery.d.ts.map +1 -0
- package/dist/internal/discovery.js +1427 -0
- package/dist/internal/distribution.d.ts +47 -0
- package/dist/internal/distribution.d.ts.map +1 -0
- package/dist/internal/distribution.js +82 -0
- package/dist/internal/docs-site.d.ts +28 -0
- package/dist/internal/docs-site.d.ts.map +1 -0
- package/dist/internal/docs-site.js +169 -0
- package/dist/internal/duration.d.ts +8 -0
- package/dist/internal/duration.d.ts.map +1 -0
- package/dist/internal/duration.js +35 -0
- package/dist/internal/eval-run-store.d.ts +81 -0
- package/dist/internal/eval-run-store.d.ts.map +1 -0
- package/dist/internal/eval-run-store.js +396 -0
- package/dist/internal/eval-runner.d.ts +76 -0
- package/dist/internal/eval-runner.d.ts.map +1 -0
- package/dist/internal/eval-runner.js +336 -0
- package/dist/internal/event-log.d.ts +51 -0
- package/dist/internal/event-log.d.ts.map +1 -0
- package/dist/internal/event-log.js +167 -0
- package/dist/internal/event-mapper.d.ts +46 -0
- package/dist/internal/event-mapper.d.ts.map +1 -0
- package/dist/internal/event-mapper.js +226 -0
- package/dist/internal/frontmatter.d.ts +12 -0
- package/dist/internal/frontmatter.d.ts.map +1 -0
- package/dist/internal/frontmatter.js +61 -0
- package/dist/internal/github-fanout.d.ts +32 -0
- package/dist/internal/github-fanout.d.ts.map +1 -0
- package/dist/internal/github-fanout.js +122 -0
- package/dist/internal/handleAgentServeTrigger.d.ts +59 -0
- package/dist/internal/handleAgentServeTrigger.d.ts.map +1 -0
- package/dist/internal/handleAgentServeTrigger.js +115 -0
- package/dist/internal/host-platforms.d.ts +40 -0
- package/dist/internal/host-platforms.d.ts.map +1 -0
- package/dist/internal/host-platforms.js +113 -0
- package/dist/internal/http-channel.d.ts +54 -0
- package/dist/internal/http-channel.d.ts.map +1 -0
- package/dist/internal/http-channel.js +382 -0
- package/dist/internal/ids.d.ts +19 -0
- package/dist/internal/ids.d.ts.map +1 -0
- package/dist/internal/ids.js +34 -0
- package/dist/internal/init-project.d.ts +22 -0
- package/dist/internal/init-project.d.ts.map +1 -0
- package/dist/internal/init-project.js +125 -0
- package/dist/internal/json-dir-store.d.ts +32 -0
- package/dist/internal/json-dir-store.d.ts.map +1 -0
- package/dist/internal/json-dir-store.js +100 -0
- package/dist/internal/json-schema.d.ts +18 -0
- package/dist/internal/json-schema.d.ts.map +1 -0
- package/dist/internal/json-schema.js +53 -0
- package/dist/internal/log-ring.d.ts +23 -0
- package/dist/internal/log-ring.d.ts.map +1 -0
- package/dist/internal/log-ring.js +42 -0
- package/dist/internal/map-pool.d.ts +6 -0
- package/dist/internal/map-pool.d.ts.map +1 -0
- package/dist/internal/map-pool.js +41 -0
- package/dist/internal/mcp-endpoint.d.ts +59 -0
- package/dist/internal/mcp-endpoint.d.ts.map +1 -0
- package/dist/internal/mcp-endpoint.js +355 -0
- package/dist/internal/mcp-host.d.ts +28 -0
- package/dist/internal/mcp-host.d.ts.map +1 -0
- package/dist/internal/mcp-host.js +162 -0
- package/dist/internal/net.d.ts +5 -0
- package/dist/internal/net.d.ts.map +1 -0
- package/dist/internal/net.js +30 -0
- package/dist/internal/peer-connections.d.ts +44 -0
- package/dist/internal/peer-connections.d.ts.map +1 -0
- package/dist/internal/peer-connections.js +67 -0
- package/dist/internal/playground/static.d.ts +35 -0
- package/dist/internal/playground/static.d.ts.map +1 -0
- package/dist/internal/playground/static.js +162 -0
- package/dist/internal/playground/toolchain.d.ts +57 -0
- package/dist/internal/playground/toolchain.d.ts.map +1 -0
- package/dist/internal/playground/toolchain.js +226 -0
- package/dist/internal/reminder-runner.d.ts +62 -0
- package/dist/internal/reminder-runner.d.ts.map +1 -0
- package/dist/internal/reminder-runner.js +582 -0
- package/dist/internal/reminder-schedule.d.ts +22 -0
- package/dist/internal/reminder-schedule.d.ts.map +1 -0
- package/dist/internal/reminder-schedule.js +82 -0
- package/dist/internal/reminder-store.d.ts +58 -0
- package/dist/internal/reminder-store.d.ts.map +1 -0
- package/dist/internal/reminder-store.js +106 -0
- package/dist/internal/resolved-connections.d.ts +41 -0
- package/dist/internal/resolved-connections.d.ts.map +1 -0
- package/dist/internal/resolved-connections.js +73 -0
- package/dist/internal/review-comments.d.ts +50 -0
- package/dist/internal/review-comments.d.ts.map +1 -0
- package/dist/internal/review-comments.js +194 -0
- package/dist/internal/router.d.ts +33 -0
- package/dist/internal/router.d.ts.map +1 -0
- package/dist/internal/router.js +93 -0
- package/dist/internal/run-client.d.ts +49 -0
- package/dist/internal/run-client.d.ts.map +1 -0
- package/dist/internal/run-client.js +208 -0
- package/dist/internal/schedule-runner.d.ts +31 -0
- package/dist/internal/schedule-runner.d.ts.map +1 -0
- package/dist/internal/schedule-runner.js +126 -0
- package/dist/internal/sdk-runner.d.ts +41 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -0
- package/dist/internal/sdk-runner.js +221 -0
- package/dist/internal/server.d.ts +25 -0
- package/dist/internal/server.d.ts.map +1 -0
- package/dist/internal/server.js +1374 -0
- package/dist/internal/session-engine.d.ts +287 -0
- package/dist/internal/session-engine.d.ts.map +1 -0
- package/dist/internal/session-engine.js +1377 -0
- package/dist/internal/session-store.d.ts +29 -0
- package/dist/internal/session-store.d.ts.map +1 -0
- package/dist/internal/session-store.js +140 -0
- package/dist/internal/session-urls.d.ts +10 -0
- package/dist/internal/session-urls.d.ts.map +1 -0
- package/dist/internal/session-urls.js +25 -0
- package/dist/internal/stream-progress.d.ts +14 -0
- package/dist/internal/stream-progress.d.ts.map +1 -0
- package/dist/internal/stream-progress.js +195 -0
- package/dist/internal/tool-result.d.ts +20 -0
- package/dist/internal/tool-result.d.ts.map +1 -0
- package/dist/internal/tool-result.js +45 -0
- package/dist/internal/trajectory.d.ts +56 -0
- package/dist/internal/trajectory.d.ts.map +1 -0
- package/dist/internal/trajectory.js +248 -0
- package/dist/internal/workspace.d.ts +42 -0
- package/dist/internal/workspace.d.ts.map +1 -0
- package/dist/internal/workspace.js +199 -0
- package/dist/playground/assets/cursor-icons-outline-oY2V_mvK.woff2 +0 -0
- package/dist/playground/assets/index-1K-hG-7p.css +1 -0
- package/dist/playground/assets/index-FlWjhg3x.js +79 -0
- package/dist/playground/index.html +17 -0
- package/dist/reminders.d.ts +23 -0
- package/dist/reminders.d.ts.map +1 -0
- package/dist/reminders.js +22 -0
- package/dist/schedules.d.ts +23 -0
- package/dist/schedules.d.ts.map +1 -0
- package/dist/schedules.js +26 -0
- package/dist/skills.d.ts +22 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +22 -0
- package/dist/tools.d.ts +92 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +68 -0
- package/dist/types.d.ts +1609 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +80 -0
- package/docs/README.md +174 -0
- package/docs/ab.md +355 -0
- package/docs/building-with-agents.md +129 -0
- package/docs/concepts.md +177 -0
- package/docs/deployment.md +218 -0
- package/docs/evals.md +383 -0
- package/docs/guides/agent-to-agent.md +118 -0
- package/docs/guides/cloud-runtime.md +122 -0
- package/docs/guides/github.md +172 -0
- package/docs/guides/human-in-the-loop.md +131 -0
- package/docs/guides/slack.md +245 -0
- package/docs/guides/webhooks.md +201 -0
- package/docs/hillclimbing.md +93 -0
- package/docs/quickstart.md +183 -0
- package/docs/reference/agent-config.md +154 -0
- package/docs/reference/channels.md +206 -0
- package/docs/reference/cli.md +257 -0
- package/docs/reference/connections.md +137 -0
- package/docs/reference/hooks.md +74 -0
- package/docs/reference/http-api.md +219 -0
- package/docs/reference/instructions.md +77 -0
- package/docs/reference/playground.md +67 -0
- package/docs/reference/project-layout.md +119 -0
- package/docs/reference/schedules.md +220 -0
- package/docs/reference/sessions.md +165 -0
- package/docs/reference/skills.md +79 -0
- package/docs/reference/subagents.md +74 -0
- package/docs/reference/tools.md +203 -0
- package/docs/scaffolding-agents.md +113 -0
- package/docs/troubleshooting.md +95 -0
- package/package.json +185 -0
- package/skills/ab/SKILL.md +139 -0
- package/skills/create-agent/SKILL.md +219 -0
- package/skills/debug/SKILL.md +71 -0
- package/skills/evals/SKILL.md +217 -0
- package/skills/framework-map/SKILL.md +142 -0
- package/skills/github/SKILL.md +144 -0
- package/skills/hillclimb/SKILL.md +162 -0
- package/skills/setup-slack/SKILL.md +180 -0
- package/src/ab.ts +675 -0
- package/src/bin/agent-serve.ts +949 -0
- package/src/channels/github/api.ts +374 -0
- package/src/channels/github/auth.ts +275 -0
- package/src/channels/github/binding.ts +223 -0
- package/src/channels/github/defaults.ts +111 -0
- package/src/channels/github/events.ts +72 -0
- package/src/channels/github/forward.ts +381 -0
- package/src/channels/github/github-channel.ts +2270 -0
- package/src/channels/github/index.ts +52 -0
- package/src/channels/github/replay.ts +387 -0
- package/src/channels/github/state.ts +95 -0
- package/src/channels/github/types.ts +490 -0
- package/src/channels/slack/api.ts +580 -0
- package/src/channels/slack/approvals.ts +198 -0
- package/src/channels/slack/assistant.ts +76 -0
- package/src/channels/slack/auth.ts +112 -0
- package/src/channels/slack/channel-watch.ts +219 -0
- package/src/channels/slack/constants.ts +30 -0
- package/src/channels/slack/credentials.ts +90 -0
- package/src/channels/slack/cursor-account.ts +166 -0
- package/src/channels/slack/defaults.ts +450 -0
- package/src/channels/slack/dispatch.ts +293 -0
- package/src/channels/slack/doctor.ts +135 -0
- package/src/channels/slack/event-id-dedupe.ts +30 -0
- package/src/channels/slack/inbound.ts +219 -0
- package/src/channels/slack/index.ts +45 -0
- package/src/channels/slack/init.ts +133 -0
- package/src/channels/slack/interactive.ts +194 -0
- package/src/channels/slack/links.ts +23 -0
- package/src/channels/slack/live-delivery.ts +201 -0
- package/src/channels/slack/log.ts +83 -0
- package/src/channels/slack/manifest.ts +179 -0
- package/src/channels/slack/pr-ref.ts +50 -0
- package/src/channels/slack/setup.ts +97 -0
- package/src/channels/slack/slack-channel.ts +374 -0
- package/src/channels/slack/socket-mode.ts +154 -0
- package/src/channels/slack/stream.ts +63 -0
- package/src/channels/slack/tool-approval-events.ts +136 -0
- package/src/channels/slack/types.ts +349 -0
- package/src/channels.ts +385 -0
- package/src/connections.ts +89 -0
- package/src/evals.ts +501 -0
- package/src/hooks.ts +33 -0
- package/src/index.ts +184 -0
- package/src/internal/ab-collector.ts +210 -0
- package/src/internal/ab-fold.ts +228 -0
- package/src/internal/ab-snapshot.ts +335 -0
- package/src/internal/approval-gate.ts +115 -0
- package/src/internal/auth.ts +39 -0
- package/src/internal/authored-alias-hooks.ts +69 -0
- package/src/internal/authored-loaders.ts +138 -0
- package/src/internal/bounded-int.ts +27 -0
- package/src/internal/brand.ts +29 -0
- package/src/internal/chat-client.ts +407 -0
- package/src/internal/cli-ax.ts +474 -0
- package/src/internal/cli-cursor.ts +275 -0
- package/src/internal/cli-github.ts +849 -0
- package/src/internal/cli-slack.ts +175 -0
- package/src/internal/cloud-merge.ts +41 -0
- package/src/internal/cron.ts +78 -0
- package/src/internal/cursor/account-mcp.ts +472 -0
- package/src/internal/cursor/backend-client.ts +614 -0
- package/src/internal/cursor/credentials.ts +401 -0
- package/src/internal/cursor-event-relay.ts +281 -0
- package/src/internal/cursor-relay-core.ts +444 -0
- package/src/internal/cursor-slack-relay.ts +242 -0
- package/src/internal/describe-error.ts +4 -0
- package/src/internal/dev-mode.ts +20 -0
- package/src/internal/discovery.ts +1709 -0
- package/src/internal/distribution.ts +97 -0
- package/src/internal/docs-site.ts +191 -0
- package/src/internal/duration.ts +39 -0
- package/src/internal/eval-run-store.ts +519 -0
- package/src/internal/eval-runner.ts +522 -0
- package/src/internal/event-log.ts +175 -0
- package/src/internal/event-mapper.ts +272 -0
- package/src/internal/frontmatter.ts +77 -0
- package/src/internal/github-fanout.ts +159 -0
- package/src/internal/handleAgentServeTrigger.ts +156 -0
- package/src/internal/host-platforms.ts +144 -0
- package/src/internal/http-channel.ts +546 -0
- package/src/internal/ids.ts +44 -0
- package/src/internal/init-project.ts +165 -0
- package/src/internal/json-dir-store.ts +109 -0
- package/src/internal/json-schema.ts +69 -0
- package/src/internal/log-ring.ts +59 -0
- package/src/internal/map-pool.ts +32 -0
- package/src/internal/mcp-endpoint.ts +518 -0
- package/src/internal/mcp-host.ts +211 -0
- package/src/internal/net.ts +31 -0
- package/src/internal/peer-connections.ts +100 -0
- package/src/internal/playground/static.ts +189 -0
- package/src/internal/playground/toolchain.ts +277 -0
- package/src/internal/reminder-runner.ts +756 -0
- package/src/internal/reminder-schedule.ts +106 -0
- package/src/internal/reminder-store.ts +145 -0
- package/src/internal/resolved-connections.ts +145 -0
- package/src/internal/review-comments.ts +268 -0
- package/src/internal/router.ts +145 -0
- package/src/internal/run-client.ts +320 -0
- package/src/internal/schedule-runner.ts +161 -0
- package/src/internal/sdk-runner.ts +315 -0
- package/src/internal/server.ts +1737 -0
- package/src/internal/session-engine.ts +1810 -0
- package/src/internal/session-store.ts +147 -0
- package/src/internal/session-urls.ts +40 -0
- package/src/internal/stream-progress.ts +254 -0
- package/src/internal/tool-result.ts +54 -0
- package/src/internal/trajectory.ts +306 -0
- package/src/internal/workspace.ts +223 -0
- package/src/reminders.ts +35 -0
- package/src/schedules.ts +37 -0
- package/src/skills.ts +27 -0
- package/src/tools.ts +127 -0
- package/src/types.ts +1848 -0
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal Connect-JSON client for the handful of `aiserver.v1.DashboardService`
|
|
3
|
+
* RPCs agent-serve needs — `GetMe`, `ListSandMcpTools`, `ExecuteSandMcpTool`,
|
|
4
|
+
* and the login-time key lifecycle (`CreateUserApiKey`, `ListUserApiKeys`,
|
|
5
|
+
* `RevokeUserApiKey`).
|
|
6
|
+
*
|
|
7
|
+
* Plain `fetch` POSTs with proto-JSON bodies and zod-validated responses:
|
|
8
|
+
* agent-serve is a published package and should not pull the generated
|
|
9
|
+
* proto tree in for a few unary calls.
|
|
10
|
+
*
|
|
11
|
+
* Auth: the client holds the account API key and exchanges it on demand for
|
|
12
|
+
* a short-lived access token (`POST /auth/exchange_user_api_key`, ~1h),
|
|
13
|
+
* cached until shortly before expiry and re-exchanged once on a 401.
|
|
14
|
+
*/
|
|
15
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
16
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
17
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
18
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
19
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
20
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
21
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
import { randomUUID } from "node:crypto";
|
|
25
|
+
import { z } from "zod";
|
|
26
|
+
const CLIENT_VERSION = "agent-serve-0.1.0";
|
|
27
|
+
const EXCHANGE_PATH = "/auth/exchange_user_api_key";
|
|
28
|
+
const SERVICE_PREFIX = "/aiserver.v1.DashboardService";
|
|
29
|
+
/** Re-exchange when the cached token is within this window of expiry. */
|
|
30
|
+
const TOKEN_EXPIRY_LEEWAY_MS = 5 * 60 * 1000;
|
|
31
|
+
/** Fallback token lifetime when the JWT `exp` claim cannot be parsed. */
|
|
32
|
+
const FALLBACK_TOKEN_LIFETIME_MS = 30 * 60 * 1000;
|
|
33
|
+
const LIST_TIMEOUT_MS = 60000;
|
|
34
|
+
/** Backend-executed tools call out to third-party servers; be generous. */
|
|
35
|
+
const EXECUTE_TIMEOUT_MS = 120000;
|
|
36
|
+
export class CursorBackendError extends Error {
|
|
37
|
+
constructor(message, status) {
|
|
38
|
+
super(message);
|
|
39
|
+
this.status = status;
|
|
40
|
+
this.name = "CursorBackendError";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// ============================================================================
|
|
44
|
+
// Response schemas (proto-JSON, camelCase; default-valued fields are omitted)
|
|
45
|
+
// ============================================================================
|
|
46
|
+
const getMeResponseSchema = z.object({
|
|
47
|
+
authId: z.string().optional(),
|
|
48
|
+
email: z.string().optional(),
|
|
49
|
+
firstName: z.string().optional(),
|
|
50
|
+
lastName: z.string().optional(),
|
|
51
|
+
teamId: z.number().optional(),
|
|
52
|
+
teamName: z.string().optional(),
|
|
53
|
+
});
|
|
54
|
+
const createUserApiKeyResponseSchema = z.object({
|
|
55
|
+
apiKey: z.string().min(1),
|
|
56
|
+
});
|
|
57
|
+
const mcpToolSchema = z.object({
|
|
58
|
+
name: z.string(),
|
|
59
|
+
providerIdentifier: z.string().optional(),
|
|
60
|
+
toolName: z.string().optional(),
|
|
61
|
+
description: z.string().optional(),
|
|
62
|
+
/** `google.protobuf.Value` — an arbitrary JSON Schema object. */
|
|
63
|
+
inputSchema: z.unknown().optional(),
|
|
64
|
+
});
|
|
65
|
+
const listSandMcpToolsResponseSchema = z.object({
|
|
66
|
+
servers: z
|
|
67
|
+
.array(z.object({
|
|
68
|
+
serverIdentifier: z.string(),
|
|
69
|
+
/** "connected" | "needsAuth" | "error" | "loading" */
|
|
70
|
+
status: z.string(),
|
|
71
|
+
tools: z.array(mcpToolSchema).optional(),
|
|
72
|
+
}))
|
|
73
|
+
.optional(),
|
|
74
|
+
});
|
|
75
|
+
/**
|
|
76
|
+
* Proto-JSON of `agent.v1.McpResult` (oneof → exactly one field set).
|
|
77
|
+
* Inner strings default to `""` because proto-JSON omits default-valued
|
|
78
|
+
* fields — `McpTextContent{text: ""}` arrives as `{"text": {}}`.
|
|
79
|
+
*/
|
|
80
|
+
const mcpResultSchema = z.object({
|
|
81
|
+
success: z
|
|
82
|
+
.object({
|
|
83
|
+
content: z
|
|
84
|
+
.array(z.object({
|
|
85
|
+
text: z.object({ text: z.string().default("") }).optional(),
|
|
86
|
+
image: z
|
|
87
|
+
.object({
|
|
88
|
+
data: z.string().default(""),
|
|
89
|
+
mimeType: z.string().optional(),
|
|
90
|
+
})
|
|
91
|
+
.optional(),
|
|
92
|
+
}))
|
|
93
|
+
.optional(),
|
|
94
|
+
isError: z.boolean().optional(),
|
|
95
|
+
structuredContent: z.record(z.unknown()).optional(),
|
|
96
|
+
})
|
|
97
|
+
.optional(),
|
|
98
|
+
error: z.object({ error: z.string().optional() }).optional(),
|
|
99
|
+
rejected: z.object({ reason: z.string().optional() }).optional(),
|
|
100
|
+
permissionDenied: z.object({ error: z.string().optional() }).optional(),
|
|
101
|
+
toolNotFound: z
|
|
102
|
+
.object({
|
|
103
|
+
name: z.string().optional(),
|
|
104
|
+
availableTools: z.array(z.string()).optional(),
|
|
105
|
+
})
|
|
106
|
+
.optional(),
|
|
107
|
+
serverNotFound: z
|
|
108
|
+
.object({
|
|
109
|
+
name: z.string().optional(),
|
|
110
|
+
availableServers: z.array(z.string()).optional(),
|
|
111
|
+
})
|
|
112
|
+
.optional(),
|
|
113
|
+
});
|
|
114
|
+
const executeResponseSchema = z.object({
|
|
115
|
+
result: mcpResultSchema.optional(),
|
|
116
|
+
});
|
|
117
|
+
// ============================================================================
|
|
118
|
+
// Shared request machinery (used by the client and the login-time mint)
|
|
119
|
+
// ============================================================================
|
|
120
|
+
/** One DashboardService Connect-JSON POST; auth is the caller's bearer. */
|
|
121
|
+
function dashboardRpc(args) {
|
|
122
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
var _a;
|
|
124
|
+
try {
|
|
125
|
+
return yield args.fetchImpl(`${args.backendUrl}${SERVICE_PREFIX}/${args.method}`, {
|
|
126
|
+
method: "POST",
|
|
127
|
+
headers: {
|
|
128
|
+
"content-type": "application/json",
|
|
129
|
+
authorization: `Bearer ${args.bearer}`,
|
|
130
|
+
"x-ghost-mode": "true",
|
|
131
|
+
"x-cursor-client-version": CLIENT_VERSION,
|
|
132
|
+
"x-cursor-client-type": "agent-serve",
|
|
133
|
+
"x-request-id": randomUUID(),
|
|
134
|
+
},
|
|
135
|
+
body: JSON.stringify((_a = args.body) !== null && _a !== void 0 ? _a : {}),
|
|
136
|
+
signal: AbortSignal.timeout(args.timeoutMs),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
throw new CursorBackendError(`Cursor backend request ${args.method} failed: ${describeError(error)}`);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/** Drain and parse an RPC response; maps non-2xx to a CursorBackendError. */
|
|
145
|
+
function parseRpcResponse(method, response) {
|
|
146
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
+
const text = yield response.text();
|
|
148
|
+
if (!response.ok) {
|
|
149
|
+
throw new CursorBackendError(`Cursor backend ${method} failed (${response.status}): ${connectErrorMessage(text)}`, response.status);
|
|
150
|
+
}
|
|
151
|
+
try {
|
|
152
|
+
return JSON.parse(text);
|
|
153
|
+
}
|
|
154
|
+
catch (_a) {
|
|
155
|
+
throw new CursorBackendError(`Cursor backend ${method} returned a non-JSON response.`);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
export class CursorBackendClient {
|
|
160
|
+
constructor(options) {
|
|
161
|
+
var _a, _b;
|
|
162
|
+
this.backendUrl = options.backendUrl.endsWith("/")
|
|
163
|
+
? options.backendUrl.slice(0, -1)
|
|
164
|
+
: options.backendUrl;
|
|
165
|
+
this.apiKey = options.apiKey;
|
|
166
|
+
this.logger = (_a = options.logger) !== null && _a !== void 0 ? _a : (() => { });
|
|
167
|
+
this.fetchImpl = (_b = options.fetchImpl) !== null && _b !== void 0 ? _b : fetch;
|
|
168
|
+
}
|
|
169
|
+
/** Who this API key acts as. */
|
|
170
|
+
getMe() {
|
|
171
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
172
|
+
return getMeResponseSchema.parse(yield this.rpc("GetMe", {}));
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* The account's MCP connectors with live status and backend-prefixed tool
|
|
177
|
+
* definitions. `serverIdentifiers` restricts discovery (empty = all
|
|
178
|
+
* HTTP/SSE servers on the account).
|
|
179
|
+
*/
|
|
180
|
+
listAccountMcpTools(serverIdentifiers) {
|
|
181
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
182
|
+
var _a;
|
|
183
|
+
const raw = yield this.rpc("ListSandMcpTools", { serverIdentifiers: [...serverIdentifiers] }, LIST_TIMEOUT_MS);
|
|
184
|
+
const parsed = listSandMcpToolsResponseSchema.parse(raw);
|
|
185
|
+
return ((_a = parsed.servers) !== null && _a !== void 0 ? _a : []).map((server) => { var _a; return ({
|
|
186
|
+
serverIdentifier: server.serverIdentifier,
|
|
187
|
+
status: server.status,
|
|
188
|
+
tools: ((_a = server.tools) !== null && _a !== void 0 ? _a : []).map((tool) => { var _a; return ({
|
|
189
|
+
name: tool.name,
|
|
190
|
+
description: (_a = tool.description) !== null && _a !== void 0 ? _a : "",
|
|
191
|
+
inputSchema: normalizeInputSchema(tool.inputSchema),
|
|
192
|
+
}); }),
|
|
193
|
+
}); });
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Execute one connector tool **on the Cursor backend** with the account's
|
|
198
|
+
* stored OAuth credentials. `toolName` is the fully-qualified name from
|
|
199
|
+
* {@link listAccountMcpTools}.
|
|
200
|
+
*/
|
|
201
|
+
executeAccountMcpTool(args) {
|
|
202
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
203
|
+
var _a;
|
|
204
|
+
const raw = yield this.rpc("ExecuteSandMcpTool", {
|
|
205
|
+
serverIdentifier: args.serverIdentifier,
|
|
206
|
+
toolName: args.toolName,
|
|
207
|
+
args: args.args,
|
|
208
|
+
toolCallId: randomUUID(),
|
|
209
|
+
}, EXECUTE_TIMEOUT_MS);
|
|
210
|
+
const parsed = executeResponseSchema.parse(raw);
|
|
211
|
+
return toCallResult((_a = parsed.result) !== null && _a !== void 0 ? _a : {});
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
rpc(method_1, body_1) {
|
|
215
|
+
return __awaiter(this, arguments, void 0, function* (method, body, timeoutMs = LIST_TIMEOUT_MS) {
|
|
216
|
+
var _a, _b;
|
|
217
|
+
const bearer = yield this.getAccessToken();
|
|
218
|
+
const first = yield dashboardRpc({
|
|
219
|
+
fetchImpl: this.fetchImpl,
|
|
220
|
+
backendUrl: this.backendUrl,
|
|
221
|
+
method,
|
|
222
|
+
bearer,
|
|
223
|
+
body,
|
|
224
|
+
timeoutMs,
|
|
225
|
+
});
|
|
226
|
+
if (first.status !== 401) {
|
|
227
|
+
return parseRpcResponse(method, first);
|
|
228
|
+
}
|
|
229
|
+
// The token aged out server-side. Drain the rejected body (keeps the
|
|
230
|
+
// connection reusable), drop the token — unless a concurrent retry
|
|
231
|
+
// already minted a newer one — and retry once.
|
|
232
|
+
yield drainResponseBody(first);
|
|
233
|
+
if (((_a = this.token) === null || _a === void 0 ? void 0 : _a.value) === bearer) {
|
|
234
|
+
this.token = undefined;
|
|
235
|
+
}
|
|
236
|
+
const retryBearer = yield this.getAccessToken();
|
|
237
|
+
const second = yield dashboardRpc({
|
|
238
|
+
fetchImpl: this.fetchImpl,
|
|
239
|
+
backendUrl: this.backendUrl,
|
|
240
|
+
method,
|
|
241
|
+
bearer: retryBearer,
|
|
242
|
+
body,
|
|
243
|
+
timeoutMs,
|
|
244
|
+
});
|
|
245
|
+
if (second.status === 401 && ((_b = this.token) === null || _b === void 0 ? void 0 : _b.value) === retryBearer) {
|
|
246
|
+
// The freshly minted token was rejected too; do not keep serving it.
|
|
247
|
+
this.token = undefined;
|
|
248
|
+
}
|
|
249
|
+
return parseRpcResponse(method, second);
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
getAccessToken() {
|
|
253
|
+
if (this.token !== undefined &&
|
|
254
|
+
Date.now() < this.token.expiresAtMs - TOKEN_EXPIRY_LEEWAY_MS) {
|
|
255
|
+
return Promise.resolve(this.token.value);
|
|
256
|
+
}
|
|
257
|
+
// Single-flight: concurrent tool calls share one exchange.
|
|
258
|
+
if (this.tokenExchange === undefined) {
|
|
259
|
+
this.tokenExchange = this.exchangeApiKey().finally(() => {
|
|
260
|
+
this.tokenExchange = undefined;
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
return this.tokenExchange;
|
|
264
|
+
}
|
|
265
|
+
exchangeApiKey() {
|
|
266
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
267
|
+
let response;
|
|
268
|
+
try {
|
|
269
|
+
response = yield this.fetchImpl(`${this.backendUrl}${EXCHANGE_PATH}`, {
|
|
270
|
+
method: "POST",
|
|
271
|
+
headers: {
|
|
272
|
+
"content-type": "application/json",
|
|
273
|
+
authorization: `Bearer ${this.apiKey}`,
|
|
274
|
+
},
|
|
275
|
+
body: "{}",
|
|
276
|
+
signal: AbortSignal.timeout(30000),
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
throw new CursorBackendError(`Could not reach the Cursor backend at ${this.backendUrl}: ${describeError(error)}`);
|
|
281
|
+
}
|
|
282
|
+
const text = yield response.text();
|
|
283
|
+
if (!response.ok) {
|
|
284
|
+
throw new CursorBackendError(response.status === 401
|
|
285
|
+
? "The Cursor API key was rejected. Run `agent-serve login` again or update CURSOR_API_KEY."
|
|
286
|
+
: `Cursor API key exchange failed (${response.status}).`, response.status);
|
|
287
|
+
}
|
|
288
|
+
const body = accessTokenResponseSchema.safeParse(safeJsonParse(text));
|
|
289
|
+
if (!body.success || body.data.accessToken === "") {
|
|
290
|
+
throw new CursorBackendError("Cursor API key exchange returned no access token.");
|
|
291
|
+
}
|
|
292
|
+
this.token = {
|
|
293
|
+
value: body.data.accessToken,
|
|
294
|
+
expiresAtMs: jwtExpiryMs(body.data.accessToken),
|
|
295
|
+
};
|
|
296
|
+
this.logger("[agent-serve] cursor account: minted a fresh access token");
|
|
297
|
+
return body.data.accessToken;
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Mint a named user API key from a short-lived login session token. Used
|
|
303
|
+
* exactly once per `agent-serve login`; the session token is then discarded.
|
|
304
|
+
*/
|
|
305
|
+
export function createUserApiKeyWithSessionToken(args) {
|
|
306
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
307
|
+
var _a;
|
|
308
|
+
const response = yield dashboardRpc({
|
|
309
|
+
fetchImpl: (_a = args.fetchImpl) !== null && _a !== void 0 ? _a : fetch,
|
|
310
|
+
backendUrl: args.backendUrl.endsWith("/")
|
|
311
|
+
? args.backendUrl.slice(0, -1)
|
|
312
|
+
: args.backendUrl,
|
|
313
|
+
method: "CreateUserApiKey",
|
|
314
|
+
bearer: args.sessionToken,
|
|
315
|
+
body: { name: args.keyName },
|
|
316
|
+
timeoutMs: 30000,
|
|
317
|
+
});
|
|
318
|
+
const raw = yield parseRpcResponse("CreateUserApiKey", response);
|
|
319
|
+
return createUserApiKeyResponseSchema.parse(raw).apiKey;
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
const API_KEY_PREFIX = "crsr_";
|
|
323
|
+
/** Matches dashboard `maskApiKey` (`crsr_...abcd`). */
|
|
324
|
+
function maskApiKey(apiKey) {
|
|
325
|
+
return `${API_KEY_PREFIX}...${apiKey.slice(-4)}`;
|
|
326
|
+
}
|
|
327
|
+
const listUserApiKeysResponseSchema = z.object({
|
|
328
|
+
apiKeys: z
|
|
329
|
+
.array(z.object({
|
|
330
|
+
id: z.number(),
|
|
331
|
+
name: z.string(),
|
|
332
|
+
maskedKey: z.string().optional(),
|
|
333
|
+
}))
|
|
334
|
+
.optional(),
|
|
335
|
+
});
|
|
336
|
+
/**
|
|
337
|
+
* Best-effort cleanup when `login` mints a key but fails before storing it,
|
|
338
|
+
* authenticated with the browser session token that minted it. The key is
|
|
339
|
+
* identified by its masked suffix in `ListUserApiKeys` — never by name alone,
|
|
340
|
+
* so replica lag after `CreateUserApiKey` can only skip the cleanup, not
|
|
341
|
+
* revoke an older same-named key.
|
|
342
|
+
*/
|
|
343
|
+
export function revokeMintedUserApiKey(args) {
|
|
344
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
345
|
+
var _a, _b;
|
|
346
|
+
const fetchImpl = (_a = args.fetchImpl) !== null && _a !== void 0 ? _a : fetch;
|
|
347
|
+
const backendUrl = args.backendUrl.endsWith("/")
|
|
348
|
+
? args.backendUrl.slice(0, -1)
|
|
349
|
+
: args.backendUrl;
|
|
350
|
+
const listResponse = yield dashboardRpc({
|
|
351
|
+
fetchImpl,
|
|
352
|
+
backendUrl,
|
|
353
|
+
method: "ListUserApiKeys",
|
|
354
|
+
bearer: args.sessionToken,
|
|
355
|
+
body: {},
|
|
356
|
+
timeoutMs: 30000,
|
|
357
|
+
});
|
|
358
|
+
const listed = listUserApiKeysResponseSchema.parse(yield parseRpcResponse("ListUserApiKeys", listResponse));
|
|
359
|
+
const masked = maskApiKey(args.apiKey);
|
|
360
|
+
const match = ((_b = listed.apiKeys) !== null && _b !== void 0 ? _b : []).find((key) => key.name === args.keyName && key.maskedKey === masked);
|
|
361
|
+
if (match === undefined) {
|
|
362
|
+
// CreateUserApiKey writes the primary while ListUserApiKeys may read a
|
|
363
|
+
// lagging replica — skip rather than touch any other key.
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
const revokeResponse = yield dashboardRpc({
|
|
367
|
+
fetchImpl,
|
|
368
|
+
backendUrl,
|
|
369
|
+
method: "RevokeUserApiKey",
|
|
370
|
+
bearer: args.sessionToken,
|
|
371
|
+
body: { id: match.id },
|
|
372
|
+
timeoutMs: 30000,
|
|
373
|
+
});
|
|
374
|
+
yield drainResponseBody(revokeResponse);
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
// ============================================================================
|
|
378
|
+
// Helpers
|
|
379
|
+
// ============================================================================
|
|
380
|
+
const accessTokenResponseSchema = z.object({ accessToken: z.string() });
|
|
381
|
+
function safeJsonParse(text) {
|
|
382
|
+
try {
|
|
383
|
+
return JSON.parse(text);
|
|
384
|
+
}
|
|
385
|
+
catch (_a) {
|
|
386
|
+
return undefined;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
function normalizeInputSchema(schema) {
|
|
390
|
+
if (typeof schema === "object" && schema !== null && !Array.isArray(schema)) {
|
|
391
|
+
return schema;
|
|
392
|
+
}
|
|
393
|
+
return { type: "object", properties: {} };
|
|
394
|
+
}
|
|
395
|
+
function toCallResult(result) {
|
|
396
|
+
var _a;
|
|
397
|
+
if (result.success !== undefined) {
|
|
398
|
+
const content = [];
|
|
399
|
+
for (const item of (_a = result.success.content) !== null && _a !== void 0 ? _a : []) {
|
|
400
|
+
if (item.text !== undefined) {
|
|
401
|
+
content.push({ type: "text", text: item.text.text });
|
|
402
|
+
}
|
|
403
|
+
else if (item.image !== undefined) {
|
|
404
|
+
content.push(Object.assign({ type: "image", data: item.image.data }, (item.image.mimeType === undefined
|
|
405
|
+
? {}
|
|
406
|
+
: { mimeType: item.image.mimeType })));
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
return Object.assign({ content, isError: result.success.isError === true }, (result.success.structuredContent === undefined
|
|
410
|
+
? {}
|
|
411
|
+
: { structuredContent: result.success.structuredContent }));
|
|
412
|
+
}
|
|
413
|
+
return {
|
|
414
|
+
content: [{ type: "text", text: describeFailure(result) }],
|
|
415
|
+
isError: true,
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
function describeFailure(result) {
|
|
419
|
+
var _a, _b, _c, _d, _e, _f;
|
|
420
|
+
if (result.error !== undefined) {
|
|
421
|
+
return (_a = result.error.error) !== null && _a !== void 0 ? _a : "The tool call failed.";
|
|
422
|
+
}
|
|
423
|
+
if (result.permissionDenied !== undefined) {
|
|
424
|
+
return (_b = result.permissionDenied.error) !== null && _b !== void 0 ? _b : "Permission denied.";
|
|
425
|
+
}
|
|
426
|
+
if (result.rejected !== undefined) {
|
|
427
|
+
return `The tool call was rejected${result.rejected.reason === undefined ? "" : `: ${result.rejected.reason}`}.`;
|
|
428
|
+
}
|
|
429
|
+
if (result.toolNotFound !== undefined) {
|
|
430
|
+
return `Unknown tool "${(_c = result.toolNotFound.name) !== null && _c !== void 0 ? _c : ""}". Available: ${((_d = result.toolNotFound.availableTools) !== null && _d !== void 0 ? _d : []).join(", ") || "(none)"}.`;
|
|
431
|
+
}
|
|
432
|
+
if (result.serverNotFound !== undefined) {
|
|
433
|
+
return `Unknown MCP server "${(_e = result.serverNotFound.name) !== null && _e !== void 0 ? _e : ""}". Available: ${((_f = result.serverNotFound.availableServers) !== null && _f !== void 0 ? _f : []).join(", ") || "(none)"}.`;
|
|
434
|
+
}
|
|
435
|
+
return "The tool call returned no result.";
|
|
436
|
+
}
|
|
437
|
+
/** Best-effort human-readable message from a Connect error JSON body. */
|
|
438
|
+
function connectErrorMessage(bodyText) {
|
|
439
|
+
const parsed = safeJsonParse(bodyText);
|
|
440
|
+
if (typeof parsed === "object" &&
|
|
441
|
+
parsed !== null &&
|
|
442
|
+
typeof parsed.message === "string" &&
|
|
443
|
+
parsed.message !== "") {
|
|
444
|
+
return parsed.message;
|
|
445
|
+
}
|
|
446
|
+
return bodyText.slice(0, 300) || "(empty response body)";
|
|
447
|
+
}
|
|
448
|
+
function jwtExpiryMs(token) {
|
|
449
|
+
try {
|
|
450
|
+
const payload = token.split(".")[1];
|
|
451
|
+
if (payload === undefined) {
|
|
452
|
+
throw new Error("not a JWT");
|
|
453
|
+
}
|
|
454
|
+
const claims = JSON.parse(Buffer.from(payload, "base64url").toString("utf8"));
|
|
455
|
+
if (typeof claims.exp === "number") {
|
|
456
|
+
return claims.exp * 1000;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
catch (_a) {
|
|
460
|
+
// Opaque token — assume a conservative lifetime.
|
|
461
|
+
}
|
|
462
|
+
return Date.now() + FALLBACK_TOKEN_LIFETIME_MS;
|
|
463
|
+
}
|
|
464
|
+
function describeError(error) {
|
|
465
|
+
return error instanceof Error ? error.message : String(error);
|
|
466
|
+
}
|
|
467
|
+
/** Release undici/fetch connection slots on responses we will not parse. */
|
|
468
|
+
function drainResponseBody(response) {
|
|
469
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
470
|
+
try {
|
|
471
|
+
yield response.arrayBuffer();
|
|
472
|
+
}
|
|
473
|
+
catch (_a) {
|
|
474
|
+
// Best-effort; the socket may already be closed.
|
|
475
|
+
}
|
|
476
|
+
});
|
|
477
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cursor account credentials for the agent-serve host.
|
|
3
|
+
*
|
|
4
|
+
* Exactly one kind of secret exists at runtime: a **personal Cursor user API
|
|
5
|
+
* key**. Two ways to obtain it, one code path after that:
|
|
6
|
+
*
|
|
7
|
+
* - `agent-serve login` runs the same PKCE browser flow as `cursor-agent`
|
|
8
|
+
* and Sand, then uses the short-lived session once to mint a named,
|
|
9
|
+
* dashboard-revocable user API key — only the key is stored.
|
|
10
|
+
* - `CURSOR_API_KEY` (or `serve({ apiKey })`) wins over the stored key, so
|
|
11
|
+
* CI and hosted deployments stay env-driven.
|
|
12
|
+
*
|
|
13
|
+
* There is deliberately no session-token storage, refresh-token rotation, or
|
|
14
|
+
* cross-tool credential sharing here: short-lived access tokens are minted
|
|
15
|
+
* on demand from the API key (see `backend-client.ts`).
|
|
16
|
+
*/
|
|
17
|
+
import { z } from "zod";
|
|
18
|
+
export declare const DEFAULT_CURSOR_BACKEND_URL = "https://api2.cursor.sh";
|
|
19
|
+
/** Backend API base URL (`CURSOR_API_BASE_URL` override for local dev). */
|
|
20
|
+
export declare function cursorBackendUrl(): string;
|
|
21
|
+
/** Website base URL for the login deep link (`CURSOR_WEBSITE_URL` override). */
|
|
22
|
+
export declare function cursorWebsiteUrl(): string;
|
|
23
|
+
declare const storedCredentialsSchema: z.ZodObject<{
|
|
24
|
+
backendUrl: z.ZodString;
|
|
25
|
+
apiKey: z.ZodString;
|
|
26
|
+
}, "strip">;
|
|
27
|
+
export type StoredCredentials = z.infer<typeof storedCredentialsSchema>;
|
|
28
|
+
/**
|
|
29
|
+
* `~/.config/agent-serve/credentials.json` (0600), honoring
|
|
30
|
+
* `XDG_CONFIG_HOME`. `AGENT_SERVE_CONFIG_DIR` pins the directory outright
|
|
31
|
+
* (tests, containers).
|
|
32
|
+
*/
|
|
33
|
+
export declare function credentialsFilePath(): string;
|
|
34
|
+
export declare function readStoredCredentials(): Promise<StoredCredentials | undefined>;
|
|
35
|
+
export declare function writeStoredCredentials(credentials: StoredCredentials): Promise<void>;
|
|
36
|
+
export declare function clearStoredCredentials(): Promise<boolean>;
|
|
37
|
+
export type ApiKeySource = "option" | "env" | "login";
|
|
38
|
+
export interface ResolvedApiKey {
|
|
39
|
+
apiKey: string;
|
|
40
|
+
source: ApiKeySource;
|
|
41
|
+
backendUrl: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Resolve the account API key for `backendUrl` (defaults to the active
|
|
45
|
+
* backend): explicit option → `CURSOR_API_KEY` → stored login. A stored key
|
|
46
|
+
* minted against a different backend is ignored rather than sent to the
|
|
47
|
+
* wrong host.
|
|
48
|
+
*/
|
|
49
|
+
export declare function resolveApiKey(options?: {
|
|
50
|
+
apiKey?: string;
|
|
51
|
+
backendUrl?: string;
|
|
52
|
+
}): Promise<ResolvedApiKey | undefined>;
|
|
53
|
+
/** One-line hint for "no credentials" errors, shared across surfaces. */
|
|
54
|
+
export declare const SIGN_IN_HINT: string;
|
|
55
|
+
export interface LoginStart {
|
|
56
|
+
/** URL the user opens in a browser to approve the login. */
|
|
57
|
+
loginUrl: string;
|
|
58
|
+
uuid: string;
|
|
59
|
+
verifier: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Build the `/loginDeepControl` deep link and its PKCE material. The portal
|
|
63
|
+
* completes the login and the backend holds the resulting session until
|
|
64
|
+
* {@link pollForLoginTokens} picks it up with the verifier.
|
|
65
|
+
*/
|
|
66
|
+
export declare function startBrowserLogin(): LoginStart;
|
|
67
|
+
/**
|
|
68
|
+
* Why the poll stopped. Distinct cases because collapsing them into
|
|
69
|
+
* "timed out or was cancelled" turned an unsupported-verb 404 into an
|
|
70
|
+
* unfalsifiable "login is slow" report.
|
|
71
|
+
*/
|
|
72
|
+
export type LoginPollResult = {
|
|
73
|
+
status: "signed_in";
|
|
74
|
+
accessToken: string;
|
|
75
|
+
} | {
|
|
76
|
+
status: "cancelled";
|
|
77
|
+
} | {
|
|
78
|
+
status: "timed_out";
|
|
79
|
+
} | {
|
|
80
|
+
status: "failed";
|
|
81
|
+
message: string;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Poll `/auth/poll` until the browser login completes.
|
|
85
|
+
*
|
|
86
|
+
* **POST, with the verifier in the JSON body.** The verifier is redeemable:
|
|
87
|
+
* anyone holding it (plus the uuid) can complete the login and mint a durable
|
|
88
|
+
* user API key, so it must not reach a URL — not the backend's access log, not
|
|
89
|
+
* a proxy's request log, not a terminal. `POST /auth/poll` exists for exactly
|
|
90
|
+
* this reason.
|
|
91
|
+
*
|
|
92
|
+
* A backend that predates that route answers POST with a route-not-found 404.
|
|
93
|
+
* Those get one sticky fallback to `GET /auth/poll?uuid=…&verifier=…` — the
|
|
94
|
+
* shape the vscode client and Sand already use — so the login still works
|
|
95
|
+
* while the backend catches up. The fallback puts the verifier in the query
|
|
96
|
+
* string, which is the exposure POST was added to remove, so it warns; it
|
|
97
|
+
* disappears on its own once the backend serves POST.
|
|
98
|
+
*/
|
|
99
|
+
export declare function pollForLoginTokens(args: {
|
|
100
|
+
uuid: string;
|
|
101
|
+
verifier: string;
|
|
102
|
+
backendUrl?: string;
|
|
103
|
+
signal?: AbortSignal;
|
|
104
|
+
/** Notified once if the backend forces the GET fallback. */
|
|
105
|
+
logger?: (line: string) => void;
|
|
106
|
+
/** Test seam; defaults to global fetch. */
|
|
107
|
+
fetchImpl?: typeof fetch;
|
|
108
|
+
/** Test seam; defaults to 150 (~24 minutes with the backoff below). */
|
|
109
|
+
maxAttempts?: number;
|
|
110
|
+
}): Promise<LoginPollResult>;
|
|
111
|
+
export {};
|
|
112
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,0BAA0B,2BAA2B,CAAC;AAGnE,2EAA2E;AAC3E,wBAAgB,gBAAgB,IAAI,MAAM,CAIzC;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,IAAI,MAAM,CAIzC;AAUD,QAAA,MAAM,uBAAuB,EAAE,CAAC,CAAC,SAAS,CACxC;IAAE,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAA;CAAE,EAChD,OAAO,CAKP,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAQ5C;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CACpD,iBAAiB,GAAG,SAAS,CAC9B,CAsBA;AAED,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,iBAAiB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO/D;AAMD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CActC;AAED,yEAAyE;AACzE,eAAO,MAAM,YAAY,EAAE,MAA8F,CAAC;AAQ1H,MAAM,WAAW,UAAU;IACzB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,UAAU,CAU9C;AAKD;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmG3B"}
|