@evolvingmachines/evolve 0.0.65 → 0.0.67-train-harness-wave-2026-09-25.20260926.e00a8a6d

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 (153) hide show
  1. package/dist/{chunk-DK2MGUPB.js → chunk-DI6LPW2B.js} +2 -2
  2. package/dist/cli/index.cjs +29 -29
  3. package/dist/cli/index.d.cts +3 -3
  4. package/dist/cli/index.d.ts +3 -3
  5. package/dist/cli/index.js +18 -18
  6. package/dist/index.cjs +64 -60
  7. package/dist/index.d.cts +297 -18
  8. package/dist/index.d.ts +297 -18
  9. package/dist/index.js +48 -44
  10. package/dist/{types-B_qmzlMk.d.cts → types-Dj0iMl5V.d.cts} +70 -90
  11. package/dist/{types-B_qmzlMk.d.ts → types-Dj0iMl5V.d.ts} +70 -90
  12. package/harness-capabilities.json +285 -0
  13. package/package.json +9 -6
  14. package/skills/create-adapter/SKILL.md +71 -26
  15. package/skills/create-task/SKILL.md +124 -66
  16. package/skills/evolve/SKILL.md +37 -20
  17. package/skills/evolve-evals/SKILL.md +142 -69
  18. package/skills/evolve-evals/references/cli-reference/agent.md +76 -0
  19. package/skills/evolve-evals/references/cli-reference/analysis.md +78 -0
  20. package/skills/evolve-evals/references/cli-reference/analyze.md +97 -0
  21. package/skills/evolve-evals/references/cli-reference/auth.md +96 -0
  22. package/skills/evolve-evals/references/cli-reference/check.md +157 -0
  23. package/skills/evolve-evals/references/cli-reference/dataset.md +154 -0
  24. package/skills/evolve-evals/references/cli-reference/filesystem.md +168 -0
  25. package/skills/evolve-evals/references/cli-reference/index.md +149 -0
  26. package/skills/evolve-evals/references/cli-reference/job.md +198 -0
  27. package/skills/evolve-evals/references/cli-reference/run.md +188 -0
  28. package/skills/evolve-evals/references/cli-reference/secrets.md +77 -0
  29. package/skills/evolve-evals/references/cli-reference/session.md +56 -0
  30. package/skills/evolve-evals/references/cli-reference/skill.md +52 -0
  31. package/skills/evolve-evals/references/cli-reference/skills.md +85 -0
  32. package/skills/evolve-evals/references/cli-reference/trial.md +115 -0
  33. package/skills/evolve-evals/references/cli-reference/upload.md +72 -0
  34. package/skills/evolve-evals/references/core-concepts/agents.md +101 -0
  35. package/skills/evolve-evals/references/core-concepts/analyze.md +143 -0
  36. package/skills/evolve-evals/references/core-concepts/check.md +116 -0
  37. package/skills/evolve-evals/references/core-concepts/compatibility.md +39 -0
  38. package/skills/evolve-evals/references/core-concepts/compose.md +103 -0
  39. package/skills/evolve-evals/references/core-concepts/datasets.md +234 -0
  40. package/skills/evolve-evals/references/core-concepts/index.md +52 -0
  41. package/skills/evolve-evals/references/core-concepts/jobs.md +223 -0
  42. package/skills/evolve-evals/references/core-concepts/models.md +73 -0
  43. package/skills/evolve-evals/references/core-concepts/multi-step.md +93 -0
  44. package/skills/evolve-evals/references/core-concepts/rewardkit.md +341 -0
  45. package/skills/evolve-evals/references/core-concepts/sandboxes.md +73 -0
  46. package/skills/evolve-evals/references/core-concepts/secrets.md +86 -0
  47. package/skills/evolve-evals/references/core-concepts/sharing.md +81 -0
  48. package/skills/evolve-evals/references/core-concepts/skills.md +100 -0
  49. package/skills/evolve-evals/references/core-concepts/task-config.md +169 -0
  50. package/skills/evolve-evals/references/core-concepts/task-environment.md +127 -0
  51. package/skills/evolve-evals/references/core-concepts/task-reference.md +191 -0
  52. package/skills/evolve-evals/references/core-concepts/task-verifiers.md +209 -0
  53. package/skills/evolve-evals/references/core-concepts/tasks.md +90 -0
  54. package/skills/evolve-evals/references/core-concepts/teams.md +128 -0
  55. package/skills/evolve-evals/references/core-concepts/trial-outputs.md +225 -0
  56. package/skills/evolve-evals/references/core-concepts/trials.md +129 -0
  57. package/skills/evolve-evals/references/core-concepts/upload-sdk-session.md +240 -0
  58. package/skills/evolve-evals/references/core-concepts/upload.md +166 -0
  59. package/skills/evolve-evals/references/dashboard/checks.md +54 -0
  60. package/skills/evolve-evals/references/dashboard/datasets.md +65 -0
  61. package/skills/evolve-evals/references/dashboard/jobs.md +106 -0
  62. package/skills/evolve-evals/references/dashboard/traces.md +54 -0
  63. package/skills/evolve-evals/references/dashboard/trial-viewer.md +77 -0
  64. package/skills/evolve-evals/references/getting-started/first-task.md +228 -0
  65. package/skills/evolve-evals/references/getting-started/installation.md +79 -0
  66. package/skills/evolve-evals/references/getting-started/quick-start.md +100 -0
  67. package/skills/evolve-evals/references/index.md +58 -0
  68. package/skills/evolve-evals/references/sdk/http.md +110 -0
  69. package/skills/evolve-evals/references/sdk/python.md +108 -0
  70. package/skills/evolve-evals/references/sdk/typescript.md +104 -0
  71. package/skills/evolve-evals/references/sdk-reference/agents.md +75 -0
  72. package/skills/evolve-evals/references/sdk-reference/analyses.md +125 -0
  73. package/skills/evolve-evals/references/sdk-reference/auth.md +171 -0
  74. package/skills/evolve-evals/references/sdk-reference/checks.md +146 -0
  75. package/skills/evolve-evals/references/sdk-reference/datasets.md +170 -0
  76. package/skills/evolve-evals/references/sdk-reference/error-codes.md +231 -0
  77. package/skills/evolve-evals/references/sdk-reference/errors.md +98 -0
  78. package/skills/evolve-evals/references/sdk-reference/filesystem.md +166 -0
  79. package/skills/evolve-evals/references/sdk-reference/index.md +161 -0
  80. package/skills/evolve-evals/references/sdk-reference/jobs.md +250 -0
  81. package/skills/evolve-evals/references/sdk-reference/meta.md +54 -0
  82. package/skills/evolve-evals/references/sdk-reference/methods/agents.md +154 -0
  83. package/skills/evolve-evals/references/sdk-reference/methods/analyses.md +211 -0
  84. package/skills/evolve-evals/references/sdk-reference/methods/auth.md +257 -0
  85. package/skills/evolve-evals/references/sdk-reference/methods/checks.md +462 -0
  86. package/skills/evolve-evals/references/sdk-reference/methods/datasets.md +687 -0
  87. package/skills/evolve-evals/references/sdk-reference/methods/filesystem.md +527 -0
  88. package/skills/evolve-evals/references/sdk-reference/methods/jobs.md +1023 -0
  89. package/skills/evolve-evals/references/sdk-reference/methods/meta.md +213 -0
  90. package/skills/evolve-evals/references/sdk-reference/methods/secrets.md +157 -0
  91. package/skills/evolve-evals/references/sdk-reference/methods/skills.md +125 -0
  92. package/skills/evolve-evals/references/sdk-reference/methods/trials.md +371 -0
  93. package/skills/evolve-evals/references/sdk-reference/secrets.md +104 -0
  94. package/skills/evolve-evals/references/sdk-reference/skills.md +66 -0
  95. package/skills/evolve-evals/references/sdk-reference/trials.md +164 -0
  96. package/skills/evolve-evals/references/sdk-reference/types.md +1255 -0
  97. package/skills/publish/SKILL.md +103 -79
  98. package/skills/rewardkit/SKILL.md +78 -23
  99. package/spec/openapi.yaml +164 -160
  100. package/skills/evolve-evals/references/cli-reference/agent.mdx +0 -79
  101. package/skills/evolve-evals/references/cli-reference/analysis.mdx +0 -160
  102. package/skills/evolve-evals/references/cli-reference/analyze.mdx +0 -84
  103. package/skills/evolve-evals/references/cli-reference/auth.mdx +0 -133
  104. package/skills/evolve-evals/references/cli-reference/check.mdx +0 -263
  105. package/skills/evolve-evals/references/cli-reference/dataset.mdx +0 -151
  106. package/skills/evolve-evals/references/cli-reference/index.mdx +0 -108
  107. package/skills/evolve-evals/references/cli-reference/job.mdx +0 -278
  108. package/skills/evolve-evals/references/cli-reference/run.mdx +0 -204
  109. package/skills/evolve-evals/references/cli-reference/secrets.mdx +0 -95
  110. package/skills/evolve-evals/references/cli-reference/skill.mdx +0 -61
  111. package/skills/evolve-evals/references/cli-reference/skills.mdx +0 -81
  112. package/skills/evolve-evals/references/cli-reference/trial.mdx +0 -181
  113. package/skills/evolve-evals/references/cli-reference/upload.mdx +0 -36
  114. package/skills/evolve-evals/references/core-concepts/agents.mdx +0 -106
  115. package/skills/evolve-evals/references/core-concepts/analyze.mdx +0 -86
  116. package/skills/evolve-evals/references/core-concepts/check.mdx +0 -64
  117. package/skills/evolve-evals/references/core-concepts/datasets.mdx +0 -138
  118. package/skills/evolve-evals/references/core-concepts/index.mdx +0 -42
  119. package/skills/evolve-evals/references/core-concepts/jobs.mdx +0 -151
  120. package/skills/evolve-evals/references/core-concepts/models.mdx +0 -68
  121. package/skills/evolve-evals/references/core-concepts/sandboxes.mdx +0 -52
  122. package/skills/evolve-evals/references/core-concepts/secrets.mdx +0 -41
  123. package/skills/evolve-evals/references/core-concepts/sharing.mdx +0 -35
  124. package/skills/evolve-evals/references/core-concepts/skills.mdx +0 -42
  125. package/skills/evolve-evals/references/core-concepts/tasks.mdx +0 -216
  126. package/skills/evolve-evals/references/core-concepts/teams.mdx +0 -36
  127. package/skills/evolve-evals/references/core-concepts/trial-outputs.mdx +0 -117
  128. package/skills/evolve-evals/references/core-concepts/trials.mdx +0 -103
  129. package/skills/evolve-evals/references/core-concepts/upload.mdx +0 -93
  130. package/skills/evolve-evals/references/dashboard/checks.mdx +0 -21
  131. package/skills/evolve-evals/references/dashboard/datasets.mdx +0 -24
  132. package/skills/evolve-evals/references/dashboard/jobs.mdx +0 -65
  133. package/skills/evolve-evals/references/dashboard/traces.mdx +0 -17
  134. package/skills/evolve-evals/references/dashboard/trial-viewer.mdx +0 -30
  135. package/skills/evolve-evals/references/getting-started/installation.mdx +0 -56
  136. package/skills/evolve-evals/references/getting-started/quick-start.mdx +0 -94
  137. package/skills/evolve-evals/references/index.mdx +0 -48
  138. package/skills/evolve-evals/references/sdk/python.mdx +0 -161
  139. package/skills/evolve-evals/references/sdk/typescript.mdx +0 -163
  140. package/skills/evolve-evals/references/sdk-reference/agents.mdx +0 -108
  141. package/skills/evolve-evals/references/sdk-reference/analyses.mdx +0 -222
  142. package/skills/evolve-evals/references/sdk-reference/auth.mdx +0 -116
  143. package/skills/evolve-evals/references/sdk-reference/checks.mdx +0 -300
  144. package/skills/evolve-evals/references/sdk-reference/datasets.mdx +0 -346
  145. package/skills/evolve-evals/references/sdk-reference/errors.mdx +0 -210
  146. package/skills/evolve-evals/references/sdk-reference/index.mdx +0 -60
  147. package/skills/evolve-evals/references/sdk-reference/jobs.mdx +0 -822
  148. package/skills/evolve-evals/references/sdk-reference/meta.mdx +0 -52
  149. package/skills/evolve-evals/references/sdk-reference/skills.mdx +0 -69
  150. package/skills/evolve-evals/references/sdk-reference/trials.mdx +0 -302
  151. package/skills/evolve-evals/references/sdk-reference/types.mdx +0 -274
  152. package/skills/evolve-evals/references/snippets/global-options.mdx +0 -13
  153. package/skills/evolve-evals/references/snippets/list-flags.mdx +0 -23
