@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.
Files changed (177) hide show
  1. package/dist/ab.d.ts +8 -95
  2. package/dist/ab.d.ts.map +1 -1
  3. package/dist/ab.js +9 -150
  4. package/dist/bin/agent-serve.js +41 -8
  5. package/dist/channels/slack/post-update-delivery.d.ts +85 -0
  6. package/dist/channels/slack/post-update-delivery.d.ts.map +1 -0
  7. package/dist/docs/404.html +2 -2
  8. package/dist/docs/ab.html +4 -4
  9. package/dist/docs/assets/{app.DabPG-io.js → app.COTN7wgo.js} +1 -1
  10. package/dist/docs/assets/chunks/@localSearchIndexroot.B7UcKvIn.js +1 -0
  11. package/dist/docs/assets/chunks/{VPLocalSearchBox.jmyr0bU0.js → VPLocalSearchBox.BW3TBdT0.js} +1 -1
  12. package/dist/docs/assets/chunks/{theme.DysN9-VN.js → theme.BEJW0vE7.js} +2 -2
  13. package/dist/docs/assets/deployment.md.BtfEsc9S.js +55 -0
  14. package/dist/docs/assets/deployment.md.BtfEsc9S.lean.js +1 -0
  15. package/dist/docs/assets/example-agents_approval-buddy.md.8R5phXb5.js +10 -0
  16. package/dist/docs/assets/example-agents_approval-buddy.md.8R5phXb5.lean.js +1 -0
  17. package/dist/docs/assets/example-agents_benny.md.B0gjhI-p.js +7 -0
  18. package/dist/docs/assets/example-agents_benny.md.B0gjhI-p.lean.js +1 -0
  19. package/dist/docs/assets/example-agents_bugbot.md.DelIdhxB.js +11 -0
  20. package/dist/docs/assets/example-agents_bugbot.md.DelIdhxB.lean.js +1 -0
  21. package/dist/docs/assets/example-agents_codebase-wiki.md.DC6sgwn0.js +8 -0
  22. package/dist/docs/assets/example-agents_codebase-wiki.md.DC6sgwn0.lean.js +1 -0
  23. package/dist/docs/assets/example-agents_codeowners-review.md.Ku_tG2RY.js +8 -0
  24. package/dist/docs/assets/example-agents_codeowners-review.md.Ku_tG2RY.lean.js +1 -0
  25. package/dist/docs/assets/example-agents_concierge.md.4rQTSMXt.js +23 -0
  26. package/dist/docs/assets/example-agents_concierge.md.4rQTSMXt.lean.js +1 -0
  27. package/dist/docs/assets/example-agents_fsd.md.CzgUrDfi.js +15 -0
  28. package/dist/docs/assets/example-agents_fsd.md.CzgUrDfi.lean.js +1 -0
  29. package/dist/docs/assets/example-agents_index.md.CRqJlnIf.js +2 -0
  30. package/dist/docs/assets/example-agents_index.md.CRqJlnIf.lean.js +1 -0
  31. package/dist/docs/assets/example-agents_knowledge-base.md.BPJiVueF.js +11 -0
  32. package/dist/docs/assets/example-agents_knowledge-base.md.BPJiVueF.lean.js +1 -0
  33. package/dist/docs/assets/example-agents_security-reviewer.md.D2rtwDTO.js +19 -0
  34. package/dist/docs/assets/example-agents_security-reviewer.md.D2rtwDTO.lean.js +1 -0
  35. package/dist/docs/assets/example-agents_slack-agent.md.buLbgvBf.js +5 -0
  36. package/dist/docs/assets/example-agents_slack-agent.md.buLbgvBf.lean.js +1 -0
  37. package/dist/docs/assets/example-agents_weather-agent.md.C9Qv-W0o.js +24 -0
  38. package/dist/docs/assets/example-agents_weather-agent.md.C9Qv-W0o.lean.js +1 -0
  39. package/dist/docs/assets/index.md.COiu-1jL.js +20 -0
  40. package/dist/docs/assets/{index.md.Cylk70gg.lean.js → index.md.COiu-1jL.lean.js} +1 -1
  41. package/dist/docs/assets/reference_cli.md.D189RBCH.js +60 -0
  42. package/dist/docs/assets/reference_cli.md.D189RBCH.lean.js +1 -0
  43. package/dist/docs/building-with-agents.html +4 -4
  44. package/dist/docs/concepts.html +4 -4
  45. package/dist/docs/deployment.html +58 -17
  46. package/dist/docs/evals.html +4 -4
  47. package/dist/docs/example-agents/approval-buddy.html +34 -0
  48. package/dist/docs/example-agents/benny.html +31 -0
  49. package/dist/docs/example-agents/bugbot.html +35 -0
  50. package/dist/docs/example-agents/codebase-wiki.html +32 -0
  51. package/dist/docs/example-agents/codeowners-review.html +32 -0
  52. package/dist/docs/example-agents/concierge.html +47 -0
  53. package/dist/docs/example-agents/fsd.html +39 -0
  54. package/dist/docs/example-agents/index.html +26 -0
  55. package/dist/docs/example-agents/knowledge-base.html +35 -0
  56. package/dist/docs/example-agents/security-reviewer.html +43 -0
  57. package/dist/docs/example-agents/slack-agent.html +29 -0
  58. package/dist/docs/example-agents/weather-agent.html +48 -0
  59. package/dist/docs/guides/agent-to-agent.html +4 -4
  60. package/dist/docs/guides/cloud-runtime.html +5 -5
  61. package/dist/docs/guides/github.html +4 -4
  62. package/dist/docs/guides/human-in-the-loop.html +4 -4
  63. package/dist/docs/guides/slack.html +4 -4
  64. package/dist/docs/guides/webhooks.html +4 -4
  65. package/dist/docs/hashmap.json +1 -1
  66. package/dist/docs/hillclimbing.html +4 -4
  67. package/dist/docs/index.html +7 -7
  68. package/dist/docs/quickstart.html +4 -4
  69. package/dist/docs/reference/agent-config.html +4 -4
  70. package/dist/docs/reference/channels.html +4 -4
  71. package/dist/docs/reference/cli.html +52 -30
  72. package/dist/docs/reference/connections.html +4 -4
  73. package/dist/docs/reference/hooks.html +4 -4
  74. package/dist/docs/reference/http-api.html +4 -4
  75. package/dist/docs/reference/instructions.html +4 -4
  76. package/dist/docs/reference/playground.html +4 -4
  77. package/dist/docs/reference/project-layout.html +4 -4
  78. package/dist/docs/reference/schedules.html +4 -4
  79. package/dist/docs/reference/sessions.html +4 -4
  80. package/dist/docs/reference/skills.html +4 -4
  81. package/dist/docs/reference/subagents.html +4 -4
  82. package/dist/docs/reference/tools.html +4 -4
  83. package/dist/docs/scaffolding-agents.html +4 -4
  84. package/dist/docs/storage.html +4 -4
  85. package/dist/docs/troubleshooting.html +4 -4
  86. package/dist/evals.d.ts +5 -62
  87. package/dist/evals.d.ts.map +1 -1
  88. package/dist/evals.js +3 -66
  89. package/dist/index.d.ts +1 -1
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/internal/ab-collector.d.ts +7 -5
  92. package/dist/internal/ab-collector.d.ts.map +1 -1
  93. package/dist/internal/ab-collector.js +3 -14
  94. package/dist/internal/ab-snapshot.d.ts +2 -4
  95. package/dist/internal/ab-snapshot.d.ts.map +1 -1
  96. package/dist/internal/cli-ax.d.ts +33 -5
  97. package/dist/internal/cli-ax.d.ts.map +1 -1
  98. package/dist/internal/cli-ax.js +428 -87
  99. package/dist/internal/cli-deploy.js +1 -1
  100. package/dist/internal/discovery.js +3 -3
  101. package/dist/internal/eval-run-store.d.ts +35 -30
  102. package/dist/internal/eval-run-store.d.ts.map +1 -1
  103. package/dist/internal/eval-run-store.js +88 -100
  104. package/dist/internal/evals-client.d.ts +96 -0
  105. package/dist/internal/evals-client.d.ts.map +1 -0
  106. package/dist/internal/evals-client.js +262 -0
  107. package/dist/internal/init-project.d.ts.map +1 -1
  108. package/dist/internal/init-project.js +1 -0
  109. package/dist/internal/persistence-coordinator.d.ts +127 -0
  110. package/dist/internal/persistence-coordinator.d.ts.map +1 -0
  111. package/dist/internal/playground-proxy.d.ts +5 -5
  112. package/dist/internal/playground-proxy.js +3 -3
  113. package/dist/internal/resolve-prod-target.d.ts +30 -0
  114. package/dist/internal/resolve-prod-target.d.ts.map +1 -1
  115. package/dist/internal/resolve-prod-target.js +74 -2
  116. package/dist/internal/server.d.ts.map +1 -1
  117. package/dist/internal/server.js +16 -5
  118. package/dist/internal/session-engine.d.ts +1 -2
  119. package/dist/internal/session-engine.d.ts.map +1 -1
  120. package/dist/internal/session-engine.js +14 -31
  121. package/dist/internal/storage-coordinator.d.ts +16 -15
  122. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  123. package/dist/internal/storage-coordinator.js +73 -80
  124. package/dist/persistence.d.ts +184 -0
  125. package/dist/persistence.d.ts.map +1 -0
  126. package/dist/playground/assets/cursor-icons-16-CQ50JpfO.woff2 +0 -0
  127. package/dist/playground/assets/index-72vCOBWO.js +86 -0
  128. package/dist/playground/assets/index-BjnMwYoR.css +1 -0
  129. package/dist/playground/index.html +2 -2
  130. package/dist/storage.d.ts +51 -10
  131. package/dist/storage.d.ts.map +1 -1
  132. package/dist/storage.js +27 -10
  133. package/docs/README.md +34 -5
  134. package/docs/deployment.md +352 -149
  135. package/docs/example-agents/approval-buddy.md +270 -0
  136. package/docs/example-agents/benny.md +186 -0
  137. package/docs/example-agents/bugbot.md +231 -0
  138. package/docs/example-agents/codebase-wiki.md +174 -0
  139. package/docs/example-agents/codeowners-review.md +195 -0
  140. package/docs/example-agents/concierge.md +205 -0
  141. package/docs/example-agents/fsd.md +330 -0
  142. package/docs/example-agents/index.md +102 -0
  143. package/docs/example-agents/knowledge-base.md +171 -0
  144. package/docs/example-agents/security-reviewer.md +296 -0
  145. package/docs/example-agents/slack-agent.md +146 -0
  146. package/docs/example-agents/weather-agent.md +302 -0
  147. package/docs/reference/cli.md +546 -147
  148. package/package.json +1 -1
  149. package/src/ab.ts +9 -261
  150. package/src/bin/agent-serve.ts +46 -7
  151. package/src/evals.ts +5 -119
  152. package/src/index.ts +2 -0
  153. package/src/internal/ab-collector.ts +12 -22
  154. package/src/internal/ab-snapshot.ts +2 -4
  155. package/src/internal/cli-ax.ts +551 -104
  156. package/src/internal/cli-deploy.ts +1 -1
  157. package/src/internal/discovery.ts +2 -2
  158. package/src/internal/eval-run-store.ts +91 -100
  159. package/src/internal/evals-client.ts +431 -0
  160. package/src/internal/init-project.ts +1 -0
  161. package/src/internal/playground-proxy.ts +5 -5
  162. package/src/internal/resolve-prod-target.ts +101 -3
  163. package/src/internal/server.ts +17 -3
  164. package/src/internal/session-engine.ts +9 -29
  165. package/src/internal/storage-coordinator.ts +109 -101
  166. package/src/storage.ts +79 -14
  167. package/dist/docs/assets/chunks/@localSearchIndexroot.QwK5BtEH.js +0 -1
  168. package/dist/docs/assets/deployment.md.DTKwE15Z.js +0 -14
  169. package/dist/docs/assets/deployment.md.DTKwE15Z.lean.js +0 -1
  170. package/dist/docs/assets/index.md.Cylk70gg.js +0 -20
  171. package/dist/docs/assets/reference_cli.md.Bv6pOxcF.js +0 -38
  172. package/dist/docs/assets/reference_cli.md.Bv6pOxcF.lean.js +0 -1
  173. package/dist/internal/json-dir-store.js +0 -100
  174. package/dist/playground/assets/cursor-icons-outline-BxTT_FVJ.woff2 +0 -0
  175. package/dist/playground/assets/index-BEauYlII.css +0 -1
  176. package/dist/playground/assets/index-BtM0wEGg.js +0 -319
  177. 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 `defineEvalConfig`).
