@cursor/july 0.1.73 → 0.1.75
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 +13 -8
- package/dist/bin/agent-serve.js +7 -5
- 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.CdbcFD8T.js → app.b8bhB2SV.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DGZeXVqn.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.D_NKImM7.js → VPLocalSearchBox.lLSeIyWw.js} +1 -1
- package/dist/docs/assets/chunks/{theme.CMvz7cu9.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/assets/{reference_cli.md.Cl14Jfo3.js → reference_cli.md.TAaYU8br.js} +3 -3
- package/dist/docs/assets/{reference_cli.md.Cl14Jfo3.lean.js → reference_cli.md.TAaYU8br.lean.js} +1 -1
- package/dist/docs/assets/scaffolding-agents.md.CiGsJ1aw.js +1 -0
- package/dist/docs/assets/{scaffolding-agents.md.CrWSA0Ko.lean.js → scaffolding-agents.md.CiGsJ1aw.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 +6 -6
- 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 +5 -5
- 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/cli-skills.d.ts +4 -2
- package/dist/internal/cli-skills.d.ts.map +1 -1
- package/dist/internal/cli-skills.js +8 -3
- 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/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +1 -0
- package/dist/internal/install-cursor-skills.d.ts +71 -16
- package/dist/internal/install-cursor-skills.d.ts.map +1 -1
- package/dist/internal/install-cursor-skills.js +160 -48
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +6 -2
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +114 -5
- package/dist/playground/assets/index-BJy9UJrF.js +85 -0
- package/dist/playground/assets/index-BrSd5vff.css +1 -0
- package/dist/playground/index.html +2 -2
- package/docs/reference/channels.md +15 -0
- package/docs/reference/cli.md +16 -8
- package/docs/scaffolding-agents.md +14 -6
- package/package.json +9 -1
- package/scripts/install-cursor-skills.mjs +36 -0
- package/skills/ab/SKILL.md +1 -1
- package/skills/create-agent/SKILL.md +1 -1
- package/skills/debug/SKILL.md +1 -1
- package/skills/evals/SKILL.md +1 -1
- package/skills/framework-map/SKILL.md +1 -1
- package/skills/github/SKILL.md +1 -1
- package/skills/hillclimb/SKILL.md +1 -1
- package/skills/mcp-auth/SKILL.md +1 -1
- package/skills/otel/SKILL.md +1 -1
- package/skills/setup-slack/SKILL.md +1 -1
- package/src/bin/agent-serve.ts +7 -5
- 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/cli-skills.ts +10 -2
- package/src/internal/cursor-deployment-relay.ts +274 -0
- package/src/internal/distribution.ts +1 -0
- package/src/internal/install-cursor-skills.ts +204 -49
- package/src/internal/sdk-runner.ts +6 -3
- package/src/internal/server.ts +149 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.DQad--_z.js +0 -1
- package/dist/docs/assets/scaffolding-agents.md.CrWSA0Ko.js +0 -1
- package/dist/playground/assets/index-77uhu5Kr.css +0 -1
- package/dist/playground/assets/index-D4buox4m.js +0 -85
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Origin CI checks — the Origin {@link CiCheckWriter} behind the shared check
|
|
3
|
+
* lifecycle in `../checks.js`.
|
|
4
|
+
*
|
|
5
|
+
* Origin check runs are idempotent upserts keyed by `(repo, head SHA, suite
|
|
6
|
+
* key, check key)`, so every write re-POSTs the full desired state with a
|
|
7
|
+
* fresh `externalUpdatedAt`, and `resumeOriginCheck` needs only those
|
|
8
|
+
* identity fields (no server id) to rebuild a handle after a restart.
|
|
9
|
+
*
|
|
10
|
+
* Posting needs `repository:checks:write` and is installation-only: the
|
|
11
|
+
* client must authenticate with an `oit_…` installation token (see
|
|
12
|
+
* `createOriginClient` / `originAppTokenProvider` in `api.js`). Works with
|
|
13
|
+
* any client exposing `request()` (`ctx.origin`, `createOriginClient()`),
|
|
14
|
+
* and is also reachable as `ctx.origin.createCheck(...)`. API failures throw
|
|
15
|
+
* `OriginApiError`.
|
|
16
|
+
*/
|
|
17
|
+
import { type CiCheck, type CiCheckConcludeInput, type CiCheckConclusion, type CiCheckCreateInput, type CiCheckOutput, type CiCheckRef, type CiCheckStatus, type CiChecksClient, type CiCheckUpdateInput } from "../checks.js";
|
|
18
|
+
import type { OriginApiMethod } from "./api.js";
|
|
19
|
+
/** Any client that can call the Origin public REST API. */
|
|
20
|
+
export interface OriginCheckClient {
|
|
21
|
+
request<T = unknown>(input: {
|
|
22
|
+
method: OriginApiMethod;
|
|
23
|
+
path: string;
|
|
24
|
+
body?: unknown;
|
|
25
|
+
}): Promise<T>;
|
|
26
|
+
}
|
|
27
|
+
export type OriginCheckRunStatus = CiCheckStatus;
|
|
28
|
+
/** Origin accepts the shared conclusion set plus `stale`. */
|
|
29
|
+
export type OriginCheckRunConclusion = CiCheckConclusion | "stale";
|
|
30
|
+
export type OriginCheckOutput = CiCheckOutput;
|
|
31
|
+
export type OriginCheckUpdateInput = CiCheckUpdateInput<OriginCheckRunConclusion>;
|
|
32
|
+
export type OriginCheckConcludeInput = CiCheckConcludeInput<OriginCheckRunConclusion>;
|
|
33
|
+
/** A created check run. All methods throw `OriginApiError` on API failure. */
|
|
34
|
+
export type OriginCheck = CiCheck<OriginCheckRunConclusion> & CiCheckRef;
|
|
35
|
+
/** The upsert identity + client an Origin check is bound to. */
|
|
36
|
+
export interface OriginCheckIdentityInput {
|
|
37
|
+
/** Client used for every API call on the returned handle. */
|
|
38
|
+
origin: OriginCheckClient;
|
|
39
|
+
/** Repository owner slug, e.g. `"anysphere"`. */
|
|
40
|
+
owner: string;
|
|
41
|
+
/** Repository name, e.g. `"everysphere"`. */
|
|
42
|
+
repo: string;
|
|
43
|
+
/** Check name shown in the PR merge box, e.g. `"Cursor Security Review"`. */
|
|
44
|
+
name: string;
|
|
45
|
+
/** Commit the check attaches to (usually the PR head SHA). */
|
|
46
|
+
sha: string;
|
|
47
|
+
/**
|
|
48
|
+
* Stable, app-chosen key identifying the logical check across attempts
|
|
49
|
+
* (part of the upsert identity). Defaults to a slug of `name`.
|
|
50
|
+
*/
|
|
51
|
+
key?: string;
|
|
52
|
+
/** Suite the check belongs to. Defaults to a suite mirroring the check. */
|
|
53
|
+
suite?: {
|
|
54
|
+
key?: string;
|
|
55
|
+
name?: string;
|
|
56
|
+
detailsUrl?: string;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Provider-assigned immutable identity for this check attempt. Defaults to
|
|
60
|
+
* a deterministic id derived from the keys and `sha`.
|
|
61
|
+
*/
|
|
62
|
+
externalId?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface OriginCheckCreateInput extends OriginCheckIdentityInput, CiCheckCreateInput {
|
|
65
|
+
}
|
|
66
|
+
/** Derive a stable check key from a display name, e.g. `cursor-security-review`. */
|
|
67
|
+
export declare function originCheckKeyFromName(name: string): string;
|
|
68
|
+
/**
|
|
69
|
+
* Create a CI check run on a commit and return a handle for later updates.
|
|
70
|
+
*
|
|
71
|
+
* ```ts
|
|
72
|
+
* const check = await createOriginCheck({
|
|
73
|
+
* origin: ctx.origin,
|
|
74
|
+
* owner: ctx.repository.owner,
|
|
75
|
+
* repo: ctx.repository.name,
|
|
76
|
+
* name: "Cursor Security Review",
|
|
77
|
+
* sha: pr.headSha,
|
|
78
|
+
* detailsUrl: sessionUrl,
|
|
79
|
+
* output: { title: "Running…", summary: `[View session](${sessionUrl})` },
|
|
80
|
+
* });
|
|
81
|
+
* // …do the work…
|
|
82
|
+
* await check.conclude({ conclusion: "success", output: { … } });
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export declare function createOriginCheck(input: OriginCheckCreateInput): Promise<OriginCheck>;
|
|
86
|
+
/**
|
|
87
|
+
* Rebuild an {@link OriginCheck} handle for an existing check run (e.g.
|
|
88
|
+
* after a process restart) from its upsert identity — no server id needed.
|
|
89
|
+
* No API call is made until the first update.
|
|
90
|
+
*/
|
|
91
|
+
export declare function resumeOriginCheck(input: OriginCheckIdentityInput & {
|
|
92
|
+
/** Last known status; defaults to `"in_progress"`. */
|
|
93
|
+
status?: CiCheckStatus;
|
|
94
|
+
/** Server-assigned id (`cr_…`) when known. */
|
|
95
|
+
id?: string;
|
|
96
|
+
}): OriginCheck;
|
|
97
|
+
/**
|
|
98
|
+
* Repo-bound checks adapter satisfying the shared {@link CiChecksClient}
|
|
99
|
+
* contract — hand it to forge-agnostic check code when there is no channel
|
|
100
|
+
* `ctx.origin` (e.g. CI entrypoints).
|
|
101
|
+
*/
|
|
102
|
+
export declare function bindOriginChecks(input: {
|
|
103
|
+
origin: OriginCheckClient;
|
|
104
|
+
owner: string;
|
|
105
|
+
repo: string;
|
|
106
|
+
}): CiChecksClient<OriginCheckRunConclusion>;
|
|
107
|
+
//# sourceMappingURL=checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/checks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EAIxB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE;QAC1B,MAAM,EAAE,eAAe,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAEjD,6DAA6D;AAC7D,MAAM,MAAM,wBAAwB,GAAG,iBAAiB,GAAG,OAAO,CAAC;AAEnE,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAC9C,MAAM,MAAM,sBAAsB,GAChC,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;AAC/C,MAAM,MAAM,wBAAwB,GAClC,oBAAoB,CAAC,wBAAwB,CAAC,CAAC;AAEjD,8EAA8E;AAC9E,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,wBAAwB,CAAC,GAAG,UAAU,CAAC;AAEzE,gEAAgE;AAChE,MAAM,WAAW,wBAAwB;IACvC,6DAA6D;IAC7D,MAAM,EAAE,iBAAiB,CAAC;IAC1B,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,KAAK,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBACf,SAAQ,wBAAwB,EAC9B,kBAAkB;CAAG;AAsCzB,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO3D;AA0DD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,WAAW,CAAC,CAEtB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,wBAAwB,GAAG;IAChC,sDAAsD;IACtD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,8CAA8C;IAC9C,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,GACA,WAAW,CAKb;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,cAAc,CAAC,wBAAwB,CAAC,CAU3C"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Origin CI checks — the Origin {@link CiCheckWriter} behind the shared check
|
|
3
|
+
* lifecycle in `../checks.js`.
|
|
4
|
+
*
|
|
5
|
+
* Origin check runs are idempotent upserts keyed by `(repo, head SHA, suite
|
|
6
|
+
* key, check key)`, so every write re-POSTs the full desired state with a
|
|
7
|
+
* fresh `externalUpdatedAt`, and `resumeOriginCheck` needs only those
|
|
8
|
+
* identity fields (no server id) to rebuild a handle after a restart.
|
|
9
|
+
*
|
|
10
|
+
* Posting needs `repository:checks:write` and is installation-only: the
|
|
11
|
+
* client must authenticate with an `oit_…` installation token (see
|
|
12
|
+
* `createOriginClient` / `originAppTokenProvider` in `api.js`). Works with
|
|
13
|
+
* any client exposing `request()` (`ctx.origin`, `createOriginClient()`),
|
|
14
|
+
* and is also reachable as `ctx.origin.createCheck(...)`. API failures throw
|
|
15
|
+
* `OriginApiError`.
|
|
16
|
+
*/
|
|
17
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
import { openCiCheck, resumeCiCheck, } from "../checks.js";
|
|
27
|
+
/**
|
|
28
|
+
* Origin rejects the whole upsert when `output.title` exceeds 255 characters
|
|
29
|
+
* or a body exceeds 65,535 UTF-8 bytes, so the writer caps rather than
|
|
30
|
+
* risking a lost check write.
|
|
31
|
+
*/
|
|
32
|
+
const OUTPUT_TITLE_MAX_CHARS = 255;
|
|
33
|
+
const OUTPUT_BODY_MAX_BYTES = 65000;
|
|
34
|
+
/** Truncate to at most `maxBytes` UTF-8 bytes without severing a character. */
|
|
35
|
+
function capUtf8Bytes(text, maxBytes) {
|
|
36
|
+
const encoded = new TextEncoder().encode(text);
|
|
37
|
+
if (encoded.length <= maxBytes) {
|
|
38
|
+
return text;
|
|
39
|
+
}
|
|
40
|
+
// A non-fatal decode turns a trailing partial character into U+FFFD;
|
|
41
|
+
// stripping it keeps the result valid (and re-encodable) under the cap.
|
|
42
|
+
return new TextDecoder("utf-8")
|
|
43
|
+
.decode(encoded.subarray(0, maxBytes))
|
|
44
|
+
.replace(/\uFFFD+$/, "");
|
|
45
|
+
}
|
|
46
|
+
function cappedOutput(output) {
|
|
47
|
+
if (output === undefined) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
return Object.assign({ title: output.title.slice(0, OUTPUT_TITLE_MAX_CHARS), summary: capUtf8Bytes(output.summary, OUTPUT_BODY_MAX_BYTES) }, (output.text === undefined
|
|
51
|
+
? {}
|
|
52
|
+
: { text: capUtf8Bytes(output.text, OUTPUT_BODY_MAX_BYTES) }));
|
|
53
|
+
}
|
|
54
|
+
/** Derive a stable check key from a display name, e.g. `cursor-security-review`. */
|
|
55
|
+
export function originCheckKeyFromName(name) {
|
|
56
|
+
const slug = name
|
|
57
|
+
.toLowerCase()
|
|
58
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
59
|
+
.replace(/^-+|-+$/g, "")
|
|
60
|
+
.slice(0, 100);
|
|
61
|
+
return slug === "" ? "check" : slug;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Origin writer: every write is a full keyed upsert. Tracks the last written
|
|
65
|
+
* status so an output-only update cannot regress a running check to queued.
|
|
66
|
+
*/
|
|
67
|
+
function originCheckWriter(input) {
|
|
68
|
+
var _a;
|
|
69
|
+
var _b, _c, _d, _e;
|
|
70
|
+
const key = (_b = input.key) !== null && _b !== void 0 ? _b : originCheckKeyFromName(input.name);
|
|
71
|
+
const suiteKey = (_c = (_a = input.suite) === null || _a === void 0 ? void 0 : _a.key) !== null && _c !== void 0 ? _c : key;
|
|
72
|
+
const externalId = (_d = input.externalId) !== null && _d !== void 0 ? _d : `agent-serve:${suiteKey}:${key}:${input.sha}`;
|
|
73
|
+
const path = `/v1/origin/repos/${encodeURIComponent(input.owner)}/${encodeURIComponent(input.repo)}/check-runs`;
|
|
74
|
+
let lastStatus = (_e = input.status) !== null && _e !== void 0 ? _e : "in_progress";
|
|
75
|
+
return (write) => __awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
var _a, _b, _c;
|
|
77
|
+
var _d, _e;
|
|
78
|
+
const status = (_d = write.status) !== null && _d !== void 0 ? _d : (write.conclusion === undefined ? lastStatus : "completed");
|
|
79
|
+
lastStatus = status;
|
|
80
|
+
const response = yield input.origin.request({
|
|
81
|
+
method: "POST",
|
|
82
|
+
path,
|
|
83
|
+
body: {
|
|
84
|
+
headSha: input.sha,
|
|
85
|
+
checkSuite: Object.assign({ key: suiteKey, name: (_e = (_a = input.suite) === null || _a === void 0 ? void 0 : _a.name) !== null && _e !== void 0 ? _e : input.name, externalId: `agent-serve:${suiteKey}` }, (((_b = input.suite) === null || _b === void 0 ? void 0 : _b.detailsUrl) === undefined
|
|
86
|
+
? {}
|
|
87
|
+
: { detailsUrl: input.suite.detailsUrl })),
|
|
88
|
+
checkRun: {
|
|
89
|
+
key,
|
|
90
|
+
name: input.name,
|
|
91
|
+
status,
|
|
92
|
+
conclusion: write.conclusion,
|
|
93
|
+
// Origin only applies an upsert when this timestamp is at least as
|
|
94
|
+
// new as the stored check; timestamp every write when it is built.
|
|
95
|
+
externalUpdatedAt: new Date().toISOString(),
|
|
96
|
+
externalId,
|
|
97
|
+
startedAt: write.startedAt,
|
|
98
|
+
completedAt: write.completedAt,
|
|
99
|
+
detailsUrl: write.detailsUrl,
|
|
100
|
+
output: cappedOutput(write.output),
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
const id = (_c = response === null || response === void 0 ? void 0 : response.checkRun) === null || _c === void 0 ? void 0 : _c.id;
|
|
105
|
+
return typeof id === "string" ? { id } : undefined;
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Create a CI check run on a commit and return a handle for later updates.
|
|
110
|
+
*
|
|
111
|
+
* ```ts
|
|
112
|
+
* const check = await createOriginCheck({
|
|
113
|
+
* origin: ctx.origin,
|
|
114
|
+
* owner: ctx.repository.owner,
|
|
115
|
+
* repo: ctx.repository.name,
|
|
116
|
+
* name: "Cursor Security Review",
|
|
117
|
+
* sha: pr.headSha,
|
|
118
|
+
* detailsUrl: sessionUrl,
|
|
119
|
+
* output: { title: "Running…", summary: `[View session](${sessionUrl})` },
|
|
120
|
+
* });
|
|
121
|
+
* // …do the work…
|
|
122
|
+
* await check.conclude({ conclusion: "success", output: { … } });
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
export function createOriginCheck(input) {
|
|
126
|
+
return openCiCheck(originCheckWriter(input), input);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Rebuild an {@link OriginCheck} handle for an existing check run (e.g.
|
|
130
|
+
* after a process restart) from its upsert identity — no server id needed.
|
|
131
|
+
* No API call is made until the first update.
|
|
132
|
+
*/
|
|
133
|
+
export function resumeOriginCheck(input) {
|
|
134
|
+
return resumeCiCheck(originCheckWriter(input), input.id === undefined ? undefined : { id: input.id });
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Repo-bound checks adapter satisfying the shared {@link CiChecksClient}
|
|
138
|
+
* contract — hand it to forge-agnostic check code when there is no channel
|
|
139
|
+
* `ctx.origin` (e.g. CI entrypoints).
|
|
140
|
+
*/
|
|
141
|
+
export function bindOriginChecks(input) {
|
|
142
|
+
return {
|
|
143
|
+
createCheck: (check) => createOriginCheck(Object.assign(Object.assign({}, check), { origin: input.origin, owner: input.owner, repo: input.repo })),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
@@ -21,6 +21,9 @@
|
|
|
21
21
|
* `origin-webhook` plus the Origin actor — not the Cursor subscriber —
|
|
22
22
|
* matching GitHub's `github-webhook` pattern.
|
|
23
23
|
*/
|
|
24
|
+
export * from "./api.js";
|
|
25
|
+
export * from "./binding.js";
|
|
26
|
+
export * from "./checks.js";
|
|
24
27
|
export * from "./cursor-account.js";
|
|
25
28
|
export * from "./events.js";
|
|
26
29
|
export * from "./origin-channel.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC"}
|
|
@@ -21,6 +21,9 @@
|
|
|
21
21
|
* `origin-webhook` plus the Origin actor — not the Cursor subscriber —
|
|
22
22
|
* matching GitHub's `github-webhook` pattern.
|
|
23
23
|
*/
|
|
24
|
+
export * from "./api.js";
|
|
25
|
+
export * from "./binding.js";
|
|
26
|
+
export * from "./checks.js";
|
|
24
27
|
export * from "./cursor-account.js";
|
|
25
28
|
export * from "./events.js";
|
|
26
29
|
export * from "./origin-channel.js";
|
|
@@ -6,7 +6,7 @@ export declare function parseOriginWebhookEnvelope(payload: unknown): OriginWebh
|
|
|
6
6
|
export declare function parseOriginPullRequestEvent(input: {
|
|
7
7
|
envelope: OriginWebhookEnvelope;
|
|
8
8
|
}): {
|
|
9
|
-
ctx: Omit<OriginEventContext, "host" | "artifacts">;
|
|
9
|
+
ctx: Omit<OriginEventContext, "host" | "artifacts" | "origin">;
|
|
10
10
|
pullRequest: OriginPullRequestEvent;
|
|
11
11
|
payload: Record<string, unknown>;
|
|
12
12
|
} | null;
|
|
@@ -16,11 +16,11 @@ export declare function parseOriginPullRequestEvent(input: {
|
|
|
16
16
|
* The subscriber's Cursor identity is not the turn principal (same pattern
|
|
17
17
|
* as {@link defaultGitHubAuth}).
|
|
18
18
|
*/
|
|
19
|
-
export declare function defaultOriginAuth(ctx: Omit<OriginEventContext, "host" | "artifacts">): AuthContext;
|
|
19
|
+
export declare function defaultOriginAuth(ctx: Omit<OriginEventContext, "host" | "artifacts" | "origin">): AuthContext;
|
|
20
20
|
export declare function originContinuationKey(ctx: Pick<OriginEventContext, "repository" | "pullRequestNumber">): string;
|
|
21
21
|
export declare function defaultOriginTitle(ctx: Pick<OriginEventContext, "repository" | "pullRequestNumber">): string;
|
|
22
|
-
export declare function defaultOriginPullRequestMessage(ctx: Omit<OriginEventContext, "host" | "artifacts">, pullRequest: OriginPullRequestEvent): string;
|
|
23
|
-
export declare function defaultOriginPullRequestDispatch(ctx: Omit<OriginEventContext, "host" | "artifacts">, pullRequest: OriginPullRequestEvent): OriginTurnDispatch | null;
|
|
22
|
+
export declare function defaultOriginPullRequestMessage(ctx: Omit<OriginEventContext, "host" | "artifacts" | "origin">, pullRequest: OriginPullRequestEvent): string;
|
|
23
|
+
export declare function defaultOriginPullRequestDispatch(ctx: Omit<OriginEventContext, "host" | "artifacts" | "origin">, pullRequest: OriginPullRequestEvent): OriginTurnDispatch | null;
|
|
24
24
|
/**
|
|
25
25
|
* Core Origin webhook dispatch used by {@link originChannel} routes and by
|
|
26
26
|
* {@link handleAgentServeTrigger} fan-out. Signature verification is the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"origin-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/origin-channel.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAEV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"origin-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/origin-channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { z } from "zod";
|
|
11
11
|
import { allowAll, defineChannel, localDevStrict, loopbackOnly, POST, } from "../../channels.js";
|
|
12
12
|
import { isDevMode } from "../../internal/dev-mode.js";
|
|
13
|
+
import { buildOriginBinding } from "./binding.js";
|
|
13
14
|
import { parseCursorOriginRepoScope, registerOriginCursorAccountRuntime, } from "./cursor-account.js";
|
|
14
15
|
import { deriveOriginWebhookEvents, ORIGIN_CHANNEL_KIND } from "./events.js";
|
|
15
16
|
import { DEFAULT_ORIGIN_API_BASE_URL, verifyOriginWebhook, } from "./origin-webhook.js";
|
|
@@ -214,6 +215,7 @@ export function parseOriginPullRequestEvent(input) {
|
|
|
214
215
|
ctx: {
|
|
215
216
|
deliveryId: input.envelope.deliveryId,
|
|
216
217
|
eventType,
|
|
218
|
+
installationId: input.envelope.installationId,
|
|
217
219
|
repository,
|
|
218
220
|
pullRequestNumber: number,
|
|
219
221
|
pullRequestUrl: url,
|
|
@@ -284,7 +286,11 @@ function isTaskDispatch(dispatch) {
|
|
|
284
286
|
return "task" in dispatch;
|
|
285
287
|
}
|
|
286
288
|
function enrichEventContext(input) {
|
|
287
|
-
return Object.assign(Object.assign({}, input.ctx), { host: input.args.host, artifacts: input.args.artifacts
|
|
289
|
+
return Object.assign(Object.assign({}, input.ctx), { host: input.args.host, artifacts: input.args.artifacts, origin: buildOriginBinding({
|
|
290
|
+
repository: input.ctx.repository,
|
|
291
|
+
installationId: input.ctx.installationId,
|
|
292
|
+
app: input.options.app,
|
|
293
|
+
}) });
|
|
288
294
|
}
|
|
289
295
|
function skipped(reason, extra = {}) {
|
|
290
296
|
return Response.json(Object.assign({ ok: true, skipped: true, reason }, extra));
|
|
@@ -368,7 +374,11 @@ export function dispatchOriginWebhook(input) {
|
|
|
368
374
|
if (parsed === null) {
|
|
369
375
|
return Response.json({ ok: false, error: "invalid_origin_payload" }, { status: 400 });
|
|
370
376
|
}
|
|
371
|
-
const ctx = enrichEventContext({
|
|
377
|
+
const ctx = enrichEventContext({
|
|
378
|
+
ctx: parsed.ctx,
|
|
379
|
+
args: input.args,
|
|
380
|
+
options: input.options,
|
|
381
|
+
});
|
|
372
382
|
const { pullRequest, payload } = parsed;
|
|
373
383
|
const repoAllowlist = configuredOriginRepoAllowlist(input.options);
|
|
374
384
|
if (repoAllowlist !== undefined &&
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { AgentCloudOptions, ArtifactsApi, AuthContext, AuthPolicy, ChannelStartArgs, HostContext } from "../../types.js";
|
|
2
|
+
import type { OriginTokenProvider } from "./api.js";
|
|
3
|
+
import type { OriginHandle } from "./binding.js";
|
|
2
4
|
export interface OriginActor {
|
|
3
5
|
id: string;
|
|
4
6
|
kind?: string;
|
|
@@ -35,12 +37,21 @@ export interface OriginReview {
|
|
|
35
37
|
export interface OriginEventContext {
|
|
36
38
|
deliveryId?: string;
|
|
37
39
|
eventType: string;
|
|
40
|
+
/** Origin app installation id from the delivery envelope, when present. */
|
|
41
|
+
installationId?: string;
|
|
38
42
|
repository: OriginRepositoryRef;
|
|
39
43
|
pullRequestNumber: number;
|
|
40
44
|
pullRequestUrl: string;
|
|
41
45
|
sender?: OriginActor;
|
|
42
46
|
host: HostContext;
|
|
43
47
|
artifacts: ArtifactsApi;
|
|
48
|
+
/**
|
|
49
|
+
* Repo-bound Origin public API handle (REST calls + `createCheck`).
|
|
50
|
+
* Outbound credentials come from {@link OriginChannelOptions.app} or the
|
|
51
|
+
* `ORIGIN_APP_*` environment; resolution is lazy, so hooks that never call
|
|
52
|
+
* it need no credentials.
|
|
53
|
+
*/
|
|
54
|
+
origin: OriginHandle;
|
|
44
55
|
}
|
|
45
56
|
export type OriginTurnDispatch = {
|
|
46
57
|
auth: AuthContext;
|
|
@@ -77,6 +88,25 @@ export interface OriginWebhookEnvelope {
|
|
|
77
88
|
payload?: unknown;
|
|
78
89
|
};
|
|
79
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Outbound Origin app credentials for `ctx.origin` (public REST calls, CI
|
|
93
|
+
* check runs). Fields left unset fall back to the environment
|
|
94
|
+
* (`ORIGIN_APP_ID` / `ORIGIN_APP_INSTALLATION_ID` / `ORIGIN_APP_PRIVATE_KEY`
|
|
95
|
+
* / `ORIGIN_API_BASE_URL`); the delivery's installation id fills in when
|
|
96
|
+
* neither pins one.
|
|
97
|
+
*/
|
|
98
|
+
export interface OriginAppOptions {
|
|
99
|
+
/** Origin app id (`app_<typeid>`). */
|
|
100
|
+
appId?: string;
|
|
101
|
+
/** Installation id outbound tokens are minted for. */
|
|
102
|
+
installationId?: string;
|
|
103
|
+
/** PKCS8 PEM for the app's EdDSA (Ed25519) private key. */
|
|
104
|
+
privateKey?: string;
|
|
105
|
+
/** Static bearer (`oit_…`) or provider, bypassing the app-JWT mint. */
|
|
106
|
+
token?: string | OriginTokenProvider;
|
|
107
|
+
/** Public Origin REST base, e.g. `https://api.cursor.com`. */
|
|
108
|
+
apiBaseUrl?: string;
|
|
109
|
+
}
|
|
80
110
|
export interface OriginChannelOptions {
|
|
81
111
|
/**
|
|
82
112
|
* Use the signed-in Cursor account for inbound Origin events via
|
|
@@ -114,6 +144,12 @@ export interface OriginChannelOptions {
|
|
|
114
144
|
* (GitHub's no-secret posture); `--dev` / skip-verify admits loopback only.
|
|
115
145
|
*/
|
|
116
146
|
auth?: AuthPolicy[];
|
|
147
|
+
/**
|
|
148
|
+
* Outbound Origin app credentials for `ctx.origin` (REST calls, CI check
|
|
149
|
+
* runs). Optional: every field falls back to the `ORIGIN_APP_*`
|
|
150
|
+
* environment, and inbound-only channels need none.
|
|
151
|
+
*/
|
|
152
|
+
app?: OriginAppOptions;
|
|
117
153
|
/** Route path under `/v1/channels/<name>`. Defaults to `/`. */
|
|
118
154
|
path?: string;
|
|
119
155
|
/** Origin API base used to fetch `/v1/origin/keys` for v1ed verify. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,WAAW,EACZ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/types.ts"],"names":[],"mappings":"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"}
|
package/dist/channels.d.ts
CHANGED
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
* `z.object({})` / `z.unknown()` when the surface is intentionally open.
|
|
47
47
|
* Handlers receive `args.body` / `args.query` inferred from those schemas.
|
|
48
48
|
*/
|
|
49
|
+
export { type CiCheck, type CiCheckConcludeInput, type CiCheckConclusion, type CiCheckCreateInput, type CiCheckOutput, type CiCheckRef, type CiCheckStatus, type CiChecksClient, type CiCheckUpdateInput, type CiCheckWrite, type CiCheckWriter, openCiCheck, resumeCiCheck, } from "./channels/checks.js";
|
|
49
50
|
import type { AuthContext, AuthPolicy, ChannelBodyRouteSpec, ChannelConfig, ChannelDefinition, ChannelDeleteRouteSpec, ChannelGetRouteSpec, ChannelRoute, ChannelRouteSchema, HttpChannelConfig, HttpChannelDefinition, JsonValue } from "./types.js";
|
|
50
51
|
export type { AuthContext, AuthPolicy, ChannelBodyRouteSpec, ChannelConfig, ChannelDefinition, ChannelDeleteRouteSpec, ChannelEventContext, ChannelEventHandler, ChannelEventHandlers, ChannelGetRouteSpec, ChannelHandlerArgs, ChannelHandlerArgsWithBody, ChannelHandlerArgsWithBodyAndQuery, ChannelHandlerArgsWithQuery, ChannelRoute, ChannelRouteHandler, ChannelRouteSchema, ChannelRouteSpec, ChannelSession, ChannelStartArgs, HttpChannelConfig, HttpChannelDefinition, ReceiveInput, RouteMethod, SendMessageFn, SendMessageOptions, } from "./types.js";
|
|
51
52
|
/** Define a custom channel. */
|
package/dist/channels.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;
|
|
1
|
+
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"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"}
|
package/dist/channels.js
CHANGED
|
@@ -55,6 +55,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
55
55
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
56
56
|
});
|
|
57
57
|
};
|
|
58
|
+
export { openCiCheck, resumeCiCheck, } from "./channels/checks.js";
|
|
58
59
|
import { Buffer } from "node:buffer";
|
|
59
60
|
import { timingSafeEqual } from "node:crypto";
|
|
60
61
|
import { brandDefinition } from "./internal/brand.js";
|
package/dist/docs/404.html
CHANGED
|
@@ -9,14 +9,14 @@
|
|
|
9
9
|
<link rel="preload stylesheet" href="/docs/assets/style.kTsvp4pE.css" as="style">
|
|
10
10
|
<link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
|
|
11
11
|
|
|
12
|
-
<script type="module" src="/docs/assets/app.
|
|
12
|
+
<script type="module" src="/docs/assets/app.b8bhB2SV.js"></script>
|
|
13
13
|
<link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
|
14
14
|
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
|
15
15
|
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
|
16
16
|
</head>
|
|
17
17
|
<body>
|
|
18
18
|
<div id="app"></div>
|
|
19
|
-
<script>window.__VP_HASH_MAP__=JSON.parse("{\"ab.md\":\"DYjwREAP\",\"building-with-agents.md\":\"PeZaZA1P\",\"concepts.md\":\"BXAm6G-C\",\"deployment.md\":\"B8kW-h7P\",\"evals.md\":\"CVe_O75-\",\"example-agents_approval-buddy.md\":\"CIiZ9coo\",\"example-agents_benny.md\":\"B-LIDGja\",\"example-agents_bugbot.md\":\"Dp5JqHSQ\",\"example-agents_codebase-wiki.md\":\"D-lteFf0\",\"example-agents_codeowners-review.md\":\"BU2ZXLf-\",\"example-agents_concierge.md\":\"DA2al_NK\",\"example-agents_fsd.md\":\"ZeGEpAw_\",\"example-agents_index.md\":\"xmJ87d_3\",\"example-agents_knowledge-base.md\":\"IneynQSR\",\"example-agents_oncall.md\":\"CBmyuAKc\",\"example-agents_security-reviewer.md\":\"DBL1TwtP\",\"example-agents_slack-agent.md\":\"06jQXTAI\",\"example-agents_weather-agent.md\":\"DC3lINjo\",\"guides_agent-to-agent.md\":\"Bmbxy-FA\",\"guides_cloud-runtime.md\":\"V5igN4Sq\",\"guides_convert-automation.md\":\"BhMzTkE5\",\"guides_github.md\":\"CLLQJKRB\",\"guides_human-in-the-loop.md\":\"Cf8kIIqC\",\"guides_mcp-oauth.md\":\"CzEB6RaG\",\"guides_opentelemetry.md\":\"Csn7ZI25\",\"guides_slack.md\":\"DP4H75WP\",\"guides_webhooks.md\":\"DB-r_er9\",\"hillclimbing.md\":\"yXqdlv2R\",\"index.md\":\"DhRHS_-L\",\"quickstart.md\":\"DZxBu44y\",\"reference_agent-config.md\":\"BZnEKfEc\",\"reference_artifacts.md\":\"BGG4bZo-\",\"reference_channels.md\":\"
|
|
19
|
+
<script>window.__VP_HASH_MAP__=JSON.parse("{\"ab.md\":\"DYjwREAP\",\"building-with-agents.md\":\"PeZaZA1P\",\"concepts.md\":\"BXAm6G-C\",\"deployment.md\":\"B8kW-h7P\",\"evals.md\":\"CVe_O75-\",\"example-agents_approval-buddy.md\":\"CIiZ9coo\",\"example-agents_benny.md\":\"B-LIDGja\",\"example-agents_bugbot.md\":\"Dp5JqHSQ\",\"example-agents_codebase-wiki.md\":\"D-lteFf0\",\"example-agents_codeowners-review.md\":\"BU2ZXLf-\",\"example-agents_concierge.md\":\"DA2al_NK\",\"example-agents_fsd.md\":\"ZeGEpAw_\",\"example-agents_index.md\":\"xmJ87d_3\",\"example-agents_knowledge-base.md\":\"IneynQSR\",\"example-agents_oncall.md\":\"CBmyuAKc\",\"example-agents_security-reviewer.md\":\"DBL1TwtP\",\"example-agents_slack-agent.md\":\"06jQXTAI\",\"example-agents_weather-agent.md\":\"DC3lINjo\",\"guides_agent-to-agent.md\":\"Bmbxy-FA\",\"guides_cloud-runtime.md\":\"V5igN4Sq\",\"guides_convert-automation.md\":\"BhMzTkE5\",\"guides_github.md\":\"CLLQJKRB\",\"guides_human-in-the-loop.md\":\"Cf8kIIqC\",\"guides_mcp-oauth.md\":\"CzEB6RaG\",\"guides_opentelemetry.md\":\"Csn7ZI25\",\"guides_slack.md\":\"DP4H75WP\",\"guides_webhooks.md\":\"DB-r_er9\",\"hillclimbing.md\":\"yXqdlv2R\",\"index.md\":\"DhRHS_-L\",\"quickstart.md\":\"DZxBu44y\",\"reference_agent-config.md\":\"BZnEKfEc\",\"reference_artifacts.md\":\"BGG4bZo-\",\"reference_channels.md\":\"G5GysZ7e\",\"reference_cli.md\":\"TAaYU8br\",\"reference_connections.md\":\"Cu3N-S3Q\",\"reference_hooks.md\":\"DJE5DXcT\",\"reference_http-api.md\":\"DMbdFGVQ\",\"reference_instructions.md\":\"CgoV-YEb\",\"reference_playground.md\":\"CPZhfYaO\",\"reference_project-layout.md\":\"D3MdHM2z\",\"reference_prompt.md\":\"BaiweQxE\",\"reference_schedules.md\":\"gmfYzf_I\",\"reference_sessions.md\":\"B0DdlM-K\",\"reference_skills.md\":\"B_jHN7JL\",\"reference_subagents.md\":\"DSrGLIuB\",\"reference_tools.md\":\"DTg_kEsx\",\"scaffolding-agents.md\":\"CiGsJ1aw\",\"storage.md\":\"D8NQ389l\",\"templates_agentic-owners.md\":\"BkTLORaU\",\"templates_demo.md\":\"Bgd6MBaZ\",\"templates_pr-autofixer.md\":\"DcmoeUNZ\",\"templates_security-reviewer.md\":\"C0yIUaYs\",\"templates_triage.md\":\"DWuQ1bZz\",\"troubleshooting.md\":\"DQ-hYuZT\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Agent SDK\",\"description\":\"Filesystem-first framework for building and serving Cursor agents.\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Quickstart\",\"link\":\"/quickstart\"},{\"text\":\"Guides\",\"link\":\"/guides/webhooks\"},{\"text\":\"Examples\",\"link\":\"/example-agents/\"},{\"text\":\"Reference\",\"link\":\"/reference/project-layout\"}],\"search\":{\"provider\":\"local\"},\"outline\":{\"level\":[2,3]},\"sidebar\":[{\"text\":\"Getting started\",\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"Quickstart\",\"link\":\"/quickstart\"},{\"text\":\"Scaffold an agent with Cursor\",\"link\":\"/scaffolding-agents\"},{\"text\":\"Convert a Cursor Automation\",\"link\":\"/guides/convert-automation\"},{\"text\":\"Concepts\",\"link\":\"/concepts\"}]},{\"text\":\"Templates\",\"items\":[{\"text\":\"Demo agent\",\"link\":\"/templates/demo\"},{\"text\":\"Security reviewer\",\"link\":\"/templates/security-reviewer\"},{\"text\":\"Agentic Owners\",\"link\":\"/templates/agentic-owners\"},{\"text\":\"PR autofixer\",\"link\":\"/templates/pr-autofixer\"},{\"text\":\"Triage agent\",\"link\":\"/templates/triage\"}]},{\"text\":\"Improving agents\",\"items\":[{\"text\":\"Building agents with agents\",\"link\":\"/building-with-agents\"},{\"text\":\"Evals\",\"link\":\"/evals\"},{\"text\":\"Live A/B metrics\",\"link\":\"/ab\"},{\"text\":\"Storage\",\"link\":\"/storage\"},{\"text\":\"Hillclimbing\",\"link\":\"/hillclimbing\"}]},{\"text\":\"Guides\",\"items\":[{\"text\":\"Webhooks & custom channels\",\"link\":\"/guides/webhooks\"},{\"text\":\"GitHub\",\"link\":\"/guides/github\"},{\"text\":\"Slack\",\"link\":\"/guides/slack\"},{\"text\":\"Human-in-the-loop approvals\",\"link\":\"/guides/human-in-the-loop\"},{\"text\":\"Agent-to-agent\",\"link\":\"/guides/agent-to-agent\"},{\"text\":\"Host MCP OAuth\",\"link\":\"/guides/mcp-oauth\"},{\"text\":\"Cloud runtime\",\"link\":\"/guides/cloud-runtime\"},{\"text\":\"OpenTelemetry\",\"link\":\"/guides/opentelemetry\"}]},{\"text\":\"Example agents\",\"items\":[{\"text\":\"Choose an example\",\"link\":\"/example-agents/\"},{\"text\":\"Weather agent\",\"link\":\"/example-agents/weather-agent\"},{\"text\":\"Slack agent\",\"link\":\"/example-agents/slack-agent\"},{\"text\":\"Concierge\",\"link\":\"/example-agents/concierge\"},{\"text\":\"Playbook router\",\"link\":\"/example-agents/benny\"},{\"text\":\"Alert investigator\",\"link\":\"/example-agents/oncall\"},{\"text\":\"PR evidence reviewer\",\"link\":\"/example-agents/bugbot\"},{\"text\":\"Approval Buddy\",\"link\":\"/example-agents/approval-buddy\"},{\"text\":\"Security Reviewer\",\"link\":\"/example-agents/security-reviewer\"},{\"text\":\"Remote PR coordinator\",\"link\":\"/example-agents/fsd\"},{\"text\":\"Knowledge base\",\"link\":\"/example-agents/knowledge-base\"},{\"text\":\"Codebase wiki\",\"link\":\"/example-agents/codebase-wiki\"},{\"text\":\"Codeowners review\",\"link\":\"/example-agents/codeowners-review\"}]},{\"text\":\"Operating\",\"items\":[{\"text\":\"Deployment\",\"link\":\"/deployment\"},{\"text\":\"Fix common problems\",\"link\":\"/troubleshooting\"}]},{\"text\":\"Reference\",\"collapsed\":false,\"items\":[{\"text\":\"Project layout\",\"link\":\"/reference/project-layout\"},{\"text\":\"Agent config\",\"link\":\"/reference/agent-config\"},{\"text\":\"Instructions\",\"link\":\"/reference/instructions\"},{\"text\":\"Tools\",\"link\":\"/reference/tools\"},{\"text\":\"prompt\",\"link\":\"/reference/prompt\"},{\"text\":\"Skills\",\"link\":\"/reference/skills\"},{\"text\":\"MCP Connections\",\"link\":\"/reference/connections\"},{\"text\":\"Subagents\",\"link\":\"/reference/subagents\"},{\"text\":\"Channels\",\"link\":\"/reference/channels\"},{\"text\":\"Schedules & reminders\",\"link\":\"/reference/schedules\"},{\"text\":\"Hooks\",\"link\":\"/reference/hooks\"},{\"text\":\"Artifacts\",\"link\":\"/reference/artifacts\"},{\"text\":\"Sessions & streaming\",\"link\":\"/reference/sessions\"},{\"text\":\"Playground\",\"link\":\"/reference/playground\"},{\"text\":\"CLI\",\"link\":\"/reference/cli\"},{\"text\":\"HTTP API\",\"link\":\"/reference/http-api\"}]}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
|
20
20
|
|
|
21
21
|
</body>
|
|
22
22
|
</html>
|