@cursor/july 0.1.12 → 0.1.15

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.
Files changed (168) hide show
  1. package/dist/bin/agent-serve.js +32 -9
  2. package/dist/channels/github/api.d.ts.map +1 -1
  3. package/dist/channels/github/api.js +11 -4
  4. package/dist/channels/github/cursor-account.d.ts +21 -1
  5. package/dist/channels/github/cursor-account.d.ts.map +1 -1
  6. package/dist/channels/github/cursor-account.js +29 -1
  7. package/dist/channels/github/github-channel.d.ts.map +1 -1
  8. package/dist/channels/github/github-channel.js +1 -1
  9. package/dist/channels/slack/api.d.ts +9 -0
  10. package/dist/channels/slack/api.d.ts.map +1 -1
  11. package/dist/channels/slack/api.js +40 -7
  12. package/dist/channels/slack/eval-directive.d.ts +3 -0
  13. package/dist/channels/slack/eval-directive.d.ts.map +1 -1
  14. package/dist/channels/slack/eval-directive.js +20 -1
  15. package/dist/channels/slack/post-update-delivery.d.ts +85 -0
  16. package/dist/channels/slack/post-update-delivery.d.ts.map +1 -0
  17. package/dist/docs/404.html +2 -2
  18. package/dist/docs/ab.html +3 -3
  19. package/dist/docs/assets/{app.Dh_JkJjI.js → app.DpdGZTLe.js} +1 -1
  20. package/dist/docs/assets/chunks/@localSearchIndexroot.D2d8CfFS.js +1 -0
  21. package/dist/docs/assets/chunks/{VPLocalSearchBox.CptQNLkR.js → VPLocalSearchBox.IB-0QqIT.js} +1 -1
  22. package/dist/docs/assets/chunks/{theme.DWflH-LQ.js → theme.-fYBoNtR.js} +2 -2
  23. package/dist/docs/assets/{evals.md.DAgEc_hL.js → evals.md.DYOjkRCX.js} +10 -4
  24. package/dist/docs/assets/{evals.md.DAgEc_hL.lean.js → evals.md.DYOjkRCX.lean.js} +1 -1
  25. package/dist/docs/assets/{reference_cli.md.B74NrVzb.js → reference_cli.md.DnYfr5V2.js} +4 -1
  26. package/dist/docs/assets/{reference_http-api.md.Dx_nmDG6.js → reference_http-api.md.BncLd3PZ.js} +2 -2
  27. package/dist/docs/assets/{reference_http-api.md.Dx_nmDG6.lean.js → reference_http-api.md.BncLd3PZ.lean.js} +1 -1
  28. package/dist/docs/building-with-agents.html +3 -3
  29. package/dist/docs/concepts.html +3 -3
  30. package/dist/docs/deployment.html +3 -3
  31. package/dist/docs/evals.html +13 -7
  32. package/dist/docs/example-agents/approval-buddy.html +3 -3
  33. package/dist/docs/example-agents/benny.html +3 -3
  34. package/dist/docs/example-agents/bugbot.html +3 -3
  35. package/dist/docs/example-agents/codebase-wiki.html +3 -3
  36. package/dist/docs/example-agents/codeowners-review.html +3 -3
  37. package/dist/docs/example-agents/concierge.html +3 -3
  38. package/dist/docs/example-agents/fsd.html +3 -3
  39. package/dist/docs/example-agents/index.html +3 -3
  40. package/dist/docs/example-agents/knowledge-base.html +3 -3
  41. package/dist/docs/example-agents/oncall.html +3 -3
  42. package/dist/docs/example-agents/security-reviewer.html +3 -3
  43. package/dist/docs/example-agents/slack-agent.html +3 -3
  44. package/dist/docs/example-agents/weather-agent.html +3 -3
  45. package/dist/docs/guides/agent-to-agent.html +3 -3
  46. package/dist/docs/guides/cloud-runtime.html +3 -3
  47. package/dist/docs/guides/github.html +3 -3
  48. package/dist/docs/guides/human-in-the-loop.html +3 -3
  49. package/dist/docs/guides/mcp-oauth.html +3 -3
  50. package/dist/docs/guides/slack.html +3 -3
  51. package/dist/docs/guides/webhooks.html +3 -3
  52. package/dist/docs/hashmap.json +1 -1
  53. package/dist/docs/hillclimbing.html +3 -3
  54. package/dist/docs/index.html +3 -3
  55. package/dist/docs/quickstart.html +3 -3
  56. package/dist/docs/reference/agent-config.html +3 -3
  57. package/dist/docs/reference/channels.html +3 -3
  58. package/dist/docs/reference/cli.html +8 -5
  59. package/dist/docs/reference/connections.html +3 -3
  60. package/dist/docs/reference/hooks.html +3 -3
  61. package/dist/docs/reference/http-api.html +5 -5
  62. package/dist/docs/reference/instructions.html +3 -3
  63. package/dist/docs/reference/playground.html +3 -3
  64. package/dist/docs/reference/project-layout.html +3 -3
  65. package/dist/docs/reference/prompt.html +3 -3
  66. package/dist/docs/reference/schedules.html +3 -3
  67. package/dist/docs/reference/sessions.html +3 -3
  68. package/dist/docs/reference/skills.html +3 -3
  69. package/dist/docs/reference/subagents.html +3 -3
  70. package/dist/docs/reference/tools.html +3 -3
  71. package/dist/docs/scaffolding-agents.html +3 -3
  72. package/dist/docs/storage.html +3 -3
  73. package/dist/docs/troubleshooting.html +3 -3
  74. package/dist/evals.d.ts +49 -2
  75. package/dist/evals.d.ts.map +1 -1
  76. package/dist/evals.js +53 -16
  77. package/dist/internal/cli-ax.d.ts +4 -0
  78. package/dist/internal/cli-ax.d.ts.map +1 -1
  79. package/dist/internal/cli-ax.js +166 -33
  80. package/dist/internal/cli-deploy.d.ts +8 -0
  81. package/dist/internal/cli-deploy.d.ts.map +1 -1
  82. package/dist/internal/cli-deploy.js +92 -12
  83. package/dist/internal/cli-mcp-oauth.d.ts +14 -2
  84. package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
  85. package/dist/internal/cli-mcp-oauth.js +95 -2
  86. package/dist/internal/cursor/backend-client.d.ts +34 -0
  87. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  88. package/dist/internal/cursor/backend-client.js +73 -9
  89. package/dist/internal/cursor/credentials.d.ts +7 -1
  90. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  91. package/dist/internal/cursor/credentials.js +9 -3
  92. package/dist/internal/cursor-account-mcp-auth.d.ts +55 -0
  93. package/dist/internal/cursor-account-mcp-auth.d.ts.map +1 -0
  94. package/dist/internal/cursor-account-mcp-auth.js +175 -0
  95. package/dist/internal/deploy-client.d.ts +6 -0
  96. package/dist/internal/deploy-client.d.ts.map +1 -1
  97. package/dist/internal/deploy-client.js +13 -0
  98. package/dist/internal/eval-run-store.d.ts +15 -0
  99. package/dist/internal/eval-run-store.d.ts.map +1 -1
  100. package/dist/internal/eval-run-store.js +94 -8
  101. package/dist/internal/eval-runner.d.ts +14 -0
  102. package/dist/internal/eval-runner.d.ts.map +1 -1
  103. package/dist/internal/eval-runner.js +111 -22
  104. package/dist/internal/evals-client.d.ts +9 -1
  105. package/dist/internal/evals-client.d.ts.map +1 -1
  106. package/dist/internal/evals-client.js +44 -1
  107. package/dist/internal/http-channel.d.ts.map +1 -1
  108. package/dist/internal/http-channel.js +74 -7
  109. package/dist/internal/map-pool.d.ts +6 -1
  110. package/dist/internal/map-pool.d.ts.map +1 -1
  111. package/dist/internal/map-pool.js +8 -1
  112. package/dist/internal/mcp-host.d.ts +13 -0
  113. package/dist/internal/mcp-host.d.ts.map +1 -1
  114. package/dist/internal/mcp-host.js +68 -13
  115. package/dist/internal/persistence-coordinator.d.ts +127 -0
  116. package/dist/internal/persistence-coordinator.d.ts.map +1 -0
  117. package/dist/internal/run-client.d.ts +5 -1
  118. package/dist/internal/run-client.d.ts.map +1 -1
  119. package/dist/internal/run-client.js +26 -5
  120. package/dist/internal/server.d.ts.map +1 -1
  121. package/dist/internal/server.js +57 -4
  122. package/dist/internal/session-engine.d.ts +13 -0
  123. package/dist/internal/session-engine.d.ts.map +1 -1
  124. package/dist/internal/session-engine.js +49 -0
  125. package/dist/internal/storage-coordinator.d.ts +7 -0
  126. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  127. package/dist/internal/storage-coordinator.js +29 -4
  128. package/dist/persistence.d.ts +184 -0
  129. package/dist/persistence.d.ts.map +1 -0
  130. package/dist/playground/assets/{index-1dzluIcW.js → index-BVMOoiek.js} +44 -44
  131. package/dist/playground/assets/index-DYmP4b--.css +1 -0
  132. package/dist/playground/index.html +2 -2
  133. package/dist/types.d.ts +10 -0
  134. package/dist/types.d.ts.map +1 -1
  135. package/docs/evals.md +46 -11
  136. package/docs/reference/cli.md +3 -0
  137. package/docs/reference/http-api.md +2 -1
  138. package/package.json +1 -1
  139. package/skills/evals/SKILL.md +10 -0
  140. package/src/bin/agent-serve.ts +38 -8
  141. package/src/channels/github/api.ts +12 -1
  142. package/src/channels/github/cursor-account.ts +51 -1
  143. package/src/channels/github/github-channel.ts +4 -1
  144. package/src/channels/slack/api.ts +57 -8
  145. package/src/channels/slack/eval-directive.ts +24 -1
  146. package/src/evals.ts +112 -25
  147. package/src/internal/cli-ax.ts +195 -16
  148. package/src/internal/cli-deploy.ts +140 -13
  149. package/src/internal/cli-mcp-oauth.ts +122 -3
  150. package/src/internal/cursor/backend-client.ts +104 -1
  151. package/src/internal/cursor/credentials.ts +10 -2
  152. package/src/internal/cursor-account-mcp-auth.ts +241 -0
  153. package/src/internal/deploy-client.ts +16 -0
  154. package/src/internal/eval-run-store.ts +97 -6
  155. package/src/internal/eval-runner.ts +129 -18
  156. package/src/internal/evals-client.ts +82 -0
  157. package/src/internal/http-channel.ts +87 -6
  158. package/src/internal/map-pool.ts +8 -1
  159. package/src/internal/mcp-host.ts +74 -16
  160. package/src/internal/run-client.ts +32 -1
  161. package/src/internal/server.ts +69 -2
  162. package/src/internal/session-engine.ts +58 -0
  163. package/src/internal/storage-coordinator.ts +32 -6
  164. package/src/types.ts +10 -0
  165. package/dist/docs/assets/chunks/@localSearchIndexroot.Er_R50vY.js +0 -1
  166. package/dist/internal/json-dir-store.js +0 -100
  167. package/dist/playground/assets/index-kZjeJs1v.css +0 -1
  168. /package/dist/docs/assets/{reference_cli.md.B74NrVzb.lean.js → reference_cli.md.DnYfr5V2.lean.js} +0 -0
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Service-account connector authorization for
3
+ * `defineConnection({ cursorAccount: true })` on hosted deployments.
4
+ *
5
+ * Hosted engines authenticate as their deployment's dedicated service
6
+ * account, whose connector OAuth tokens live backend-side. This flow is the
7
+ * dashboard's Authenticate button as a CLI loop: probe the connectors via
8
+ * `CheckHttpMcpStatus` (which mints a complete OAuth `authUrl` per connector
9
+ * needing auth), open each URL for the human to grant, and poll until the
10
+ * backend reports the token stored. Nothing token-shaped ever touches this
11
+ * process — the cursor.com callback stores tokens against the service
12
+ * account. Used by `agentkit mcp oauth <connection>` and the post-deploy
13
+ * hook in `cli-deploy.ts`.
14
+ */
15
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
16
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
17
+ return new (P || (P = Promise))(function (resolve, reject) {
18
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
19
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
20
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
21
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
22
+ });
23
+ };
24
+ import { LOG_PREFIX } from "./distribution.js";
25
+ import { openBrowser } from "./mcp-oauth.js";
26
+ const DEFAULT_POLL_INTERVAL_MS = 3000;
27
+ const DEFAULT_POLL_TIMEOUT_MS = 5 * 60 * 1000;
28
+ /** Same default the dashboard uses; MCP_OAUTH_REDIRECT_URI overrides for dev. */
29
+ export function mcpOauthRedirectUri() {
30
+ const override = process.env.MCP_OAUTH_REDIRECT_URI;
31
+ if (override !== undefined && override.trim() !== "") {
32
+ return override.trim();
33
+ }
34
+ return "https://www.cursor.com/agents/mcp/oauth/callback";
35
+ }
36
+ function sleepMs(ms) {
37
+ return new Promise((resolve) => setTimeout(resolve, ms));
38
+ }
39
+ /**
40
+ * Authorize the deployment service account for the connection's connectors.
41
+ * Already-authorized connectors are skipped; the rest get a browser OAuth
42
+ * each (sequentially), polled until the backend stores the token.
43
+ */
44
+ export function authorizeCursorAccountConnectors(args) {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ var _a, _b, _c, _d, _e, _f;
47
+ const { backendClient, teamId, serviceAccountId, connectionName, out, err } = args;
48
+ const open = (_a = args.openBrowserImpl) !== null && _a !== void 0 ? _a : openBrowser;
49
+ const sleep = (_b = args.sleep) !== null && _b !== void 0 ? _b : sleepMs;
50
+ const pollIntervalMs = (_c = args.pollIntervalMs) !== null && _c !== void 0 ? _c : DEFAULT_POLL_INTERVAL_MS;
51
+ const pollTimeoutMs = (_d = args.pollTimeoutMs) !== null && _d !== void 0 ? _d : DEFAULT_POLL_TIMEOUT_MS;
52
+ const redirectUri = mcpOauthRedirectUri();
53
+ // Team-scoped connectors only: the hosted bridge resolves the SA's team
54
+ // servers, so personal connectors can never apply to a deployment.
55
+ const available = (yield backendClient.getAvailableMcpServers({ teamId })).filter((server) => server.isTeamServer);
56
+ const selected = selectConnectors(available, args.servers);
57
+ for (const missing of selected.unmatched) {
58
+ err(`${LOG_PREFIX} Connection "${connectionName}" lists connector ${JSON.stringify(missing)}, but the team has no such connector (dashboard → MCP).\n`);
59
+ }
60
+ if (selected.servers.length === 0) {
61
+ err(`${LOG_PREFIX} No matching team connectors for connection "${connectionName}".\n`);
62
+ return { authorized: [], pending: [], errored: [] };
63
+ }
64
+ const nameById = new Map(selected.servers.map((server) => [server.id, server.name]));
65
+ const statuses = yield backendClient.checkHttpMcpStatus({
66
+ serverIds: selected.servers.map((server) => server.id),
67
+ oauthRedirectUri: redirectUri,
68
+ serviceAccountId,
69
+ });
70
+ const result = {
71
+ authorized: [],
72
+ pending: [],
73
+ errored: [],
74
+ };
75
+ for (const status of statuses) {
76
+ const name = (_e = nameById.get(status.id)) !== null && _e !== void 0 ? _e : `#${status.id}`;
77
+ if (!status.requiresAuth) {
78
+ if (status.error !== undefined && status.error !== "") {
79
+ err(`${LOG_PREFIX} ${name}: ${status.error}\n`);
80
+ result.errored.push({ name, error: status.error });
81
+ continue;
82
+ }
83
+ out(`${LOG_PREFIX} ${name}: already authorized ✓\n`);
84
+ result.authorized.push(name);
85
+ continue;
86
+ }
87
+ if (status.authUrl === undefined || status.authUrl === "") {
88
+ const error = (_f = status.error) !== null && _f !== void 0 ? _f : "no authorization URL was minted";
89
+ err(`${LOG_PREFIX} ${name}: ${error}\n`);
90
+ result.errored.push({ name, error });
91
+ continue;
92
+ }
93
+ if (!args.interactive) {
94
+ result.pending.push(name);
95
+ continue;
96
+ }
97
+ out(`${LOG_PREFIX} ${name}: authorization needed. You'll authorize ${name} as yourself; ` +
98
+ `anyone who can talk to this agent can act with that access.\n` +
99
+ `${LOG_PREFIX} Opening (or open manually):\n ${status.authUrl}\n`);
100
+ open(status.authUrl);
101
+ const authorized = yield pollUntilAuthorized({
102
+ backendClient,
103
+ serverId: status.id,
104
+ serviceAccountId,
105
+ redirectUri,
106
+ sleep,
107
+ pollIntervalMs,
108
+ pollTimeoutMs,
109
+ });
110
+ if (authorized) {
111
+ out(`${LOG_PREFIX} ${name}: authorized ✓\n`);
112
+ result.authorized.push(name);
113
+ }
114
+ else {
115
+ err(`${LOG_PREFIX} ${name}: still waiting on authorization; giving up for now.\n`);
116
+ result.pending.push(name);
117
+ }
118
+ }
119
+ return result;
120
+ });
121
+ }
122
+ function selectConnectors(available, filter) {
123
+ if (filter === undefined || filter.length === 0) {
124
+ return { servers: available, unmatched: [] };
125
+ }
126
+ const servers = [];
127
+ const seen = new Set();
128
+ const unmatched = [];
129
+ for (const name of filter) {
130
+ const wanted = name.trim().toLowerCase();
131
+ const matches = available.filter((server) => { var _a; return server.name.toLowerCase() === wanted ||
132
+ ((_a = server.serverIdentifier) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === wanted; });
133
+ if (matches.length === 0) {
134
+ unmatched.push(name);
135
+ continue;
136
+ }
137
+ for (const match of matches) {
138
+ if (!seen.has(match.id)) {
139
+ seen.add(match.id);
140
+ servers.push(match);
141
+ }
142
+ }
143
+ }
144
+ return { servers, unmatched };
145
+ }
146
+ function pollUntilAuthorized(args) {
147
+ return __awaiter(this, void 0, void 0, function* () {
148
+ const deadline = Date.now() + args.pollTimeoutMs;
149
+ // Each unauthorized probe is a full backend connect to the provider, so
150
+ // back off while the human works through the OAuth pages.
151
+ let intervalMs = args.pollIntervalMs;
152
+ const maxIntervalMs = Math.max(args.pollIntervalMs, 15000);
153
+ while (Date.now() < deadline) {
154
+ yield args.sleep(intervalMs);
155
+ intervalMs = Math.min(intervalMs * 1.5, maxIntervalMs);
156
+ let statuses;
157
+ try {
158
+ statuses = yield args.backendClient.checkHttpMcpStatus({
159
+ serverIds: [args.serverId],
160
+ oauthRedirectUri: args.redirectUri,
161
+ serviceAccountId: args.serviceAccountId,
162
+ });
163
+ }
164
+ catch (_a) {
165
+ // Transient probe errors; keep polling until the deadline.
166
+ continue;
167
+ }
168
+ const status = statuses.find((entry) => entry.id === args.serverId);
169
+ if (status !== undefined && !status.requiresAuth) {
170
+ return true;
171
+ }
172
+ }
173
+ return false;
174
+ });
175
+ }
@@ -108,6 +108,12 @@ export interface EngineAccess {
108
108
  export interface DeploymentDetail extends Deployment {
109
109
  engineAccess?: EngineAccess | null;
110
110
  }
111
+ /**
112
+ * The deployment's dedicated service-account id (`sa_…`), or undefined for
113
+ * legacy rows that predate service-account-backed deploys. Normalizes the
114
+ * wire shape (string in prod, number in old fixtures, null when unset).
115
+ */
116
+ export declare function deploymentServiceAccountId(deployment: Pick<Deployment, "serviceAccountId">): string | undefined;
111
117
  export interface StopAccepted {
112
118
  id: number;
113
119
  status: string;
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-client.d.ts","sourceRoot":"","sources":["../../src/internal/deploy-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy-client.d.ts","sourceRoot":"","sources":["../../src/internal/deploy-client.ts"],"names":[],"mappings":"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"}
@@ -53,6 +53,19 @@ export class DeployApiError extends Error {
53
53
  this.name = "DeployApiError";
54
54
  }
55
55
  }
56
+ /**
57
+ * The deployment's dedicated service-account id (`sa_…`), or undefined for
58
+ * legacy rows that predate service-account-backed deploys. Normalizes the
59
+ * wire shape (string in prod, number in old fixtures, null when unset).
60
+ */
61
+ export function deploymentServiceAccountId(deployment) {
62
+ const raw = deployment.serviceAccountId;
63
+ if (raw === null || raw === undefined) {
64
+ return undefined;
65
+ }
66
+ const id = String(raw).trim();
67
+ return id === "" ? undefined : id;
68
+ }
56
69
  // All response schemas are `.passthrough()`: the backend keeps growing the
57
70
  // deployment payload (serviceAccountId, egressAllowedDomains, secret
58
71
  // metadata, ...) and unknown fields must flow through untouched — both so
@@ -42,6 +42,7 @@ export declare class EvalRunStore {
42
42
  private readonly storage?;
43
43
  private readonly runs;
44
44
  private activeRunId;
45
+ private readonly abortByRunId;
45
46
  private hydratePromise;
46
47
  private hydrated;
47
48
  /** Filled after listen — e.g. `http://127.0.0.1:3000/weather-agent`. */
@@ -72,6 +73,11 @@ export declare class EvalRunStore {
72
73
  }>;
73
74
  getActiveRunId(): string | undefined;
74
75
  start(input?: StartEvalRunInput): Promise<EvalRunSnapshot>;
76
+ /**
77
+ * Cancel a running batch by Eval ID (`runId`). Stops starting new cases and
78
+ * aborts in-flight turns. Idempotent when already cancelled.
79
+ */
80
+ cancel(runId: string): Promise<EvalRunSnapshot>;
75
81
  private sortedRuns;
76
82
  /**
77
83
  * Hydrate playground eval history from the `defineStorage` evals table.
@@ -102,4 +108,13 @@ export declare class EvalRunConflictError extends Error {
102
108
  export declare class EvalRunEmptyError extends Error {
103
109
  constructor();
104
110
  }
111
+ export declare class EvalRunUnknownError extends Error {
112
+ readonly runId: string;
113
+ constructor(runId: string);
114
+ }
115
+ export declare class EvalRunNotRunningError extends Error {
116
+ readonly runId: string;
117
+ readonly status: EvalRunSnapshot["status"];
118
+ constructor(runId: string, status: EvalRunSnapshot["status"]);
119
+ }
105
120
  //# sourceMappingURL=eval-run-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eval-run-store.d.ts","sourceRoot":"","sources":["../../src/internal/eval-run-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eval-run-store.d.ts","sourceRoot":"","sources":["../../src/internal/eval-run-store.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,8 @@ import { resolveEvalMaxPlaygroundRuns, } from "../evals.js";
21
21
  import { discoverEvals, filterDiscoveredEvals, runDiscoveredEvals, } from "./eval-runner.js";
22
22
  const INTERRUPTED_BATCH_ERROR = "Eval run interrupted (serve process exited before completion)";
23
23
  const INTERRUPTED_CASE_ERROR = "Eval case interrupted (serve process exited before completion)";
24
+ const CANCELLED_BATCH_ERROR = "Eval run cancelled";
25
+ const CANCELLED_CASE_ERROR = "Eval case cancelled";
24
26
  export class EvalRunStore {
25
27
  constructor(projectRoot, logger,
26
28
  /** `defineStorage` evals-table adapter; undefined ⇒ memory only. */
@@ -29,6 +31,7 @@ export class EvalRunStore {
29
31
  this.logger = logger;
30
32
  this.storage = storage;
31
33
  this.runs = new Map();
34
+ this.abortByRunId = new Map();
32
35
  this.hydrated = false;
33
36
  }
34
37
  list() {
@@ -109,15 +112,45 @@ export class EvalRunStore {
109
112
  };
110
113
  this.runs.set(runId, snapshot);
111
114
  this.activeRunId = runId;
115
+ const abort = new AbortController();
116
+ this.abortByRunId.set(runId, abort);
112
117
  this.pruneOldRuns(config);
113
118
  this.persist(snapshot);
114
119
  this.logger(`[agentkit] eval run ${runId}: starting ${cases.length} case(s)`);
115
- void this.execute(runId, Object.assign(Object.assign(Object.assign({ baseUrl: loopbackUrl, evals: selected, config }, (input.bearerToken === undefined
120
+ void this.execute(runId, Object.assign(Object.assign(Object.assign({ baseUrl: loopbackUrl, evals: selected, config, signal: abort.signal }, (input.bearerToken === undefined
116
121
  ? {}
117
122
  : { bearerToken: input.bearerToken })), (input.verbose === undefined ? {} : { verbose: input.verbose })), (input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs })));
118
123
  return snapshot;
119
124
  });
120
125
  }
126
+ /**
127
+ * Cancel a running batch by Eval ID (`runId`). Stops starting new cases and
128
+ * aborts in-flight turns. Idempotent when already cancelled.
129
+ */
130
+ cancel(runId) {
131
+ return __awaiter(this, void 0, void 0, function* () {
132
+ yield this.hydrate();
133
+ const run = this.runs.get(runId);
134
+ if (run === undefined) {
135
+ throw new EvalRunUnknownError(runId);
136
+ }
137
+ if (run.status === "cancelled") {
138
+ return run;
139
+ }
140
+ if (run.status !== "running") {
141
+ throw new EvalRunNotRunningError(runId, run.status);
142
+ }
143
+ const abort = this.abortByRunId.get(runId);
144
+ abort === null || abort === void 0 ? void 0 : abort.abort();
145
+ markCancelledRun(run);
146
+ this.persist(run);
147
+ if (this.activeRunId === runId) {
148
+ this.activeRunId = undefined;
149
+ }
150
+ this.logger(`[agentkit] eval run ${runId}: cancelled`);
151
+ return run;
152
+ });
153
+ }
121
154
  sortedRuns() {
122
155
  return [...this.runs.values()].sort((a, b) => b.startedAt.localeCompare(a.startedAt));
123
156
  }
@@ -210,6 +243,7 @@ export class EvalRunStore {
210
243
  * completion write) until the next hydrate repairs it.
211
244
  */
212
245
  close() {
246
+ var _a;
213
247
  const activeRunId = this.activeRunId;
214
248
  if (activeRunId === undefined) {
215
249
  return;
@@ -218,9 +252,11 @@ export class EvalRunStore {
218
252
  if (run === undefined || run.status !== "running") {
219
253
  return;
220
254
  }
255
+ (_a = this.abortByRunId.get(activeRunId)) === null || _a === void 0 ? void 0 : _a.abort();
221
256
  markInterruptedRun(run);
222
257
  this.persist(run);
223
258
  this.activeRunId = undefined;
259
+ this.abortByRunId.delete(activeRunId);
224
260
  }
225
261
  execute(runId, opts) {
226
262
  return __awaiter(this, void 0, void 0, function* () {
@@ -228,11 +264,11 @@ export class EvalRunStore {
228
264
  return;
229
265
  }
230
266
  try {
231
- yield runDiscoveredEvals(Object.assign(Object.assign(Object.assign(Object.assign({ projectRoot: this.projectRoot, baseUrl: opts.baseUrl, discovered: { evals: opts.evals, config: opts.config } }, (opts.bearerToken === undefined
267
+ yield runDiscoveredEvals(Object.assign(Object.assign(Object.assign(Object.assign({ projectRoot: this.projectRoot, baseUrl: opts.baseUrl, discovered: { evals: opts.evals, config: opts.config }, signal: opts.signal }, (opts.bearerToken === undefined
232
268
  ? {}
233
269
  : { bearerToken: opts.bearerToken })), (opts.verbose === undefined ? {} : { verbose: opts.verbose })), (opts.timeoutMs === undefined ? {} : { timeoutMs: opts.timeoutMs })), { onCaseStart: (id) => {
234
270
  const run = this.runs.get(runId);
235
- if (run === undefined) {
271
+ if (run === undefined || run.status === "cancelled") {
236
272
  return;
237
273
  }
238
274
  const c = run.cases.find((x) => x.id === id);
@@ -241,6 +277,10 @@ export class EvalRunStore {
241
277
  c.inputs = [];
242
278
  c.toolCalls = [];
243
279
  c.finalText = undefined;
280
+ c.metrics = undefined;
281
+ c.logs = undefined;
282
+ c.assertions = undefined;
283
+ c.error = undefined;
244
284
  }
245
285
  }, onCaseEvent: (id, event) => {
246
286
  var _a, _b;
@@ -276,7 +316,7 @@ export class EvalRunStore {
276
316
  }
277
317
  } }));
278
318
  const run = this.runs.get(runId);
279
- if (run === undefined) {
319
+ if (run === undefined || run.status === "cancelled") {
280
320
  return;
281
321
  }
282
322
  run.status = "completed";
@@ -286,16 +326,24 @@ export class EvalRunStore {
286
326
  }
287
327
  catch (error) {
288
328
  const run = this.runs.get(runId);
289
- if (run === undefined) {
329
+ if (run === undefined || run.status === "cancelled") {
330
+ return;
331
+ }
332
+ const message = error instanceof Error ? error.message : String(error);
333
+ if (opts.signal.aborted || message === "cancelled") {
334
+ markCancelledRun(run);
335
+ this.persist(run);
336
+ this.logger(`[agentkit] eval run ${runId}: cancelled`);
290
337
  return;
291
338
  }
292
339
  run.status = "failed";
293
340
  run.finishedAt = new Date().toISOString();
294
- run.error = error instanceof Error ? error.message : String(error);
341
+ run.error = message;
295
342
  this.persist(run);
296
343
  this.logger(`[agentkit] eval run ${runId}: failed — ${run.error}`);
297
344
  }
298
345
  finally {
346
+ this.abortByRunId.delete(runId);
299
347
  if (this.activeRunId === runId) {
300
348
  this.activeRunId = undefined;
301
349
  }
@@ -311,11 +359,15 @@ export class EvalRunStore {
311
359
  if (c === undefined) {
312
360
  return;
313
361
  }
362
+ const alreadyCounted = c.status === "done";
314
363
  c.status = "done";
315
364
  c.ok = result.ok;
316
365
  c.assertions = result.assertions;
317
366
  c.durationMs = result.durationMs;
318
367
  c.logs = result.logs;
368
+ c.metrics =
369
+ Object.keys(result.metrics).length > 0
370
+ ? Object.assign({}, result.metrics) : undefined;
319
371
  c.inputs = result.inputs;
320
372
  if (result.toolCalls !== undefined) {
321
373
  c.toolCalls = result.toolCalls;
@@ -332,6 +384,10 @@ export class EvalRunStore {
332
384
  if (result.tools !== undefined) {
333
385
  c.tools = result.tools;
334
386
  }
387
+ // Batch already finalized by cancel — keep case details, skip recount.
388
+ if (run.status === "cancelled" || alreadyCounted) {
389
+ return;
390
+ }
335
391
  run.summary.done += 1;
336
392
  if (result.ok) {
337
393
  run.summary.passed += 1;
@@ -353,8 +409,23 @@ function markInterruptedRun(run) {
353
409
  c.error = (_c = c.error) !== null && _c !== void 0 ? _c : INTERRUPTED_CASE_ERROR;
354
410
  }
355
411
  }
356
- // Reconcile the summary with the repaired case rows so a persisted
357
- // interrupted batch never claims pre-interruption pass counts.
412
+ reconcileRunSummary(run);
413
+ }
414
+ function markCancelledRun(run) {
415
+ var _a;
416
+ run.status = "cancelled";
417
+ run.finishedAt = (_a = run.finishedAt) !== null && _a !== void 0 ? _a : new Date().toISOString();
418
+ run.error = CANCELLED_BATCH_ERROR;
419
+ for (const c of run.cases) {
420
+ if (c.status === "pending" || c.status === "running") {
421
+ c.status = "done";
422
+ c.ok = false;
423
+ c.error = CANCELLED_CASE_ERROR;
424
+ }
425
+ }
426
+ reconcileRunSummary(run);
427
+ }
428
+ function reconcileRunSummary(run) {
358
429
  let passed = 0;
359
430
  let failed = 0;
360
431
  for (const c of run.cases) {
@@ -401,3 +472,18 @@ export class EvalRunEmptyError extends Error {
401
472
  this.name = "EvalRunEmptyError";
402
473
  }
403
474
  }
475
+ export class EvalRunUnknownError extends Error {
476
+ constructor(runId) {
477
+ super(`Unknown eval run ${runId}`);
478
+ this.runId = runId;
479
+ this.name = "EvalRunUnknownError";
480
+ }
481
+ }
482
+ export class EvalRunNotRunningError extends Error {
483
+ constructor(runId, status) {
484
+ super(`Eval run ${runId} is not running (status: ${status})`);
485
+ this.runId = runId;
486
+ this.status = status;
487
+ this.name = "EvalRunNotRunningError";
488
+ }
489
+ }
@@ -37,6 +37,8 @@ export interface EvalRunResult {
37
37
  }>;
38
38
  error?: string;
39
39
  logs: string[];
40
+ /** Structured scores from {@link import("../evals.js").EvalTestContext.metric}. */
41
+ metrics: Record<string, string | number>;
40
42
  durationMs: number;
41
43
  }
42
44
  export interface EvalSelectionOptions {
@@ -67,6 +69,8 @@ export interface RunEvalsOptions extends EvalSelectionOptions {
67
69
  evals: readonly DiscoveredEval[];
68
70
  config: Partial<EvalConfigFile>;
69
71
  };
72
+ /** When aborted, stop starting new cases and cancel in-flight turns. */
73
+ signal?: AbortSignal;
70
74
  }
71
75
  export declare function discoverEvals(projectRoot: string, importModule?: (absolutePath: string) => Promise<Record<string, unknown>>): Promise<{
72
76
  evals: DiscoveredEval[];
@@ -75,4 +79,14 @@ export declare function discoverEvals(projectRoot: string, importModule?: (absol
75
79
  /** Apply id/tag filters used by CLI, playground, and `runDiscoveredEvals`. */
76
80
  export declare function filterDiscoveredEvals(evals: readonly DiscoveredEval[], options?: EvalSelectionOptions): DiscoveredEval[];
77
81
  export declare function runDiscoveredEvals(options: RunEvalsOptions): Promise<EvalRunResult[]>;
82
+ /**
83
+ * Schedule key for {@link groupEvalsForIterationSchedule}: iteration siblings
84
+ * (`weather/nyc/1`…`/3`) share a key; single-iteration ids keep their full id.
85
+ */
86
+ export declare function iterationScheduleKey(discovered: DiscoveredEval): string;
87
+ /**
88
+ * Group expanded iteration cases so each authored datapoint's iterations run
89
+ * back-to-back under one {@link mapPool} slot (sorted by iteration index).
90
+ */
91
+ export declare function groupEvalsForIterationSchedule(evals: readonly DiscoveredEval[]): DiscoveredEval[][];
78
92
  //# sourceMappingURL=eval-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eval-runner.d.ts","sourceRoot":"","sources":["../../src/internal/eval-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eval-runner.d.ts","sourceRoot":"","sources":["../../src/internal/eval-runner.ts"],"names":[],"mappings":"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"}