@evolvingmachines/evolve 0.0.65 → 0.0.66

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 (152) hide show
  1. package/dist/{chunk-DK2MGUPB.js → chunk-RFLMRPGK.js} +5 -5
  2. package/dist/cli/index.cjs +39 -39
  3. package/dist/cli/index.d.cts +3 -3
  4. package/dist/cli/index.d.ts +3 -3
  5. package/dist/cli/index.js +30 -30
  6. package/dist/index.cjs +1 -1
  7. package/dist/index.d.cts +4 -4
  8. package/dist/index.d.ts +4 -4
  9. package/dist/index.js +1 -1
  10. package/dist/{types-B_qmzlMk.d.cts → types-84M4J_Vm.d.cts} +11 -44
  11. package/dist/{types-B_qmzlMk.d.ts → types-84M4J_Vm.d.ts} +11 -44
  12. package/package.json +4 -4
  13. package/skills/create-adapter/SKILL.md +71 -26
  14. package/skills/create-task/SKILL.md +124 -66
  15. package/skills/evolve/SKILL.md +37 -20
  16. package/skills/evolve-evals/SKILL.md +142 -69
  17. package/skills/evolve-evals/references/cli-reference/agent.md +76 -0
  18. package/skills/evolve-evals/references/cli-reference/analysis.md +78 -0
  19. package/skills/evolve-evals/references/cli-reference/analyze.md +95 -0
  20. package/skills/evolve-evals/references/cli-reference/auth.md +96 -0
  21. package/skills/evolve-evals/references/cli-reference/check.md +156 -0
  22. package/skills/evolve-evals/references/cli-reference/dataset.md +154 -0
  23. package/skills/evolve-evals/references/cli-reference/filesystem.md +168 -0
  24. package/skills/evolve-evals/references/cli-reference/index.md +149 -0
  25. package/skills/evolve-evals/references/cli-reference/job.md +198 -0
  26. package/skills/evolve-evals/references/cli-reference/run.md +187 -0
  27. package/skills/evolve-evals/references/cli-reference/secrets.md +77 -0
  28. package/skills/evolve-evals/references/cli-reference/session.md +56 -0
  29. package/skills/evolve-evals/references/cli-reference/skill.md +52 -0
  30. package/skills/evolve-evals/references/cli-reference/skills.md +85 -0
  31. package/skills/evolve-evals/references/cli-reference/trial.md +115 -0
  32. package/skills/evolve-evals/references/cli-reference/upload.md +72 -0
  33. package/skills/evolve-evals/references/core-concepts/agents.md +96 -0
  34. package/skills/evolve-evals/references/core-concepts/analyze.md +143 -0
  35. package/skills/evolve-evals/references/core-concepts/check.md +116 -0
  36. package/skills/evolve-evals/references/core-concepts/compatibility.md +39 -0
  37. package/skills/evolve-evals/references/core-concepts/compose.md +103 -0
  38. package/skills/evolve-evals/references/core-concepts/datasets.md +234 -0
  39. package/skills/evolve-evals/references/core-concepts/index.md +52 -0
  40. package/skills/evolve-evals/references/core-concepts/jobs.md +223 -0
  41. package/skills/evolve-evals/references/core-concepts/models.md +73 -0
  42. package/skills/evolve-evals/references/core-concepts/multi-step.md +93 -0
  43. package/skills/evolve-evals/references/core-concepts/rewardkit.md +341 -0
  44. package/skills/evolve-evals/references/core-concepts/sandboxes.md +73 -0
  45. package/skills/evolve-evals/references/core-concepts/secrets.md +86 -0
  46. package/skills/evolve-evals/references/core-concepts/sharing.md +81 -0
  47. package/skills/evolve-evals/references/core-concepts/skills.md +100 -0
  48. package/skills/evolve-evals/references/core-concepts/task-config.md +169 -0
  49. package/skills/evolve-evals/references/core-concepts/task-environment.md +127 -0
  50. package/skills/evolve-evals/references/core-concepts/task-reference.md +191 -0
  51. package/skills/evolve-evals/references/core-concepts/task-verifiers.md +209 -0
  52. package/skills/evolve-evals/references/core-concepts/tasks.md +90 -0
  53. package/skills/evolve-evals/references/core-concepts/teams.md +128 -0
  54. package/skills/evolve-evals/references/core-concepts/trial-outputs.md +225 -0
  55. package/skills/evolve-evals/references/core-concepts/trials.md +129 -0
  56. package/skills/evolve-evals/references/core-concepts/upload-sdk-session.md +240 -0
  57. package/skills/evolve-evals/references/core-concepts/upload.md +166 -0
  58. package/skills/evolve-evals/references/dashboard/checks.md +54 -0
  59. package/skills/evolve-evals/references/dashboard/datasets.md +65 -0
  60. package/skills/evolve-evals/references/dashboard/jobs.md +106 -0
  61. package/skills/evolve-evals/references/dashboard/traces.md +54 -0
  62. package/skills/evolve-evals/references/dashboard/trial-viewer.md +77 -0
  63. package/skills/evolve-evals/references/getting-started/first-task.md +228 -0
  64. package/skills/evolve-evals/references/getting-started/installation.md +79 -0
  65. package/skills/evolve-evals/references/getting-started/quick-start.md +100 -0
  66. package/skills/evolve-evals/references/index.md +58 -0
  67. package/skills/evolve-evals/references/sdk/http.md +110 -0
  68. package/skills/evolve-evals/references/sdk/python.md +108 -0
  69. package/skills/evolve-evals/references/sdk/typescript.md +104 -0
  70. package/skills/evolve-evals/references/sdk-reference/agents.md +75 -0
  71. package/skills/evolve-evals/references/sdk-reference/analyses.md +124 -0
  72. package/skills/evolve-evals/references/sdk-reference/auth.md +171 -0
  73. package/skills/evolve-evals/references/sdk-reference/checks.md +145 -0
  74. package/skills/evolve-evals/references/sdk-reference/datasets.md +170 -0
  75. package/skills/evolve-evals/references/sdk-reference/error-codes.md +231 -0
  76. package/skills/evolve-evals/references/sdk-reference/errors.md +98 -0
  77. package/skills/evolve-evals/references/sdk-reference/filesystem.md +166 -0
  78. package/skills/evolve-evals/references/sdk-reference/index.md +161 -0
  79. package/skills/evolve-evals/references/sdk-reference/jobs.md +250 -0
  80. package/skills/evolve-evals/references/sdk-reference/meta.md +54 -0
  81. package/skills/evolve-evals/references/sdk-reference/methods/agents.md +154 -0
  82. package/skills/evolve-evals/references/sdk-reference/methods/analyses.md +211 -0
  83. package/skills/evolve-evals/references/sdk-reference/methods/auth.md +257 -0
  84. package/skills/evolve-evals/references/sdk-reference/methods/checks.md +460 -0
  85. package/skills/evolve-evals/references/sdk-reference/methods/datasets.md +687 -0
  86. package/skills/evolve-evals/references/sdk-reference/methods/filesystem.md +527 -0
  87. package/skills/evolve-evals/references/sdk-reference/methods/jobs.md +1021 -0
  88. package/skills/evolve-evals/references/sdk-reference/methods/meta.md +209 -0
  89. package/skills/evolve-evals/references/sdk-reference/methods/secrets.md +157 -0
  90. package/skills/evolve-evals/references/sdk-reference/methods/skills.md +125 -0
  91. package/skills/evolve-evals/references/sdk-reference/methods/trials.md +371 -0
  92. package/skills/evolve-evals/references/sdk-reference/secrets.md +104 -0
  93. package/skills/evolve-evals/references/sdk-reference/skills.md +66 -0
  94. package/skills/evolve-evals/references/sdk-reference/trials.md +164 -0
  95. package/skills/evolve-evals/references/sdk-reference/types.md +1249 -0
  96. package/skills/publish/SKILL.md +103 -79
  97. package/skills/rewardkit/SKILL.md +78 -23
  98. package/spec/openapi.yaml +19 -74
  99. package/skills/evolve-evals/references/cli-reference/agent.mdx +0 -79
  100. package/skills/evolve-evals/references/cli-reference/analysis.mdx +0 -160
  101. package/skills/evolve-evals/references/cli-reference/analyze.mdx +0 -84
  102. package/skills/evolve-evals/references/cli-reference/auth.mdx +0 -133
  103. package/skills/evolve-evals/references/cli-reference/check.mdx +0 -263
  104. package/skills/evolve-evals/references/cli-reference/dataset.mdx +0 -151
  105. package/skills/evolve-evals/references/cli-reference/index.mdx +0 -108
  106. package/skills/evolve-evals/references/cli-reference/job.mdx +0 -278
  107. package/skills/evolve-evals/references/cli-reference/run.mdx +0 -204
  108. package/skills/evolve-evals/references/cli-reference/secrets.mdx +0 -95
  109. package/skills/evolve-evals/references/cli-reference/skill.mdx +0 -61
  110. package/skills/evolve-evals/references/cli-reference/skills.mdx +0 -81
  111. package/skills/evolve-evals/references/cli-reference/trial.mdx +0 -181
  112. package/skills/evolve-evals/references/cli-reference/upload.mdx +0 -36
  113. package/skills/evolve-evals/references/core-concepts/agents.mdx +0 -106
  114. package/skills/evolve-evals/references/core-concepts/analyze.mdx +0 -86
  115. package/skills/evolve-evals/references/core-concepts/check.mdx +0 -64
  116. package/skills/evolve-evals/references/core-concepts/datasets.mdx +0 -138
  117. package/skills/evolve-evals/references/core-concepts/index.mdx +0 -42
  118. package/skills/evolve-evals/references/core-concepts/jobs.mdx +0 -151
  119. package/skills/evolve-evals/references/core-concepts/models.mdx +0 -68
  120. package/skills/evolve-evals/references/core-concepts/sandboxes.mdx +0 -52
  121. package/skills/evolve-evals/references/core-concepts/secrets.mdx +0 -41
  122. package/skills/evolve-evals/references/core-concepts/sharing.mdx +0 -35
  123. package/skills/evolve-evals/references/core-concepts/skills.mdx +0 -42
  124. package/skills/evolve-evals/references/core-concepts/tasks.mdx +0 -216
  125. package/skills/evolve-evals/references/core-concepts/teams.mdx +0 -36
  126. package/skills/evolve-evals/references/core-concepts/trial-outputs.mdx +0 -117
  127. package/skills/evolve-evals/references/core-concepts/trials.mdx +0 -103
  128. package/skills/evolve-evals/references/core-concepts/upload.mdx +0 -93
  129. package/skills/evolve-evals/references/dashboard/checks.mdx +0 -21
  130. package/skills/evolve-evals/references/dashboard/datasets.mdx +0 -24
  131. package/skills/evolve-evals/references/dashboard/jobs.mdx +0 -65
  132. package/skills/evolve-evals/references/dashboard/traces.mdx +0 -17
  133. package/skills/evolve-evals/references/dashboard/trial-viewer.mdx +0 -30
  134. package/skills/evolve-evals/references/getting-started/installation.mdx +0 -56
  135. package/skills/evolve-evals/references/getting-started/quick-start.mdx +0 -94
  136. package/skills/evolve-evals/references/index.mdx +0 -48
  137. package/skills/evolve-evals/references/sdk/python.mdx +0 -161
  138. package/skills/evolve-evals/references/sdk/typescript.mdx +0 -163
  139. package/skills/evolve-evals/references/sdk-reference/agents.mdx +0 -108
  140. package/skills/evolve-evals/references/sdk-reference/analyses.mdx +0 -222
  141. package/skills/evolve-evals/references/sdk-reference/auth.mdx +0 -116
  142. package/skills/evolve-evals/references/sdk-reference/checks.mdx +0 -300
  143. package/skills/evolve-evals/references/sdk-reference/datasets.mdx +0 -346
  144. package/skills/evolve-evals/references/sdk-reference/errors.mdx +0 -210
  145. package/skills/evolve-evals/references/sdk-reference/index.mdx +0 -60
  146. package/skills/evolve-evals/references/sdk-reference/jobs.mdx +0 -822
  147. package/skills/evolve-evals/references/sdk-reference/meta.mdx +0 -52
  148. package/skills/evolve-evals/references/sdk-reference/skills.mdx +0 -69
  149. package/skills/evolve-evals/references/sdk-reference/trials.mdx +0 -302
  150. package/skills/evolve-evals/references/sdk-reference/types.mdx +0 -274
  151. package/skills/evolve-evals/references/snippets/global-options.mdx +0 -13
  152. package/skills/evolve-evals/references/snippets/list-flags.mdx +0 -23
