@cursor/july 0.1.5 → 0.1.7
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/ab.d.ts +8 -95
- package/dist/ab.d.ts.map +1 -1
- package/dist/ab.js +9 -150
- package/dist/bin/agent-serve.js +41 -8
- package/dist/channels/slack/post-update-delivery.d.ts +85 -0
- package/dist/channels/slack/post-update-delivery.d.ts.map +1 -0
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +4 -4
- package/dist/docs/assets/{app.DabPG-io.js → app.COTN7wgo.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.B7UcKvIn.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.jmyr0bU0.js → VPLocalSearchBox.BW3TBdT0.js} +1 -1
- package/dist/docs/assets/chunks/{theme.DysN9-VN.js → theme.BEJW0vE7.js} +2 -2
- package/dist/docs/assets/deployment.md.BtfEsc9S.js +55 -0
- package/dist/docs/assets/deployment.md.BtfEsc9S.lean.js +1 -0
- package/dist/docs/assets/example-agents_approval-buddy.md.8R5phXb5.js +10 -0
- package/dist/docs/assets/example-agents_approval-buddy.md.8R5phXb5.lean.js +1 -0
- package/dist/docs/assets/example-agents_benny.md.B0gjhI-p.js +7 -0
- package/dist/docs/assets/example-agents_benny.md.B0gjhI-p.lean.js +1 -0
- package/dist/docs/assets/example-agents_bugbot.md.DelIdhxB.js +11 -0
- package/dist/docs/assets/example-agents_bugbot.md.DelIdhxB.lean.js +1 -0
- package/dist/docs/assets/example-agents_codebase-wiki.md.DC6sgwn0.js +8 -0
- package/dist/docs/assets/example-agents_codebase-wiki.md.DC6sgwn0.lean.js +1 -0
- package/dist/docs/assets/example-agents_codeowners-review.md.Ku_tG2RY.js +8 -0
- package/dist/docs/assets/example-agents_codeowners-review.md.Ku_tG2RY.lean.js +1 -0
- package/dist/docs/assets/example-agents_concierge.md.4rQTSMXt.js +23 -0
- package/dist/docs/assets/example-agents_concierge.md.4rQTSMXt.lean.js +1 -0
- package/dist/docs/assets/example-agents_fsd.md.CzgUrDfi.js +15 -0
- package/dist/docs/assets/example-agents_fsd.md.CzgUrDfi.lean.js +1 -0
- package/dist/docs/assets/example-agents_index.md.CRqJlnIf.js +2 -0
- package/dist/docs/assets/example-agents_index.md.CRqJlnIf.lean.js +1 -0
- package/dist/docs/assets/example-agents_knowledge-base.md.BPJiVueF.js +11 -0
- package/dist/docs/assets/example-agents_knowledge-base.md.BPJiVueF.lean.js +1 -0
- package/dist/docs/assets/example-agents_security-reviewer.md.D2rtwDTO.js +19 -0
- package/dist/docs/assets/example-agents_security-reviewer.md.D2rtwDTO.lean.js +1 -0
- package/dist/docs/assets/example-agents_slack-agent.md.buLbgvBf.js +5 -0
- package/dist/docs/assets/example-agents_slack-agent.md.buLbgvBf.lean.js +1 -0
- package/dist/docs/assets/example-agents_weather-agent.md.C9Qv-W0o.js +24 -0
- package/dist/docs/assets/example-agents_weather-agent.md.C9Qv-W0o.lean.js +1 -0
- package/dist/docs/assets/index.md.COiu-1jL.js +20 -0
- package/dist/docs/assets/{index.md.Cylk70gg.lean.js → index.md.COiu-1jL.lean.js} +1 -1
- package/dist/docs/assets/reference_cli.md.D189RBCH.js +60 -0
- package/dist/docs/assets/reference_cli.md.D189RBCH.lean.js +1 -0
- package/dist/docs/building-with-agents.html +4 -4
- package/dist/docs/concepts.html +4 -4
- package/dist/docs/deployment.html +58 -17
- package/dist/docs/evals.html +4 -4
- package/dist/docs/example-agents/approval-buddy.html +34 -0
- package/dist/docs/example-agents/benny.html +31 -0
- package/dist/docs/example-agents/bugbot.html +35 -0
- package/dist/docs/example-agents/codebase-wiki.html +32 -0
- package/dist/docs/example-agents/codeowners-review.html +32 -0
- package/dist/docs/example-agents/concierge.html +47 -0
- package/dist/docs/example-agents/fsd.html +39 -0
- package/dist/docs/example-agents/index.html +26 -0
- package/dist/docs/example-agents/knowledge-base.html +35 -0
- package/dist/docs/example-agents/security-reviewer.html +43 -0
- package/dist/docs/example-agents/slack-agent.html +29 -0
- package/dist/docs/example-agents/weather-agent.html +48 -0
- package/dist/docs/guides/agent-to-agent.html +4 -4
- package/dist/docs/guides/cloud-runtime.html +5 -5
- package/dist/docs/guides/github.html +4 -4
- package/dist/docs/guides/human-in-the-loop.html +4 -4
- package/dist/docs/guides/slack.html +4 -4
- package/dist/docs/guides/webhooks.html +4 -4
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +4 -4
- package/dist/docs/index.html +7 -7
- package/dist/docs/quickstart.html +4 -4
- package/dist/docs/reference/agent-config.html +4 -4
- package/dist/docs/reference/channels.html +4 -4
- package/dist/docs/reference/cli.html +52 -30
- package/dist/docs/reference/connections.html +4 -4
- package/dist/docs/reference/hooks.html +4 -4
- package/dist/docs/reference/http-api.html +4 -4
- package/dist/docs/reference/instructions.html +4 -4
- package/dist/docs/reference/playground.html +4 -4
- package/dist/docs/reference/project-layout.html +4 -4
- package/dist/docs/reference/schedules.html +4 -4
- package/dist/docs/reference/sessions.html +4 -4
- package/dist/docs/reference/skills.html +4 -4
- package/dist/docs/reference/subagents.html +4 -4
- package/dist/docs/reference/tools.html +4 -4
- package/dist/docs/scaffolding-agents.html +4 -4
- package/dist/docs/storage.html +4 -4
- package/dist/docs/troubleshooting.html +4 -4
- package/dist/evals.d.ts +5 -62
- package/dist/evals.d.ts.map +1 -1
- package/dist/evals.js +3 -66
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/internal/ab-collector.d.ts +7 -5
- package/dist/internal/ab-collector.d.ts.map +1 -1
- package/dist/internal/ab-collector.js +3 -14
- package/dist/internal/ab-snapshot.d.ts +2 -4
- package/dist/internal/ab-snapshot.d.ts.map +1 -1
- package/dist/internal/cli-ax.d.ts +33 -5
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +428 -87
- package/dist/internal/cli-deploy.js +1 -1
- package/dist/internal/discovery.js +3 -3
- package/dist/internal/eval-run-store.d.ts +35 -30
- package/dist/internal/eval-run-store.d.ts.map +1 -1
- package/dist/internal/eval-run-store.js +88 -100
- package/dist/internal/evals-client.d.ts +96 -0
- package/dist/internal/evals-client.d.ts.map +1 -0
- package/dist/internal/evals-client.js +262 -0
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +1 -0
- package/dist/internal/persistence-coordinator.d.ts +127 -0
- package/dist/internal/persistence-coordinator.d.ts.map +1 -0
- package/dist/internal/playground-proxy.d.ts +5 -5
- package/dist/internal/playground-proxy.js +3 -3
- package/dist/internal/resolve-prod-target.d.ts +30 -0
- package/dist/internal/resolve-prod-target.d.ts.map +1 -1
- package/dist/internal/resolve-prod-target.js +74 -2
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +16 -5
- package/dist/internal/session-engine.d.ts +1 -2
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +14 -31
- package/dist/internal/storage-coordinator.d.ts +16 -15
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +73 -80
- package/dist/persistence.d.ts +184 -0
- package/dist/persistence.d.ts.map +1 -0
- package/dist/playground/assets/cursor-icons-16-CQ50JpfO.woff2 +0 -0
- package/dist/playground/assets/index-72vCOBWO.js +86 -0
- package/dist/playground/assets/index-BjnMwYoR.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage.d.ts +51 -10
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +27 -10
- package/docs/README.md +34 -5
- package/docs/deployment.md +352 -149
- package/docs/example-agents/approval-buddy.md +270 -0
- package/docs/example-agents/benny.md +186 -0
- package/docs/example-agents/bugbot.md +231 -0
- package/docs/example-agents/codebase-wiki.md +174 -0
- package/docs/example-agents/codeowners-review.md +195 -0
- package/docs/example-agents/concierge.md +205 -0
- package/docs/example-agents/fsd.md +330 -0
- package/docs/example-agents/index.md +102 -0
- package/docs/example-agents/knowledge-base.md +171 -0
- package/docs/example-agents/security-reviewer.md +296 -0
- package/docs/example-agents/slack-agent.md +146 -0
- package/docs/example-agents/weather-agent.md +302 -0
- package/docs/reference/cli.md +546 -147
- package/package.json +1 -1
- package/src/ab.ts +9 -261
- package/src/bin/agent-serve.ts +46 -7
- package/src/evals.ts +5 -119
- package/src/index.ts +2 -0
- package/src/internal/ab-collector.ts +12 -22
- package/src/internal/ab-snapshot.ts +2 -4
- package/src/internal/cli-ax.ts +551 -104
- package/src/internal/cli-deploy.ts +1 -1
- package/src/internal/discovery.ts +2 -2
- package/src/internal/eval-run-store.ts +91 -100
- package/src/internal/evals-client.ts +431 -0
- package/src/internal/init-project.ts +1 -0
- package/src/internal/playground-proxy.ts +5 -5
- package/src/internal/resolve-prod-target.ts +101 -3
- package/src/internal/server.ts +17 -3
- package/src/internal/session-engine.ts +9 -29
- package/src/internal/storage-coordinator.ts +109 -101
- package/src/storage.ts +79 -14
- package/dist/docs/assets/chunks/@localSearchIndexroot.QwK5BtEH.js +0 -1
- package/dist/docs/assets/deployment.md.DTKwE15Z.js +0 -14
- package/dist/docs/assets/deployment.md.DTKwE15Z.lean.js +0 -1
- package/dist/docs/assets/index.md.Cylk70gg.js +0 -20
- package/dist/docs/assets/reference_cli.md.Bv6pOxcF.js +0 -38
- package/dist/docs/assets/reference_cli.md.Bv6pOxcF.lean.js +0 -1
- package/dist/internal/json-dir-store.js +0 -100
- package/dist/playground/assets/cursor-icons-outline-BxTT_FVJ.woff2 +0 -0
- package/dist/playground/assets/index-BEauYlII.css +0 -1
- package/dist/playground/assets/index-BtM0wEGg.js +0 -319
- package/src/internal/json-dir-store.ts +0 -109
|
@@ -1,50 +1,54 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Store for playground-triggered eval batches.
|
|
3
3
|
*
|
|
4
|
-
* Default: process memory only, capped by `maxPlaygroundRuns` (see
|
|
5
|
-
*
|
|
4
|
+
* Default: process memory only, capped by `maxPlaygroundRuns` (see
|
|
5
|
+
* `defineEvalConfig`). When `agent/storage.ts` (`defineStorage`) declares an
|
|
6
|
+
* `evals` table, runs are mirrored there and survive restart.
|
|
6
7
|
* Runs against the live mount's loopback URL so case sessions appear in
|
|
7
8
|
* the playground session list.
|
|
8
9
|
*/
|
|
9
|
-
import { type
|
|
10
|
+
import { type EvalRunSnapshot } from "../evals.js";
|
|
10
11
|
export type { EvalBatchStatus, EvalCaseRunStatus as EvalCaseStatus, EvalCaseSnapshot, EvalRunSnapshot, } from "../evals.js";
|
|
12
|
+
/**
|
|
13
|
+
* Durable mirror for playground eval batches — the `StorageCoordinator`
|
|
14
|
+
* adapter over the `defineStorage` `evals` table. Writes are
|
|
15
|
+
* fire-and-forget (the coordinator serializes and isolates failures);
|
|
16
|
+
* `list` is the serve-start hydrate read.
|
|
17
|
+
*/
|
|
18
|
+
export interface EvalRunStorage {
|
|
19
|
+
save(run: EvalRunSnapshot): void;
|
|
20
|
+
delete(runId: string): void;
|
|
21
|
+
list(): Promise<EvalRunSnapshot[]>;
|
|
22
|
+
}
|
|
11
23
|
export interface StartEvalRunInput {
|
|
12
24
|
filterIds?: string[];
|
|
13
25
|
tags?: string[];
|
|
14
26
|
bearerToken?: string;
|
|
15
27
|
verbose?: boolean;
|
|
28
|
+
/** Per-case timeout override (same semantics as CLI `--timeout-ms`). */
|
|
29
|
+
timeoutMs?: number;
|
|
16
30
|
}
|
|
17
31
|
export type EvalListConfig = {
|
|
18
32
|
maxConcurrency?: number;
|
|
19
33
|
timeoutMs?: number;
|
|
20
34
|
maxPlaygroundRuns: number;
|
|
21
|
-
/** True when `
|
|
35
|
+
/** True when `agent/storage.ts` declares an `evals` table. */
|
|
22
36
|
durableRuns: boolean;
|
|
23
37
|
};
|
|
24
38
|
export declare class EvalRunStore {
|
|
25
39
|
private readonly projectRoot;
|
|
26
40
|
private readonly logger;
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
* used when `evals.config.ts` sets no `persistRuns` of its own.
|
|
30
|
-
*/
|
|
31
|
-
private readonly fallbackPersistence?;
|
|
41
|
+
/** `defineStorage` evals-table adapter; undefined ⇒ memory only. */
|
|
42
|
+
private readonly storage?;
|
|
32
43
|
private readonly runs;
|
|
33
44
|
private activeRunId;
|
|
34
45
|
private hydratePromise;
|
|
35
46
|
private hydrated;
|
|
36
|
-
/** Per-run persist chain so intermediate saves cannot overwrite a later final write. */
|
|
37
|
-
private readonly persistChains;
|
|
38
47
|
/** Filled after listen — e.g. `http://127.0.0.1:3000/weather-agent`. */
|
|
39
48
|
loopbackUrl: string | undefined;
|
|
40
49
|
constructor(projectRoot: string, logger: (line: string) => void,
|
|
41
|
-
/**
|
|
42
|
-
|
|
43
|
-
* used when `evals.config.ts` sets no `persistRuns` of its own.
|
|
44
|
-
*/
|
|
45
|
-
fallbackPersistence?: EvalRunPersistence | undefined);
|
|
46
|
-
/** `evals.config.ts` `persistRuns` wins; `defineStorage` is fallback. */
|
|
47
|
-
private resolvePersist;
|
|
50
|
+
/** `defineStorage` evals-table adapter; undefined ⇒ memory only. */
|
|
51
|
+
storage?: EvalRunStorage | undefined);
|
|
48
52
|
list(): Promise<{
|
|
49
53
|
evals: Array<{
|
|
50
54
|
id: string;
|
|
@@ -70,23 +74,24 @@ export declare class EvalRunStore {
|
|
|
70
74
|
start(input?: StartEvalRunInput): Promise<EvalRunSnapshot>;
|
|
71
75
|
private sortedRuns;
|
|
72
76
|
/**
|
|
73
|
-
* Hydrate playground eval history from
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* Idempotent; concurrent callers share one pass.
|
|
77
|
+
* Hydrate playground eval history from the `defineStorage` evals table.
|
|
78
|
+
* Called eagerly from the serve startup restore step — alongside session
|
|
79
|
+
* restore — and lazily as a safety net by every read. Idempotent;
|
|
80
|
+
* concurrent callers share one pass.
|
|
78
81
|
*/
|
|
79
82
|
hydrate(): Promise<void>;
|
|
80
|
-
private
|
|
83
|
+
private hydrateFromStorage;
|
|
81
84
|
private pruneOldRuns;
|
|
85
|
+
/** Mirror the run onto durable storage (coordinator clones + serializes). */
|
|
86
|
+
private persist;
|
|
82
87
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
88
|
+
* Serve is draining: durably mark any in-flight batch as interrupted
|
|
89
|
+
* while the storage queue can still deliver. Late `execute` writes are
|
|
90
|
+
* dropped by the closed coordinator, so without this a batch that was
|
|
91
|
+
* running at shutdown would look "running" (or silently lose its final
|
|
92
|
+
* completion write) until the next hydrate repairs it.
|
|
86
93
|
*/
|
|
87
|
-
|
|
88
|
-
private persistSave;
|
|
89
|
-
private persistDelete;
|
|
94
|
+
close(): void;
|
|
90
95
|
private execute;
|
|
91
96
|
private applyCaseResult;
|
|
92
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eval-run-store.d.ts","sourceRoot":"","sources":["../../src/internal/eval-run-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"eval-run-store.d.ts","sourceRoot":"","sources":["../../src/internal/eval-run-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Store for playground-triggered eval batches.
|
|
3
3
|
*
|
|
4
|
-
* Default: process memory only, capped by `maxPlaygroundRuns` (see
|
|
5
|
-
*
|
|
4
|
+
* Default: process memory only, capped by `maxPlaygroundRuns` (see
|
|
5
|
+
* `defineEvalConfig`). When `agent/storage.ts` (`defineStorage`) declares an
|
|
6
|
+
* `evals` table, runs are mirrored there and survive restart.
|
|
6
7
|
* Runs against the live mount's loopback URL so case sessions appear in
|
|
7
8
|
* the playground session list.
|
|
8
9
|
*/
|
|
@@ -22,23 +23,13 @@ const INTERRUPTED_BATCH_ERROR = "Eval run interrupted (serve process exited befo
|
|
|
22
23
|
const INTERRUPTED_CASE_ERROR = "Eval case interrupted (serve process exited before completion)";
|
|
23
24
|
export class EvalRunStore {
|
|
24
25
|
constructor(projectRoot, logger,
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
* used when `evals.config.ts` sets no `persistRuns` of its own.
|
|
28
|
-
*/
|
|
29
|
-
fallbackPersistence) {
|
|
26
|
+
/** `defineStorage` evals-table adapter; undefined ⇒ memory only. */
|
|
27
|
+
storage) {
|
|
30
28
|
this.projectRoot = projectRoot;
|
|
31
29
|
this.logger = logger;
|
|
32
|
-
this.
|
|
30
|
+
this.storage = storage;
|
|
33
31
|
this.runs = new Map();
|
|
34
32
|
this.hydrated = false;
|
|
35
|
-
/** Per-run persist chain so intermediate saves cannot overwrite a later final write. */
|
|
36
|
-
this.persistChains = new Map();
|
|
37
|
-
}
|
|
38
|
-
/** `evals.config.ts` `persistRuns` wins; `defineStorage` is fallback. */
|
|
39
|
-
resolvePersist(config) {
|
|
40
|
-
var _a;
|
|
41
|
-
return (_a = config.persistRuns) !== null && _a !== void 0 ? _a : this.fallbackPersistence;
|
|
42
33
|
}
|
|
43
34
|
list() {
|
|
44
35
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -48,7 +39,7 @@ export class EvalRunStore {
|
|
|
48
39
|
evals: evals.map((e) => (Object.assign(Object.assign({ id: e.id, fileId: e.fileId }, (e.definition.description === undefined
|
|
49
40
|
? {}
|
|
50
41
|
: { description: e.definition.description })), (e.definition.tags === undefined ? {} : { tags: e.definition.tags })))),
|
|
51
|
-
config: snapshotListConfig(config, this.
|
|
42
|
+
config: snapshotListConfig(config, this.storage !== undefined),
|
|
52
43
|
};
|
|
53
44
|
});
|
|
54
45
|
}
|
|
@@ -114,16 +105,16 @@ export class EvalRunStore {
|
|
|
114
105
|
done: 0,
|
|
115
106
|
},
|
|
116
107
|
cases,
|
|
117
|
-
config: snapshotRunConfig(config, this.
|
|
108
|
+
config: snapshotRunConfig(config, this.storage !== undefined),
|
|
118
109
|
};
|
|
119
110
|
this.runs.set(runId, snapshot);
|
|
120
111
|
this.activeRunId = runId;
|
|
121
|
-
|
|
122
|
-
|
|
112
|
+
this.pruneOldRuns(config);
|
|
113
|
+
this.persist(snapshot);
|
|
123
114
|
this.logger(`[agentkit] eval run ${runId}: starting ${cases.length} case(s)`);
|
|
124
|
-
void this.execute(runId, Object.assign(Object.assign({ baseUrl: loopbackUrl, evals: selected, config }, (input.bearerToken === undefined
|
|
115
|
+
void this.execute(runId, Object.assign(Object.assign(Object.assign({ baseUrl: loopbackUrl, evals: selected, config }, (input.bearerToken === undefined
|
|
125
116
|
? {}
|
|
126
|
-
: { bearerToken: input.bearerToken })), (input.verbose === undefined ? {} : { verbose: input.verbose })));
|
|
117
|
+
: { bearerToken: input.bearerToken })), (input.verbose === undefined ? {} : { verbose: input.verbose })), (input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs })));
|
|
127
118
|
return snapshot;
|
|
128
119
|
});
|
|
129
120
|
}
|
|
@@ -131,11 +122,10 @@ export class EvalRunStore {
|
|
|
131
122
|
return [...this.runs.values()].sort((a, b) => b.startedAt.localeCompare(a.startedAt));
|
|
132
123
|
}
|
|
133
124
|
/**
|
|
134
|
-
* Hydrate playground eval history from
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
* Idempotent; concurrent callers share one pass.
|
|
125
|
+
* Hydrate playground eval history from the `defineStorage` evals table.
|
|
126
|
+
* Called eagerly from the serve startup restore step — alongside session
|
|
127
|
+
* restore — and lazily as a safety net by every read. Idempotent;
|
|
128
|
+
* concurrent callers share one pass.
|
|
139
129
|
*/
|
|
140
130
|
hydrate() {
|
|
141
131
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -143,27 +133,19 @@ export class EvalRunStore {
|
|
|
143
133
|
return;
|
|
144
134
|
}
|
|
145
135
|
if (this.hydratePromise === undefined) {
|
|
146
|
-
this.hydratePromise = this.
|
|
136
|
+
this.hydratePromise = this.hydrateFromStorage();
|
|
147
137
|
}
|
|
148
138
|
yield this.hydratePromise;
|
|
149
139
|
});
|
|
150
140
|
}
|
|
151
|
-
|
|
141
|
+
hydrateFromStorage() {
|
|
152
142
|
return __awaiter(this, void 0, void 0, function* () {
|
|
153
143
|
try {
|
|
154
|
-
|
|
155
|
-
const persist = this.resolvePersist(config);
|
|
156
|
-
if (persist === undefined) {
|
|
157
|
-
this.hydrated = true;
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
const loaded = yield persist.load({ projectRoot: this.projectRoot });
|
|
161
|
-
if (!Array.isArray(loaded)) {
|
|
162
|
-
this.logger("[agentkit] eval persistRuns.load() did not return an array; ignoring");
|
|
144
|
+
if (this.storage === undefined) {
|
|
163
145
|
this.hydrated = true;
|
|
164
146
|
return;
|
|
165
147
|
}
|
|
166
|
-
const
|
|
148
|
+
const loaded = yield this.storage.list();
|
|
167
149
|
for (const run of loaded) {
|
|
168
150
|
if (run === null ||
|
|
169
151
|
typeof run !== "object" ||
|
|
@@ -174,15 +156,22 @@ export class EvalRunStore {
|
|
|
174
156
|
// Incomplete batches from a killed process should not block a new run.
|
|
175
157
|
if (run.status === "running") {
|
|
176
158
|
markInterruptedRun(run);
|
|
177
|
-
|
|
159
|
+
this.persist(run);
|
|
178
160
|
}
|
|
179
161
|
this.runs.set(run.runId, run);
|
|
180
162
|
}
|
|
181
|
-
|
|
182
|
-
|
|
163
|
+
// Prune with the defaults even when eval discovery fails — loaded
|
|
164
|
+
// history must not stay unpruned for the process lifetime just
|
|
165
|
+
// because an eval file has a syntax error at boot.
|
|
166
|
+
let config = {};
|
|
167
|
+
try {
|
|
168
|
+
config = (yield discoverEvals(this.projectRoot)).config;
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
this.logger(`[agentkit] eval discovery failed during hydrate (pruning with defaults): ${error instanceof Error ? error.message : String(error)}`);
|
|
183
172
|
}
|
|
184
|
-
|
|
185
|
-
this.logger(`[agentkit] hydrated ${this.runs.size} playground eval run(s) from
|
|
173
|
+
this.pruneOldRuns(config);
|
|
174
|
+
this.logger(`[agentkit] hydrated ${this.runs.size} playground eval run(s) from storage`);
|
|
186
175
|
}
|
|
187
176
|
catch (error) {
|
|
188
177
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -194,63 +183,44 @@ export class EvalRunStore {
|
|
|
194
183
|
});
|
|
195
184
|
}
|
|
196
185
|
pruneOldRuns(config) {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
}
|
|
207
|
-
this.runs.delete(stale.runId);
|
|
208
|
-
yield this.persistDelete(stale.runId, this.resolvePersist(config));
|
|
186
|
+
var _a;
|
|
187
|
+
const limit = resolveEvalMaxPlaygroundRuns(config.maxPlaygroundRuns);
|
|
188
|
+
const ordered = this.sortedRuns();
|
|
189
|
+
if (ordered.length <= limit) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
for (const stale of ordered.slice(limit)) {
|
|
193
|
+
if (stale.runId === this.activeRunId) {
|
|
194
|
+
continue;
|
|
209
195
|
}
|
|
210
|
-
|
|
196
|
+
this.runs.delete(stale.runId);
|
|
197
|
+
(_a = this.storage) === null || _a === void 0 ? void 0 : _a.delete(stale.runId);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/** Mirror the run onto durable storage (coordinator clones + serializes). */
|
|
201
|
+
persist(run) {
|
|
202
|
+
var _a;
|
|
203
|
+
(_a = this.storage) === null || _a === void 0 ? void 0 : _a.save(run);
|
|
211
204
|
}
|
|
212
205
|
/**
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
206
|
+
* Serve is draining: durably mark any in-flight batch as interrupted
|
|
207
|
+
* while the storage queue can still deliver. Late `execute` writes are
|
|
208
|
+
* dropped by the closed coordinator, so without this a batch that was
|
|
209
|
+
* running at shutdown would look "running" (or silently lose its final
|
|
210
|
+
* completion write) until the next hydrate repairs it.
|
|
216
211
|
*/
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
if (
|
|
220
|
-
return
|
|
212
|
+
close() {
|
|
213
|
+
const activeRunId = this.activeRunId;
|
|
214
|
+
if (activeRunId === undefined) {
|
|
215
|
+
return;
|
|
221
216
|
}
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
this.
|
|
228
|
-
|
|
229
|
-
}
|
|
230
|
-
persistSave(run, persist) {
|
|
231
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
232
|
-
try {
|
|
233
|
-
yield persist.save(run, { projectRoot: this.projectRoot });
|
|
234
|
-
}
|
|
235
|
-
catch (error) {
|
|
236
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
237
|
-
this.logger(`[agentkit] persistRuns.save(${run.runId}) failed: ${message}`);
|
|
238
|
-
}
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
persistDelete(runId, persist) {
|
|
242
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
243
|
-
if (persist === undefined) {
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
try {
|
|
247
|
-
yield persist.delete(runId, { projectRoot: this.projectRoot });
|
|
248
|
-
}
|
|
249
|
-
catch (error) {
|
|
250
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
251
|
-
this.logger(`[agentkit] persistRuns.delete(${runId}) failed: ${message}`);
|
|
252
|
-
}
|
|
253
|
-
});
|
|
217
|
+
const run = this.runs.get(activeRunId);
|
|
218
|
+
if (run === undefined || run.status !== "running") {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
markInterruptedRun(run);
|
|
222
|
+
this.persist(run);
|
|
223
|
+
this.activeRunId = undefined;
|
|
254
224
|
}
|
|
255
225
|
execute(runId, opts) {
|
|
256
226
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -258,9 +228,9 @@ export class EvalRunStore {
|
|
|
258
228
|
return;
|
|
259
229
|
}
|
|
260
230
|
try {
|
|
261
|
-
yield runDiscoveredEvals(Object.assign(Object.assign(Object.assign({ projectRoot: this.projectRoot, baseUrl: opts.baseUrl, discovered: { evals: opts.evals, config: opts.config } }, (opts.bearerToken === undefined
|
|
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
|
|
262
232
|
? {}
|
|
263
|
-
: { bearerToken: opts.bearerToken })), (opts.verbose === undefined ? {} : { verbose: opts.verbose })), { onCaseStart: (id) => {
|
|
233
|
+
: { bearerToken: opts.bearerToken })), (opts.verbose === undefined ? {} : { verbose: opts.verbose })), (opts.timeoutMs === undefined ? {} : { timeoutMs: opts.timeoutMs })), { onCaseStart: (id) => {
|
|
264
234
|
const run = this.runs.get(runId);
|
|
265
235
|
if (run === undefined) {
|
|
266
236
|
return;
|
|
@@ -302,7 +272,7 @@ export class EvalRunStore {
|
|
|
302
272
|
this.applyCaseResult(runId, result);
|
|
303
273
|
const run = this.runs.get(runId);
|
|
304
274
|
if (run !== undefined) {
|
|
305
|
-
|
|
275
|
+
this.persist(run);
|
|
306
276
|
}
|
|
307
277
|
} }));
|
|
308
278
|
const run = this.runs.get(runId);
|
|
@@ -311,7 +281,7 @@ export class EvalRunStore {
|
|
|
311
281
|
}
|
|
312
282
|
run.status = "completed";
|
|
313
283
|
run.finishedAt = new Date().toISOString();
|
|
314
|
-
|
|
284
|
+
this.persist(run);
|
|
315
285
|
this.logger(`[agentkit] eval run ${runId}: done — ${run.summary.passed} passed, ${run.summary.failed} failed`);
|
|
316
286
|
}
|
|
317
287
|
catch (error) {
|
|
@@ -322,7 +292,7 @@ export class EvalRunStore {
|
|
|
322
292
|
run.status = "failed";
|
|
323
293
|
run.finishedAt = new Date().toISOString();
|
|
324
294
|
run.error = error instanceof Error ? error.message : String(error);
|
|
325
|
-
|
|
295
|
+
this.persist(run);
|
|
326
296
|
this.logger(`[agentkit] eval run ${runId}: failed — ${run.error}`);
|
|
327
297
|
}
|
|
328
298
|
finally {
|
|
@@ -383,6 +353,24 @@ function markInterruptedRun(run) {
|
|
|
383
353
|
c.error = (_c = c.error) !== null && _c !== void 0 ? _c : INTERRUPTED_CASE_ERROR;
|
|
384
354
|
}
|
|
385
355
|
}
|
|
356
|
+
// Reconcile the summary with the repaired case rows so a persisted
|
|
357
|
+
// interrupted batch never claims pre-interruption pass counts.
|
|
358
|
+
let passed = 0;
|
|
359
|
+
let failed = 0;
|
|
360
|
+
for (const c of run.cases) {
|
|
361
|
+
if (c.ok === true) {
|
|
362
|
+
passed += 1;
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
failed += 1;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
run.summary = {
|
|
369
|
+
passed,
|
|
370
|
+
failed,
|
|
371
|
+
total: run.cases.length,
|
|
372
|
+
done: run.cases.length,
|
|
373
|
+
};
|
|
386
374
|
}
|
|
387
375
|
function snapshotListConfig(config, durableRuns) {
|
|
388
376
|
return Object.assign(Object.assign(Object.assign({}, (config.maxConcurrency === undefined
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP client for playground eval batches (`/v1/dev/evals/runs`).
|
|
3
|
+
*
|
|
4
|
+
* Used by `agentkit eval --prod` (or `--url`) so the batch runs on the serve
|
|
5
|
+
* process and is mirrored to `defineStorage` when an `evals` table is
|
|
6
|
+
* configured. Without those flags, eval keeps the in-process ephemeral path
|
|
7
|
+
* in `cli-ax.ts`.
|
|
8
|
+
*/
|
|
9
|
+
import type { EvalRunSnapshot } from "../evals.js";
|
|
10
|
+
import type { EvalRunResult } from "./eval-runner.js";
|
|
11
|
+
import { type RequestAuth } from "./request-headers.js";
|
|
12
|
+
export type RemoteEvalErrorCode = "no_matching_evals" | "eval_run_in_progress" | "unknown_eval_run" | "start_failed" | "poll_failed" | "aborted";
|
|
13
|
+
export declare class RemoteEvalError extends Error {
|
|
14
|
+
readonly status?: number | undefined;
|
|
15
|
+
readonly code?: RemoteEvalErrorCode | undefined;
|
|
16
|
+
readonly activeRunId?: string | undefined;
|
|
17
|
+
constructor(message: string, status?: number | undefined, code?: RemoteEvalErrorCode | undefined, activeRunId?: string | undefined);
|
|
18
|
+
}
|
|
19
|
+
export interface RemoteEvalListItem {
|
|
20
|
+
id: string;
|
|
21
|
+
fileId: string;
|
|
22
|
+
description?: string;
|
|
23
|
+
tags?: string[];
|
|
24
|
+
}
|
|
25
|
+
export interface RunRemoteEvalsOptions extends RequestAuth {
|
|
26
|
+
baseUrl: string;
|
|
27
|
+
filterIds?: string[];
|
|
28
|
+
tags?: string[];
|
|
29
|
+
/** Per-case timeout override forwarded to the serve process. */
|
|
30
|
+
timeoutMs?: number;
|
|
31
|
+
/** Ask the serve harness to emit verbose case logs (server-side). */
|
|
32
|
+
verbose?: boolean;
|
|
33
|
+
fetchImpl?: typeof fetch;
|
|
34
|
+
/** Poll interval while the batch is `running`. */
|
|
35
|
+
pollMs?: number;
|
|
36
|
+
/** Abort the wait (not the remote batch). */
|
|
37
|
+
signal?: AbortSignal;
|
|
38
|
+
/** Called each time the polled snapshot changes. */
|
|
39
|
+
onSnapshot?: (snap: EvalRunSnapshot) => void;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Start a batch on the target serve via `POST /v1/dev/evals/runs`, poll until
|
|
43
|
+
* terminal, and return CLI-shaped case results.
|
|
44
|
+
*/
|
|
45
|
+
export declare function runRemoteEvals(options: RunRemoteEvalsOptions): Promise<{
|
|
46
|
+
snapshot: EvalRunSnapshot;
|
|
47
|
+
results: EvalRunResult[];
|
|
48
|
+
}>;
|
|
49
|
+
/** List datapoints from `GET /v1/dev/evals` (same surface a remote run uses). */
|
|
50
|
+
export declare function listRemoteEvals(args: {
|
|
51
|
+
baseUrl: string;
|
|
52
|
+
auth?: RequestAuth;
|
|
53
|
+
fetchImpl?: typeof fetch;
|
|
54
|
+
filterIds?: string[];
|
|
55
|
+
tags?: string[];
|
|
56
|
+
signal?: AbortSignal;
|
|
57
|
+
}): Promise<RemoteEvalListItem[]>;
|
|
58
|
+
export declare function startRemoteEvalRun(args: {
|
|
59
|
+
baseUrl: string;
|
|
60
|
+
auth?: RequestAuth;
|
|
61
|
+
fetchImpl?: typeof fetch;
|
|
62
|
+
filterIds?: string[];
|
|
63
|
+
tags?: string[];
|
|
64
|
+
timeoutMs?: number;
|
|
65
|
+
verbose?: boolean;
|
|
66
|
+
signal?: AbortSignal;
|
|
67
|
+
}): Promise<EvalRunSnapshot>;
|
|
68
|
+
/** One-shot `GET /v1/dev/evals/runs/:runId` (no polling). */
|
|
69
|
+
export declare function getRemoteEvalRun(args: {
|
|
70
|
+
baseUrl: string;
|
|
71
|
+
runId: string;
|
|
72
|
+
auth?: RequestAuth;
|
|
73
|
+
fetchImpl?: typeof fetch;
|
|
74
|
+
signal?: AbortSignal;
|
|
75
|
+
}): Promise<EvalRunSnapshot>;
|
|
76
|
+
/** Recent batches from `GET /v1/dev/evals/runs`. */
|
|
77
|
+
export declare function listRemoteEvalRuns(args: {
|
|
78
|
+
baseUrl: string;
|
|
79
|
+
auth?: RequestAuth;
|
|
80
|
+
fetchImpl?: typeof fetch;
|
|
81
|
+
signal?: AbortSignal;
|
|
82
|
+
}): Promise<{
|
|
83
|
+
runs: EvalRunSnapshot[];
|
|
84
|
+
activeRunId?: string;
|
|
85
|
+
}>;
|
|
86
|
+
export declare function pollRemoteEvalRun(args: {
|
|
87
|
+
baseUrl: string;
|
|
88
|
+
runId: string;
|
|
89
|
+
auth?: RequestAuth;
|
|
90
|
+
fetchImpl?: typeof fetch;
|
|
91
|
+
pollMs?: number;
|
|
92
|
+
signal?: AbortSignal;
|
|
93
|
+
onSnapshot?: (snap: EvalRunSnapshot) => void;
|
|
94
|
+
}): Promise<EvalRunSnapshot>;
|
|
95
|
+
export declare function snapshotToEvalRunResults(snapshot: EvalRunSnapshot): EvalRunResult[];
|
|
96
|
+
//# sourceMappingURL=evals-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evals-client.d.ts","sourceRoot":"","sources":["../../src/internal/evals-client.ts"],"names":[],"mappings":"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"}
|