agentic-engineering-harness 0.4.16 → 0.5.1
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 +34 -5
- package/dist/agents/outputContracts.d.ts +1 -0
- package/dist/agents/outputContracts.js +12 -0
- package/dist/agents/outputContracts.js.map +1 -1
- package/dist/agents/parallelism.d.ts +1 -0
- package/dist/agents/parallelism.js +101 -14
- package/dist/agents/parallelism.js.map +1 -1
- package/dist/agents/structuredOutput.js +16 -4
- package/dist/agents/structuredOutput.js.map +1 -1
- package/dist/agents/waveExecutor.d.ts +41 -0
- package/dist/agents/waveExecutor.js +208 -0
- package/dist/agents/waveExecutor.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/config.js +23 -6
- package/dist/core/config.js.map +1 -1
- package/dist/core/controlPlane.d.ts +30 -0
- package/dist/core/controlPlane.js +131 -0
- package/dist/core/controlPlane.js.map +1 -0
- package/dist/core/init.js +12 -4
- package/dist/core/init.js.map +1 -1
- package/dist/core/run.d.ts +21 -0
- package/dist/core/run.js +104 -41
- package/dist/core/run.js.map +1 -1
- package/dist/core/types.d.ts +83 -1
- package/dist/distributed/queue.d.ts +11 -0
- package/dist/distributed/queue.js +140 -0
- package/dist/distributed/queue.js.map +1 -0
- package/dist/distributed/types.d.ts +34 -0
- package/dist/distributed/types.js +2 -0
- package/dist/distributed/types.js.map +1 -0
- package/dist/distributed/worker.d.ts +21 -0
- package/dist/distributed/worker.js +111 -0
- package/dist/distributed/worker.js.map +1 -0
- package/dist/entry.js +110 -46
- package/dist/entry.js.map +1 -1
- package/dist/evals/runner.js +2 -2
- package/dist/evals/runner.js.map +1 -1
- package/dist/evals/statistics.d.ts +38 -0
- package/dist/evals/statistics.js +88 -0
- package/dist/evals/statistics.js.map +1 -0
- package/dist/evidence/graph.d.ts +48 -0
- package/dist/evidence/graph.js +94 -0
- package/dist/evidence/graph.js.map +1 -0
- package/dist/mcp/benchmark.d.ts +24 -0
- package/dist/mcp/benchmark.js +82 -0
- package/dist/mcp/benchmark.js.map +1 -0
- package/dist/paseo/start.d.ts +47 -0
- package/dist/paseo/start.js +155 -0
- package/dist/paseo/start.js.map +1 -0
- package/dist/policy/bundles.d.ts +27 -0
- package/dist/policy/bundles.js +129 -0
- package/dist/policy/bundles.js.map +1 -0
- package/dist/security/sandbox.d.ts +12 -0
- package/dist/security/sandbox.js +64 -0
- package/dist/security/sandbox.js.map +1 -0
- package/dist/toolchain/resolve.js +51 -90
- package/dist/toolchain/resolve.js.map +1 -1
- package/dist/utils/process.d.ts +1 -0
- package/dist/utils/process.js +6 -1
- package/dist/utils/process.js.map +1 -1
- package/dist/validators/graphify.js +28 -6
- package/dist/validators/graphify.js.map +1 -1
- package/dist/workers/agentPrompt.d.ts +6 -1
- package/dist/workers/agentPrompt.js +118 -34
- package/dist/workers/agentPrompt.js.map +1 -1
- package/dist/workers/podman.js +30 -8
- package/dist/workers/podman.js.map +1 -1
- package/docs/V0.5.1.md +129 -0
- package/docs/V0.5.md +116 -0
- package/package.json +2 -2
- package/schemas/project.schema.json +27 -8
- package/skills/engineering-workflow/SKILL.md +9 -1
- package/templates/AGENTS.md +6 -0
- package/templates/project.yaml +70 -1
- package/templates/toolchain.yaml +8 -1
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import http from "node:http";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
export async function submitDistributedJob(root, config, job) {
|
|
6
|
+
if (config.distributed?.provider === "http")
|
|
7
|
+
return submitHttp(config, job);
|
|
8
|
+
const dirs = await queueDirs(root, config);
|
|
9
|
+
await fs.writeFile(path.join(dirs.pending, `${safe(job.id)}.json`), `${JSON.stringify(job, null, 2)}\n`, { flag: "wx" });
|
|
10
|
+
}
|
|
11
|
+
export async function claimDistributedJob(root, config, workerId) {
|
|
12
|
+
if (config.distributed?.provider === "http")
|
|
13
|
+
return claimHttp(config, workerId);
|
|
14
|
+
const dirs = await queueDirs(root, config);
|
|
15
|
+
await reclaimExpired(dirs);
|
|
16
|
+
const files = (await fs.readdir(dirs.pending)).filter((name) => name.endsWith(".json")).sort();
|
|
17
|
+
for (const file of files) {
|
|
18
|
+
const source = path.join(dirs.pending, file);
|
|
19
|
+
const leaseId = `${workerId}-${crypto.randomUUID()}`;
|
|
20
|
+
const destination = path.join(dirs.leased, `${safe(leaseId)}.json`);
|
|
21
|
+
try {
|
|
22
|
+
const raw = await fs.readFile(source, "utf8");
|
|
23
|
+
const job = JSON.parse(raw);
|
|
24
|
+
const now = Date.now();
|
|
25
|
+
const envelope = { leaseId, leasedAt: new Date(now).toISOString(), expiresAt: new Date(now + (config.distributed?.leaseSeconds ?? 1800) * 1000).toISOString(), job };
|
|
26
|
+
await fs.rename(source, destination);
|
|
27
|
+
await fs.writeFile(destination, `${JSON.stringify(envelope, null, 2)}\n`);
|
|
28
|
+
return { job, leaseId };
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
if (error?.code === "ENOENT")
|
|
32
|
+
continue;
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
export async function completeDistributedJob(root, config, leaseId, result) {
|
|
39
|
+
if (config.distributed?.provider === "http")
|
|
40
|
+
return completeHttp(config, leaseId, result);
|
|
41
|
+
const dirs = await queueDirs(root, config);
|
|
42
|
+
const leaseFile = path.join(dirs.leased, `${safe(leaseId)}.json`);
|
|
43
|
+
await fs.writeFile(path.join(dirs.completed, `${safe(result.jobId)}.json`), `${JSON.stringify(result, null, 2)}\n`);
|
|
44
|
+
await fs.rm(leaseFile, { force: true });
|
|
45
|
+
}
|
|
46
|
+
export async function waitForDistributedResult(root, config, jobId, timeoutMs) {
|
|
47
|
+
const timeout = timeoutMs ?? (config.orchestration?.worker?.timeoutSeconds ?? 1800) * 1000;
|
|
48
|
+
const deadline = Date.now() + timeout;
|
|
49
|
+
const interval = config.distributed?.pollIntervalMs ?? 1000;
|
|
50
|
+
while (Date.now() < deadline) {
|
|
51
|
+
const result = config.distributed?.provider === "http" ? await getHttpResult(config, jobId) : await getFilesystemResult(root, config, jobId);
|
|
52
|
+
if (result)
|
|
53
|
+
return result;
|
|
54
|
+
await new Promise((resolve) => setTimeout(resolve, interval));
|
|
55
|
+
}
|
|
56
|
+
throw new Error(`Distributed job ${jobId} timed out after ${timeout}ms.`);
|
|
57
|
+
}
|
|
58
|
+
export async function serveDistributedQueue(root, config, options) {
|
|
59
|
+
if (config.distributed?.provider === "http")
|
|
60
|
+
throw new Error("Queue server must use its local filesystem backing store; configure provider=filesystem on the coordinator server.");
|
|
61
|
+
const token = config.distributed?.tokenEnv ? process.env[config.distributed.tokenEnv] : undefined;
|
|
62
|
+
const server = http.createServer(async (request, response) => {
|
|
63
|
+
try {
|
|
64
|
+
if (token && request.headers.authorization !== `Bearer ${token}`) {
|
|
65
|
+
json(response, 401, { error: "unauthorized" });
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const url = new URL(request.url ?? "/", `http://${request.headers.host ?? "localhost"}`);
|
|
69
|
+
if (request.method === "POST" && url.pathname === "/v1/jobs") {
|
|
70
|
+
const job = await readJsonBody(request);
|
|
71
|
+
await submitDistributedJob(root, config, job);
|
|
72
|
+
json(response, 202, { id: job.id });
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (request.method === "POST" && url.pathname === "/v1/claim") {
|
|
76
|
+
const body = await readJsonBody(request);
|
|
77
|
+
const claimed = await claimDistributedJob(root, config, body.workerId);
|
|
78
|
+
json(response, claimed ? 200 : 204, claimed);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const complete = url.pathname.match(/^\/v1\/leases\/([^/]+)\/complete$/);
|
|
82
|
+
if (request.method === "POST" && complete) {
|
|
83
|
+
const result = await readJsonBody(request);
|
|
84
|
+
await completeDistributedJob(root, config, decodeURIComponent(complete[1]), result);
|
|
85
|
+
json(response, 200, { ok: true });
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const resultMatch = url.pathname.match(/^\/v1\/jobs\/([^/]+)$/);
|
|
89
|
+
if (request.method === "GET" && resultMatch) {
|
|
90
|
+
const result = await getFilesystemResult(root, config, decodeURIComponent(resultMatch[1]));
|
|
91
|
+
json(response, result ? 200 : 404, result ?? { error: "not-ready" });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
json(response, 404, { error: "not-found" });
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
json(response, 500, { error: String(error) });
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
await new Promise((resolve, reject) => { server.once("error", reject); server.listen(options.port, options.host ?? "127.0.0.1", () => resolve()); });
|
|
101
|
+
return server;
|
|
102
|
+
}
|
|
103
|
+
async function getFilesystemResult(root, config, jobId) { const dirs = await queueDirs(root, config); try {
|
|
104
|
+
return JSON.parse(await fs.readFile(path.join(dirs.completed, `${safe(jobId)}.json`), "utf8"));
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return undefined;
|
|
108
|
+
} }
|
|
109
|
+
async function queueDirs(root, config) { const base = path.resolve(root, config.distributed?.queueDir ?? ".harness/distributed"); const dirs = { root: base, pending: path.join(base, "pending"), leased: path.join(base, "leased"), completed: path.join(base, "completed") }; await Promise.all([dirs.pending, dirs.leased, dirs.completed].map((dir) => fs.mkdir(dir, { recursive: true }))); return dirs; }
|
|
110
|
+
async function reclaimExpired(dirs) { const files = (await fs.readdir(dirs.leased)).filter((name) => name.endsWith(".json")); for (const file of files) {
|
|
111
|
+
try {
|
|
112
|
+
const envelope = JSON.parse(await fs.readFile(path.join(dirs.leased, file), "utf8"));
|
|
113
|
+
if (Date.parse(envelope.expiresAt) <= Date.now()) {
|
|
114
|
+
await fs.writeFile(path.join(dirs.pending, `${safe(envelope.job.id)}.json`), `${JSON.stringify(envelope.job, null, 2)}\n`, { flag: "wx" }).catch(() => undefined);
|
|
115
|
+
await fs.rm(path.join(dirs.leased, file), { force: true });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch { /* malformed lease stays visible for operator inspection */ }
|
|
119
|
+
} }
|
|
120
|
+
async function submitHttp(config, job) { const response = await request(config, "/v1/jobs", { method: "POST", body: JSON.stringify(job), headers: { "content-type": "application/json" } }); if (!response.ok)
|
|
121
|
+
throw new Error(`Distributed queue rejected job: HTTP ${response.status} ${await response.text()}`); }
|
|
122
|
+
async function claimHttp(config, workerId) { const response = await request(config, "/v1/claim", { method: "POST", body: JSON.stringify({ workerId }), headers: { "content-type": "application/json" } }); if (response.status === 204)
|
|
123
|
+
return undefined; if (!response.ok)
|
|
124
|
+
throw new Error(`Distributed queue claim failed: HTTP ${response.status}`); return await response.json(); }
|
|
125
|
+
async function completeHttp(config, leaseId, result) { const response = await request(config, `/v1/leases/${encodeURIComponent(leaseId)}/complete`, { method: "POST", body: JSON.stringify(result), headers: { "content-type": "application/json" } }); if (!response.ok)
|
|
126
|
+
throw new Error(`Distributed queue completion failed: HTTP ${response.status}`); }
|
|
127
|
+
async function getHttpResult(config, jobId) { const response = await request(config, `/v1/jobs/${encodeURIComponent(jobId)}`); if (response.status === 404)
|
|
128
|
+
return undefined; if (!response.ok)
|
|
129
|
+
throw new Error(`Distributed queue result lookup failed: HTTP ${response.status}`); return await response.json(); }
|
|
130
|
+
async function request(config, pathname, init = {}) { const endpoint = config.distributed?.endpoint; if (!endpoint)
|
|
131
|
+
throw new Error("distributed.endpoint is required for HTTP distributed queues."); const headers = new Headers(init.headers); const token = config.distributed?.tokenEnv ? process.env[config.distributed.tokenEnv] : undefined; if (token)
|
|
132
|
+
headers.set("authorization", `Bearer ${token}`); return fetch(new URL(pathname, endpoint).toString(), { ...init, headers }); }
|
|
133
|
+
async function readJsonBody(request) { const chunks = []; for await (const chunk of request)
|
|
134
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)); return JSON.parse(Buffer.concat(chunks).toString("utf8")); }
|
|
135
|
+
function json(response, status, value) { response.statusCode = status; if (value === undefined) {
|
|
136
|
+
response.end();
|
|
137
|
+
return;
|
|
138
|
+
} response.setHeader("content-type", "application/json"); response.end(JSON.stringify(value)); }
|
|
139
|
+
function safe(value) { return value.replace(/[^A-Za-z0-9._-]/g, "-"); }
|
|
140
|
+
//# sourceMappingURL=queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/distributed/queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { AgentExecutionSelection } from "../agents/types.js";
|
|
2
|
+
import type { DelegationTask } from "../agents/outputContracts.js";
|
|
3
|
+
import type { HarnessProjectConfig, TaskContract, WorkerSession } from "../core/types.js";
|
|
4
|
+
export interface DistributedDelegationJob {
|
|
5
|
+
version: 1;
|
|
6
|
+
id: string;
|
|
7
|
+
parentTaskId: string;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
repositoryUrl: string;
|
|
10
|
+
baseRef: string;
|
|
11
|
+
controllerSha256?: string;
|
|
12
|
+
priorPatches: string[];
|
|
13
|
+
task: DelegationTask;
|
|
14
|
+
contract: TaskContract;
|
|
15
|
+
selection: AgentExecutionSelection;
|
|
16
|
+
config: HarnessProjectConfig;
|
|
17
|
+
prompt: string;
|
|
18
|
+
}
|
|
19
|
+
export interface DistributedDelegationResult {
|
|
20
|
+
version: 1;
|
|
21
|
+
jobId: string;
|
|
22
|
+
workerId: string;
|
|
23
|
+
startedAt: string;
|
|
24
|
+
finishedAt: string;
|
|
25
|
+
status: "PASS" | "FAIL";
|
|
26
|
+
session: WorkerSession;
|
|
27
|
+
changedFiles: string[];
|
|
28
|
+
patch: string;
|
|
29
|
+
message?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface ClaimedJob {
|
|
32
|
+
job: DistributedDelegationJob;
|
|
33
|
+
leaseId: string;
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/distributed/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AgentExecutionSelection } from "../agents/types.js";
|
|
2
|
+
import type { DelegationTask } from "../agents/outputContracts.js";
|
|
3
|
+
import type { ControlPlaneSnapshot } from "../core/controlPlane.js";
|
|
4
|
+
import type { HarnessProjectConfig, TaskContract } from "../core/types.js";
|
|
5
|
+
import type { DistributedDelegationResult } from "./types.js";
|
|
6
|
+
export declare function dispatchDistributedDelegation(input: {
|
|
7
|
+
root: string;
|
|
8
|
+
config: HarnessProjectConfig;
|
|
9
|
+
contract: TaskContract;
|
|
10
|
+
task: DelegationTask;
|
|
11
|
+
selection: AgentExecutionSelection;
|
|
12
|
+
prompt: string;
|
|
13
|
+
priorPatches?: string[];
|
|
14
|
+
controller?: ControlPlaneSnapshot;
|
|
15
|
+
}): Promise<DistributedDelegationResult>;
|
|
16
|
+
export declare function runDistributedWorkerOnce(root: string, config: HarnessProjectConfig, workerId?: string): Promise<DistributedDelegationResult | undefined>;
|
|
17
|
+
export declare function runDistributedWorkerLoop(root: string, config: HarnessProjectConfig, options?: {
|
|
18
|
+
workerId?: string;
|
|
19
|
+
once?: boolean;
|
|
20
|
+
signal?: AbortSignal;
|
|
21
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import YAML from "yaml";
|
|
6
|
+
import { minimatch } from "minimatch";
|
|
7
|
+
import { executeAgentPrompt } from "../workers/agentPrompt.js";
|
|
8
|
+
import { runProcess } from "../utils/process.js";
|
|
9
|
+
import { claimDistributedJob, completeDistributedJob, submitDistributedJob, waitForDistributedResult } from "./queue.js";
|
|
10
|
+
export async function dispatchDistributedDelegation(input) {
|
|
11
|
+
if (!input.config.distributed?.enabled)
|
|
12
|
+
throw new Error("Distributed execution is not enabled.");
|
|
13
|
+
const remote = await runProcess("git remote get-url origin", { cwd: input.root, timeoutMs: 10_000 });
|
|
14
|
+
if (remote.exitCode !== 0 || !remote.stdout.trim())
|
|
15
|
+
throw new Error("Distributed execution requires a Git remote named origin.");
|
|
16
|
+
const base = await runProcess("git rev-parse HEAD", { cwd: input.root, timeoutMs: 10_000 });
|
|
17
|
+
if (base.exitCode !== 0)
|
|
18
|
+
throw new Error("Distributed execution could not resolve the workspace HEAD.");
|
|
19
|
+
const selection = { ...input.selection, transport: "direct" };
|
|
20
|
+
const job = {
|
|
21
|
+
version: 1,
|
|
22
|
+
id: `${safe(input.contract.task.id)}-${safe(input.task.id)}-${crypto.randomUUID()}`,
|
|
23
|
+
parentTaskId: input.contract.task.id,
|
|
24
|
+
createdAt: new Date().toISOString(),
|
|
25
|
+
repositoryUrl: remote.stdout.trim(),
|
|
26
|
+
baseRef: base.stdout.trim(),
|
|
27
|
+
controllerSha256: input.controller?.compositeSha256,
|
|
28
|
+
priorPatches: input.priorPatches ?? [],
|
|
29
|
+
task: input.task,
|
|
30
|
+
contract: input.contract,
|
|
31
|
+
selection,
|
|
32
|
+
config: sanitizeRemoteConfig(input.config),
|
|
33
|
+
prompt: input.prompt
|
|
34
|
+
};
|
|
35
|
+
await submitDistributedJob(input.root, input.config, job);
|
|
36
|
+
return waitForDistributedResult(input.root, input.config, job.id);
|
|
37
|
+
}
|
|
38
|
+
export async function runDistributedWorkerOnce(root, config, workerId = config.distributed?.workerId ?? `worker-${process.pid}`) {
|
|
39
|
+
const claimed = await claimDistributedJob(root, config, workerId);
|
|
40
|
+
if (!claimed)
|
|
41
|
+
return undefined;
|
|
42
|
+
const result = await executeClaimedJob(claimed.job, workerId);
|
|
43
|
+
await completeDistributedJob(root, config, claimed.leaseId, result);
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
export async function runDistributedWorkerLoop(root, config, options = {}) {
|
|
47
|
+
const workerId = options.workerId ?? config.distributed?.workerId ?? `worker-${process.pid}`;
|
|
48
|
+
const interval = config.distributed?.pollIntervalMs ?? 1000;
|
|
49
|
+
do {
|
|
50
|
+
if (options.signal?.aborted)
|
|
51
|
+
return;
|
|
52
|
+
const result = await runDistributedWorkerOnce(root, config, workerId);
|
|
53
|
+
if (options.once)
|
|
54
|
+
return;
|
|
55
|
+
if (!result)
|
|
56
|
+
await new Promise((resolve) => setTimeout(resolve, interval));
|
|
57
|
+
} while (!options.signal?.aborted);
|
|
58
|
+
}
|
|
59
|
+
async function executeClaimedJob(job, workerId) {
|
|
60
|
+
const startedAt = new Date().toISOString();
|
|
61
|
+
const worktree = await fs.mkdtemp(path.join(os.tmpdir(), `aeh-remote-${safe(job.id)}-`));
|
|
62
|
+
let session = { provider: job.selection.runtimeAdapter, model: job.selection.modelName, logicalAgent: job.selection.logicalAgent, runtime: job.selection.runtimeName, exitCode: 1, stdout: "", stderr: "remote worker did not start" };
|
|
63
|
+
try {
|
|
64
|
+
const clone = await runProcess(`git clone --quiet --no-checkout ${quote(job.repositoryUrl)} ${quote(worktree)}`, { cwd: os.tmpdir(), timeoutMs: 300_000, toolchain: false });
|
|
65
|
+
if (clone.exitCode !== 0)
|
|
66
|
+
return failure(job, workerId, startedAt, session, `clone failed: ${clone.stderr || clone.stdout}`);
|
|
67
|
+
const checkout = await runProcess(`git checkout --quiet --detach ${quote(job.baseRef)}`, { cwd: worktree, timeoutMs: 120_000 });
|
|
68
|
+
if (checkout.exitCode !== 0)
|
|
69
|
+
return failure(job, workerId, startedAt, session, `checkout failed: ${checkout.stderr || checkout.stdout}`);
|
|
70
|
+
for (const patch of job.priorPatches ?? []) {
|
|
71
|
+
const applied = await runProcess("git apply --binary -", { cwd: worktree, timeoutMs: 60_000, stdin: patch });
|
|
72
|
+
if (applied.exitCode !== 0)
|
|
73
|
+
return failure(job, workerId, startedAt, session, `prior wave patch failed: ${applied.stderr || applied.stdout}`);
|
|
74
|
+
}
|
|
75
|
+
const contractDir = job.config.sdd?.contractsDir ?? ".harness/contracts";
|
|
76
|
+
const contractFile = path.join(worktree, contractDir, `${job.contract.task.id}.yaml`);
|
|
77
|
+
await fs.mkdir(path.dirname(contractFile), { recursive: true });
|
|
78
|
+
await fs.writeFile(contractFile, YAML.stringify(job.contract));
|
|
79
|
+
const baseline = await runProcess("git add -A && git -c user.name=aeh -c user.email=aeh@localhost commit --no-gpg-sign --allow-empty -m 'aeh distributed baseline'", { cwd: worktree, timeoutMs: 60_000 });
|
|
80
|
+
if (baseline.exitCode !== 0)
|
|
81
|
+
return failure(job, workerId, startedAt, session, `baseline commit failed: ${baseline.stderr || baseline.stdout}`);
|
|
82
|
+
session = await executeAgentPrompt(worktree, job.config, job.contract, job.selection, job.prompt);
|
|
83
|
+
if (session.exitCode !== 0)
|
|
84
|
+
return failure(job, workerId, startedAt, session, `agent exited with ${session.exitCode}`);
|
|
85
|
+
const status = await runProcess("git status --porcelain", { cwd: worktree, timeoutMs: 30_000 });
|
|
86
|
+
const untracked = status.stdout.split(/\r?\n/).filter((line) => line.startsWith("?? ")).map((line) => line.slice(3).trim()).filter(Boolean);
|
|
87
|
+
if (untracked.length)
|
|
88
|
+
await runProcess(`git add -N -- ${untracked.map(quote).join(" ")}`, { cwd: worktree, timeoutMs: 30_000 });
|
|
89
|
+
const names = await runProcess("git diff --name-only HEAD", { cwd: worktree, timeoutMs: 30_000 });
|
|
90
|
+
const changedFiles = names.stdout.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
|
|
91
|
+
const escaped = changedFiles.filter((file) => !job.task.scope.some((scope) => matches(file, scope)));
|
|
92
|
+
if (escaped.length)
|
|
93
|
+
return failure(job, workerId, startedAt, session, `remote task escaped scope: ${escaped.join(", ")}`, changedFiles);
|
|
94
|
+
const diff = await runProcess("git diff --binary --no-ext-diff HEAD", { cwd: worktree, timeoutMs: 60_000 });
|
|
95
|
+
if (diff.exitCode !== 0)
|
|
96
|
+
return failure(job, workerId, startedAt, session, diff.stderr || "unable to capture patch", changedFiles);
|
|
97
|
+
return { version: 1, jobId: job.id, workerId, startedAt, finishedAt: new Date().toISOString(), status: "PASS", session, changedFiles, patch: diff.stdout };
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
return failure(job, workerId, startedAt, session, String(error));
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
await fs.rm(worktree, { recursive: true, force: true }).catch(() => undefined);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function failure(job, workerId, startedAt, session, message, changedFiles = []) { return { version: 1, jobId: job.id, workerId, startedAt, finishedAt: new Date().toISOString(), status: "FAIL", session: { ...session, exitCode: session.exitCode || 1, stderr: [session.stderr, message].filter(Boolean).join("\n") }, changedFiles, patch: "", message }; }
|
|
107
|
+
function sanitizeRemoteConfig(config) { return { ...config, delivery: { ...config.delivery, github: { ...config.delivery?.github, enabled: false }, paseo: { ...config.delivery?.paseo, enabled: false, autoUseWorkspace: false } }, distributed: { ...config.distributed, enabled: false }, telemetry: { ...config.telemetry, exporter: "none" }, security: { ...config.security, sandbox: { ...config.security?.sandbox, required: false, forceForRisks: [] } } }; }
|
|
108
|
+
function matches(file, scope) { return scope === "**" || minimatch(file, scope, { dot: true }) || file.startsWith(scope.split(/[?*\[]/, 1)[0].replace(/\/+$/, "")); }
|
|
109
|
+
function safe(value) { return value.replace(/[^A-Za-z0-9._-]/g, "-"); }
|
|
110
|
+
function quote(value) { return `'${value.replaceAll("'", "'\\''")}'`; }
|
|
111
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/distributed/worker.ts"],"names":[],"mappings":"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"}
|
package/dist/entry.js
CHANGED
|
@@ -7,11 +7,22 @@ import { compileAgentTopology } from "./agents/compiler.js";
|
|
|
7
7
|
import { compileToolchain, setupToolchain } from "./toolchain/setup.js";
|
|
8
8
|
import { loadToolchainConfig } from "./toolchain/config.js";
|
|
9
9
|
import { resolveToolchain } from "./toolchain/resolve.js";
|
|
10
|
+
import { runDistributedWorkerLoop } from "./distributed/worker.js";
|
|
11
|
+
import { serveDistributedQueue } from "./distributed/queue.js";
|
|
12
|
+
import { resolveOrganizationPolicyBundles } from "./policy/bundles.js";
|
|
13
|
+
import { benchmarkMcpCatalog } from "./mcp/benchmark.js";
|
|
14
|
+
import { buildEvalDashboard, runRepeatedEval } from "./evals/statistics.js";
|
|
15
|
+
import { startPaseoHarness } from "./paseo/start.js";
|
|
16
|
+
const VERSION = "0.5.1";
|
|
10
17
|
const args = process.argv.slice(2);
|
|
11
18
|
if (args.length === 1 && ["--version", "-V"].includes(args[0])) {
|
|
12
|
-
console.log(
|
|
19
|
+
console.log(VERSION);
|
|
13
20
|
process.exit(0);
|
|
14
21
|
}
|
|
22
|
+
if (args[0] === "start") {
|
|
23
|
+
await runStart(args.slice(1));
|
|
24
|
+
process.exit(process.exitCode ?? 0);
|
|
25
|
+
}
|
|
15
26
|
if (args[0] === "setup") {
|
|
16
27
|
await runSetup(args.slice(1));
|
|
17
28
|
process.exit(process.exitCode ?? 0);
|
|
@@ -24,7 +35,49 @@ if (args[0] === "init" && args.includes("--setup")) {
|
|
|
24
35
|
await runInitSetup(args.slice(1));
|
|
25
36
|
process.exit(process.exitCode ?? 0);
|
|
26
37
|
}
|
|
38
|
+
if (args[0] === "worker") {
|
|
39
|
+
await runWorker(args.slice(1));
|
|
40
|
+
process.exit(process.exitCode ?? 0);
|
|
41
|
+
}
|
|
42
|
+
if (args[0] === "policy" && args[1] === "sync") {
|
|
43
|
+
await runPolicySync(args.slice(2));
|
|
44
|
+
process.exit(process.exitCode ?? 0);
|
|
45
|
+
}
|
|
46
|
+
if (args[0] === "mcp" && args[1] === "benchmark") {
|
|
47
|
+
await runMcpBenchmark(args.slice(2));
|
|
48
|
+
process.exit(process.exitCode ?? 0);
|
|
49
|
+
}
|
|
50
|
+
if (args[0] === "eval" && ["repeat", "dashboard"].includes(args[1] ?? "")) {
|
|
51
|
+
await runStatisticalEval(args.slice(1));
|
|
52
|
+
process.exit(process.exitCode ?? 0);
|
|
53
|
+
}
|
|
27
54
|
await import("./cli.js");
|
|
55
|
+
async function runStart(argv) {
|
|
56
|
+
const parsed = parseGeneric(argv, new Set(["lead", "title"]), new Set(["new", "no-web-ui", "no-setup"]));
|
|
57
|
+
if (parsed.positional.length > 1)
|
|
58
|
+
throw new Error(`aeh start accepts at most one project directory, received: ${parsed.positional.join(", ")}`);
|
|
59
|
+
const root = path.resolve(parsed.positional[0] ?? ".");
|
|
60
|
+
const config = await loadProjectConfig(root);
|
|
61
|
+
const entry = path.resolve(process.argv[1]);
|
|
62
|
+
const aehCommand = `${JSON.stringify(process.execPath)} ${JSON.stringify(entry)}`;
|
|
63
|
+
const result = await startPaseoHarness(root, config, {
|
|
64
|
+
autoSetup: parsed.flag("no-setup") ? false : undefined,
|
|
65
|
+
webUi: parsed.flag("no-web-ui") ? false : undefined,
|
|
66
|
+
forceNew: parsed.flag("new"),
|
|
67
|
+
leadAgent: parsed.value("lead"),
|
|
68
|
+
title: parsed.value("title"),
|
|
69
|
+
aehCommand
|
|
70
|
+
});
|
|
71
|
+
console.log(`AEH Paseo ready for ${config.project.name}.`);
|
|
72
|
+
console.log(`daemon=${result.daemonStarted ? "started" : "reused"}`);
|
|
73
|
+
console.log(`session=${result.session}`);
|
|
74
|
+
console.log(`lead=${result.leadAgent}`);
|
|
75
|
+
console.log(`provider=${result.provider}`);
|
|
76
|
+
console.log(`model=${result.model}`);
|
|
77
|
+
console.log(`agentId=${result.agentId}`);
|
|
78
|
+
console.log(`title=${result.title}`);
|
|
79
|
+
console.log(`Open Paseo and continue in '${result.title}'. Repository-changing prompts in that conversation now route through the Harness automatically.`);
|
|
80
|
+
}
|
|
28
81
|
async function runSetup(argv) {
|
|
29
82
|
const parsed = parse(argv);
|
|
30
83
|
const root = path.resolve(parsed.directory);
|
|
@@ -45,68 +98,79 @@ async function runSetup(argv) {
|
|
|
45
98
|
process.exitCode = 1;
|
|
46
99
|
}
|
|
47
100
|
}
|
|
48
|
-
async function runToolchain(argv) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
101
|
+
async function runToolchain(argv) { const sub = argv[0] ?? "show"; const parsed = parse(argv.slice(1)); const root = path.resolve(parsed.directory); const config = await loadProjectConfig(root); if (sub === "compile") {
|
|
102
|
+
console.log(`Compiled toolchain: ${await compileToolchain(root, config, { profile: parsed.value("profile"), updateLock: parsed.flag("update-lock") })}`);
|
|
103
|
+
return;
|
|
104
|
+
} if (sub === "show") {
|
|
105
|
+
const tc = await loadToolchainConfig(root, config);
|
|
106
|
+
console.log(JSON.stringify(await resolveToolchain(root, config, tc, { profile: parsed.value("profile") }), null, 2));
|
|
107
|
+
return;
|
|
108
|
+
} if (sub === "setup") {
|
|
109
|
+
await runSetup(argv.slice(1));
|
|
110
|
+
return;
|
|
111
|
+
} throw new Error(`Unknown toolchain command '${sub}'. Use compile, show or setup.`); }
|
|
112
|
+
async function runInitSetup(argv) { const without = argv.filter((value) => value !== "--setup"); const parsed = parse(without); const root = path.resolve(parsed.directory); const created = await initializeProject(root); const config = await loadProjectConfig(root); if (config.agents) {
|
|
113
|
+
const compiled = await compileAgentTopology(root, config);
|
|
114
|
+
if (!compiled.ok)
|
|
115
|
+
throw new Error(compiled.issues.join("; "));
|
|
116
|
+
} await compileToolchain(root, config); const setup = await setupToolchain(root, config, { profile: parsed.value("profile"), preferContainers: parsed.flag("prefer-containers") }); console.log(created.length ? `Created: ${created.join(", ")}` : "Harness already initialized."); console.log(`Toolchain ready: profile=${setup.profile}`); }
|
|
117
|
+
async function runWorker(argv) {
|
|
118
|
+
const sub = argv[0] ?? "run";
|
|
119
|
+
const parsed = parseGeneric(argv.slice(1), new Set(["worker-id", "port", "host"]), new Set(["once"]));
|
|
120
|
+
const root = path.resolve(parsed.positional[0] ?? ".");
|
|
52
121
|
const config = await loadProjectConfig(root);
|
|
53
|
-
if (sub === "
|
|
54
|
-
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
if (sub === "show") {
|
|
58
|
-
const tc = await loadToolchainConfig(root, config);
|
|
59
|
-
console.log(JSON.stringify(await resolveToolchain(root, config, tc, { profile: parsed.value("profile") }), null, 2));
|
|
122
|
+
if (sub === "run") {
|
|
123
|
+
await runDistributedWorkerLoop(root, config, { workerId: parsed.value("worker-id"), once: parsed.flag("once") });
|
|
60
124
|
return;
|
|
61
125
|
}
|
|
62
|
-
if (sub === "
|
|
63
|
-
|
|
126
|
+
if (sub === "serve") {
|
|
127
|
+
const port = Number(parsed.value("port") ?? "8787");
|
|
128
|
+
if (!Number.isInteger(port) || port <= 0 || port > 65535)
|
|
129
|
+
throw new Error("--port must be a valid TCP port.");
|
|
130
|
+
const localConfig = { ...config, distributed: { ...config.distributed, provider: "filesystem" } };
|
|
131
|
+
await serveDistributedQueue(root, localConfig, { port, host: parsed.value("host") });
|
|
132
|
+
console.log(`AEH distributed queue listening on ${parsed.value("host") ?? "127.0.0.1"}:${port}`);
|
|
133
|
+
await new Promise(() => undefined);
|
|
64
134
|
return;
|
|
65
135
|
}
|
|
66
|
-
throw new Error(`Unknown
|
|
67
|
-
}
|
|
68
|
-
async function runInitSetup(argv) {
|
|
69
|
-
const without = argv.filter((value) => value !== "--setup");
|
|
70
|
-
const parsed = parse(without);
|
|
71
|
-
const root = path.resolve(parsed.directory);
|
|
72
|
-
const created = await initializeProject(root);
|
|
73
|
-
const config = await loadProjectConfig(root);
|
|
74
|
-
if (config.agents) {
|
|
75
|
-
const compiled = await compileAgentTopology(root, config);
|
|
76
|
-
if (!compiled.ok)
|
|
77
|
-
throw new Error(compiled.issues.join("; "));
|
|
78
|
-
}
|
|
79
|
-
await compileToolchain(root, config);
|
|
80
|
-
const setup = await setupToolchain(root, config, { profile: parsed.value("profile"), preferContainers: parsed.flag("prefer-containers") });
|
|
81
|
-
console.log(created.length ? `Created: ${created.join(", ")}` : "Harness already initialized.");
|
|
82
|
-
console.log(`Toolchain ready: profile=${setup.profile}`);
|
|
136
|
+
throw new Error(`Unknown worker command '${sub}'. Use run or serve.`);
|
|
83
137
|
}
|
|
84
|
-
function
|
|
85
|
-
|
|
86
|
-
|
|
138
|
+
async function runPolicySync(argv) { const parsed = parseGeneric(argv, new Set(), new Set()); const root = path.resolve(parsed.positional[0] ?? "."); const config = await loadProjectConfig(root); const resolution = await resolveOrganizationPolicyBundles(root, config); console.log(JSON.stringify(resolution, null, 2)); if (resolution.issues.length && config.organization?.policyBundles?.required)
|
|
139
|
+
process.exitCode = 1; }
|
|
140
|
+
async function runMcpBenchmark(argv) { const parsed = parseGeneric(argv, new Set(["server"]), new Set()); const root = path.resolve(parsed.positional[0] ?? "."); const config = await loadProjectConfig(root); const servers = parsed.values("server"); console.log(JSON.stringify(await benchmarkMcpCatalog(root, config, servers.length ? servers : undefined), null, 2)); }
|
|
141
|
+
async function runStatisticalEval(argv) { const sub = argv[0]; const parsed = parseGeneric(argv.slice(1), new Set(["variant", "runs"]), new Set()); const caseId = parsed.positional[0]; if (!caseId)
|
|
142
|
+
throw new Error(`aeh eval ${sub} requires <caseId>.`); const root = path.resolve(parsed.positional[1] ?? "."); const config = await loadProjectConfig(root); if (sub === "repeat") {
|
|
143
|
+
const runs = parsed.value("runs") ? Number(parsed.value("runs")) : undefined;
|
|
144
|
+
console.log(JSON.stringify(await runRepeatedEval(root, config, caseId, parsed.value("variant"), runs), null, 2));
|
|
145
|
+
return;
|
|
146
|
+
} console.log(JSON.stringify(await buildEvalDashboard(root, config, caseId), null, 2)); }
|
|
147
|
+
function parse(argv) { const parsed = parseGeneric(argv, new Set(["profile"]), new Set(["dry-run", "update-lock", "skip-project-deps", "prefer-containers"])); if (parsed.positional.length > 1)
|
|
148
|
+
throw new Error(`Expected at most one project directory, received: ${parsed.positional.join(", ")}`); return { directory: parsed.positional[0] ?? ".", flag: parsed.flag, value: parsed.value }; }
|
|
149
|
+
function parseGeneric(argv, valueFlags, booleanFlags) {
|
|
87
150
|
const flags = new Map();
|
|
88
151
|
const positional = [];
|
|
89
|
-
for (let i = 0; i < argv.length; i
|
|
90
|
-
const
|
|
91
|
-
if (!
|
|
92
|
-
positional.push(
|
|
152
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
153
|
+
const token = argv[i];
|
|
154
|
+
if (!token.startsWith("--")) {
|
|
155
|
+
positional.push(token);
|
|
93
156
|
continue;
|
|
94
157
|
}
|
|
95
|
-
const name =
|
|
158
|
+
const name = token.slice(2);
|
|
96
159
|
if (valueFlags.has(name)) {
|
|
97
160
|
const next = argv[++i];
|
|
98
161
|
if (!next || next.startsWith("--"))
|
|
99
162
|
throw new Error(`--${name} requires a value.`);
|
|
100
|
-
flags.
|
|
163
|
+
const list = flags.get(name) ?? [];
|
|
164
|
+
list.push(next);
|
|
165
|
+
flags.set(name, list);
|
|
101
166
|
continue;
|
|
102
167
|
}
|
|
103
168
|
if (!booleanFlags.has(name))
|
|
104
|
-
throw new Error(`Unknown
|
|
105
|
-
flags.
|
|
169
|
+
throw new Error(`Unknown option --${name}.`);
|
|
170
|
+
const list = flags.get(name) ?? [];
|
|
171
|
+
list.push(true);
|
|
172
|
+
flags.set(name, list);
|
|
106
173
|
}
|
|
107
|
-
|
|
108
|
-
throw new Error(`Expected at most one project directory, received: ${positional.join(", ")}`);
|
|
109
|
-
const directory = positional[0] ?? ".";
|
|
110
|
-
return { directory, flag: (name) => flags.get(name) === true, value: (name) => typeof flags.get(name) === "string" ? flags.get(name) : undefined };
|
|
174
|
+
return { positional, flag: (name) => flags.get(name)?.includes(true) ?? false, value: (name) => { const found = flags.get(name)?.find((item) => typeof item === "string"); return found; }, values: (name) => (flags.get(name) ?? []).filter((item) => typeof item === "string") };
|
|
111
175
|
}
|
|
112
176
|
//# sourceMappingURL=entry.js.map
|
package/dist/entry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"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"}
|
package/dist/evals/runner.js
CHANGED
|
@@ -77,9 +77,9 @@ export async function compareEvalCase(root, config, caseId) {
|
|
|
77
77
|
const dir = path.resolve(root, config.evals?.resultsDir ?? ".harness/evals/results", safe(caseId));
|
|
78
78
|
const files = await fs.readdir(dir).catch(() => []);
|
|
79
79
|
const results = [];
|
|
80
|
-
for (const file of files.filter((name) => name.endsWith(".json"))) {
|
|
80
|
+
for (const file of files.filter((name) => name.endsWith(".json") && name !== "dashboard.json")) {
|
|
81
81
|
const value = await readJson(path.join(dir, file));
|
|
82
|
-
if (value?.caseId === caseId)
|
|
82
|
+
if (value?.caseId === caseId && typeof value.variant === "string" && typeof value.score === "number" && (value.status === "PASS" || value.status === "FAIL"))
|
|
83
83
|
results.push(value);
|
|
84
84
|
}
|
|
85
85
|
return rankEvalResults(results);
|