@@ -1,52 +0,0 @@
1
- ---
2
- title: "meta"
3
- description: "The platform's capability document, no key needed."
4
- ---
5
-
6
- `meta()` fetches the capability document, `GET /api/meta`: everything a client would otherwise hardcode. It needs no API key.
7
-
8
- - `agents`: every built-in, with `runnable` and `reason`, `default_model` and `models` (the picker's list; a job still requires an explicit model), `effort_support` (`level`, `binary` or `none`) and `default_effort`, `version_pinnable` and `latest_version` (null means not known right now), `supports_config` and `presets`.
9
- - `agent_registration`: the rules a registration must satisfy: `name_pattern`, the length and size caps, `max_per_user`, `reserved_names`, `reserved_env_keys`.
10
- - `sandbox_providers`: each provider's `sizing` ceilings, its `gpus` block, and its `refuses` list; `platform_constraints` beside it holds what no provider runs. `gpu_concurrency_cap` is the fleet's cap on GPU trials in flight.
11
- - `managed_providers`: the managed sandbox doors this deployment serves, a managed-agents fact.
12
- - `network_modes`: the three modes a task may declare.
13
- - `statuses`: the `job`, `trial`, `import` and `dataset_version` vocabularies, each with its `terminal` members.
14
- - `analyze`: the analyzer's `default_model`, its `reasoning_efforts`, and each roster model's `default_reasoning_effort`.
15
- - `limits`: `job` (`n_concurrent_trials` default and max, `default_max_trial_spend_usd`, `default_max_retries`, `default_sandbox_provider`, `default_sizing`, `model_required`, `default_agent_timeout_sec`, `default_verifier_timeout_sec`, `default_timeout_multiplier`, the effort vocabulary), `compare` (`min_ids`, `max_ids`), `pagination` (a default and max per collection kind), `uploads` (the one physical ceiling per archive kind with `archive_bytes_source`, the agent tarball and skill caps), `dataset_names`, and `max_items_named_in_error_message`, which is why `details` exists.
16
- - `error_codes` and `import_warning_codes`: the closed lists.
17
-
18
- `schema_version` moves when a field changes meaning, never when a value changes. The response carries an `ETag` and `Cache-Control: public, max-age=300, stale-while-revalidate=300`; send the ETag back as `If-None-Match` and an unchanged document answers 304.
19
-
20
- <Tabs>
21
- <Tab title="TypeScript">
22
- ```ts
23
- import { meta } from "@evolvingmachines/evolve";
24
-
25
- function meta(config?: HostedClientConfig): Promise<CapabilityDocument>
26
- ```
27
-
28
- Also `hosted().meta()`.
29
-
30
- ```ts
31
- const doc = await meta();
32
- for (const agent of doc.agents) console.log(agent.name, agent.models.map((m) => m.alias));
33
- ```
34
- </Tab>
35
- <Tab title="Python">
36
- ```python
37
- from evolve import meta
38
-
39
- async def meta(config: Optional[HostedClientConfig] = None) -> CapabilityDocument
40
- ```
41
-
42
- Also `await hosted().meta()`.
43
-
44
- ```python
45
- doc = await meta()
46
- for agent in doc.agents: print(
47
- agent.name,
48
- [m.alias for m in agent.models],
49
- )
50
- ```
51
- </Tab>
52
- </Tabs>
@@ -1,69 +0,0 @@
1
- ---
2
- title: "skills"
3
- description: "Upload and manage platform-stored skills."
4
- ---
5
-
6
- `skills()` returns the skills client. An uploaded skill is referenced from a job as `upload:<id>` or `name:<skill-name>`.
7
-
8
- ## upload
9
-
10
- <Tabs>
11
- <Tab title="TypeScript">
12
- ```ts
13
- upload(directory: string, options?: { org?: string }): Promise<SkillUpload[]>
14
- ```
15
-
16
- Upload a skill folder. Its name becomes your moving name pointer. The record belongs to you and to an organization (`org`, a slug or id; omitted, the client's `org` default, else your personal one): its members may reference it from their own jobs, and only you can delete it.
17
-
18
- ```ts
19
- const [skill] = await skills().upload("./my-skill", { org: "acme" });
20
- ```
21
- </Tab>
22
- <Tab title="Python">
23
- ```python
24
- async def upload(directory: str, *, org: Optional[str] = None) -> List[SkillUpload]
25
- ```
26
-
27
- Upload a skill folder. Its name becomes your moving name pointer. The record belongs to you and to an organization (`org`, a slug or id; omitted, the client's `org` default, else your personal one): its members may reference it from their own jobs, and only you can delete it.
28
-
29
- ```python
30
- [skill] = await skills().upload("./my-skill", org="acme")
31
- ```
32
- </Tab>
33
- </Tabs>
34
-
35
- ## list, get, delete
36
-
37
- <Tabs>
38
- <Tab title="TypeScript">
39
- ```ts
40
- list(options?: { scope?: "my" | "shared" | "org"; limit?: number; cursor?: string }): SkillUploadList
41
- get(id: string): Promise<SkillUpload & { skill_md: string | null }>
42
- delete(id: string): Promise<void>
43
- ```
44
-
45
- Uploads, one upload with its `SKILL.md`, or delete one. `scope` is the lists' own vocabulary: `"my"` (yours, the default), `"shared"` (your organizations' other members') or `"org"` (everything in your organizations, yours included). A skill a running job references cannot be deleted, and deleting stays with the owner.
46
-
47
- ```ts
48
- const one = await skills().get(skill.id);
49
- ```
50
- </Tab>
51
- <Tab title="Python">
52
- ```python
53
- def list(
54
- *,
55
- scope: Optional[Literal['my', 'shared', 'org']] = None,
56
- limit: Optional[int] = None,
57
- cursor: Optional[str] = None,
58
- )
59
- async def get(skill_id: str) -> SkillUpload
60
- async def delete(skill_id: str) -> None
61
- ```
62
-
63
- Your uploads, one upload, or delete one. A skill a running job references cannot be deleted.
64
-
65
- ```python
66
- one = await skills().get(skill.id)
67
- ```
68
- </Tab>
69
- </Tabs>
@@ -1,302 +0,0 @@
1
- ---
2
- title: "trials"
3
- description: "Read, download, and act on single trials."
4
- ---
5
-
6
- `trials()` returns the trials client. A trial id is global: no method needs the job id.
7
-
8
- ## get
9
-
10
- <Tabs>
11
- <Tab title="TypeScript">
12
- ```ts
13
- get(trialId: string): Promise<Trial>
14
- ```
15
-
16
- One trial in full. Its `job_id` points back to the job.
17
-
18
- ```ts
19
- const trial = await trials().get("d1a10c4e-…");
20
- ```
21
- </Tab>
22
- <Tab title="Python">
23
- ```python
24
- async def get(trial_id: str) -> Trial
25
- ```
26
-
27
- One trial in full. Its `job_id` points back to the job.
28
-
29
- ```python
30
- trial = await trials().get("d1a10c4e-…")
31
- ```
32
- </Tab>
33
- </Tabs>
34
-
35
- ## trace, traceEvents
36
-
37
- <Tabs>
38
- <Tab title="TypeScript">
39
- ```ts
40
- trace(
41
- trialId: string,
42
- options?: { cursor?: string; limit?: number; type?: string; grep?: string; tail?: number },
43
- ): Promise<TraceEventPage>
44
- traceEvents(
45
- trialId: string,
46
- options?: TraceOptions,
47
- ): AsyncIterableIterator<TraceEvent>
48
- ```
49
-
50
- One page of the parsed trace, or every available event; `traceEvents` drains what is stored and stops. `type` (an exact type), `grep` (a case-insensitive regex over type and content, a plain string being a substring) and `tail` (the last N matches, 1 to 10000) filter on the server and compose with the cursor.
51
-
52
- A cursor is a `seq`: to resume later, pass the last event's `seq` as a string. `limit` defaults to 200, at most 1000, and event 0 is the instruction.
53
-
54
- ```ts
55
- for await (const event of trials().traceEvents(
56
- trial.id,
57
- { grep: "permission denied" },
58
- )) {
59
- console.log(event.seq, event.type);
60
- }
61
- ```
62
- </Tab>
63
- <Tab title="Python">
64
- ```python
65
- async def trace(
66
- trial_id: str,
67
- *,
68
- cursor=None,
69
- limit=None,
70
- type=None,
71
- grep=None,
72
- tail=None,
73
- ) -> TraceEventPage
74
- async def trace_events(
75
- trial_id: str,
76
- *,
77
- cursor=None,
78
- limit=None,
79
- type=None,
80
- grep=None,
81
- tail=None,
82
- )
83
- ```
84
-
85
- One page of the parsed trace, or every available event; `trace_events` drains what is stored and stops. `type` (an exact type), `grep` (a case-insensitive regex over type and content, a plain string being a substring) and `tail` (the last N matches, 1 to 10000) filter on the server and compose with the cursor.
86
-
87
- A cursor is a `seq`: to resume later, pass the last event's `seq` as a string. `limit` defaults to 200, at most 1000, and event 0 is the instruction.
88
-
89
- ```python
90
- async for event in trials().trace_events(
91
- trial.id,
92
- grep="permission denied",
93
- ):
94
- print(event.seq, event.type)
95
- ```
96
- </Tab>
97
- </Tabs>
98
-
99
- ## artifact
100
-
101
- <Tabs>
102
- <Tab title="TypeScript">
103
- ```ts
104
- artifact(
105
- trialId: string,
106
- stream: "verifier" | "trace-stdout" | "trace-stderr" | "trace-atif" | "trajectory",
107
- ): Promise<string | null>
108
- artifact(
109
- trialId: string,
110
- stream: "agent-home",
111
- ): Promise<Record<string, string> | null>
112
- ```
113
-
114
- One raw artifact, the same names `evolve trial download --stream` takes. Null means the trial never stored it.
115
-
116
- ```ts
117
- const log = await trials().artifact(trial.id, "verifier");
118
- ```
119
- </Tab>
120
- <Tab title="Python">
121
- ```python
122
- async def artifact(
123
- trial_id: str,
124
- stream: Literal['trace-parsed', 'verifier', 'trace-stdout', 'trace-stderr', 'trace-atif', 'trajectory', 'agent-home'],
125
- ) -> Optional[Union[str, Dict[str, str]]]
126
- ```
127
-
128
- One raw artifact, the same names `evolve trial download --stream` takes. None means the trial never stored it. `trace-parsed` is refused here; use `trace()`.
129
-
130
- ```python
131
- log = await trials().artifact(trial.id, "verifier")
132
- ```
133
- </Tab>
134
- </Tabs>
135
-
136
- ## files, file
137
-
138
- <Tabs>
139
- <Tab title="TypeScript">
140
- ```ts
141
- files(
142
- trialId: string,
143
- options?: { limit?: number; cursor?: string },
144
- ): Promise<TrialFilePage>
145
- file(
146
- trialId: string,
147
- path: string,
148
- range?: { start?: number; end?: number; suffix?: number },
149
- ): Promise<Buffer>
150
- ```
151
-
152
- Every file the platform stored for the trial, as `{ path, size_bytes }` rows sorted by path (`limit` default 200, at most 1000), and the raw bytes of one of them. A range reads a slice; `suffix` reads the last N bytes. A very large file must be read by range. There is no CLI verb for either.
153
-
154
- ```ts
155
- const tail = await trials().file(
156
- trial.id,
157
- "verifier/test-stdout.txt",
158
- { suffix: 4096 },
159
- );
160
- ```
161
- </Tab>
162
- <Tab title="Python">
163
- ```python
164
- async def files(
165
- trial_id: str,
166
- *,
167
- cursor: Optional[str] = None,
168
- limit: Optional[int] = None,
169
- ) -> TrialFilePage
170
- async def file(
171
- trial_id: str,
172
- path: str,
173
- *,
174
- start: Optional[int] = None,
175
- end: Optional[int] = None,
176
- suffix: Optional[int] = None,
177
- ) -> bytes
178
- ```
179
-
180
- Every file the platform stored for the trial, as `path` and `size_bytes` rows sorted by path (`limit` default 200, at most 1000), and the raw bytes of one of them. A range reads a slice; `suffix` reads the last N bytes. A very large file must be read by range. There is no CLI verb for either.
181
-
182
- ```python
183
- tail = await trials().file(
184
- trial.id,
185
- "verifier/test-stdout.txt",
186
- suffix=4096,
187
- )
188
- ```
189
- </Tab>
190
- </Tabs>
191
-
192
- ## regrade, retry, stop
193
-
194
- <Tabs>
195
- <Tab title="TypeScript">
196
- ```ts
197
- regrade(trialId: string): Promise<Job>
198
- retry(
199
- trialId: string,
200
- options?: StartJobOptions,
201
- ): Promise<Job>
202
- stop(trialIds: string[]): Promise<StopResponse>
203
- ```
204
-
205
- Re-run only the verifier, run the trial again, or stop in-flight trials. A regrade and a retry each return a new one-trial job; `regrade` is refused with `regrade_source_ineligible` for a shared-mode trial, `retry` with `trial_not_settled` for a live one.
206
-
207
- `stop` takes at most 100 ids, trials and analyses mixed, and reports each in exactly one of `stopped`, `stopped_analyses`, `already_terminal` or `not_found`. Stopped trials rejoin the run on a `resume` of their job.
208
-
209
- ```ts
210
- const again = await trials().retry(trial.id);
211
- ```
212
- </Tab>
213
- <Tab title="Python">
214
- ```python
215
- async def regrade(trial_id: str) -> Job
216
- async def retry(
217
- trial_id: str,
218
- *,
219
- idempotency_key: Optional[str] = None,
220
- ) -> Job
221
- async def stop(trial_ids: List[str]) -> StopResponse
222
- ```
223
-
224
- Re-run only the verifier, run the trial again, or stop in-flight trials. A regrade and a retry each return a new one-trial job; `regrade` is refused with `regrade_source_ineligible` for a shared-mode trial, `retry` with `trial_not_settled` for a live one.
225
-
226
- `stop` takes at most 100 ids, trials and analyses mixed, and reports each in exactly one of `stopped`, `stopped_analyses`, `already_terminal` or `not_found`. Stopped trials rejoin the run on a `resume` of their job.
227
-
228
- ```python
229
- again = await trials().retry(trial.id)
230
- ```
231
- </Tab>
232
- </Tabs>
233
-
234
- ## filesystem(trialId: string)
235
-
236
- <Tabs>
237
- <Tab title="TypeScript">
238
- ```ts
239
- filesystem(trialId: string): RunFilesystem
240
-
241
- interface RunFilesystem {
242
- status(): Promise<FilesystemStatus>
243
- list(options?: { path?: string; source?: "live" | "capture"; cursor?: string; limit?: number }): Promise<FilesystemListing>
244
- read(path: string, options?: { source?: "live" | "capture"; range?: TrialFileRange }): Promise<Buffer>
245
- search(options: { q: string; path?: string; regex?: boolean; limit?: number; source?: "live" | "capture" }): Promise<FilesystemSearchResult>
246
- changes(options?: { source?: "live" | "capture"; phase?: "setup" | "agent" | "verifier" | "all"; cursor?: string; limit?: number }): Promise<FilesystemChanges>
247
- archive(options?: { path?: string; source?: "live" | "capture" }): Promise<Buffer>
248
- archive(options: { path?: string; source?: "live" | "capture"; to: string }): Promise<string>
249
- watch(paths: string[]): Promise<FilesystemWatchResult>
250
- events(options?: { lastEventId?: string; signal?: AbortSignal }): AsyncIterableIterator<FilesystemStreamEvent>
251
- logs(options: { stream: SandboxLogStream; cursor?: string; limit?: number }): Promise<SandboxLogLines>
252
- logEvents(options?: { lastEventId?: string; signal?: AbortSignal }): AsyncIterableIterator<SandboxLogEvent>
253
- procs(): Promise<SandboxProcs>
254
- }
255
- ```
256
-
257
- The trial's file system, sandbox logs and process list. While the box runs, every read sees it as it changes; after the run, the same reads answer from the kept tree. `status()` says which (`state`: `live`, `captured`, `capturing`, `none`), and `source` on a read forces one — a source that is not there is refused with `filesystem_state`.
258
-
259
- `list` pages one folder by name; each entry says whether the run created or modified it and in which phase, and on the kept tree `captured: false` marks a file the run never touched (it lists but does not open — `not_captured`). `read` answers raw bytes, a slice with `range`. `search` finds text under a folder, or over the whole box when `path` is `/` (seconds); `truncated` says there was more. `changes` is the flat list of what the run created, modified or removed. `archive` is a `.tar.gz` of one subtree, in memory or saved under `to`; while the box runs, a subtree too large to read out in time is refused (`feature_unsupported`).
260
-
261
- `events` yields change frames while the box lives (`state`, then one `fs` per change with its `seq`, `path` and `type`); on a provider without a native watcher, `watch(paths)` declares the folders you have open so their changes are reported (at most 8). `logs` pages one stream — `agent`, `verifier`, or `system` when the job asked for it; `setup` and `metrics` are named but not recorded today, so their page is empty with a `reason` — and `logEvents` follows every stream while the box lives. `procs` is the live process list.
262
-
263
- ```ts
264
- const fs = trials().filesystem(trial.id);
265
- const { state } = await fs.status();
266
- for (const entry of (await fs.list({ path: "/app/work" })).entries) console.log(entry.name, entry.changed);
267
- const main = (await fs.read("/app/work/main.py")).toString("utf8");
268
- for await (const frame of fs.events()) if (frame.event === "fs") console.log(frame.data.path, frame.data.type);
269
- ```
270
- </Tab>
271
- <Tab title="Python">
272
- ```python
273
- def filesystem(self, trial_id: str) -> RunFilesystem
274
-
275
- class RunFilesystem:
276
- async def status(self) -> FilesystemStatus
277
- async def list(self, *, path="/", source=None, cursor=None, limit=None) -> FilesystemListing
278
- async def read(self, path, *, source=None, start=None, end=None, suffix=None) -> bytes
279
- async def search(self, q, *, path="/", regex=False, limit=None, source=None) -> FilesystemSearchResult
280
- async def changes(self, *, source=None, phase=None, cursor=None, limit=None) -> FilesystemChanges
281
- async def archive(self, *, path="/", source=None, to=None) # bytes, or the saved path with to=
282
- async def watch(self, paths) -> FilesystemWatchResult
283
- def events(self, *, last_event_id=None) -> AsyncIterator[FilesystemStreamEvent]
284
- async def logs(self, stream, *, cursor=None, limit=None) -> SandboxLogLines
285
- def log_events(self, *, last_event_id=None) -> AsyncIterator[SandboxLogEvent]
286
- async def procs(self) -> SandboxProcs
287
- ```
288
-
289
- The same surface, the same words: `status().state` says whether the reads answer from the running box (`live`) or the kept tree (`captured`); `source=` forces one. `read` answers bytes, a slice with `start`/`end` or `suffix`. `events` and `log_events` are async iterators over the live streams.
290
-
291
- ```python
292
- fs = trials().filesystem(trial.id)
293
- print((await fs.status()).state)
294
- for entry in (await fs.list(path="/app/work")).entries:
295
- print(entry.name, entry.changed)
296
- main = (await fs.read("/app/work/main.py")).decode()
297
- async for frame in fs.events():
298
- if frame.event == "fs":
299
- print(frame.data["path"], frame.data["type"])
300
- ```
301
- </Tab>
302
- </Tabs>