@aether-agent/evals 0.4.8 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -1
- package/dist/Agent.d.ts +4 -1
- package/dist/Agent.d.ts.map +1 -1
- package/dist/DockerAgent.d.ts +2 -4
- package/dist/DockerAgent.d.ts.map +1 -1
- package/dist/DockerAgent.js +3 -33
- package/dist/DockerAgent.js.map +1 -1
- package/dist/FakeAgent.d.ts +3 -3
- package/dist/FakeAgent.d.ts.map +1 -1
- package/dist/FakeAgent.js +3 -1
- package/dist/FakeAgent.js.map +1 -1
- package/dist/containers/container.d.ts +15 -7
- package/dist/containers/container.d.ts.map +1 -1
- package/dist/containers/container.js +97 -25
- package/dist/containers/container.js.map +1 -1
- package/dist/git.d.ts +3 -11
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +43 -21
- package/dist/git.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/transcript.d.ts +2 -1
- package/dist/transcript.d.ts.map +1 -1
- package/dist/transcript.js +31 -0
- package/dist/transcript.js.map +1 -1
- package/dist/workspace.d.ts +10 -25
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +54 -57
- package/dist/workspace.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
- [Install](#install)
|
|
6
6
|
- [Writing evals with vitest](#writing-evals-with-vitest)
|
|
7
7
|
- [Grading a run with an LLM judge](#grading-a-run-with-an-llm-judge)
|
|
8
|
+
- [Evaluating against a merged change](#evaluating-against-a-merged-change)
|
|
9
|
+
- [Running the image as built](#running-the-image-as-built)
|
|
8
10
|
|
|
9
11
|
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
|
10
12
|
|
|
@@ -45,9 +47,11 @@ test("agent edits notes.txt", async () => {
|
|
|
45
47
|
Image.parse("aether-sandbox:latest")
|
|
46
48
|
).start(workspace);
|
|
47
49
|
|
|
50
|
+
// The agent sees only this environment; nothing is forwarded from the host.
|
|
48
51
|
const agent = new DockerAgent({
|
|
49
52
|
container,
|
|
50
|
-
command: ["node", "/app/eval-agent.js"]
|
|
53
|
+
command: ["node", "/app/eval-agent.js"],
|
|
54
|
+
env: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY! },
|
|
51
55
|
});
|
|
52
56
|
|
|
53
57
|
const trace = await Transcript.fromStream(agent.run(task));
|
|
@@ -98,6 +102,7 @@ test("agent makes a maintainer-quality edit", async () => {
|
|
|
98
102
|
const agent = new DockerAgent({
|
|
99
103
|
container,
|
|
100
104
|
command: ["node", "/app/eval-agent.js"],
|
|
105
|
+
env: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY! },
|
|
101
106
|
});
|
|
102
107
|
|
|
103
108
|
const trace = await Transcript.fromStream(agent.run(task));
|
|
@@ -138,3 +143,59 @@ test("agent makes a maintainer-quality edit", async () => {
|
|
|
138
143
|
expect(summary.passed, summary.reason).toBe(true);
|
|
139
144
|
});
|
|
140
145
|
```
|
|
146
|
+
|
|
147
|
+
### Evaluating against a merged change
|
|
148
|
+
|
|
149
|
+
`Workspace.fromGitBundle` and `Workspace.fromGitRepo` check out a start commit and grade the agent
|
|
150
|
+
against a gold commit, such as the change a human merged. The workspace holds only the start commit's
|
|
151
|
+
history, on `main` (or `branch`) with no remote, so the agent can't find the gold commit in git.
|
|
152
|
+
`workspace.referenceDiff` is computed before the gold commit is discarded. That history is fetched in
|
|
153
|
+
full, blobs included, so reuse one bundle across runs for large repositories.
|
|
154
|
+
|
|
155
|
+
```ts
|
|
156
|
+
await using workspace = await Workspace.fromGitBundle({
|
|
157
|
+
bundlePath, // from createGitBundle({ url, startCommit, goldCommit }, bundlePath)
|
|
158
|
+
startCommit,
|
|
159
|
+
goldCommit,
|
|
160
|
+
diffExclude: ["*pnpm-lock.yaml"], // left out of both diffs
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
// ... run the agent ...
|
|
164
|
+
|
|
165
|
+
// Commits, staged and unstaged edits, and untracked files since the start commit. Rejects if git
|
|
166
|
+
// can't read the repository.
|
|
167
|
+
const agentDiff = await workspace.captureAgentDiff();
|
|
168
|
+
const referenceDiff = workspace.referenceDiff;
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Running the image as built
|
|
172
|
+
|
|
173
|
+
By default a container replaces the image's entrypoint and runs commands as the image's user. For an
|
|
174
|
+
image built to run an agent in production:
|
|
175
|
+
|
|
176
|
+
```ts
|
|
177
|
+
await using container = await Container.builder(Image.parse("my-agent:latest"))
|
|
178
|
+
.withPrivileged(true)
|
|
179
|
+
// Keep an entrypoint that starts services, such as a Docker daemon, and wait for them.
|
|
180
|
+
.withImageEntrypoint(true)
|
|
181
|
+
.withReadyCommand("docker info")
|
|
182
|
+
// Run execs and agents as the image's developer user. On Linux, the user is granted access to the
|
|
183
|
+
// workspace and ephemeral mounts; mounts added with withMount keep their host permissions.
|
|
184
|
+
.withUser("1000:1000")
|
|
185
|
+
.start(workspace);
|
|
186
|
+
|
|
187
|
+
const controller = new AbortController();
|
|
188
|
+
for await (const event of agent.run(task, { signal: controller.signal })) {
|
|
189
|
+
// ...
|
|
190
|
+
}
|
|
191
|
+
const tests = await container.exec({
|
|
192
|
+
command: ["pnpm", "test"],
|
|
193
|
+
signal: AbortSignal.timeout(600_000),
|
|
194
|
+
});
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Aborting an exec rejects it immediately. Docker can't kill an exec'd process, so the command runs
|
|
198
|
+
until it exits or the container stops. Git inside the container treats `/workspace` as a safe
|
|
199
|
+
directory, since bind mounts are usually owned by another user.
|
|
200
|
+
|
|
201
|
+
These container options and abort signals are not yet in the Rust `aether-evals` crate.
|
package/dist/Agent.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { AgentEvent } from "@aether-agent/sdk";
|
|
2
2
|
import type { Task } from "./task.js";
|
|
3
|
+
export interface AgentRunOptions {
|
|
4
|
+
signal?: AbortSignal;
|
|
5
|
+
}
|
|
3
6
|
export interface Agent {
|
|
4
|
-
run(task: Task): AsyncIterable<AgentEvent>;
|
|
7
|
+
run(task: Task, options?: AgentRunOptions): AsyncIterable<AgentEvent>;
|
|
5
8
|
}
|
|
6
9
|
//# sourceMappingURL=Agent.d.ts.map
|
package/dist/Agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Agent.d.ts","sourceRoot":"","sources":["../src/Agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,WAAW,KAAK;IACpB,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Agent.d.ts","sourceRoot":"","sources":["../src/Agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,KAAK;IACpB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;CACvE"}
|
package/dist/DockerAgent.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { AgentEvent } from "@aether-agent/sdk";
|
|
2
2
|
import { Container } from "./containers/container.js";
|
|
3
|
-
import type { Agent } from "./Agent.js";
|
|
3
|
+
import type { Agent, AgentRunOptions } from "./Agent.js";
|
|
4
4
|
import type { Task } from "./task.js";
|
|
5
|
-
export declare const CONTAINER_AETHER_HOME = "/root/.aether";
|
|
6
5
|
export declare const AETHER_EVAL_TASK_PROMPT_ENV = "AETHER_EVAL_TASK_PROMPT";
|
|
7
6
|
export declare const AETHER_EVAL_WORKSPACE_ROOT_ENV = "AETHER_EVAL_WORKSPACE_ROOT";
|
|
8
7
|
export declare const AETHER_EVAL_CWD_ENV = "AETHER_EVAL_CWD";
|
|
@@ -18,7 +17,6 @@ export declare class DockerAgent implements Agent {
|
|
|
18
17
|
constructor(options: DockerAgentOptions);
|
|
19
18
|
withEnvVar(key: string, value: string): DockerAgent;
|
|
20
19
|
withEnvVars(env: Record<string, string>): DockerAgent;
|
|
21
|
-
run(task: Task): AsyncIterable<AgentEvent>;
|
|
20
|
+
run(task: Task, options?: AgentRunOptions): AsyncIterable<AgentEvent>;
|
|
22
21
|
}
|
|
23
|
-
export declare function defaultEvalEnvVars(hostEnv?: Record<string, string | undefined>): Record<string, string>;
|
|
24
22
|
//# sourceMappingURL=DockerAgent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DockerAgent.d.ts","sourceRoot":"","sources":["../src/DockerAgent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DockerAgent.d.ts","sourceRoot":"","sources":["../src/DockerAgent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGtC,eAAO,MAAM,2BAA2B,4BAA4B,CAAC;AACrE,eAAO,MAAM,8BAA8B,+BAA+B,CAAC;AAC3E,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,qBAAa,WAAY,YAAW,KAAK;IACvC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC,YAAY,OAAO,EAAE,kBAAkB,EAUtC;IAED,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAMlD;IAED,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,CAMpD;IAEM,GAAG,CACR,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,eAAoB,GAC5B,aAAa,CAAC,UAAU,CAAC,CAiC3B;CACF"}
|
package/dist/DockerAgent.js
CHANGED
|
@@ -1,20 +1,8 @@
|
|
|
1
|
-
import { env as processEnv } from "node:process";
|
|
2
1
|
import { AetherEvalError } from "./errors.js";
|
|
3
2
|
import { isTerminalEvent } from "./transcript.js";
|
|
4
|
-
export const CONTAINER_AETHER_HOME = "/root/.aether";
|
|
5
3
|
export const AETHER_EVAL_TASK_PROMPT_ENV = "AETHER_EVAL_TASK_PROMPT";
|
|
6
4
|
export const AETHER_EVAL_WORKSPACE_ROOT_ENV = "AETHER_EVAL_WORKSPACE_ROOT";
|
|
7
5
|
export const AETHER_EVAL_CWD_ENV = "AETHER_EVAL_CWD";
|
|
8
|
-
const PROVIDER_ENV_VARS = new Set([
|
|
9
|
-
"ANTHROPIC_API_KEY",
|
|
10
|
-
"DEEPSEEK_API_KEY",
|
|
11
|
-
"GEMINI_API_KEY",
|
|
12
|
-
"MOONSHOT_API_KEY",
|
|
13
|
-
"OPENAI_API_KEY",
|
|
14
|
-
"OPENROUTER_API_KEY",
|
|
15
|
-
"XIAOMI_API_KEY",
|
|
16
|
-
"ZAI_API_KEY",
|
|
17
|
-
]);
|
|
18
6
|
export class DockerAgent {
|
|
19
7
|
container;
|
|
20
8
|
command;
|
|
@@ -25,10 +13,7 @@ export class DockerAgent {
|
|
|
25
13
|
}
|
|
26
14
|
this.container = options.container;
|
|
27
15
|
this.command = [...options.command];
|
|
28
|
-
this.env = {
|
|
29
|
-
...defaultEvalEnvVars(processEnv),
|
|
30
|
-
...(options.env ?? {}),
|
|
31
|
-
};
|
|
16
|
+
this.env = { ...options.env };
|
|
32
17
|
}
|
|
33
18
|
withEnvVar(key, value) {
|
|
34
19
|
return new DockerAgent({
|
|
@@ -44,7 +29,7 @@ export class DockerAgent {
|
|
|
44
29
|
env: { ...this.env, ...env },
|
|
45
30
|
});
|
|
46
31
|
}
|
|
47
|
-
async *run(task) {
|
|
32
|
+
async *run(task, options = {}) {
|
|
48
33
|
const env = {
|
|
49
34
|
...this.env,
|
|
50
35
|
[AETHER_EVAL_WORKSPACE_ROOT_ENV]: this.container.workspaceRoot,
|
|
@@ -57,6 +42,7 @@ export class DockerAgent {
|
|
|
57
42
|
command: this.command,
|
|
58
43
|
cwd: this.container.cwd,
|
|
59
44
|
env,
|
|
45
|
+
signal: options.signal,
|
|
60
46
|
onStderr: (chunk) => {
|
|
61
47
|
stderr += chunk;
|
|
62
48
|
},
|
|
@@ -75,22 +61,6 @@ export class DockerAgent {
|
|
|
75
61
|
}
|
|
76
62
|
}
|
|
77
63
|
}
|
|
78
|
-
export function defaultEvalEnvVars(hostEnv = processEnv) {
|
|
79
|
-
const env = {};
|
|
80
|
-
for (const [key, value] of Object.entries(hostEnv)) {
|
|
81
|
-
if (value === undefined)
|
|
82
|
-
continue;
|
|
83
|
-
if (key === "AETHER_HOME")
|
|
84
|
-
continue;
|
|
85
|
-
if (PROVIDER_ENV_VARS.has(key) ||
|
|
86
|
-
key === "OLLAMA_HOST" ||
|
|
87
|
-
key.startsWith("AETHER_")) {
|
|
88
|
-
env[key] = value;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
env.AETHER_HOME = CONTAINER_AETHER_HOME;
|
|
92
|
-
return env;
|
|
93
|
-
}
|
|
94
64
|
function parseAgentEvent(line) {
|
|
95
65
|
try {
|
|
96
66
|
return JSON.parse(line);
|
package/dist/DockerAgent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DockerAgent.js","sourceRoot":"","sources":["../src/DockerAgent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DockerAgent.js","sourceRoot":"","sources":["../src/DockerAgent.ts"],"names":[],"mappings":"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"}
|
package/dist/FakeAgent.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type { Agent } from "./Agent.js";
|
|
1
|
+
import { type AgentEvent } from "@aether-agent/sdk";
|
|
2
|
+
import type { Agent, AgentRunOptions } from "./Agent.js";
|
|
3
3
|
import type { Task } from "./task.js";
|
|
4
4
|
import type { Workspace } from "./workspace.js";
|
|
5
5
|
/**
|
|
@@ -16,6 +16,6 @@ export declare class FakeAgent implements Agent {
|
|
|
16
16
|
static writesFile(path: string, contents: string): FakeAgent;
|
|
17
17
|
withFileWrite(path: string, contents: string): FakeAgent;
|
|
18
18
|
withWorkspace(workspace: Workspace): FakeAgent;
|
|
19
|
-
run(_task: Task): AsyncIterable<AgentEvent>;
|
|
19
|
+
run(_task: Task, { signal }?: AgentRunOptions): AsyncIterable<AgentEvent>;
|
|
20
20
|
}
|
|
21
21
|
//# sourceMappingURL=FakeAgent.d.ts.map
|
package/dist/FakeAgent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FakeAgent.d.ts","sourceRoot":"","sources":["../src/FakeAgent.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"FakeAgent.d.ts","sourceRoot":"","sources":["../src/FakeAgent.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;GAGG;AACH,qBAAa,SAAU,YAAW,KAAK;IAEnC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE;IAC7B,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7D,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS;IAH3C,YACW,MAAM,EAAE,UAAU,EAAE,EACpB,UAAU,GAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,EACzD,SAAS,GAAE,SAAS,GAAG,SAAqB,EACnD;IAEJ,MAAM,CAAC,OAAO,IAAI,SAAS,CAa1B;IAED,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CA0B/D;IAED,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAE3D;IAED,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAMvD;IAED,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAE7C;IAEM,GAAG,CACR,KAAK,EAAE,IAAI,EACX,EAAE,MAAM,EAAE,GAAE,eAAoB,GAC/B,aAAa,CAAC,UAAU,CAAC,CAkB3B;CACF"}
|
package/dist/FakeAgent.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
|
+
import { throwIfAborted } from "@aether-agent/sdk";
|
|
3
4
|
import { AetherEvalError } from "./errors.js";
|
|
4
5
|
import { turnEnded } from "./transcript.js";
|
|
5
6
|
/**
|
|
@@ -65,7 +66,7 @@ export class FakeAgent {
|
|
|
65
66
|
withWorkspace(workspace) {
|
|
66
67
|
return new FakeAgent(this.events, this.fileWrites, workspace);
|
|
67
68
|
}
|
|
68
|
-
async *run(_task) {
|
|
69
|
+
async *run(_task, { signal } = {}) {
|
|
69
70
|
if (this.fileWrites.length > 0 && !this.workspace) {
|
|
70
71
|
throw new AetherEvalError("configuration_error", "FakeAgent file writes require a bound workspace");
|
|
71
72
|
}
|
|
@@ -75,6 +76,7 @@ export class FakeAgent {
|
|
|
75
76
|
await writeFile(target, contents);
|
|
76
77
|
}
|
|
77
78
|
for (const event of this.events) {
|
|
79
|
+
throwIfAborted(signal);
|
|
78
80
|
yield event;
|
|
79
81
|
}
|
|
80
82
|
}
|
package/dist/FakeAgent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FakeAgent.js","sourceRoot":"","sources":["../src/FakeAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"FakeAgent.js","sourceRoot":"","sources":["../src/FakeAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export interface ContainerExecOptions {
|
|
|
10
10
|
command: string[];
|
|
11
11
|
cwd?: string;
|
|
12
12
|
env?: Record<string, string>;
|
|
13
|
+
user?: string;
|
|
13
14
|
signal?: AbortSignal;
|
|
14
15
|
}
|
|
15
16
|
export interface ExecOutput {
|
|
@@ -17,19 +18,20 @@ export interface ExecOutput {
|
|
|
17
18
|
stdout: string;
|
|
18
19
|
stderr: string;
|
|
19
20
|
}
|
|
20
|
-
export interface ContainerStreamingOptions {
|
|
21
|
-
command: string[];
|
|
22
|
-
cwd?: string;
|
|
23
|
-
env?: Record<string, string>;
|
|
24
|
-
signal?: AbortSignal;
|
|
21
|
+
export interface ContainerStreamingOptions extends ContainerExecOptions {
|
|
25
22
|
onStderr?: (chunk: string) => void;
|
|
26
23
|
}
|
|
27
24
|
export declare class Container {
|
|
28
25
|
private readonly container;
|
|
29
|
-
private readonly ephemeralTempdirs;
|
|
30
26
|
readonly workspaceRoot = "/workspace";
|
|
31
27
|
readonly cwd: string;
|
|
32
|
-
|
|
28
|
+
private readonly user?;
|
|
29
|
+
private readonly ephemeralTempdirs;
|
|
30
|
+
constructor(container: StartedTestContainer, options: {
|
|
31
|
+
cwd: string;
|
|
32
|
+
user?: string;
|
|
33
|
+
ephemeralTempdirs?: string[];
|
|
34
|
+
});
|
|
33
35
|
static builder(image: Image): ContainerBuilder;
|
|
34
36
|
exec(options: ContainerExecOptions): Promise<ExecOutput>;
|
|
35
37
|
execShell(script: string): Promise<ExecOutput>;
|
|
@@ -42,11 +44,17 @@ export declare class ContainerBuilder {
|
|
|
42
44
|
private mounts;
|
|
43
45
|
private ephemeralMounts;
|
|
44
46
|
private privileged;
|
|
47
|
+
private user?;
|
|
48
|
+
private imageEntrypoint;
|
|
49
|
+
private readyCommand;
|
|
45
50
|
constructor(image: Image);
|
|
46
51
|
/**
|
|
47
52
|
* Enables Docker privileged mode.
|
|
48
53
|
*/
|
|
49
54
|
withPrivileged(privileged: boolean): this;
|
|
55
|
+
withUser(user: string): this;
|
|
56
|
+
withImageEntrypoint(imageEntrypoint: boolean): this;
|
|
57
|
+
withReadyCommand(command: string): this;
|
|
50
58
|
withEnvVar(key: string, value: string): this;
|
|
51
59
|
withEnvVars(envVars: Record<string, string>): this;
|
|
52
60
|
withMount(mount: BindMount): this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/containers/container.ts"],"names":[],"mappings":"AAOA,OAAO,EAGL,KAAK,oBAAoB,EAE1B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/containers/container.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,27 +58,31 @@ import { createInterface } from "node:readline";
|
|
|
58
58
|
import { PassThrough } from "node:stream";
|
|
59
59
|
import { finished } from "node:stream/promises";
|
|
60
60
|
import { GenericContainer, getContainerRuntimeClient, Wait, } from "testcontainers";
|
|
61
|
-
import {
|
|
61
|
+
import { abortedError, runCommand, throwIfAborted } from "@aether-agent/sdk";
|
|
62
62
|
import { AetherCommandExitError, AetherEvalError } from "../errors.js";
|
|
63
63
|
const STARTUP_TIMEOUT_MS = 60_000;
|
|
64
|
+
const WORKSPACE_ROOT = "/workspace";
|
|
64
65
|
export class Container {
|
|
65
66
|
container;
|
|
66
|
-
|
|
67
|
-
workspaceRoot = "/workspace";
|
|
67
|
+
workspaceRoot = WORKSPACE_ROOT;
|
|
68
68
|
cwd;
|
|
69
|
-
|
|
69
|
+
user;
|
|
70
|
+
ephemeralTempdirs;
|
|
71
|
+
constructor(container, options) {
|
|
70
72
|
this.container = container;
|
|
71
|
-
this.
|
|
72
|
-
this.
|
|
73
|
+
this.cwd = options.cwd;
|
|
74
|
+
this.user = options.user;
|
|
75
|
+
this.ephemeralTempdirs = options.ephemeralTempdirs ?? [];
|
|
73
76
|
}
|
|
74
77
|
static builder(image) {
|
|
75
78
|
return new ContainerBuilder(image);
|
|
76
79
|
}
|
|
77
80
|
async exec(options) {
|
|
78
|
-
const result = await this.container.exec(options.command, {
|
|
81
|
+
const result = await abortable(this.container.exec(options.command, {
|
|
79
82
|
workingDir: options.cwd ?? this.cwd,
|
|
80
83
|
env: options.env,
|
|
81
|
-
|
|
84
|
+
user: options.user ?? this.user,
|
|
85
|
+
}), options.signal);
|
|
82
86
|
return {
|
|
83
87
|
exitCode: result.exitCode,
|
|
84
88
|
stdout: result.stdout,
|
|
@@ -93,9 +97,7 @@ export class Container {
|
|
|
93
97
|
async *execStreaming(options) {
|
|
94
98
|
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
95
99
|
try {
|
|
96
|
-
|
|
97
|
-
throw new AetherSdkError("aborted", "Aborted by caller");
|
|
98
|
-
}
|
|
100
|
+
throwIfAborted(options.signal);
|
|
99
101
|
const client = await getContainerRuntimeClient();
|
|
100
102
|
const dockerode = client.container.dockerode;
|
|
101
103
|
const dockerodeContainer = dockerode.getContainer(this.container.getId());
|
|
@@ -106,6 +108,7 @@ export class Container {
|
|
|
106
108
|
AttachStderr: true,
|
|
107
109
|
WorkingDir: options.cwd ?? this.cwd,
|
|
108
110
|
Env: env.length > 0 ? env : undefined,
|
|
111
|
+
User: options.user ?? this.user,
|
|
109
112
|
});
|
|
110
113
|
const stream = await exec.start({ hijack: true, stdin: false });
|
|
111
114
|
const stdoutPipe = new PassThrough();
|
|
@@ -137,7 +140,7 @@ export class Container {
|
|
|
137
140
|
dockerodeContainer.modem.demuxStream(stream, stdoutPipe, stderrPipe);
|
|
138
141
|
const abortCleanup = __addDisposableResource(env_1, options.signal
|
|
139
142
|
? addAbortListener(options.signal, () => {
|
|
140
|
-
stream.destroy(
|
|
143
|
+
stream.destroy(abortedError());
|
|
141
144
|
})
|
|
142
145
|
: undefined, false);
|
|
143
146
|
void abortCleanup;
|
|
@@ -187,6 +190,9 @@ export class ContainerBuilder {
|
|
|
187
190
|
mounts = [];
|
|
188
191
|
ephemeralMounts = [];
|
|
189
192
|
privileged = false;
|
|
193
|
+
user;
|
|
194
|
+
imageEntrypoint = false;
|
|
195
|
+
readyCommand = "true";
|
|
190
196
|
constructor(image) {
|
|
191
197
|
this.image = image;
|
|
192
198
|
}
|
|
@@ -197,6 +203,18 @@ export class ContainerBuilder {
|
|
|
197
203
|
this.privileged = privileged;
|
|
198
204
|
return this;
|
|
199
205
|
}
|
|
206
|
+
withUser(user) {
|
|
207
|
+
this.user = user;
|
|
208
|
+
return this;
|
|
209
|
+
}
|
|
210
|
+
withImageEntrypoint(imageEntrypoint) {
|
|
211
|
+
this.imageEntrypoint = imageEntrypoint;
|
|
212
|
+
return this;
|
|
213
|
+
}
|
|
214
|
+
withReadyCommand(command) {
|
|
215
|
+
this.readyCommand = command;
|
|
216
|
+
return this;
|
|
217
|
+
}
|
|
200
218
|
withEnvVar(key, value) {
|
|
201
219
|
this.envVars[key] = value;
|
|
202
220
|
return this;
|
|
@@ -223,31 +241,46 @@ export class ContainerBuilder {
|
|
|
223
241
|
ephemeralBindMounts.push({ source, target, mode: "rw" });
|
|
224
242
|
}
|
|
225
243
|
const cwd = workspace.relativeCwd
|
|
226
|
-
? posix.join(
|
|
227
|
-
:
|
|
228
|
-
const workspaceMount = {
|
|
229
|
-
source: workspace.rootPath,
|
|
230
|
-
target: "/workspace",
|
|
231
|
-
mode: "rw",
|
|
232
|
-
};
|
|
244
|
+
? posix.join(WORKSPACE_ROOT, workspace.relativeCwd)
|
|
245
|
+
: WORKSPACE_ROOT;
|
|
233
246
|
const container = await createGenericContainer(this.image);
|
|
234
247
|
if (this.privileged) {
|
|
235
248
|
container.withPrivilegedMode();
|
|
236
249
|
}
|
|
250
|
+
if (this.imageEntrypoint) {
|
|
251
|
+
container.withCommand(["sleep", "infinity"]);
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
container
|
|
255
|
+
.withEntrypoint(["/bin/sh"])
|
|
256
|
+
.withCommand(["-c", "sleep infinity"]);
|
|
257
|
+
}
|
|
237
258
|
const started = await container
|
|
238
|
-
.withEntrypoint(["/bin/sh"])
|
|
239
|
-
.withCommand(["-c", "sleep infinity"])
|
|
240
259
|
.withWorkingDir(cwd)
|
|
241
|
-
.withEnvironment(this.envVars)
|
|
260
|
+
.withEnvironment(withSafeWorkspace(this.envVars))
|
|
242
261
|
.withBindMounts([
|
|
243
|
-
|
|
262
|
+
{ source: workspace.rootPath, target: WORKSPACE_ROOT, mode: "rw" },
|
|
244
263
|
...this.mounts,
|
|
245
264
|
...ephemeralBindMounts,
|
|
246
265
|
])
|
|
247
|
-
.withWaitStrategy(Wait.forSuccessfulCommand(
|
|
266
|
+
.withWaitStrategy(Wait.forSuccessfulCommand(this.readyCommand))
|
|
248
267
|
.withStartupTimeout(STARTUP_TIMEOUT_MS)
|
|
249
268
|
.start();
|
|
250
|
-
|
|
269
|
+
const result = new Container(started, {
|
|
270
|
+
cwd,
|
|
271
|
+
user: this.user,
|
|
272
|
+
ephemeralTempdirs,
|
|
273
|
+
});
|
|
274
|
+
if (this.user) {
|
|
275
|
+
await grantAccess(result, [
|
|
276
|
+
workspace.rootPath,
|
|
277
|
+
...ephemeralTempdirs,
|
|
278
|
+
]).catch(async (err) => {
|
|
279
|
+
await result[Symbol.asyncDispose]();
|
|
280
|
+
throw err;
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
return result;
|
|
251
284
|
}
|
|
252
285
|
catch (err) {
|
|
253
286
|
await removeTempdirs(ephemeralTempdirs);
|
|
@@ -279,6 +312,45 @@ async function createGenericContainer(image) {
|
|
|
279
312
|
deleteOnExit: image.build.deleteOnExit ?? false,
|
|
280
313
|
});
|
|
281
314
|
}
|
|
315
|
+
function withSafeWorkspace(env) {
|
|
316
|
+
const index = Number(env.GIT_CONFIG_COUNT ?? 0);
|
|
317
|
+
return {
|
|
318
|
+
...env,
|
|
319
|
+
GIT_CONFIG_COUNT: String(index + 1),
|
|
320
|
+
[`GIT_CONFIG_KEY_${index}`]: "safe.directory",
|
|
321
|
+
[`GIT_CONFIG_VALUE_${index}`]: WORKSPACE_ROOT,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
async function grantAccess(container, paths) {
|
|
325
|
+
const hostUid = process.getuid?.();
|
|
326
|
+
if (process.platform !== "linux" || hostUid === undefined)
|
|
327
|
+
return;
|
|
328
|
+
const id = await container.exec({ command: ["id", "-u"] });
|
|
329
|
+
if (id.exitCode !== 0) {
|
|
330
|
+
throw new AetherEvalError("configuration_error", `could not resolve the container user's UID:\n${id.stderr}`);
|
|
331
|
+
}
|
|
332
|
+
const uid = Number(id.stdout.trim());
|
|
333
|
+
if (uid === hostUid)
|
|
334
|
+
return;
|
|
335
|
+
const acl = `u:${uid}:rwX,d:u:${uid}:rwx,d:u:${hostUid}:rwx`;
|
|
336
|
+
await runCommand("setfacl", ["-R", "-m", acl, ...paths], {
|
|
337
|
+
cwd: process.cwd(),
|
|
338
|
+
env: process.env,
|
|
339
|
+
spawnFailedMessage: `Failed to run setfacl to grant UID ${uid} access to the workspace (is the acl package installed?)`,
|
|
340
|
+
exitedErrorCode: "execution_failed",
|
|
341
|
+
exitedMessage: ({ exitCode, stderr }) => `setfacl exited with code ${exitCode}.\n${stderr}`,
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
function abortable(promise, signal) {
|
|
345
|
+
if (!signal)
|
|
346
|
+
return promise;
|
|
347
|
+
if (signal.aborted)
|
|
348
|
+
return Promise.reject(abortedError());
|
|
349
|
+
return new Promise((resolve, reject) => {
|
|
350
|
+
const listener = addAbortListener(signal, () => reject(abortedError()));
|
|
351
|
+
promise.then(resolve, reject).finally(() => listener[Symbol.dispose]());
|
|
352
|
+
});
|
|
353
|
+
}
|
|
282
354
|
async function removeTempdirs(tempdirs) {
|
|
283
355
|
await Promise.all(tempdirs.map((path) => rm(path, { recursive: true, force: true })));
|
|
284
356
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/containers/container.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/containers/container.ts"],"names":[],"mappings":"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"}
|
package/dist/git.d.ts
CHANGED
|
@@ -4,16 +4,7 @@ export declare class GitRepo {
|
|
|
4
4
|
static fromPath(path: string): GitRepo;
|
|
5
5
|
/** Initialize an empty repository at `dest`. */
|
|
6
6
|
static init(dest: string, signal?: AbortSignal): Promise<GitRepo>;
|
|
7
|
-
|
|
8
|
-
* Clone `source` (a URL or a local bundle/path) into `dest` with `--no-checkout`.
|
|
9
|
-
*
|
|
10
|
-
* When `blobless` (the default), uses a partial blobless clone (`--filter=blob:none`)
|
|
11
|
-
* that defers blob downloads -- cheaper for large repos. Pass false to download the full
|
|
12
|
-
* object set so the clone is self-contained (e.g. when `source` is a bundle, which is not
|
|
13
|
-
* a promisor remote).
|
|
14
|
-
*/
|
|
15
|
-
static clone(source: string, dest: string, signal?: AbortSignal, blobless?: boolean): Promise<GitRepo>;
|
|
16
|
-
checkout(reference: string, signal?: AbortSignal): Promise<void>;
|
|
7
|
+
checkoutBranch(branch: string, commit: string, signal?: AbortSignal): Promise<void>;
|
|
17
8
|
/** Fetch `revs` from `remote` (a named remote or a URL) into this repository. */
|
|
18
9
|
fetch(remote: string, revs: string[], signal?: AbortSignal): Promise<void>;
|
|
19
10
|
updateRef(name: string, commit: string, signal?: AbortSignal): Promise<void>;
|
|
@@ -22,6 +13,7 @@ export declare class GitRepo {
|
|
|
22
13
|
* reachable objects.
|
|
23
14
|
*/
|
|
24
15
|
bundle(revs: string[], out: string, signal?: AbortSignal): Promise<void>;
|
|
25
|
-
diff(fromCommit: string, toCommit
|
|
16
|
+
diff(fromCommit: string, toCommit: string, exclude: string[], signal?: AbortSignal): Promise<string>;
|
|
17
|
+
diffWorkingTree(fromCommit: string, exclude: string[], signal?: AbortSignal): Promise<string>;
|
|
26
18
|
}
|
|
27
19
|
//# sourceMappingURL=git.d.ts.map
|
package/dist/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAOA,qBAAa,OAAO;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAzC,OAAO,eAAsC;IAE7C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErC;IAED,gDAAgD;IAChD,OAAa,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtE;IAEK,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAEf;IAED,iFAAiF;IAC3E,KAAK,CACT,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAEf;IAEK,SAAS,CACb,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAEf;IAED;;;OAGG;IACG,MAAM,CACV,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAEf;IAEK,IAAI,CACR,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAKjB;IAEK,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAiCjB;CACF"}
|
package/dist/git.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { copyFile, mkdtemp, rm } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
1
4
|
import { env as processEnv } from "node:process";
|
|
2
5
|
import { runCommand } from "@aether-agent/sdk";
|
|
3
6
|
export class GitRepo {
|
|
@@ -13,25 +16,12 @@ export class GitRepo {
|
|
|
13
16
|
await git(["init", dest], signal);
|
|
14
17
|
return new GitRepo(dest);
|
|
15
18
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
*
|
|
19
|
-
* When `blobless` (the default), uses a partial blobless clone (`--filter=blob:none`)
|
|
20
|
-
* that defers blob downloads -- cheaper for large repos. Pass false to download the full
|
|
21
|
-
* object set so the clone is self-contained (e.g. when `source` is a bundle, which is not
|
|
22
|
-
* a promisor remote).
|
|
23
|
-
*/
|
|
24
|
-
static async clone(source, dest, signal, blobless = true) {
|
|
25
|
-
const filter = blobless ? ["--filter=blob:none"] : [];
|
|
26
|
-
await git(["clone", "--no-checkout", ...filter, source, dest], signal);
|
|
27
|
-
return new GitRepo(dest);
|
|
28
|
-
}
|
|
29
|
-
async checkout(reference, signal) {
|
|
30
|
-
await git(["-C", this.path, "checkout", reference], signal);
|
|
19
|
+
async checkoutBranch(branch, commit, signal) {
|
|
20
|
+
await git(["-C", this.path, "checkout", "-B", branch, commit], signal);
|
|
31
21
|
}
|
|
32
22
|
/** Fetch `revs` from `remote` (a named remote or a URL) into this repository. */
|
|
33
23
|
async fetch(remote, revs, signal) {
|
|
34
|
-
await git(["-C", this.path, "fetch", remote, ...revs], signal);
|
|
24
|
+
await git(["-C", this.path, "fetch", "--no-tags", remote, ...revs], signal);
|
|
35
25
|
}
|
|
36
26
|
async updateRef(name, commit, signal) {
|
|
37
27
|
await git(["-C", this.path, "update-ref", name, commit], signal);
|
|
@@ -43,15 +33,47 @@ export class GitRepo {
|
|
|
43
33
|
async bundle(revs, out, signal) {
|
|
44
34
|
await git(["-C", this.path, "bundle", "create", out, ...revs], signal);
|
|
45
35
|
}
|
|
46
|
-
async diff(fromCommit, toCommit, signal) {
|
|
47
|
-
|
|
48
|
-
|
|
36
|
+
async diff(fromCommit, toCommit, exclude, signal) {
|
|
37
|
+
return git(["-C", this.path, "diff", fromCommit, toCommit, ...pathspecs(exclude)], signal);
|
|
38
|
+
}
|
|
39
|
+
async diffWorkingTree(fromCommit, exclude, signal) {
|
|
40
|
+
const scratch = await mkdtemp(join(tmpdir(), "aether-eval-index-"));
|
|
41
|
+
try {
|
|
42
|
+
const index = join(scratch, "index");
|
|
43
|
+
const realIndex = await git([
|
|
44
|
+
"-C",
|
|
45
|
+
this.path,
|
|
46
|
+
"rev-parse",
|
|
47
|
+
"--path-format=absolute",
|
|
48
|
+
"--git-path",
|
|
49
|
+
"index",
|
|
50
|
+
], signal);
|
|
51
|
+
await copyFile(realIndex.trim(), index).catch(() => { });
|
|
52
|
+
const env = { GIT_INDEX_FILE: index };
|
|
53
|
+
await git(["-C", this.path, "add", "--all"], signal, env);
|
|
54
|
+
return await git([
|
|
55
|
+
"-C",
|
|
56
|
+
this.path,
|
|
57
|
+
"diff",
|
|
58
|
+
"--cached",
|
|
59
|
+
fromCommit,
|
|
60
|
+
...pathspecs(exclude),
|
|
61
|
+
], signal, env);
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
await rm(scratch, { recursive: true, force: true });
|
|
65
|
+
}
|
|
49
66
|
}
|
|
50
67
|
}
|
|
51
|
-
function
|
|
68
|
+
function pathspecs(exclude) {
|
|
69
|
+
return exclude.length > 0
|
|
70
|
+
? ["--", ...exclude.map((pathspec) => `:(exclude)${pathspec}`)]
|
|
71
|
+
: [];
|
|
72
|
+
}
|
|
73
|
+
function git(args, signal, env = {}) {
|
|
52
74
|
return runCommand("git", args, {
|
|
53
75
|
cwd: process.cwd(),
|
|
54
|
-
env: processEnv,
|
|
76
|
+
env: { ...processEnv, ...env },
|
|
55
77
|
abortSignal: signal,
|
|
56
78
|
spawnFailedMessage: "Failed to run git for the eval workspace (is git installed and on PATH?)",
|
|
57
79
|
exitedErrorCode: "execution_failed",
|
package/dist/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,OAAO,OAAO;IACW,IAAI;IAAjC,YAA6B,IAAY;oBAAZ,IAAI;IAAW,CAAC;IAE7C,MAAM,CAAC,QAAQ,CAAC,IAAY;QAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,gDAAgD;IAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,MAAoB;QAClD,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export { AetherEvalError, AetherCommandExitError } from "./errors.js";
|
|
|
4
4
|
export type { AetherEvalErrorCode } from "./errors.js";
|
|
5
5
|
export { Container, ContainerBuilder, Image } from "./containers/index.js";
|
|
6
6
|
export type { BindMount, ContainerExecOptions, ContainerStreamingOptions, ExecOutput, ImageBuildOptions, } from "./containers/index.js";
|
|
7
|
-
export type { Agent } from "./Agent.js";
|
|
7
|
+
export type { Agent, AgentRunOptions } from "./Agent.js";
|
|
8
8
|
export { FakeAgent } from "./FakeAgent.js";
|
|
9
9
|
export { Task } from "./task.js";
|
|
10
10
|
export { diffStatsFromDiff } from "./diff.js";
|
|
@@ -15,6 +15,6 @@ export { judge, JudgeCriterionResponseSchema, JudgeResponseSchema, } from "./jud
|
|
|
15
15
|
export type { Judge, JudgeContext, JudgeCriterionResponse, JudgeCriterionSpec, JudgeCriterionSummary, JudgeInput, JudgeRubricResponse, JudgeSummary, } from "./judge.js";
|
|
16
16
|
export { isTerminalEvent, Transcript, TranscriptError, ToolCall, turnEnded, } from "./transcript.js";
|
|
17
17
|
export { createGitBundle, Workspace } from "./workspace.js";
|
|
18
|
-
export type { GitBundleSpec, GitRepoSpec, RetainedWorkspaceInfo,
|
|
18
|
+
export type { GitBundleSpec, GitCheckoutSpec, GitRepoSpec, RetainedWorkspaceInfo, } from "./workspace.js";
|
|
19
19
|
export type { AgentEvent, ContextEvent, ContextUsage, FileDiff, LlmCallOutcome, LlmCallPurpose, MessageEvent, ModelEvent, PlanMeta, PlanMetaEntry, PlanMetaStatus, SessionUsageEvent, SessionUsageTotals, StopReason, TokenUsage, ToolCallError, ToolCallRequest, ToolCallResult, ToolDisplayMeta, ToolEvent, ToolResultMeta, TurnEvent, TurnOutcome, UsageCost, UsageSource, } from "@aether-agent/sdk";
|
|
20
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC3E,YAAY,EACV,SAAS,EACT,oBAAoB,EACpB,yBAAyB,EACzB,UAAU,EACV,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC3E,YAAY,EACV,SAAS,EACT,oBAAoB,EACpB,yBAAyB,EACzB,UAAU,EACV,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,EACL,4BAA4B,EAC5B,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,KAAK,EACL,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,mBAAmB,EACnB,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,UAAU,EACV,eAAe,EACf,QAAQ,EACR,SAAS,GACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5D,YAAY,EACV,aAAa,EACb,eAAe,EACf,WAAW,EACX,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,cAAc,EACd,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,aAAa,EACb,eAAe,EACf,cAAc,EACd,eAAe,EACf,SAAS,EACT,cAAc,EACd,SAAS,EACT,WAAW,EACX,SAAS,EACT,WAAW,GACZ,MAAM,mBAAmB,CAAC"}
|
package/dist/transcript.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AgentEvent, ContextUsage, TurnOutcome } from "@aether-agent/sdk";
|
|
1
|
+
import type { AgentEvent, ContextUsage, SessionUsageTotals, TurnOutcome } from "@aether-agent/sdk";
|
|
2
2
|
export declare class ToolCall {
|
|
3
3
|
readonly name: string;
|
|
4
4
|
readonly arguments: string;
|
|
@@ -19,6 +19,7 @@ export declare class Transcript {
|
|
|
19
19
|
toolCalled(name: string): boolean;
|
|
20
20
|
toolCallCount(name: string): number;
|
|
21
21
|
usage(): ContextUsage;
|
|
22
|
+
sessionUsage(): SessionUsageTotals;
|
|
22
23
|
}
|
|
23
24
|
export declare function isTerminalEvent(event: AgentEvent): boolean;
|
|
24
25
|
/** Build the terminal turn event, defaulting to a completed turn. */
|
package/dist/transcript.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,QAAQ;IAIjB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAHvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,YACW,IAAI,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EAGvB;IAED,aAAa,IAAI,OAAO,CAEvB;CACF;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAEhC,YAAY,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAIjD;CACF;AAED,qBAAa,UAAU;IACrB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAE9B,YAAY,MAAM,GAAE,UAAU,EAAO,EAEpC;IAED,OAAa,UAAU,CACrB,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAChC,OAAO,CAAC,UAAU,CAAC,CAUrB;IAED,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAE3B;IAED,YAAY,IAAI,QAAQ,EAAE,CAEzB;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAElC;IAED,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhC;IAED,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElC;IAED,KAAK,IAAI,YAAY,CAEpB;IAED,YAAY,IAAI,kBAAkB,CAEjC;CACF;AA6BD,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAE1D;AAED,qEAAqE;AACrE,wBAAgB,SAAS,CACvB,OAAO,GAAE,WAAqC,GAC7C,UAAU,CAEZ"}
|
package/dist/transcript.js
CHANGED
|
@@ -52,12 +52,35 @@ export class Transcript {
|
|
|
52
52
|
usage() {
|
|
53
53
|
return summarizeUsage(this.events);
|
|
54
54
|
}
|
|
55
|
+
sessionUsage() {
|
|
56
|
+
return lastSessionUsage(this.events);
|
|
57
|
+
}
|
|
55
58
|
}
|
|
56
59
|
const ZERO_USAGE = {
|
|
57
60
|
usage_ratio: null,
|
|
58
61
|
context_limit: null,
|
|
59
62
|
input_tokens: 0,
|
|
60
63
|
};
|
|
64
|
+
const ZERO_SESSION_USAGE = {
|
|
65
|
+
tokens: {
|
|
66
|
+
input_tokens: 0,
|
|
67
|
+
output_tokens: 0,
|
|
68
|
+
cache_read_tokens: null,
|
|
69
|
+
cache_creation_tokens: null,
|
|
70
|
+
input_audio_tokens: null,
|
|
71
|
+
input_video_tokens: null,
|
|
72
|
+
reasoning_tokens: null,
|
|
73
|
+
output_audio_tokens: null,
|
|
74
|
+
accepted_prediction_tokens: null,
|
|
75
|
+
rejected_prediction_tokens: null,
|
|
76
|
+
},
|
|
77
|
+
estimated_usd: 0,
|
|
78
|
+
estimated_input_usd: 0,
|
|
79
|
+
estimated_output_usd: 0,
|
|
80
|
+
estimated_cache_read_usd: 0,
|
|
81
|
+
estimated_cache_creation_usd: 0,
|
|
82
|
+
unpriced_calls: 0,
|
|
83
|
+
};
|
|
61
84
|
export function isTerminalEvent(event) {
|
|
62
85
|
return event.category === "turn" && event.event.type === "ended";
|
|
63
86
|
}
|
|
@@ -88,4 +111,12 @@ function summarizeUsage(events) {
|
|
|
88
111
|
}
|
|
89
112
|
return { ...ZERO_USAGE };
|
|
90
113
|
}
|
|
114
|
+
function lastSessionUsage(events) {
|
|
115
|
+
for (let i = events.length - 1; i >= 0; i--) {
|
|
116
|
+
const event = events[i];
|
|
117
|
+
if (event?.category === "session_usage")
|
|
118
|
+
return event.event.totals;
|
|
119
|
+
}
|
|
120
|
+
return structuredClone(ZERO_SESSION_USAGE);
|
|
121
|
+
}
|
|
91
122
|
//# sourceMappingURL=transcript.js.map
|
package/dist/transcript.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"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"}
|
package/dist/workspace.d.ts
CHANGED
|
@@ -1,33 +1,21 @@
|
|
|
1
1
|
import { type GitDiff } from "./diff.js";
|
|
2
|
-
export interface
|
|
3
|
-
url: string;
|
|
2
|
+
export interface GitCheckoutSpec {
|
|
4
3
|
startCommit: string;
|
|
5
4
|
goldCommit: string;
|
|
6
5
|
subdir?: string;
|
|
6
|
+
branch?: string;
|
|
7
|
+
diffExclude?: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface GitRepoSpec extends GitCheckoutSpec {
|
|
10
|
+
url: string;
|
|
7
11
|
}
|
|
8
|
-
export interface GitBundleSpec {
|
|
12
|
+
export interface GitBundleSpec extends GitCheckoutSpec {
|
|
9
13
|
bundlePath: string;
|
|
10
|
-
startCommit: string;
|
|
11
|
-
goldCommit: string;
|
|
12
|
-
subdir?: string;
|
|
13
14
|
}
|
|
14
15
|
export interface RetainedWorkspaceInfo {
|
|
15
16
|
rootPath: string;
|
|
16
17
|
path: string;
|
|
17
18
|
}
|
|
18
|
-
/** Where an eval workspace came from. Git workspaces carry the commits for diffing. */
|
|
19
|
-
export type WorkspaceSource = "local" | {
|
|
20
|
-
git: {
|
|
21
|
-
url: string;
|
|
22
|
-
startCommit: string;
|
|
23
|
-
goldCommit: string;
|
|
24
|
-
};
|
|
25
|
-
} | {
|
|
26
|
-
bundle: {
|
|
27
|
-
startCommit: string;
|
|
28
|
-
goldCommit: string;
|
|
29
|
-
};
|
|
30
|
-
};
|
|
31
19
|
/** A workspace created on the host for an eval run. */
|
|
32
20
|
export declare class Workspace implements AsyncDisposable {
|
|
33
21
|
#private;
|
|
@@ -37,7 +25,6 @@ export declare class Workspace implements AsyncDisposable {
|
|
|
37
25
|
readonly path: string;
|
|
38
26
|
/** Subdirectory (relative to `rootPath`) used as the working dir, if any. */
|
|
39
27
|
readonly relativeCwd?: string;
|
|
40
|
-
readonly source: WorkspaceSource;
|
|
41
28
|
private constructor();
|
|
42
29
|
static empty(): Promise<Workspace>;
|
|
43
30
|
static fromFiles(files: Record<string, string>): Promise<Workspace>;
|
|
@@ -50,13 +37,11 @@ export declare class Workspace implements AsyncDisposable {
|
|
|
50
37
|
* reference diffing work without the originating remote.
|
|
51
38
|
*/
|
|
52
39
|
static fromGitBundle(spec: GitBundleSpec, signal?: AbortSignal): Promise<Workspace>;
|
|
53
|
-
private static
|
|
40
|
+
private static fromGit;
|
|
54
41
|
join(relativePath: string): string;
|
|
55
42
|
persist(): RetainedWorkspaceInfo;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
referenceDiff?: GitDiff;
|
|
59
|
-
}>;
|
|
43
|
+
get referenceDiff(): GitDiff | undefined;
|
|
44
|
+
captureAgentDiff(signal?: AbortSignal): Promise<GitDiff | undefined>;
|
|
60
45
|
/** Remove the workspace directory. Idempotent. */
|
|
61
46
|
cleanup(): Promise<void>;
|
|
62
47
|
[Symbol.asyncDispose](): Promise<void>;
|
package/dist/workspace.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAO5D,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IAClD,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uDAAuD;AACvD,qBAAa,SAAU,YAAW,eAAe;;IAC/C,mGAAmG;IACnG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,mFAAmF;IACnF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAK9B,OAAO,eAUN;IAED,OAAa,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC,CAGvC;IAED,OAAa,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAaxE;IAED,OAAa,OAAO,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,SAAgB,GACtB,OAAO,CAAC,SAAS,CAAC,CAWpB;IAED,OAAa,WAAW,CACtB,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC,CAEpB;IAED;;;;;OAKG;IACH,OAAa,aAAa,CACxB,IAAI,EAAE,aAAa,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC,CAQpB;mBAEoB,OAAO;IAqC5B,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEjC;IAED,OAAO,IAAI,qBAAqB,CAG/B;IAED,IAAI,aAAa,IAAI,OAAO,GAAG,SAAS,CAEvC;IAEK,gBAAgB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CASzE;IAED,kDAAkD;IAC5C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAI7B;IAED,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAErC;CACF;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|
package/dist/workspace.js
CHANGED
|
@@ -6,6 +6,7 @@ import { diffStatsFromDiff } from "./diff.js";
|
|
|
6
6
|
import { GitRepo } from "./git.js";
|
|
7
7
|
const EVAL_START_REF = "eval-start";
|
|
8
8
|
const EVAL_GOLD_REF = "eval-gold";
|
|
9
|
+
const DEFAULT_BRANCH = "main";
|
|
9
10
|
/** A workspace created on the host for an eval run. */
|
|
10
11
|
export class Workspace {
|
|
11
12
|
/** Retained repository/temp root. Cleanup removes this directory; bind-mounted to `/workspace`. */
|
|
@@ -14,17 +15,17 @@ export class Workspace {
|
|
|
14
15
|
path;
|
|
15
16
|
/** Subdirectory (relative to `rootPath`) used as the working dir, if any. */
|
|
16
17
|
relativeCwd;
|
|
17
|
-
|
|
18
|
+
#git;
|
|
18
19
|
#cleaned = false;
|
|
19
20
|
constructor(options) {
|
|
20
21
|
this.rootPath = options.rootPath;
|
|
21
22
|
this.path = options.path;
|
|
22
23
|
this.relativeCwd = options.relativeCwd;
|
|
23
|
-
this
|
|
24
|
+
this.#git = options.git;
|
|
24
25
|
}
|
|
25
26
|
static async empty() {
|
|
26
27
|
const rootPath = await createWorkspaceDir();
|
|
27
|
-
return new Workspace({ rootPath, path: rootPath
|
|
28
|
+
return new Workspace({ rootPath, path: rootPath });
|
|
28
29
|
}
|
|
29
30
|
static async fromFiles(files) {
|
|
30
31
|
const workspace = await Workspace.empty();
|
|
@@ -55,8 +56,7 @@ export class Workspace {
|
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
static async fromGitRepo(spec, signal) {
|
|
58
|
-
|
|
59
|
-
return Workspace.fromClone((rootPath) => GitRepo.clone(url, rootPath, signal), startCommit, subdir, { git: { url, startCommit, goldCommit } }, signal);
|
|
59
|
+
return Workspace.fromGit(spec.url, spec, signal);
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
62
|
* Instantiate a workspace from a local git bundle file (see {@link createGitBundle}).
|
|
@@ -65,29 +65,34 @@ export class Workspace {
|
|
|
65
65
|
* reference diffing work without the originating remote.
|
|
66
66
|
*/
|
|
67
67
|
static async fromGitBundle(spec, signal) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
throw new AetherSdkError("invalid_options", `git bundle file does not exist: ${bundlePath}`);
|
|
71
|
-
}
|
|
72
|
-
return Workspace.fromClone((rootPath) => GitRepo.clone(bundlePath, rootPath, signal, false), startCommit, subdir, { bundle: { startCommit, goldCommit } }, signal);
|
|
73
|
-
}
|
|
74
|
-
static async fromClone(clone, startCommit, subdir, source, signal) {
|
|
75
|
-
const rootPath = await createWorkspaceDir();
|
|
76
|
-
try {
|
|
77
|
-
const repo = await clone(rootPath);
|
|
78
|
-
await repo.checkout(startCommit, signal);
|
|
79
|
-
const path = await resolveSubdir(rootPath, subdir);
|
|
80
|
-
return new Workspace({
|
|
81
|
-
rootPath,
|
|
82
|
-
path,
|
|
83
|
-
relativeCwd: subdir ?? undefined,
|
|
84
|
-
source,
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
catch (err) {
|
|
88
|
-
await rm(rootPath, { recursive: true, force: true });
|
|
89
|
-
throw err;
|
|
68
|
+
if (!(await pathExists(spec.bundlePath))) {
|
|
69
|
+
throw new AetherSdkError("invalid_options", `git bundle file does not exist: ${spec.bundlePath}`);
|
|
90
70
|
}
|
|
71
|
+
return Workspace.fromGit(spec.bundlePath, spec, signal);
|
|
72
|
+
}
|
|
73
|
+
static async fromGit(remote, spec, signal) {
|
|
74
|
+
const { startCommit, goldCommit, subdir, branch = DEFAULT_BRANCH, diffExclude = [], } = spec;
|
|
75
|
+
return withTempDir(async (scratchPath) => {
|
|
76
|
+
const scratch = await GitRepo.init(scratchPath, signal);
|
|
77
|
+
await scratch.fetch(remote, [startCommit, goldCommit], signal);
|
|
78
|
+
const referenceDiff = toGitDiff(await scratch.diff(startCommit, goldCommit, diffExclude, signal));
|
|
79
|
+
const rootPath = await createWorkspaceDir();
|
|
80
|
+
try {
|
|
81
|
+
const repo = await GitRepo.init(rootPath, signal);
|
|
82
|
+
await repo.fetch(scratchPath, [startCommit], signal);
|
|
83
|
+
await repo.checkoutBranch(branch, startCommit, signal);
|
|
84
|
+
return new Workspace({
|
|
85
|
+
rootPath,
|
|
86
|
+
path: await resolveSubdir(rootPath, subdir),
|
|
87
|
+
relativeCwd: subdir,
|
|
88
|
+
git: { startCommit, referenceDiff, diffExclude },
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
await rm(rootPath, { recursive: true, force: true });
|
|
93
|
+
throw err;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
91
96
|
}
|
|
92
97
|
join(relativePath) {
|
|
93
98
|
return join(this.path, relativePath);
|
|
@@ -96,17 +101,15 @@ export class Workspace {
|
|
|
96
101
|
this.#cleaned = true;
|
|
97
102
|
return { rootPath: this.rootPath, path: this.path };
|
|
98
103
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
]);
|
|
109
|
-
return { agentDiff, referenceDiff };
|
|
104
|
+
get referenceDiff() {
|
|
105
|
+
return this.#git?.referenceDiff;
|
|
106
|
+
}
|
|
107
|
+
async captureAgentDiff(signal) {
|
|
108
|
+
if (!this.#git)
|
|
109
|
+
return undefined;
|
|
110
|
+
const { startCommit, diffExclude } = this.#git;
|
|
111
|
+
const diff = await GitRepo.fromPath(this.rootPath).diffWorkingTree(startCommit, diffExclude, signal);
|
|
112
|
+
return toGitDiff(diff);
|
|
110
113
|
}
|
|
111
114
|
/** Remove the workspace directory. Idempotent. */
|
|
112
115
|
async cleanup() {
|
|
@@ -127,30 +130,29 @@ export class Workspace {
|
|
|
127
130
|
* then writes a bundle that {@link Workspace.fromGitBundle} can later instantiate offline.
|
|
128
131
|
*/
|
|
129
132
|
export async function createGitBundle(spec, outPath, signal) {
|
|
130
|
-
|
|
131
|
-
try {
|
|
133
|
+
await withTempDir(async (tempDir) => {
|
|
132
134
|
const repo = await GitRepo.init(tempDir, signal);
|
|
133
135
|
await repo.fetch(spec.url, [spec.startCommit, spec.goldCommit], signal);
|
|
134
136
|
await repo.updateRef(`refs/heads/${EVAL_START_REF}`, spec.startCommit, signal);
|
|
135
137
|
await repo.updateRef(`refs/heads/${EVAL_GOLD_REF}`, spec.goldCommit, signal);
|
|
136
138
|
await repo.bundle([EVAL_START_REF, EVAL_GOLD_REF], outPath, signal);
|
|
137
|
-
}
|
|
138
|
-
finally {
|
|
139
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
140
|
-
}
|
|
139
|
+
});
|
|
141
140
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const diff = await getDiff();
|
|
145
|
-
return { diff, stats: diffStatsFromDiff(diff) };
|
|
146
|
-
}
|
|
147
|
-
catch {
|
|
148
|
-
return undefined;
|
|
149
|
-
}
|
|
141
|
+
function toGitDiff(diff) {
|
|
142
|
+
return { diff, stats: diffStatsFromDiff(diff) };
|
|
150
143
|
}
|
|
151
144
|
async function createWorkspaceDir() {
|
|
152
145
|
return mkdtemp(join(tmpdir(), "aether-eval-workspace-"));
|
|
153
146
|
}
|
|
147
|
+
async function withTempDir(fn) {
|
|
148
|
+
const path = await createWorkspaceDir();
|
|
149
|
+
try {
|
|
150
|
+
return await fn(path);
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
await rm(path, { recursive: true, force: true });
|
|
154
|
+
}
|
|
155
|
+
}
|
|
154
156
|
function resolvePath(root, relativePath) {
|
|
155
157
|
const target = resolve(root, relativePath);
|
|
156
158
|
const rel = relative(root, target);
|
|
@@ -177,9 +179,4 @@ async function resolveSubdir(rootPath, subdir) {
|
|
|
177
179
|
}
|
|
178
180
|
return path;
|
|
179
181
|
}
|
|
180
|
-
function diffCommits(source) {
|
|
181
|
-
if (source === "local")
|
|
182
|
-
return undefined;
|
|
183
|
-
return "git" in source ? source.git : source.bundle;
|
|
184
|
-
}
|
|
185
182
|
//# sourceMappingURL=workspace.js.map
|
package/dist/workspace.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAgB,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,cAAc,GAAG,YAAY,CAAC;AACpC,MAAM,aAAa,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aether-agent/evals",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Evaluation harness for the Aether agent SDK",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"testcontainers": "^12.1.0",
|
|
23
23
|
"zod": "^4.4.3",
|
|
24
|
-
"@aether-agent/sdk": "^0.7.
|
|
24
|
+
"@aether-agent/sdk": "^0.7.10"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/dockerode": "^4.0.1",
|