agentic-engineering-harness 0.4.16 → 0.6.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.
Files changed (104) hide show
  1. package/README.md +159 -189
  2. package/dist/agents/config.js +2 -0
  3. package/dist/agents/config.js.map +1 -1
  4. package/dist/agents/outputContracts.d.ts +1 -0
  5. package/dist/agents/outputContracts.js +12 -0
  6. package/dist/agents/outputContracts.js.map +1 -1
  7. package/dist/agents/parallelism.d.ts +1 -0
  8. package/dist/agents/parallelism.js +101 -14
  9. package/dist/agents/parallelism.js.map +1 -1
  10. package/dist/agents/structuredOutput.js +16 -4
  11. package/dist/agents/structuredOutput.js.map +1 -1
  12. package/dist/agents/waveExecutor.d.ts +41 -0
  13. package/dist/agents/waveExecutor.js +208 -0
  14. package/dist/agents/waveExecutor.js.map +1 -0
  15. package/dist/audit/intent.d.ts +20 -0
  16. package/dist/audit/intent.js +42 -0
  17. package/dist/audit/intent.js.map +1 -0
  18. package/dist/audit/run.d.ts +46 -0
  19. package/dist/audit/run.js +147 -0
  20. package/dist/audit/run.js.map +1 -0
  21. package/dist/cli.js +1 -1
  22. package/dist/cli.js.map +1 -1
  23. package/dist/core/config.js +28 -7
  24. package/dist/core/config.js.map +1 -1
  25. package/dist/core/controlPlane.d.ts +30 -0
  26. package/dist/core/controlPlane.js +131 -0
  27. package/dist/core/controlPlane.js.map +1 -0
  28. package/dist/core/init.js +13 -5
  29. package/dist/core/init.js.map +1 -1
  30. package/dist/core/run.d.ts +21 -0
  31. package/dist/core/run.js +104 -41
  32. package/dist/core/run.js.map +1 -1
  33. package/dist/core/types.d.ts +103 -1
  34. package/dist/distributed/queue.d.ts +11 -0
  35. package/dist/distributed/queue.js +140 -0
  36. package/dist/distributed/queue.js.map +1 -0
  37. package/dist/distributed/types.d.ts +34 -0
  38. package/dist/distributed/types.js +2 -0
  39. package/dist/distributed/types.js.map +1 -0
  40. package/dist/distributed/worker.d.ts +21 -0
  41. package/dist/distributed/worker.js +111 -0
  42. package/dist/distributed/worker.js.map +1 -0
  43. package/dist/entry.js +219 -46
  44. package/dist/entry.js.map +1 -1
  45. package/dist/evals/runner.js +2 -2
  46. package/dist/evals/runner.js.map +1 -1
  47. package/dist/evals/statistics.d.ts +38 -0
  48. package/dist/evals/statistics.js +88 -0
  49. package/dist/evals/statistics.js.map +1 -0
  50. package/dist/evidence/graph.d.ts +48 -0
  51. package/dist/evidence/graph.js +94 -0
  52. package/dist/evidence/graph.js.map +1 -0
  53. package/dist/issues/intake.d.ts +1 -1
  54. package/dist/mcp/benchmark.d.ts +24 -0
  55. package/dist/mcp/benchmark.js +82 -0
  56. package/dist/mcp/benchmark.js.map +1 -0
  57. package/dist/paseo/capabilities.d.ts +24 -0
  58. package/dist/paseo/capabilities.js +104 -0
  59. package/dist/paseo/capabilities.js.map +1 -0
  60. package/dist/paseo/context.d.ts +45 -0
  61. package/dist/paseo/context.js +153 -0
  62. package/dist/paseo/context.js.map +1 -0
  63. package/dist/paseo/start.d.ts +55 -0
  64. package/dist/paseo/start.js +138 -0
  65. package/dist/paseo/start.js.map +1 -0
  66. package/dist/policy/bundles.d.ts +27 -0
  67. package/dist/policy/bundles.js +129 -0
  68. package/dist/policy/bundles.js.map +1 -0
  69. package/dist/security/sandbox.d.ts +12 -0
  70. package/dist/security/sandbox.js +64 -0
  71. package/dist/security/sandbox.js.map +1 -0
  72. package/dist/spec/openspec.d.ts +28 -0
  73. package/dist/spec/openspec.js +179 -0
  74. package/dist/spec/openspec.js.map +1 -0
  75. package/dist/toolchain/resolve.js +54 -90
  76. package/dist/toolchain/resolve.js.map +1 -1
  77. package/dist/utils/process.d.ts +1 -0
  78. package/dist/utils/process.js +6 -1
  79. package/dist/utils/process.js.map +1 -1
  80. package/dist/validators/graphify.js +28 -6
  81. package/dist/validators/graphify.js.map +1 -1
  82. package/dist/workers/agentPrompt.d.ts +6 -1
  83. package/dist/workers/agentPrompt.js +118 -34
  84. package/dist/workers/agentPrompt.js.map +1 -1
  85. package/dist/workers/paseo.js +53 -19
  86. package/dist/workers/paseo.js.map +1 -1
  87. package/dist/workers/podman.js +30 -8
  88. package/dist/workers/podman.js.map +1 -1
  89. package/docs/PASEO.md +56 -4
  90. package/docs/V0.5.1.md +129 -0
  91. package/docs/V0.5.2.md +180 -0
  92. package/docs/V0.5.md +116 -0
  93. package/docs/V0.6.md +148 -0
  94. package/package.json +3 -3
  95. package/presets/agents/orchestration.jsonc +37 -0
  96. package/schemas/project.schema.json +38 -8
  97. package/skills/engineering-workflow/SKILL.md +113 -81
  98. package/skills/openspec-authoring/SKILL.md +26 -0
  99. package/skills/paseo-orchestration/SKILL.md +38 -0
  100. package/templates/AGENTS.md +40 -15
  101. package/templates/agents.source.jsonc +1 -1
  102. package/templates/openspec-config.yaml +24 -0
  103. package/templates/project.yaml +79 -1
  104. package/templates/toolchain.yaml +19 -2