@@ -0,0 +1,371 @@
1
+ ---
2
+ title: "Trials methods"
3
+ description: "Read attempts, traces, files, and actions by trial id."
4
+ ---
5
+
6
+ Use `trials()` to create `client`. Examples run inside an async context; ids name existing records. The [trial guide](/sdk-reference/trials) shows the full inspection workflow.
7
+
8
+ | Read | Act |
9
+ | --- | --- |
10
+ | [get](#get), [trace](#trace), [traceEvents](#traceevents) | [retry](#retry), [regrade](#regrade), [stop](#stop) |
11
+ | [files](#files), [file](#file), [artifact](#artifact), [filesystem](#filesystem) | |
12
+
13
+ ## get
14
+
15
+ Read one attempt by its globally unique id. Returns `Trial`, including `job_id` and the untruncated exception message.
16
+
17
+ ### Signature
18
+
19
+ ```ts TypeScript signature
20
+ get(trialId: string): Promise<Trial>;
21
+ ```
22
+
23
+ ```python Python signature
24
+ async def get(trial_id: str) -> Trial: ...
25
+ ```
26
+
27
+ ```ts TypeScript
28
+ const trial = await client.get(trialId);
29
+ ```
30
+
31
+ ```python Python
32
+ trial = await client.get(trial_id)
33
+ ```
34
+
35
+ See [trial fields](/sdk-reference/types#trial-fields) for rewards, usage, retries, timing, and provenance.
36
+
37
+ ## trace
38
+
39
+ Read one page of parsed events. Returns `TraceEventPage`.
40
+
41
+ ### Signature
42
+
43
+ ```ts TypeScript signature
44
+ trace(
45
+ trialId: string,
46
+ options?: TraceOptions
47
+ ): Promise<TraceEventPage>;
48
+ ```
49
+
50
+ ```python Python signature
51
+ async def trace(
52
+ trial_id: str,
53
+ *,
54
+ cursor: Optional[str] = None,
55
+ limit: Optional[int] = None,
56
+ type: Optional[str] = None,
57
+ grep: Optional[str] = None,
58
+ tail: Optional[int] = None,
59
+ ) -> TraceEventPage: ...
60
+ ```
61
+
62
+ ```ts TypeScript
63
+ const page = await client.trace(trialId, {
64
+ tail: 20
65
+ });
66
+ ```
67
+
68
+ ```python Python
69
+ page = await client.trace(
70
+ trial_id,
71
+ tail=20,
72
+ )
73
+ ```
74
+
75
+ | Option | Meaning / default |
76
+ | --- | --- |
77
+ | `cursor` | Events strictly after this sequence number, passed as a string |
78
+ | `limit` | Events per page: default 200, maximum 1,000 |
79
+ | `type` | Exact event type |
80
+ | `grep` | Case-insensitive POSIX regular expression over type and content |
81
+ | `tail` | Last N matching events, still returned oldest first |
82
+
83
+ The page has `items`, `nextCursor`, `hasMore` / Python `next_cursor`, `has_more`. An event has `seq: number`, `type: string`, and `data: object`. A null next cursor means caught up. To poll again later, retain the last event’s `seq`.
84
+
85
+ ## traceEvents
86
+
87
+ Python: `trace_events`. Iterate currently available parsed events across pages. It finishes when caught up; it is not a live subscription.
88
+
89
+ ### Signature
90
+
91
+ ```ts TypeScript signature
92
+ traceEvents(
93
+ trialId: string,
94
+ options?: TraceOptions
95
+ ): AsyncIterableIterator<TraceEvent>;
96
+ ```
97
+
98
+ ```python Python signature
99
+ async def trace_events(
100
+ trial_id: str,
101
+ *,
102
+ cursor: Optional[str] = None,
103
+ limit: Optional[int] = None,
104
+ type: Optional[str] = None,
105
+ grep: Optional[str] = None,
106
+ tail: Optional[int] = None,
107
+ ) -> AsyncIterator[TraceEvent]: ...
108
+ ```
109
+
110
+ ```ts TypeScript
111
+ for await (const event of client.traceEvents(trialId)) {
112
+ console.log(event.seq, event.type);
113
+ }
114
+ ```
115
+
116
+ ```python Python
117
+ async for event in client.trace_events(trial_id):
118
+ print(event.seq, event.type)
119
+ ```
120
+
121
+ Accepts the same `cursor`, `limit`, `type`, `grep`, and `tail` options as `trace`. Returns an async iterator of `TraceEvent`.
122
+
123
+ ## files
124
+
125
+ List the stored trial tree by relative path. Returns one `TrialFilePage`, sorted by path.
126
+
127
+ ### Signature
128
+
129
+ ```ts TypeScript signature
130
+ files(
131
+ trialId: string,
132
+ options?: ListTrialFilesOptions
133
+ ): Promise<TrialFilePage>;
134
+ ```
135
+
136
+ ```python Python signature
137
+ async def files(
138
+ trial_id: str,
139
+ *,
140
+ cursor: Optional[str] = None,
141
+ limit: Optional[int] = None,
142
+ ) -> TrialFilePage: ...
143
+ ```
144
+
145
+ ```ts TypeScript
146
+ const page = await client.files(trialId, {
147
+ limit: 20
148
+ });
149
+ ```
150
+
151
+ ```python Python
152
+ page = await client.files(
153
+ trial_id,
154
+ limit=20,
155
+ )
156
+ ```
157
+
158
+ Optional `limit` defaults to 200 (maximum 1,000); `cursor` continues the page. Each item contains `path: string` and `size_bytes: number`. An empty tree is a normal result.
159
+
160
+ ## file
161
+
162
+ Read one path returned by `files`. Returns exact bytes: TypeScript `Buffer`, Python `bytes`.
163
+
164
+ ### Signature
165
+
166
+ ```ts TypeScript signature
167
+ file(
168
+ trialId: string,
169
+ path: string,
170
+ range?: TrialFileRange
171
+ ): Promise<Buffer>;
172
+ ```
173
+
174
+ ```python Python signature
175
+ async def file(
176
+ trial_id: str,
177
+ path: str,
178
+ *,
179
+ start: Optional[int] = None,
180
+ end: Optional[int] = None,
181
+ suffix: Optional[int] = None,
182
+ ) -> bytes: ...
183
+ ```
184
+
185
+ ```ts TypeScript
186
+ const bytes = await client.file(
187
+ trialId,
188
+ "agent/stderr.log",
189
+ {
190
+ suffix: 4096
191
+ }
192
+ );
193
+ ```
194
+
195
+ ```python Python
196
+ data = await client.file(
197
+ trial_id,
198
+ 'agent/stderr.log',
199
+ suffix=4096,
200
+ )
201
+ ```
202
+
203
+ Optional byte range: `start` plus inclusive `end`, `start` through EOF, or `suffix` for the last N bytes. Do not combine `suffix` with `start` or `end`. TypeScript passes the range as the third object; Python uses keyword arguments. A missing path is a typed 404.
204
+
205
+ ## artifact
206
+
207
+ Read a named stored artifact. Returns text, a path-to-text map, or null when nothing was stored.
208
+
209
+ ### Signature
210
+
211
+ ```ts TypeScript signature
212
+ artifact(
213
+ trialId: string,
214
+ stream: Exclude<TrialArtifactStream, "trace-parsed" | "agent-home" | "filesystem">
215
+ ): Promise<string | null>;
216
+ artifact(
217
+ trialId: string,
218
+ stream: "agent-home"
219
+ ): Promise<Record<string, string> | null>;
220
+ ```
221
+
222
+ ```python Python signature
223
+ async def artifact(
224
+ trial_id: str,
225
+ stream: Literal['trace-parsed', 'verifier', 'trace-stdout', 'trace-stderr', 'trace-atif', 'trajectory', 'agent-home', 'filesystem'],
226
+ ) -> Optional[Union[str, Dict[str, str]]]: ...
227
+ ```
228
+
229
+ ```ts TypeScript
230
+ const trajectory = await client.artifact(
231
+ trialId,
232
+ "trace-atif"
233
+ );
234
+ ```
235
+
236
+ ```python Python
237
+ trajectory = await client.artifact(
238
+ trial_id,
239
+ 'trace-atif',
240
+ )
241
+ ```
242
+
243
+ | Selector | Result |
244
+ | --- | --- |
245
+ | `verifier`, `trace-stdout`, `trace-stderr` | `string \| null` / `str \| None` |
246
+ | `trace-atif` | ATIF v1.7 document as JSON text, or null |
247
+ | `agent-home` | Map of sandbox paths to UTF-8 file text, or null |
248
+ | `trajectory` | Reserved native-session selector; currently returns not-found |
249
+
250
+ Use `trace` for `trace-parsed`, and `filesystem(id).archive()` for `filesystem`. Python’s annotation lists these selectors, but `artifact` rejects both locally. Non-text home files are omitted from the text map and recorded in `/agent-home.json`; the job archive preserves their bytes.
251
+
252
+ ## filesystem
253
+
254
+ Get a `RunFilesystem` client for this attempt. No request is made until you call a method on it.
255
+
256
+ ### Signature
257
+
258
+ ```ts TypeScript signature
259
+ filesystem(trialId: string): RunFilesystem;
260
+ ```
261
+
262
+ ```python Python signature
263
+ def filesystem(trial_id: str) -> 'RunFilesystem': ...
264
+ ```
265
+
266
+ ```ts TypeScript
267
+ const fs = client.filesystem(trialId);
268
+ const status = await fs.status();
269
+ ```
270
+
271
+ ```python Python
272
+ fs = client.filesystem(trial_id)
273
+ status = await fs.status()
274
+ ```
275
+
276
+ See [every filesystem method](/sdk-reference/methods/filesystem), including live files, captured files, sandbox logs, and processes.
277
+
278
+ ## retry
279
+
280
+ Run one settled attempt again in a new linked job. Returns `Job`; the source job may still be running.
281
+
282
+ ### Signature
283
+
284
+ ```ts TypeScript signature
285
+ retry(
286
+ trialId: string,
287
+ options?: StartJobOptions
288
+ ): Promise<Job>;
289
+ ```
290
+
291
+ ```python Python signature
292
+ async def retry(
293
+ trial_id: str,
294
+ *,
295
+ idempotency_key: Optional[str] = None,
296
+ ) -> Job: ...
297
+ ```
298
+
299
+ ```ts TypeScript
300
+ const job = await client.retry(trialId, {
301
+ idempotencyKey: requestId
302
+ });
303
+ ```
304
+
305
+ ```python Python
306
+ job = await client.retry(
307
+ trial_id,
308
+ idempotency_key=request_id,
309
+ )
310
+ ```
311
+
312
+ Optional `idempotencyKey` / `idempotency_key` makes a repeated request return the same accepted job. This is the one-trial form of `jobs().retry`. Imported attempts cannot retry.
313
+
314
+ ## regrade
315
+
316
+ Run only the verifier again against eligible recorded inputs. Returns a new one-trial `Job`.
317
+
318
+ ### Signature
319
+
320
+ ```ts TypeScript signature
321
+ regrade(trialId: string): Promise<Job>;
322
+ ```
323
+
324
+ ```python Python signature
325
+ async def regrade(trial_id: str) -> Job: ...
326
+ ```
327
+
328
+ ```ts TypeScript
329
+ const job = await client.regrade(trialId);
330
+ ```
331
+
332
+ ```python Python
333
+ job = await client.regrade(trial_id)
334
+ ```
335
+
336
+ The attempt must be settled and have retained inputs from separate verification. Shared-mode or pre-persistence trials are refused with `regrade_source_ineligible`; imported jobs are refused.
337
+
338
+ ## stop
339
+
340
+ Stop selected in-flight trials or trace analyses owned by the caller. Returns `StopResponse`.
341
+
342
+ Pass 1–100 non-empty IDs in one call. The list can contain trial IDs, analysis IDs, or both.
343
+
344
+ ### Signature
345
+
346
+ ```ts TypeScript signature
347
+ stop(trialIds: string[]): Promise<StopResponse>;
348
+ ```
349
+
350
+ ```python Python signature
351
+ async def stop(trial_ids: List[str]) -> StopResponse: ...
352
+ ```
353
+
354
+ ```ts TypeScript
355
+ const result = await client.stop([trialId, analysisId]);
356
+ ```
357
+
358
+ ```python Python
359
+ result = await client.stop(
360
+ [trial_id, analysis_id],
361
+ )
362
+ ```
363
+
364
+ | Returned field | Type / meaning |
365
+ | --- | --- |
366
+ | `stopped` | `Trial[]`: attempts settled by this request |
367
+ | `stopped_analyses` | `TrialAnalysis[]`: analyses settled as failed, phase `stopped` |
368
+ | `already_terminal` | `string[]`: untouched settled ids |
369
+ | `not_found` | `string[]`: missing ids or ids owned by someone else |
370
+
371
+ This does not cancel the whole job. Repeating the request is safe: terminal work stays unchanged.
@@ -0,0 +1,104 @@
1
+ ---
2
+ title: "Secrets"
3
+ description: "Store a credential once, then attach it to evaluation jobs by name."
4
+ ---
5
+
6
+ [Method reference: calls, parameters, and response fields](/sdk-reference/methods/secrets).
7
+
8
+ Managed evals attach **direct** secrets: their values enter the task sandbox as environment variables. Stored values are write-only through the secrets API.
9
+
10
+ ## Store a value
11
+
12
+ ```ts TypeScript
13
+ import { managedSecrets } from "@evolvingmachines/evolve";
14
+
15
+ const store = managedSecrets();
16
+ await store.set({
17
+ name: "SERVICE_TOKEN",
18
+ value: process.env.SERVICE_TOKEN!,
19
+ delivery: "direct",
20
+ });
21
+ ```
22
+
23
+ ```python Python
24
+ import os
25
+ from evolve import managed_secrets
26
+
27
+ store = managed_secrets()
28
+ await store.set(
29
+ name="SERVICE_TOKEN",
30
+ value=os.environ["SERVICE_TOKEN"],
31
+ delivery="direct",
32
+ )
33
+ ```
34
+
35
+ Set `SERVICE_TOKEN` in your process environment before running this example. A value may contain at most 190 UTF-8 bytes.
36
+
37
+ ## Attach it to a job
38
+
39
+ Add a `secrets` list to the job creation input:
40
+
41
+ ```ts TypeScript
42
+ const secrets = [{ name: "SERVICE_TOKEN", as: "APP_TOKEN" }];
43
+ // Pass secrets alongside datasets and agents in jobs().start(...).
44
+ ```
45
+
46
+ ```python Python
47
+ secrets = [{"name": "SERVICE_TOKEN", "as": "APP_TOKEN"}]
48
+ # Pass secrets=secrets alongside datasets and agents in jobs().start(...).
49
+ ```
50
+
51
+ | Field | Meaning |
52
+ | --- | --- |
53
+ | `name` | Stored secret name |
54
+ | `label` | Optional labeled version |
55
+ | `as` | Optional environment variable name inside the sandbox; defaults to `name` |
56
+
57
+ Without a label, resolution chooses the `default` row, then the only row if exactly one exists. Multiple remaining labels produce an ambiguity error.
58
+
59
+ ### Inline values
60
+
61
+ Job creation can store and attach a value in one request:
62
+
63
+ ```json
64
+ {
65
+ "secrets": [{
66
+ "name": "SERVICE_TOKEN",
67
+ "value": "your-value",
68
+ "delivery": "direct"
69
+ }]
70
+ }
71
+ ```
72
+
73
+ Optional `label` and `as` work here too. The value is stored as a secret; the job retains a reference. Restating the same identity/value is allowed. A different value under the same name/label is refused instead of silently replacing it.
74
+
75
+ ## Manage stored secrets
76
+
77
+ | Action | TypeScript | Python | Returns |
78
+ | --- | --- | --- | --- |
79
+ | Read metadata | `list()` | `list()` | Secret metadata list |
80
+ | Store a value | `set(input)` | `set(name=..., value=..., delivery=..., ...)` | `created` / `updated` and metadata |
81
+ | Delete a labeled value | `delete({name, label})` | `delete(name=..., label=...)` | Deletion result |
82
+
83
+ `set` requires `name`, `value`, and `delivery`; `label` defaults to `default`. A different value under an existing identity returns `secret_exists`. To rotate, use another label or delete and set that identity.
84
+
85
+ The broader storage API also accepts `delivery: "brokered"`, with required host/path/method scope lists. Managed eval jobs cannot attach those secrets today. Direct delivery refuses those scoping options.
86
+
87
+ | Scoping option | TypeScript | Python |
88
+ | --- | --- | --- |
89
+ | Hosts | `allowedHosts` | `allowed_hosts` |
90
+ | Path prefixes | `allowedPathPrefixes` | `allowed_path_prefixes` |
91
+ | HTTP methods | `allowedMethods` | `allowed_methods` |
92
+
93
+ ## Configuration and errors
94
+
95
+ This factory uses its own configuration:
96
+
97
+ | Setting | TypeScript | Python |
98
+ | --- | --- | --- |
99
+ | API key | `apiKey` | `api_key` |
100
+ | Dashboard origin | `dashboardUrl` | `dashboard_url` |
101
+
102
+ Python wraps those fields in `ManagedSecretsClientConfig`. Defaults come from `EVOLVE_API_KEY` and `EVOLVE_DASHBOARD_URL` as usual.
103
+
104
+ Secret-client HTTP failures raise plain `Error` in TypeScript and `RuntimeError` in Python. They are not the hosted `EvolveApiError` / `EvolveAPIError` class.
@@ -0,0 +1,66 @@
1
+ ---
2
+ title: "Uploaded skills"
3
+ description: "Store skill folders and attach them to evaluation agents."
4
+ ---
5
+
6
+ [Method reference: calls, parameters, and response fields](/sdk-reference/methods/skills).
7
+
8
+ `skills()` manages content mounted into an agent run. It is separate from `evolve skills`, which serves documentation to coding agents.
9
+
10
+ ## Upload and attach
11
+
12
+ ```text
13
+ my-skill/
14
+ ├── SKILL.md
15
+ ├── scripts/
16
+ └── references/
17
+ ```
18
+
19
+ ```ts TypeScript
20
+ import { skills, jobs } from "@evolvingmachines/evolve";
21
+
22
+ const [skill] = await skills().upload("./my-skill");
23
+ const job = await jobs().start({
24
+ datasets: [{ name: "harbor-examples", version: "1.0", task_names: ["hello-world"] }],
25
+ agents: [{ name: "codex", model_name: "gpt-5.6-luna", skills: [skill.ref] }],
26
+ max_trial_spend_usd: 0.50,
27
+ retry: { max_retries: 0 },
28
+ });
29
+ ```
30
+
31
+ ```python Python
32
+ from evolve import skills, jobs
33
+
34
+ uploaded = await skills().upload("./my-skill")
35
+ skill = uploaded[0]
36
+ job = await jobs().start(
37
+ datasets=[{"name": "harbor-examples", "version": "1.0", "task_names": ["hello-world"]}],
38
+ agents=[{"name": "codex", "model_name": "gpt-5.6-luna", "skills": [skill.ref]}],
39
+ max_trial_spend_usd=0.50,
40
+ retry={"max_retries": 0},
41
+ )
42
+ ```
43
+
44
+ Upload returns a list. A folder containing multiple child skill folders can create multiple records.
45
+
46
+ ## Pick a reference
47
+
48
+ | Reference | Meaning |
49
+ | --- | --- |
50
+ | `upload:<id>` | This immutable uploaded content |
51
+ | `name:<skill-name>` | The name's current uploaded version, resolved when the job is created |
52
+
53
+ Uploading identical content under the same name reuses the record. New content creates a new record and moves the name reference. Existing jobs keep their recorded skill locks.
54
+
55
+ ## Methods
56
+
57
+ | Action | TypeScript | Python | Returns |
58
+ | --- | --- | --- | --- |
59
+ | Upload a directory | `upload(directory, {org})` | `upload(directory, org=...)` | Skill list |
60
+ | List uploads | `list({scope, limit, cursor})` | `list(scope=..., limit=..., cursor=...)` | Paginated handle |
61
+ | Read content/metadata | `get(idOrNameRef)` | `get(id_or_name_ref)` | Skill metadata and `skill_md` |
62
+ | Delete an upload | `delete(id)` | `delete(id)` | No content |
63
+
64
+ `org` overrides the client default. List scopes are `my`, `shared`, and `org`. Team members can reference visible skills; only their owner can delete them. A skill used by a non-terminal job cannot be deleted.
65
+
66
+ The metadata includes `id`, `name`, `org`, `digest`, `size_bytes`, `description`, `ref`, and `created_at`. See [skill concepts](/core-concepts/skills) for git-backed references and mounting behavior.
@@ -0,0 +1,164 @@
1
+ ---
2
+ title: "Trials"
3
+ description: "Inspect one attempt, from its reward to its trace and files."
4
+ ---
5
+
6
+ **Note:**
7
+
8
+ For every method’s inputs, return values, and language differences, see the [trials method reference](/sdk-reference/methods/trials).
9
+
10
+ A trial is one task, one agent/model arm, and one attempt. Get its id from `jobs.trials(jobId)`; its record includes the parent `job_id`.
11
+
12
+ ## Read the result
13
+
14
+ ```ts TypeScript
15
+ import { trials } from "@evolvingmachines/evolve";
16
+
17
+ const client = trials();
18
+ const trial = await client.get(trialId);
19
+ console.log(trial.status, trial.reward, trial.exception_info);
20
+ ```
21
+
22
+ ```python Python
23
+ from evolve import trials
24
+
25
+ client = trials()
26
+ trial = await client.get(trial_id)
27
+ print(trial.status, trial.reward, trial.exception_info)
28
+ ```
29
+
30
+ | Read | What it tells you |
31
+ | --- | --- |
32
+ | `status`, `attempt_phase` | Whether it is waiting, running, scoring, or settled; the current execution phase |
33
+ | `reward`, `verifier_result` | Primary reward and the verifier's full rewards map |
34
+ | `exception_info` | Why a trial ended with an exception |
35
+ | `agent_info` | Harness, version, model, and effort |
36
+ | `usage`, `spend_source` | Metered usage and whether the reading is final |
37
+ | `analysis` | Latest trace-analysis result, when present |
38
+ | `sandbox_provider`, `sandbox_id` | Where it actually ran |
39
+ | `n_retries`, `retries` | Automatic retry history |
40
+
41
+ A reward of `0` is a scored result. A missing reward is not automatically zero. See [statuses and nullable values](/sdk-reference/types).
42
+
43
+ ## Read the trace
44
+
45
+ ```ts TypeScript
46
+ for await (const event of client.traceEvents(trialId)) {
47
+ console.log(event.seq, event.type, event.data);
48
+ }
49
+ ```
50
+
51
+ ```python Python
52
+ async for event in client.trace_events(trial_id):
53
+ print(event.seq, event.type, event.data)
54
+ ```
55
+
56
+ This drains stored events. It does not remain connected waiting for future events.
57
+
58
+ | Method | Returns |
59
+ | --- | --- |
60
+ | `trace(id, options)` | One page of `TraceEvent` records |
61
+ | `traceEvents(id, options)` / `trace_events(id, ...)` | Async iterator over matching stored events |
62
+
63
+ Both accept `cursor`, `limit`, `type`, `grep`, and `tail`. TypeScript uses one options object; Python uses keywords. `grep` is a case-insensitive POSIX regex over event type and content. `tail` selects the newest matching events; the server caps it at 10,000.
64
+
65
+ ### Read per-call model usage
66
+
67
+ Use `gatewayUsageOf` / `gateway_usage_of` to find the gateway's token and cost readings. Other events, including the harness's own usage reports, return null / `None`.
68
+
69
+ ```ts TypeScript
70
+ import { gatewayUsageOf, trials } from "@evolvingmachines/evolve";
71
+
72
+ for await (const event of trials().traceEvents(trialId)) {
73
+ const call = gatewayUsageOf(event);
74
+ if (call) console.log(call.callId, call.usage.costUsd);
75
+ }
76
+ ```
77
+
78
+ ```python Python
79
+ from evolve import gateway_usage_of, trials
80
+
81
+ async for event in trials().trace_events(trial_id):
82
+ call = gateway_usage_of(event)
83
+ if call is not None:
84
+ print(call["callId"], call["usage"]["costUsd"])
85
+ ```
86
+
87
+ | Field | Meaning |
88
+ | --- | --- |
89
+ | `promptTokens` | Input tokens, including cached and cache-written tokens |
90
+ | `completionTokens` | Output tokens |
91
+ | `cachedTokens` | Cached portion of input tokens |
92
+ | `costUsd` | Cost recorded by the gateway |
93
+
94
+ These fields live under `call.usage` / `call["usage"]`. Do not add the harness's usage to these readings: they describe the same run from different sources. Use the trial's `usage` for its aggregate reading.
95
+
96
+ ## Read stored artifacts
97
+
98
+ ```ts TypeScript
99
+ const atif = await client.artifact(trialId, "trace-atif");
100
+ const verifier = await client.artifact(trialId, "verifier");
101
+ const home = await client.artifact(trialId, "agent-home");
102
+ ```
103
+
104
+ ```python Python
105
+ atif = await client.artifact(trial_id, "trace-atif")
106
+ verifier = await client.artifact(trial_id, "verifier")
107
+ home = await client.artifact(trial_id, "agent-home")
108
+ ```
109
+
110
+ | Stream | Result |
111
+ | --- | --- |
112
+ | `trace-atif` | Normalized ATIF trajectory as JSON text |
113
+ | `trace-stdout` | Harness stdout |
114
+ | `trace-stderr` | Harness stderr |
115
+ | `verifier` | Verifier output |
116
+ | `agent-home` | Map of captured sandbox paths to text |
117
+ | `trajectory` | Reserved native-session selector; availability is not guaranteed |
118
+
119
+ Missing stored content returns null / `None`. `trace-parsed` belongs to `trace`; `filesystem` belongs to the [filesystem client](/sdk-reference/filesystem).
120
+
121
+ ## Read individual files
122
+
123
+ ```text
124
+ Stored trial result tree
125
+ ├── config.json
126
+ ├── result.json
127
+ ├── agent/
128
+ │ ├── trajectory.json
129
+ │ └── … harness output
130
+ ├── verifier/
131
+ │ └── … verifier output
132
+ └── artifacts/
133
+ └── … collected files
134
+ ```
135
+
136
+ The actual files depend on what was produced and retained. Use `files()` to discover them.
137
+
138
+ ```ts TypeScript
139
+ const page = await client.files(trialId, { limit: 200 });
140
+ const bytes = await client.file(trialId, "result.json");
141
+ const prefix = await client.file(trialId, "result.json", { start: 0, end: 1023 });
142
+ ```
143
+
144
+ ```python Python
145
+ page = await client.files(trial_id, limit=200)
146
+ content = await client.file(trial_id, "result.json")
147
+ prefix = await client.file(trial_id, "result.json", start=0, end=1023)
148
+ ```
149
+
150
+ `files` accepts `limit` and `cursor`. `file` returns `Buffer` / `bytes`; byte ranges accept `start`, inclusive `end`, or `suffix` for the last N bytes. A suffix takes precedence.
151
+
152
+ These are stored result files. To browse sandbox paths, use `client.filesystem(trialId)` and the [filesystem methods](/sdk-reference/filesystem).
153
+
154
+ ## Stop, retry, or regrade
155
+
156
+ | Action | TypeScript | Python | Returns |
157
+ | --- | --- | --- | --- |
158
+ | Stop selected runs | `stop([trialId])` | `stop([trial_id])` | Batch result |
159
+ | Run the attempt again | `retry(trialId, { idempotencyKey })` | `retry(trial_id, idempotency_key=...)` | New linked job |
160
+ | Re-run its eligible verifier | `regrade(trialId)` | `regrade(trial_id)` | New linked job |
161
+
162
+ `stop` accepts up to 100 trial or analysis ids. Its response separates `stopped`, `stopped_analyses`, `already_terminal`, and `not_found`. Check each group; one missing id does not erase the rest of the result.
163
+
164
+ Retry requires a settled trial. Regrade requires retained inputs from an eligible separate verifier. [Job operations](/sdk-reference/jobs#cancel-or-run-selected-work-again) describe the differences.