@cursor/july 0.1.74 → 0.1.76
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/dist/channels/checks.d.ts +111 -0
- package/dist/channels/checks.d.ts.map +1 -0
- package/dist/channels/checks.js +86 -0
- package/dist/channels/deployments/deployments-channel.d.ts +44 -0
- package/dist/channels/deployments/deployments-channel.d.ts.map +1 -0
- package/dist/channels/deployments/deployments-channel.js +92 -0
- package/dist/channels/deployments/index.d.ts +26 -0
- package/dist/channels/deployments/index.d.ts.map +1 -0
- package/dist/channels/deployments/index.js +25 -0
- package/dist/channels/deployments/types.d.ts +69 -0
- package/dist/channels/deployments/types.d.ts.map +1 -0
- package/dist/channels/deployments/types.js +6 -0
- package/dist/channels/github/checks.d.ts +13 -48
- package/dist/channels/github/checks.d.ts.map +1 -1
- package/dist/channels/github/checks.js +56 -64
- package/dist/channels/origin/api.d.ts +100 -0
- package/dist/channels/origin/api.d.ts.map +1 -0
- package/dist/channels/origin/api.js +225 -0
- package/dist/channels/origin/binding.d.ts +44 -0
- package/dist/channels/origin/binding.d.ts.map +1 -0
- package/dist/channels/origin/binding.js +45 -0
- package/dist/channels/origin/checks.d.ts +107 -0
- package/dist/channels/origin/checks.d.ts.map +1 -0
- package/dist/channels/origin/checks.js +145 -0
- package/dist/channels/origin/index.d.ts +3 -0
- package/dist/channels/origin/index.d.ts.map +1 -1
- package/dist/channels/origin/index.js +3 -0
- package/dist/channels/origin/origin-channel.d.ts +4 -4
- package/dist/channels/origin/origin-channel.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.js +12 -2
- package/dist/channels/origin/types.d.ts +36 -0
- package/dist/channels/origin/types.d.ts.map +1 -1
- package/dist/channels.d.ts +1 -0
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +1 -0
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +3 -3
- package/dist/docs/assets/{app.BETd-WqU.js → app.b8bhB2SV.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DGZeXVqn.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.wEaGEmV9.js → VPLocalSearchBox.lLSeIyWw.js} +1 -1
- package/dist/docs/assets/chunks/{theme.DNDicFOP.js → theme.C_owesa-.js} +2 -2
- package/dist/docs/assets/{reference_channels.md.MN8iDy8V.js → reference_channels.md.G5GysZ7e.js} +2 -2
- package/dist/docs/assets/{reference_channels.md.MN8iDy8V.lean.js → reference_channels.md.G5GysZ7e.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 +3 -3
- 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/convert-automation.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 +3 -3
- package/dist/docs/guides/opentelemetry.html +3 -3
- package/dist/docs/guides/slack.html +3 -3
- 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/artifacts.html +3 -3
- package/dist/docs/reference/channels.html +5 -5
- package/dist/docs/reference/cli.html +3 -3
- package/dist/docs/reference/connections.html +3 -3
- 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/templates/agentic-owners.html +3 -3
- package/dist/docs/templates/demo.html +3 -3
- package/dist/docs/templates/pr-autofixer.html +3 -3
- package/dist/docs/templates/security-reviewer.html +3 -3
- package/dist/docs/templates/triage.html +3 -3
- package/dist/docs/troubleshooting.html +3 -3
- package/dist/internal/authored-alias-hooks.d.ts +12 -0
- package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
- package/dist/internal/authored-alias-hooks.js +60 -8
- package/dist/internal/authored-loaders.d.ts +5 -3
- package/dist/internal/authored-loaders.d.ts.map +1 -1
- package/dist/internal/authored-loaders.js +13 -4
- package/dist/internal/cursor-deployment-relay.d.ts +77 -0
- package/dist/internal/cursor-deployment-relay.d.ts.map +1 -0
- package/dist/internal/cursor-deployment-relay.js +201 -0
- package/dist/internal/deployment-scm-event-stream.js +4 -4
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +1 -0
- package/dist/internal/review-comments.d.ts +62 -0
- package/dist/internal/review-comments.d.ts.map +1 -1
- package/dist/internal/review-comments.js +199 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +114 -5
- package/dist/playground/assets/{index-D_8I9TM0.js → index-BWqjJcRo.js} +1 -1
- package/dist/playground/assets/index-Bfwz2yLN.css +1 -0
- package/dist/playground/index.html +2 -2
- package/docs/reference/channels.md +15 -0
- package/package.json +7 -1
- package/src/channels/checks.ts +185 -0
- package/src/channels/deployments/deployments-channel.ts +109 -0
- package/src/channels/deployments/index.ts +26 -0
- package/src/channels/deployments/types.ts +80 -0
- package/src/channels/github/checks.ts +90 -115
- package/src/channels/origin/api.ts +318 -0
- package/src/channels/origin/binding.ts +96 -0
- package/src/channels/origin/checks.ts +250 -0
- package/src/channels/origin/index.ts +3 -0
- package/src/channels/origin/origin-channel.ts +18 -6
- package/src/channels/origin/types.ts +37 -0
- package/src/channels.ts +16 -0
- package/src/internal/authored-alias-hooks.ts +75 -7
- package/src/internal/authored-loaders.ts +15 -4
- package/src/internal/cursor-deployment-relay.ts +274 -0
- package/src/internal/deployment-scm-event-stream.ts +4 -4
- package/src/internal/distribution.ts +1 -0
- package/src/internal/review-comments.ts +286 -0
- package/src/internal/server.ts +149 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.DM5INS71.js +0 -1
- package/dist/playground/assets/index-M3nSMc6_.css +0 -1
package/src/internal/server.ts
CHANGED
|
@@ -14,6 +14,11 @@ import {
|
|
|
14
14
|
} from "node:http";
|
|
15
15
|
import type { AddressInfo } from "node:net";
|
|
16
16
|
import { join } from "node:path";
|
|
17
|
+
import {
|
|
18
|
+
dispatchDeploymentEvent,
|
|
19
|
+
getDeploymentsChannelOptions,
|
|
20
|
+
} from "../channels/deployments/deployments-channel.js";
|
|
21
|
+
import type { DeploymentsChannelOptions } from "../channels/deployments/types.js";
|
|
17
22
|
import {
|
|
18
23
|
type CursorGithubRepoScope,
|
|
19
24
|
createCursorAccountGithubTokenResolver,
|
|
@@ -62,6 +67,12 @@ import {
|
|
|
62
67
|
SIGN_IN_HINT,
|
|
63
68
|
} from "./cursor/credentials.js";
|
|
64
69
|
import { CursorGithubCredentialProvider } from "./cursor/github-credentials.js";
|
|
70
|
+
import {
|
|
71
|
+
DeploymentEventRelay,
|
|
72
|
+
fanOutDeploymentEvent,
|
|
73
|
+
type ResolvedSubscription,
|
|
74
|
+
resolveDeploymentSubscriptions,
|
|
75
|
+
} from "./cursor-deployment-relay.js";
|
|
65
76
|
import {
|
|
66
77
|
CursorEventRelay,
|
|
67
78
|
type CursorScmSubscription,
|
|
@@ -774,6 +785,15 @@ export async function startServer(
|
|
|
774
785
|
(cursorGithubTargets.length > 0 || cursorOriginTargets.length > 0),
|
|
775
786
|
});
|
|
776
787
|
|
|
788
|
+
// Cursor deployment-events relay: automatic when a mounted agent authored
|
|
789
|
+
// `deploymentsChannel({ ... })`.
|
|
790
|
+
const cursorDeploymentRelay = startCursorDeploymentRelay({
|
|
791
|
+
options,
|
|
792
|
+
runtimes,
|
|
793
|
+
accountKey,
|
|
794
|
+
logger,
|
|
795
|
+
});
|
|
796
|
+
|
|
777
797
|
const server = createServer((req, res) => {
|
|
778
798
|
void instrumentHttp(otelRuntime, req, res, () =>
|
|
779
799
|
handleRequest(router, req, res, logger)
|
|
@@ -793,6 +813,7 @@ export async function startServer(
|
|
|
793
813
|
logger,
|
|
794
814
|
});
|
|
795
815
|
} catch (error) {
|
|
816
|
+
await cursorDeploymentRelay?.stop();
|
|
796
817
|
await cursorEventRelay?.stop();
|
|
797
818
|
await cursorSlackRelay?.stop();
|
|
798
819
|
cursorGithubCredentials?.stop();
|
|
@@ -953,6 +974,7 @@ export async function startServer(
|
|
|
953
974
|
},
|
|
954
975
|
close: async () => {
|
|
955
976
|
playgroundDev?.stop();
|
|
977
|
+
await cursorDeploymentRelay?.stop();
|
|
956
978
|
await cursorEventRelay?.stop();
|
|
957
979
|
await cursorSlackRelay?.stop();
|
|
958
980
|
for (const runtime of runtimes) {
|
|
@@ -2170,6 +2192,133 @@ function collectCursorSlackTargets(
|
|
|
2170
2192
|
* the pack's normal inbound path. Requires a signed-in host — fail serve
|
|
2171
2193
|
* fast rather than mounting channels that can never hear or speak.
|
|
2172
2194
|
*/
|
|
2195
|
+
interface CursorDeploymentTarget {
|
|
2196
|
+
runtime: MountedRuntime;
|
|
2197
|
+
channelId: string;
|
|
2198
|
+
options: DeploymentsChannelOptions;
|
|
2199
|
+
subscriptions: ResolvedSubscription[];
|
|
2200
|
+
}
|
|
2201
|
+
|
|
2202
|
+
/** Every mounted `deploymentsChannel`, with its resolved subscriptions. */
|
|
2203
|
+
function collectCursorDeploymentTargets(
|
|
2204
|
+
runtimes: MountedRuntime[],
|
|
2205
|
+
skipped: string[]
|
|
2206
|
+
): CursorDeploymentTarget[] {
|
|
2207
|
+
const targets: CursorDeploymentTarget[] = [];
|
|
2208
|
+
for (const runtime of runtimes) {
|
|
2209
|
+
for (const channel of runtime.project.channels) {
|
|
2210
|
+
const options = getDeploymentsChannelOptions(channel.definition);
|
|
2211
|
+
if (options === undefined) {
|
|
2212
|
+
continue;
|
|
2213
|
+
}
|
|
2214
|
+
const subscriptions = resolveDeploymentSubscriptions(options);
|
|
2215
|
+
if (subscriptions.length === 0) {
|
|
2216
|
+
// Declared the channel but named no repositories — usually an unset
|
|
2217
|
+
// env var. Say so rather than starting a relay that receives nothing.
|
|
2218
|
+
skipped.push(`${runtime.slug || runtime.project.name}/${channel.id}`);
|
|
2219
|
+
continue;
|
|
2220
|
+
}
|
|
2221
|
+
targets.push({ runtime, channelId: channel.id, options, subscriptions });
|
|
2222
|
+
}
|
|
2223
|
+
}
|
|
2224
|
+
return targets;
|
|
2225
|
+
}
|
|
2226
|
+
|
|
2227
|
+
/**
|
|
2228
|
+
* Cursor deployment-events relay: automatic when a mounted agent authored
|
|
2229
|
+
* `deploymentsChannel({ ... })`. One relay per process reads
|
|
2230
|
+
* `/v0/deployment-events` for the union of every channel's repositories, and
|
|
2231
|
+
* each event is routed to the channels that asked for it — the same ownership
|
|
2232
|
+
* `startCursorSlackRelay` and `startCursorEventRelay` have.
|
|
2233
|
+
*/
|
|
2234
|
+
function startCursorDeploymentRelay(input: {
|
|
2235
|
+
options: ServeOptions;
|
|
2236
|
+
runtimes: MountedRuntime[];
|
|
2237
|
+
accountKey: ResolvedApiKey | undefined;
|
|
2238
|
+
logger: (line: string) => void;
|
|
2239
|
+
}): DeploymentEventRelay | undefined {
|
|
2240
|
+
const { options, runtimes, accountKey, logger } = input;
|
|
2241
|
+
const skipped: string[] = [];
|
|
2242
|
+
const targets = collectCursorDeploymentTargets(runtimes, skipped);
|
|
2243
|
+
if (skipped.length > 0) {
|
|
2244
|
+
logger(
|
|
2245
|
+
`[agent-sdk] deployment-events: no repositories declared on ${skipped.join(", ")}; those channels receive nothing`
|
|
2246
|
+
);
|
|
2247
|
+
}
|
|
2248
|
+
if (targets.length === 0) {
|
|
2249
|
+
return undefined;
|
|
2250
|
+
}
|
|
2251
|
+
if (accountKey === undefined) {
|
|
2252
|
+
throw new Error(
|
|
2253
|
+
`This project has channels subscribed to deployment events (deploymentsChannel({ repos })) but the host is not signed in to Cursor. ${SIGN_IN_HINT}`
|
|
2254
|
+
);
|
|
2255
|
+
}
|
|
2256
|
+
// Union across channels: one registration per repo for the whole process,
|
|
2257
|
+
// however many channels named it. Per-channel environment and event-type
|
|
2258
|
+
// filtering happens at dispatch.
|
|
2259
|
+
const byRepo = new Map<string, ResolvedSubscription>();
|
|
2260
|
+
for (const target of targets) {
|
|
2261
|
+
for (const subscription of target.subscriptions) {
|
|
2262
|
+
const existing = byRepo.get(subscription.repo);
|
|
2263
|
+
if (existing === undefined) {
|
|
2264
|
+
byRepo.set(subscription.repo, {
|
|
2265
|
+
repo: subscription.repo,
|
|
2266
|
+
environments: [...subscription.environments],
|
|
2267
|
+
events: new Set(subscription.events),
|
|
2268
|
+
});
|
|
2269
|
+
continue;
|
|
2270
|
+
}
|
|
2271
|
+
for (const event of subscription.events) existing.events.add(event);
|
|
2272
|
+
// An empty environment list means "every environment", so it absorbs.
|
|
2273
|
+
existing.environments =
|
|
2274
|
+
existing.environments.length === 0 ||
|
|
2275
|
+
subscription.environments.length === 0
|
|
2276
|
+
? []
|
|
2277
|
+
: [
|
|
2278
|
+
...new Set([
|
|
2279
|
+
...existing.environments,
|
|
2280
|
+
...subscription.environments,
|
|
2281
|
+
]),
|
|
2282
|
+
];
|
|
2283
|
+
}
|
|
2284
|
+
}
|
|
2285
|
+
// Same host split as scm-events and slack-events: `/v0/deployment-events/*`
|
|
2286
|
+
// is on api.cursor.com, not api2.
|
|
2287
|
+
const baseStateRoot =
|
|
2288
|
+
options.stateRoot ??
|
|
2289
|
+
join(targets[0].runtime.project.rootDir, ".agent-serve");
|
|
2290
|
+
const relay = new DeploymentEventRelay({
|
|
2291
|
+
baseUrl: cursorExternalApiUrl(),
|
|
2292
|
+
apiKey: accountKey.apiKey,
|
|
2293
|
+
stateDir: join(baseStateRoot, "deployment-events"),
|
|
2294
|
+
subscriptions: [...byRepo.values()],
|
|
2295
|
+
logger,
|
|
2296
|
+
dispatch: async (event) =>
|
|
2297
|
+
fanOutDeploymentEvent({
|
|
2298
|
+
event,
|
|
2299
|
+
logger,
|
|
2300
|
+
targets: targets.map((target) => ({
|
|
2301
|
+
name: `${target.runtime.slug || target.runtime.project.name}/${target.channelId}`,
|
|
2302
|
+
subscriptions: target.subscriptions,
|
|
2303
|
+
deliver: (delivered) =>
|
|
2304
|
+
dispatchDeploymentEvent({
|
|
2305
|
+
options: target.options,
|
|
2306
|
+
event: delivered,
|
|
2307
|
+
args: buildChannelHandlerArgs({
|
|
2308
|
+
runtime: target.runtime,
|
|
2309
|
+
channelId: target.channelId,
|
|
2310
|
+
}),
|
|
2311
|
+
}),
|
|
2312
|
+
})),
|
|
2313
|
+
}),
|
|
2314
|
+
});
|
|
2315
|
+
relay.start();
|
|
2316
|
+
logger(
|
|
2317
|
+
`[agent-sdk] deployment-events: relaying ${byRepo.size} repository subscription(s) to ${targets.length} channel(s)`
|
|
2318
|
+
);
|
|
2319
|
+
return relay;
|
|
2320
|
+
}
|
|
2321
|
+
|
|
2173
2322
|
async function startCursorSlackRelay(input: {
|
|
2174
2323
|
options: ServeOptions;
|
|
2175
2324
|
runtimes: MountedRuntime[];
|