@@ -1,6 +1,8 @@
1
1
  export type CheckStatus = "PASS" | "FAIL" | "SKIP" | "WARN";
2
2
  export type TaskMode = "spec" | "quick";
3
3
  export type ReviewSeverity = "critical" | "high" | "medium" | "low" | "note";
4
+ export type TaskRisk = "low" | "medium" | "high";
5
+ export type PaseoSessionPolicy = "fresh-on-start" | "reuse-compatible" | "resume-explicit";
4
6
  export type ValidatorAdapter = "command" | "gherkin" | "graphify" | "opengrep" | "trivy" | "playwright" | "openapi" | "pact" | "mutation" | "property" | string;
5
7
  export interface ValidationCommand {
6
8
  id: string;
@@ -49,6 +51,15 @@ export interface McpServerConfig {
49
51
  timeoutMs?: number;
50
52
  codemode?: boolean;
51
53
  }
54
+ export interface OrganizationPolicySource {
55
+ name: string;
56
+ path?: string;
57
+ url?: string;
58
+ sha256?: string;
59
+ required?: boolean;
60
+ publicKey?: string;
61
+ signature?: string;
62
+ }
52
63
  export interface HarnessProjectConfig {
53
64
  version: 1;
54
65
  project: {
@@ -61,6 +72,11 @@ export interface HarnessProjectConfig {
61
72
  required?: boolean;
62
73
  findingsDir?: string;
63
74
  };
75
+ controlPlane?: {
76
+ snapshotDir?: string;
77
+ include?: string[];
78
+ required?: boolean;
79
+ };
64
80
  workflow?: {
65
81
  quick?: {
66
82
  maxFiles?: number;
@@ -74,6 +90,14 @@ export interface HarnessProjectConfig {
74
90
  plannerAgent?: string;
75
91
  autoHandoff?: boolean;
76
92
  };
93
+ planning?: {
94
+ enabled?: boolean;
95
+ plannerAgent?: string;
96
+ worktreeIsolation?: boolean;
97
+ barrierValidation?: boolean;
98
+ maxWaveConcurrency?: number;
99
+ distributed?: boolean;
100
+ };
77
101
  reviews?: {
78
102
  enabled?: boolean;
79
103
  reviewQuick?: boolean;
@@ -113,6 +137,22 @@ export interface HarnessProjectConfig {
113
137
  timeoutSeconds?: number;
114
138
  titlePrefix?: string;
115
139
  };
140
+ interactive?: {
141
+ autoSetup?: boolean;
142
+ webUi?: boolean;
143
+ leadAgent?: string;
144
+ /** @deprecated Prefer sessionPolicy. */
145
+ reuseSession?: boolean;
146
+ sessionPolicy?: PaseoSessionPolicy;
147
+ usePaseoTools?: boolean;
148
+ context?: {
149
+ pressureThreshold?: number;
150
+ handoffThreshold?: number;
151
+ hardHandoffThreshold?: number;
152
+ };
153
+ stateDir?: string;
154
+ title?: string;
155
+ };
116
156
  };
117
157
  toolchain?: {
118
158
  configPath?: string;
@@ -122,6 +162,15 @@ export interface HarnessProjectConfig {
122
162
  };
123
163
  mcp?: {
124
164
  servers?: Record<string, McpServerConfig>;
165
+ benchmark?: {
166
+ enabled?: boolean;
167
+ resultsDir?: string;
168
+ repetitions?: number;
169
+ };
170
+ packs?: Record<string, {
171
+ servers: string[];
172
+ enabled?: boolean;
173
+ }>;
125
174
  };
126
175
  delivery?: {
127
176
  stateDir?: string;
@@ -162,6 +211,34 @@ export interface HarnessProjectConfig {
162
211
  graphPath?: string;
163
212
  snapshotDir?: string;
164
213
  refreshCommand?: string;
214
+ scheduling?: {
215
+ useEdges?: boolean;
216
+ maxGraphHops?: number;
217
+ maxSharedNodes?: number;
218
+ centralityConflictThreshold?: number;
219
+ };
220
+ };
221
+ evidence?: {
222
+ enabled?: boolean;
223
+ outputDir?: string;
224
+ requireComplete?: boolean;
225
+ };
226
+ organization?: {
227
+ policyBundles?: {
228
+ cacheDir?: string;
229
+ required?: boolean;
230
+ sources?: OrganizationPolicySource[];
231
+ };
232
+ };
233
+ distributed?: {
234
+ enabled?: boolean;
235
+ provider?: "filesystem" | "http" | string;
236
+ queueDir?: string;
237
+ endpoint?: string;
238
+ tokenEnv?: string;
239
+ pollIntervalMs?: number;
240
+ leaseSeconds?: number;
241
+ workerId?: string;
165
242
  };
166
243
  sdd?: {
167
244
  specsDir?: string;
@@ -169,6 +246,11 @@ export interface HarnessProjectConfig {
169
246
  reportsDir?: string;
170
247
  repairsDir?: string;
171
248
  runsDir?: string;
249
+ authoring?: {
250
+ provider?: "openspec" | "native" | string;
251
+ schema?: string;
252
+ managerAgent?: string;
253
+ };
172
254
  };
173
255
  validation?: {
174
256
  baseRef?: string;
@@ -186,8 +268,20 @@ export interface HarnessProjectConfig {
186
268
  provider?: "podman" | "docker" | "none" | string;
187
269
  required?: boolean;
188
270
  image?: string;
271
+ imageDigest?: string;
189
272
  network?: boolean;
190
273
  extraArgs?: string[];
274
+ readOnlyRoot?: boolean;
275
+ ephemeralHome?: boolean;
276
+ noNewPrivileges?: boolean;
277
+ capDropAll?: boolean;
278
+ pidsLimit?: number;
279
+ memory?: string;
280
+ cpus?: number;
281
+ tmpfs?: string[];
282
+ forceForRisks?: TaskRisk[];
283
+ environmentAllowlist?: string[];
284
+ credentialEnvAllowlist?: string[];
191
285
  };
192
286
  tools?: string[];
193
287
  };
@@ -204,6 +298,8 @@ export interface HarnessProjectConfig {
204
298
  corpusDir?: string;
205
299
  resultsDir?: string;
206
300
  workspacesDir?: string;
301
+ defaultRuns?: number;
302
+ confidenceLevel?: number;
207
303
  };
208
304
  provenance?: {
209
305
  outputDir?: string;
@@ -237,6 +333,11 @@ export interface TaskIssueMetadata {
237
333
  contentSha256: string;
238
334
  snapshotPath: string;
239
335
  }
336
+ export interface TaskAuthoringMetadata {
337
+ provider: string;
338
+ change: string;
339
+ sourceSha256: string;
340
+ }
240
341
  export interface TaskContract {
241
342
  version: 1;
242
343
  mode?: TaskMode;
@@ -253,6 +354,7 @@ export interface TaskContract {
253
354
  acceptance?: string;
254
355
  issue?: string;
255
356
  };
357
+ authoring?: TaskAuthoringMetadata;
256
358
  issue?: TaskIssueMetadata;
257
359
  git?: {
258
360
  baseRef?: string;
@@ -266,7 +368,7 @@ export interface TaskContract {
266
368
  routing?: {
267
369
  intent?: string;
268
370
  domains?: string[];
269
- risk?: "low" | "medium" | "high";
371
+ risk?: TaskRisk;
270
372
  agent?: string;
271
373
  reviewers?: string[];
272
374
  profile?: string;
@@ -0,0 +1,11 @@
1
+ import http from "node:http";
2
+ import type { HarnessProjectConfig } from "../core/types.js";
3
+ import type { ClaimedJob, DistributedDelegationJob, DistributedDelegationResult } from "./types.js";
4
+ export declare function submitDistributedJob(root: string, config: HarnessProjectConfig, job: DistributedDelegationJob): Promise<void>;
5
+ export declare function claimDistributedJob(root: string, config: HarnessProjectConfig, workerId: string): Promise<ClaimedJob | undefined>;
6
+ export declare function completeDistributedJob(root: string, config: HarnessProjectConfig, leaseId: string, result: DistributedDelegationResult): Promise<void>;
7
+ export declare function waitForDistributedResult(root: string, config: HarnessProjectConfig, jobId: string, timeoutMs?: number): Promise<DistributedDelegationResult>;
8
+ export declare function serveDistributedQueue(root: string, config: HarnessProjectConfig, options: {
9
+ port: number;
10
+ host?: string;
11
+ }): Promise<http.Server>;
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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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"}