@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,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps the Cursor harness's streaming delta vocabulary
|
|
3
|
+
* (`InteractionUpdate`) onto the framework's channel event vocabulary
|
|
4
|
+
* (`SessionEvent` payloads). One mapper instance covers one turn.
|
|
5
|
+
*/
|
|
6
|
+
const CUSTOM_TOOLS_PROVIDER = "custom-user-tools";
|
|
7
|
+
export class TurnEventMapper {
|
|
8
|
+
constructor(emit) {
|
|
9
|
+
this.emit = emit;
|
|
10
|
+
this.textAccumulator = "";
|
|
11
|
+
this.reasoningAccumulator = "";
|
|
12
|
+
}
|
|
13
|
+
/** Per-turn token usage summed across model steps. */
|
|
14
|
+
get usage() {
|
|
15
|
+
return this.usageTotal;
|
|
16
|
+
}
|
|
17
|
+
/** The final assistant text block of the turn, when one was produced. */
|
|
18
|
+
get finalText() {
|
|
19
|
+
return this.lastAssistantText;
|
|
20
|
+
}
|
|
21
|
+
/** Conversation summary produced by the harness (used as session title). */
|
|
22
|
+
get title() {
|
|
23
|
+
return this.summaryTitle;
|
|
24
|
+
}
|
|
25
|
+
handleUpdate(update) {
|
|
26
|
+
switch (update.type) {
|
|
27
|
+
case "text-delta": {
|
|
28
|
+
this.textAccumulator += update.text;
|
|
29
|
+
this.emit({
|
|
30
|
+
type: "message.appended",
|
|
31
|
+
data: { delta: update.text, text: this.textAccumulator },
|
|
32
|
+
});
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
case "thinking-delta": {
|
|
36
|
+
this.reasoningAccumulator += update.text;
|
|
37
|
+
this.emit({
|
|
38
|
+
type: "reasoning.appended",
|
|
39
|
+
data: { delta: update.text, text: this.reasoningAccumulator },
|
|
40
|
+
});
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
case "thinking-completed": {
|
|
44
|
+
if (this.reasoningAccumulator !== "") {
|
|
45
|
+
this.reasoningAccumulator = "";
|
|
46
|
+
}
|
|
47
|
+
this.emit({
|
|
48
|
+
type: "reasoning.completed",
|
|
49
|
+
data: { durationMs: update.thinkingDurationMs },
|
|
50
|
+
});
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
case "tool-call-started": {
|
|
54
|
+
this.flushAssistantText("tool_call");
|
|
55
|
+
const description = describeToolCall(update.toolCall);
|
|
56
|
+
this.emit({
|
|
57
|
+
type: "actions.requested",
|
|
58
|
+
data: {
|
|
59
|
+
calls: [
|
|
60
|
+
{
|
|
61
|
+
callId: update.callId,
|
|
62
|
+
toolName: description.toolName,
|
|
63
|
+
args: description.args,
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
if (description.subagent !== undefined) {
|
|
69
|
+
this.emit({
|
|
70
|
+
type: "subagent.called",
|
|
71
|
+
data: {
|
|
72
|
+
callId: update.callId,
|
|
73
|
+
name: description.subagent.name,
|
|
74
|
+
description: description.subagent.description,
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
case "tool-call-completed": {
|
|
81
|
+
const description = describeToolCall(update.toolCall);
|
|
82
|
+
const result = describeToolResult(update.toolCall);
|
|
83
|
+
this.emit({
|
|
84
|
+
type: "action.result",
|
|
85
|
+
data: {
|
|
86
|
+
callId: update.callId,
|
|
87
|
+
toolName: description.toolName,
|
|
88
|
+
output: result.output,
|
|
89
|
+
isError: result.isError,
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
if (description.subagent !== undefined) {
|
|
93
|
+
this.emit({
|
|
94
|
+
type: "subagent.completed",
|
|
95
|
+
data: { callId: update.callId, name: description.subagent.name },
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
case "step-started": {
|
|
101
|
+
this.emit({ type: "step.started", data: { stepId: update.stepId } });
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
case "step-completed": {
|
|
105
|
+
this.emit({
|
|
106
|
+
type: "step.completed",
|
|
107
|
+
data: { stepId: update.stepId, durationMs: update.stepDurationMs },
|
|
108
|
+
});
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
case "turn-ended": {
|
|
112
|
+
if (update.usage !== undefined) {
|
|
113
|
+
this.usageTotal = addUsage(this.usageTotal, update.usage);
|
|
114
|
+
}
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
case "summary": {
|
|
118
|
+
this.summaryTitle = update.summary;
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
case "user-message-appended":
|
|
122
|
+
case "partial-tool-call":
|
|
123
|
+
case "token-delta":
|
|
124
|
+
case "summary-started":
|
|
125
|
+
case "summary-completed":
|
|
126
|
+
case "shell-output-delta":
|
|
127
|
+
return;
|
|
128
|
+
default: {
|
|
129
|
+
// Future harness update types are ignored rather than fatal.
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/** Close out the turn: finalize any open assistant text block. */
|
|
135
|
+
finish() {
|
|
136
|
+
this.flushAssistantText("stop");
|
|
137
|
+
}
|
|
138
|
+
flushAssistantText(finishReason) {
|
|
139
|
+
if (this.textAccumulator === "") {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const text = this.textAccumulator;
|
|
143
|
+
this.textAccumulator = "";
|
|
144
|
+
this.lastAssistantText = text;
|
|
145
|
+
this.emit({
|
|
146
|
+
type: "message.completed",
|
|
147
|
+
data: { text, finishReason },
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Human-meaningful tool identity for stream events. In-process tools calls
|
|
153
|
+
* arrive as MCP calls against the synthetic `custom-user-tools` server; they
|
|
154
|
+
* surface under the customer's bare tool name.
|
|
155
|
+
*/
|
|
156
|
+
export function describeToolCall(toolCall) {
|
|
157
|
+
var _a;
|
|
158
|
+
switch (toolCall.type) {
|
|
159
|
+
case "mcp": {
|
|
160
|
+
const providerIdentifier = toolCall.args.providerIdentifier;
|
|
161
|
+
const toolName = toolCall.args.toolName;
|
|
162
|
+
if (providerIdentifier === CUSTOM_TOOLS_PROVIDER) {
|
|
163
|
+
return {
|
|
164
|
+
toolName: toolName !== null && toolName !== void 0 ? toolName : "custom-tool",
|
|
165
|
+
args: toolCall.args.args,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
const bareName = toolName !== null && toolName !== void 0 ? toolName : "tool";
|
|
169
|
+
return {
|
|
170
|
+
toolName: providerIdentifier === undefined || providerIdentifier === ""
|
|
171
|
+
? bareName
|
|
172
|
+
: `${providerIdentifier}:${bareName}`,
|
|
173
|
+
args: toolCall.args.args,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
case "task": {
|
|
177
|
+
const subagentType = toolCall.args.subagentType;
|
|
178
|
+
const subagentName = (_a = subagentType === null || subagentType === void 0 ? void 0 : subagentType.name) !== null && _a !== void 0 ? _a : subagentType === null || subagentType === void 0 ? void 0 : subagentType.kind;
|
|
179
|
+
return {
|
|
180
|
+
toolName: "task",
|
|
181
|
+
args: Object.assign({ description: toolCall.args.description }, (subagentName === undefined ? {} : { subagentType: subagentName })),
|
|
182
|
+
subagent: Object.assign(Object.assign({}, (subagentName === undefined ? {} : { name: subagentName })), { description: toolCall.args.description }),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
default: {
|
|
186
|
+
return {
|
|
187
|
+
toolName: toolCall.type,
|
|
188
|
+
args: toolCall.args,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
export function describeToolResult(toolCall) {
|
|
194
|
+
var _a;
|
|
195
|
+
const result = toolCall.result;
|
|
196
|
+
if (result === undefined || result === null) {
|
|
197
|
+
return { isError: false };
|
|
198
|
+
}
|
|
199
|
+
if (result.status === "error") {
|
|
200
|
+
return { output: result.error, isError: true };
|
|
201
|
+
}
|
|
202
|
+
if (toolCall.type === "mcp") {
|
|
203
|
+
const value = result.value;
|
|
204
|
+
const text = ((_a = value.content) !== null && _a !== void 0 ? _a : [])
|
|
205
|
+
.map((item) => { var _a; var _b; return (_b = (_a = item.text) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : ""; })
|
|
206
|
+
.filter((part) => part !== "")
|
|
207
|
+
.join("\n");
|
|
208
|
+
return {
|
|
209
|
+
output: text === "" ? value : text,
|
|
210
|
+
isError: value.isError === true,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
return { output: result.value, isError: false };
|
|
214
|
+
}
|
|
215
|
+
function addUsage(total, usage) {
|
|
216
|
+
var _a, _b;
|
|
217
|
+
if (total === undefined) {
|
|
218
|
+
return Object.assign({}, usage);
|
|
219
|
+
}
|
|
220
|
+
return Object.assign({ inputTokens: total.inputTokens + usage.inputTokens, outputTokens: total.outputTokens + usage.outputTokens, cacheReadTokens: total.cacheReadTokens + usage.cacheReadTokens, cacheWriteTokens: total.cacheWriteTokens + usage.cacheWriteTokens }, (total.reasoningTokens !== undefined ||
|
|
221
|
+
usage.reasoningTokens !== undefined
|
|
222
|
+
? {
|
|
223
|
+
reasoningTokens: ((_a = total.reasoningTokens) !== null && _a !== void 0 ? _a : 0) + ((_b = usage.reasoningTokens) !== null && _b !== void 0 ? _b : 0),
|
|
224
|
+
}
|
|
225
|
+
: {}));
|
|
226
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal frontmatter parser. Supports the flat `key: value` scalar subset
|
|
3
|
+
* used by authored markdown (skill descriptions, schedule cron expressions)
|
|
4
|
+
* without pulling in a YAML dependency.
|
|
5
|
+
*/
|
|
6
|
+
export interface ParsedFrontmatter {
|
|
7
|
+
data: Record<string, string>;
|
|
8
|
+
body: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function parseFrontmatter(source: string): ParsedFrontmatter;
|
|
11
|
+
export declare function serializeFrontmatter(data: Record<string, string>): string;
|
|
12
|
+
//# sourceMappingURL=frontmatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/internal/frontmatter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAID,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAsClE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAKzE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal frontmatter parser. Supports the flat `key: value` scalar subset
|
|
3
|
+
* used by authored markdown (skill descriptions, schedule cron expressions)
|
|
4
|
+
* without pulling in a YAML dependency.
|
|
5
|
+
*/
|
|
6
|
+
const FRONTMATTER_OPEN = /^---\s*$/;
|
|
7
|
+
export function parseFrontmatter(source) {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
const lines = source.split(/\r?\n/);
|
|
10
|
+
if (lines.length === 0 || !FRONTMATTER_OPEN.test((_a = lines[0]) !== null && _a !== void 0 ? _a : "")) {
|
|
11
|
+
return { data: {}, body: source };
|
|
12
|
+
}
|
|
13
|
+
let closeIndex = -1;
|
|
14
|
+
for (let i = 1; i < lines.length; i++) {
|
|
15
|
+
if (FRONTMATTER_OPEN.test((_b = lines[i]) !== null && _b !== void 0 ? _b : "")) {
|
|
16
|
+
closeIndex = i;
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (closeIndex === -1) {
|
|
21
|
+
return { data: {}, body: source };
|
|
22
|
+
}
|
|
23
|
+
const data = {};
|
|
24
|
+
for (const line of lines.slice(1, closeIndex)) {
|
|
25
|
+
if (line.trim() === "" || line.trim().startsWith("#")) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const separator = line.indexOf(":");
|
|
29
|
+
if (separator === -1) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const key = line.slice(0, separator).trim();
|
|
33
|
+
if (key === "") {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
data[key] = unquote(line.slice(separator + 1).trim());
|
|
37
|
+
}
|
|
38
|
+
const body = lines
|
|
39
|
+
.slice(closeIndex + 1)
|
|
40
|
+
.join("\n")
|
|
41
|
+
.replace(/^\n+/, "");
|
|
42
|
+
return { data, body };
|
|
43
|
+
}
|
|
44
|
+
export function serializeFrontmatter(data) {
|
|
45
|
+
const lines = Object.entries(data).map(([key, value]) => `${key}: ${quoteIfNeeded(value)}`);
|
|
46
|
+
return `---\n${lines.join("\n")}\n---\n`;
|
|
47
|
+
}
|
|
48
|
+
function unquote(value) {
|
|
49
|
+
if (value.length >= 2 &&
|
|
50
|
+
((value.startsWith('"') && value.endsWith('"')) ||
|
|
51
|
+
(value.startsWith("'") && value.endsWith("'")))) {
|
|
52
|
+
return value.slice(1, -1);
|
|
53
|
+
}
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
function quoteIfNeeded(value) {
|
|
57
|
+
if (/[:#'"\n]/.test(value)) {
|
|
58
|
+
return JSON.stringify(value);
|
|
59
|
+
}
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local fan-out proxy for `agent-serve github forward`.
|
|
3
|
+
*
|
|
4
|
+
* `gh webhook forward` can only target a single URL, and GitHub allows just one
|
|
5
|
+
* forwarder per repo/org. To feed several GitHub channels at once, we run one
|
|
6
|
+
* forwarder into this loopback proxy, which re-posts each delivery — raw body
|
|
7
|
+
* and signature headers intact, so per-channel `X-Hub-Signature-256` checks
|
|
8
|
+
* still pass — to every channel whose declared event set matches the
|
|
9
|
+
* delivery's `x-github-event`.
|
|
10
|
+
*/
|
|
11
|
+
import { type IncomingMessage } from "node:http";
|
|
12
|
+
import { type GitHubForwardTarget } from "../channels/github/forward.js";
|
|
13
|
+
/** Request headers copied verbatim from gh onto each fanned-out delivery. */
|
|
14
|
+
export declare const FANOUT_FORWARD_HEADERS: readonly string[];
|
|
15
|
+
export interface FanoutServer {
|
|
16
|
+
/** Loopback URL to point `gh webhook forward --url` at. */
|
|
17
|
+
url: string;
|
|
18
|
+
close(): void;
|
|
19
|
+
}
|
|
20
|
+
export interface FanoutOptions {
|
|
21
|
+
/** Sink for per-delivery failures. Defaults to `process.stderr`. */
|
|
22
|
+
logger?: (line: string) => void;
|
|
23
|
+
}
|
|
24
|
+
/** Start a loopback proxy that fans deliveries out to {@link targets}. */
|
|
25
|
+
export declare function startFanoutServer(targets: readonly GitHubForwardTarget[], options?: FanoutOptions): Promise<FanoutServer>;
|
|
26
|
+
/**
|
|
27
|
+
* Re-post a single delivery to the matching targets, returning the labels that
|
|
28
|
+
* accepted it. Only targets whose event set includes the delivery's
|
|
29
|
+
* `x-github-event` receive it (all of them when the header is absent).
|
|
30
|
+
*/
|
|
31
|
+
export declare function fanoutDelivery(body: Buffer, headers: IncomingMessage["headers"], targets: readonly GitHubForwardTarget[], options?: FanoutOptions): Promise<string[]>;
|
|
32
|
+
//# sourceMappingURL=github-fanout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-fanout.d.ts","sourceRoot":"","sources":["../../src/internal/github-fanout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,+BAA+B,CAAC;AAEvC,6EAA6E;AAC7E,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EASnD,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,0EAA0E;AAC1E,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,SAAS,mBAAmB,EAAE,EACvC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAiBvB;AA8BD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,EACnC,OAAO,EAAE,SAAS,mBAAmB,EAAE,EACvC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC,CAoDnB"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local fan-out proxy for `agent-serve github forward`.
|
|
3
|
+
*
|
|
4
|
+
* `gh webhook forward` can only target a single URL, and GitHub allows just one
|
|
5
|
+
* forwarder per repo/org. To feed several GitHub channels at once, we run one
|
|
6
|
+
* forwarder into this loopback proxy, which re-posts each delivery — raw body
|
|
7
|
+
* and signature headers intact, so per-channel `X-Hub-Signature-256` checks
|
|
8
|
+
* still pass — to every channel whose declared event set matches the
|
|
9
|
+
* delivery's `x-github-event`.
|
|
10
|
+
*/
|
|
11
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
12
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
13
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
14
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
15
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
16
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
17
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
import { createServer, } from "node:http";
|
|
21
|
+
import { targetLabel, } from "../channels/github/forward.js";
|
|
22
|
+
/** Request headers copied verbatim from gh onto each fanned-out delivery. */
|
|
23
|
+
export const FANOUT_FORWARD_HEADERS = [
|
|
24
|
+
"content-type",
|
|
25
|
+
"x-github-event",
|
|
26
|
+
"x-github-delivery",
|
|
27
|
+
"x-github-hook-id",
|
|
28
|
+
"x-hub-signature",
|
|
29
|
+
"x-hub-signature-256",
|
|
30
|
+
"user-agent",
|
|
31
|
+
"accept",
|
|
32
|
+
];
|
|
33
|
+
/** Start a loopback proxy that fans deliveries out to {@link targets}. */
|
|
34
|
+
export function startFanoutServer(targets_1) {
|
|
35
|
+
return __awaiter(this, arguments, void 0, function* (targets, options = {}) {
|
|
36
|
+
const server = createServer((req, res) => {
|
|
37
|
+
handleFanoutRequest(req, res, targets, options);
|
|
38
|
+
});
|
|
39
|
+
yield new Promise((resolve, reject) => {
|
|
40
|
+
server.once("error", reject);
|
|
41
|
+
server.listen(0, "127.0.0.1", () => {
|
|
42
|
+
resolve();
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
const address = server.address();
|
|
46
|
+
return {
|
|
47
|
+
url: `http://127.0.0.1:${address.port}`,
|
|
48
|
+
close: () => {
|
|
49
|
+
server.close();
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function handleFanoutRequest(req, res, targets, options) {
|
|
55
|
+
const chunks = [];
|
|
56
|
+
req.on("data", (chunk) => {
|
|
57
|
+
chunks.push(chunk);
|
|
58
|
+
});
|
|
59
|
+
req.on("end", () => {
|
|
60
|
+
void fanoutDelivery(Buffer.concat(chunks), req.headers, targets, options)
|
|
61
|
+
.then((delivered) => {
|
|
62
|
+
res.writeHead(200, { "content-type": "application/json" });
|
|
63
|
+
res.end(JSON.stringify({ ok: true, delivered }));
|
|
64
|
+
})
|
|
65
|
+
.catch((error) => {
|
|
66
|
+
res.writeHead(502, { "content-type": "application/json" });
|
|
67
|
+
res.end(JSON.stringify({
|
|
68
|
+
ok: false,
|
|
69
|
+
error: error instanceof Error ? error.message : String(error),
|
|
70
|
+
}));
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Re-post a single delivery to the matching targets, returning the labels that
|
|
76
|
+
* accepted it. Only targets whose event set includes the delivery's
|
|
77
|
+
* `x-github-event` receive it (all of them when the header is absent).
|
|
78
|
+
*/
|
|
79
|
+
export function fanoutDelivery(body_1, headers_1, targets_1) {
|
|
80
|
+
return __awaiter(this, arguments, void 0, function* (body, headers, targets, options = {}) {
|
|
81
|
+
var _a;
|
|
82
|
+
const log = (_a = options.logger) !== null && _a !== void 0 ? _a : ((line) => process.stderr.write(line));
|
|
83
|
+
const event = typeof headers["x-github-event"] === "string"
|
|
84
|
+
? headers["x-github-event"]
|
|
85
|
+
: undefined;
|
|
86
|
+
const outbound = {};
|
|
87
|
+
for (const name of FANOUT_FORWARD_HEADERS) {
|
|
88
|
+
const value = headers[name];
|
|
89
|
+
if (typeof value === "string") {
|
|
90
|
+
outbound[name] = value;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const recipients = targets.filter((target) => event === undefined || target.events.includes(event));
|
|
94
|
+
// Reuse one Uint8Array view across recipients (Buffer isn't a BodyInit).
|
|
95
|
+
const payload = new Uint8Array(body);
|
|
96
|
+
const delivered = [];
|
|
97
|
+
// Bounded by the number of GitHub channels in the project (a handful), so
|
|
98
|
+
// unbounded-concurrency concerns do not apply here.
|
|
99
|
+
yield Promise.all(recipients.map((target) => __awaiter(this, void 0, void 0, function* () {
|
|
100
|
+
const label = targetLabel(target);
|
|
101
|
+
try {
|
|
102
|
+
const response = yield fetch(target.url, {
|
|
103
|
+
method: "POST",
|
|
104
|
+
headers: outbound,
|
|
105
|
+
body: payload,
|
|
106
|
+
});
|
|
107
|
+
if (!response.ok) {
|
|
108
|
+
log(`[agent-serve] delivery to ${label} failed: HTTP ${response.status}\n`);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
delivered.push(label);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
log(`[agent-serve] delivery to ${label} failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
115
|
+
}
|
|
116
|
+
})));
|
|
117
|
+
if (recipients.length > 0 && delivered.length === 0) {
|
|
118
|
+
throw new Error(`fan-out delivery failed for all ${recipients.length} matching channel(s)`);
|
|
119
|
+
}
|
|
120
|
+
return delivered;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified entry for dispatching agent-serve triggers from an external ingress
|
|
3
|
+
* (e.g. the Cursor backend GitHub webhook). Mirrors Automations'
|
|
4
|
+
* `handleAutomationTrigger`, but only GitHub is supported for now.
|
|
5
|
+
*
|
|
6
|
+
* Callers must authenticate the delivery before invoking this (the backend
|
|
7
|
+
* verifies GitHub HMAC at `/github_webhook`). This fan-out does not re-check
|
|
8
|
+
* signatures — same trust model as Bugbot after `verifyGithubRequest`.
|
|
9
|
+
*
|
|
10
|
+
* Each agent's `onPullRequest` / `onComment` / … hooks decide whether to run.
|
|
11
|
+
*/
|
|
12
|
+
import type { GitHubChannelOptions } from "../channels/github/types.js";
|
|
13
|
+
import type { ChannelHandlerArgs } from "../types.js";
|
|
14
|
+
export interface AgentServeGitHubTriggerTarget {
|
|
15
|
+
/** Agent mount slug (empty string in single-agent mode). */
|
|
16
|
+
slug: string;
|
|
17
|
+
/** Options from the agent's `githubChannel({ ... })` definition. */
|
|
18
|
+
options: GitHubChannelOptions;
|
|
19
|
+
/** Per-agent channel handler args (`send`, `waitUntil`, `host`, …). */
|
|
20
|
+
args: ChannelHandlerArgs;
|
|
21
|
+
}
|
|
22
|
+
export interface AgentServeGitHubTriggerEvent {
|
|
23
|
+
type: "github";
|
|
24
|
+
/** Raw webhook body (signature already verified by the caller). */
|
|
25
|
+
bodyText: string;
|
|
26
|
+
eventName: string | null;
|
|
27
|
+
deliveryId?: string;
|
|
28
|
+
targets: AgentServeGitHubTriggerTarget[];
|
|
29
|
+
}
|
|
30
|
+
export type AgentServeTriggerEvent = AgentServeGitHubTriggerEvent;
|
|
31
|
+
export interface AgentServeTriggerTargetResult {
|
|
32
|
+
slug: string;
|
|
33
|
+
status: number;
|
|
34
|
+
body: unknown;
|
|
35
|
+
}
|
|
36
|
+
export interface AgentServeTriggerResult {
|
|
37
|
+
ok: boolean;
|
|
38
|
+
event: string | null;
|
|
39
|
+
targets: AgentServeTriggerTargetResult[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Build fan-out targets from mounted agent projects that export a github
|
|
43
|
+
* channel created via {@link githubChannel}.
|
|
44
|
+
*/
|
|
45
|
+
export declare function collectGitHubTriggerTargets(input: {
|
|
46
|
+
mounts: Array<{
|
|
47
|
+
slug: string;
|
|
48
|
+
channels: Array<{
|
|
49
|
+
id: string;
|
|
50
|
+
definition: object;
|
|
51
|
+
}>;
|
|
52
|
+
buildHandlerArgs: (channelId: string) => ChannelHandlerArgs;
|
|
53
|
+
}>;
|
|
54
|
+
}): AgentServeGitHubTriggerTarget[];
|
|
55
|
+
/**
|
|
56
|
+
* Dispatch an agent-serve trigger. GitHub only for now.
|
|
57
|
+
*/
|
|
58
|
+
export declare function handleAgentServeTrigger(event: AgentServeTriggerEvent): Promise<AgentServeTriggerResult>;
|
|
59
|
+
//# sourceMappingURL=handleAgentServeTrigger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleAgentServeTrigger.d.ts","sourceRoot":"","sources":["../../src/internal/handleAgentServeTrigger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,WAAW,6BAA6B;IAC5C,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,OAAO,EAAE,oBAAoB,CAAC;IAC9B,uEAAuE;IACvE,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,QAAQ,CAAC;IACf,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,6BAA6B,EAAE,CAAC;CAC1C;AAED,MAAM,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AAElE,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,6BAA6B,EAAE,CAAC;CAC1C;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACpD,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,kBAAkB,CAAC;KAC7D,CAAC,CAAC;CACJ,GAAG,6BAA6B,EAAE,CAkBlC;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAYlC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified entry for dispatching agent-serve triggers from an external ingress
|
|
3
|
+
* (e.g. the Cursor backend GitHub webhook). Mirrors Automations'
|
|
4
|
+
* `handleAutomationTrigger`, but only GitHub is supported for now.
|
|
5
|
+
*
|
|
6
|
+
* Callers must authenticate the delivery before invoking this (the backend
|
|
7
|
+
* verifies GitHub HMAC at `/github_webhook`). This fan-out does not re-check
|
|
8
|
+
* signatures — same trust model as Bugbot after `verifyGithubRequest`.
|
|
9
|
+
*
|
|
10
|
+
* Each agent's `onPullRequest` / `onComment` / … hooks decide whether to run.
|
|
11
|
+
*/
|
|
12
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
import { dispatchGitHubWebhook, getGitHubChannelOptions, } from "../channels/github/github-channel.js";
|
|
22
|
+
/**
|
|
23
|
+
* Build fan-out targets from mounted agent projects that export a github
|
|
24
|
+
* channel created via {@link githubChannel}.
|
|
25
|
+
*/
|
|
26
|
+
export function collectGitHubTriggerTargets(input) {
|
|
27
|
+
const targets = [];
|
|
28
|
+
for (const mount of input.mounts) {
|
|
29
|
+
const github = mount.channels.find((channel) => channel.id === "github");
|
|
30
|
+
if (github === undefined) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const options = getGitHubChannelOptions(github.definition);
|
|
34
|
+
if (options === undefined) {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
targets.push({
|
|
38
|
+
slug: mount.slug,
|
|
39
|
+
options,
|
|
40
|
+
args: mount.buildHandlerArgs("github"),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return targets;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Dispatch an agent-serve trigger. GitHub only for now.
|
|
47
|
+
*/
|
|
48
|
+
export function handleAgentServeTrigger(event) {
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
switch (event.type) {
|
|
51
|
+
// TODO: Add support for other event types (e.g. Linear, Slack, etc.).
|
|
52
|
+
case "github":
|
|
53
|
+
return handleAgentServeGitHubTrigger(event);
|
|
54
|
+
default: {
|
|
55
|
+
const _ = event.type;
|
|
56
|
+
throw new Error(`handleAgentServeTrigger: unknown event type: ${String(_)}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function handleAgentServeGitHubTrigger(event) {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
if (event.eventName === "ping") {
|
|
64
|
+
return {
|
|
65
|
+
ok: true,
|
|
66
|
+
event: "ping",
|
|
67
|
+
targets: [],
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
let payload;
|
|
71
|
+
try {
|
|
72
|
+
payload = JSON.parse(event.bodyText);
|
|
73
|
+
}
|
|
74
|
+
catch (_a) {
|
|
75
|
+
return {
|
|
76
|
+
ok: false,
|
|
77
|
+
event: event.eventName,
|
|
78
|
+
targets: [
|
|
79
|
+
{
|
|
80
|
+
slug: "",
|
|
81
|
+
status: 400,
|
|
82
|
+
body: { ok: false, error: "invalid_json" },
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const targets = [];
|
|
88
|
+
for (const target of event.targets) {
|
|
89
|
+
const response = yield dispatchGitHubWebhook({
|
|
90
|
+
options: target.options,
|
|
91
|
+
eventName: event.eventName,
|
|
92
|
+
payload,
|
|
93
|
+
deliveryId: event.deliveryId,
|
|
94
|
+
args: target.args,
|
|
95
|
+
});
|
|
96
|
+
let body;
|
|
97
|
+
try {
|
|
98
|
+
body = yield response.json();
|
|
99
|
+
}
|
|
100
|
+
catch (_b) {
|
|
101
|
+
body = { ok: false, error: "invalid_response_json" };
|
|
102
|
+
}
|
|
103
|
+
targets.push({
|
|
104
|
+
slug: target.slug,
|
|
105
|
+
status: response.status,
|
|
106
|
+
body,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
ok: true,
|
|
111
|
+
event: event.eventName,
|
|
112
|
+
targets,
|
|
113
|
+
};
|
|
114
|
+
});
|
|
115
|
+
}
|