5
- * Optional durable `persistRuns` from `evals/evals.config.ts` survives restart.
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 EvalRunPersistence, type EvalRunSnapshot } from "../evals.js";
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 `evals.config.ts` set `persistRuns`. */
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
- * Project-wide sink from `agent/storage.ts` (`defineStorage`),
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
- * Project-wide sink from `agent/storage.ts` (`defineStorage`),
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 durable persistence
74
- * (`evals.config.ts` `persistRuns`, else the `defineStorage`
75
- * fallback). Called eagerly from the serve startup restore step
76
- * alongside session restore and lazily as a safety net by every read.
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 hydrateFromPersistence;
83
+ private hydrateFromStorage;
81
84
  private pruneOldRuns;
85
+ /** Mirror the run onto durable storage (coordinator clones + serializes). */
86
+ private persist;
82
87
  /**
83
- * Queue a durable save for `run`. Snapshots are cloned at enqueue time and
84
- * writes for the same runId run strictly in order so an intermediate
85
- * fire-and-forget save cannot finish after (and overwrite) a later final save.
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
- private enqueuePersist;
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;;;;;;;GAOG;AAGH,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAErB,MAAM,aAAa,CAAC;AASrB,YAAY,EACV,eAAe,EACf,iBAAiB,IAAI,cAAc,EACnC,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAOF,qBAAa,YAAY;IAWrB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAhBvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsC;IAC3D,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,QAAQ,CAAS;IACzB,wFAAwF;IACxF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;IAClE,wEAAwE;IACxE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC,YACmB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAC/C;;;OAGG;IACc,mBAAmB,CAAC,EAAE,kBAAkB,YAAA,EACvD;IAEJ,yEAAyE;IACzE,OAAO,CAAC,cAAc;IAMhB,IAAI,IAAI,OAAO,CAAC;QACpB,KAAK,EAAE,KAAK,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;YACX,MAAM,EAAE,MAAM,CAAC;YACf,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,MAAM,EAAE,cAAc,CAAC;KACxB,CAAC,CAiBD;IAEK,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAG7D;IAED,+EAA+E;IACzE,QAAQ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAG3C;IAED;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC;QAClC,IAAI,EAAE,eAAe,EAAE,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAOD;IAED,cAAc,IAAI,MAAM,GAAG,SAAS,CAEnC;IAEK,KAAK,CAAC,KAAK,GAAE,iBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CA+DnE;IAED,OAAO,CAAC,UAAU;IAMlB;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ7B;YAEa,sBAAsB;YAkDtB,YAAY;IAe1B;;;;OAIG;IACH,OAAO,CAAC,cAAc;YAgBR,WAAW;YAcX,aAAa;YAeb,OAAO;IAoGrB,OAAO,CAAC,eAAe;CAqCxB;AAwDD,qBAAa,oBAAqB,SAAQ,KAAK;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAAxC,YAAqB,WAAW,EAAE,MAAM,EAGvC;CACF;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,cAGC;CACF"}
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 `defineEvalConfig`).
5
- * Optional durable `persistRuns` from `evals/evals.config.ts` survives restart.
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
- * Project-wide sink from `agent/storage.ts` (`defineStorage`),
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.fallbackPersistence = fallbackPersistence;
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.resolvePersist(config) !== undefined),
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.resolvePersist(config) !== undefined),
108
+ config: snapshotRunConfig(config, this.storage !== undefined),
118
109
  };
119
110
  this.runs.set(runId, snapshot);
120
111
  this.activeRunId = runId;
121
- yield this.pruneOldRuns(config);
122
- yield this.enqueuePersist(snapshot, this.resolvePersist(config));
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 durable persistence
135
- * (`evals.config.ts` `persistRuns`, else the `defineStorage`
136
- * fallback). Called eagerly from the serve startup restore step
137
- * alongside session restore and lazily as a safety net by every read.
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.hydrateFromPersistence();
136
+ this.hydratePromise = this.hydrateFromStorage();
147
137
  }
148
138
  yield this.hydratePromise;
149
139
  });
150
140
  }
151
- hydrateFromPersistence() {
141
+ hydrateFromStorage() {
152
142
  return __awaiter(this, void 0, void 0, function* () {
153
143
  try {
154
- const { config } = yield discoverEvals(this.projectRoot);
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 repaired = [];
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
- repaired.push(run);
159
+ this.persist(run);
178
160
  }
179
161
  this.runs.set(run.runId, run);
180
162
  }
181
- for (const run of repaired) {
182
- yield this.enqueuePersist(run, persist);
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
- yield this.pruneOldRuns(config);
185
- this.logger(`[agentkit] hydrated ${this.runs.size} playground eval run(s) from persistRuns`);
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
- return __awaiter(this, void 0, void 0, function* () {
198
- const limit = resolveEvalMaxPlaygroundRuns(config.maxPlaygroundRuns);
199
- const ordered = this.sortedRuns();
200
- if (ordered.length <= limit) {
201
- return;
202
- }
203
- for (const stale of ordered.slice(limit)) {
204
- if (stale.runId === this.activeRunId) {
205
- continue;
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
- * Queue a durable save for `run`. Snapshots are cloned at enqueue time and
214
- * writes for the same runId run strictly in order so an intermediate
215
- * fire-and-forget save cannot finish after (and overwrite) a later final save.
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
- enqueuePersist(run, persist) {
218
- var _a;
219
- if (persist === undefined) {
220
- return Promise.resolve();
212
+ close() {
213
+ const activeRunId = this.activeRunId;
214
+ if (activeRunId === undefined) {
215
+ return;
221
216
  }
222
- const snapshot = structuredClone(run);
223
- const prev = (_a = this.persistChains.get(run.runId)) !== null && _a !== void 0 ? _a : Promise.resolve();
224
- const next = prev
225
- .catch(() => undefined)
226
- .then(() => this.persistSave(snapshot, persist));
227
- this.persistChains.set(run.runId, next);
228
- return next;
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
- void this.enqueuePersist(run, this.resolvePersist(opts.config));
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
- yield this.enqueuePersist(run, this.resolvePersist(opts.config));
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
- yield this.enqueuePersist(run, this.resolvePersist(opts.config));
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":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAI7E,MAAM,MAAM,mBAAmB,GAC3B,mBAAmB,GACnB,sBAAsB,GACtB,kBAAkB,GAClB,cAAc,GACd,aAAa,GACb,SAAS,CAAC;AAEd,qBAAa,eAAgB,SAAQ,KAAK;IAGtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,mBAAmB;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM;IAJ/B,YACE,OAAO,EAAE,MAAM,EACN,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,IAAI,CAAC,EAAE,mBAAmB,YAAA,EAC1B,WAAW,CAAC,EAAE,MAAM,YAAA,EAI9B;CACF;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,oDAAoD;IACpD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;CAC9C;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC;IAAE,QAAQ,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CA+BlE;AAED,iFAAiF;AACjF,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAgEhC;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,eAAe,CAAC,CAuF3B;AAED,6DAA6D;AAC7D,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmC3B;AAED,oDAAoD;AACpD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAyC7D;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;CAC9C,GAAG,OAAO,CAAC,eAAe,CAAC,CAoB3B;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,eAAe,GACxB,aAAa,EAAE,CAgBjB"}