agentic-engineering-harness 0.4.16

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 (280) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +273 -0
  3. package/dist/agents/audit.d.ts +12 -0
  4. package/dist/agents/audit.js +14 -0
  5. package/dist/agents/audit.js.map +1 -0
  6. package/dist/agents/compiler.d.ts +8 -0
  7. package/dist/agents/compiler.js +103 -0
  8. package/dist/agents/compiler.js.map +1 -0
  9. package/dist/agents/config.d.ts +6 -0
  10. package/dist/agents/config.js +161 -0
  11. package/dist/agents/config.js.map +1 -0
  12. package/dist/agents/escalation.d.ts +9 -0
  13. package/dist/agents/escalation.js +75 -0
  14. package/dist/agents/escalation.js.map +1 -0
  15. package/dist/agents/exceptionDetection.d.ts +24 -0
  16. package/dist/agents/exceptionDetection.js +42 -0
  17. package/dist/agents/exceptionDetection.js.map +1 -0
  18. package/dist/agents/findings.d.ts +14 -0
  19. package/dist/agents/findings.js +40 -0
  20. package/dist/agents/findings.js.map +1 -0
  21. package/dist/agents/gitCheckpoint.d.ts +6 -0
  22. package/dist/agents/gitCheckpoint.js +61 -0
  23. package/dist/agents/gitCheckpoint.js.map +1 -0
  24. package/dist/agents/jsonc.d.ts +1 -0
  25. package/dist/agents/jsonc.js +42 -0
  26. package/dist/agents/jsonc.js.map +1 -0
  27. package/dist/agents/outputContracts.d.ts +161 -0
  28. package/dist/agents/outputContracts.js +16 -0
  29. package/dist/agents/outputContracts.js.map +1 -0
  30. package/dist/agents/parallelism.d.ts +14 -0
  31. package/dist/agents/parallelism.js +54 -0
  32. package/dist/agents/parallelism.js.map +1 -0
  33. package/dist/agents/permissions.d.ts +5 -0
  34. package/dist/agents/permissions.js +30 -0
  35. package/dist/agents/permissions.js.map +1 -0
  36. package/dist/agents/qualityConvergence.d.ts +44 -0
  37. package/dist/agents/qualityConvergence.js +77 -0
  38. package/dist/agents/qualityConvergence.js.map +1 -0
  39. package/dist/agents/recovery.d.ts +13 -0
  40. package/dist/agents/recovery.js +35 -0
  41. package/dist/agents/recovery.js.map +1 -0
  42. package/dist/agents/reviewLifecycle.d.ts +30 -0
  43. package/dist/agents/reviewLifecycle.js +233 -0
  44. package/dist/agents/reviewLifecycle.js.map +1 -0
  45. package/dist/agents/routing.d.ts +9 -0
  46. package/dist/agents/routing.js +37 -0
  47. package/dist/agents/routing.js.map +1 -0
  48. package/dist/agents/structuredOutput.d.ts +1 -0
  49. package/dist/agents/structuredOutput.js +54 -0
  50. package/dist/agents/structuredOutput.js.map +1 -0
  51. package/dist/agents/types.d.ts +207 -0
  52. package/dist/agents/types.js +2 -0
  53. package/dist/agents/types.js.map +1 -0
  54. package/dist/cli.d.ts +2 -0
  55. package/dist/cli.js +221 -0
  56. package/dist/cli.js.map +1 -0
  57. package/dist/core/config.d.ts +3 -0
  58. package/dist/core/config.js +59 -0
  59. package/dist/core/config.js.map +1 -0
  60. package/dist/core/doctor.d.ts +8 -0
  61. package/dist/core/doctor.js +59 -0
  62. package/dist/core/doctor.js.map +1 -0
  63. package/dist/core/git.d.ts +8 -0
  64. package/dist/core/git.js +47 -0
  65. package/dist/core/git.js.map +1 -0
  66. package/dist/core/init.d.ts +1 -0
  67. package/dist/core/init.js +52 -0
  68. package/dist/core/init.js.map +1 -0
  69. package/dist/core/quick.d.ts +20 -0
  70. package/dist/core/quick.js +49 -0
  71. package/dist/core/quick.js.map +1 -0
  72. package/dist/core/repair.d.ts +8 -0
  73. package/dist/core/repair.js +7 -0
  74. package/dist/core/repair.js.map +1 -0
  75. package/dist/core/run.d.ts +38 -0
  76. package/dist/core/run.js +165 -0
  77. package/dist/core/run.js.map +1 -0
  78. package/dist/core/sdd.d.ts +10 -0
  79. package/dist/core/sdd.js +88 -0
  80. package/dist/core/sdd.js.map +1 -0
  81. package/dist/core/seal.d.ts +3 -0
  82. package/dist/core/seal.js +74 -0
  83. package/dist/core/seal.js.map +1 -0
  84. package/dist/core/triage.d.ts +22 -0
  85. package/dist/core/triage.js +38 -0
  86. package/dist/core/triage.js.map +1 -0
  87. package/dist/core/types.d.ts +354 -0
  88. package/dist/core/types.js +2 -0
  89. package/dist/core/types.js.map +1 -0
  90. package/dist/core/verify.d.ts +6 -0
  91. package/dist/core/verify.js +51 -0
  92. package/dist/core/verify.js.map +1 -0
  93. package/dist/delivery/finalize.d.ts +17 -0
  94. package/dist/delivery/finalize.js +71 -0
  95. package/dist/delivery/finalize.js.map +1 -0
  96. package/dist/delivery/handoff.d.ts +39 -0
  97. package/dist/delivery/handoff.js +250 -0
  98. package/dist/delivery/handoff.js.map +1 -0
  99. package/dist/entry.d.ts +2 -0
  100. package/dist/entry.js +112 -0
  101. package/dist/entry.js.map +1 -0
  102. package/dist/evals/runner.d.ts +4 -0
  103. package/dist/evals/runner.js +112 -0
  104. package/dist/evals/runner.js.map +1 -0
  105. package/dist/evals/scoring.d.ts +3 -0
  106. package/dist/evals/scoring.js +41 -0
  107. package/dist/evals/scoring.js.map +1 -0
  108. package/dist/evals/types.d.ts +46 -0
  109. package/dist/evals/types.js +2 -0
  110. package/dist/evals/types.js.map +1 -0
  111. package/dist/issues/intake.d.ts +114 -0
  112. package/dist/issues/intake.js +213 -0
  113. package/dist/issues/intake.js.map +1 -0
  114. package/dist/memory/benchmark.d.ts +33 -0
  115. package/dist/memory/benchmark.js +69 -0
  116. package/dist/memory/benchmark.js.map +1 -0
  117. package/dist/metrics/runMetrics.d.ts +9 -0
  118. package/dist/metrics/runMetrics.js +34 -0
  119. package/dist/metrics/runMetrics.js.map +1 -0
  120. package/dist/metrics/usage.d.ts +3 -0
  121. package/dist/metrics/usage.js +53 -0
  122. package/dist/metrics/usage.js.map +1 -0
  123. package/dist/provenance/generate.d.ts +30 -0
  124. package/dist/provenance/generate.js +96 -0
  125. package/dist/provenance/generate.js.map +1 -0
  126. package/dist/providers/engram.d.ts +8 -0
  127. package/dist/providers/engram.js +14 -0
  128. package/dist/providers/engram.js.map +1 -0
  129. package/dist/providers/graphify.d.ts +9 -0
  130. package/dist/providers/graphify.js +28 -0
  131. package/dist/providers/graphify.js.map +1 -0
  132. package/dist/providers/paseo.d.ts +8 -0
  133. package/dist/providers/paseo.js +14 -0
  134. package/dist/providers/paseo.js.map +1 -0
  135. package/dist/providers/types.d.ts +41 -0
  136. package/dist/providers/types.js +2 -0
  137. package/dist/providers/types.js.map +1 -0
  138. package/dist/telemetry/events.d.ts +2 -0
  139. package/dist/telemetry/events.js +29 -0
  140. package/dist/telemetry/events.js.map +1 -0
  141. package/dist/telemetry/otlp.d.ts +3 -0
  142. package/dist/telemetry/otlp.js +57 -0
  143. package/dist/telemetry/otlp.js.map +1 -0
  144. package/dist/toolchain/config.d.ts +10 -0
  145. package/dist/toolchain/config.js +54 -0
  146. package/dist/toolchain/config.js.map +1 -0
  147. package/dist/toolchain/doctor.d.ts +8 -0
  148. package/dist/toolchain/doctor.js +56 -0
  149. package/dist/toolchain/doctor.js.map +1 -0
  150. package/dist/toolchain/mise.d.ts +10 -0
  151. package/dist/toolchain/mise.js +61 -0
  152. package/dist/toolchain/mise.js.map +1 -0
  153. package/dist/toolchain/resolve.d.ts +8 -0
  154. package/dist/toolchain/resolve.js +159 -0
  155. package/dist/toolchain/resolve.js.map +1 -0
  156. package/dist/toolchain/setup.d.ts +7 -0
  157. package/dist/toolchain/setup.js +141 -0
  158. package/dist/toolchain/setup.js.map +1 -0
  159. package/dist/toolchain/types.d.ts +95 -0
  160. package/dist/toolchain/types.js +2 -0
  161. package/dist/toolchain/types.js.map +1 -0
  162. package/dist/utils/process.d.ts +15 -0
  163. package/dist/utils/process.js +94 -0
  164. package/dist/utils/process.js.map +1 -0
  165. package/dist/validators/commands.d.ts +2 -0
  166. package/dist/validators/commands.js +28 -0
  167. package/dist/validators/commands.js.map +1 -0
  168. package/dist/validators/constraints.d.ts +6 -0
  169. package/dist/validators/constraints.js +30 -0
  170. package/dist/validators/constraints.js.map +1 -0
  171. package/dist/validators/diffScope.d.ts +2 -0
  172. package/dist/validators/diffScope.js +36 -0
  173. package/dist/validators/diffScope.js.map +1 -0
  174. package/dist/validators/evidence.d.ts +6 -0
  175. package/dist/validators/evidence.js +8 -0
  176. package/dist/validators/evidence.js.map +1 -0
  177. package/dist/validators/external.d.ts +3 -0
  178. package/dist/validators/external.js +22 -0
  179. package/dist/validators/external.js.map +1 -0
  180. package/dist/validators/gherkin.d.ts +3 -0
  181. package/dist/validators/gherkin.js +59 -0
  182. package/dist/validators/gherkin.js.map +1 -0
  183. package/dist/validators/graphify.d.ts +4 -0
  184. package/dist/validators/graphify.js +108 -0
  185. package/dist/validators/graphify.js.map +1 -0
  186. package/dist/validators/opa.d.ts +3 -0
  187. package/dist/validators/opa.js +43 -0
  188. package/dist/validators/opa.js.map +1 -0
  189. package/dist/validators/openapi.d.ts +25 -0
  190. package/dist/validators/openapi.js +98 -0
  191. package/dist/validators/openapi.js.map +1 -0
  192. package/dist/validators/registry.d.ts +2 -0
  193. package/dist/validators/registry.js +36 -0
  194. package/dist/validators/registry.js.map +1 -0
  195. package/dist/validators/toolCommand.d.ts +5 -0
  196. package/dist/validators/toolCommand.js +33 -0
  197. package/dist/validators/toolCommand.js.map +1 -0
  198. package/dist/validators/types.d.ts +13 -0
  199. package/dist/validators/types.js +2 -0
  200. package/dist/validators/types.js.map +1 -0
  201. package/dist/workers/agentPrompt.d.ts +3 -0
  202. package/dist/workers/agentPrompt.js +84 -0
  203. package/dist/workers/agentPrompt.js.map +1 -0
  204. package/dist/workers/direct.d.ts +13 -0
  205. package/dist/workers/direct.js +30 -0
  206. package/dist/workers/direct.js.map +1 -0
  207. package/dist/workers/factory.d.ts +4 -0
  208. package/dist/workers/factory.js +10 -0
  209. package/dist/workers/factory.js.map +1 -0
  210. package/dist/workers/paseo.d.ts +14 -0
  211. package/dist/workers/paseo.js +29 -0
  212. package/dist/workers/paseo.js.map +1 -0
  213. package/dist/workers/podman.d.ts +13 -0
  214. package/dist/workers/podman.js +22 -0
  215. package/dist/workers/podman.js.map +1 -0
  216. package/dist/workers/prompt.d.ts +4 -0
  217. package/dist/workers/prompt.js +4 -0
  218. package/dist/workers/prompt.js.map +1 -0
  219. package/dist/workers/types.d.ts +11 -0
  220. package/dist/workers/types.js +2 -0
  221. package/dist/workers/types.js.map +1 -0
  222. package/docs/ARCHITECTURE.md +47 -0
  223. package/docs/EVALS.md +28 -0
  224. package/docs/MEMORY.md +28 -0
  225. package/docs/OBSERVABILITY.md +18 -0
  226. package/docs/OSS_STACK.md +27 -0
  227. package/docs/PASEO.md +9 -0
  228. package/docs/PUBLISHING.md +110 -0
  229. package/docs/SDD.md +35 -0
  230. package/docs/SECURITY.md +21 -0
  231. package/docs/V0.2.md +42 -0
  232. package/docs/V0.3.md +40 -0
  233. package/docs/V0.4.11.md +30 -0
  234. package/docs/V0.4.12.md +88 -0
  235. package/docs/V0.4.13.md +203 -0
  236. package/docs/V0.4.14.md +209 -0
  237. package/docs/V0.4.15.md +365 -0
  238. package/docs/V0.4.16.md +229 -0
  239. package/docs/V0.4.md +28 -0
  240. package/docs/VALIDATION.md +23 -0
  241. package/package.json +18 -0
  242. package/policies/core/dependency-policy.rego +12 -0
  243. package/policies/core/schema-policy.rego +12 -0
  244. package/policies/core/trust-boundary.rego +17 -0
  245. package/presets/agents/default.jsonc +80 -0
  246. package/presets/docker.yaml +4 -0
  247. package/presets/dotnet.yaml +12 -0
  248. package/presets/expo.yaml +6 -0
  249. package/presets/generic.yaml +3 -0
  250. package/presets/nextjs.yaml +8 -0
  251. package/presets/node.yaml +6 -0
  252. package/presets/pnpm.yaml +6 -0
  253. package/presets/postgres.yaml +4 -0
  254. package/schemas/agent-output-planner.schema.json +1 -0
  255. package/schemas/agent-topology.schema.json +37 -0
  256. package/schemas/project.schema.json +36 -0
  257. package/schemas/quick-contract.schema.json +17 -0
  258. package/schemas/task-contract.schema.json +18 -0
  259. package/schemas/toolchain.schema.json +70 -0
  260. package/schemas/validation-report.schema.json +15 -0
  261. package/skills/acceptance-traceability/SKILL.md +13 -0
  262. package/skills/deterministic-validation/SKILL.md +15 -0
  263. package/skills/engineering-workflow/SKILL.md +108 -0
  264. package/skills/finding-dedup/SKILL.md +12 -0
  265. package/skills/github-delivery-lifecycle/SKILL.md +16 -0
  266. package/skills/implementation-worker/SKILL.md +17 -0
  267. package/skills/lead-engineer/SKILL.md +30 -0
  268. package/skills/memory-hygiene/SKILL.md +22 -0
  269. package/skills/prompt-drift-audit/SKILL.md +10 -0
  270. package/skills/recovery-classifier/SKILL.md +13 -0
  271. package/skills/routing-normalizer/SKILL.md +17 -0
  272. package/skills/sdd/SKILL.md +21 -0
  273. package/skills/simplify/SKILL.md +16 -0
  274. package/skills/verification-planning/SKILL.md +17 -0
  275. package/skills/worktree-lifecycle/SKILL.md +18 -0
  276. package/templates/AGENTS.md +37 -0
  277. package/templates/agents.source.jsonc +39 -0
  278. package/templates/otel-collector.yaml +21 -0
  279. package/templates/project.yaml +196 -0
  280. package/templates/toolchain.yaml +127 -0
