@cursor/july 0.1.17 → 0.1.19
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/bin/agent-serve.js +20 -3
- package/dist/channels/slack/cursor-account.d.ts.map +1 -1
- package/dist/channels/slack/cursor-account.js +1 -1
- 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 +1 -0
- package/dist/channels/slack/index.d.ts.map +1 -1
- package/dist/channels/slack/index.js +1 -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.map +1 -1
- package/dist/channels/slack/interactive.js +1 -0
- package/dist/channels/slack/manifest.d.ts +10 -0
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +33 -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/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 +16 -1
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +3 -3
- package/dist/docs/assets/{app.BbEXr2KO.js → app.CrsWMchO.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.BnHRjfoe.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DBEi4HDp.js → VPLocalSearchBox.D1JqzSh8.js} +1 -1
- package/dist/docs/assets/chunks/{theme.DGfptcHw.js → theme.DaBvZYwl.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/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 +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/channels.html +3 -3
- 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/troubleshooting.html +3 -3
- 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-skills.d.ts +19 -0
- package/dist/internal/cli-skills.d.ts.map +1 -0
- package/dist/internal/cli-skills.js +72 -0
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +36 -15
- 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/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +41 -0
- package/dist/internal/install-cursor-skills.d.ts +46 -4
- package/dist/internal/install-cursor-skills.d.ts.map +1 -1
- package/dist/internal/install-cursor-skills.js +117 -49
- 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/sdk-runner.d.ts +15 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +113 -13
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +1 -0
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +9 -0
- package/dist/internal/slack-provision-client.d.ts +6 -3
- package/dist/internal/slack-provision-client.d.ts.map +1 -1
- package/dist/internal/slack-provision-client.js +5 -3
- package/dist/playground/assets/{index-DNqirsrK.js → index-C2SU2xV5.js} +43 -43
- package/dist/playground/index.html +1 -1
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/example-agents/security-reviewer.md +1 -1
- package/package.json +1 -1
- package/skills/setup-slack/SKILL.md +4 -0
- package/src/bin/agent-serve.ts +21 -3
- package/src/channels/slack/cursor-account.ts +1 -0
- package/src/channels/slack/dispatch.ts +3 -1
- package/src/channels/slack/inbound.ts +6 -1
- package/src/channels/slack/index.ts +1 -0
- package/src/channels/slack/init.ts +3 -0
- package/src/channels/slack/interactive.ts +1 -0
- package/src/channels/slack/manifest.ts +34 -6
- package/src/channels/slack/message-body.ts +90 -0
- package/src/channels/slack/thread-context.ts +1 -69
- package/src/channels/slack/types.ts +16 -1
- package/src/internal/builtin-tools/index.ts +40 -0
- package/src/internal/builtin-tools/reminders.ts +158 -0
- package/src/internal/cli-skills.ts +95 -0
- package/src/internal/cli-slack.ts +38 -14
- package/src/internal/cursor-event-relay.ts +67 -0
- package/src/internal/discovery.ts +52 -0
- package/src/internal/install-cursor-skills.ts +168 -60
- package/src/internal/reminder-runner.ts +30 -0
- package/src/internal/sdk-runner.ts +131 -13
- package/src/internal/server.ts +2 -0
- package/src/internal/session-engine.ts +14 -0
- package/src/internal/slack-provision-client.ts +7 -3
- package/src/types.ts +33 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.DCBsrfwP.js +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
|
@@ -11,6 +11,28 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { RelayOffsetStore } from "./cursor-relay-core.js";
|
|
13
13
|
export { RelayOffsetStore };
|
|
14
|
+
/**
|
|
15
|
+
* Comment snapshot from scm-events compact metadata. Carries what the GitHub
|
|
16
|
+
* channel's `issue_comment` / `pull_request_review_comment` Zod schemas
|
|
17
|
+
* require so relayed comment wakes parse without re-fetching the comment.
|
|
18
|
+
*/
|
|
19
|
+
export type CursorScmCommentMeta = {
|
|
20
|
+
id: number;
|
|
21
|
+
body: string;
|
|
22
|
+
htmlUrl: string;
|
|
23
|
+
authorLogin?: string;
|
|
24
|
+
/**
|
|
25
|
+
* GitHub `user.type` ("User", "Bot", …). Carried onto the stubbed
|
|
26
|
+
* `comment.user` / `sender` so `isGitHubAppBotAuthor` keeps recognizing
|
|
27
|
+
* the agent's own comments on the relay path (self/bot-loop gate).
|
|
28
|
+
*/
|
|
29
|
+
authorType?: string;
|
|
30
|
+
/** Review comments only. */
|
|
31
|
+
path?: string;
|
|
32
|
+
line?: number;
|
|
33
|
+
pullRequestReviewId?: number;
|
|
34
|
+
inReplyToId?: number;
|
|
35
|
+
};
|
|
14
36
|
/** PR snapshot from scm-events compact metadata (Sand-style; no raw body). */
|
|
15
37
|
export type CursorScmPullRequestMeta = {
|
|
16
38
|
number: number;
|
|
@@ -45,6 +67,11 @@ export interface CursorScmEvent {
|
|
|
45
67
|
* stub a Zod-valid GitHub `pull_request` webhook body.
|
|
46
68
|
*/
|
|
47
69
|
pullRequest?: CursorScmPullRequestMeta;
|
|
70
|
+
/**
|
|
71
|
+
* Comment snapshot when the backend saw `body.comment`. Enough to stub a
|
|
72
|
+
* Zod-valid `issue_comment` / `pull_request_review_comment` webhook body.
|
|
73
|
+
*/
|
|
74
|
+
comment?: CursorScmCommentMeta;
|
|
48
75
|
/** GitHub-side event time from the payload, when present. */
|
|
49
76
|
occurredAtMs?: number;
|
|
50
77
|
}
|
|
@@ -80,6 +107,8 @@ export declare function formatCursorScmEventLog(event: {
|
|
|
80
107
|
* Minimal GitHub webhook body from an SCM-events metadata envelope.
|
|
81
108
|
* When `pullRequest` has title + head/base refs+shas, emits a Zod-valid
|
|
82
109
|
* `pull_request` object for `onPullRequest`; otherwise identity-only stubs.
|
|
110
|
+
* When `comment` is present, emits a Zod-valid `comment` object so relayed
|
|
111
|
+
* `issue_comment` / `pull_request_review_comment` deliveries dispatch.
|
|
83
112
|
*/
|
|
84
113
|
export declare function scmMetadataToGitHubPayload(event: {
|
|
85
114
|
repo: string;
|
|
@@ -87,6 +116,7 @@ export declare function scmMetadataToGitHubPayload(event: {
|
|
|
87
116
|
prNumber?: number;
|
|
88
117
|
prUrl?: string;
|
|
89
118
|
pullRequest?: CursorScmPullRequestMeta;
|
|
119
|
+
comment?: CursorScmCommentMeta;
|
|
90
120
|
}): Record<string, unknown>;
|
|
91
121
|
/**
|
|
92
122
|
* GitHub SCM-events relay: a thin {@link CursorRelayCore} adapter. Consumers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-event-relay.d.ts","sourceRoot":"","sources":["../../src/internal/cursor-event-relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAGL,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,8EAA8E;AAC9E,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,mEAAmE;AACnE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AASD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,kFAAkF;AAClF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAgBT;AAED
|
|
1
|
+
{"version":3,"file":"cursor-event-relay.d.ts","sourceRoot":"","sources":["../../src/internal/cursor-event-relay.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,8 @@ export function formatCursorScmEventLog(event) {
|
|
|
40
40
|
* Minimal GitHub webhook body from an SCM-events metadata envelope.
|
|
41
41
|
* When `pullRequest` has title + head/base refs+shas, emits a Zod-valid
|
|
42
42
|
* `pull_request` object for `onPullRequest`; otherwise identity-only stubs.
|
|
43
|
+
* When `comment` is present, emits a Zod-valid `comment` object so relayed
|
|
44
|
+
* `issue_comment` / `pull_request_review_comment` deliveries dispatch.
|
|
43
45
|
*/
|
|
44
46
|
export function scmMetadataToGitHubPayload(event) {
|
|
45
47
|
var _a, _b, _c;
|
|
@@ -59,6 +61,41 @@ export function scmMetadataToGitHubPayload(event) {
|
|
|
59
61
|
},
|
|
60
62
|
};
|
|
61
63
|
payload.action = event.action;
|
|
64
|
+
const commentMeta = event.comment;
|
|
65
|
+
if (commentMeta !== undefined) {
|
|
66
|
+
const comment = {
|
|
67
|
+
id: commentMeta.id,
|
|
68
|
+
body: commentMeta.body,
|
|
69
|
+
html_url: commentMeta.htmlUrl,
|
|
70
|
+
};
|
|
71
|
+
if (commentMeta.authorLogin !== undefined) {
|
|
72
|
+
const author = {
|
|
73
|
+
login: commentMeta.authorLogin,
|
|
74
|
+
};
|
|
75
|
+
if (commentMeta.authorType !== undefined) {
|
|
76
|
+
// Without user.type the isGitHubAppBotAuthor gate fails open and the
|
|
77
|
+
// agent's own relayed comments could wake it again (bot loop).
|
|
78
|
+
author.type = commentMeta.authorType;
|
|
79
|
+
}
|
|
80
|
+
comment.user = author;
|
|
81
|
+
// The comment author is the closest thing the envelope has to the
|
|
82
|
+
// webhook sender; channels use it for self/bot-loop gates.
|
|
83
|
+
payload.sender = Object.assign({}, author);
|
|
84
|
+
}
|
|
85
|
+
if (commentMeta.path !== undefined) {
|
|
86
|
+
comment.path = commentMeta.path;
|
|
87
|
+
}
|
|
88
|
+
if (commentMeta.line !== undefined) {
|
|
89
|
+
comment.line = commentMeta.line;
|
|
90
|
+
}
|
|
91
|
+
if (commentMeta.pullRequestReviewId !== undefined) {
|
|
92
|
+
comment.pull_request_review_id = commentMeta.pullRequestReviewId;
|
|
93
|
+
}
|
|
94
|
+
if (commentMeta.inReplyToId !== undefined) {
|
|
95
|
+
comment.in_reply_to_id = commentMeta.inReplyToId;
|
|
96
|
+
}
|
|
97
|
+
payload.comment = comment;
|
|
98
|
+
}
|
|
62
99
|
const title = prMeta === null || prMeta === void 0 ? void 0 : prMeta.title;
|
|
63
100
|
const headRef = prMeta === null || prMeta === void 0 ? void 0 : prMeta.headRef;
|
|
64
101
|
const headSha = prMeta === null || prMeta === void 0 ? void 0 : prMeta.headSha;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/internal/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/internal/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAQrB,KAAK,UAAU,EAqBhB,MAAM,aAAa,CAAC;AAsBrB,MAAM,WAAW,uBAAuB;IACtC,sDAAsD;IACtD,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC3E;AAmBD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASrE;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,EAAE,CAAC,CA2B1B;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC,CAoBzD;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,uBAAuB,GAAG;IACjC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACtB,GACL,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC,CAgBzD;AAWD,iFAAiF;AACjF,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,CAIrC,CAAC;AAEH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,YAAY,CAAC,CA8DvB;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAElE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAOnE;AAuoBD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiB3E;AAwoBD,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,CAoInE"}
|
|
@@ -34,6 +34,7 @@ import { cursorAccountServersHasMixedWildcard, DEFAULT_MODEL, MAX_RUNNING_TURNS_
|
|
|
34
34
|
import { registerAuthoredModuleLoaders } from "./authored-loaders.js";
|
|
35
35
|
import { normalizePositiveInt } from "./bounded-int.js";
|
|
36
36
|
import { getDefinitionKind } from "./brand.js";
|
|
37
|
+
import { builtinTools } from "./builtin-tools/index.js";
|
|
37
38
|
import { isValidCron } from "./cron.js";
|
|
38
39
|
import { parseFrontmatter } from "./frontmatter.js";
|
|
39
40
|
import { isReservedSecretName, MAX_EGRESS_DOMAINS, validateEgressDomain, validateSecretName, } from "./hosting.js";
|
|
@@ -253,6 +254,13 @@ function loadAgent(ctx, agentDir, options) {
|
|
|
253
254
|
// warn that they exist.
|
|
254
255
|
if (!options.isRoot) {
|
|
255
256
|
yield warnUnsupportedSubagentSlots(ctx, agentDir);
|
|
257
|
+
if ((config === null || config === void 0 ? void 0 : config.builtinTools) !== undefined) {
|
|
258
|
+
ctx.diagnostics.push({
|
|
259
|
+
severity: "warning",
|
|
260
|
+
path: displayPath(ctx, join(agentDir, "agent.ts")),
|
|
261
|
+
message: "builtinTools is not supported on subagents; ignoring.",
|
|
262
|
+
});
|
|
263
|
+
}
|
|
256
264
|
return Object.assign(Object.assign(Object.assign(Object.assign({ name }, ((config === null || config === void 0 ? void 0 : config.description) === undefined
|
|
257
265
|
? {}
|
|
258
266
|
: { description: config.description })), ((config === null || config === void 0 ? void 0 : config.model) === undefined ? {} : { model: config.model })), (instructions === undefined ? {} : { instructions })), { runtime: "local", tools: [], skills: [], connections: [], subagents: [], seedFiles: [] });
|
|
@@ -294,6 +302,7 @@ function loadAgent(ctx, agentDir, options) {
|
|
|
294
302
|
hasCloudOptions: cloud !== undefined,
|
|
295
303
|
});
|
|
296
304
|
}
|
|
305
|
+
appendBuiltinTools(ctx, agentDir, tools, config === null || config === void 0 ? void 0 : config.builtinTools, runtime);
|
|
297
306
|
return {
|
|
298
307
|
name,
|
|
299
308
|
description: config === null || config === void 0 ? void 0 : config.description,
|
|
@@ -939,6 +948,38 @@ function warnUnsupportedSubagentSlots(ctx, subagentDir) {
|
|
|
939
948
|
}
|
|
940
949
|
});
|
|
941
950
|
}
|
|
951
|
+
/**
|
|
952
|
+
* Append enabled built-in tools after authored tools. Authored tools with
|
|
953
|
+
* the same name win; built-ins are server tools, so cloud runtimes get a
|
|
954
|
+
* warning instead of tools.
|
|
955
|
+
*/
|
|
956
|
+
function appendBuiltinTools(ctx, agentDir, tools, config, runtime) {
|
|
957
|
+
const builtin = builtinTools(config);
|
|
958
|
+
if (builtin.length === 0) {
|
|
959
|
+
return;
|
|
960
|
+
}
|
|
961
|
+
const agentPath = displayPath(ctx, join(agentDir, "agent.ts"));
|
|
962
|
+
if (runtime === "cloud") {
|
|
963
|
+
ctx.diagnostics.push({
|
|
964
|
+
severity: "warning",
|
|
965
|
+
path: agentPath,
|
|
966
|
+
message: "builtinTools are in-process server tools and are not available on cloud agents; they are skipped.",
|
|
967
|
+
});
|
|
968
|
+
return;
|
|
969
|
+
}
|
|
970
|
+
const authored = new Set(tools.map((tool) => tool.name));
|
|
971
|
+
for (const tool of builtin) {
|
|
972
|
+
if (authored.has(tool.name)) {
|
|
973
|
+
ctx.diagnostics.push({
|
|
974
|
+
severity: "warning",
|
|
975
|
+
path: agentPath,
|
|
976
|
+
message: `Authored tool "${tool.name}" shadows the built-in tool of the same name; the authored tool wins.`,
|
|
977
|
+
});
|
|
978
|
+
continue;
|
|
979
|
+
}
|
|
980
|
+
tools.push(tool);
|
|
981
|
+
}
|
|
982
|
+
}
|
|
942
983
|
function warnCloudRuntimeLimitations(ctx, agentDir, counts) {
|
|
943
984
|
const agentPath = displayPath(ctx, join(agentDir, "agent.ts"));
|
|
944
985
|
if (!counts.hasCloudOptions) {
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
*/
|
|
9
9
|
/** Category folder under ~/.cursor/skills (Cursor discovers nested skills). */
|
|
10
10
|
export declare const CURSOR_SKILLS_NAMESPACE = "agentkit";
|
|
11
|
+
/** How long the `init` offer waits for an answer before skipping the install. */
|
|
12
|
+
export declare const SKILL_PROMPT_TIMEOUT_MS = 45000;
|
|
11
13
|
export interface PackageSkill {
|
|
12
14
|
/** Frontmatter `name` (e.g. agentkit-create-agent). */
|
|
13
15
|
name: string;
|
|
@@ -35,30 +37,70 @@ export declare function findMissingCursorSkills(options?: {
|
|
|
35
37
|
packageRoot?: string;
|
|
36
38
|
skillsHome?: string;
|
|
37
39
|
}): Promise<PackageSkill[]>;
|
|
40
|
+
export interface SkillInstallResult {
|
|
41
|
+
/** Leaf dirs written. */
|
|
42
|
+
installed: string[];
|
|
43
|
+
/** Leaf dirs deleted because the package no longer ships them. */
|
|
44
|
+
removed: string[];
|
|
45
|
+
}
|
|
38
46
|
/**
|
|
39
47
|
* Copy each skill directory into `skillsHome/agentkit/<leafDir>/`.
|
|
40
48
|
* Always overwrites so a package upgrade refreshes local Cursor skills.
|
|
41
49
|
* Strips monorepo-only frontmatter and removes leaf dirs no longer shipped.
|
|
42
50
|
*/
|
|
43
|
-
export declare function installCursorSkills(skills: readonly PackageSkill[], skillsHome?: string): Promise<
|
|
51
|
+
export declare function installCursorSkills(skills: readonly PackageSkill[], skillsHome?: string): Promise<SkillInstallResult>;
|
|
44
52
|
/** Drop monorepo `paths` globs and fix package doc links for ~/.cursor installs. */
|
|
45
53
|
export declare function prepareSkillMarkdownForCursorInstall(content: string): string;
|
|
54
|
+
export interface SkillInstallPlan {
|
|
55
|
+
shipped: PackageSkill[];
|
|
56
|
+
/** Resolved `~/.cursor/skills`, to install into. */
|
|
57
|
+
skillsHome: string;
|
|
58
|
+
/** Install target: `<skillsHome>/agentkit`. */
|
|
59
|
+
directory: string;
|
|
60
|
+
/** Leaf dirs the package ships. */
|
|
61
|
+
leaves: string[];
|
|
62
|
+
/** Nothing installed yet, so this is a fresh install rather than a refresh. */
|
|
63
|
+
firstInstall: boolean;
|
|
64
|
+
/** Installed leaf dirs the package dropped; installing deletes them. */
|
|
65
|
+
orphans: string[];
|
|
66
|
+
}
|
|
67
|
+
/** What an install would do, for the offer and for `install-skills`. */
|
|
68
|
+
export declare function planSkillInstall(options?: {
|
|
69
|
+
packageRoot?: string;
|
|
70
|
+
skillsHome?: string;
|
|
71
|
+
}): Promise<SkillInstallPlan>;
|
|
72
|
+
/** `Installed 9 agentkit skills`, what it dropped, and where it went. */
|
|
73
|
+
export declare function formatSkillInstall(plan: SkillInstallPlan, result: SkillInstallResult): string;
|
|
46
74
|
export interface OfferInstallCursorSkillsOptions {
|
|
47
75
|
/** Skip when false (non-TTY / `--json`). */
|
|
48
76
|
interactive?: boolean;
|
|
49
77
|
packageRoot?: string;
|
|
50
78
|
skillsHome?: string;
|
|
51
|
-
/** Injected yes/no for tests. */
|
|
52
|
-
confirm?: (question: string) => Promise<boolean>;
|
|
79
|
+
/** Injected yes/no for tests. `undefined` means the prompt went unanswered. */
|
|
80
|
+
confirm?: (question: string) => Promise<boolean | undefined>;
|
|
53
81
|
out?: (text: string) => void;
|
|
54
82
|
}
|
|
55
83
|
/**
|
|
56
84
|
* On a TTY, offer to install/update every shipped package skill into
|
|
57
85
|
* ~/.cursor/skills/agentkit (always overwriting). No-op when non-interactive
|
|
58
|
-
* or the package ships no skills.
|
|
86
|
+
* or the package ships no skills. An unanswered prompt skips the install
|
|
87
|
+
* rather than blocking the caller — see `SKILL_PROMPT_TIMEOUT_MS`.
|
|
59
88
|
*/
|
|
60
89
|
export declare function offerInstallCursorSkills(options?: OfferInstallCursorSkillsOptions): Promise<{
|
|
61
90
|
installed: string[];
|
|
62
91
|
skipped: boolean;
|
|
63
92
|
}>;
|
|
93
|
+
export interface PromptYesNoOptions {
|
|
94
|
+
defaultYes: boolean;
|
|
95
|
+
out: (text: string) => void;
|
|
96
|
+
/** Give up after this long; `0` (or omitted) waits forever. */
|
|
97
|
+
timeoutMs?: number;
|
|
98
|
+
/** Answer source; defaults to `process.stdin`. */
|
|
99
|
+
input?: NodeJS.ReadableStream;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Ask a yes/no question. Resolves `undefined` when the answer never comes —
|
|
103
|
+
* the prompt timed out, or stdin closed on an empty line.
|
|
104
|
+
*/
|
|
105
|
+
export declare function promptYesNo(question: string, options: PromptYesNoOptions): Promise<boolean | undefined>;
|
|
64
106
|
//# sourceMappingURL=install-cursor-skills.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-cursor-skills.d.ts","sourceRoot":"","sources":["../../src/internal/install-cursor-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,GAAE,MAAsC,GAC3C,MAAM,CAGR;AAED,wEAAwE;AACxE,wBAAgB,uBAAuB,CACrC,UAAU,GAAE,MAA2B,GACtC,MAAM,CAER;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,EACpC,UAAU,GAAE,MAA2B,GACtC,MAAM,CAER;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,GAAE,MAAyB,GACrC,OAAO,CAAC,YAAY,EAAE,CAAC,CA2BzB;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAY1B;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,UAAU,GAAE,MAA2B,GACtC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"install-cursor-skills.d.ts","sourceRoot":"","sources":["../../src/internal/install-cursor-skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,12 +18,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
18
18
|
import { access, cp, mkdir, readdir, readFile, rm, writeFile, } from "node:fs/promises";
|
|
19
19
|
import { homedir } from "node:os";
|
|
20
20
|
import { join } from "node:path";
|
|
21
|
-
import { packageRootDir } from "./distribution.js";
|
|
21
|
+
import { CLI_COMMAND_NAME, packageRootDir } from "./distribution.js";
|
|
22
22
|
import { stdoutPalette } from "./terminal-style.js";
|
|
23
23
|
/** Monorepo-only skill; excluded from the published package. */
|
|
24
24
|
const SKIP_SKILL_DIRS = new Set(["operate"]);
|
|
25
25
|
/** Category folder under ~/.cursor/skills (Cursor discovers nested skills). */
|
|
26
26
|
export const CURSOR_SKILLS_NAMESPACE = "agentkit";
|
|
27
|
+
/** How long the `init` offer waits for an answer before skipping the install. */
|
|
28
|
+
export const SKILL_PROMPT_TIMEOUT_MS = 45000;
|
|
27
29
|
export function cursorSkillsHome(home) {
|
|
28
30
|
var _a;
|
|
29
31
|
if (home === void 0) { home = (_a = process.env.HOME) !== null && _a !== void 0 ? _a : homedir(); }
|
|
@@ -105,21 +107,9 @@ export function installCursorSkills(skills_1) {
|
|
|
105
107
|
return __awaiter(this, arguments, void 0, function* (skills, skillsHome = cursorSkillsHome()) {
|
|
106
108
|
const namespaceDir = agentkitCursorSkillsDir(skillsHome);
|
|
107
109
|
yield mkdir(namespaceDir, { recursive: true });
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const entries = yield readdir(namespaceDir, { withFileTypes: true });
|
|
112
|
-
existingLeaves = entries
|
|
113
|
-
.filter((entry) => entry.isDirectory())
|
|
114
|
-
.map((entry) => entry.name);
|
|
115
|
-
}
|
|
116
|
-
catch (_a) {
|
|
117
|
-
existingLeaves = [];
|
|
118
|
-
}
|
|
119
|
-
for (const leaf of existingLeaves) {
|
|
120
|
-
if (!shippedLeaves.has(leaf)) {
|
|
121
|
-
yield rm(join(namespaceDir, leaf), { recursive: true, force: true });
|
|
122
|
-
}
|
|
110
|
+
const removed = yield orphanLeaves(namespaceDir, skills);
|
|
111
|
+
for (const leaf of removed) {
|
|
112
|
+
yield rm(join(namespaceDir, leaf), { recursive: true, force: true });
|
|
123
113
|
}
|
|
124
114
|
const installed = [];
|
|
125
115
|
for (const skill of skills) {
|
|
@@ -133,7 +123,23 @@ export function installCursorSkills(skills_1) {
|
|
|
133
123
|
}
|
|
134
124
|
installed.push(skill.leafDir);
|
|
135
125
|
}
|
|
136
|
-
return installed;
|
|
126
|
+
return { installed, removed };
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/** Installed leaf dirs the package no longer ships. Installing deletes these. */
|
|
130
|
+
function orphanLeaves(namespaceDir, skills) {
|
|
131
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
132
|
+
const shipped = new Set(skills.map((skill) => skill.leafDir));
|
|
133
|
+
let entries;
|
|
134
|
+
try {
|
|
135
|
+
entries = yield readdir(namespaceDir, { withFileTypes: true });
|
|
136
|
+
}
|
|
137
|
+
catch (_a) {
|
|
138
|
+
return [];
|
|
139
|
+
}
|
|
140
|
+
return entries
|
|
141
|
+
.filter((entry) => entry.isDirectory() && !shipped.has(entry.name))
|
|
142
|
+
.map((entry) => entry.name);
|
|
137
143
|
});
|
|
138
144
|
}
|
|
139
145
|
/** Drop monorepo `paths` globs and fix package doc links for ~/.cursor installs. */
|
|
@@ -166,48 +172,88 @@ function stripPathsFromFrontmatter(frontmatter) {
|
|
|
166
172
|
}
|
|
167
173
|
return out.join("\n");
|
|
168
174
|
}
|
|
175
|
+
/** What an install would do, for the offer and for `install-skills`. */
|
|
176
|
+
export function planSkillInstall(options) {
|
|
177
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
178
|
+
var _a;
|
|
179
|
+
const skillsHome = (_a = options === null || options === void 0 ? void 0 : options.skillsHome) !== null && _a !== void 0 ? _a : cursorSkillsHome();
|
|
180
|
+
const directory = agentkitCursorSkillsDir(skillsHome);
|
|
181
|
+
const shipped = yield listShippedPackageSkills(options === null || options === void 0 ? void 0 : options.packageRoot);
|
|
182
|
+
const missing = yield findMissingCursorSkills({
|
|
183
|
+
packageRoot: options === null || options === void 0 ? void 0 : options.packageRoot,
|
|
184
|
+
skillsHome,
|
|
185
|
+
});
|
|
186
|
+
return {
|
|
187
|
+
shipped,
|
|
188
|
+
skillsHome,
|
|
189
|
+
directory,
|
|
190
|
+
leaves: shipped.map((skill) => skill.leafDir),
|
|
191
|
+
firstInstall: missing.length === shipped.length,
|
|
192
|
+
orphans: yield orphanLeaves(directory, shipped),
|
|
193
|
+
};
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
/** `Installed 9 agentkit skills`, what it dropped, and where it went. */
|
|
197
|
+
export function formatSkillInstall(plan, result) {
|
|
198
|
+
const noun = result.installed.length === 1 ? "skill" : "skills";
|
|
199
|
+
const verb = plan.firstInstall ? "Installed" : "Updated";
|
|
200
|
+
const lines = [`${verb} ${result.installed.length} agentkit ${noun}`];
|
|
201
|
+
if (result.removed.length > 0) {
|
|
202
|
+
lines.push(` removed: ${result.removed.join(", ")}`);
|
|
203
|
+
}
|
|
204
|
+
lines.push(` location: ${plan.directory}`);
|
|
205
|
+
return `${lines.join("\n")}\n`;
|
|
206
|
+
}
|
|
169
207
|
/**
|
|
170
208
|
* On a TTY, offer to install/update every shipped package skill into
|
|
171
209
|
* ~/.cursor/skills/agentkit (always overwriting). No-op when non-interactive
|
|
172
|
-
* or the package ships no skills.
|
|
210
|
+
* or the package ships no skills. An unanswered prompt skips the install
|
|
211
|
+
* rather than blocking the caller — see `SKILL_PROMPT_TIMEOUT_MS`.
|
|
173
212
|
*/
|
|
174
213
|
export function offerInstallCursorSkills() {
|
|
175
214
|
return __awaiter(this, arguments, void 0, function* (options = {}) {
|
|
176
|
-
var _a, _b, _c
|
|
215
|
+
var _a, _b, _c;
|
|
177
216
|
const out = (_a = options.out) !== null && _a !== void 0 ? _a : ((text) => process.stdout.write(text));
|
|
178
217
|
const interactive = (_b = options.interactive) !== null && _b !== void 0 ? _b : (process.stdin.isTTY === true && process.stdout.isTTY === true);
|
|
179
|
-
|
|
180
|
-
if (shipped.length === 0) {
|
|
218
|
+
if (!interactive) {
|
|
181
219
|
return { installed: [], skipped: true };
|
|
182
220
|
}
|
|
183
|
-
const
|
|
184
|
-
const targetDir = agentkitCursorSkillsDir(home);
|
|
185
|
-
const missing = yield findMissingCursorSkills({
|
|
221
|
+
const plan = yield planSkillInstall({
|
|
186
222
|
packageRoot: options.packageRoot,
|
|
187
|
-
skillsHome:
|
|
223
|
+
skillsHome: options.skillsHome,
|
|
188
224
|
});
|
|
189
|
-
|
|
190
|
-
const noun = shipped.length === 1 ? "skill" : "skills";
|
|
191
|
-
const verb = missing.length === shipped.length ? "Install" : "Update";
|
|
192
|
-
const question = `${verb} ${shipped.length} agentkit ${noun} in ${targetDir}?`;
|
|
193
|
-
if (!interactive) {
|
|
225
|
+
if (plan.shipped.length === 0) {
|
|
194
226
|
return { installed: [], skipped: true };
|
|
195
227
|
}
|
|
228
|
+
const noun = plan.shipped.length === 1 ? "skill" : "skills";
|
|
229
|
+
const verb = plan.firstInstall ? "Install" : "Update";
|
|
196
230
|
const c = stdoutPalette();
|
|
197
|
-
out(`${
|
|
198
|
-
out(c.dim(` ${
|
|
199
|
-
if (
|
|
231
|
+
out(`${verb} ${plan.shipped.length} agentkit ${noun} in ${plan.directory}?\n`);
|
|
232
|
+
out(c.dim(` ${plan.leaves.join(", ")}\n`));
|
|
233
|
+
if (!plan.firstInstall) {
|
|
200
234
|
out(c.dim(" (overwrites existing copies with the package version)\n"));
|
|
201
235
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
236
|
+
if (plan.orphans.length > 0) {
|
|
237
|
+
out(c.dim(` (deletes ${plan.orphans.join(", ")})\n`));
|
|
238
|
+
}
|
|
239
|
+
const confirm = (_c = options.confirm) !== null && _c !== void 0 ? _c : ((q) => promptYesNo(q, {
|
|
240
|
+
defaultYes: true,
|
|
241
|
+
out,
|
|
242
|
+
timeoutMs: SKILL_PROMPT_TIMEOUT_MS,
|
|
243
|
+
}));
|
|
244
|
+
const accepted = yield confirm(`${verb} now?`);
|
|
245
|
+
if (accepted !== true) {
|
|
246
|
+
// `undefined` is the prompt timing out or stdin closing; both mean nobody
|
|
247
|
+
// said yes, so do not claim a duration neither case is guaranteed to have.
|
|
248
|
+
const why = accepted === undefined
|
|
249
|
+
? "No answer — skipped the skill install."
|
|
250
|
+
: "Skipped skill install.";
|
|
251
|
+
out(c.dim(`${why}\nInstall later: ${CLI_COMMAND_NAME} install-skills (${plan.directory})\n\n`));
|
|
206
252
|
return { installed: [], skipped: true };
|
|
207
253
|
}
|
|
208
|
-
const
|
|
209
|
-
out(`${
|
|
210
|
-
return { installed, skipped: false };
|
|
254
|
+
const result = yield installCursorSkills(plan.shipped, plan.skillsHome);
|
|
255
|
+
out(`${formatSkillInstall(plan, result)}\n`);
|
|
256
|
+
return { installed: result.installed, skipped: false };
|
|
211
257
|
});
|
|
212
258
|
}
|
|
213
259
|
function parseSkillName(skillMd) {
|
|
@@ -228,14 +274,24 @@ function parseSkillName(skillMd) {
|
|
|
228
274
|
// Strip optional quotes around the YAML scalar.
|
|
229
275
|
return raw.replace(/^["']|["']$/g, "");
|
|
230
276
|
}
|
|
231
|
-
|
|
277
|
+
/**
|
|
278
|
+
* Ask a yes/no question. Resolves `undefined` when the answer never comes —
|
|
279
|
+
* the prompt timed out, or stdin closed on an empty line.
|
|
280
|
+
*/
|
|
281
|
+
export function promptYesNo(question, options) {
|
|
232
282
|
return __awaiter(this, void 0, void 0, function* () {
|
|
283
|
+
var _a;
|
|
233
284
|
const hint = options.defaultYes ? "Y/n" : "y/N";
|
|
285
|
+
const input = (_a = options.input) !== null && _a !== void 0 ? _a : process.stdin;
|
|
234
286
|
options.out(`${question} [${hint}] `);
|
|
235
|
-
|
|
236
|
-
const line = yield readOneLine(
|
|
237
|
-
|
|
238
|
-
if (line === undefined
|
|
287
|
+
input.resume();
|
|
288
|
+
const line = yield readOneLine(input, options.timeoutMs);
|
|
289
|
+
input.pause();
|
|
290
|
+
if (line === undefined) {
|
|
291
|
+
options.out("\n");
|
|
292
|
+
return undefined;
|
|
293
|
+
}
|
|
294
|
+
if (line.trim() === "") {
|
|
239
295
|
return options.defaultYes;
|
|
240
296
|
}
|
|
241
297
|
const answer = line.trim().toLowerCase();
|
|
@@ -248,9 +304,11 @@ function promptYesNo(question, options) {
|
|
|
248
304
|
return options.defaultYes;
|
|
249
305
|
});
|
|
250
306
|
}
|
|
251
|
-
|
|
307
|
+
/** The line, or `undefined` when the stream ends or the clock runs out first. */
|
|
308
|
+
function readOneLine(stream, timeoutMs) {
|
|
252
309
|
return new Promise((resolve) => {
|
|
253
310
|
let buffer = "";
|
|
311
|
+
let timer;
|
|
254
312
|
const onData = (chunk) => {
|
|
255
313
|
buffer += typeof chunk === "string" ? chunk : chunk.toString("utf8");
|
|
256
314
|
const newline = buffer.indexOf("\n");
|
|
@@ -260,15 +318,25 @@ function readOneLine(stream) {
|
|
|
260
318
|
cleanup();
|
|
261
319
|
resolve(buffer.slice(0, newline).replace(/\r$/, ""));
|
|
262
320
|
};
|
|
263
|
-
|
|
321
|
+
// EOF and the timeout both land here. A tty holds a half-typed line until
|
|
322
|
+
// Enter, so a non-empty buffer only ever happens on piped input.
|
|
323
|
+
const giveUp = () => {
|
|
264
324
|
cleanup();
|
|
265
325
|
resolve(buffer === "" ? undefined : buffer.replace(/\r$/, ""));
|
|
266
326
|
};
|
|
267
327
|
const cleanup = () => {
|
|
328
|
+
if (timer !== undefined) {
|
|
329
|
+
clearTimeout(timer);
|
|
330
|
+
}
|
|
268
331
|
stream.off("data", onData);
|
|
269
|
-
stream.off("end",
|
|
332
|
+
stream.off("end", giveUp);
|
|
270
333
|
};
|
|
271
334
|
stream.on("data", onData);
|
|
272
|
-
stream.on("end",
|
|
335
|
+
stream.on("end", giveUp);
|
|
336
|
+
if (timeoutMs !== undefined && timeoutMs > 0) {
|
|
337
|
+
timer = setTimeout(giveUp, timeoutMs);
|
|
338
|
+
// Never keep the process alive purely to wait for an answer.
|
|
339
|
+
timer.unref();
|
|
340
|
+
}
|
|
273
341
|
});
|
|
274
342
|
}
|
|
@@ -42,6 +42,13 @@ export declare class ReminderRunner {
|
|
|
42
42
|
cancel(id: string, reason?: string): Promise<ReminderInfo | undefined>;
|
|
43
43
|
/** Cancel all armed reminders matching a continuation token (e.g. PR closed). */
|
|
44
44
|
cancelForContinuation(continuationToken: string, reason: string): Promise<number>;
|
|
45
|
+
/**
|
|
46
|
+
* Re-key armed reminders when a channel rotates a session's continuation
|
|
47
|
+
* token (the built-in HTTP channel rotates after every follow-up). Without
|
|
48
|
+
* this, a reminder armed before the rotation misses its session at fire
|
|
49
|
+
* time and disarms as `session_gone`.
|
|
50
|
+
*/
|
|
51
|
+
rekeyContinuation(channelId: string, oldToken: string, newToken: string): Promise<number>;
|
|
45
52
|
/** Fire one reminder immediately (dev / hillclimb). */
|
|
46
53
|
dispatch(reminderId: string): Promise<{
|
|
47
54
|
reminderId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAEV,mBAAmB,EAGnB,YAAY,EAEb,MAAM,aAAa,CAAC;AASrB,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAFzC,YACE,UAAU,EAAE,MAAM,EACT,oBAAoB,EAAE,MAAM,EAAE,EAIxC;CACF;AAyDD,qBAAa,cAAc;IAUvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D,OAAO,CAAC,OAAO,CAAS;IAExB,YACmB,MAAM,EAAE,aAAa,EACrB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EAG3D;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,sEAAsE;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA+B3B;IAED;;;OAGG;YACW,kBAAkB;IA6BhC,8EAA8E;YAChE,OAAO;IAKrB,IAAI,IAAI,IAAI,CAOX;IAEK,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CA8D9D;IAEK,IAAI,CAAC,MAAM,CAAC,EAAE;QAClB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA4B1B;IAEK,MAAM,CACV,EAAE,EAAE,MAAM,EACV,MAAM,SAAoB,GACzB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAkBnC;IAED,iFAAiF;IAC3E,qBAAqB,CACzB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAUjB;IAED,uDAAuD;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAC1C,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAQD;IAED,OAAO,CAAC,QAAQ;IA4ChB,OAAO,CAAC,UAAU;YAQJ,IAAI;YA6GJ,aAAa;IAY3B,OAAO,CAAC,eAAe;IAsBvB;;;OAGG;YACW,mBAAmB;YAcnB,aAAa;YAcb,YAAY;IA0C1B,OAAO,CAAC,gBAAgB;IAyDxB,OAAO,CAAC,iBAAiB;YAeX,MAAM;YAYN,SAAS;CAoFxB;AAGD,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAEV,mBAAmB,EAGnB,YAAY,EAEb,MAAM,aAAa,CAAC;AASrB,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAFzC,YACE,UAAU,EAAE,MAAM,EACT,oBAAoB,EAAE,MAAM,EAAE,EAIxC;CACF;AAyDD,qBAAa,cAAc;IAUvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D,OAAO,CAAC,OAAO,CAAS;IAExB,YACmB,MAAM,EAAE,aAAa,EACrB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EAG3D;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,sEAAsE;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA+B3B;IAED;;;OAGG;YACW,kBAAkB;IA6BhC,8EAA8E;YAChE,OAAO;IAKrB,IAAI,IAAI,IAAI,CAOX;IAEK,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CA8D9D;IAEK,IAAI,CAAC,MAAM,CAAC,EAAE;QAClB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA4B1B;IAEK,MAAM,CACV,EAAE,EAAE,MAAM,EACV,MAAM,SAAoB,GACzB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAkBnC;IAED,iFAAiF;IAC3E,qBAAqB,CACzB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAUjB;IAED;;;;;OAKG;IACG,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAkBjB;IAED,uDAAuD;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAC1C,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAQD;IAED,OAAO,CAAC,QAAQ;IA4ChB,OAAO,CAAC,UAAU;YAQJ,IAAI;YA6GJ,aAAa;IAY3B,OAAO,CAAC,eAAe;IAsBvB;;;OAGG;YACW,mBAAmB;YAcnB,aAAa;YAcb,YAAY;IA0C1B,OAAO,CAAC,gBAAgB;IAyDxB,OAAO,CAAC,iBAAiB;YAeX,MAAM;YAYN,SAAS;CAoFxB;AAGD,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -279,6 +279,27 @@ export class ReminderRunner {
|
|
|
279
279
|
return n;
|
|
280
280
|
});
|
|
281
281
|
}
|
|
282
|
+
/**
|
|
283
|
+
* Re-key armed reminders when a channel rotates a session's continuation
|
|
284
|
+
* token (the built-in HTTP channel rotates after every follow-up). Without
|
|
285
|
+
* this, a reminder armed before the rotation misses its session at fire
|
|
286
|
+
* time and disarms as `session_gone`.
|
|
287
|
+
*/
|
|
288
|
+
rekeyContinuation(channelId, oldToken, newToken) {
|
|
289
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
290
|
+
const armed = yield this.store.listArmed();
|
|
291
|
+
let n = 0;
|
|
292
|
+
for (const record of armed) {
|
|
293
|
+
if (record.channelId !== channelId ||
|
|
294
|
+
record.continuationToken !== oldToken) {
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
yield this.persist(Object.assign(Object.assign({}, record), { continuationToken: newToken, updatedAt: new Date().toISOString() }));
|
|
298
|
+
n += 1;
|
|
299
|
+
}
|
|
300
|
+
return n;
|
|
301
|
+
});
|
|
302
|
+
}
|
|
282
303
|
/** Fire one reminder immediately (dev / hillclimb). */
|
|
283
304
|
dispatch(reminderId) {
|
|
284
305
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -44,6 +44,13 @@ export interface CursorSdkRunnerOptions {
|
|
|
44
44
|
/** Diagnostics for degraded paths (resume-miss fallback). */
|
|
45
45
|
logger?: (line: string) => void;
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* The backend's `NotLoggedIn` copy ("Authentication error" title, "try
|
|
49
|
+
* logging out and back in." detail) as it surfaces through SDK RunResults.
|
|
50
|
+
* Deliberately narrow: this gates a one-shot in-place retry, and matching
|
|
51
|
+
* broader error text would retry turns that a fresh transport cannot fix.
|
|
52
|
+
*/
|
|
53
|
+
export declare function isAuthErrorMessage(message: string | undefined): boolean;
|
|
47
54
|
export declare class CursorSdkRunner implements AgentRunner {
|
|
48
55
|
private readonly options;
|
|
49
56
|
private readonly agents;
|
|
@@ -51,6 +58,7 @@ export declare class CursorSdkRunner implements AgentRunner {
|
|
|
51
58
|
private readonly prewarmReleases;
|
|
52
59
|
constructor(options?: CursorSdkRunnerOptions);
|
|
53
60
|
runTurn(request: RunnerTurnRequest): Promise<TurnOutcome>;
|
|
61
|
+
private runTurnAttempt;
|
|
54
62
|
/**
|
|
55
63
|
* Build the local executor for a workspace before any session asks for it.
|
|
56
64
|
* The warmed executor is reference counted, so the lease is held until
|
|
@@ -59,6 +67,13 @@ export declare class CursorSdkRunner implements AgentRunner {
|
|
|
59
67
|
prewarm(request: RunnerPrewarmRequest): Promise<PrewarmOutcome>;
|
|
60
68
|
dispose(): Promise<void>;
|
|
61
69
|
private getAgent;
|
|
70
|
+
/**
|
|
71
|
+
* Drop a cached handle and close it best-effort to release its transport
|
|
72
|
+
* and executor lease. Identity-checked so a turn that lost a race with a
|
|
73
|
+
* newer open cannot evict the replacement handle.
|
|
74
|
+
*/
|
|
75
|
+
private evictAgent;
|
|
76
|
+
private log;
|
|
62
77
|
private requireApiKey;
|
|
63
78
|
private buildSharedOptions;
|
|
64
79
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-runner.d.ts","sourceRoot":"","sources":["../../src/internal/sdk-runner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAC;AAErB,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D;;;;;OAKG;IACH,OAAO,CAAC,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,iBAAiB,EACf,cAAc,GACd,gBAAgB,GAChB,SAAS,GACT,YAAY,GACZ,WAAW,GACX,OAAO,CACV,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAcxD,MAAM,WAAW,sBAAsB;IACrC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,eAAgB,YAAW,WAAW;IAKrC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAElE,YAA6B,OAAO,GAAE,sBAA2B,EAAI;IAE/D,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"sdk-runner.d.ts","sourceRoot":"","sources":["../../src/internal/sdk-runner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAC;AAErB,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D;;;;;OAKG;IACH,OAAO,CAAC,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,iBAAiB,EACf,cAAc,GACd,gBAAgB,GAChB,SAAS,GACT,YAAY,GACZ,WAAW,GACX,OAAO,CACV,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAcxD,MAAM,WAAW,sBAAsB;IACrC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAwBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKvE;AAED,qBAAa,eAAgB,YAAW,WAAW;IAKrC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAElE,YAA6B,OAAO,GAAE,sBAA2B,EAAI;IAE/D,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAkC9D;YAEa,cAAc;IAyE5B;;;;OAIG;IACG,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAepE;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAY7B;IAED,OAAO,CAAC,QAAQ;IA0BhB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,kBAAkB;IAc1B;;;OAGG;YACW,iBAAiB;YAkBjB,SAAS;YAOT,cAAc;YA6Bd,cAAc;IAqC5B,OAAO,CAAC,QAAQ;CAUjB;AAED,4EAA4E;AAC5E,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAMT;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,cAAc,CAQpE;AAmED,wBAAgB,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,CAExE"}
|