@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,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack Socket Mode via `@slack/socket-mode`.
|
|
3
|
+
*
|
|
4
|
+
* Thin wrapper: ACK envelopes immediately, then forward Events API
|
|
5
|
+
* payloads to the channel pack. Reconnect is handled by the SDK.
|
|
6
|
+
*/
|
|
7
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
import { LogLevel, SocketModeClient } from "@slack/socket-mode";
|
|
17
|
+
function createBridgeLogger(write) {
|
|
18
|
+
let level = LogLevel.INFO;
|
|
19
|
+
const rank = {
|
|
20
|
+
[LogLevel.ERROR]: 0,
|
|
21
|
+
[LogLevel.WARN]: 1,
|
|
22
|
+
[LogLevel.INFO]: 2,
|
|
23
|
+
[LogLevel.DEBUG]: 3,
|
|
24
|
+
};
|
|
25
|
+
const emit = (msgLevel, msgs) => {
|
|
26
|
+
if (rank[msgLevel] > rank[level]) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const text = msgs
|
|
30
|
+
.map((m) => (typeof m === "string" ? m : JSON.stringify(m)))
|
|
31
|
+
.join(" ");
|
|
32
|
+
write(`[agent-serve/slack] Socket Mode ${text}`);
|
|
33
|
+
};
|
|
34
|
+
return {
|
|
35
|
+
debug: (...msgs) => emit(LogLevel.DEBUG, msgs),
|
|
36
|
+
info: (...msgs) => emit(LogLevel.INFO, msgs),
|
|
37
|
+
warn: (...msgs) => emit(LogLevel.WARN, msgs),
|
|
38
|
+
error: (...msgs) => emit(LogLevel.ERROR, msgs),
|
|
39
|
+
setLevel(next) {
|
|
40
|
+
level = next;
|
|
41
|
+
},
|
|
42
|
+
getLevel: () => level,
|
|
43
|
+
setName() {
|
|
44
|
+
// Name is unused; agent-serve prefixes lines itself.
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function invokeHandler(log, label, handler, payload) {
|
|
49
|
+
try {
|
|
50
|
+
const result = handler(payload);
|
|
51
|
+
if (result !== undefined &&
|
|
52
|
+
typeof result.then === "function") {
|
|
53
|
+
void Promise.resolve(result).catch((error) => {
|
|
54
|
+
log(`[agent-serve/slack] Socket Mode ${label} failed: ${errorMessage(error)}`);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
log(`[agent-serve/slack] Socket Mode ${label} failed: ${errorMessage(error)}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function errorMessage(error) {
|
|
63
|
+
return error instanceof Error ? error.message : String(error);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Start a Socket Mode connection. Call `stop()` to tear down.
|
|
67
|
+
* Resolves once the first WebSocket session is connected.
|
|
68
|
+
*/
|
|
69
|
+
export function startSlackSocketMode(options) {
|
|
70
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
var _a;
|
|
72
|
+
const write = (_a = options.logger) !== null && _a !== void 0 ? _a : ((line) => console.log(line));
|
|
73
|
+
const client = new SocketModeClient({
|
|
74
|
+
appToken: options.appToken,
|
|
75
|
+
logger: createBridgeLogger(write),
|
|
76
|
+
logLevel: LogLevel.INFO,
|
|
77
|
+
autoReconnectEnabled: true,
|
|
78
|
+
});
|
|
79
|
+
client.on("connected", () => {
|
|
80
|
+
write("[agent-serve/slack] Socket Mode connected");
|
|
81
|
+
});
|
|
82
|
+
client.on("reconnecting", () => {
|
|
83
|
+
write("[agent-serve/slack] Socket Mode reconnecting");
|
|
84
|
+
});
|
|
85
|
+
client.on("disconnected", () => {
|
|
86
|
+
write("[agent-serve/slack] Socket Mode disconnected");
|
|
87
|
+
});
|
|
88
|
+
client.on("slack_event", (evt) => {
|
|
89
|
+
// ACK immediately (3s envelope budget); then dispatch off-path.
|
|
90
|
+
void Promise.resolve(evt.ack()).catch((error) => {
|
|
91
|
+
write(`[agent-serve/slack] Socket Mode ACK failed: ${errorMessage(error)}`);
|
|
92
|
+
});
|
|
93
|
+
if (evt.type === "events_api") {
|
|
94
|
+
if (evt.body !== undefined) {
|
|
95
|
+
invokeHandler(write, "onEvent", options.onEvent, evt.body);
|
|
96
|
+
}
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (evt.type === "interactive") {
|
|
100
|
+
if (evt.body !== undefined && options.onInteractive !== undefined) {
|
|
101
|
+
invokeHandler(write, "onInteractive", options.onInteractive, evt.body);
|
|
102
|
+
}
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
yield client.start();
|
|
107
|
+
return {
|
|
108
|
+
stop() {
|
|
109
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
110
|
+
yield client.disconnect();
|
|
111
|
+
write("[agent-serve/slack] Socket Mode stopped");
|
|
112
|
+
});
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
});
|
|
116
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat streaming helpers for Slack AI / agent features.
|
|
3
|
+
*/
|
|
4
|
+
export type StreamTaskStatus = "pending" | "in_progress" | "complete" | "error";
|
|
5
|
+
export interface StreamTaskChunk {
|
|
6
|
+
type: "task_update";
|
|
7
|
+
id: string;
|
|
8
|
+
title: string;
|
|
9
|
+
status: StreamTaskStatus;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Given previously sent cumulative text and the new cumulative text, return
|
|
13
|
+
* the suffix to append. Empty string when there is nothing new to send.
|
|
14
|
+
*/
|
|
15
|
+
export declare function computeStreamAppend(lastPostedText: string | null | undefined, cumulative: string): string;
|
|
16
|
+
/** Build task_update chunks for tool calls. */
|
|
17
|
+
export declare function buildTaskChunksForCalls(calls: Array<{
|
|
18
|
+
callId: string;
|
|
19
|
+
toolName: string;
|
|
20
|
+
}>, status: StreamTaskStatus): StreamTaskChunk[];
|
|
21
|
+
export declare function buildTaskChunkForResult(args: {
|
|
22
|
+
callId: string;
|
|
23
|
+
toolName: string;
|
|
24
|
+
isError: boolean;
|
|
25
|
+
}): StreamTaskChunk;
|
|
26
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/stream.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,OAAO,CAAC;AAEhF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACzC,UAAU,EAAE,MAAM,GACjB,MAAM,CAgBR;AAED,+CAA+C;AAC/C,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EAClD,MAAM,EAAE,gBAAgB,GACvB,eAAe,EAAE,CAOnB;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,eAAe,CAOlB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat streaming helpers for Slack AI / agent features.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Given previously sent cumulative text and the new cumulative text, return
|
|
6
|
+
* the suffix to append. Empty string when there is nothing new to send.
|
|
7
|
+
*/
|
|
8
|
+
export function computeStreamAppend(lastPostedText, cumulative) {
|
|
9
|
+
if (cumulative === "") {
|
|
10
|
+
return "";
|
|
11
|
+
}
|
|
12
|
+
if (lastPostedText === null ||
|
|
13
|
+
lastPostedText === undefined ||
|
|
14
|
+
lastPostedText === "") {
|
|
15
|
+
return cumulative;
|
|
16
|
+
}
|
|
17
|
+
if (cumulative.startsWith(lastPostedText)) {
|
|
18
|
+
return cumulative.slice(lastPostedText.length);
|
|
19
|
+
}
|
|
20
|
+
// Text rewound / rewritten — cannot unsend; skip append.
|
|
21
|
+
return "";
|
|
22
|
+
}
|
|
23
|
+
/** Build task_update chunks for tool calls. */
|
|
24
|
+
export function buildTaskChunksForCalls(calls, status) {
|
|
25
|
+
return calls.map((call) => ({
|
|
26
|
+
type: "task_update",
|
|
27
|
+
id: call.callId,
|
|
28
|
+
title: call.toolName,
|
|
29
|
+
status,
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
export function buildTaskChunkForResult(args) {
|
|
33
|
+
return {
|
|
34
|
+
type: "task_update",
|
|
35
|
+
id: args.callId,
|
|
36
|
+
title: args.toolName,
|
|
37
|
+
status: args.isError ? "error" : "complete",
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack surface for human-in-the-loop tool approvals.
|
|
3
|
+
*
|
|
4
|
+
* Or compose with {@link buildDefaultEvents} (or your own handlers). When
|
|
5
|
+
* composing by hand, also set `slackChannel({ interactivity: true })` (or
|
|
6
|
+
* `toolApprovals: true`) so Socket Mode routes Approve/Deny clicks —
|
|
7
|
+
* otherwise cards post but button presses are ACKed and ignored:
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* events: {
|
|
11
|
+
* ...buildDefaultEvents({ credentials }),
|
|
12
|
+
* ...buildToolApprovalEvents({ credentials }),
|
|
13
|
+
* }
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Or opt in via `slackChannel({ toolApprovals: true })`.
|
|
17
|
+
* Park/resume itself is the framework HITL primitive (`needsApproval`);
|
|
18
|
+
* this pack only delivers Approve/Deny in Slack.
|
|
19
|
+
*/
|
|
20
|
+
import type { ChannelEventHandlers } from "../../types.js";
|
|
21
|
+
import { type SlackLog } from "./log.js";
|
|
22
|
+
import type { SlackChannelState, SlackCredentials } from "./types.js";
|
|
23
|
+
export interface BuildToolApprovalEventsOptions {
|
|
24
|
+
credentials?: SlackCredentials;
|
|
25
|
+
/** Resolved per-call so channel onStart can rebind the server logger. */
|
|
26
|
+
getLog?: () => SlackLog;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Stream-event handlers that post Block Kit Approve/Deny cards and
|
|
30
|
+
* update them when approval is resolved (HTTP, playground, or Slack).
|
|
31
|
+
*/
|
|
32
|
+
export declare function buildToolApprovalEvents(options?: BuildToolApprovalEventsOptions): ChannelEventHandlers<SlackChannelState>;
|
|
33
|
+
//# sourceMappingURL=tool-approval-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-approval-events.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/tool-approval-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAO3D,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,8BAA8B;IAC7C,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,QAAQ,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,8BAAmC,GAC3C,oBAAoB,CAAC,iBAAiB,CAAC,CA6FzC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack surface for human-in-the-loop tool approvals.
|
|
3
|
+
*
|
|
4
|
+
* Or compose with {@link buildDefaultEvents} (or your own handlers). When
|
|
5
|
+
* composing by hand, also set `slackChannel({ interactivity: true })` (or
|
|
6
|
+
* `toolApprovals: true`) so Socket Mode routes Approve/Deny clicks —
|
|
7
|
+
* otherwise cards post but button presses are ACKed and ignored:
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* events: {
|
|
11
|
+
* ...buildDefaultEvents({ credentials }),
|
|
12
|
+
* ...buildToolApprovalEvents({ credentials }),
|
|
13
|
+
* }
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Or opt in via `slackChannel({ toolApprovals: true })`.
|
|
17
|
+
* Park/resume itself is the framework HITL primitive (`needsApproval`);
|
|
18
|
+
* this pack only delivers Approve/Deny in Slack.
|
|
19
|
+
*/
|
|
20
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
21
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
22
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
23
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
24
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
25
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
26
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
import { postMessage, setThreadStatus, updateMessage } from "./api.js";
|
|
30
|
+
import { buildApprovalBlocks, buildResolvedApprovalBlocks, } from "./approvals.js";
|
|
31
|
+
import { SLACK_DEFAULT_LOADING_MESSAGES } from "./constants.js";
|
|
32
|
+
import { defaultSlackLog } from "./log.js";
|
|
33
|
+
/**
|
|
34
|
+
* Stream-event handlers that post Block Kit Approve/Deny cards and
|
|
35
|
+
* update them when approval is resolved (HTTP, playground, or Slack).
|
|
36
|
+
*/
|
|
37
|
+
export function buildToolApprovalEvents(options = {}) {
|
|
38
|
+
var _a;
|
|
39
|
+
var _b;
|
|
40
|
+
const botToken = (_a = options.credentials) === null || _a === void 0 ? void 0 : _a.botToken;
|
|
41
|
+
const getLog = (_b = options.getLog) !== null && _b !== void 0 ? _b : (() => defaultSlackLog);
|
|
42
|
+
return {
|
|
43
|
+
"action.approval_requested"(event, channel, ctx) {
|
|
44
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
+
var _a;
|
|
46
|
+
const log = getLog();
|
|
47
|
+
const state = channel.state;
|
|
48
|
+
if (state.channelId === null || state.threadTs === null) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const blocks = buildApprovalBlocks({
|
|
52
|
+
sessionId: ctx.session.id,
|
|
53
|
+
callId: event.data.callId,
|
|
54
|
+
toolName: event.data.toolName,
|
|
55
|
+
args: event.data.args,
|
|
56
|
+
});
|
|
57
|
+
try {
|
|
58
|
+
const posted = yield postMessage({
|
|
59
|
+
botToken,
|
|
60
|
+
channel: state.channelId,
|
|
61
|
+
threadTs: state.threadTs,
|
|
62
|
+
text: `Approval required for \`${event.data.toolName}\``,
|
|
63
|
+
blocks,
|
|
64
|
+
});
|
|
65
|
+
channel.state.approvalMessageByCallId = Object.assign(Object.assign({}, ((_a = state.approvalMessageByCallId) !== null && _a !== void 0 ? _a : {})), { [event.data.callId]: posted.ts });
|
|
66
|
+
yield setThreadStatus({
|
|
67
|
+
botToken,
|
|
68
|
+
channelId: state.channelId,
|
|
69
|
+
threadTs: state.threadTs,
|
|
70
|
+
status: "Awaiting approval…",
|
|
71
|
+
loadingMessages: [
|
|
72
|
+
"Awaiting approval…",
|
|
73
|
+
...SLACK_DEFAULT_LOADING_MESSAGES,
|
|
74
|
+
],
|
|
75
|
+
});
|
|
76
|
+
log.info("approval card posted", {
|
|
77
|
+
call_id: event.data.callId,
|
|
78
|
+
tool: event.data.toolName,
|
|
79
|
+
message_ts: posted.ts,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
log.warn("approval card post failed", {
|
|
84
|
+
call_id: event.data.callId,
|
|
85
|
+
error: error instanceof Error ? error.message : String(error),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
},
|
|
90
|
+
"action.approval_resolved"(event, channel) {
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
var _a;
|
|
93
|
+
var _b;
|
|
94
|
+
const log = getLog();
|
|
95
|
+
const state = channel.state;
|
|
96
|
+
const messageTs = (_a = state.approvalMessageByCallId) === null || _a === void 0 ? void 0 : _a[event.data.callId];
|
|
97
|
+
if (state.channelId !== null &&
|
|
98
|
+
messageTs !== undefined &&
|
|
99
|
+
messageTs !== "") {
|
|
100
|
+
const blocks = buildResolvedApprovalBlocks(Object.assign({ toolName: event.data.toolName, decision: event.data.decision }, (event.data.by === undefined ? {} : { byUserId: event.data.by })));
|
|
101
|
+
const verb = event.data.decision === "approve" ? "Approved" : "Denied";
|
|
102
|
+
yield updateMessage({
|
|
103
|
+
botToken,
|
|
104
|
+
channel: state.channelId,
|
|
105
|
+
ts: messageTs,
|
|
106
|
+
text: `${verb} — ${event.data.toolName}`,
|
|
107
|
+
blocks,
|
|
108
|
+
});
|
|
109
|
+
const next = Object.assign({}, ((_b = state.approvalMessageByCallId) !== null && _b !== void 0 ? _b : {}));
|
|
110
|
+
delete next[event.data.callId];
|
|
111
|
+
channel.state.approvalMessageByCallId = next;
|
|
112
|
+
}
|
|
113
|
+
if (state.channelId !== null && state.threadTs !== null) {
|
|
114
|
+
yield setThreadStatus({
|
|
115
|
+
botToken,
|
|
116
|
+
channelId: state.channelId,
|
|
117
|
+
threadTs: state.threadTs,
|
|
118
|
+
status: "Working…",
|
|
119
|
+
loadingMessages: [...SLACK_DEFAULT_LOADING_MESSAGES],
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
log.info("approval resolved in slack", {
|
|
123
|
+
call_id: event.data.callId,
|
|
124
|
+
decision: event.data.decision,
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the Slack platform channel pack.
|
|
3
|
+
*/
|
|
4
|
+
import type { AgentCloudOptions, AuthContext, ChannelEventHandlers, HostContext } from "../../types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Pluggable Slack Web API caller. Instead of holding a raw `xoxb-…` token,
|
|
7
|
+
* calls are executed by `call` — e.g. proxied through the Cursor backend
|
|
8
|
+
* with the signed-in account's Slack connection (`cursorAccount: true`).
|
|
9
|
+
* Implementations return the Slack response body (including `ok: false`
|
|
10
|
+
* platform errors) and only throw on programmer error.
|
|
11
|
+
*/
|
|
12
|
+
export interface SlackApiTransport {
|
|
13
|
+
kind: "api-transport";
|
|
14
|
+
/** Human-readable transport label for logs (e.g. `cursor-account`). */
|
|
15
|
+
label: string;
|
|
16
|
+
call(method: string, args: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
17
|
+
}
|
|
18
|
+
/** Bot token as a string, a (possibly async) resolver, or an API transport. */
|
|
19
|
+
export type SlackBotToken = string | (() => string | Promise<string>) | SlackApiTransport;
|
|
20
|
+
export interface SlackCredentials {
|
|
21
|
+
/**
|
|
22
|
+
* Bot user OAuth token (`xoxb-…`), or a {@link SlackApiTransport} that
|
|
23
|
+
* executes Web API calls without a local token. When omitted, falls back
|
|
24
|
+
* to `SLACK_BOT_TOKEN` (or `{envPrefix}_SLACK_BOT_TOKEN` via
|
|
25
|
+
* {@link SlackChannelOptions.envPrefix}).
|
|
26
|
+
*/
|
|
27
|
+
botToken?: SlackBotToken;
|
|
28
|
+
/**
|
|
29
|
+
* App-level token (`xapp-…`) for Socket Mode. Requires scope
|
|
30
|
+
* `connections:write`. Same fallback rules as `botToken`.
|
|
31
|
+
*/
|
|
32
|
+
appToken?: string | (() => string | Promise<string>);
|
|
33
|
+
}
|
|
34
|
+
/** Per-session Slack adapter state. */
|
|
35
|
+
export interface SlackChannelState {
|
|
36
|
+
channelId: string | null;
|
|
37
|
+
threadTs: string | null;
|
|
38
|
+
teamId: string | null;
|
|
39
|
+
triggeringUserId: string | null;
|
|
40
|
+
pendingToolCallMessage: string | null;
|
|
41
|
+
lastReasoningTypingAtMs: number | null;
|
|
42
|
+
lastReasoningTypingStatus: string | null;
|
|
43
|
+
/** Active chat stream message ts (`chat.startStream`). */
|
|
44
|
+
streamTs: string | null;
|
|
45
|
+
/** Channel id used when the stream was started. */
|
|
46
|
+
streamChannelId?: string | null;
|
|
47
|
+
/** Last cumulative text sent via appendStream (for incremental append). */
|
|
48
|
+
lastPostedText?: string | null;
|
|
49
|
+
/**
|
|
50
|
+
* When true, stream APIs failed for this session — use postMessage
|
|
51
|
+
* for the rest of the turn.
|
|
52
|
+
*/
|
|
53
|
+
streamingUnavailable?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Message ts of approval cards keyed by tool call id (for
|
|
56
|
+
* replacing Approve/Deny buttons after a decision).
|
|
57
|
+
*/
|
|
58
|
+
approvalMessageByCallId?: Record<string, string>;
|
|
59
|
+
}
|
|
60
|
+
export interface SlackAuthor {
|
|
61
|
+
userId: string;
|
|
62
|
+
userName?: string;
|
|
63
|
+
isBot: boolean;
|
|
64
|
+
}
|
|
65
|
+
export interface SlackMessage {
|
|
66
|
+
text: string;
|
|
67
|
+
/** Text roughly suitable for the model (mention markers cleaned). */
|
|
68
|
+
markdown: string;
|
|
69
|
+
ts: string;
|
|
70
|
+
threadTs: string;
|
|
71
|
+
channelId: string;
|
|
72
|
+
teamId?: string;
|
|
73
|
+
author?: SlackAuthor;
|
|
74
|
+
}
|
|
75
|
+
export interface SlackDispatchDecision {
|
|
76
|
+
auth: AuthContext | null;
|
|
77
|
+
/** Extra context blocks injected alongside the default Slack context. */
|
|
78
|
+
context?: string[];
|
|
79
|
+
/**
|
|
80
|
+
* Override the user prompt sent to the model. When omitted, uses the Slack
|
|
81
|
+
* message markdown (plus context blocks). Host-prepared reviews can pass
|
|
82
|
+
* a short "read pr.txt" prompt here.
|
|
83
|
+
*/
|
|
84
|
+
message?: string;
|
|
85
|
+
/**
|
|
86
|
+
* Absolute directory used as the local harness `cwd` for this session
|
|
87
|
+
* (new sessions only).
|
|
88
|
+
*/
|
|
89
|
+
workspaceDir?: string;
|
|
90
|
+
/**
|
|
91
|
+
* Relative path → contents written into the session workspace before the
|
|
92
|
+
* first turn (new sessions only). Prefer this for host-prepared files like
|
|
93
|
+
* `pr.txt` so default skill materialization stays on the session cwd.
|
|
94
|
+
*/
|
|
95
|
+
workspaceFiles?: Record<string, string>;
|
|
96
|
+
/** Session display title (new sessions only). */
|
|
97
|
+
title?: string;
|
|
98
|
+
/**
|
|
99
|
+
* Per-session cloud options (new sessions only). Use this to attach a PR to
|
|
100
|
+
* a cloud agent from an inbound Slack mention.
|
|
101
|
+
*/
|
|
102
|
+
cloud?: AgentCloudOptions;
|
|
103
|
+
/**
|
|
104
|
+
* Seed the Cursor SDK agent id for a new session (ignored when the thread
|
|
105
|
+
* already has one). Lets a handler reattach a Slack thread to an existing
|
|
106
|
+
* cloud conversation (e.g. per-PR `bc-…` affinity).
|
|
107
|
+
*/
|
|
108
|
+
sdkAgentId?: string;
|
|
109
|
+
}
|
|
110
|
+
export interface SlackSuggestedPrompt {
|
|
111
|
+
title: string;
|
|
112
|
+
message: string;
|
|
113
|
+
}
|
|
114
|
+
export interface SlackThreadHandle {
|
|
115
|
+
post(text: string, options?: {
|
|
116
|
+
blocks?: unknown[];
|
|
117
|
+
}): Promise<{
|
|
118
|
+
ts: string;
|
|
119
|
+
}>;
|
|
120
|
+
startTyping(status: string, loadingMessages?: string[]): Promise<void>;
|
|
121
|
+
setTitle(title: string): Promise<void>;
|
|
122
|
+
setSuggestedPrompts(prompts: SlackSuggestedPrompt[], title?: string): Promise<void>;
|
|
123
|
+
}
|
|
124
|
+
export interface SlackBinding {
|
|
125
|
+
thread: SlackThreadHandle;
|
|
126
|
+
slack: {
|
|
127
|
+
channelId: string;
|
|
128
|
+
threadTs: string;
|
|
129
|
+
teamId?: string;
|
|
130
|
+
};
|
|
131
|
+
/** Shared host services (MCP / GitHub / Slack). */
|
|
132
|
+
host: HostContext;
|
|
133
|
+
}
|
|
134
|
+
export type SlackMessageHandler = (ctx: SlackBinding, message: SlackMessage) => SlackDispatchDecision | null | undefined | Promise<SlackDispatchDecision | null | undefined>;
|
|
135
|
+
/**
|
|
136
|
+
* Opt-in channel watch: dispatch on posts in explicitly allowlisted
|
|
137
|
+
* channels without requiring an @mention. There is deliberately no
|
|
138
|
+
* "every channel the bot is in" wildcard — watching a channel is a
|
|
139
|
+
* per-channel decision.
|
|
140
|
+
*/
|
|
141
|
+
export interface SlackChannelPostsOptions {
|
|
142
|
+
/**
|
|
143
|
+
* Channels to watch: ids (`C…` / `G…`) or `#names`. Must be non-empty
|
|
144
|
+
* (empty is a definition error). `#names` are resolved to ids via
|
|
145
|
+
* `conversations.list` when the channel starts; the bot must be a member
|
|
146
|
+
* of each watched channel to receive its messages. Socket Mode only —
|
|
147
|
+
* `cursorAccount: true` rejects `engagement.channelPosts`.
|
|
148
|
+
*/
|
|
149
|
+
allow: string[];
|
|
150
|
+
/**
|
|
151
|
+
* Which posts dispatch. `"top-level"` (default) fires only on new
|
|
152
|
+
* channel posts — never on replies inside other people's threads, so the
|
|
153
|
+
* agent can take fresh intake but cannot barge into conversations.
|
|
154
|
+
* `"all"` also dispatches thread replies (Socket Mode only).
|
|
155
|
+
*/
|
|
156
|
+
posts?: "top-level" | "all";
|
|
157
|
+
/**
|
|
158
|
+
* Delay dispatch by this many milliseconds so rapid edits settle first.
|
|
159
|
+
* Edits during the window update the dispatched text; deleting the post
|
|
160
|
+
* cancels the dispatch. Defaults to `0` (immediate). Socket Mode only —
|
|
161
|
+
* the Cursor relay does not deliver edits/deletes.
|
|
162
|
+
*/
|
|
163
|
+
debounceMs?: number;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* How the agent engages over Slack. Omitted entirely = mentions + DMs,
|
|
167
|
+
* which is also the default for each flag — summoned, never proactive.
|
|
168
|
+
*/
|
|
169
|
+
export interface SlackEngagementOptions {
|
|
170
|
+
/** Dispatch on `app_mention`. Defaults to `true`. */
|
|
171
|
+
mentions?: boolean;
|
|
172
|
+
/** Dispatch on direct messages (`message.im`). Defaults to `true`. */
|
|
173
|
+
directMessages?: boolean;
|
|
174
|
+
/**
|
|
175
|
+
* Opt-in channel watch (see {@link SlackChannelPostsOptions}). Requires
|
|
176
|
+
* the Slack app to subscribe to `message.channels` / `message.groups`
|
|
177
|
+
* (`slack init --channel-posts`, or add the events to an existing app).
|
|
178
|
+
*/
|
|
179
|
+
channelPosts?: SlackChannelPostsOptions;
|
|
180
|
+
}
|
|
181
|
+
export interface SlackChannelOptions {
|
|
182
|
+
credentials?: SlackCredentials;
|
|
183
|
+
/**
|
|
184
|
+
* Per-agent env prefix for tokens. `envPrefix: "MY_AGENT"` reads
|
|
185
|
+
* `MY_AGENT_SLACK_BOT_TOKEN` + `MY_AGENT_SLACK_APP_TOKEN`. Prefer this over
|
|
186
|
+
* shared `SLACK_*` vars when serving multiple agents in one process.
|
|
187
|
+
* Ignored when `credentials` is set explicitly.
|
|
188
|
+
*/
|
|
189
|
+
envPrefix?: string;
|
|
190
|
+
/**
|
|
191
|
+
* Use the signed-in Cursor account's Slack connection instead of a
|
|
192
|
+
* dedicated Slack app: no bot/app tokens, no extra install. Inbound
|
|
193
|
+
* traffic (`@Cursor <agent name> …` mentions, replies in threads the
|
|
194
|
+
* agent owns, and DMs) is relayed from the Cursor backend
|
|
195
|
+
* (`/v0/slack-events`), and outbound Web API calls are proxied through it
|
|
196
|
+
* — the agent posts as the Cursor Slack app with this agent's name and
|
|
197
|
+
* icon.
|
|
198
|
+
*
|
|
199
|
+
* Both paths stay first-class: omit this (default) for the classic
|
|
200
|
+
* Socket-Mode channel with your own Slack app and tokens. Requires a
|
|
201
|
+
* signed-in host (`agent-serve login` / `CURSOR_API_KEY`) and a Slack
|
|
202
|
+
* account linked to the Cursor account. Mutually exclusive with
|
|
203
|
+
* `credentials` / `envPrefix`. `engagement.mentions: false` and
|
|
204
|
+
* `engagement.directMessages: false` are rejected (the relay always
|
|
205
|
+
* carries that traffic). Channel watching (`engagement.channelPosts`) and
|
|
206
|
+
* tool approvals / interactivity (`toolApprovals` / `interactivity`) are
|
|
207
|
+
* Socket Mode only — not supported on cursorAccount; agents must be
|
|
208
|
+
* explicitly addressed, and Approve/Deny buttons need a dedicated Slack
|
|
209
|
+
* app.
|
|
210
|
+
*/
|
|
211
|
+
cursorAccount?: boolean;
|
|
212
|
+
/**
|
|
213
|
+
* Display name registered with the Cursor backend when
|
|
214
|
+
* {@link cursorAccount} is on: `@Cursor <agentName> …` routes here, and
|
|
215
|
+
* replies post under this username. Defaults to a name derived from the
|
|
216
|
+
* agent's mount slug (or project name).
|
|
217
|
+
*/
|
|
218
|
+
agentName?: string;
|
|
219
|
+
/** Avatar for posts when {@link cursorAccount} is on. */
|
|
220
|
+
agentIcon?: {
|
|
221
|
+
url?: string;
|
|
222
|
+
emoji?: string;
|
|
223
|
+
};
|
|
224
|
+
/**
|
|
225
|
+
* Optional log sink. When omitted, uses `console.log` until the server
|
|
226
|
+
* mounts the channel and rebinds to {@link ServeOptions.logger}.
|
|
227
|
+
*/
|
|
228
|
+
logger?: (line: string) => void;
|
|
229
|
+
/**
|
|
230
|
+
* Engagement surface. Defaults to mentions + DMs only; channel watch is
|
|
231
|
+
* opt-in via {@link SlackEngagementOptions.channelPosts}.
|
|
232
|
+
*/
|
|
233
|
+
engagement?: SlackEngagementOptions;
|
|
234
|
+
onAppMention?: SlackMessageHandler;
|
|
235
|
+
onDirectMessage?: SlackMessageHandler;
|
|
236
|
+
/**
|
|
237
|
+
* Handler for watched channel posts (same contract as `onAppMention`:
|
|
238
|
+
* return `null` to skip, or a {@link SlackDispatchDecision} to dispatch).
|
|
239
|
+
* Only consulted when `engagement.channelPosts` is configured.
|
|
240
|
+
*/
|
|
241
|
+
onChannelPost?: SlackMessageHandler;
|
|
242
|
+
/**
|
|
243
|
+
* Override / extend the default stream-event handlers (typing, replies).
|
|
244
|
+
* Handlers you provide replace the matching default handlers.
|
|
245
|
+
*/
|
|
246
|
+
events?: ChannelEventHandlers<SlackChannelState>;
|
|
247
|
+
/**
|
|
248
|
+
* When true (default), reply on final `message.completed` and show typing
|
|
249
|
+
* via `assistant.threads.setStatus` (and streaming when enabled).
|
|
250
|
+
*/
|
|
251
|
+
deliverDefaults?: boolean;
|
|
252
|
+
/**
|
|
253
|
+
* Stream assistant text while the turn runs via `chat.startStream` /
|
|
254
|
+
* `appendStream` / `stopStream` (defaults to `true` for Socket Mode).
|
|
255
|
+
* Ignored when {@link cursorAccount} is on — that path never edits posts
|
|
256
|
+
* (`setStatus` + one final `chat.postMessage` only).
|
|
257
|
+
*/
|
|
258
|
+
streaming?: boolean;
|
|
259
|
+
/**
|
|
260
|
+
* Show task-style thinking steps for tool calls (stream chunks or status).
|
|
261
|
+
* Defaults to `true`.
|
|
262
|
+
*/
|
|
263
|
+
thinkingSteps?: boolean;
|
|
264
|
+
/**
|
|
265
|
+
* Opt in to Slack delivery for human-in-the-loop tool approvals.
|
|
266
|
+
*
|
|
267
|
+
* Framework park/resume is enabled by `needsApproval` on server tools.
|
|
268
|
+
* Set this to `true` to also post Block Kit Approve/Deny cards and route
|
|
269
|
+
* the Socket Mode `interactive` clicks to `resolveApproval`. Socket Mode
|
|
270
|
+
* only — rejected on `cursorAccount: true` (the Cursor Slack connection
|
|
271
|
+
* does not relay Block Kit clicks).
|
|
272
|
+
*
|
|
273
|
+
* Defaults to `false`. For custom composition, spread
|
|
274
|
+
* `buildToolApprovalEvents({ credentials })` into `events`.
|
|
275
|
+
*/
|
|
276
|
+
toolApprovals?: boolean;
|
|
277
|
+
/**
|
|
278
|
+
* Route interactive payloads to approval resolution without opting into
|
|
279
|
+
* the full {@link buildToolApprovalEvents} handler pack. Use when
|
|
280
|
+
* composing `buildToolApprovalEvents` into `events` manually. Socket Mode
|
|
281
|
+
* only — rejected on `cursorAccount: true`.
|
|
282
|
+
*/
|
|
283
|
+
interactivity?: boolean;
|
|
284
|
+
/**
|
|
285
|
+
* Suggested prompts shown when an assistant thread starts (and optionally
|
|
286
|
+
* after a turn completes).
|
|
287
|
+
*/
|
|
288
|
+
suggestedPrompts?: SlackSuggestedPrompt[];
|
|
289
|
+
suggestedPromptsTitle?: string;
|
|
290
|
+
}
|
|
291
|
+
export interface SlackManifestOptions {
|
|
292
|
+
/** Display name for the Slack app. */
|
|
293
|
+
name: string;
|
|
294
|
+
/** Bot display name (handle without @). Defaults from `name`. */
|
|
295
|
+
botDisplayName?: string;
|
|
296
|
+
/** Env profile. Affects display name suffix. */
|
|
297
|
+
env: "dev" | "prod";
|
|
298
|
+
/** Optional short description shown in the Slack app. */
|
|
299
|
+
description?: string;
|
|
300
|
+
/** Include `assistant_view` + `assistant:write` for typing status. */
|
|
301
|
+
assistant?: boolean;
|
|
302
|
+
/**
|
|
303
|
+
* Enable Slack interactivity (needed for Approve/Deny cards).
|
|
304
|
+
* Defaults to `false` — enable when using `toolApprovals: true`.
|
|
305
|
+
*/
|
|
306
|
+
interactivity?: boolean;
|
|
307
|
+
/**
|
|
308
|
+
* Subscribe to `message.channels` + `message.groups` for the opt-in
|
|
309
|
+
* channel watch (`engagement.channelPosts`). Defaults to `false`.
|
|
310
|
+
*/
|
|
311
|
+
channelPosts?: boolean;
|
|
312
|
+
/** Seed suggested prompts into the manifest `assistant_view`. */
|
|
313
|
+
suggestedPrompts?: Array<{
|
|
314
|
+
title: string;
|
|
315
|
+
message: string;
|
|
316
|
+
}>;
|
|
317
|
+
}
|
|
318
|
+
/** Soft-fail result for optional Slack API features. */
|
|
319
|
+
export type SoftSlackResult<T extends Record<string, unknown> = Record<string, unknown>> = ({
|
|
320
|
+
ok: true;
|
|
321
|
+
} & T) | {
|
|
322
|
+
ok: false;
|
|
323
|
+
error: string;
|
|
324
|
+
unsupported?: boolean;
|
|
325
|
+
};
|
|
326
|
+
//# sourceMappingURL=types.d.ts.map
|