agentic-engineering-harness 0.6.12 → 0.6.14

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 (67) hide show
  1. package/dist/agents/outputContracts.d.ts +44 -1
  2. package/dist/agents/outputContracts.js +12 -2
  3. package/dist/agents/outputContracts.js.map +1 -1
  4. package/dist/agents/reviewLifecycle.js +54 -14
  5. package/dist/agents/reviewLifecycle.js.map +1 -1
  6. package/dist/agents/waveExecutor.d.ts +2 -13
  7. package/dist/audit/run.d.ts +7 -0
  8. package/dist/audit/run.js +198 -32
  9. package/dist/audit/run.js.map +1 -1
  10. package/dist/core/run.js +103 -28
  11. package/dist/core/run.js.map +1 -1
  12. package/dist/main.js +118 -23
  13. package/dist/main.js.map +1 -1
  14. package/dist/operations/artifacts.d.ts +13 -0
  15. package/dist/operations/artifacts.js +45 -0
  16. package/dist/operations/artifacts.js.map +1 -0
  17. package/dist/operations/change.d.ts +11 -0
  18. package/dist/operations/change.js +144 -0
  19. package/dist/operations/change.js.map +1 -0
  20. package/dist/operations/completion.d.ts +4 -1
  21. package/dist/operations/completion.js +69 -89
  22. package/dist/operations/completion.js.map +1 -1
  23. package/dist/operations/controller.d.ts +8 -5
  24. package/dist/operations/controller.js +270 -131
  25. package/dist/operations/controller.js.map +1 -1
  26. package/dist/operations/executionContext.d.ts +15 -0
  27. package/dist/operations/executionContext.js +91 -0
  28. package/dist/operations/executionContext.js.map +1 -0
  29. package/dist/operations/interactive.js +6 -1
  30. package/dist/operations/interactive.js.map +1 -1
  31. package/dist/operations/leadBinding.d.ts +2 -0
  32. package/dist/operations/leadBinding.js +22 -0
  33. package/dist/operations/leadBinding.js.map +1 -0
  34. package/dist/operations/liveness.d.ts +35 -0
  35. package/dist/operations/liveness.js +308 -0
  36. package/dist/operations/liveness.js.map +1 -0
  37. package/dist/operations/mcp.js +72 -55
  38. package/dist/operations/mcp.js.map +1 -1
  39. package/dist/operations/monitorProcess.d.ts +8 -0
  40. package/dist/operations/monitorProcess.js +33 -0
  41. package/dist/operations/monitorProcess.js.map +1 -0
  42. package/dist/operations/portfolio.d.ts +35 -0
  43. package/dist/operations/portfolio.js +158 -0
  44. package/dist/operations/portfolio.js.map +1 -0
  45. package/dist/operations/state.d.ts +174 -17
  46. package/dist/operations/state.js +178 -163
  47. package/dist/operations/state.js.map +1 -1
  48. package/dist/operations/supervisor.d.ts +38 -0
  49. package/dist/operations/supervisor.js +195 -0
  50. package/dist/operations/supervisor.js.map +1 -0
  51. package/dist/paseo/launchSpec.d.ts +4 -0
  52. package/dist/paseo/launchSpec.js +32 -25
  53. package/dist/paseo/launchSpec.js.map +1 -1
  54. package/dist/paseo/sdk.d.ts +5 -0
  55. package/dist/paseo/sdk.js +35 -87
  56. package/dist/paseo/sdk.js.map +1 -1
  57. package/dist/paseo/start.d.ts +1 -1
  58. package/dist/paseo/start.js +46 -86
  59. package/dist/paseo/start.js.map +1 -1
  60. package/dist/workers/agentPrompt.d.ts +2 -0
  61. package/dist/workers/agentPrompt.js +157 -183
  62. package/dist/workers/agentPrompt.js.map +1 -1
  63. package/docs/OPERATION_SUPERVISION.md +198 -0
  64. package/package.json +1 -1
  65. package/presets/agents/orchestration.jsonc +14 -4
  66. package/skills/engineering-workflow/SKILL.md +149 -104
  67. package/templates/AGENTS.md +8 -0
package/dist/audit/run.js CHANGED
@@ -11,14 +11,21 @@ import { calculateQuality, evaluateFinalQualityGate } from "../agents/qualityCon
11
11
  import { createWorktreeCheckpoint, rollbackWorktreeCheckpoint } from "../agents/gitCheckpoint.js";
12
12
  import { createControlPlaneSnapshot } from "../core/controlPlane.js";
13
13
  import { sealTask } from "../core/seal.js";
14
- import { updateCurrentOperationPhase } from "../operations/state.js";
14
+ import { currentOperationContext, loadOperation, resolveOperationStateRoot, setOperationStage } from "../operations/state.js";
15
+ import { consolidateWithOperationSupervisor, ensureOperationSupervisor, maybeRotateOperationSupervisor, settleDrainingSupervisorGenerations } from "../operations/supervisor.js";
15
16
  import { runValidationCommand } from "../validators/commands.js";
16
17
  import { runConfiguredValidators } from "../validators/registry.js";
17
18
  import { dispatchMaterializedAgentPrompt, materializeAgentPrompt } from "../workers/agentPrompt.js";
18
19
  import { recordEvent } from "../telemetry/events.js";
19
20
  import { runProcess } from "../utils/process.js";
20
21
  const AUDIT_OUTPUT_DIR = ".harness/audits";
21
- const DEFAULT_AUDIT_REVIEWERS = ["code-quality-reviewer", "architecture-reviewer", "security-reviewer", "test-quality-reviewer", "test-reviewer"];
22
+ const DEFAULT_AUDIT_REVIEWERS = [
23
+ "code-quality-reviewer",
24
+ "architecture-reviewer",
25
+ "security-reviewer",
26
+ "test-quality-reviewer",
27
+ "test-reviewer"
28
+ ];
22
29
  const AUDIT_REVIEWER_BUDGET = { low: 5, medium: 6, high: 8 };