@@ -0,0 +1,98 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import YAML from "yaml";
4
+ const httpMethods = ["get", "put", "post", "delete", "options", "head", "patch", "trace"];
5
+ export async function runOpenApiValidator(context) {
6
+ const baseline = stringOption(context.spec.options, "baseline");
7
+ const current = stringOption(context.spec.options, "current");
8
+ if (!baseline || !current)
9
+ return { id: context.spec.id, category: "contract", status: context.spec.required ? "FAIL" : "WARN", message: "OpenAPI validator requires options.baseline and options.current." };
10
+ try {
11
+ const before = parseDocument(await fs.readFile(path.resolve(context.root, baseline), "utf8"));
12
+ const after = parseDocument(await fs.readFile(path.resolve(context.root, current), "utf8"));
13
+ const breaking = compareOpenApi(before, after);
14
+ return { id: context.spec.id, category: "contract", status: breaking.length ? "FAIL" : "PASS", message: breaking.length ? `OpenAPI compatibility failed: ${breaking.length} breaking change(s).` : "OpenAPI remains backward compatible for the supported checks.", details: { baseline, current, breaking } };
15
+ }
16
+ catch (error) {
17
+ return { id: context.spec.id, category: "contract", status: context.spec.required ? "FAIL" : "WARN", message: `OpenAPI compatibility could not run: ${String(error)}` };
18
+ }
19
+ }
20
+ export function compareOpenApi(before, after) {
21
+ const breaking = [];
22
+ const beforePaths = before.paths ?? {};
23
+ const afterPaths = after.paths ?? {};
24
+ for (const [route, beforePath] of Object.entries(beforePaths)) {
25
+ const afterPath = afterPaths[route];
26
+ if (!afterPath) {
27
+ breaking.push(`removed path ${route}`);
28
+ continue;
29
+ }
30
+ for (const method of httpMethods) {
31
+ const beforeOperation = beforePath[method];
32
+ if (!beforeOperation)
33
+ continue;
34
+ const afterOperation = afterPath[method];
35
+ if (!afterOperation) {
36
+ breaking.push(`removed operation ${method.toUpperCase()} ${route}`);
37
+ continue;
38
+ }
39
+ compareParameters(route, method, beforeOperation, afterOperation, breaking);
40
+ compareResponses(route, method, beforeOperation, afterOperation, breaking);
41
+ }
42
+ }
43
+ const beforeSchemas = before.components?.schemas ?? {};
44
+ const afterSchemas = after.components?.schemas ?? {};
45
+ for (const [name, schema] of Object.entries(beforeSchemas)) {
46
+ const next = afterSchemas[name];
47
+ if (!next) {
48
+ breaking.push(`removed schema ${name}`);
49
+ continue;
50
+ }
51
+ compareSchema(name, schema, next, breaking);
52
+ }
53
+ return breaking;
54
+ }
55
+ function compareParameters(route, method, before, after, breaking) {
56
+ const key = (p) => `${p.in ?? ""}:${p.name ?? ""}`;
57
+ const beforeMap = new Map((before.parameters ?? []).map((item) => [key(item), item]));
58
+ const afterMap = new Map((after.parameters ?? []).map((item) => [key(item), item]));
59
+ for (const [id, parameter] of beforeMap) {
60
+ const next = afterMap.get(id);
61
+ if (!next)
62
+ breaking.push(`removed parameter ${id} from ${method.toUpperCase()} ${route}`);
63
+ else if (!parameter.required && next.required)
64
+ breaking.push(`parameter ${id} became required on ${method.toUpperCase()} ${route}`);
65
+ }
66
+ for (const [id, parameter] of afterMap)
67
+ if (!beforeMap.has(id) && parameter.required)
68
+ breaking.push(`added required parameter ${id} to ${method.toUpperCase()} ${route}`);
69
+ }
70
+ function compareResponses(route, method, before, after, breaking) { const next = after.responses ?? {}; for (const status of Object.keys(before.responses ?? {}))
71
+ if (!(status in next))
72
+ breaking.push(`removed response ${status} from ${method.toUpperCase()} ${route}`); }
73
+ function compareSchema(pathName, before, after, breaking) {
74
+ if (before.type && after.type && before.type !== after.type)
75
+ breaking.push(`schema ${pathName} changed type ${before.type} -> ${after.type}`);
76
+ const beforeProperties = before.properties ?? {};
77
+ const afterProperties = after.properties ?? {};
78
+ for (const [name, schema] of Object.entries(beforeProperties)) {
79
+ const next = afterProperties[name];
80
+ const childPath = `${pathName}.${name}`;
81
+ if (!next)
82
+ breaking.push(`removed property ${childPath}`);
83
+ else
84
+ compareSchema(childPath, schema, next, breaking);
85
+ }
86
+ const beforeRequired = new Set(before.required ?? []);
87
+ for (const required of after.required ?? [])
88
+ if (!beforeRequired.has(required))
89
+ breaking.push(`property ${pathName}.${required} became required`);
90
+ }
91
+ function stringOption(options, key) { const value = options?.[key]; return typeof value === "string" && value.trim() ? value : undefined; }
92
+ function parseDocument(content) { try {
93
+ return JSON.parse(content);
94
+ }
95
+ catch {
96
+ return YAML.parse(content);
97
+ } }
98
+ //# sourceMappingURL=openapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../src/validators/openapi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { HarnessProjectConfig, TaskContract, ValidationCheck } from "../core/types.js";
2
+ export declare function runConfiguredValidators(root: string, config: HarnessProjectConfig, contract: TaskContract, baseRef: string, changedFiles: string[]): Promise<ValidationCheck[]>;
@@ -0,0 +1,36 @@
1
+ import { runGherkinValidator } from "./gherkin.js";
2
+ import { runExternalToolValidator } from "./external.js";
3
+ import { runOpenApiValidator } from "./openapi.js";
4
+ import { runGraphifyValidator } from "./graphify.js";
5
+ import { runSpecCommand } from "./toolCommand.js";
6
+ export async function runConfiguredValidators(root, config, contract, baseRef, changedFiles) {
7
+ const specs = [...(config.validation?.validators ?? []), ...(contract.verification?.validators ?? [])];
8
+ const checks = [];
9
+ for (const spec of specs) {
10
+ const context = { root, config, contract, spec, baseRef, changedFiles };
11
+ try {
12
+ checks.push(await runValidator(context));
13
+ }
14
+ catch (error) {
15
+ checks.push({ id: spec.id, category: "validator", status: spec.required ? "FAIL" : "WARN", message: `${spec.adapter} validator crashed: ${String(error)}` });
16
+ }
17
+ }
18
+ return checks;
19
+ }
20
+ async function runValidator(context) {
21
+ switch (context.spec.adapter) {
22
+ case "gherkin": return runGherkinValidator(context);
23
+ case "graphify": return runGraphifyValidator(context);
24
+ case "openapi": return runOpenApiValidator(context);
25
+ case "opengrep":
26
+ case "trivy":
27
+ case "playwright":
28
+ case "pact":
29
+ case "mutation":
30
+ case "property": return runExternalToolValidator(context);
31
+ case "command": return context.spec.command ? runSpecCommand(context, context.spec.command, "custom") : unknown(context.spec);
32
+ default: return unknown(context.spec);
33
+ }
34
+ }
35
+ function unknown(spec) { return { id: spec.id, category: "validator", status: spec.required ? "FAIL" : "WARN", message: `Unknown validator adapter '${spec.adapter}'.` }; }
36
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/validators/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAY,EAAE,MAA4B,EAAE,QAAsB,EAAE,OAAe,EAAE,YAAsB;IACvJ,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;IACvG,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAsB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QAC3F,IAAI,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QAAC,CAAC;QACjD,OAAO,KAAK,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,uBAAuB,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAAC,CAAC;IACjL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,KAAK,UAAU,YAAY,CAAC,OAA0B;IACpD,QAAQ,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,KAAK,SAAS,CAAC,CAAC,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACpD,KAAK,UAAU,CAAC,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACtD,KAAK,SAAS,CAAC,CAAC,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACpD,KAAK,UAAU,CAAC;QAAC,KAAK,OAAO,CAAC;QAAC,KAAK,YAAY,CAAC;QAAC,KAAK,MAAM,CAAC;QAAC,KAAK,UAAU,CAAC;QAAC,KAAK,UAAU,CAAC,CAAC,OAAO,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC1I,KAAK,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9H,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AACD,SAAS,OAAO,CAAC,IAAmB,IAAqB,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,8BAA8B,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ValidationCheck, ValidatorSpec } from "../core/types.js";
2
+ import type { ValidationContext } from "./types.js";
3
+ export declare function runSpecCommand(context: ValidationContext, command: string, category: string, details?: Record<string, unknown>): Promise<ValidationCheck>;
4
+ export declare function renderTokens(command: string, context: ValidationContext): string;
5
+ export declare function missingTool(spec: ValidatorSpec, tool: string, category: string): ValidationCheck;
@@ -0,0 +1,33 @@
1
+ import path from "node:path";
2
+ import { runProcess } from "../utils/process.js";
3
+ export async function runSpecCommand(context, command, category, details = {}) {
4
+ const rendered = renderTokens(command, context);
5
+ const cwd = path.resolve(context.root, context.spec.workingDirectory ?? ".");
6
+ const result = await runProcess(rendered, { cwd, timeoutMs: (context.spec.timeoutSeconds ?? 900) * 1000 });
7
+ return {
8
+ id: context.spec.id,
9
+ category,
10
+ status: result.exitCode === 0 ? "PASS" : "FAIL",
11
+ message: result.exitCode === 0 ? `${context.spec.adapter} validator passed.` : `${context.spec.adapter} validator failed with exit code ${result.exitCode}.`,
12
+ durationMs: result.durationMs,
13
+ details: { command: rendered, stdout: truncate(result.stdout), stderr: truncate(result.stderr), ...details }
14
+ };
15
+ }
16
+ export function renderTokens(command, context) {
17
+ return command
18
+ .replaceAll("{taskId}", context.contract.task.id)
19
+ .replaceAll("{baseRef}", context.baseRef)
20
+ .replaceAll("{acceptance}", context.contract.source?.acceptance ?? "");
21
+ }
22
+ export function missingTool(spec, tool, category) {
23
+ return {
24
+ id: spec.id,
25
+ category,
26
+ status: spec.required ? "FAIL" : "WARN",
27
+ message: `${tool} is not installed; ${spec.required ? "the required validator cannot run" : "optional validator skipped"}.`
28
+ };
29
+ }
30
+ function truncate(value, max = 20_000) {
31
+ return value.length <= max ? value : `${value.slice(0, max)}\n… truncated …`;
32
+ }
33
+ //# sourceMappingURL=toolCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolCommand.js","sourceRoot":"","sources":["../../src/validators/toolCommand.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA0B,EAAE,OAAe,EAAE,QAAgB,EAAE,UAAmC,EAAE;IACvI,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,GAAG,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC3G,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,QAAQ;QACR,MAAM,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QAC/C,OAAO,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,oCAAoC,MAAM,CAAC,QAAQ,GAAG;QAC5J,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE;KAC7G,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,OAA0B;IACtE,OAAO,OAAO;SACX,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;SAChD,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC;SACxC,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAmB,EAAE,IAAY,EAAE,QAAgB;IAC7E,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,QAAQ;QACR,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACvC,OAAO,EAAE,GAAG,IAAI,sBAAsB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,4BAA4B,GAAG;KAC5H,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,GAAG,GAAG,MAAM;IAC3C,OAAO,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { HarnessProjectConfig, TaskContract, ValidationCheck, ValidatorSpec } from "../core/types.js";
2
+ export interface ValidationContext {
3
+ root: string;
4
+ config: HarnessProjectConfig;
5
+ contract: TaskContract;
6
+ spec: ValidatorSpec;
7
+ baseRef: string;
8
+ changedFiles: string[];
9
+ }
10
+ export interface HarnessValidator {
11
+ readonly adapter: string;
12
+ validate(context: ValidationContext): Promise<ValidationCheck>;
13
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/validators/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { AgentExecutionSelection } from "../agents/types.js";
2
+ import type { HarnessProjectConfig, TaskContract, WorkerSession } from "../core/types.js";
3
+ export declare function executeAgentPrompt(root: string, config: HarnessProjectConfig, contract: TaskContract, selection: AgentExecutionSelection, prompt: string): Promise<WorkerSession>;
@@ -0,0 +1,84 @@
1
+ import path from "node:path";
2
+ import { buildOpenCodeRuntimeConfig } from "../agents/permissions.js";
3
+ import { deliveryWorkspaceId } from "../delivery/handoff.js";
4
+ import { runProcess } from "../utils/process.js";
5
+ export async function executeAgentPrompt(root, config, contract, selection, prompt) {
6
+ const transport = selection.transport === "inherit" ? (config.orchestration?.provider ?? "none") : selection.transport;
7
+ const effectivePrompt = withAgentCharter(selection, prompt);
8
+ if (transport === "paseo")
9
+ return executeViaPaseo(root, config, contract, selection, effectivePrompt);
10
+ if (transport === "direct")
11
+ return executeDirect(root, config, selection, effectivePrompt);
12
+ if (transport === "podman")
13
+ return executePodman(root, config, contract, selection, effectivePrompt);
14
+ throw new Error(`Unsupported agent prompt transport: ${transport}`);
15
+ }
16
+ async function executeViaPaseo(root, config, contract, selection, prompt) {
17
+ const model = selection.runtimeAdapter === "codex" ? selection.modelName : selection.modelId;
18
+ const title = `${config.orchestration?.worker?.titlePrefix ?? "aeh"}-${contract.task.id}-${selection.logicalAgent}`;
19
+ const workspaceId = await deliveryWorkspaceId(root, config, contract.task.id);
20
+ const parts = ["paseo run --background --quiet", `--title ${quote(title)}`, `--provider ${quote(selection.paseoProvider)}`, `--model ${quote(model)}`];
21
+ if (workspaceId)
22
+ parts.push(`--workspace ${quote(workspaceId)}`);
23
+ parts.push(quote(prompt));
24
+ const launch = await runProcess(parts.join(" "), { cwd: root, timeoutMs: 60_000 });
25
+ if (launch.exitCode !== 0)
26
+ return session(selection, launch.exitCode, launch.stdout, launch.stderr);
27
+ const id = launch.stdout.split(/\r?\n/).map((line) => line.trim()).filter(Boolean).at(-1);
28
+ if (!id)
29
+ return session(selection, 1, launch.stdout, "Paseo returned no agent id.");
30
+ const timeout = config.orchestration?.worker?.timeoutSeconds ?? 1800;
31
+ const wait = await runProcess(`paseo wait ${quote(id)} --timeout ${timeout}`, { cwd: root, timeoutMs: (timeout + 30) * 1000 });
32
+ const logs = await runProcess(`paseo logs ${quote(id)} --tail 200`, { cwd: root, timeoutMs: 60_000 });
33
+ return { ...session(selection, wait.exitCode, logs.stdout || wait.stdout, [wait.stderr, logs.stderr].filter(Boolean).join("\n")), id };
34
+ }
35
+ async function executeDirect(root, config, selection, prompt) {
36
+ let command;
37
+ let env;
38
+ if (selection.runtimeAdapter === "opencode") {
39
+ const args = ["opencode", "run", "--auto", "--format", "json", "--model", selection.modelId];
40
+ if (selection.variant)
41
+ args.push("--variant", selection.variant);
42
+ if (selection.nativeAgent)
43
+ args.push("--agent", selection.nativeAgent);
44
+ args.push(...selection.args, prompt);
45
+ command = args.map(quote).join(" ");
46
+ env = { OPENCODE_CONFIG_CONTENT: JSON.stringify(buildOpenCodeRuntimeConfig(selection, config)) };
47
+ }
48
+ else if (selection.runtimeAdapter === "codex")
49
+ command = ["codex", "exec", "--json", "--model", selection.modelName, ...selection.args, prompt].map(quote).join(" ");
50
+ else
51
+ throw new Error(`No direct runtime adapter for ${selection.runtimeAdapter}`);
52
+ const result = await runProcess(command, { cwd: root, timeoutMs: (config.orchestration?.worker?.timeoutSeconds ?? 1800) * 1000, env });
53
+ return session(selection, result.exitCode, result.stdout, result.stderr);
54
+ }
55
+ async function executePodman(root, config, contract, selection, prompt) {
56
+ const image = config.security?.sandbox?.image;
57
+ if (!image)
58
+ throw new Error("security.sandbox.image is required for Podman agent execution.");
59
+ if (selection.runtimeAdapter !== "opencode")
60
+ throw new Error(`Podman prompt execution currently supports OpenCode; selected ${selection.runtimeAdapter}.`);
61
+ const writable = selection.permissions.write === "allow";
62
+ const mounts = [`-v ${quote(`${root}:/workspace:${writable ? "rw" : "ro"}`)}`];
63
+ if (writable)
64
+ for (const relative of sealedArtifacts(config, contract))
65
+ mounts.push(`-v ${quote(`${path.resolve(root, relative)}:/workspace/${relative}:ro`)}`);
66
+ const network = config.security?.sandbox?.network === false || selection.permissions.network === "deny" ? "--network none" : "";
67
+ const runtimeConfig = JSON.stringify(buildOpenCodeRuntimeConfig(selection, config));
68
+ const args = ["opencode", "run", "--auto", "--format", "json", "--model", selection.modelId];
69
+ if (selection.variant)
70
+ args.push("--variant", selection.variant);
71
+ if (selection.nativeAgent)
72
+ args.push("--agent", selection.nativeAgent);
73
+ args.push(...selection.args, prompt);
74
+ const inner = `cd /workspace && ${args.map(quote).join(" ")}`;
75
+ const extra = (config.security?.sandbox?.extraArgs ?? []).map(quote).join(" ");
76
+ const command = `podman run --rm -i --userns=keep-id ${network} -e ${quote(`OPENCODE_CONFIG_CONTENT=${runtimeConfig}`)} ${extra} ${mounts.join(" ")} ${quote(image)} sh -lc ${quote(inner)}`;
77
+ const result = await runProcess(command, { cwd: root, timeoutMs: (config.orchestration?.worker?.timeoutSeconds ?? 1800) * 1000 });
78
+ return session(selection, result.exitCode, result.stdout, result.stderr);
79
+ }
80
+ function withAgentCharter(selection, prompt) { return selection.description ? `Agent charter for ${selection.logicalAgent}:\n${selection.description}\n\n${prompt}` : prompt; }
81
+ function session(selection, exitCode, stdout, stderr) { return { provider: selection.runtimeAdapter, model: selection.modelName, logicalAgent: selection.logicalAgent, nativeAgent: selection.nativeAgent, runtime: selection.runtimeName, profile: selection.profile, exitCode, stdout, stderr }; }
82
+ function sealedArtifacts(config, contract) { const dir = config.sdd?.contractsDir ?? ".harness/contracts"; return [...new Set([`${dir}/${contract.task.id}.yaml`, `.harness/seals/${contract.task.id}.json`, ...Object.values(contract.source ?? {}).filter((value) => Boolean(value))])]; }
83
+ function quote(value) { return `'${value.replaceAll("'", "'\\''")}'`; }
84
+ //# sourceMappingURL=agentPrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentPrompt.js","sourceRoot":"","sources":["../../src/workers/agentPrompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { AgentExecutionSelection } from "../agents/types.js";
2
+ import type { HarnessProjectConfig, RepairPacket, TaskContract, WorkerSession } from "../core/types.js";
3
+ import type { WorkerExecutor } from "./types.js";
4
+ export declare class DirectWorkerExecutor implements WorkerExecutor {
5
+ readonly name = "direct";
6
+ doctor(root: string, _config: HarnessProjectConfig, selection?: AgentExecutionSelection): Promise<{
7
+ ok: boolean;
8
+ message: string;
9
+ }>;
10
+ start(root: string, config: HarnessProjectConfig, contract: TaskContract, selection?: AgentExecutionSelection): Promise<WorkerSession>;
11
+ repair(root: string, config: HarnessProjectConfig, contract: TaskContract, _session: WorkerSession, packet: RepairPacket, selection?: AgentExecutionSelection): Promise<WorkerSession>;
12
+ private run;
13
+ }
@@ -0,0 +1,30 @@
1
+ import { buildOpenCodeRuntimeConfig } from "../agents/permissions.js";
2
+ import { commandExists, runProcess } from "../utils/process.js";
3
+ import { buildRepairPrompt, buildWorkerPrompt } from "./prompt.js";
4
+ export class DirectWorkerExecutor {
5
+ name = "direct";
6
+ async doctor(root, _config, selection) { if (!selection)
7
+ return { ok: false, message: "Direct execution requires a resolved agent selection." }; const command = selection.runtimeAdapter === "opencode" ? "opencode" : selection.runtimeAdapter === "codex" ? "codex" : selection.runtimeName; const ok = await commandExists(command, root); return { ok, message: ok ? `${command} CLI detected for ${selection.logicalAgent}.` : `${command} CLI not found.` }; }
8
+ async start(root, config, contract, selection) { if (!selection)
9
+ throw new Error("Direct execution requires a resolved agent selection."); return this.run(root, config, contract, buildWorkerPrompt(contract, selection), selection); }
10
+ async repair(root, config, contract, _session, packet, selection) { if (!selection)
11
+ throw new Error("Direct repair requires a resolved agent selection."); return this.run(root, config, contract, `${buildWorkerPrompt(contract, selection)}\n\n${buildRepairPrompt(packet)}`, selection); }
12
+ async run(root, config, _contract, prompt, selection) { let command; let env; if (selection.runtimeAdapter === "opencode") {
13
+ const args = ["opencode", "run", "--auto", "--format", "json", "--model", selection.modelId];
14
+ if (selection.variant)
15
+ args.push("--variant", selection.variant);
16
+ if (selection.nativeAgent)
17
+ args.push("--agent", selection.nativeAgent);
18
+ args.push(...selection.args, prompt);
19
+ command = args.map(quote).join(" ");
20
+ env = { OPENCODE_CONFIG_CONTENT: JSON.stringify(buildOpenCodeRuntimeConfig(selection, config)) };
21
+ }
22
+ else if (selection.runtimeAdapter === "codex") {
23
+ const args = ["codex", "exec", "--json", "--model", selection.modelName, ...selection.args, prompt];
24
+ command = args.map(quote).join(" ");
25
+ }
26
+ else
27
+ throw new Error(`No direct runtime adapter for ${selection.runtimeAdapter}`); const timeout = config.orchestration?.worker?.timeoutSeconds ?? 1800; const result = await runProcess(command, { cwd: root, timeoutMs: timeout * 1000, env }); return { provider: selection.runtimeAdapter, model: selection.modelName, logicalAgent: selection.logicalAgent, nativeAgent: selection.nativeAgent, runtime: selection.runtimeName, profile: selection.profile, exitCode: result.exitCode, stdout: result.stdout, stderr: result.stderr }; }
28
+ }
29
+ function quote(value) { return `'${value.replaceAll("'", "'\\''")}'`; }
30
+ //# sourceMappingURL=direct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct.js","sourceRoot":"","sources":["../../src/workers/direct.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AgentExecutionSelection } from "../agents/types.js";
2
+ import type { HarnessProjectConfig } from "../core/types.js";
3
+ import type { WorkerExecutor } from "./types.js";
4
+ export declare function createWorkerExecutor(config: HarnessProjectConfig, selection?: AgentExecutionSelection): WorkerExecutor;
@@ -0,0 +1,10 @@
1
+ import { DirectWorkerExecutor } from "./direct.js";
2
+ import { PaseoWorkerExecutor } from "./paseo.js";
3
+ import { PodmanWorkerExecutor } from "./podman.js";
4
+ export function createWorkerExecutor(config, selection) { const requested = selection?.transport && selection.transport !== "inherit" ? selection.transport : (config.orchestration?.provider ?? "none"); switch (requested) {
5
+ case "paseo": return new PaseoWorkerExecutor();
6
+ case "podman": return new PodmanWorkerExecutor();
7
+ case "direct": return new DirectWorkerExecutor();
8
+ default: throw new Error(`No executable orchestration transport configured: ${requested}`);
9
+ } }
10
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/workers/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,UAAU,oBAAoB,CAAC,MAA4B,EAAE,SAAmC,IAAoB,MAAM,SAAS,GAAG,SAAS,EAAE,SAAS,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,SAAS,EAAE,CAAC;IAAC,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,mBAAmB,EAAE,CAAC;IAAC,KAAK,QAAQ,CAAC,CAAC,OAAO,IAAI,oBAAoB,EAAE,CAAC;IAAC,KAAK,QAAQ,CAAC,CAAC,OAAO,IAAI,oBAAoB,EAAE,CAAC;IAAC,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qDAAqD,SAAS,EAAE,CAAC,CAAC;AAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { AgentExecutionSelection } from "../agents/types.js";
2
+ import type { HarnessProjectConfig, RepairPacket, TaskContract, WorkerSession } from "../core/types.js";
3
+ import type { WorkerExecutor } from "./types.js";
4
+ export declare class PaseoWorkerExecutor implements WorkerExecutor {
5
+ readonly name = "paseo";
6
+ doctor(root: string, _config: HarnessProjectConfig, selection?: AgentExecutionSelection): Promise<{
7
+ ok: boolean;
8
+ message: string;
9
+ }>;
10
+ start(root: string, config: HarnessProjectConfig, contract: TaskContract, selection?: AgentExecutionSelection): Promise<WorkerSession>;
11
+ repair(root: string, config: HarnessProjectConfig, contract: TaskContract, session: WorkerSession, packet: RepairPacket, selection?: AgentExecutionSelection): Promise<WorkerSession>;
12
+ private launch;
13
+ private waitAndCollect;
14
+ }
@@ -0,0 +1,29 @@
1
+ import { validateExecutionCapabilities } from "../agents/permissions.js";
2
+ import { deliveryWorkspaceId } from "../delivery/handoff.js";
3
+ import { commandExists, runProcess } from "../utils/process.js";
4
+ import { buildRepairPrompt, buildWorkerPrompt } from "./prompt.js";
5
+ export class PaseoWorkerExecutor {
6
+ name = "paseo";
7
+ async doctor(root, _config, selection) { const ok = await commandExists("paseo", root); if (!ok)
8
+ return { ok: false, message: "Paseo CLI not found." }; if (selection) {
9
+ const issues = validateExecutionCapabilities(selection, "paseo");
10
+ if (issues.length)
11
+ return { ok: false, message: issues.join("; ") };
12
+ } return { ok: true, message: "Paseo CLI detected." }; }
13
+ async start(root, config, contract, selection) { return this.launch(root, config, contract, buildWorkerPrompt(contract, selection), selection); }
14
+ async repair(root, config, contract, session, packet, selection) { if (session.id && (!selection || session.logicalAgent === selection.logicalAgent)) {
15
+ const send = await runProcess(`paseo send ${quote(session.id)} --no-wait ${quote(buildRepairPrompt(packet))}`, { cwd: root, timeoutMs: 60_000 });
16
+ if (send.exitCode !== 0)
17
+ throw new Error(`Paseo failed to send repair prompt: ${send.stderr || send.stdout}`);
18
+ return this.waitAndCollect(root, config, session);
19
+ } return this.launch(root, config, contract, `${buildWorkerPrompt(contract, selection)}\n\n${buildRepairPrompt(packet)}`, selection); }
20
+ async launch(root, config, contract, prompt, selection) { const worker = config.orchestration?.worker; const provider = selection?.paseoProvider ?? worker?.provider ?? "opencode"; const model = selection ? (selection.runtimeAdapter === "codex" ? selection.modelName : selection.modelId) : worker?.model; const title = `${worker?.titlePrefix ?? "aeh"}-${contract.task.id}-${selection?.logicalAgent ?? "worker"}`; const workspaceId = await deliveryWorkspaceId(root, config, contract.task.id); const parts = ["paseo run --background --quiet", `--title ${quote(title)}`, `--provider ${quote(provider)}`]; if (workspaceId)
21
+ parts.push(`--workspace ${quote(workspaceId)}`); if (model)
22
+ parts.push(`--model ${quote(model)}`); parts.push(quote(prompt)); const launch = await runProcess(parts.join(" "), { cwd: root, timeoutMs: 60_000 }); if (launch.exitCode !== 0)
23
+ throw new Error(`Paseo failed to launch worker: ${launch.stderr || launch.stdout}`); const id = launch.stdout.split(/\r?\n/).map((line) => line.trim()).filter(Boolean).at(-1); if (!id)
24
+ throw new Error("Paseo returned no agent id for the background worker."); return this.waitAndCollect(root, config, { id, provider, model, logicalAgent: selection?.logicalAgent, nativeAgent: selection?.nativeAgent, runtime: selection?.runtimeName, profile: selection?.profile, exitCode: 0, stdout: launch.stdout, stderr: "" }); }
25
+ async waitAndCollect(root, config, session) { const timeout = config.orchestration?.worker?.timeoutSeconds ?? 1800; const wait = await runProcess(`paseo wait ${quote(session.id)} --timeout ${timeout}`, { cwd: root, timeoutMs: (timeout + 30) * 1000 }); if (wait.exitCode !== 0)
26
+ return { ...session, exitCode: wait.exitCode, stderr: wait.stderr || wait.stdout }; const logs = await runProcess(`paseo logs ${quote(session.id)} --tail 30`, { cwd: root, timeoutMs: 60_000 }); return { ...session, exitCode: 0, stdout: logs.stdout || wait.stdout || session.stdout, stderr: [session.stderr, wait.stderr, logs.stderr].filter(Boolean).join("\n") }; }
27
+ }
28
+ function quote(value) { return `'${value.replaceAll("'", "'\\''")}'`; }
29
+ //# sourceMappingURL=paseo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paseo.js","sourceRoot":"","sources":["../../src/workers/paseo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { AgentExecutionSelection } from "../agents/types.js";
2
+ import type { HarnessProjectConfig, RepairPacket, TaskContract, WorkerSession } from "../core/types.js";
3
+ import type { WorkerExecutor } from "./types.js";
4
+ export declare class PodmanWorkerExecutor implements WorkerExecutor {
5
+ readonly name = "podman";
6
+ doctor(root: string, config: HarnessProjectConfig): Promise<{
7
+ ok: boolean;
8
+ message: string;
9
+ }>;
10
+ start(root: string, config: HarnessProjectConfig, contract: TaskContract, selection?: AgentExecutionSelection): Promise<WorkerSession>;
11
+ repair(root: string, config: HarnessProjectConfig, contract: TaskContract, _session: WorkerSession, packet: RepairPacket, selection?: AgentExecutionSelection): Promise<WorkerSession>;
12
+ private run;
13
+ }
@@ -0,0 +1,22 @@
1
+ import path from "node:path";
2
+ import { buildOpenCodeRuntimeConfig } from "../agents/permissions.js";
3
+ import { commandExists, runProcess } from "../utils/process.js";
4
+ import { buildRepairPrompt, buildWorkerPrompt } from "./prompt.js";
5
+ export class PodmanWorkerExecutor {
6
+ name = "podman";
7
+ async doctor(root, config) { const ok = await commandExists("podman", root); if (!ok)
8
+ return { ok: false, message: "Podman CLI not found." }; if (!config.security?.sandbox?.image)
9
+ return { ok: false, message: "security.sandbox.image is required for Podman worker execution." }; return { ok: true, message: "Podman worker sandbox configured." }; }
10
+ async start(root, config, contract, selection) { return this.run(root, config, contract, buildWorkerPrompt(contract, selection), selection); }
11
+ async repair(root, config, contract, _session, packet, selection) { return this.run(root, config, contract, `${buildWorkerPrompt(contract, selection)}\n\n${buildRepairPrompt(packet)}`, selection); }
12
+ async run(root, config, contract, prompt, selection) { const sandbox = config.security?.sandbox; const image = sandbox?.image; if (!image)
13
+ throw new Error("Podman image is not configured."); const runtime = selection?.runtimeAdapter ?? "opencode"; if (runtime !== "opencode")
14
+ throw new Error(`Podman executor currently supports OpenCode runtime; selected ${runtime}.`); const model = selection?.modelId ?? config.orchestration?.worker?.model; const mounts = [`-v ${quote(`${root}:/workspace:rw`)}`]; for (const relative of sealedArtifacts(config, contract))
15
+ mounts.push(`-v ${quote(`${path.resolve(root, relative)}:/workspace/${relative}:ro`)}`); const network = sandbox?.network === false ? "--network none" : ""; const extra = (sandbox?.extraArgs ?? []).map(quote).join(" "); const runtimeConfig = selection ? JSON.stringify(buildOpenCodeRuntimeConfig(selection, config)) : undefined; const envArg = runtimeConfig ? `-e ${quote(`OPENCODE_CONFIG_CONTENT=${runtimeConfig}`)}` : ""; const args = ["opencode", "run", "--auto"]; if (model)
16
+ args.push("--model", model); if (selection?.variant)
17
+ args.push("--variant", selection.variant); if (selection?.nativeAgent)
18
+ args.push("--agent", selection.nativeAgent); args.push(...(selection?.args ?? []), prompt); const inner = `cd /workspace && ${args.map(quote).join(" ")}`; const command = `podman run --rm -i --userns=keep-id ${network} ${envArg} ${extra} ${mounts.join(" ")} ${quote(image)} sh -lc ${quote(inner)}`; const timeout = config.orchestration?.worker?.timeoutSeconds ?? 1800; const result = await runProcess(command, { cwd: root, timeoutMs: timeout * 1000 }); return { provider: runtime, model: selection?.modelName ?? model, logicalAgent: selection?.logicalAgent, nativeAgent: selection?.nativeAgent, runtime: selection?.runtimeName, profile: selection?.profile, exitCode: result.exitCode, stdout: result.stdout, stderr: result.stderr }; }
19
+ }
20
+ function sealedArtifacts(config, contract) { const contractsDir = config.sdd?.contractsDir ?? ".harness/contracts"; return [...new Set([`${contractsDir}/${contract.task.id}.yaml`, `.harness/seals/${contract.task.id}.json`, ...Object.values(contract.source ?? {}).filter((value) => Boolean(value))])]; }
21
+ function quote(value) { return `'${value.replaceAll("'", "'\\''")}'`; }
22
+ //# sourceMappingURL=podman.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"podman.js","sourceRoot":"","sources":["../../src/workers/podman.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AgentExecutionSelection } from "../agents/types.js";
2
+ import type { RepairPacket, TaskContract } from "../core/types.js";
3
+ export declare function buildWorkerPrompt(contract: TaskContract, selection?: AgentExecutionSelection): string;
4
+ export declare function buildRepairPrompt(packet: RepairPacket): string;
@@ -0,0 +1,4 @@
1
+ import { permissionSummary } from "../agents/permissions.js";
2
+ export function buildWorkerPrompt(contract, selection) { const sources = Object.entries(contract.source ?? {}).filter(([, value]) => Boolean(value)).map(([key, value]) => `- ${key}: ${value}`).join("\n"); const requirements = (contract.requirements ?? []).map((item) => `- ${item.id}: ${item.description ?? "see spec"}`).join("\n"); const identity = selection ? `Logical agent: ${selection.logicalAgent}\nRole: ${selection.role}\nDomains: ${selection.domains.join(", ") || "generic"}\nAgent charter: ${selection.description ?? "Follow the role/domain boundaries in the TaskContract."}\nRuntime: ${selection.runtimeName}\nModel alias: @${selection.modelAlias}\nNative agent: ${selection.nativeAgent ?? "none"}\nSkills: ${selection.skills.join(", ") || "none"}\nMCPs: ${selection.mcps.join(", ") || "none"}\nPermissions: ${permissionSummary(selection)}\nOutput contract: ${selection.outputContract ?? "none"}` : "Legacy worker configuration."; return `You are the implementation worker for task ${contract.task.id}: ${contract.task.title}.\n\n${identity}\n\nThe lead agent owns architecture and requirements. Implement only the approved task contract.\n\nRead these authoritative artifacts before editing:\n${sources || "- TaskContract only"}\n\nRequirements:\n${requirements || "- See TaskContract/spec"}\n\nRules:\n- Do not modify the TaskContract, its seal, or SDD/acceptance artifacts.\n- Do not expand scope or redesign unrelated architecture.\n- Respect allowed/forbidden paths and dependency/schema constraints.\n- Do not exceed the configured permission/capability envelope.\n- Add or update implementation-level tests as needed; do not weaken frozen acceptance criteria.\n- Run focused checks before reporting completion.\n- Report files changed, tests run, results, deviations and remaining concerns.\n`; }
3
+ export function buildRepairPrompt(packet) { const failures = packet.failures.map((failure) => `- ${failure.id} [${failure.category}]: ${failure.message}${failure.details ? `\n evidence: ${JSON.stringify(failure.details)}` : ""}`).join("\n"); return `Repair attempt ${packet.attempt} for ${packet.taskId}.\nFailure type: ${packet.failureType ?? "unspecified"}\nRecovery action: ${packet.recoveryAction ?? "same-agent"}\n\nThe deterministic harness rejected the implementation for these reasons:\n${failures}\n\nMake the smallest targeted changes needed to satisfy these failures. Do not modify frozen contracts/specs/acceptance artifacts and do not broaden scope. Re-run the focused failing checks before reporting completion.`; }
4
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/workers/prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,UAAU,iBAAiB,CAAC,QAAsB,EAAE,SAAmC,IAAY,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,kBAAkB,SAAS,CAAC,YAAY,WAAW,SAAS,CAAC,IAAI,cAAc,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,oBAAoB,SAAS,CAAC,WAAW,IAAI,wDAAwD,cAAc,SAAS,CAAC,WAAW,mBAAmB,SAAS,CAAC,UAAU,mBAAmB,SAAS,CAAC,WAAW,IAAI,MAAM,aAAa,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,WAAW,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,kBAAkB,iBAAiB,CAAC,SAAS,CAAC,sBAAsB,SAAS,CAAC,cAAc,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,OAAO,8CAA8C,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK,QAAQ,QAAQ,4JAA4J,OAAO,IAAI,qBAAqB,sBAAsB,YAAY,IAAI,yBAAyB,6fAA6f,CAAC,CAAC,CAAC;AACt0D,MAAM,UAAU,iBAAiB,CAAC,MAAoB,IAAY,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,QAAQ,MAAM,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,kBAAkB,MAAM,CAAC,OAAO,QAAQ,MAAM,CAAC,MAAM,oBAAoB,MAAM,CAAC,WAAW,IAAI,aAAa,sBAAsB,MAAM,CAAC,cAAc,IAAI,YAAY,iFAAiF,QAAQ,6NAA6N,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { HarnessProjectConfig, RepairPacket, TaskContract, WorkerSession } from "../core/types.js";
2
+ import type { AgentExecutionSelection } from "../agents/types.js";
3
+ export interface WorkerExecutor {
4
+ readonly name: string;
5
+ doctor(root: string, config: HarnessProjectConfig, selection?: AgentExecutionSelection): Promise<{
6
+ ok: boolean;
7
+ message: string;
8
+ }>;
9
+ start(root: string, config: HarnessProjectConfig, contract: TaskContract, selection?: AgentExecutionSelection): Promise<WorkerSession>;
10
+ repair(root: string, config: HarnessProjectConfig, contract: TaskContract, session: WorkerSession, packet: RepairPacket, selection?: AgentExecutionSelection): Promise<WorkerSession>;
11
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/workers/types.ts"],"names":[],"mappings":""}