@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,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-serve-framework-map
|
|
3
|
+
description: >-
|
|
4
|
+
Orientation for @anysphere/agent-serve — folder structure, local vs cloud
|
|
5
|
+
runtimes, sessions, state layout, and invariants (Node not Bun, root
|
|
6
|
+
evals/, typecheck after tsx). Use when creating, editing, or running
|
|
7
|
+
agent-serve projects with agent/agent.ts and agent/instructions.md.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# agent-serve framework map
|
|
11
|
+
|
|
12
|
+
`@anysphere/agent-serve` serves agents defined as ordinary files: markdown
|
|
13
|
+
for prose, TypeScript for typed behavior, under an `agent/` directory. The
|
|
14
|
+
framework discovers the files, compiles a manifest, and serves the agent
|
|
15
|
+
over HTTP/Slack/GitHub channels, with the Cursor SDK + harness as the
|
|
16
|
+
execution engine. Ground truth is the package `README.md` (full reference)
|
|
17
|
+
and `AGENTS.md` (coding-agent loop) — this skill is the map, not the spec.
|
|
18
|
+
|
|
19
|
+
Run the CLI as `agent-serve <cmd>`. In the everysphere monorepo there is no
|
|
20
|
+
installed bin — use:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
cd packages/agent-serve
|
|
24
|
+
pnpm exec tsx src/bin/agent-serve.ts <cmd> ...
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Hard invariants (violating these wastes hours)
|
|
28
|
+
|
|
29
|
+
1. **Node 22+, never Bun.** Bun's HTTP/2 client corrupts harness
|
|
30
|
+
tool-result streams (`NGHTTP2_FRAME_SIZE_ERROR`): every built-in
|
|
31
|
+
read/grep the model makes fails and turns degrade into 8-minute retry
|
|
32
|
+
loops. All package mise tasks already use tsx.
|
|
33
|
+
2. **Evals live at the project root `evals/`**, never `agent/evals/` (that
|
|
34
|
+
path is silently ignored).
|
|
35
|
+
3. **tsx strips types without checking them.** `validate`/`run` passing
|
|
36
|
+
does not mean the code typechecks — run the repo's TypeScript check
|
|
37
|
+
(in everysphere: `dev check typecheck packages/agent-serve/... --timeout 120`)
|
|
38
|
+
before shipping. Classic miss: a tool `execute` return that fails
|
|
39
|
+
`ToolExecuteResult` — returns must be JSON-shaped, so use object
|
|
40
|
+
literals or `type` aliases, not `interface` types.
|
|
41
|
+
4. **Keep session state out of big monorepos.** Session workspaces are real
|
|
42
|
+
Cursor project directories and inherit ambient `AGENTS.md`/`.cursor`
|
|
43
|
+
rules from **ancestors**. Set `defineAgent({ local: { cwd } })` outside
|
|
44
|
+
the monorepo or pass a temp `--state-root`. (`run`/`eval` already use a
|
|
45
|
+
temp state root.)
|
|
46
|
+
5. **A model turn needs `CURSOR_API_KEY`.** Everything structural
|
|
47
|
+
(`validate`, `info`, `call`, `serve` bring-up) works without one.
|
|
48
|
+
|
|
49
|
+
## Folder structure
|
|
50
|
+
|
|
51
|
+
One file per concept; the path is the identity. Full details for each
|
|
52
|
+
path live under README "Folder structure".
|
|
53
|
+
|
|
54
|
+
| Path | What it is |
|
|
55
|
+
| --- | --- |
|
|
56
|
+
| `agent/agent.ts` | `defineAgent({ model?, runtime?, cloud?, local? })`; model defaults to `grok-4.5` with `effort=high`, `fast=true` |
|
|
57
|
+
| `agent/instructions.md` | Always-on system prompt (required; `.ts`/dir forms exist) |
|
|
58
|
+
| `agent/tools/<name>.ts` | One typed tool; filename = tool name. `execution: "server"` (in-process, default) or `"agent"` (script that runs where the agent runs) |
|
|
59
|
+
| `agent/skills/*` | SKILL.md-convention procedures, loaded on demand |
|
|
60
|
+
| `agent/mcp-connections/<name>.ts` | MCP servers — available to the model, to server tools (`ctx.host.mcp`), and to channel/schedule handlers (`args.host.mcp`) |
|
|
61
|
+
| `agent/subagents/<id>/` | Child agent dir (`description` required; per-subagent tools/skills/MCP connections ignored for now) |
|
|
62
|
+
| `agent/channels/*.ts` | HTTP surfaces beyond the built-in session API; `slack.ts` / `github.ts` use the platform packs |
|
|
63
|
+
| `agent/hooks/*.ts` | Observe-only event subscribers (never fatal) |
|
|
64
|
+
| `agent/ab.ts` or `agent/ab/*.ts` | Live A/B metrics (`defineAB`); sticky `split` + `onSample` |
|
|
65
|
+
| `agent/ab.config.ts` | Optional A/B `maxPlaygroundSessions` / `persistSamples` / `persistSnapshots` |
|
|
66
|
+
| `agent/schedules/*` | Cron-driven runs (UTC, 5-field; never auto-fire under `--dev`) |
|
|
67
|
+
| `agent/sandbox/workspace/` | Files seeded into each session workspace (local runtime only) |
|
|
68
|
+
| `agent/lib/` | Import-only shared code, never discovered |
|
|
69
|
+
| `evals/**/*.eval.ts` | Filesystem evals; case id = path under `evals/` |
|
|
70
|
+
|
|
71
|
+
## Local vs cloud runtime
|
|
72
|
+
|
|
73
|
+
`runtime: "local"` (default) runs turns on the Cursor SDK local harness on
|
|
74
|
+
the serve host; `runtime: "cloud"` runs them on Cursor cloud agents
|
|
75
|
+
(`bc-...` ids, needs `cloud: { repos: [...] }`).
|
|
76
|
+
|
|
77
|
+
| Capability | local | cloud |
|
|
78
|
+
| --- | --- | --- |
|
|
79
|
+
| Server tools (`execution: "server"`), approvals | yes | **no** |
|
|
80
|
+
| Agent tools (`execution: "agent"` scripts) | yes | yes |
|
|
81
|
+
| Skills, sandbox seeds | yes | only if in the cloud repo |
|
|
82
|
+
| Instructions | `AGENTS.md` in session workspace | prepended to first prompt |
|
|
83
|
+
| Checkout of a repo/PR | you arrange it | the VM carries it |
|
|
84
|
+
|
|
85
|
+
Rule of thumb: per-PR worktrees on the serve host die at
|
|
86
|
+
"hundreds of engineers issuing PRs" — when the job needs a repo checkout at
|
|
87
|
+
scale, use cloud and keep the host to routing, briefs, and bookkeeping.
|
|
88
|
+
`validate` warns when cloud is combined with local-only capabilities.
|
|
89
|
+
|
|
90
|
+
## Sessions, tokens, streams
|
|
91
|
+
|
|
92
|
+
Two handles, two owners:
|
|
93
|
+
|
|
94
|
+
- **continuationToken** — channel-owned conversation key. Same token =
|
|
95
|
+
same durable session (a Slack `channelId:threadTs`, a `pr:owner/repo#N`).
|
|
96
|
+
Rotates on each accepted HTTP follow-up; stale tokens get `409`.
|
|
97
|
+
- **sessionId** — runtime-owned handle for streaming/inspection
|
|
98
|
+
(`GET /v1/session/:id/stream?startIndex=N`, durable NDJSON replay).
|
|
99
|
+
|
|
100
|
+
A follow-up to a busy session **interrupts the in-flight turn** and waits
|
|
101
|
+
for it to settle before the new turn sends. `POST /v1/session/:id/stop`
|
|
102
|
+
interrupts without sending. Session-bound deterministic tool calls are
|
|
103
|
+
rejected with `409 session_busy` while a turn runs.
|
|
104
|
+
|
|
105
|
+
Key built-in routes (each agent, under `/<slug>` in multi-agent mode):
|
|
106
|
+
`POST /v1/session`, `POST /v1/session/:id`, `GET /v1/session/:id/stream`,
|
|
107
|
+
`GET /v1/sessions`, `POST /v1/tools/:toolName` (deterministic call),
|
|
108
|
+
`GET/POST /v1/session/:id/approvals[/:callId]`, `GET /v1/info`,
|
|
109
|
+
`GET /v1/health`, and in dev `POST /v1/dev/schedules/:id`,
|
|
110
|
+
`POST /v1/dev/reminders/:id`.
|
|
111
|
+
|
|
112
|
+
## State layout
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
<project>/.agent-serve/ # or <stateRoot>/<slug>/ under serve
|
|
116
|
+
sessions/<id>/session.json # metadata
|
|
117
|
+
sessions/<id>/events.ndjson # durable stream (replayable)
|
|
118
|
+
sessions/<id>/workspace/ # the harness cwd for that session
|
|
119
|
+
traces/<sessionId>.ndjson # written by `run`
|
|
120
|
+
runner/ # SDK conversation store
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Delete a session directory to forget a conversation. The playground can
|
|
124
|
+
open any `events.ndjson` ("Open trace").
|
|
125
|
+
|
|
126
|
+
## The loop
|
|
127
|
+
|
|
128
|
+
Edit → inspect → run → assert. Canonical commands and flags live in
|
|
129
|
+
`AGENTS.md` (`validate` / `info` / `call` / `run` / `eval` / `serve`).
|
|
130
|
+
Serve only your agent's directory during bring-up — mounting a parent
|
|
131
|
+
folder mounts every sibling agent too.
|
|
132
|
+
|
|
133
|
+
## Where to go next
|
|
134
|
+
|
|
135
|
+
- Scaffolding → `packages/agent-serve/skills/create-agent/SKILL.md`
|
|
136
|
+
- Evals → `packages/agent-serve/skills/evals/SKILL.md`
|
|
137
|
+
- Live A/B metrics → `packages/agent-serve/skills/ab/SKILL.md`
|
|
138
|
+
- GitHub webhooks → `packages/agent-serve/skills/github/SKILL.md`
|
|
139
|
+
- Slack → `packages/agent-serve/skills/setup-slack/SKILL.md`
|
|
140
|
+
- Local triage → `packages/agent-serve/skills/debug/SKILL.md`
|
|
141
|
+
- Measured improvement → `packages/agent-serve/skills/hillclimb/SKILL.md`
|
|
142
|
+
- Dogfood / deploy → `packages/agent-serve/skills/operate/SKILL.md`
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-serve-github
|
|
3
|
+
description: >-
|
|
4
|
+
Build and test GitHub-webhook-driven agent-serve agents: githubChannel
|
|
5
|
+
hooks (auth turn vs host task), signature modes, and testing tiers
|
|
6
|
+
(fixtures, github replay, github forward, serve --cursor-events). Use
|
|
7
|
+
when wiring GitHub events, replaying PR webhooks, or debugging delivery.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# GitHub channels in agent-serve
|
|
11
|
+
|
|
12
|
+
Author `agent/channels/github.ts` with `githubChannel()` from
|
|
13
|
+
`@anysphere/agent-serve/channels/github`. It mounts
|
|
14
|
+
`POST /<slug>/v1/channels/github` and publishes the events it dispatches on
|
|
15
|
+
(derived from declared hooks, or pinned via `webhookEvents`) so the CLI can
|
|
16
|
+
auto-derive forwarding.
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
import { defaultGitHubAuth, githubChannel } from "@anysphere/agent-serve/channels/github";
|
|
20
|
+
|
|
21
|
+
export default githubChannel({
|
|
22
|
+
botName: "my-agent", // or GITHUB_APP_SLUG; used to ignore self-comments
|
|
23
|
+
credentials: { webhookSecret: () => process.env.GITHUB_WEBHOOK_SECRET },
|
|
24
|
+
onPullRequest: (ctx, pr) =>
|
|
25
|
+
pr.action === "opened" ? { auth: defaultGitHubAuth(ctx) } : null,
|
|
26
|
+
onCheckSuite: (ctx, suite) =>
|
|
27
|
+
suite.conclusion === "failure" ? { task: () => triage(ctx) } : null,
|
|
28
|
+
});
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Hooks: `onPullRequest`, `onComment`, `onIssue`, `onCheckSuite`,
|
|
32
|
+
`onCheckRun`, `onWorkflowRun`, `onStatus`, plus catch-all `onEvent` and
|
|
33
|
+
lifecycle `onStart`/`onStop`. Each hook returns one of:
|
|
34
|
+
|
|
35
|
+
| Return | Meaning |
|
|
36
|
+
| --- | --- |
|
|
37
|
+
| `{ auth }` | Start/continue a **model turn** as that actor (a chat session exists; shows in the playground) |
|
|
38
|
+
| `{ task }` | **Host-side work**, 202-ACKed immediately so it can run past GitHub's ~10s delivery timeout (no chat session) |
|
|
39
|
+
| `null` | Skip this delivery |
|
|
40
|
+
|
|
41
|
+
Use `{ task }` for deterministic pipelines (a security reviewer can run its
|
|
42
|
+
whole review loop this way and report via commit status); use `{ auth }` when
|
|
43
|
+
the model should reason about the event.
|
|
44
|
+
|
|
45
|
+
## Auth modes
|
|
46
|
+
|
|
47
|
+
- **Secret set** → route auth is `allowAll()` + `X-Hub-Signature-256`
|
|
48
|
+
verification before parsing; the HMAC becomes the request principal.
|
|
49
|
+
- **No secret** → `localDevStrict()` (loopback only) — except under
|
|
50
|
+
`serve --dev`, which admits **unsigned loopback** deliveries so fixtures
|
|
51
|
+
and forwarding work with zero config.
|
|
52
|
+
- Non-dev targets always need the secret; keep the same value on the
|
|
53
|
+
server and whatever signs deliveries.
|
|
54
|
+
|
|
55
|
+
## Testing tiers — pick deliberately
|
|
56
|
+
|
|
57
|
+
### 1. Saved fixtures (offline, free)
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
curl -s -X POST http://127.0.0.1:3000/<slug>/v1/channels/github \
|
|
61
|
+
-H 'content-type: application/json' \
|
|
62
|
+
-H 'x-github-event: pull_request' \
|
|
63
|
+
-d @fixtures/github/pull_request.synchronize.json
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
No signature needed against `--dev`. Snapshot fixtures with replay's
|
|
67
|
+
`--dry-run --out` (below) instead of hand-writing payloads.
|
|
68
|
+
|
|
69
|
+
### 2. `github replay` — deterministic, read-only (the hillclimbing tier)
|
|
70
|
+
|
|
71
|
+
Reads a real PR via `gh api` (**pull access is enough** — `GITHUB_TOKEN`
|
|
72
|
+
is fine here), synthesizes GitHub-shaped payloads, signs them when a secret
|
|
73
|
+
is configured, and POSTs them at the channel. Fully deterministic.
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
agent-serve github replay https://github.com/owner/repo/pull/123 --dir <project>
|
|
77
|
+
agent-serve github replay owner/repo#123 --dir <project> --events '*' --conclusion failure
|
|
78
|
+
agent-serve github replay owner/repo#123 --dir <project> --events '*' --dry-run --out fixtures/github
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
`--events` defaults to `pull_request` (`'*'` = the channel's declared
|
|
82
|
+
set); `--action` / `--conclusion` / `--comment` / `--context` shape each
|
|
83
|
+
event; `--secret` or `GITHUB_WEBHOOK_SECRET` signs.
|
|
84
|
+
|
|
85
|
+
### 3. `github forward` — live deliveries (needs repo admin)
|
|
86
|
+
|
|
87
|
+
Wraps `gh webhook forward`: registers a real webhook and relays deliveries
|
|
88
|
+
to loopback. URL + events auto-derived; repo inferred from the git remote.
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
agent-serve github doctor --install # one-time: gh + cli/gh-webhook
|
|
92
|
+
agent-serve github events --dir <parent> --json # what would be forwarded
|
|
93
|
+
GITHUB_TOKEN= GH_TOKEN= agent-serve github forward --dir <project>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Traps, in order of hours lost:
|
|
97
|
+
|
|
98
|
+
1. **`GITHUB_TOKEN`/`GH_TOKEN` in the env → every delivery 401s** while
|
|
99
|
+
hook creation still succeeds. The relay authenticates with the gh CLI
|
|
100
|
+
login and rejects env tokens. Blank them for the command. `doctor` and
|
|
101
|
+
`forward` warn about this.
|
|
102
|
+
2. **One forwarder per repo** (GitHub limit). Point one
|
|
103
|
+
`forward --dir <parent>` at a folder of agents and it fans out each raw,
|
|
104
|
+
still-signed delivery to every channel whose event set matches; N
|
|
105
|
+
separate forwarders collide with `Hook already exists`.
|
|
106
|
+
3. Requires **admin** on the repo (org owner for `--org`) — if you lack
|
|
107
|
+
it, use replay.
|
|
108
|
+
4. Best-effort dev relay: deliveries while the process is down are lost.
|
|
109
|
+
|
|
110
|
+
`--repo owner/repo` / `--org ORG` override the target, `--events` narrows,
|
|
111
|
+
`--url` points at a tunnel, `--slug` / `--channel` target one agent.
|
|
112
|
+
|
|
113
|
+
### 4. `serve --cursor-events` — pull from Cursor (`/v0/scm-events`)
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
agent-serve serve --dir <project> --cursor-events --repo owner/repo
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Reads the stream as the host's Cursor user, so it **requires sign-in**
|
|
120
|
+
(`agent-serve login` / `CURSOR_API_KEY`) — `serve` refuses to start signed
|
|
121
|
+
out instead of running a relay that can never receive events. No public URL
|
|
122
|
+
or repo admin. Registers before consuming; offset + consumer id under
|
|
123
|
+
`<state-root>/cursor-events/`. `CURSOR_API_BASE_URL` for a non-default
|
|
124
|
+
backend. Stream is metadata-only today (payload lookup later).
|
|
125
|
+
|
|
126
|
+
## Production-shaped channel patterns
|
|
127
|
+
|
|
128
|
+
Steal these when an agent must survive real webhook volume.
|
|
129
|
+
|
|
130
|
+
- **Debounce per PR** (~3s, latest event wins) and re-buffer while CI
|
|
131
|
+
settles; skip a flush when a turn for that PR is already in flight.
|
|
132
|
+
- **Persist the buffer before ACKing** the webhook
|
|
133
|
+
(e.g. `.agent-serve/<slug>/webhook-buffer.json`) and restore it on channel
|
|
134
|
+
start — a restart must not drop buffered wakes.
|
|
135
|
+
- **Stable continuation key** `pr:owner/repo#N` so every wake resumes the
|
|
136
|
+
PR's session; cross-channel resume needs an affinity store mapping PR →
|
|
137
|
+
SDK agent id (write it from an `agent.bound` hook).
|
|
138
|
+
- **Discard payload details in wake prompts** — send a generic "re-check
|
|
139
|
+
the PR" refresh; the agent re-reads ground truth instead of trusting a
|
|
140
|
+
stale payload.
|
|
141
|
+
- **Cancel PR-scoped reminders on `pull_request.closed`.**
|
|
142
|
+
- No repo allowlist means the channel wakes for whatever deliveries
|
|
143
|
+
reach it — decide explicitly what repos an agent may act on, and
|
|
144
|
+
remember each wake spends real model budget.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-serve-hillclimb
|
|
3
|
+
description: >-
|
|
4
|
+
Iterate on a specific agent-serve agent by running the local server,
|
|
5
|
+
sending real requests, measuring correctness/efficiency, and proposing
|
|
6
|
+
the next harness or prompt change. Read this skill when improving an
|
|
7
|
+
existing agent.
|
|
8
|
+
paths:
|
|
9
|
+
- packages/agent-serve/**/*
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Agent-serve hillclimb
|
|
13
|
+
|
|
14
|
+
Optimize one agent-serve agent project
|
|
15
|
+
with a tight measure → change → remeasure loop. Do not redesign the
|
|
16
|
+
whole framework; climb one concrete failure mode at a time. Sibling skills:
|
|
17
|
+
`framework-map` (orientation), `evals` (the ratchet), `ab` (live variant
|
|
18
|
+
metrics under serve), `github` (deterministic webhook replay), `debug`
|
|
19
|
+
(when a run misbehaves rather than underperforms).
|
|
20
|
+
|
|
21
|
+
## Preconditions
|
|
22
|
+
|
|
23
|
+
Confirm with the user (or take from the invoking message):
|
|
24
|
+
|
|
25
|
+
1. **Target agent** — path or slug, e.g. `./my-agent`
|
|
26
|
+
2. **Fixture(s)** — fixed inputs to compare across runs (PR URL, webhook
|
|
27
|
+
payload, playground prompt, etc.)
|
|
28
|
+
3. **Success criteria** — what “better” means this round (fewer tools, faster
|
|
29
|
+
wall time, higher finding quality, fewer wrong side-effects, …)
|
|
30
|
+
4. **Freeze line** — what must not change (API contracts, public output shape)
|
|
31
|
+
|
|
32
|
+
If those are missing, ask before editing.
|
|
33
|
+
|
|
34
|
+
## Make the fixture deterministic first
|
|
35
|
+
|
|
36
|
+
A climb over a moving input is noise. Before round 1:
|
|
37
|
+
|
|
38
|
+
- **GitHub agents** — replay, don't wait for live events:
|
|
39
|
+
`agent-serve github replay <pr> --dir <project>` synthesizes signed,
|
|
40
|
+
GitHub-shaped payloads from read access only, identically every run;
|
|
41
|
+
`--dry-run --out fixtures/github` snapshots them for offline replay.
|
|
42
|
+
- **Tool behavior** — isolate host tools from the model with
|
|
43
|
+
`agent-serve call <tool> --dir <project> --input '{...}'` (schema-validated,
|
|
44
|
+
in-process, no turn). If the tool output is wrong, no prompt change fixes it.
|
|
45
|
+
- **Chat agents** — `agent-serve run --dir <project> --message "<fixture>"`
|
|
46
|
+
gives a JSON trajectory plus an NDJSON trace under
|
|
47
|
+
`<project>/.agent-serve/traces/`; `agent-serve trajectory --events <file>`
|
|
48
|
+
re-summarizes any saved trace.
|
|
49
|
+
- **Manual probes** — the playground Try modal on any channel route
|
|
50
|
+
remembers your last body per endpoint and has Copy curl; a successful Try
|
|
51
|
+
opens the created session.
|
|
52
|
+
|
|
53
|
+
## Loop
|
|
54
|
+
|
|
55
|
+
Repeat until the user stops or fixtures meet the criteria.
|
|
56
|
+
|
|
57
|
+
### 1. Baseline
|
|
58
|
+
|
|
59
|
+
- Serve with Node (never Bun):
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
agent-serve serve --dir <project> --dev
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
- Hit the agent the way a user would (channel HTTP, playground, Slack in
|
|
66
|
+
`--dev` if that is the surface under test).
|
|
67
|
+
|
|
68
|
+
Custom channels live at `http://127.0.0.1:3000/<slug>/v1/channels/<id>`.
|
|
69
|
+
Playground: `http://127.0.0.1:3000/<slug>/playground`.
|
|
70
|
+
|
|
71
|
+
- Record for each fixture:
|
|
72
|
+
- HTTP/status and wall time
|
|
73
|
+
- `sessionId` + playground URL
|
|
74
|
+
- final result text / structured output
|
|
75
|
+
- tool trajectory from session `events.ndjson` (`actions.requested` /
|
|
76
|
+
`action.result`)
|
|
77
|
+
- workspace footprint (what the host seeded vs what the model opened)
|
|
78
|
+
|
|
79
|
+
Sessions typically live under:
|
|
80
|
+
|
|
81
|
+
`<project>/.agent-serve/<slug>/sessions/<sessionId>/`
|
|
82
|
+
|
|
83
|
+
### 2. Reflect
|
|
84
|
+
|
|
85
|
+
Score the run on three axes; cite evidence from the trajectory, not vibes.
|
|
86
|
+
|
|
87
|
+
| Axis | Ask |
|
|
88
|
+
| --- | --- |
|
|
89
|
+
| **Correctness** | Right answer / findings? Misses? Hallucinated context? |
|
|
90
|
+
| **Efficiency** | Tool-call count, redundant reads/greps, fat evidence, latency |
|
|
91
|
+
| **Harness fit** | Did the model invent work the host should have done? Escape the intended workspace? Fight the instructions? |
|
|
92
|
+
|
|
93
|
+
Name the **single dominant failure mode** for this round (e.g. “full-file dumps
|
|
94
|
+
trigger grep loops”, “skill not on disk so model searches the monorepo”).
|
|
95
|
+
|
|
96
|
+
### 3. Propose one change
|
|
97
|
+
|
|
98
|
+
Prefer the smallest lever that addresses that failure mode:
|
|
99
|
+
|
|
100
|
+
1. **Host prep** — deterministic tools / channel handlers seed only what the
|
|
101
|
+
model needs (`workspaceFiles`, channel `callTool`, …)
|
|
102
|
+
2. **Evidence shape** — trim, split, or order artifacts so the intended file
|
|
103
|
+
is primary
|
|
104
|
+
3. **Instructions / skills** — tighten procedure, forbid escape hatches that
|
|
105
|
+
invite thrash
|
|
106
|
+
4. **Tool surface** — remove or gate tools that enable wandering
|
|
107
|
+
5. Framework changes only if the agent cannot express the fix otherwise
|
|
108
|
+
|
|
109
|
+
State the hypothesis in one sentence: *“If we X, metric Y should move because Z.”*
|
|
110
|
+
|
|
111
|
+
### 4. Apply and remeasure
|
|
112
|
+
|
|
113
|
+
- Implement the change.
|
|
114
|
+
- Restart serve if needed (agent project code or package `src/`).
|
|
115
|
+
- Re-run the **same** fixtures.
|
|
116
|
+
- Diff metrics side-by-side (tools, bytes, time, quality notes).
|
|
117
|
+
- Keep the change only if the target metric improves without regressing the
|
|
118
|
+
freeze line; otherwise revert or narrow.
|
|
119
|
+
- **Ratchet every kept change**: land an eval that would have failed before
|
|
120
|
+
it (tool-choice gate, `action.result` count bound, output-shape regex —
|
|
121
|
+
see `evals/SKILL.md`), and never weaken an existing gate to make a round
|
|
122
|
+
pass. `agent-serve eval --dir <project> --json` is the regression check
|
|
123
|
+
between rounds.
|
|
124
|
+
|
|
125
|
+
Present a short round report to the user before starting the next climb.
|
|
126
|
+
|
|
127
|
+
## Measurement tips
|
|
128
|
+
|
|
129
|
+
- Prefer `action.result` counts by `toolName` over raw event volume.
|
|
130
|
+
- Log paths the model actually read; escape outside the session workspace is a
|
|
131
|
+
harness smell.
|
|
132
|
+
- Separate **host** work (channel `callTool`, prepare steps) from **model**
|
|
133
|
+
tools when blaming latency. The biggest wins this framework has seen came
|
|
134
|
+
from moving deterministic work to the host (one PR reviewer's host-prepared
|
|
135
|
+
reviews cut ~8-minute tool-wandering turns to ~1 minute), not from prompt
|
|
136
|
+
tuning.
|
|
137
|
+
- For quality, spot-check against a known-good review or oracle on at least
|
|
138
|
+
one fixture; efficiency-only climbs will silently drop findings.
|
|
139
|
+
- `turn.failed` with `"turn interrupted"` in a trace means a follow-up or
|
|
140
|
+
stop preempted the turn — measurement artifact, not a regression.
|
|
141
|
+
|
|
142
|
+
## Working agreements
|
|
143
|
+
|
|
144
|
+
- One failure mode per round — no mixed “also rewrite instructions while
|
|
145
|
+
trimming evidence” bundles unless the user asks.
|
|
146
|
+
- Keep fixtures fixed until a climb explicitly needs a harder case.
|
|
147
|
+
- Use mise/Node workflows already documented for this package; do not introduce
|
|
148
|
+
Bun.
|
|
149
|
+
- Do not deploy, post real GitHub reviews, or push unless the user asks.
|
|
150
|
+
- Commit only when asked.
|
|
151
|
+
|
|
152
|
+
## Round report template
|
|
153
|
+
|
|
154
|
+
```markdown
|
|
155
|
+
### Hillclimb round N — <slug>
|
|
156
|
+
- Fixture(s): …
|
|
157
|
+
- Hypothesis: …
|
|
158
|
+
- Change: <files / one-liner>
|
|
159
|
+
- Before → after: tools …; wall …; evidence …; quality …
|
|
160
|
+
- Verdict: keep | revert | narrow
|
|
161
|
+
- Next failure mode (if any): …
|
|
162
|
+
```
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-serve-setup-slack
|
|
3
|
+
description: >-
|
|
4
|
+
Set up a Slack channel for an agent-serve project — Socket Mode,
|
|
5
|
+
manifests, doctor, smoke test, and opt-in Slack tool approvals (HITL).
|
|
6
|
+
Read this skill when wiring Slack for an agent-serve project.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Setup Slack for agent-serve
|
|
10
|
+
|
|
11
|
+
Use this skill when a human asks to wire Slack to an agent-serve agent.
|
|
12
|
+
|
|
13
|
+
## Goal
|
|
14
|
+
|
|
15
|
+
- Importable **dev** and **prod** Slack app manifests (Socket Mode on)
|
|
16
|
+
- App-level Token (`xapp-…`, `connections:write`) + Bot token (`xoxb-…`)
|
|
17
|
+
- No public Request URL (Socket Mode only)
|
|
18
|
+
- Thread ↔ session via `continuationToken = channelId:threadTs`
|
|
19
|
+
- One Slack app (token pair) **per agent** when serving multiple demos
|
|
20
|
+
|
|
21
|
+
## Phases
|
|
22
|
+
|
|
23
|
+
Update `.agent-serve/slack/setup-status.json` as you complete phases.
|
|
24
|
+
|
|
25
|
+
### Phase 0 — Generate (agent)
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pnpm exec tsx packages/agent-serve/src/bin/agent-serve.ts slack init \
|
|
29
|
+
--dir <agent> --name "My Agent"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Creates:
|
|
33
|
+
|
|
34
|
+
- `agent/channels/slack.ts` with `envPrefix` from the directory name
|
|
35
|
+
- `.agent-serve/slack/manifest.{dev,prod}.json`
|
|
36
|
+
- `.agent-serve/slack/env.example` (`<PREFIX>_SLACK_BOT_TOKEN` / `_APP_TOKEN`)
|
|
37
|
+
|
|
38
|
+
Use `--no-prefix` for the shared `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` globals
|
|
39
|
+
(single-agent only). Use `--prefix CUSTOM` to override the default prefix.
|
|
40
|
+
|
|
41
|
+
### Phase 1 — Create apps (human)
|
|
42
|
+
|
|
43
|
+
1. Open https://api.slack.com/apps → **Create New App** → **From a manifest**
|
|
44
|
+
2. Paste `manifest.dev.json` → create the *dev* app
|
|
45
|
+
3. Repeat with `manifest.prod.json` for prod
|
|
46
|
+
|
|
47
|
+
Stop and ask the human to complete this gate.
|
|
48
|
+
|
|
49
|
+
### Phase 2 — Install + tokens (human)
|
|
50
|
+
|
|
51
|
+
For each app:
|
|
52
|
+
|
|
53
|
+
1. **Install to Workspace** — copy Bot User OAuth Token (`xoxb-…`)
|
|
54
|
+
2. **Basic Information → App-Level Tokens** — Create Token with scope `connections:write` → copy (`xapp-…`)
|
|
55
|
+
|
|
56
|
+
### Phase 3 — Env (agent)
|
|
57
|
+
|
|
58
|
+
Write into `.env.local` (dev app), using the keys from `env.example`:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
MY_AGENT_SLACK_BOT_TOKEN=xoxb-…
|
|
62
|
+
MY_AGENT_SLACK_APP_TOKEN=xapp-…
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
agent-serve slack doctor --prefix MY_AGENT
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Stop when `app_token`, `connections_open`, `bot_token`, and `auth_test` are green.
|
|
70
|
+
|
|
71
|
+
### Phase 4 — Serve + smoke (agent + human)
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
agent-serve serve --dir . --dev
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Confirm log: `[agent-serve/slack] Socket Mode connected`.
|
|
78
|
+
|
|
79
|
+
When tokens are missing the channel logs
|
|
80
|
+
`channel idle reason=missing credentials need=…` and `serve` continues — useful
|
|
81
|
+
when mounting a folder of agents where only some have tokens.
|
|
82
|
+
|
|
83
|
+
Human:
|
|
84
|
+
|
|
85
|
+
1. Invite the bot to a channel
|
|
86
|
+
2. `@mention` it (or DM)
|
|
87
|
+
3. Confirm Thinking… / Working… typing and a threaded reply
|
|
88
|
+
4. Server logs should show correlated lines (`event_id`, `session`, `channel`, `thread_ts`):
|
|
89
|
+
- `inbound kind=app_mention …`
|
|
90
|
+
- `session start …`
|
|
91
|
+
- `reply delivered via postMessage|stream …`
|
|
92
|
+
|
|
93
|
+
## Features (defaults ON)
|
|
94
|
+
|
|
95
|
+
- Chat streaming (`chat.startStream` / `appendStream` / `stopStream`) with postMessage fallback
|
|
96
|
+
- Thinking / task cards for tool calls
|
|
97
|
+
- `assistant.threads.setStatus` with rotating `loading_messages`
|
|
98
|
+
- Thread title + suggested prompts
|
|
99
|
+
- `markdown_text` when supported
|
|
100
|
+
- Handler `message` / `workspaceFiles` / `cloud` passthrough for PR demos
|
|
101
|
+
|
|
102
|
+
If a Slack API is unavailable (`method_not_found` / `missing_scope`), the pack falls back to postMessage + setStatus.
|
|
103
|
+
|
|
104
|
+
## Engagement: mentions by default, channel watch opt-in
|
|
105
|
+
|
|
106
|
+
The pack dispatches only on `app_mention` + DMs unless told otherwise —
|
|
107
|
+
summoned, never proactive. To watch channels (dispatch on new posts without
|
|
108
|
+
a mention), opt in explicitly:
|
|
109
|
+
|
|
110
|
+
```ts
|
|
111
|
+
export default slackChannel({
|
|
112
|
+
engagement: {
|
|
113
|
+
channelPosts: {
|
|
114
|
+
allow: ["#issues-glass"], // explicit allowlist; no wildcard exists
|
|
115
|
+
posts: "top-level", // default — thread replies never dispatch
|
|
116
|
+
debounceMs: 15_000, // optional: edits settle, deletes cancel
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
onChannelPost: async (ctx, message) => ({}), // null = skip
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Requirements: generate manifests with `slack init --channel-posts` (or add
|
|
124
|
+
`message.channels` / `message.groups` events + re-import), and invite the
|
|
125
|
+
bot to each watched channel. Posts mentioning the bot stay on the
|
|
126
|
+
`app_mention` path; watch sessions reuse the thread-scoped principal with an
|
|
127
|
+
`engagement: "channel_post"` attribute, so a later mention continues the
|
|
128
|
+
thread. `engagement.mentions` / `engagement.directMessages` can be set to
|
|
129
|
+
`false` to turn those surfaces off.
|
|
130
|
+
|
|
131
|
+
## Tool approvals over Slack (opt-in HITL)
|
|
132
|
+
|
|
133
|
+
Tools with `needsApproval` park until a human approves or denies. To route
|
|
134
|
+
that through Slack, set `toolApprovals: true` on `slackChannel` — it posts
|
|
135
|
+
Block Kit Approve/Deny cards and routes Socket Mode `interactive` clicks
|
|
136
|
+
back to the parked call:
|
|
137
|
+
|
|
138
|
+
```ts
|
|
139
|
+
export default slackChannel({
|
|
140
|
+
credentials: { /* … */ },
|
|
141
|
+
toolApprovals: true,
|
|
142
|
+
});
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Requirements and caveats:
|
|
146
|
+
|
|
147
|
+
- The Slack app manifest needs **interactivity** enabled
|
|
148
|
+
(`buildSlackManifest({ interactivity: true })`; `toolApprovals: true`
|
|
149
|
+
implies the Socket Mode routing, but the app must allow it). Re-import
|
|
150
|
+
the manifest after changing this.
|
|
151
|
+
- Composing by hand: spread `buildToolApprovalEvents({ credentials })` into
|
|
152
|
+
`events` **and** set `interactivity: true` on the channel.
|
|
153
|
+
- Cards show **redacted / truncated** args (Block Kit limits); execution
|
|
154
|
+
uses the full validated input. Review sensitive tools in the playground
|
|
155
|
+
when args may exceed the card.
|
|
156
|
+
- Approvals only exist for `execution: "server"` tools on the `local`
|
|
157
|
+
runtime, and parked calls do not survive a host restart.
|
|
158
|
+
- In `--dev` (loopback) or `--allow-anonymous` (trusted shared host), the
|
|
159
|
+
playground can also list Slack sessions and Approve/Deny
|
|
160
|
+
their parked tools (audit records the HTTP caller). Production and
|
|
161
|
+
bearer-auth hosts stay strict: Slack resolve must come from Slack
|
|
162
|
+
interactivity or a matching principal.
|
|
163
|
+
|
|
164
|
+
## Notes
|
|
165
|
+
|
|
166
|
+
- Dev and prod are **separate Slack apps** (separate tokens).
|
|
167
|
+
- Socket Mode only — no Events HTTP / Request URL path.
|
|
168
|
+
- Do not `await waitForCompletion()` inside Slack dispatch handlers — the pack uses `waitUntil`.
|
|
169
|
+
- Do not share one token pair across multiple agents in the same process.
|
|
170
|
+
|
|
171
|
+
## CLI reference
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
agent-serve slack setup
|
|
175
|
+
agent-serve slack init --dir . --name "My Agent"
|
|
176
|
+
agent-serve slack init --dir . --no-prefix
|
|
177
|
+
agent-serve slack init --dir . --channel-posts # + message.channels/groups events
|
|
178
|
+
agent-serve slack manifest --env both
|
|
179
|
+
agent-serve slack doctor --prefix MY_AGENT
|
|
180
|
+
```
|