23
30
  export async function runAudit(root, config, input) {
24
31
  const startedAt = new Date().toISOString();
@@ -35,32 +42,77 @@ export async function runAudit(root, config, input) {
35
42
  const reviewers = selectAuditReviewers(topology, input);
36
43
  const sessions = [];
37
44
  const validationChecks = [];
38
- const findings = [];
45
+ const rawFindings = [];
39
46
  let restoredPaths = [];
40
- await recordEvent(root, config, "harness.audit.start", { auditId, request: input.request, reviewers, dirtyPaths, commit });
47
+ await recordEvent(root, config, "harness.audit.start", {
48
+ auditId,
49
+ request: input.request,
50
+ reviewers,
51
+ dirtyPaths,
52
+ commit
53
+ });
54
+ await operationStage(root, "supervision", "RUNNING");
55
+ const supervisor = await ensureOperationSupervisor(root, config, contract, topology, {
56
+ required: true,
57
+ forceMaterialize: true
58
+ });
59
+ if (!supervisor?.agentId) {
60
+ throw new Error("AEH_OPERATION_SUPERVISOR_UNAVAILABLE: AUDIT requires a materialized semantic supervisor.");
61
+ }
62
+ await operationStage(root, "supervision", "COMPLETED");
63
+ let outputs = [];
41
64
  try {
42
- await updateCurrentOperationPhase(root, "materializing-reviewers");
65
+ await operationStage(root, "materializing-reviewers", "RUNNING");
43
66
  const prepared = await Promise.all(reviewers.map((reviewer) => prepareAuditReviewer(root, config, contract, topology, reviewer)));
44
- await updateCurrentOperationPhase(root, "validating");
45
- for (const command of config.validation?.commands ?? [])
67
+ await operationStage(root, "materializing-reviewers", "COMPLETED");
68
+ await operationStage(root, "validating", "RUNNING");
69
+ for (const command of config.validation?.commands ?? []) {
46
70
  validationChecks.push(classifyValidationCheck(await runValidationCommand(root, command)));
71
+ }
47
72
  validationChecks.push(...(await runConfiguredValidators(root, config, contract, baseRef, [])).map(classifyValidationCheck));
48
- await updateCurrentOperationPhase(root, "reviewing");
49
- const outputs = await Promise.all(prepared.map((reviewer) => runPreparedAuditReviewer(root, config, contract, reviewer, input, validationChecks, dirtyPaths)));
73
+ await operationStage(root, "validating", "COMPLETED");
74
+ await operationStage(root, "reviewing", "RUNNING");
75
+ outputs = await Promise.all(prepared.map((reviewer) => runPreparedAuditReviewer(root, config, contract, reviewer, input, validationChecks, dirtyPaths)));
50
76
  for (const output of outputs) {
51
77
  sessions.push(output.session);
52
- findings.push(...output.findings);
78
+ // Reviewer-local finding IDs are not guaranteed globally unique. Prefix
79
+ // them before supervisor consolidation so provenance is deterministic.
80
+ rawFindings.push(...output.findings.map((finding) => ({
81
+ ...finding,
82
+ id: `${output.reviewer}:${finding.id}`
83
+ })));
53
84
  }
85
+ await operationStage(root, "reviewing", "COMPLETED");
54
86
  }
55
87
  finally {
56
88
  restoredPaths = await rollbackWorktreeCheckpoint(root, checkpoint);
57
89
  }
58
- await updateCurrentOperationPhase(root, "consolidating");
59
- const deduped = dedupeFindings(findings);
90
+ await operationStage(root, "consolidating", "RUNNING");
91
+ const sourceArtifacts = await reviewerArtifacts(root, outputs);
92
+ const consolidation = await consolidateWithOperationSupervisor(root, config, contract, topology, {
93
+ key: "audit-reviewers",
94
+ purpose: "AUDIT reviewer findings",
95
+ findings: rawFindings,
96
+ sourceArtifacts,
97
+ deterministicEvidence: validationChecks
98
+ });
99
+ sessions.push(consolidation.session);
100
+ const deduped = dedupeFindings(consolidation.output.consolidatedFindings);
101
+ await operationStage(root, "consolidating", "COMPLETED", {
102
+ artifact: consolidation.artifact
103
+ });
104
+ await maybeRotateOperationSupervisor(root, config, contract, topology);
105
+ const operationId = currentOperationContext().id;
106
+ if (operationId)
107
+ await settleDrainingSupervisorGenerations(root, operationId);
60
108
  const quality = calculateQuality(deduped.findings, config);
61
109
  const qualityGate = evaluateFinalQualityGate(deduped.findings, config);
62
110
  const validationDegraded = validationChecks.some((check) => check.status === "FAIL" || check.status === "WARN");
63
- const status = validationDegraded ? "DEGRADED" : deduped.findings.length ? "FINDINGS" : "CLEAN";
111
+ const status = validationDegraded
112
+ ? "DEGRADED"
113
+ : deduped.findings.length
114
+ ? "FINDINGS"
115
+ : "CLEAN";
64
116
  const report = {
65
117
  version: 1,
66
118
  auditId,
@@ -80,21 +132,46 @@ export async function runAudit(root, config, input) {
80
132
  productionSafe: !validationChecks.some((check) => check.status === "FAIL") && qualityGate.pass,
81
133
  sessions,
82
134
  restoredPaths,
83
- controlPlaneSha256: snapshot.compositeSha256
135
+ controlPlaneSha256: snapshot.compositeSha256,
136
+ supervisor: {
137
+ generation: supervisor.generation,
138
+ consolidationArtifact: consolidation.artifact,
139
+ summary: consolidation.output.summary,
140
+ conflicts: consolidation.output.conflicts.length,
141
+ missingEvidence: consolidation.output.missingEvidence
142
+ }
84
143
  };
85
144
  await persistAudit(root, report);
86
- await recordEvent(root, config, "harness.audit.finish", { auditId, status, findings: report.findings.length, debtPoints: report.debtPoints, productionSafe: report.productionSafe });
145
+ await recordEvent(root, config, "harness.audit.finish", {
146
+ auditId,
147
+ status,
148
+ findings: report.findings.length,
149
+ rawFindings: rawFindings.length,
150
+ debtPoints: report.debtPoints,
151
+ productionSafe: report.productionSafe,
152
+ supervisorGeneration: supervisor.generation,
153
+ consolidationArtifact: consolidation.artifact
154
+ });
87
155
  return report;
88
156
  }
89
157
  export async function loadAuditReport(root, auditId) {
90
158
  return JSON.parse(await fs.readFile(path.resolve(root, AUDIT_OUTPUT_DIR, `${auditId}.json`), "utf8"));
91
159
  }
92
- export function classifyValidationCheck(check) { return { ...check, failureClass: classifyAuditFailure(check) }; }
160
+ export function classifyValidationCheck(check) {
161
+ return { ...check, failureClass: classifyAuditFailure(check) };
162
+ }
93
163
  export function classifyAuditFailure(check) {
94
164
  if (check.status === "PASS" || check.status === "SKIP")
95
165
  return "NONE";
96
166
  const details = check.details ?? {};
97
- const text = [check.message, String(details.stderr ?? ""), String(details.stdout ?? ""), String(details.error ?? "")].join("\n").toLowerCase();
167
+ const text = [
168
+ check.message,
169
+ String(details.stderr ?? ""),
170
+ String(details.stdout ?? ""),
171
+ String(details.error ?? "")
172
+ ]
173
+ .join("\n")
174
+ .toLowerCase();
98
175
  if (/\b(eperm|eacces|permission denied|operation not permitted|sandbox|seccomp|denied by policy)\b/.test(text))
99
176
  return "SANDBOX_DENIAL";
100
177
  if (/\b(enoent|command not found|not found:|cannot find module|module not found|missing dependency|no such file or directory)\b/.test(text))
@@ -106,7 +183,23 @@ export function classifyAuditFailure(check) {
106
183
  return "TOOL_FAILURE";
107
184
  }
108
185
  function auditContract(auditId, input, baseRef) {
109
- return { version: 1, task: { id: auditId, title: `Audit: ${input.request.slice(0, 120)}` }, git: { baseRef }, scope: { allowed: input.files ?? [] }, routing: { intent: "audit", domains: input.domains ?? [], risk: input.risk ?? "low", reviewers: input.reviewers ?? [] }, constraints: { breakingApiChanges: false, newDependencies: false, schemaChanges: false } };
186
+ return {
187
+ version: 1,
188
+ task: { id: auditId, title: `Audit: ${input.request.slice(0, 120)}` },
189
+ git: { baseRef },
190
+ scope: { allowed: input.files ?? [] },
191
+ routing: {
192
+ intent: "audit",
193
+ domains: input.domains ?? [],
194
+ risk: input.risk ?? "low",
195
+ reviewers: input.reviewers ?? []
196
+ },
197
+ constraints: {
198
+ breakingApiChanges: false,
199
+ newDependencies: false,
200
+ schemaChanges: false
201
+ }
202
+ };
110
203
  }
111
204
  async function materializeAuditContract(root, config, contract) {
112
205
  const contractsDir = path.resolve(root, config.sdd?.contractsDir ?? ".harness/contracts");
@@ -115,39 +208,102 @@ async function materializeAuditContract(root, config, contract) {
115
208
  }
116
209
  export function selectAuditReviewers(topology, input) {
117
210
  const risk = input.risk ?? "low";
118
- const routed = resolveRoute(topology, { intent: "audit", domains: input.domains ?? [], files: input.files ?? [], risk }).reviewers;
211
+ const routed = resolveRoute(topology, {
212
+ intent: "audit",
213
+ domains: input.domains ?? [],
214
+ files: input.files ?? [],
215
+ risk
216
+ }).reviewers;
119
217
  const explicitlyRequested = [...new Set(input.reviewers ?? [])];
120
- const ordered = [...new Set([...explicitlyRequested, ...routed, ...DEFAULT_AUDIT_REVIEWERS])];
218
+ const ordered = [
219
+ ...new Set([...explicitlyRequested, ...routed, ...DEFAULT_AUDIT_REVIEWERS])
220
+ ];
121
221
  const available = ordered.filter((name) => topology.agents[name]?.role === "reviewer" && !topology.agents[name]?.disabled);
122
- const fallback = Object.values(topology.agents).filter((agent) => agent.role === "reviewer" && !agent.disabled).map((agent) => agent.name);
222
+ const fallback = Object.values(topology.agents)
223
+ .filter((agent) => agent.role === "reviewer" && !agent.disabled)
224
+ .map((agent) => agent.name);
123
225
  const candidates = available.length ? available : fallback;
124
226
  const budget = Math.max(AUDIT_REVIEWER_BUDGET[risk], explicitlyRequested.length);
125
227
  return candidates.slice(0, budget);
126
228
  }
127
229
  async function prepareAuditReviewer(root, config, contract, topology, reviewer) {
128
230
  const base = executionSelectionForAgent(topology, reviewer);
129
- const selection = { ...base, permissions: { ...base.permissions, write: "deny", gitWrite: "deny", delegate: "deny" } };
130
- const materialized = await materializeAgentPrompt(root, config, contract, selection, { outputContract: "reviewer", phase: "review", operationKind: "audit" });
231
+ const selection = {
232
+ ...base,
233
+ permissions: { ...base.permissions, write: "deny", gitWrite: "deny", delegate: "deny" }
234
+ };
235
+ const materialized = await materializeAgentPrompt(root, config, contract, selection, {
236
+ outputContract: "reviewer",
237
+ phase: "review",
238
+ operationKind: "audit"
239
+ });
131
240
  return { reviewer, selection, materialized };
132
241
  }
133
242
  async function runPreparedAuditReviewer(root, config, contract, prepared, input, checks, dirtyPaths) {
134
243
  const session = await dispatchMaterializedAgentPrompt(root, config, contract, prepared.selection, prepared.materialized, buildAuditReviewerPrompt(input, prepared.reviewer, checks, dirtyPaths), { outputContract: "reviewer", phase: "review", operationKind: "audit" });
135
- if (session.exitCode !== 0)
136
- return { session, findings: [syntheticFinding(prepared.reviewer, `Audit reviewer runtime exited with code ${session.exitCode}.`)] };
244
+ if (session.exitCode !== 0) {
245
+ return {
246
+ reviewer: prepared.reviewer,
247
+ session,
248
+ findings: [
249
+ syntheticFinding(prepared.reviewer, `Audit reviewer runtime exited with code ${session.exitCode}.`)
250
+ ]
251
+ };
252
+ }
137
253
  try {
138
254
  const output = reviewerOutputSchema.parse(extractMarkedJson(session.stdout, session.stderr));
139
- if (output.verdict === "FAIL" && output.findings.length === 0)
140
- return { session, findings: [syntheticFinding(prepared.reviewer, "Audit reviewer returned FAIL without a structured finding.")] };
141
- return { session, findings: output.findings };
255
+ if (output.verdict === "FAIL" && output.findings.length === 0) {
256
+ return {
257
+ reviewer: prepared.reviewer,
258
+ session,
259
+ findings: [
260
+ syntheticFinding(prepared.reviewer, "Audit reviewer returned FAIL without a structured finding.")
261
+ ]
262
+ };
263
+ }
264
+ return { reviewer: prepared.reviewer, session, findings: output.findings };
142
265
  }
143
266
  catch (error) {
144
- return { session, findings: [syntheticFinding(prepared.reviewer, `Invalid audit reviewer output contract: ${String(error)}`)] };
267
+ return {
268
+ reviewer: prepared.reviewer,
269
+ session,
270
+ findings: [
271
+ syntheticFinding(prepared.reviewer, `Invalid audit reviewer output contract: ${String(error)}`)
272
+ ]
273
+ };
145
274
  }
146
275
  }
147
276
  function buildAuditReviewerPrompt(input, reviewer, checks, dirtyPaths) {
148
277
  return `You are ${reviewer} performing an AEH read-only engineering AUDIT.\n\nRequest:\n${input.request}\n\nScope hints: ${(input.files ?? []).join(", ") || "repository-wide"}\nDomains: ${(input.domains ?? []).join(", ") || "unspecified"}\nRisk: ${input.risk ?? "low"}\n\nThis is analysis only. Do not edit, create, delete, format, stage or commit repository files. Findings must be concrete, evidenced and actionable. Do not report style-only noise already enforced by deterministic tooling. Do not silently dismiss a deterministic failure as environment noise; use the supplied failure classification as evidence and state uncertainty when code correctness cannot be established.\n\nThe worktree had these pre-existing dirty paths when the audit started: ${dirtyPaths.join(", ") || "none"}. Do not treat pre-existing local diffs as committed source truth; inspect HEAD versions when a finding depends on one of those paths.\n\nDeterministic validation evidence:\n${JSON.stringify(checks, null, 2)}\n\nReturn the reviewer output contract as native JSON when supported, otherwise exactly one marker line:\nAEH_RESULT_JSON={"verdict":"PASS|FAIL|PASS_WITH_WARNINGS","findings":[],"finalizationSafety":"SAFE|BLOCKED|RISK_KNOWN","followUp":[]}`;
149
278
  }
150
- function syntheticFinding(agent, evidence) { return { id: `AUDIT-${agent}-SYSTEM`, severity: "critical", category: "audit-system", location: { file: ".harness" }, evidence, impact: "The requested audit could not be completed reliably.", recommendedFix: "Repair the reviewer/runtime contract and rerun the audit.", suggestedAgent: agent, exceptionType: "SYSTEM_FAILURE" }; }
279
+ function syntheticFinding(agent, evidence) {
280
+ return {
281
+ id: `AUDIT-${agent}-SYSTEM`,
282
+ severity: "critical",
283
+ category: "audit-system",
284
+ location: { file: ".harness" },
285
+ evidence,
286
+ impact: "The requested audit could not be completed reliably.",
287
+ recommendedFix: "Repair the reviewer/runtime contract and rerun the audit.",
288
+ suggestedAgent: agent,
289
+ exceptionType: "SYSTEM_FAILURE"
290
+ };
291
+ }
292
+ async function reviewerArtifacts(root, outputs) {
293
+ const operationId = currentOperationContext().id;
294
+ if (!operationId)
295
+ return [];
296
+ const operation = await loadOperation(resolveOperationStateRoot(root), operationId);
297
+ return outputs
298
+ .map((output) => output.session.id ? operation.participants[output.session.id]?.resultArtifact : undefined)
299
+ .filter((value) => Boolean(value));
300
+ }
301
+ async function operationStage(root, name, status, options = {}) {
302
+ const operationId = currentOperationContext().id;
303
+ if (!operationId)
304
+ return;
305
+ await setOperationStage(resolveOperationStateRoot(root), operationId, name, status, options);
306
+ }
151
307
  async function persistAudit(root, report) {
152
308
  const outputDir = path.resolve(root, AUDIT_OUTPUT_DIR);
153
309
  await fs.mkdir(outputDir, { recursive: true });
@@ -155,6 +311,16 @@ async function persistAudit(root, report) {
155
311
  await fs.writeFile(file, `${JSON.stringify(report, null, 2)}\n`);
156
312
  await fs.writeFile(path.join(outputDir, "latest.json"), `${JSON.stringify({ auditId: report.auditId, report: path.relative(root, file), finishedAt: report.finishedAt }, null, 2)}\n`);
157
313
  }
158
- function createAuditId(request) { const stamp = new Date().toISOString().replace(/[-:]/g, "").replace(/\.\d{3}Z$/, "Z"); const hash = crypto.createHash("sha256").update(request).digest("hex").slice(0, 8); return `AUDIT-${stamp}-${hash}`; }
159
- async function gitCommit(root) { const result = await runProcess("git rev-parse HEAD", { cwd: root, timeoutMs: 10_000 }); return result.exitCode === 0 ? result.stdout.trim() || undefined : undefined; }
314
+ function createAuditId(request) {
315
+ const stamp = new Date()
316
+ .toISOString()
317
+ .replace(/[-:]/g, "")
318
+ .replace(/\.\d{3}Z$/, "Z");
319
+ const hash = crypto.createHash("sha256").update(request).digest("hex").slice(0, 8);
320
+ return `AUDIT-${stamp}-${hash}`;
321
+ }
322
+ async function gitCommit(root) {
323
+ const result = await runProcess("git rev-parse HEAD", { cwd: root, timeoutMs: 10_000 });
324
+ return result.exitCode === 0 ? result.stdout.trim() || undefined : undefined;
325
+ }
160
326
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/audit/run.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAA0B,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAA+C,MAAM,iCAAiC,CAAC;AAC1I,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,+BAA+B,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACpG,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AA4CjD,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAC3C,MAAM,uBAAuB,GAAG,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,eAAe,CAAC,CAAC;AAClJ,MAAM,qBAAqB,GAA6B,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAEvF,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,MAA4B,EAAE,KAAmB;IAC5F,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,MAAM,CAAC;IACrD,MAAM,UAAU,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC7F,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,gBAAgB,GAA2B,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,IAAI,aAAa,GAAa,EAAE,CAAC;IAEjC,MAAM,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3H,IAAI,CAAC;QACH,MAAM,2BAA2B,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAElI,MAAM,2BAA2B,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACtD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE;YAAE,gBAAgB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACnJ,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAE5H,MAAM,2BAA2B,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/J,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;IACrG,CAAC;YAAS,CAAC;QACT,aAAa,GAAG,MAAM,0BAA0B,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,2BAA2B,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,wBAAwB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvE,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAChH,MAAM,MAAM,GAAgB,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7G,MAAM,MAAM,GAAgB;QAC1B,OAAO,EAAE,CAAC;QACV,OAAO;QACP,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM;QACN,SAAS;QACT,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;QACrE,SAAS;QACT,gBAAgB;QAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW;QACX,cAAc,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI;QAC9F,QAAQ;QACR,aAAa;QACb,kBAAkB,EAAE,QAAQ,CAAC,eAAe;KAC7C,CAAC;IACF,MAAM,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IACrL,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,OAAe;IACjE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,OAAO,OAAO,CAAC,EAAE,MAAM,CAAC,CAAgB,CAAC;AACvH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAsB,IAA0B,OAAO,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAEzJ,MAAM,UAAU,oBAAoB,CAAC,KAAsB;IACzD,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACtE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/I,IAAI,+FAA+F,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,gBAAgB,CAAC;IACxI,IAAI,4HAA4H,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,oBAAoB,CAAC;IACzK,IAAI,gHAAgH,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAC9J,IAAI,4DAA4D,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,mBAAmB,CAAC;IACxG,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,KAAmB,EAAE,OAAe;IAC1E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,CAAC;AAC3W,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,IAAY,EAAE,MAA4B,EAAE,QAAsB;IACxG,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,YAAY,IAAI,oBAAoB,CAAC,CAAC;IAC1F,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpG,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAA+B,EAAE,KAAmB;IACvF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC;IACjC,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC;IACnI,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,mBAAmB,EAAE,GAAG,MAAM,EAAE,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3H,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3I,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACjF,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAY,EAAE,MAA4B,EAAE,QAAsB,EAAE,QAA+B,EAAE,QAAgB;IACvJ,MAAM,IAAI,GAAG,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,SAAS,GAA4B,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;IAChJ,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9J,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,IAAY,EAAE,MAA4B,EAAE,QAAsB,EAAE,QAA+B,EAAE,KAAmB,EAAE,MAA8B,EAAE,UAAoB;IACpN,MAAM,OAAO,GAAG,MAAM,+BAA+B,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1Q,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE,2CAA2C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;IAChK,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7F,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE,4DAA4D,CAAC,CAAC,EAAE,CAAC;QACjM,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE,2CAA2C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAAC,CAAC;AACtJ,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAmB,EAAE,QAAgB,EAAE,MAA8B,EAAE,UAAoB;IAC3H,OAAO,WAAW,QAAQ,gEAAgE,KAAK,CAAC,OAAO,oBAAoB,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,iBAAiB,cAAc,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,WAAW,KAAK,CAAC,IAAI,IAAI,KAAK,4eAA4e,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,iLAAiL,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,kPAAkP,CAAC;AAC3tC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa,EAAE,QAAgB,IAAuB,OAAO,EAAE,EAAE,EAAE,SAAS,KAAK,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,sDAAsD,EAAE,cAAc,EAAE,2DAA2D,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;AAExZ,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,MAAmB;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,OAAO,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAAC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACha,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,IAAY,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/P,KAAK,UAAU,SAAS,CAAC,IAAY,IAAiC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/audit/run.ts"],"names":[],"mappings":"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"}
package/dist/core/run.js CHANGED
@@ -26,8 +26,12 @@ import { createControlPlaneSnapshot, detectControlPlaneDrift, materializeControl
26
26
  import { resolveOrganizationPolicyBundles, withOrganizationPolicies } from "../policy/bundles.js";
27
27
  import { buildRequirementEvidenceGraph, evidenceValidationCheck } from "../evidence/graph.js";
28
28
  import { enforceSandboxPolicy } from "../security/sandbox.js";
29
+ import { currentOperationContext, resolveOperationStateRoot, setOperationStage } from "../operations/state.js";
30
+ import { ensureOperationSupervisor, maybeRotateOperationSupervisor, settleDrainingSupervisorGenerations } from "../operations/supervisor.js";
29
31
  export async function runTask(root, config, contract, options) {
30
32
  const controlRoot = path.resolve(root);
33
+ const operationStateRoot = resolveOperationStateRoot(root);
34
+ const operationId = currentOperationContext().id;
31
35
  const policyResolution = await resolveOrganizationPolicyBundles(controlRoot, config);
32
36
  const effectiveConfig = withOrganizationPolicies(config, policyResolution);
33
37
  const workspaceRoot = path.resolve(await deliveryWorkspacePath(controlRoot, effectiveConfig, contract.task.id) ?? controlRoot);
@@ -62,6 +66,14 @@ export async function runTask(root, config, contract, options) {
62
66
  let selection = topologyState.selection;
63
67
  if (selection)
64
68
  selection = enforceSandboxPolicy(selection, effectiveConfig, effectiveContract.routing?.risk ?? "low").selection;
69
+ // SPEC/RUN is multi-phase by construction. QUICK remains cheap for a single
70
+ // worker and materializes its LLM supervisor only if review/remediation is needed.
71
+ const quickReviewEnabled = effectiveContract.mode === "quick" && effectiveConfig.workflow?.reviews?.reviewQuick === true && Boolean(route?.reviewers.length);
72
+ if (operationId && topology && (effectiveContract.mode !== "quick" || quickReviewEnabled)) {
73
+ await runStage(operationStateRoot, operationId, "supervision", "RUNNING");
74
+ await ensureOperationSupervisor(workspaceRoot, effectiveConfig, effectiveContract, topology, { required: true, forceMaterialize: true });
75
+ await runStage(operationStateRoot, operationId, "supervision", "COMPLETED");
76
+ }
65
77
  let controller;
66
78
  try {
67
79
  controller = await createControlPlaneSnapshot(controlRoot, effectiveConfig, effectiveContract.task.id);
@@ -82,10 +94,19 @@ export async function runTask(root, config, contract, options) {
82
94
  let waveResult;
83
95
  let executionSessions = [];
84
96
  let report;
85
- if (topology && route && selection && effectiveConfig.workflow?.planning?.enabled !== false && effectiveContract.mode !== "quick") {
97
+ const planningEnabled = topology && route && selection && effectiveConfig.workflow?.planning?.enabled !== false && effectiveContract.mode !== "quick";
98
+ if (planningEnabled) {
99
+ if (operationId)
100
+ await runStage(operationStateRoot, operationId, "planning", "RUNNING");
86
101
  waveResult = await executePlannerWaves({ root: workspaceRoot, stateRoot: controlRoot, config: effectiveConfig, contract: effectiveContract, topology, implementationSelection: selection, controller, revalidate: async () => verifyAfterWorker(workspaceRoot, controlRoot, effectiveConfig, effectiveContract, controller) });
87
102
  executionSessions = [...waveResult.sessions];
103
+ if (operationId) {
104
+ await runStage(operationStateRoot, operationId, "planning", waveResult.aggregateSession?.exitCode === 0 || !waveResult.aggregateSession ? "COMPLETED" : "FAILED");
105
+ await maybeRotateOperationSupervisor(workspaceRoot, effectiveConfig, effectiveContract, topology);
106
+ }
88
107
  }
108
+ if (operationId)
109
+ await runStage(operationStateRoot, operationId, "implementation", "RUNNING");
89
110
  if (waveResult?.used && waveResult.aggregateSession) {
90
111
  worker = waveResult.aggregateSession;
91
112
  report = withWorkerExecutionCheck(waveResult.report ?? await verifyAfterWorker(workspaceRoot, controlRoot, effectiveConfig, effectiveContract, controller), worker);
@@ -99,6 +120,8 @@ export async function runTask(root, config, contract, options) {
99
120
  executionSessions.push(worker);
100
121
  report = withWorkerExecutionCheck(await verifyAfterWorker(workspaceRoot, controlRoot, effectiveConfig, effectiveContract, controller), worker);
101
122
  }
123
+ if (operationId)
124
+ await runStage(operationStateRoot, operationId, "implementation", report.status === "PASS" ? "COMPLETED" : "FAILED");
102
125
  let evidenceGraph;
103
126
  const attachEvidence = async (candidate) => {
104
127
  if (candidate.status !== "PASS" || effectiveConfig.evidence?.enabled !== true)
@@ -112,6 +135,10 @@ export async function runTask(root, config, contract, options) {
112
135
  let attempts = 0;
113
136
  let executor = createWorkerExecutor(effectiveConfig, selection);
114
137
  while (report.status === "FAIL" && attempts < maxRepairs) {
138
+ if (operationId && topology) {
139
+ await ensureOperationSupervisor(workspaceRoot, effectiveConfig, effectiveContract, topology, { required: true, forceMaterialize: true });
140
+ await runStage(operationStateRoot, operationId, "remediation", "RUNNING");
141
+ }
115
142
  attempts += 1;
116
143
  const failureType = classifyFailure({ report, worker });
117
144
  const recovery = topology ? resolveRecoveryStep(topology, failureType, attempts) : { action: "same-agent" };
@@ -147,11 +174,20 @@ export async function runTask(root, config, contract, options) {
147
174
  report = withWorkerExecutionCheck(await verifyAfterWorker(workspaceRoot, controlRoot, effectiveConfig, effectiveContract, controller), worker);
148
175
  report = await attachEvidence(report);
149
176
  await recordEvent(controlRoot, effectiveConfig, "harness.repair.finish", { taskId: effectiveContract.task.id, attempt: attempts, status: report.status, agent: selection?.logicalAgent });
177
+ if (operationId && topology)
178
+ await maybeRotateOperationSupervisor(workspaceRoot, effectiveConfig, effectiveContract, topology);
150
179
  }
180
+ if (operationId && attempts > 0)
181
+ await runStage(operationStateRoot, operationId, "remediation", report.status === "PASS" ? "COMPLETED" : "FAILED");
151
182
  let reviewSummary;
152
183
  let reviewFindings = [];
153
184
  let reviewSessions = [];
154
185
  if (report.status === "PASS" && topology && route && selection) {
186
+ const willRunReviewers = effectiveContract.mode !== "quick" || effectiveConfig.workflow?.reviews?.reviewQuick === true;
187
+ if (operationId && willRunReviewers && route.reviewers.length) {
188
+ await ensureOperationSupervisor(workspaceRoot, effectiveConfig, effectiveContract, topology, { required: true, forceMaterialize: true });
189
+ await runStage(operationStateRoot, operationId, "review", "RUNNING");
190
+ }
155
191
  const review = await runReviewLifecycle({ root: workspaceRoot, stateRoot: controlRoot, config: effectiveConfig, contract: effectiveContract, topology, route, implementationSelection: selection, report, revalidate: async () => verifyAfterWorker(workspaceRoot, controlRoot, effectiveConfig, effectiveContract, controller) });
156
192
  report = mergeChecks(withWorkerExecutionCheck(review.report, worker), review.checks);
157
193
  reviewFindings = review.findings.findings;
@@ -159,6 +195,10 @@ export async function runTask(root, config, contract, options) {
159
195
  const quality = review.qualityHistory.at(-1);
160
196
  reviewSummary = { status: review.status, finalState: review.finalState, humanRequired: review.humanRequired, rounds: review.rounds, findings: review.findings.outputCount, debtScore: quality.debtScore, debtPoints: quality.debtPoints, counts: quality.counts, convergence: quality.convergence, leadAccepted: review.leadAccepted, reviewerSessions: review.sessions.length };
161
197
  await recordEvent(controlRoot, effectiveConfig, "harness.review.finish", { taskId: effectiveContract.task.id, status: review.status, finalState: review.finalState, humanRequired: review.humanRequired, rounds: review.rounds, findings: review.findings.outputCount, debtScore: quality.debtScore, convergence: quality.convergence, leadAccepted: review.leadAccepted, sessions: review.sessions.length });
198
+ if (operationId && willRunReviewers && route.reviewers.length) {
199
+ await runStage(operationStateRoot, operationId, "review", review.status === "PASS" ? "COMPLETED" : review.humanRequired ? "BLOCKED" : "FAILED");
200
+ await maybeRotateOperationSupervisor(workspaceRoot, effectiveConfig, effectiveContract, topology);
201
+ }
162
202
  if (report.status === "PASS" && effectiveConfig.evidence?.enabled === true) {
163
203
  evidenceGraph = await buildRequirementEvidenceGraph({ root: workspaceRoot, stateRoot: controlRoot, config: effectiveConfig, contract: effectiveContract, report, plan: waveResult?.plan, findings: reviewFindings, sessions: [...executionSessions, ...reviewSessions] });
164
204
  report = mergeChecks(report, [evidenceValidationCheck(evidenceGraph, effectiveConfig)]);
@@ -166,10 +206,14 @@ export async function runTask(root, config, contract, options) {
166
206
  }
167
207
  let deliverySummary;
168
208
  if (report.status === "PASS") {
209
+ if (operationId)
210
+ await runStage(operationStateRoot, operationId, "delivery", "RUNNING");
169
211
  try {
170
212
  deliverySummary = await finalizeAcceptedIssue(workspaceRoot, effectiveConfig, effectiveContract);
171
213
  if (deliverySummary.status !== "SKIPPED")
172
214
  await recordEvent(controlRoot, effectiveConfig, "harness.delivery.finalize", { taskId: effectiveContract.task.id, status: deliverySummary.status, commitSha: deliverySummary.commitSha, pullRequest: deliverySummary.pullRequest });
215
+ if (operationId)
216
+ await runStage(operationStateRoot, operationId, "delivery", "COMPLETED");
173
217
  }
174
218
  catch (error) {
175
219
  deliverySummary = deliveryFinalizationFailure(error);
@@ -177,6 +221,8 @@ export async function runTask(root, config, contract, options) {
177
221
  if (reviewSummary && deliverySummary.humanRequired)
178
222
  reviewSummary = { ...reviewSummary, status: "FAIL", finalState: "BLOCKED_EXTERNAL", humanRequired: true };
179
223
  await recordEvent(controlRoot, effectiveConfig, "harness.delivery.finalize", { taskId: effectiveContract.task.id, status: deliverySummary.status, humanRequired: deliverySummary.humanRequired, message: deliverySummary.message });
224
+ if (operationId)
225
+ await runStage(operationStateRoot, operationId, "delivery", deliverySummary.humanRequired ? "BLOCKED" : "FAILED", { message: deliverySummary.message });
180
226
  }
181
227
  }
182
228
  if (report.status === "PASS" && effectiveConfig.evidence?.enabled === true) {
@@ -186,6 +232,8 @@ export async function runTask(root, config, contract, options) {
186
232
  const drift = controller ? await detectControlPlaneDrift(controlRoot, controller) : { changed: [], missing: [], added: [], drifted: false };
187
233
  if (controller)
188
234
  report = mergeChecks(report, [{ id: "trust.control-plane-freeze", category: "trust-boundary", status: "PASS", message: drift.drifted ? "Control-plane files changed during the run, but the run remained governed by its frozen controller snapshot; changes activate next run." : "Control-plane snapshot remained unchanged during the run.", details: { controllerSha256: controller.compositeSha256, gitCommit: controller.gitCommit, drift } }]);
235
+ if (operationId && topology)
236
+ await settleDrainingSupervisorGenerations(workspaceRoot, operationId);
189
237
  const usageText = [...executionSessions, ...reviewSessions].map((session) => `${session.stdout}\n${session.stderr}`).join("\n");
190
238
  worker.metrics = extractUsageMetrics(usageText || `${worker.stdout}\n${worker.stderr}`);
191
239
  const metrics = buildRunMetrics({ firstPassSuccess, repairCount: attempts, humanInterventions: await countHumanInterventions(controlRoot, effectiveConfig, effectiveContract.task.id, startedAt), durationMs: Date.now() - startedMs, usage: worker.metrics });
@@ -197,32 +245,59 @@ export async function runTask(root, config, contract, options) {
197
245
  await recordEvent(controlRoot, effectiveConfig, "harness.run.finish", { taskId: effectiveContract.task.id, status: result.status, attempts, mode: effectiveContract.mode ?? "spec", workspaceRoot: workspaceRoot === controlRoot ? undefined : workspaceRoot, agent: selection?.logicalAgent, runtime: selection?.runtimeName, model: selection?.modelId, profile: selection?.profile, waves: result.planning?.waves, controllerSha256: result.controlPlane?.sha256, controllerDrifted: result.controlPlane?.drifted, evidenceComplete: result.evidence?.complete, evidenceSha256: result.evidence?.sha256, reviewStatus: reviewSummary?.status, reviewFinalState: reviewSummary?.finalState, humanRequired: reviewSummary?.humanRequired ?? deliverySummary?.humanRequired, debtScore: reviewSummary?.debtScore, deliveryStatus: deliverySummary?.status, pullRequest: deliverySummary?.pullRequest, durationMs: metrics.durationMs, totalTokens: metrics.usage.totalTokens ?? 0, costUsd: metrics.usage.costUsd ?? 0 });
198
246
  return result;
199
247
  }
200
- async function resolveTopology(root, config, contract, profileOverride) { if (!config.agents)
201
- return {}; const explicitProfile = profileOverride ?? contract.routing?.profile; const profile = explicitProfile ?? config.agents.activeProfile; try {
202
- const audit = await auditAgentTopology(root, config, profile, { checkGenerated: !explicitProfile });
203
- if (!audit.ok)
204
- throw new Error(`Agent topology audit failed:\n${audit.checks.filter((check) => check.status === "FAIL").map((check) => `- ${check.id}: ${check.message}`).join("\n")}`);
205
- const topology = await loadResolvedAgentTopology(root, config, profile);
206
- const { route, selection } = selectExecutionForTask(topology, contract);
207
- const transport = selection.transport === "inherit" ? (config.orchestration?.provider ?? "none") : selection.transport;
208
- const issues = validateExecutionCapabilities(selection, transport);
209
- if (issues.length)
210
- throw new Error(`Selected agent ${selection.logicalAgent} is not executable: ${issues.join("; ")}`);
211
- await recordEvent(root, config, "harness.agent.route", { taskId: contract.task.id, profile, agent: selection.logicalAgent, runtime: selection.runtimeName, model: selection.modelId, nativeAgent: selection.nativeAgent, transport, ruleIds: route.ruleIds, reviewers: route.reviewers });
212
- return { topology, route, selection };
248
+ async function resolveTopology(root, config, contract, profileOverride) {
249
+ if (!config.agents)
250
+ return {};
251
+ const explicitProfile = profileOverride ?? contract.routing?.profile;
252
+ const profile = explicitProfile ?? config.agents.activeProfile;
253
+ try {
254
+ const audit = await auditAgentTopology(root, config, profile, { checkGenerated: !explicitProfile });
255
+ if (!audit.ok)
256
+ throw new Error(`Agent topology audit failed:\n${audit.checks.filter((check) => check.status === "FAIL").map((check) => `- ${check.id}: ${check.message}`).join("\n")}`);
257
+ const topology = await loadResolvedAgentTopology(root, config, profile);
258
+ const { route, selection } = selectExecutionForTask(topology, contract);
259
+ const transport = selection.transport === "inherit" ? (config.orchestration?.provider ?? "none") : selection.transport;
260
+ const issues = validateExecutionCapabilities(selection, transport);
261
+ if (issues.length)
262
+ throw new Error(`Selected agent ${selection.logicalAgent} is not executable: ${issues.join("; ")}`);
263
+ await recordEvent(root, config, "harness.agent.route", { taskId: contract.task.id, profile, agent: selection.logicalAgent, runtime: selection.runtimeName, model: selection.modelId, nativeAgent: selection.nativeAgent, transport, ruleIds: route.ruleIds, reviewers: route.reviewers });
264
+ return { topology, route, selection };
265
+ }
266
+ catch (error) {
267
+ if (config.agents.required)
268
+ throw error;
269
+ await recordEvent(root, config, "harness.agent.topology-fallback", { taskId: contract.task.id, error: String(error) });
270
+ return {};
271
+ }
272
+ }
273
+ function withWorkerExecutionCheck(report, worker) {
274
+ const checks = report.checks.filter((check) => check.id !== "agent.execution");
275
+ checks.unshift({ id: "agent.execution", category: "agent-runtime", status: worker.exitCode === 0 ? "PASS" : "FAIL", message: worker.exitCode === 0 ? `Agent ${worker.logicalAgent ?? worker.provider} completed successfully.` : `Agent runtime exited with code ${worker.exitCode}.`, details: worker.exitCode === 0 ? undefined : { stderr: worker.stderr.slice(-4000), stdout: worker.stdout.slice(-4000), logicalAgent: worker.logicalAgent, runtime: worker.runtime, model: worker.model } });
276
+ return { ...report, checks, status: checks.some((check) => check.status === "FAIL") ? "FAIL" : "PASS" };
277
+ }
278
+ function mergeChecks(report, extra) {
279
+ const byId = new Map(report.checks.map((check) => [check.id, check]));
280
+ for (const check of extra)
281
+ byId.set(check.id, check);
282
+ const checks = [...byId.values()];
283
+ return { ...report, checks, status: checks.some((check) => check.status === "FAIL") ? "FAIL" : "PASS" };
284
+ }
285
+ async function verifyAfterWorker(workspaceRoot, controlRoot, config, contract, controller) {
286
+ await refreshGraphIfConfigured(workspaceRoot, config);
287
+ const afterSnapshot = await snapshotGraph(workspaceRoot, config, contract.task.id, "after");
288
+ if (!afterSnapshot && config.codeIntelligence?.required)
289
+ throw new Error("Code intelligence is required but the Graphify after snapshot could not be created.");
290
+ return verifyTask(workspaceRoot, config, contract, { stateRoot: controlRoot, policyRoot: controller?.materializedRoot ?? controlRoot });
291
+ }
292
+ async function refreshGraphIfConfigured(root, config) {
293
+ const command = config.codeIntelligence?.refreshCommand;
294
+ if (!command)
295
+ return;
296
+ const result = await runProcess(command, { cwd: root, timeoutMs: 300_000 });
297
+ if (result.exitCode !== 0 && config.codeIntelligence?.required)
298
+ throw new Error(`Code intelligence refresh failed: ${result.stderr || result.stdout}`);
299
+ }
300
+ async function runStage(stateRoot, operationId, name, status, options = {}) {
301
+ await setOperationStage(stateRoot, operationId, name, status, options);
213
302
  }
214
- catch (error) {
215
- if (config.agents.required)
216
- throw error;
217
- await recordEvent(root, config, "harness.agent.topology-fallback", { taskId: contract.task.id, error: String(error) });
218
- return {};
219
- } }
220
- function withWorkerExecutionCheck(report, worker) { const checks = report.checks.filter((check) => check.id !== "agent.execution"); checks.unshift({ id: "agent.execution", category: "agent-runtime", status: worker.exitCode === 0 ? "PASS" : "FAIL", message: worker.exitCode === 0 ? `Agent ${worker.logicalAgent ?? worker.provider} completed successfully.` : `Agent runtime exited with code ${worker.exitCode}.`, details: worker.exitCode === 0 ? undefined : { stderr: worker.stderr.slice(-4000), stdout: worker.stdout.slice(-4000), logicalAgent: worker.logicalAgent, runtime: worker.runtime, model: worker.model } }); return { ...report, checks, status: checks.some((check) => check.status === "FAIL") ? "FAIL" : "PASS" }; }
221
- function mergeChecks(report, extra) { const byId = new Map(report.checks.map((check) => [check.id, check])); for (const check of extra)
222
- byId.set(check.id, check); const checks = [...byId.values()]; return { ...report, checks, status: checks.some((check) => check.status === "FAIL") ? "FAIL" : "PASS" }; }
223
- async function verifyAfterWorker(workspaceRoot, controlRoot, config, contract, controller) { await refreshGraphIfConfigured(workspaceRoot, config); const afterSnapshot = await snapshotGraph(workspaceRoot, config, contract.task.id, "after"); if (!afterSnapshot && config.codeIntelligence?.required)
224
- throw new Error("Code intelligence is required but the Graphify after snapshot could not be created."); return verifyTask(workspaceRoot, config, contract, { stateRoot: controlRoot, policyRoot: controller?.materializedRoot ?? controlRoot }); }
225
- async function refreshGraphIfConfigured(root, config) { const command = config.codeIntelligence?.refreshCommand; if (!command)
226
- return; const result = await runProcess(command, { cwd: root, timeoutMs: 300_000 }); if (result.exitCode !== 0 && config.codeIntelligence?.required)
227
- throw new Error(`Code intelligence refresh failed: ${result.stderr || result.stdout}`); }
228
303
  //# sourceMappingURL=run.js.map