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,233 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { executionSelectionForAgent } from "./routing.js";
4
+ import { validateExecutionCapabilities } from "./permissions.js";
5
+ import { dedupeFindings } from "./findings.js";
6
+ import { orchestratorOutputSchema, plannerOutputSchema, reviewerOutputSchema } from "./outputContracts.js";
7
+ import { extractMarkedJson } from "./structuredOutput.js";
8
+ import { analyzeQualityState, evaluateFinalQualityGate, formatDebtScore } from "./qualityConvergence.js";
9
+ import { escalationStages, nextEscalationIndex, resumeAfterReplan, selectionForStage } from "./escalation.js";
10
+ import { detectHumanException, detectRuntimeExternalException, diagnosisToException, exceptionDiagnosisSchema } from "./exceptionDetection.js";
11
+ import { createWorktreeCheckpoint, rollbackWorktreeCheckpoint } from "./gitCheckpoint.js";
12
+ import { executeAgentPrompt } from "../workers/agentPrompt.js";
13
+ import { recordEvent } from "../telemetry/events.js";
14
+ export async function runReviewLifecycle(input) {
15
+ const { root, config, contract, topology, route, implementationSelection } = input;
16
+ const stateRoot = input.stateRoot ?? root;
17
+ let report = input.report;
18
+ const sessions = [];
19
+ const checks = [];
20
+ const qualityHistory = [];
21
+ const policy = config.workflow?.reviews;
22
+ if (policy?.enabled === false)
23
+ return emptyResult(report, checks, sessions);
24
+ const isQuick = contract.mode === "quick";
25
+ const runReviewers = !isQuick || policy?.reviewQuick === true;
26
+ const reviewerNames = runReviewers ? route.reviewers : [];
27
+ const stages = escalationStages(config);
28
+ let stageIndex = 0;
29
+ let remediationRounds = 0;
30
+ let replanContext;
31
+ let deduped = reviewerNames.length ? await runReviewRound(root, stateRoot, config, contract, topology, reviewerNames, report, sessions, 0) : emptyFindings();
32
+ let state = analyzeQualityState(deduped.findings, qualityHistory, config);
33
+ qualityHistory.push(state);
34
+ await persistQualityState(stateRoot, config, contract.task.id, state);
35
+ while (true) {
36
+ const exception = detectHumanException(deduped.findings);
37
+ if (exception?.humanRequired)
38
+ return humanExceptionResult(exception, remediationRounds, report, deduped, checks, sessions, qualityHistory);
39
+ if (state.gate.pass) {
40
+ checks.push({ id: "agent.final-quality-gate", category: "agent-review", status: "PASS", message: `Final Quality Gate passed: critical=${state.counts.critical}, high=${state.counts.high}, medium=${state.counts.medium}, low=${state.counts.low}, note=${state.counts.note}, DebtScore=${formatDebtScore(state.debtScore)}.`, details: { state } });
41
+ const shouldLeadAccept = policy?.leadAcceptance !== false && (!isQuick || policy?.leadAcceptanceQuick === true);
42
+ if (!shouldLeadAccept)
43
+ return successResult(remediationRounds, report, deduped, checks, sessions, qualityHistory);
44
+ const leadResult = await runLeadAcceptance(root, config, contract, topology, report, deduped, sessions);
45
+ if (leadResult.accepted) {
46
+ checks.push({ id: "agent.lead-acceptance", category: "agent-review", status: "PASS", message: `Lead ${leadResult.agent} accepted finalization.`, details: { summary: leadResult.summary } });
47
+ return successResult(remediationRounds, report, deduped, checks, sessions, qualityHistory, true);
48
+ }
49
+ if (leadResult.externalException)
50
+ return humanExceptionResult(leadResult.externalException, remediationRounds, report, deduped, checks, sessions, qualityHistory);
51
+ if (leadResult.contractFailure) {
52
+ checks.push({ id: "agent.lead-acceptance", category: "agent-review", status: "FAIL", message: leadResult.contractFailure });
53
+ return { status: "FAIL", finalState: "SYSTEM_FAILURE", humanRequired: false, rounds: remediationRounds, report, findings: deduped, checks, sessions, qualityHistory, leadAccepted: false };
54
+ }
55
+ deduped = dedupeFindings(leadResult.unresolved.map((item, index) => leadFinding(index, item, implementationSelection.logicalAgent)));
56
+ state = analyzeQualityState(deduped.findings, qualityHistory, config);
57
+ qualityHistory.push(state);
58
+ await persistQualityState(stateRoot, config, contract.task.id, state);
59
+ stageIndex = Math.max(stageIndex, Math.min(2, Math.max(0, stages.length - 1)));
60
+ continue;
61
+ }
62
+ checks.push({ id: "agent.final-quality-gate", category: "agent-review", status: "FAIL", message: `Quality Gate not yet satisfied: ${state.gate.reasons.join("; ")}. Autonomous remediation continues.`, details: { state } });
63
+ stageIndex = nextEscalationIndex(state, stageIndex, config);
64
+ const stage = stages[stageIndex] ?? { name: "normal", action: "remediate" };
65
+ if (stage.action === "diagnose") {
66
+ const diagnosis = await runDiagnosis(root, config, contract, topology, implementationSelection, stage, state, deduped, sessions);
67
+ if (diagnosis?.humanRequired)
68
+ return humanExceptionResult(diagnosis, remediationRounds, report, deduped, checks, sessions, qualityHistory);
69
+ await recordEvent(stateRoot, config, "harness.quality.diagnosis", { taskId: contract.task.id, round: remediationRounds, stage: stage.name, classification: diagnosis?.type ?? "IMPLEMENTATION_DEFECT" });
70
+ stageIndex = Math.min(stageIndex + 1, Math.max(0, stages.length - 1));
71
+ continue;
72
+ }
73
+ if (stage.action === "replan") {
74
+ const replanned = await runAutonomousReplan(root, config, contract, topology, implementationSelection, stage, state, deduped, sessions);
75
+ if (replanned.exception?.humanRequired)
76
+ return humanExceptionResult(replanned.exception, remediationRounds, report, deduped, checks, sessions, qualityHistory);
77
+ if (replanned.plan) {
78
+ replanContext = replanned.plan;
79
+ await persistReplan(stateRoot, config, contract.task.id, remediationRounds, replanned.plan);
80
+ }
81
+ await recordEvent(stateRoot, config, "harness.quality.replan", { taskId: contract.task.id, round: remediationRounds, stage: stage.name, tasks: replanned.plan?.tasks.length ?? 0 });
82
+ stageIndex = resumeAfterReplan(config);
83
+ continue;
84
+ }
85
+ const remediationSelection = selectionForStage(topology, implementationSelection, stage);
86
+ const transport = remediationSelection.transport === "inherit" ? (config.orchestration?.provider ?? "none") : remediationSelection.transport;
87
+ const capabilityIssues = validateExecutionCapabilities(remediationSelection, transport);
88
+ if (capabilityIssues.length)
89
+ throw new Error(`Quality remediation agent ${remediationSelection.logicalAgent} is not executable: ${capabilityIssues.join("; ")}`);
90
+ const checkpoint = await createWorktreeCheckpoint(root);
91
+ remediationRounds += 1;
92
+ const remediation = await executeAgentPrompt(root, config, contract, remediationSelection, buildRemediationPrompt(contract, stage, state, deduped.findings, replanContext));
93
+ sessions.push(remediation);
94
+ const runtimeException = detectRuntimeExternalException(remediation);
95
+ if (runtimeException?.humanRequired) {
96
+ const restored = await rollbackWorktreeCheckpoint(root, checkpoint);
97
+ report = await input.revalidate();
98
+ await recordEvent(stateRoot, config, "harness.quality.rollback", { taskId: contract.task.id, round: remediationRounds, reason: "external-exception", stage: stage.name, restored });
99
+ return humanExceptionResult(runtimeException, remediationRounds, report, deduped, checks, sessions, qualityHistory);
100
+ }
101
+ if (remediation.exitCode !== 0) {
102
+ const restored = await rollbackWorktreeCheckpoint(root, checkpoint);
103
+ await recordEvent(stateRoot, config, "harness.quality.rollback", { taskId: contract.task.id, round: remediationRounds, reason: "remediation-runtime-failure", stage: stage.name, restored });
104
+ stageIndex = Math.min(stageIndex + 1, Math.max(0, stages.length - 1));
105
+ continue;
106
+ }
107
+ const candidateReport = await input.revalidate();
108
+ if (candidateReport.status === "FAIL") {
109
+ const restored = await rollbackWorktreeCheckpoint(root, checkpoint);
110
+ report = await input.revalidate();
111
+ await recordEvent(stateRoot, config, "harness.quality.rollback", { taskId: contract.task.id, round: remediationRounds, reason: "deterministic-regression", stage: stage.name, restored });
112
+ stageIndex = Math.min(stageIndex + 1, Math.max(0, stages.length - 1));
113
+ continue;
114
+ }
115
+ const candidateFindings = reviewerNames.length ? await runReviewRound(root, stateRoot, config, contract, topology, reviewerNames, candidateReport, sessions, qualityHistory.length) : emptyFindings();
116
+ const candidateState = analyzeQualityState(candidateFindings.findings, qualityHistory, config);
117
+ await persistQualityState(stateRoot, config, contract.task.id, candidateState);
118
+ if (candidateState.convergence === "REGRESSING") {
119
+ const restored = await rollbackWorktreeCheckpoint(root, checkpoint);
120
+ report = await input.revalidate();
121
+ await persistRejectedState(stateRoot, config, contract.task.id, candidateState, stage.name, restored);
122
+ await recordEvent(stateRoot, config, "harness.quality.rollback", { taskId: contract.task.id, round: remediationRounds, reason: "review-debt-regression", stage: stage.name, beforeDebtPoints: state.debtPoints, candidateDebtPoints: candidateState.debtPoints, restored });
123
+ stageIndex = Math.min(stageIndex + 1, Math.max(0, stages.length - 1));
124
+ continue;
125
+ }
126
+ report = candidateReport;
127
+ deduped = candidateFindings;
128
+ state = candidateState;
129
+ qualityHistory.push(state);
130
+ await recordEvent(stateRoot, config, "harness.review.round", { taskId: contract.task.id, round: remediationRounds, reviewers: reviewerNames, findings: deduped.outputCount, debtPoints: state.debtPoints, debtScore: state.debtScore, convergence: state.convergence, resolved: state.resolved.length, persistent: state.persistent.length, introduced: state.introduced.length, stage: stage.name, agent: remediationSelection.logicalAgent, model: remediationSelection.modelId });
131
+ }
132
+ }
133
+ async function runReviewRound(root, stateRoot, config, contract, topology, reviewerNames, report, sessions, round) {
134
+ const findings = [];
135
+ const outputs = await Promise.all(reviewerNames.map(async (name) => runReviewer(root, config, contract, topology, name, report)));
136
+ for (const output of outputs) {
137
+ sessions.push(output.session);
138
+ findings.push(...output.findings);
139
+ }
140
+ const deduped = dedupeFindings(findings);
141
+ await persistFindings(stateRoot, config, contract.task.id, round, deduped);
142
+ return deduped;
143
+ }
144
+ async function runReviewer(root, config, contract, topology, name, report) {
145
+ const selection = executionSelectionForAgent(topology, name);
146
+ const session = await executeAgentPrompt(root, config, contract, selection, buildReviewerPrompt(contract, name, report));
147
+ if (session.exitCode !== 0)
148
+ return { session, findings: [syntheticFinding(name, `Reviewer runtime exited with code ${session.exitCode}.`)] };
149
+ try {
150
+ const output = reviewerOutputSchema.parse(extractMarkedJson(session.stdout, session.stderr));
151
+ if (output.verdict === "FAIL" && output.findings.length === 0)
152
+ return { session, findings: [syntheticFinding(name, "Reviewer returned FAIL without a structured finding.")] };
153
+ return { session, findings: output.findings };
154
+ }
155
+ catch (error) {
156
+ return { session, findings: [syntheticFinding(name, `Invalid reviewer output contract: ${String(error)}`)] };
157
+ }
158
+ }
159
+ async function runDiagnosis(root, config, contract, topology, fallback, stage, state, findings, sessions) {
160
+ const selection = selectionForStage(topology, fallback, stage);
161
+ const session = await executeAgentPrompt(root, config, contract, selection, buildDiagnosisPrompt(contract, state, findings));
162
+ sessions.push(session);
163
+ const external = detectRuntimeExternalException(session);
164
+ if (external)
165
+ return external;
166
+ if (session.exitCode !== 0)
167
+ return undefined;
168
+ try {
169
+ return diagnosisToException(exceptionDiagnosisSchema.parse(extractMarkedJson(session.stdout, session.stderr)));
170
+ }
171
+ catch {
172
+ return undefined;
173
+ }
174
+ }
175
+ async function runAutonomousReplan(root, config, contract, topology, fallback, stage, state, findings, sessions) {
176
+ const selection = selectionForStage(topology, fallback, stage);
177
+ const session = await executeAgentPrompt(root, config, contract, selection, buildReplanPrompt(contract, state, findings));
178
+ sessions.push(session);
179
+ const external = detectRuntimeExternalException(session);
180
+ if (external)
181
+ return { exception: external };
182
+ if (session.exitCode !== 0)
183
+ return {};
184
+ try {
185
+ return { plan: plannerOutputSchema.parse(extractMarkedJson(session.stdout, session.stderr)) };
186
+ }
187
+ catch {
188
+ return {};
189
+ }
190
+ }
191
+ async function runLeadAcceptance(root, config, contract, topology, report, findings, sessions) {
192
+ const lead = Object.values(topology.agents).find((agent) => agent.role === "orchestrator" && !agent.disabled);
193
+ if (!lead)
194
+ return { accepted: false, agent: "<missing>", unresolved: [], contractFailure: "Lead acceptance is enabled but no orchestrator agent is available." };
195
+ const selection = executionSelectionForAgent(topology, lead.name);
196
+ const session = await executeAgentPrompt(root, config, contract, selection, buildLeadPrompt(contract, report, findings));
197
+ sessions.push(session);
198
+ const externalException = detectRuntimeExternalException(session);
199
+ if (externalException)
200
+ return { accepted: false, agent: lead.name, unresolved: [], externalException };
201
+ try {
202
+ const parsed = orchestratorOutputSchema.parse(extractMarkedJson(session.stdout, session.stderr));
203
+ const accepted = session.exitCode === 0 && parsed.finalizationSafe === true && parsed.unresolved.length === 0;
204
+ return { accepted, agent: lead.name, summary: parsed.summary, unresolved: parsed.unresolved.length ? parsed.unresolved : accepted ? [] : [parsed.summary || "Lead did not declare finalization safe."] };
205
+ }
206
+ catch (error) {
207
+ return { accepted: false, agent: lead.name, unresolved: [], contractFailure: `Lead output contract was invalid: ${String(error)}` };
208
+ }
209
+ }
210
+ function buildReviewerPrompt(contract, reviewer, report) {
211
+ return `You are reviewer ${reviewer} for ${contract.task.id}. Inspect the actual git diff from ${contract.git?.baseRef ?? "main"}, relevant source/tests, and the sealed task contract. Do not modify files. Deterministic validation currently reports ${report.status}. Return {"verdict":"PASS|FAIL|PASS_WITH_WARNINGS","findings":[{"id":"...","severity":"critical|high|medium|low|note","category":"...","location":{"file":"...","startLine":1,"endLine":1},"evidence":"...","impact":"...","recommendedFix":"...","suggestedAgent":"...","exceptionType":"IMPLEMENTATION_DEFECT|SPEC_CONTRADICTION|REQUIRES_PRODUCT_DECISION|BLOCKED_EXTERNAL|SYSTEM_FAILURE (optional)"}],"finalizationSafety":"SAFE|BLOCKED|RISK_KNOWN","followUp":[]}. Use exceptionType only when the issue cannot be resolved from the sealed requirements/repository without an external human decision or resource. Your final output MUST contain exactly one line beginning AEH_RESULT_JSON= followed by the JSON object.`;
212
+ }
213
+ function buildRemediationPrompt(contract, stage, state, findings, replan) {
214
+ return `Autonomously remediate review debt for ${contract.task.id}. Stage=${stage.name}. Current DebtScore=${formatDebtScore(state.debtScore)}; final gate requires critical=0, high=0, medium=0, low<=3 and DebtScore<=3. Three notes equal one low. Do not change sealed contracts/specs/acceptance. Critical/high/medium findings are mandatory. Resolve low/note findings as needed to reach the final debt budget without broadening scope or creating regressions. ${replan ? `A stronger planner produced this advisory remediation plan (it does not override the sealed contract):\n${JSON.stringify(replan, null, 2)}\n` : ""}Findings:\n${JSON.stringify(findings, null, 2)}\nMake the smallest coherent changes and run focused checks. Do not ask the user unless a sealed requirement is contradictory, a product decision is genuinely missing, or an external credential/permission is required.`;
215
+ }
216
+ function buildDiagnosisPrompt(contract, state, findings) {
217
+ return `Diagnose why quality remediation for ${contract.task.id} is not converging. Current convergence=${state.convergence}, DebtScore=${formatDebtScore(state.debtScore)}. Inspect the sealed contract/spec, actual diff, tests and findings. Classify ONLY as IMPLEMENTATION_DEFECT, SPEC_CONTRADICTION, REQUIRES_PRODUCT_DECISION, BLOCKED_EXTERNAL, or SYSTEM_FAILURE. Prefer IMPLEMENTATION_DEFECT when the repository/spec already determines the answer. Human intervention is justified only for true contradictions, missing product decisions, or unavailable external credentials/permissions. Return {"classification":"...","rationale":"...","recommendedAction":"..."}. Final line: AEH_RESULT_JSON=<json>. Findings=${JSON.stringify(findings.findings)}`;
218
+ }
219
+ function buildReplanPrompt(contract, state, findings) {
220
+ return `Create a new implementation strategy for ${contract.task.id} because remediation is ${state.convergence}. The sealed TaskContract/spec is immutable and authoritative; replan implementation only. Current DebtScore=${formatDebtScore(state.debtScore)}. Return the normal planner output contract with tasks[{id,summary,agent,scope,dependencies,acceptance,risk}], affectedAreas, requiredReviewers, validationGates, fallbackRouting and outOfScopeImprovements. Final line: AEH_RESULT_JSON=<json>. Findings=${JSON.stringify(findings.findings)}`;
221
+ }
222
+ function buildLeadPrompt(contract, report, findings) { return `You are the lead engineer performing final semantic acceptance for ${contract.task.id}. The deterministic report and Final Quality Gate have passed. Inspect the actual final diff, sealed requirements/QuickContract and reviewer evidence. Do not modify files. Deterministic status=${report.status}. Remaining findings=${JSON.stringify(findings.findings)}. Return {"summary":"...","delegatedAgents":[],"validationStatus":"${report.status}","unresolved":[],"finalizationSafe":true|false}. If something is unresolved, state it concretely; the Harness will attempt autonomous replanning/remediation rather than immediately asking the user. Final line: AEH_RESULT_JSON=<json>.`; }
223
+ function syntheticFinding(agent, evidence) { return { id: `REVIEW-${agent}-${Date.now()}`, severity: "critical", category: "review-contract", location: { file: "<review-output>" }, evidence, impact: "The review cannot be trusted as valid evidence.", recommendedFix: "Repair or rerun the reviewer output contract.", suggestedAgent: agent, exceptionType: "SYSTEM_FAILURE" }; }
224
+ function leadFinding(index, text, agent) { return { id: `LEAD-${index + 1}`, severity: "medium", category: "lead-unresolved", location: { file: "<lead-acceptance>" }, evidence: text, impact: "Lead semantic acceptance is not yet safe.", recommendedFix: "Replan and remediate the unresolved semantic concern without changing sealed requirements.", suggestedAgent: agent, exceptionType: "IMPLEMENTATION_DEFECT" }; }
225
+ function emptyFindings() { return { inputCount: 0, outputCount: 0, findings: [], merges: [] }; }
226
+ async function persistFindings(root, config, taskId, round, findings) { const dir = path.resolve(root, config.agents?.findingsDir ?? ".harness/findings"); await fs.mkdir(dir, { recursive: true }); await fs.writeFile(path.join(dir, `${taskId}-round-${round}.json`), `${JSON.stringify(findings, null, 2)}\n`); }
227
+ async function persistQualityState(root, config, taskId, state) { const dir = path.resolve(root, config.agents?.findingsDir ?? ".harness/findings"); await fs.mkdir(dir, { recursive: true }); await fs.writeFile(path.join(dir, `${taskId}-quality-${state.round}.json`), `${JSON.stringify(state, null, 2)}\n`); }
228
+ async function persistRejectedState(root, config, taskId, state, stage, restored) { const dir = path.resolve(root, config.agents?.findingsDir ?? ".harness/findings"); await fs.mkdir(dir, { recursive: true }); await fs.writeFile(path.join(dir, `${taskId}-rejected-${Date.now()}.json`), `${JSON.stringify({ stage, state, restored }, null, 2)}\n`); }
229
+ async function persistReplan(root, config, taskId, round, plan) { const dir = path.resolve(root, config.agents?.findingsDir ?? ".harness/findings"); await fs.mkdir(dir, { recursive: true }); await fs.writeFile(path.join(dir, `${taskId}-replan-${round}.json`), `${JSON.stringify(plan, null, 2)}\n`); }
230
+ function humanExceptionResult(exception, rounds, report, findings, checks, sessions, qualityHistory) { const nextChecks = [...checks, { id: "agent.human-on-exception", category: "agent-review", status: "FAIL", message: `${exception.type}: ${exception.rationale}`, details: { exception } }]; return { status: "FAIL", finalState: exception.type, humanRequired: true, rounds, report, findings, checks: nextChecks, sessions, qualityHistory, exception }; }
231
+ function successResult(rounds, report, findings, checks, sessions, qualityHistory, leadAccepted) { return { status: "PASS", finalState: "ACCEPTED", humanRequired: false, rounds, report, findings, checks, sessions, qualityHistory, leadAccepted }; }
232
+ function emptyResult(report, checks, sessions) { const gate = evaluateFinalQualityGate([], { version: 1, project: { name: "disabled" } }); const state = { round: 0, counts: gate.counts, debtPoints: gate.debtPoints, debtScore: gate.debtScore, fingerprint: "", findingFingerprints: [], resolved: [], persistent: [], introduced: [], convergence: "CONVERGED", gate }; return { status: "PASS", finalState: "ACCEPTED", humanRequired: false, rounds: 0, report, findings: emptyFindings(), checks, sessions, qualityHistory: [state] }; }
233
+ //# sourceMappingURL=reviewLifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewLifecycle.js","sourceRoot":"","sources":["../../src/agents/reviewLifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { TaskContract } from "../core/types.js";
2
+ import type { AgentExecutionSelection, AgentRouteContext, ResolvedAgentTopology, ResolvedRoute } from "./types.js";
3
+ export declare function resolveRoute(topology: ResolvedAgentTopology, context: AgentRouteContext): ResolvedRoute;
4
+ export declare function executionSelectionForAgent(topology: ResolvedAgentTopology, agentName: string): AgentExecutionSelection;
5
+ export declare function selectExecutionForTask(topology: ResolvedAgentTopology, contract: TaskContract): {
6
+ route: ResolvedRoute;
7
+ selection: AgentExecutionSelection;
8
+ };
9
+ export declare function selectFallbackExecution(topology: ResolvedAgentTopology, contract: TaskContract, currentAgent: string): AgentExecutionSelection | undefined;
@@ -0,0 +1,37 @@
1
+ import { minimatch } from "minimatch";
2
+ export function resolveRoute(topology, context) { const matched = topology.routing.filter((rule) => matchesRule(rule, context)).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0)); const reviewers = new Set(); const validators = new Set(); const reasons = []; let agent; for (const rule of matched) {
3
+ if (!agent && rule.use)
4
+ agent = rule.use;
5
+ for (const reviewer of rule.reviewers ?? [])
6
+ reviewers.add(reviewer);
7
+ for (const validator of rule.validators ?? [])
8
+ validators.add(validator);
9
+ reasons.push(`${rule.id}: intent=${context.intent}, domains=${(context.domains ?? []).join(",") || "none"}, files=${(context.files ?? []).length}, risk=${context.risk ?? "unspecified"}`);
10
+ } return { ruleIds: matched.map((rule) => rule.id), agent, reviewers: [...reviewers], validators: [...validators], reasons }; }
11
+ export function executionSelectionForAgent(topology, agentName) { const agent = topology.agents[agentName]; if (!agent || agent.disabled)
12
+ throw new Error(`Agent ${agentName} is unavailable.`); const model = agent.model; const runtime = agent.runtime; return { profile: topology.profile, logicalAgent: agent.name, role: agent.role, domains: agent.domains ?? [], description: agent.description, runtimeName: runtime.name, runtimeAdapter: runtime.adapter, paseoProvider: runtime.paseoProvider ?? runtime.adapter, modelAlias: model.alias, modelId: model.id, modelName: model.model, modelProvider: model.provider, variant: agent.execution.variant ?? model.variant, nativeAgent: agent.execution.nativeAgent, transport: agent.execution.transport ?? "inherit", temperature: agent.temperature ?? model.temperature, skills: agent.skills ?? [], mcps: agent.mcps ?? [], permissions: agent.permissions ?? {}, outputContract: agent.outputContract, args: [...(runtime.defaultArgs ?? []), ...(agent.execution.args ?? [])], runtimeCapabilities: runtime.capabilities ?? {} }; }
13
+ export function selectExecutionForTask(topology, contract) { const context = { intent: contract.routing?.intent ?? "implement", domains: contract.routing?.domains ?? [], files: contract.scope?.allowed ?? [], risk: contract.routing?.risk }; const route = resolveRoute(topology, context); const agentName = contract.routing?.agent ?? route.agent ?? Object.values(topology.agents).find((agent) => agent.role === "implementer" && !agent.disabled)?.name; if (!agentName)
14
+ throw new Error(`No agent route matched task ${contract.task.id} and no enabled implementer exists.`); const reviewers = new Set([...(route.reviewers ?? []), ...(contract.routing?.reviewers ?? [])]); for (const reviewer of reviewers)
15
+ if (!topology.agents[reviewer] || topology.agents[reviewer].disabled)
16
+ throw new Error(`Task ${contract.task.id} requires unavailable reviewer ${reviewer}.`); return { route: { ...route, reviewers: [...reviewers] }, selection: executionSelectionForAgent(topology, agentName) }; }
17
+ export function selectFallbackExecution(topology, contract, currentAgent) { const desiredDomains = contract.routing?.domains ?? []; const candidates = Object.values(topology.agents).filter((agent) => agent.role === "implementer" && !agent.disabled && agent.name !== currentAgent); const ranked = candidates.sort((a, b) => domainScore(b.domains ?? [], desiredDomains) - domainScore(a.domains ?? [], desiredDomains)); return ranked[0] ? executionSelectionForAgent(topology, ranked[0].name) : undefined; }
18
+ function domainScore(agentDomains, desired) { if (!desired.length)
19
+ return agentDomains.includes("*") ? 1 : 0; return desired.reduce((score, domain) => score + (agentDomains.some((pattern) => pattern === "*" || minimatch(domain, pattern) || minimatch(pattern, domain)) ? 1 : 0), 0); }
20
+ function matchesRule(rule, context) { const condition = rule.when; if (condition.intent) {
21
+ const intents = Array.isArray(condition.intent) ? condition.intent : [condition.intent];
22
+ if (!intents.includes(context.intent))
23
+ return false;
24
+ } if (condition.risk) {
25
+ const risks = Array.isArray(condition.risk) ? condition.risk : [condition.risk];
26
+ if (!context.risk || !risks.includes(context.risk))
27
+ return false;
28
+ } if (condition.domains?.length) {
29
+ const domains = context.domains ?? [];
30
+ if (!condition.domains.some((pattern) => domains.some((domain) => minimatch(domain, pattern) || minimatch(pattern, domain))))
31
+ return false;
32
+ } if (condition.files?.length) {
33
+ const files = context.files ?? [];
34
+ if (!condition.files.some((pattern) => files.some((file) => minimatch(file, pattern, { dot: true }))))
35
+ return false;
36
+ } return true; }
37
+ //# sourceMappingURL=routing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/agents/routing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function extractMarkedJson(stdout: string, stderr?: string): unknown;
@@ -0,0 +1,54 @@
1
+ export function extractMarkedJson(stdout, stderr = "") {
2
+ const candidates = [];
3
+ collectCandidateStrings(stdout, candidates);
4
+ collectCandidateStrings(stderr, candidates);
5
+ for (const candidate of candidates.reverse()) {
6
+ const marker = "AEH_RESULT_JSON=";
7
+ const index = candidate.lastIndexOf(marker);
8
+ if (index < 0)
9
+ continue;
10
+ const raw = candidate.slice(index + marker.length).trim();
11
+ const parsed = parseJsonPrefix(raw);
12
+ if (parsed !== undefined)
13
+ return parsed;
14
+ }
15
+ throw new Error("Agent output did not contain a valid AEH_RESULT_JSON=<json> marker.");
16
+ }
17
+ function collectCandidateStrings(text, output) {
18
+ output.push(text);
19
+ for (const line of text.split(/\r?\n/)) {
20
+ output.push(line);
21
+ try {
22
+ collectStrings(JSON.parse(line), output);
23
+ }
24
+ catch { /* plain log line */ }
25
+ }
26
+ }
27
+ function collectStrings(value, output) {
28
+ if (typeof value === "string") {
29
+ output.push(value);
30
+ return;
31
+ }
32
+ if (Array.isArray(value)) {
33
+ for (const item of value)
34
+ collectStrings(item, output);
35
+ return;
36
+ }
37
+ if (value && typeof value === "object")
38
+ for (const item of Object.values(value))
39
+ collectStrings(item, output);
40
+ }
41
+ function parseJsonPrefix(raw) {
42
+ try {
43
+ return JSON.parse(raw);
44
+ }
45
+ catch { /* marker may be followed by log text */ }
46
+ for (let end = raw.length; end > 1; end -= 1) {
47
+ try {
48
+ return JSON.parse(raw.slice(0, end));
49
+ }
50
+ catch { /* keep shrinking */ }
51
+ }
52
+ return undefined;
53
+ }
54
+ //# sourceMappingURL=structuredOutput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structuredOutput.js","sourceRoot":"","sources":["../../src/agents/structuredOutput.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,MAAM,GAAG,EAAE;IAC3D,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,uBAAuB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC5C,uBAAuB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC5C,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,kBAAkB,CAAC;QAClC,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,KAAK,GAAG,CAAC;YAAE,SAAS;QACxB,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;IAC1C,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY,EAAE,MAAgB;IAC7D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC;YAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC;AACD,SAAS,cAAc,CAAC,KAAc,EAAE,MAAgB;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAAC,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC7F,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAgC,CAAC;YAAE,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3I,CAAC;AACD,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,wCAAwC,CAAC,CAAC;IAClF,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC;YAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAAC,CAAC;IAC9H,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,207 @@
1
+ export type AgentRole = "orchestrator" | "planner" | "implementer" | "reviewer" | "validator" | "explorer" | "librarian" | "coordinator" | "escalation" | string;
2
+ export type AgentRisk = "low" | "medium" | "high";
3
+ export type PermissionDecision = "allow" | "ask" | "deny";
4
+ export type AgentTransport = "inherit" | "paseo" | "direct" | "podman";
5
+ export interface RuntimeCapabilities {
6
+ nativeAgent?: boolean;
7
+ nativeAgentViaPaseo?: boolean;
8
+ modelSelection?: boolean;
9
+ variantSelection?: boolean;
10
+ sessions?: boolean;
11
+ structuredOutput?: boolean;
12
+ }
13
+ export interface RuntimeDefinition {
14
+ adapter: "codex" | "opencode" | string;
15
+ paseoProvider?: string;
16
+ command?: string;
17
+ defaultArgs?: string[];
18
+ capabilities?: RuntimeCapabilities;
19
+ }
20
+ export interface RuntimeOverride extends Partial<Omit<RuntimeDefinition, "capabilities">> {
21
+ capabilities?: Partial<RuntimeCapabilities>;
22
+ }
23
+ export interface ModelDefinition {
24
+ runtime: string;
25
+ provider?: string;
26
+ model: string;
27
+ variant?: string;
28
+ temperature?: number;
29
+ options?: Record<string, unknown>;
30
+ }
31
+ export interface ModelOverride extends Partial<Omit<ModelDefinition, "options">> {
32
+ options?: Record<string, unknown>;
33
+ }
34
+ export interface AgentPermissions {
35
+ read?: PermissionDecision;
36
+ write?: PermissionDecision;
37
+ shell?: PermissionDecision;
38
+ network?: PermissionDecision;
39
+ delegate?: PermissionDecision;
40
+ review?: PermissionDecision;
41
+ validate?: PermissionDecision;
42
+ gitWrite?: PermissionDecision;
43
+ }
44
+ export interface AgentExecutionDefinition {
45
+ model: string;
46
+ runtime?: string;
47
+ nativeAgent?: string;
48
+ variant?: string;
49
+ args?: string[];
50
+ transport?: AgentTransport;
51
+ }
52
+ export interface AgentDefinition {
53
+ role: AgentRole;
54
+ domains?: string[];
55
+ description?: string;
56
+ execution: AgentExecutionDefinition;
57
+ temperature?: number;
58
+ skills?: string[];
59
+ mcps?: string[];
60
+ promptPath?: string;
61
+ orchestratorPromptPath?: string;
62
+ outputContract?: string;
63
+ permissions?: AgentPermissions;
64
+ capabilities?: string[];
65
+ disabled?: boolean;
66
+ }
67
+ export interface AgentOverride {
68
+ role?: AgentRole;
69
+ domains?: string[];
70
+ execution?: Partial<AgentExecutionDefinition>;
71
+ temperature?: number;
72
+ skills?: string[];
73
+ mcps?: string[];
74
+ promptPath?: string;
75
+ orchestratorPromptPath?: string;
76
+ outputContract?: string;
77
+ permissions?: AgentPermissions;
78
+ capabilities?: string[];
79
+ disabled?: boolean;
80
+ description?: string;
81
+ }
82
+ export interface AgentProfile {
83
+ description?: string;
84
+ models?: Record<string, ModelOverride>;
85
+ agents?: Record<string, AgentOverride>;
86
+ }
87
+ export interface RoutingCondition {
88
+ intent?: string | string[];
89
+ domains?: string[];
90
+ files?: string[];
91
+ risk?: AgentRisk | AgentRisk[];
92
+ }
93
+ export interface RoutingRule {
94
+ id: string;
95
+ priority?: number;
96
+ when: RoutingCondition;
97
+ use?: string;
98
+ reviewers?: string[];
99
+ validators?: string[];
100
+ }
101
+ export type FailureType = "PATCH_CONTEXT_MISMATCH" | "TOOL_FAILURE" | "MISSING_CONTEXT" | "WRONG_AGENT" | "VALIDATION_FAILURE" | "REVIEW_FAILURE" | "AMBIGUOUS_OUTPUT" | "CONFLICTING_RESULTS";
102
+ export interface RecoveryStep {
103
+ action: "same-agent" | "reroute" | "agent" | "lead" | "stop";
104
+ agent?: string;
105
+ }
106
+ export type RecoveryMap = Partial<Record<FailureType, RecoveryStep[]>> & Record<string, RecoveryStep[] | undefined>;
107
+ export interface CouncilDefinition {
108
+ members: Array<{
109
+ model: string;
110
+ agent?: string;
111
+ }>;
112
+ executionMode?: "parallel" | "sequential";
113
+ }
114
+ export interface AgentTopologyRemove {
115
+ runtimes?: string[];
116
+ models?: string[];
117
+ agents?: string[];
118
+ profiles?: string[];
119
+ routing?: string[];
120
+ councils?: string[];
121
+ }
122
+ export interface AgentTopologyLayer {
123
+ version: 1;
124
+ extends?: string[];
125
+ activeProfile?: string;
126
+ skillRoots?: string[];
127
+ runtimes?: Record<string, RuntimeOverride>;
128
+ models?: Record<string, ModelOverride>;
129
+ agents?: Record<string, AgentOverride>;
130
+ profiles?: Record<string, AgentProfile>;
131
+ routing?: RoutingRule[];
132
+ recovery?: RecoveryMap;
133
+ councils?: Record<string, CouncilDefinition>;
134
+ remove?: AgentTopologyRemove;
135
+ }
136
+ export interface AgentTopologySource {
137
+ version: 1;
138
+ activeProfile?: string;
139
+ skillRoots?: string[];
140
+ runtimes: Record<string, RuntimeDefinition>;
141
+ models: Record<string, ModelDefinition>;
142
+ agents: Record<string, AgentDefinition>;
143
+ profiles?: Record<string, AgentProfile>;
144
+ routing?: RoutingRule[];
145
+ recovery?: RecoveryMap;
146
+ councils?: Record<string, CouncilDefinition>;
147
+ }
148
+ export interface ResolvedModelDefinition extends ModelDefinition {
149
+ alias: string;
150
+ id: string;
151
+ }
152
+ export interface ResolvedAgentDefinition extends Omit<AgentDefinition, "execution"> {
153
+ name: string;
154
+ execution: AgentExecutionDefinition;
155
+ runtime: RuntimeDefinition & {
156
+ name: string;
157
+ };
158
+ model: ResolvedModelDefinition;
159
+ }
160
+ export interface ResolvedAgentTopology {
161
+ version: 1;
162
+ profile?: string;
163
+ skillRoots: string[];
164
+ runtimes: Record<string, RuntimeDefinition>;
165
+ models: Record<string, ResolvedModelDefinition>;
166
+ agents: Record<string, ResolvedAgentDefinition>;
167
+ routing: RoutingRule[];
168
+ recovery: RecoveryMap;
169
+ councils: Record<string, CouncilDefinition>;
170
+ }
171
+ export interface AgentRouteContext {
172
+ intent: string;
173
+ domains?: string[];
174
+ files?: string[];
175
+ risk?: AgentRisk;
176
+ }
177
+ export interface ResolvedRoute {
178
+ ruleIds: string[];
179
+ agent?: string;
180
+ reviewers: string[];
181
+ validators: string[];
182
+ reasons: string[];
183
+ }
184
+ export interface AgentExecutionSelection {
185
+ profile?: string;
186
+ logicalAgent: string;
187
+ role: AgentRole;
188
+ domains: string[];
189
+ description?: string;
190
+ runtimeName: string;
191
+ runtimeAdapter: string;
192
+ paseoProvider: string;
193
+ modelAlias: string;
194
+ modelId: string;
195
+ modelName: string;
196
+ modelProvider?: string;
197
+ variant?: string;
198
+ nativeAgent?: string;
199
+ transport: AgentTransport;
200
+ temperature?: number;
201
+ skills: string[];
202
+ mcps: string[];
203
+ permissions: AgentPermissions;
204
+ outputContract?: string;
205
+ args: string[];
206
+ runtimeCapabilities: RuntimeCapabilities;
207
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":""}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};