@cursor/july 0.1.16 → 0.1.18
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/README.md +9 -4
- package/dist/bin/agent-serve.js +60 -2
- package/dist/channels/slack/api.d.ts.map +1 -1
- package/dist/channels/slack/api.js +13 -3
- package/dist/channels/slack/auth.d.ts +7 -1
- package/dist/channels/slack/auth.d.ts.map +1 -1
- package/dist/channels/slack/auth.js +14 -0
- package/dist/channels/slack/blocks.d.ts +61 -0
- package/dist/channels/slack/blocks.d.ts.map +1 -0
- package/dist/channels/slack/blocks.js +90 -0
- package/dist/channels/slack/cursor-account.d.ts.map +1 -1
- package/dist/channels/slack/cursor-account.js +1 -1
- package/dist/channels/slack/defaults.d.ts +2 -0
- package/dist/channels/slack/defaults.d.ts.map +1 -1
- package/dist/channels/slack/defaults.js +29 -3
- package/dist/channels/slack/dispatch.d.ts +3 -17
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +4 -1
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +6 -1
- package/dist/channels/slack/index.d.ts +2 -0
- package/dist/channels/slack/index.d.ts.map +1 -1
- package/dist/channels/slack/index.js +2 -0
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +4 -1
- package/dist/channels/slack/interactive.d.ts +39 -3
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +153 -7
- package/dist/channels/slack/manifest.d.ts +13 -0
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +36 -14
- package/dist/channels/slack/message-body.d.ts +13 -0
- package/dist/channels/slack/message-body.d.ts.map +1 -0
- package/dist/channels/slack/message-body.js +82 -0
- package/dist/channels/slack/setup.d.ts +4 -1
- package/dist/channels/slack/setup.d.ts.map +1 -1
- package/dist/channels/slack/setup.js +16 -2
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +24 -3
- package/dist/channels/slack/thread-context.d.ts +0 -2
- package/dist/channels/slack/thread-context.d.ts.map +1 -1
- package/dist/channels/slack/thread-context.js +1 -65
- package/dist/channels/slack/types.d.ts +93 -1
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/connections.d.ts +4 -1
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +4 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +3 -3
- package/dist/docs/assets/{app.DjHC-Ggf.js → app.BR5EdVSq.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.BOzkeUi8.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DwviwmIq.js → VPLocalSearchBox.CNCzfUKC.js} +1 -1
- package/dist/docs/assets/chunks/{theme.BIpeYSon.js → theme.CwKvMSWv.js} +2 -2
- package/dist/docs/assets/{example-agents_security-reviewer.md.BZSNycMf.js → example-agents_security-reviewer.md.Dhj_m7_B.js} +1 -1
- package/dist/docs/assets/{guides_mcp-oauth.md.DqmEOQY1.js → guides_mcp-oauth.md.Dd8EgSem.js} +3 -2
- package/dist/docs/assets/{guides_mcp-oauth.md.DqmEOQY1.lean.js → guides_mcp-oauth.md.Dd8EgSem.lean.js} +1 -1
- package/dist/docs/assets/{guides_slack.md.FWale6Ip.js → guides_slack.md.D_xFKlnF.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.CsSr3rDz.js → reference_connections.md.B9Q3TOve.js} +12 -5
- package/dist/docs/assets/{reference_connections.md.CsSr3rDz.lean.js → reference_connections.md.B9Q3TOve.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +3 -3
- package/dist/docs/concepts.html +3 -3
- package/dist/docs/deployment.html +3 -3
- package/dist/docs/evals.html +3 -3
- package/dist/docs/example-agents/approval-buddy.html +3 -3
- package/dist/docs/example-agents/benny.html +3 -3
- package/dist/docs/example-agents/bugbot.html +3 -3
- package/dist/docs/example-agents/codebase-wiki.html +3 -3
- package/dist/docs/example-agents/codeowners-review.html +3 -3
- package/dist/docs/example-agents/concierge.html +3 -3
- package/dist/docs/example-agents/fsd.html +3 -3
- package/dist/docs/example-agents/index.html +3 -3
- package/dist/docs/example-agents/knowledge-base.html +3 -3
- package/dist/docs/example-agents/oncall.html +3 -3
- package/dist/docs/example-agents/security-reviewer.html +5 -5
- package/dist/docs/example-agents/slack-agent.html +3 -3
- package/dist/docs/example-agents/weather-agent.html +3 -3
- package/dist/docs/guides/agent-to-agent.html +3 -3
- package/dist/docs/guides/cloud-runtime.html +3 -3
- package/dist/docs/guides/github.html +3 -3
- package/dist/docs/guides/human-in-the-loop.html +3 -3
- package/dist/docs/guides/mcp-oauth.html +6 -5
- package/dist/docs/guides/slack.html +5 -5
- package/dist/docs/guides/webhooks.html +3 -3
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +3 -3
- package/dist/docs/index.html +3 -3
- package/dist/docs/quickstart.html +3 -3
- package/dist/docs/reference/agent-config.html +3 -3
- package/dist/docs/reference/channels.html +3 -3
- package/dist/docs/reference/cli.html +3 -3
- package/dist/docs/reference/connections.html +14 -7
- package/dist/docs/reference/hooks.html +3 -3
- package/dist/docs/reference/http-api.html +3 -3
- package/dist/docs/reference/instructions.html +3 -3
- package/dist/docs/reference/playground.html +3 -3
- package/dist/docs/reference/project-layout.html +3 -3
- package/dist/docs/reference/prompt.html +3 -3
- package/dist/docs/reference/schedules.html +3 -3
- package/dist/docs/reference/sessions.html +3 -3
- package/dist/docs/reference/skills.html +3 -3
- package/dist/docs/reference/subagents.html +3 -3
- package/dist/docs/reference/tools.html +3 -3
- package/dist/docs/scaffolding-agents.html +3 -3
- package/dist/docs/storage.html +3 -3
- package/dist/docs/troubleshooting.html +3 -3
- package/dist/evals/assertions.d.ts +190 -0
- package/dist/evals/assertions.d.ts.map +1 -0
- package/dist/evals/assertions.js +461 -0
- package/dist/evals/expect.d.ts +95 -0
- package/dist/evals/expect.d.ts.map +1 -0
- package/dist/evals/expect.js +194 -0
- package/dist/evals/judge.d.ts +133 -0
- package/dist/evals/judge.d.ts.map +1 -0
- package/dist/evals/judge.js +228 -0
- package/dist/evals/loaders.d.ts +51 -0
- package/dist/evals/loaders.d.ts.map +1 -0
- package/dist/evals/loaders.js +124 -0
- package/dist/evals/matchers.d.ts +95 -0
- package/dist/evals/matchers.d.ts.map +1 -0
- package/dist/evals/matchers.js +145 -0
- package/dist/evals/reporters.d.ts +70 -0
- package/dist/evals/reporters.d.ts.map +1 -0
- package/dist/evals/reporters.js +221 -0
- package/dist/evals/results.d.ts +103 -0
- package/dist/evals/results.d.ts.map +1 -0
- package/dist/evals/results.js +28 -0
- package/dist/evals/run-facts.d.ts +77 -0
- package/dist/evals/run-facts.d.ts.map +1 -0
- package/dist/evals/run-facts.js +187 -0
- package/dist/evals.d.ts +118 -31
- package/dist/evals.d.ts.map +1 -1
- package/dist/evals.js +46 -12
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/builtin-tools/index.d.ts +10 -0
- package/dist/internal/builtin-tools/index.d.ts.map +1 -0
- package/dist/internal/builtin-tools/index.js +27 -0
- package/dist/internal/builtin-tools/reminders.d.ts +9 -0
- package/dist/internal/builtin-tools/reminders.d.ts.map +1 -0
- package/dist/internal/builtin-tools/reminders.js +138 -0
- package/dist/internal/cli-ax.d.ts +27 -0
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +90 -12
- package/dist/internal/cli-mcp.d.ts +8 -0
- package/dist/internal/cli-mcp.d.ts.map +1 -1
- package/dist/internal/cli-mcp.js +98 -0
- package/dist/internal/cli-slack.d.ts +29 -1
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +799 -13
- package/dist/internal/cursor-event-relay.d.ts +30 -0
- package/dist/internal/cursor-event-relay.d.ts.map +1 -1
- package/dist/internal/cursor-event-relay.js +37 -0
- package/dist/internal/deploy-client.d.ts +7 -0
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +9 -0
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +70 -9
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +2 -0
- package/dist/internal/eval-judge-model.d.ts +59 -0
- package/dist/internal/eval-judge-model.d.ts.map +1 -0
- package/dist/internal/eval-judge-model.js +131 -0
- package/dist/internal/eval-run-store.d.ts.map +1 -1
- package/dist/internal/eval-run-store.js +12 -20
- package/dist/internal/eval-runner.d.ts +31 -25
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +329 -126
- package/dist/internal/evals-client.d.ts.map +1 -1
- package/dist/internal/evals-client.js +4 -1
- package/dist/internal/local-env.d.ts +8 -0
- package/dist/internal/local-env.d.ts.map +1 -0
- package/dist/internal/local-env.js +47 -0
- package/dist/internal/playground/static.d.ts +3 -0
- package/dist/internal/playground/static.d.ts.map +1 -1
- package/dist/internal/playground/static.js +3 -0
- package/dist/internal/reminder-runner.d.ts +7 -0
- package/dist/internal/reminder-runner.d.ts.map +1 -1
- package/dist/internal/reminder-runner.js +21 -0
- package/dist/internal/run-client.d.ts +15 -0
- package/dist/internal/run-client.d.ts.map +1 -1
- package/dist/internal/run-client.js +3 -2
- package/dist/internal/sdk-runner.d.ts +51 -1
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +176 -36
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +11 -1
- package/dist/internal/session-engine.d.ts +18 -5
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +81 -19
- package/dist/internal/slack-provision-client.d.ts +133 -0
- package/dist/internal/slack-provision-client.d.ts.map +1 -0
- package/dist/internal/slack-provision-client.js +286 -0
- package/dist/playground/assets/cursor-icons-16-f_W_ogc-.woff2 +0 -0
- package/dist/playground/assets/index-DRjS5klQ.js +85 -0
- package/dist/playground/assets/index-TCDs-UhZ.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +98 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +26 -0
- package/docs/example-agents/security-reviewer.md +1 -1
- package/docs/guides/mcp-oauth.md +10 -5
- package/docs/guides/slack.md +3 -2
- package/docs/reference/connections.md +28 -18
- package/package.json +20 -2
- package/skills/create-agent/SKILL.md +15 -7
- package/skills/debug/SKILL.md +3 -1
- package/skills/mcp-auth/SKILL.md +1 -1
- package/skills/setup-slack/SKILL.md +177 -11
- package/src/bin/agent-serve.ts +63 -2
- package/src/channels/slack/api.ts +16 -3
- package/src/channels/slack/auth.ts +16 -1
- package/src/channels/slack/blocks.ts +139 -0
- package/src/channels/slack/cursor-account.ts +1 -0
- package/src/channels/slack/defaults.ts +32 -4
- package/src/channels/slack/dispatch.ts +6 -19
- package/src/channels/slack/inbound.ts +6 -1
- package/src/channels/slack/index.ts +2 -0
- package/src/channels/slack/init.ts +3 -0
- package/src/channels/slack/interactive.ts +184 -19
- package/src/channels/slack/manifest.ts +37 -6
- package/src/channels/slack/message-body.ts +90 -0
- package/src/channels/slack/setup.ts +16 -2
- package/src/channels/slack/slack-channel.ts +37 -6
- package/src/channels/slack/thread-context.ts +1 -69
- package/src/channels/slack/types.ts +105 -1
- package/src/connections.ts +4 -1
- package/src/evals/assertions.ts +704 -0
- package/src/evals/expect.ts +272 -0
- package/src/evals/judge.ts +346 -0
- package/src/evals/loaders.ts +113 -0
- package/src/evals/matchers.ts +246 -0
- package/src/evals/reporters.ts +274 -0
- package/src/evals/results.ts +132 -0
- package/src/evals/run-facts.ts +274 -0
- package/src/evals.ts +205 -42
- package/src/index.ts +2 -0
- package/src/internal/builtin-tools/index.ts +40 -0
- package/src/internal/builtin-tools/reminders.ts +158 -0
- package/src/internal/cli-ax.ts +134 -15
- package/src/internal/cli-mcp.ts +118 -5
- package/src/internal/cli-slack.ts +1017 -15
- package/src/internal/cursor-event-relay.ts +67 -0
- package/src/internal/deploy-client.ts +10 -0
- package/src/internal/discovery.ts +83 -5
- package/src/internal/distribution.ts +2 -0
- package/src/internal/eval-judge-model.ts +148 -0
- package/src/internal/eval-run-store.ts +10 -14
- package/src/internal/eval-runner.ts +460 -214
- package/src/internal/evals-client.ts +5 -0
- package/src/internal/local-env.ts +53 -0
- package/src/internal/playground/static.ts +3 -0
- package/src/internal/reminder-runner.ts +30 -0
- package/src/internal/run-client.ts +17 -1
- package/src/internal/sdk-runner.ts +234 -35
- package/src/internal/server.ts +12 -0
- package/src/internal/session-engine.ts +103 -21
- package/src/internal/slack-provision-client.ts +442 -0
- package/src/types.ts +125 -4
- package/dist/channels/slack/post-update-delivery.d.ts +0 -85
- package/dist/channels/slack/post-update-delivery.d.ts.map +0 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DZtu0ZIc.js +0 -1
- package/dist/internal/json-dir-store.d.ts +0 -32
- package/dist/internal/json-dir-store.d.ts.map +0 -1
- package/dist/internal/persistence-coordinator.d.ts +0 -127
- package/dist/internal/persistence-coordinator.d.ts.map +0 -1
- package/dist/persistence.d.ts +0 -184
- package/dist/persistence.d.ts.map +0 -1
- package/dist/playground/assets/cursor-icons-16-CQ50JpfO.woff2 +0 -0
- package/dist/playground/assets/index-Bwl4Onx4.js +0 -85
- package/dist/playground/assets/index-ByV4nfch.css +0 -1
- /package/dist/docs/assets/{example-agents_security-reviewer.md.BZSNycMf.lean.js → example-agents_security-reviewer.md.Dhj_m7_B.lean.js} +0 -0
- /package/dist/docs/assets/{guides_slack.md.FWale6Ip.lean.js → guides_slack.md.D_xFKlnF.lean.js} +0 -0
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { callSlackApiSoft } from "./api.js";
|
|
9
9
|
import { slackTextToMarkdown } from "./inbound.js";
|
|
10
10
|
import { defaultSlackLog, type SlackLog } from "./log.js";
|
|
11
|
+
import { slackApiMessageBody } from "./message-body.js";
|
|
11
12
|
import type { SlackBotToken, SoftSlackResult } from "./types.js";
|
|
12
13
|
|
|
13
14
|
/** Cap replies fetched from Slack (plus the parent). */
|
|
@@ -95,75 +96,6 @@ function asString(value: unknown): string | undefined {
|
|
|
95
96
|
return typeof value === "string" ? value : undefined;
|
|
96
97
|
}
|
|
97
98
|
|
|
98
|
-
/** Pull readable text out of Slack attachment / Block Kit payloads. */
|
|
99
|
-
export function slackApiMessageBody(message: JsonRecord): string {
|
|
100
|
-
const parts: string[] = [];
|
|
101
|
-
const text = asString(message.text);
|
|
102
|
-
if (text !== undefined && text.trim() !== "") {
|
|
103
|
-
parts.push(text);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
const attachments = Array.isArray(message.attachments)
|
|
107
|
-
? message.attachments
|
|
108
|
-
: [];
|
|
109
|
-
for (const attachment of attachments) {
|
|
110
|
-
const rec = asRecord(attachment);
|
|
111
|
-
if (rec === null) {
|
|
112
|
-
continue;
|
|
113
|
-
}
|
|
114
|
-
for (const key of [
|
|
115
|
-
"pretext",
|
|
116
|
-
"title",
|
|
117
|
-
"text",
|
|
118
|
-
"fallback",
|
|
119
|
-
"footer",
|
|
120
|
-
] as const) {
|
|
121
|
-
const value = asString(rec[key]);
|
|
122
|
-
if (value !== undefined && value.trim() !== "") {
|
|
123
|
-
parts.push(value);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
const titleLink = asString(rec.title_link);
|
|
127
|
-
if (titleLink !== undefined && titleLink.trim() !== "") {
|
|
128
|
-
parts.push(titleLink);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
const blocks = Array.isArray(message.blocks) ? message.blocks : [];
|
|
133
|
-
for (const block of blocks) {
|
|
134
|
-
const rec = asRecord(block);
|
|
135
|
-
if (rec === null) {
|
|
136
|
-
continue;
|
|
137
|
-
}
|
|
138
|
-
const blockText = asRecord(rec.text);
|
|
139
|
-
const blockTextValue = asString(blockText?.text);
|
|
140
|
-
if (blockTextValue !== undefined && blockTextValue.trim() !== "") {
|
|
141
|
-
parts.push(blockTextValue);
|
|
142
|
-
}
|
|
143
|
-
const fields = Array.isArray(rec.fields) ? rec.fields : [];
|
|
144
|
-
for (const field of fields) {
|
|
145
|
-
const fieldRec = asRecord(field);
|
|
146
|
-
const fieldText = asString(fieldRec?.text);
|
|
147
|
-
if (fieldText !== undefined && fieldText.trim() !== "") {
|
|
148
|
-
parts.push(fieldText);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// Dedupe identical chunks (Datadog often repeats text/fallback across fields).
|
|
154
|
-
const seen = new Set<string>();
|
|
155
|
-
const deduped: string[] = [];
|
|
156
|
-
for (const part of parts) {
|
|
157
|
-
const trimmed = part.trim();
|
|
158
|
-
if (trimmed === "" || seen.has(trimmed)) {
|
|
159
|
-
continue;
|
|
160
|
-
}
|
|
161
|
-
seen.add(trimmed);
|
|
162
|
-
deduped.push(trimmed);
|
|
163
|
-
}
|
|
164
|
-
return deduped.join("\n");
|
|
165
|
-
}
|
|
166
|
-
|
|
167
99
|
function formatThreadEntry(
|
|
168
100
|
message: JsonRecord,
|
|
169
101
|
role: "parent" | "reply"
|
|
@@ -89,8 +89,16 @@ export interface SlackAuthor {
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
export interface SlackMessage {
|
|
92
|
+
/** Raw top-level `text` exactly as Slack sent it. Often empty on bot posts. */
|
|
92
93
|
text: string;
|
|
93
|
-
/**
|
|
94
|
+
/**
|
|
95
|
+
* Raw mrkdwn body: top-level `text` plus attachment / Block Kit content.
|
|
96
|
+
* Alert feeds (Datadog, PagerDuty) leave `text` empty and put the whole
|
|
97
|
+
* notification in attachments, so read `body` for message content. Unlike
|
|
98
|
+
* {@link markdown} this keeps `<url|label>` links intact.
|
|
99
|
+
*/
|
|
100
|
+
body: string;
|
|
101
|
+
/** Body roughly suitable for the model (mention markers cleaned). */
|
|
94
102
|
markdown: string;
|
|
95
103
|
ts: string;
|
|
96
104
|
threadTs: string;
|
|
@@ -175,6 +183,83 @@ export type SlackMessageHandler = (
|
|
|
175
183
|
| undefined
|
|
176
184
|
| Promise<SlackDispatchDecision | null | undefined>;
|
|
177
185
|
|
|
186
|
+
/**
|
|
187
|
+
* Host probes into a Slack thread's continuation. Optional on dispatch
|
|
188
|
+
* deps; the serve host wires them at channel start.
|
|
189
|
+
*/
|
|
190
|
+
export interface SlackContinuationProbes {
|
|
191
|
+
/**
|
|
192
|
+
* When set, full-thread hydration runs only for cold-start turns (no
|
|
193
|
+
* existing session). Warm turns load a `<slack_thread_delta>` instead.
|
|
194
|
+
*/
|
|
195
|
+
hasContinuationSession?: (continuationToken: string) => Promise<boolean>;
|
|
196
|
+
/** True when a turn is already running for this Slack continuation. */
|
|
197
|
+
isContinuationBusy?: (continuationToken: string) => Promise<boolean>;
|
|
198
|
+
/**
|
|
199
|
+
* Warm-delta watermark from session channel state (`lastBotMessageTs`).
|
|
200
|
+
* When absent, delta falls back to the last matching bot post in-thread.
|
|
201
|
+
*/
|
|
202
|
+
getContinuationLastBotMessageTs?: (
|
|
203
|
+
continuationToken: string
|
|
204
|
+
) => Promise<string | undefined>;
|
|
205
|
+
/** Cancel the active turn + clear coalesced nudges for this continuation. */
|
|
206
|
+
interruptContinuation?: (continuationToken: string) => Promise<boolean>;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* A Block Kit action click (Socket Mode `block_actions` payload) that the
|
|
211
|
+
* framework does not own — the built-in tool-approval Approve/Deny actions
|
|
212
|
+
* are routed to `resolveApproval` before author handlers see anything.
|
|
213
|
+
*/
|
|
214
|
+
export interface SlackBlockAction {
|
|
215
|
+
/** `action_id` of the clicked element. */
|
|
216
|
+
actionId: string;
|
|
217
|
+
/** `block_id` of the actions row holding the element (Slack always sets one). */
|
|
218
|
+
blockId: string;
|
|
219
|
+
/**
|
|
220
|
+
* Element `value` payload; empty string when absent (button-style
|
|
221
|
+
* elements only — select/overflow `selected_option`s are not read).
|
|
222
|
+
*/
|
|
223
|
+
value: string;
|
|
224
|
+
/** Plain-text label of the clicked element, when present. */
|
|
225
|
+
label?: string;
|
|
226
|
+
channelId: string;
|
|
227
|
+
/**
|
|
228
|
+
* Thread of the message carrying the element (the message's own ts when
|
|
229
|
+
* it is a top-level post — clicks on a thread root stay in its thread).
|
|
230
|
+
*/
|
|
231
|
+
threadTs: string;
|
|
232
|
+
/** The message carrying the clicked element. */
|
|
233
|
+
messageTs: string;
|
|
234
|
+
/** That message's blocks, for `chat.update` resolution cards. */
|
|
235
|
+
messageBlocks?: unknown[];
|
|
236
|
+
/** Slack user who clicked. */
|
|
237
|
+
userId: string;
|
|
238
|
+
userName?: string;
|
|
239
|
+
teamId?: string;
|
|
240
|
+
/**
|
|
241
|
+
* Slack `action_ts` — unique per click; block-action dispatch dedupes on
|
|
242
|
+
* it. Empty when the payload omitted it (malformed; never dispatched).
|
|
243
|
+
*/
|
|
244
|
+
actionTs: string;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Author handler for {@link SlackBlockAction} clicks. Return a
|
|
249
|
+
* {@link SlackDispatchDecision} to dispatch a turn on the click's thread —
|
|
250
|
+
* the click is dispatched like an inbound message from the clicking user
|
|
251
|
+
* (thread-scoped continuation, `<slack_context>` naming the clicker) — or
|
|
252
|
+
* `null` to ignore the click.
|
|
253
|
+
*/
|
|
254
|
+
export type SlackBlockActionHandler = (
|
|
255
|
+
ctx: SlackBinding,
|
|
256
|
+
action: SlackBlockAction
|
|
257
|
+
) =>
|
|
258
|
+
| SlackDispatchDecision
|
|
259
|
+
| null
|
|
260
|
+
| undefined
|
|
261
|
+
| Promise<SlackDispatchDecision | null | undefined>;
|
|
262
|
+
|
|
178
263
|
/**
|
|
179
264
|
* Opt-in channel watch: dispatch on posts in explicitly allowlisted
|
|
180
265
|
* channels without requiring an @mention. There is deliberately no
|
|
@@ -371,6 +456,18 @@ export interface SlackChannelOptions {
|
|
|
371
456
|
* only — rejected on `cursorAccount: true`.
|
|
372
457
|
*/
|
|
373
458
|
interactivity?: boolean;
|
|
459
|
+
/**
|
|
460
|
+
* Handler for Block Kit actions the framework does not own (the built-in
|
|
461
|
+
* tool-approval Approve/Deny clicks are routed to `resolveApproval`
|
|
462
|
+
* first). Return a {@link SlackDispatchDecision} — typically with a
|
|
463
|
+
* thread-scoped auth via `buildSlackAuthContext` so replies in the same
|
|
464
|
+
* thread continue the session — to dispatch a turn on the click's
|
|
465
|
+
* thread, or `null` to ignore the click. Setting this implies
|
|
466
|
+
* interactive routing; the Slack app manifest still needs
|
|
467
|
+
* `interactivity` enabled (`buildSlackManifest({ interactivity: true })`).
|
|
468
|
+
* Socket Mode only — rejected on `cursorAccount: true`.
|
|
469
|
+
*/
|
|
470
|
+
onBlockAction?: SlackBlockActionHandler;
|
|
374
471
|
/**
|
|
375
472
|
* Suggested prompts shown when an assistant thread starts (and optionally
|
|
376
473
|
* after a turn completes).
|
|
@@ -416,6 +513,13 @@ export interface SlackManifestOptions {
|
|
|
416
513
|
channelPosts?: boolean;
|
|
417
514
|
/** Seed suggested prompts into the manifest `assistant_view`. */
|
|
418
515
|
suggestedPrompts?: Array<{ title: string; message: string }>;
|
|
516
|
+
/**
|
|
517
|
+
* Emit `settings.managed_app_settings`. Defaults to `true` — Cursor
|
|
518
|
+
* provisions these apps through its manager app. Pass `false` for a
|
|
519
|
+
* manifest a human pastes into api.slack.com: only a manager user token
|
|
520
|
+
* may set that block.
|
|
521
|
+
*/
|
|
522
|
+
managedByCursor?: boolean;
|
|
419
523
|
}
|
|
420
524
|
|
|
421
525
|
/** Soft-fail result for optional Slack API features. */
|
package/src/connections.ts
CHANGED
|
@@ -30,8 +30,10 @@
|
|
|
30
30
|
* to be signed in (`agent-serve login` or `CURSOR_API_KEY`):
|
|
31
31
|
*
|
|
32
32
|
* ```ts
|
|
33
|
-
* // agent/mcp-connections/cursor.ts — every connected server
|
|
33
|
+
* // agent/mcp-connections/cursor.ts — every connected server (no allowlist)
|
|
34
34
|
* export default defineConnection({ cursorAccount: true });
|
|
35
|
+
* // equivalent explicit form:
|
|
36
|
+
* export default defineConnection({ cursorAccount: true, servers: "*" });
|
|
35
37
|
*
|
|
36
38
|
* // or restrict to specific connectors by name
|
|
37
39
|
* export default defineConnection({ cursorAccount: true, servers: ["Linear"] });
|
|
@@ -86,6 +88,7 @@ export type {
|
|
|
86
88
|
HostMcpRegistry,
|
|
87
89
|
HostMcpToolInfo,
|
|
88
90
|
} from "./types.js";
|
|
91
|
+
export { normalizeCursorAccountServers } from "./types.js";
|
|
89
92
|
|
|
90
93
|
export function defineConnection(
|
|
91
94
|
config: ConnectionConfig
|