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.
- package/LICENSE +201 -0
- package/README.md +273 -0
- package/dist/agents/audit.d.ts +12 -0
- package/dist/agents/audit.js +14 -0
- package/dist/agents/audit.js.map +1 -0
- package/dist/agents/compiler.d.ts +8 -0
- package/dist/agents/compiler.js +103 -0
- package/dist/agents/compiler.js.map +1 -0
- package/dist/agents/config.d.ts +6 -0
- package/dist/agents/config.js +161 -0
- package/dist/agents/config.js.map +1 -0
- package/dist/agents/escalation.d.ts +9 -0
- package/dist/agents/escalation.js +75 -0
- package/dist/agents/escalation.js.map +1 -0
- package/dist/agents/exceptionDetection.d.ts +24 -0
- package/dist/agents/exceptionDetection.js +42 -0
- package/dist/agents/exceptionDetection.js.map +1 -0
- package/dist/agents/findings.d.ts +14 -0
- package/dist/agents/findings.js +40 -0
- package/dist/agents/findings.js.map +1 -0
- package/dist/agents/gitCheckpoint.d.ts +6 -0
- package/dist/agents/gitCheckpoint.js +61 -0
- package/dist/agents/gitCheckpoint.js.map +1 -0
- package/dist/agents/jsonc.d.ts +1 -0
- package/dist/agents/jsonc.js +42 -0
- package/dist/agents/jsonc.js.map +1 -0
- package/dist/agents/outputContracts.d.ts +161 -0
- package/dist/agents/outputContracts.js +16 -0
- package/dist/agents/outputContracts.js.map +1 -0
- package/dist/agents/parallelism.d.ts +14 -0
- package/dist/agents/parallelism.js +54 -0
- package/dist/agents/parallelism.js.map +1 -0
- package/dist/agents/permissions.d.ts +5 -0
- package/dist/agents/permissions.js +30 -0
- package/dist/agents/permissions.js.map +1 -0
- package/dist/agents/qualityConvergence.d.ts +44 -0
- package/dist/agents/qualityConvergence.js +77 -0
- package/dist/agents/qualityConvergence.js.map +1 -0
- package/dist/agents/recovery.d.ts +13 -0
- package/dist/agents/recovery.js +35 -0
- package/dist/agents/recovery.js.map +1 -0
- package/dist/agents/reviewLifecycle.d.ts +30 -0
- package/dist/agents/reviewLifecycle.js +233 -0
- package/dist/agents/reviewLifecycle.js.map +1 -0
- package/dist/agents/routing.d.ts +9 -0
- package/dist/agents/routing.js +37 -0
- package/dist/agents/routing.js.map +1 -0
- package/dist/agents/structuredOutput.d.ts +1 -0
- package/dist/agents/structuredOutput.js +54 -0
- package/dist/agents/structuredOutput.js.map +1 -0
- package/dist/agents/types.d.ts +207 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +221 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/config.d.ts +3 -0
- package/dist/core/config.js +59 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/doctor.d.ts +8 -0
- package/dist/core/doctor.js +59 -0
- package/dist/core/doctor.js.map +1 -0
- package/dist/core/git.d.ts +8 -0
- package/dist/core/git.js +47 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/init.d.ts +1 -0
- package/dist/core/init.js +52 -0
- package/dist/core/init.js.map +1 -0
- package/dist/core/quick.d.ts +20 -0
- package/dist/core/quick.js +49 -0
- package/dist/core/quick.js.map +1 -0
- package/dist/core/repair.d.ts +8 -0
- package/dist/core/repair.js +7 -0
- package/dist/core/repair.js.map +1 -0
- package/dist/core/run.d.ts +38 -0
- package/dist/core/run.js +165 -0
- package/dist/core/run.js.map +1 -0
- package/dist/core/sdd.d.ts +10 -0
- package/dist/core/sdd.js +88 -0
- package/dist/core/sdd.js.map +1 -0
- package/dist/core/seal.d.ts +3 -0
- package/dist/core/seal.js +74 -0
- package/dist/core/seal.js.map +1 -0
- package/dist/core/triage.d.ts +22 -0
- package/dist/core/triage.js +38 -0
- package/dist/core/triage.js.map +1 -0
- package/dist/core/types.d.ts +354 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/verify.d.ts +6 -0
- package/dist/core/verify.js +51 -0
- package/dist/core/verify.js.map +1 -0
- package/dist/delivery/finalize.d.ts +17 -0
- package/dist/delivery/finalize.js +71 -0
- package/dist/delivery/finalize.js.map +1 -0
- package/dist/delivery/handoff.d.ts +39 -0
- package/dist/delivery/handoff.js +250 -0
- package/dist/delivery/handoff.js.map +1 -0
- package/dist/entry.d.ts +2 -0
- package/dist/entry.js +112 -0
- package/dist/entry.js.map +1 -0
- package/dist/evals/runner.d.ts +4 -0
- package/dist/evals/runner.js +112 -0
- package/dist/evals/runner.js.map +1 -0
- package/dist/evals/scoring.d.ts +3 -0
- package/dist/evals/scoring.js +41 -0
- package/dist/evals/scoring.js.map +1 -0
- package/dist/evals/types.d.ts +46 -0
- package/dist/evals/types.js +2 -0
- package/dist/evals/types.js.map +1 -0
- package/dist/issues/intake.d.ts +114 -0
- package/dist/issues/intake.js +213 -0
- package/dist/issues/intake.js.map +1 -0
- package/dist/memory/benchmark.d.ts +33 -0
- package/dist/memory/benchmark.js +69 -0
- package/dist/memory/benchmark.js.map +1 -0
- package/dist/metrics/runMetrics.d.ts +9 -0
- package/dist/metrics/runMetrics.js +34 -0
- package/dist/metrics/runMetrics.js.map +1 -0
- package/dist/metrics/usage.d.ts +3 -0
- package/dist/metrics/usage.js +53 -0
- package/dist/metrics/usage.js.map +1 -0
- package/dist/provenance/generate.d.ts +30 -0
- package/dist/provenance/generate.js +96 -0
- package/dist/provenance/generate.js.map +1 -0
- package/dist/providers/engram.d.ts +8 -0
- package/dist/providers/engram.js +14 -0
- package/dist/providers/engram.js.map +1 -0
- package/dist/providers/graphify.d.ts +9 -0
- package/dist/providers/graphify.js +28 -0
- package/dist/providers/graphify.js.map +1 -0
- package/dist/providers/paseo.d.ts +8 -0
- package/dist/providers/paseo.js +14 -0
- package/dist/providers/paseo.js.map +1 -0
- package/dist/providers/types.d.ts +41 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/telemetry/events.d.ts +2 -0
- package/dist/telemetry/events.js +29 -0
- package/dist/telemetry/events.js.map +1 -0
- package/dist/telemetry/otlp.d.ts +3 -0
- package/dist/telemetry/otlp.js +57 -0
- package/dist/telemetry/otlp.js.map +1 -0
- package/dist/toolchain/config.d.ts +10 -0
- package/dist/toolchain/config.js +54 -0
- package/dist/toolchain/config.js.map +1 -0
- package/dist/toolchain/doctor.d.ts +8 -0
- package/dist/toolchain/doctor.js +56 -0
- package/dist/toolchain/doctor.js.map +1 -0
- package/dist/toolchain/mise.d.ts +10 -0
- package/dist/toolchain/mise.js +61 -0
- package/dist/toolchain/mise.js.map +1 -0
- package/dist/toolchain/resolve.d.ts +8 -0
- package/dist/toolchain/resolve.js +159 -0
- package/dist/toolchain/resolve.js.map +1 -0
- package/dist/toolchain/setup.d.ts +7 -0
- package/dist/toolchain/setup.js +141 -0
- package/dist/toolchain/setup.js.map +1 -0
- package/dist/toolchain/types.d.ts +95 -0
- package/dist/toolchain/types.js +2 -0
- package/dist/toolchain/types.js.map +1 -0
- package/dist/utils/process.d.ts +15 -0
- package/dist/utils/process.js +94 -0
- package/dist/utils/process.js.map +1 -0
- package/dist/validators/commands.d.ts +2 -0
- package/dist/validators/commands.js +28 -0
- package/dist/validators/commands.js.map +1 -0
- package/dist/validators/constraints.d.ts +6 -0
- package/dist/validators/constraints.js +30 -0
- package/dist/validators/constraints.js.map +1 -0
- package/dist/validators/diffScope.d.ts +2 -0
- package/dist/validators/diffScope.js +36 -0
- package/dist/validators/diffScope.js.map +1 -0
- package/dist/validators/evidence.d.ts +6 -0
- package/dist/validators/evidence.js +8 -0
- package/dist/validators/evidence.js.map +1 -0
- package/dist/validators/external.d.ts +3 -0
- package/dist/validators/external.js +22 -0
- package/dist/validators/external.js.map +1 -0
- package/dist/validators/gherkin.d.ts +3 -0
- package/dist/validators/gherkin.js +59 -0
- package/dist/validators/gherkin.js.map +1 -0
- package/dist/validators/graphify.d.ts +4 -0
- package/dist/validators/graphify.js +108 -0
- package/dist/validators/graphify.js.map +1 -0
- package/dist/validators/opa.d.ts +3 -0
- package/dist/validators/opa.js +43 -0
- package/dist/validators/opa.js.map +1 -0
- package/dist/validators/openapi.d.ts +25 -0
- package/dist/validators/openapi.js +98 -0
- package/dist/validators/openapi.js.map +1 -0
- package/dist/validators/registry.d.ts +2 -0
- package/dist/validators/registry.js +36 -0
- package/dist/validators/registry.js.map +1 -0
- package/dist/validators/toolCommand.d.ts +5 -0
- package/dist/validators/toolCommand.js +33 -0
- package/dist/validators/toolCommand.js.map +1 -0
- package/dist/validators/types.d.ts +13 -0
- package/dist/validators/types.js +2 -0
- package/dist/validators/types.js.map +1 -0
- package/dist/workers/agentPrompt.d.ts +3 -0
- package/dist/workers/agentPrompt.js +84 -0
- package/dist/workers/agentPrompt.js.map +1 -0
- package/dist/workers/direct.d.ts +13 -0
- package/dist/workers/direct.js +30 -0
- package/dist/workers/direct.js.map +1 -0
- package/dist/workers/factory.d.ts +4 -0
- package/dist/workers/factory.js +10 -0
- package/dist/workers/factory.js.map +1 -0
- package/dist/workers/paseo.d.ts +14 -0
- package/dist/workers/paseo.js +29 -0
- package/dist/workers/paseo.js.map +1 -0
- package/dist/workers/podman.d.ts +13 -0
- package/dist/workers/podman.js +22 -0
- package/dist/workers/podman.js.map +1 -0
- package/dist/workers/prompt.d.ts +4 -0
- package/dist/workers/prompt.js +4 -0
- package/dist/workers/prompt.js.map +1 -0
- package/dist/workers/types.d.ts +11 -0
- package/dist/workers/types.js +2 -0
- package/dist/workers/types.js.map +1 -0
- package/docs/ARCHITECTURE.md +47 -0
- package/docs/EVALS.md +28 -0
- package/docs/MEMORY.md +28 -0
- package/docs/OBSERVABILITY.md +18 -0
- package/docs/OSS_STACK.md +27 -0
- package/docs/PASEO.md +9 -0
- package/docs/PUBLISHING.md +110 -0
- package/docs/SDD.md +35 -0
- package/docs/SECURITY.md +21 -0
- package/docs/V0.2.md +42 -0
- package/docs/V0.3.md +40 -0
- package/docs/V0.4.11.md +30 -0
- package/docs/V0.4.12.md +88 -0
- package/docs/V0.4.13.md +203 -0
- package/docs/V0.4.14.md +209 -0
- package/docs/V0.4.15.md +365 -0
- package/docs/V0.4.16.md +229 -0
- package/docs/V0.4.md +28 -0
- package/docs/VALIDATION.md +23 -0
- package/package.json +18 -0
- package/policies/core/dependency-policy.rego +12 -0
- package/policies/core/schema-policy.rego +12 -0
- package/policies/core/trust-boundary.rego +17 -0
- package/presets/agents/default.jsonc +80 -0
- package/presets/docker.yaml +4 -0
- package/presets/dotnet.yaml +12 -0
- package/presets/expo.yaml +6 -0
- package/presets/generic.yaml +3 -0
- package/presets/nextjs.yaml +8 -0
- package/presets/node.yaml +6 -0
- package/presets/pnpm.yaml +6 -0
- package/presets/postgres.yaml +4 -0
- package/schemas/agent-output-planner.schema.json +1 -0
- package/schemas/agent-topology.schema.json +37 -0
- package/schemas/project.schema.json +36 -0
- package/schemas/quick-contract.schema.json +17 -0
- package/schemas/task-contract.schema.json +18 -0
- package/schemas/toolchain.schema.json +70 -0
- package/schemas/validation-report.schema.json +15 -0
- package/skills/acceptance-traceability/SKILL.md +13 -0
- package/skills/deterministic-validation/SKILL.md +15 -0
- package/skills/engineering-workflow/SKILL.md +108 -0
- package/skills/finding-dedup/SKILL.md +12 -0
- package/skills/github-delivery-lifecycle/SKILL.md +16 -0
- package/skills/implementation-worker/SKILL.md +17 -0
- package/skills/lead-engineer/SKILL.md +30 -0
- package/skills/memory-hygiene/SKILL.md +22 -0
- package/skills/prompt-drift-audit/SKILL.md +10 -0
- package/skills/recovery-classifier/SKILL.md +13 -0
- package/skills/routing-normalizer/SKILL.md +17 -0
- package/skills/sdd/SKILL.md +21 -0
- package/skills/simplify/SKILL.md +16 -0
- package/skills/verification-planning/SKILL.md +17 -0
- package/skills/worktree-lifecycle/SKILL.md +18 -0
- package/templates/AGENTS.md +37 -0
- package/templates/agents.source.jsonc +39 -0
- package/templates/otel-collector.yaml +21 -0
- package/templates/project.yaml +196 -0
- package/templates/toolchain.yaml +127 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { minimatch } from "minimatch";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { parseJsonc } from "./jsonc.js";
|
|
7
|
+
const permissionSchema = z.enum(["allow", "ask", "deny"]);
|
|
8
|
+
const runtimeCapabilitiesSchema = z.object({ nativeAgent: z.boolean().optional(), nativeAgentViaPaseo: z.boolean().optional(), modelSelection: z.boolean().optional(), variantSelection: z.boolean().optional(), sessions: z.boolean().optional(), structuredOutput: z.boolean().optional() });
|
|
9
|
+
const runtimeSchema = z.object({ adapter: z.string().min(1), paseoProvider: z.string().optional(), command: z.string().optional(), defaultArgs: z.array(z.string()).optional(), capabilities: runtimeCapabilitiesSchema.optional() });
|
|
10
|
+
const runtimeOverrideSchema = runtimeSchema.partial();
|
|
11
|
+
const modelSchema = z.object({ runtime: z.string().min(1), provider: z.string().optional(), model: z.string().min(1), variant: z.string().optional(), temperature: z.number().optional(), options: z.record(z.string(), z.unknown()).optional() });
|
|
12
|
+
const modelOverrideSchema = modelSchema.partial();
|
|
13
|
+
const executionSchema = z.object({ model: z.string().min(1), runtime: z.string().optional(), nativeAgent: z.string().optional(), variant: z.string().optional(), args: z.array(z.string()).optional(), transport: z.enum(["inherit", "paseo", "direct", "podman"]).optional() });
|
|
14
|
+
const permissionsSchema = z.object({ read: permissionSchema.optional(), write: permissionSchema.optional(), shell: permissionSchema.optional(), network: permissionSchema.optional(), delegate: permissionSchema.optional(), review: permissionSchema.optional(), validate: permissionSchema.optional(), gitWrite: permissionSchema.optional() }).optional();
|
|
15
|
+
const agentSchema = z.object({ role: z.string().min(1), domains: z.array(z.string()).optional(), description: z.string().optional(), execution: executionSchema, temperature: z.number().optional(), skills: z.array(z.string()).optional(), mcps: z.array(z.string()).optional(), promptPath: z.string().optional(), orchestratorPromptPath: z.string().optional(), outputContract: z.string().optional(), permissions: permissionsSchema, capabilities: z.array(z.string()).optional(), disabled: z.boolean().optional() });
|
|
16
|
+
const agentOverrideSchema = agentSchema.partial().extend({ execution: executionSchema.partial().optional() });
|
|
17
|
+
const profileSchema = z.object({ description: z.string().optional(), models: z.record(z.string(), modelOverrideSchema).optional(), agents: z.record(z.string(), agentOverrideSchema).optional() });
|
|
18
|
+
const routingSchema = z.object({ id: z.string().min(1), priority: z.number().optional(), when: z.object({ intent: z.union([z.string(), z.array(z.string())]).optional(), domains: z.array(z.string()).optional(), files: z.array(z.string()).optional(), risk: z.union([z.enum(["low", "medium", "high"]), z.array(z.enum(["low", "medium", "high"]))]).optional() }), use: z.string().optional(), reviewers: z.array(z.string()).optional(), validators: z.array(z.string()).optional() });
|
|
19
|
+
const recoveryStepSchema = z.object({ action: z.enum(["same-agent", "reroute", "agent", "lead", "stop"]), agent: z.string().optional() });
|
|
20
|
+
const councilSchema = z.object({ members: z.array(z.object({ model: z.string(), agent: z.string().optional() })), executionMode: z.enum(["parallel", "sequential"]).optional() });
|
|
21
|
+
const removeSchema = z.object({ runtimes: z.array(z.string()).optional(), models: z.array(z.string()).optional(), agents: z.array(z.string()).optional(), profiles: z.array(z.string()).optional(), routing: z.array(z.string()).optional(), councils: z.array(z.string()).optional() });
|
|
22
|
+
const layerSchema = z.object({ version: z.literal(1), extends: z.array(z.string().min(1)).optional(), activeProfile: z.string().optional(), skillRoots: z.array(z.string()).optional(), runtimes: z.record(z.string(), runtimeOverrideSchema).optional(), models: z.record(z.string(), modelOverrideSchema).optional(), agents: z.record(z.string(), agentOverrideSchema).optional(), profiles: z.record(z.string(), profileSchema).optional(), routing: z.array(routingSchema).optional(), recovery: z.record(z.string(), z.array(recoveryStepSchema)).optional(), councils: z.record(z.string(), councilSchema).optional(), remove: removeSchema.optional() });
|
|
23
|
+
const sourceSchema = z.object({ version: z.literal(1), activeProfile: z.string().optional(), skillRoots: z.array(z.string()).optional(), runtimes: z.record(z.string(), runtimeSchema), models: z.record(z.string(), modelSchema), agents: z.record(z.string(), agentSchema), profiles: z.record(z.string(), profileSchema).optional(), routing: z.array(routingSchema).optional(), recovery: z.record(z.string(), z.array(recoveryStepSchema)).optional(), councils: z.record(z.string(), councilSchema).optional() });
|
|
24
|
+
function packageRoot() { return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); }
|
|
25
|
+
export async function loadAgentTopologySource(root, config) {
|
|
26
|
+
const file = path.resolve(root, config.agents?.configPath ?? ".harness/agents.source.jsonc");
|
|
27
|
+
const composed = await loadComposedLayer(file, new Set());
|
|
28
|
+
return sourceSchema.parse(composed);
|
|
29
|
+
}
|
|
30
|
+
async function loadComposedLayer(file, stack) {
|
|
31
|
+
const absolute = path.resolve(file);
|
|
32
|
+
if (stack.has(absolute))
|
|
33
|
+
throw new Error(`Circular agent topology extension detected at ${absolute}.`);
|
|
34
|
+
const nextStack = new Set(stack);
|
|
35
|
+
nextStack.add(absolute);
|
|
36
|
+
const layer = layerSchema.parse(parseJsonc(await fs.readFile(absolute, "utf8")));
|
|
37
|
+
let composed = { version: 1 };
|
|
38
|
+
for (const extension of layer.extends ?? [])
|
|
39
|
+
composed = composeAgentTopologyLayers(composed, await loadComposedLayer(resolveExtension(extension, path.dirname(absolute)), nextStack));
|
|
40
|
+
return composeAgentTopologyLayers(composed, { ...layer, extends: undefined });
|
|
41
|
+
}
|
|
42
|
+
function resolveExtension(extension, fromDirectory) {
|
|
43
|
+
if (extension === "aeh:default")
|
|
44
|
+
return path.join(packageRoot(), "presets", "agents", "default.jsonc");
|
|
45
|
+
if (extension.startsWith("aeh:"))
|
|
46
|
+
throw new Error(`Unknown built-in agent topology preset ${extension}.`);
|
|
47
|
+
return path.isAbsolute(extension) ? extension : path.resolve(fromDirectory, extension);
|
|
48
|
+
}
|
|
49
|
+
export function composeAgentTopologyLayers(base, overlay) {
|
|
50
|
+
const merged = {
|
|
51
|
+
version: 1,
|
|
52
|
+
activeProfile: overlay.activeProfile ?? base.activeProfile,
|
|
53
|
+
skillRoots: union(base.skillRoots ?? [], overlay.skillRoots ?? []),
|
|
54
|
+
runtimes: mergeRecord(base.runtimes, overlay.runtimes, mergeRuntime),
|
|
55
|
+
models: mergeRecord(base.models, overlay.models, mergeModel),
|
|
56
|
+
agents: mergeRecord(base.agents, overlay.agents, mergeAgentLayer),
|
|
57
|
+
profiles: mergeRecord(base.profiles, overlay.profiles, mergeProfile),
|
|
58
|
+
routing: mergeRouting(base.routing ?? [], overlay.routing ?? []),
|
|
59
|
+
recovery: { ...(base.recovery ?? {}), ...(overlay.recovery ?? {}) },
|
|
60
|
+
councils: { ...(base.councils ?? {}), ...(overlay.councils ?? {}) }
|
|
61
|
+
};
|
|
62
|
+
return applyRemovals(merged, overlay.remove);
|
|
63
|
+
}
|
|
64
|
+
function mergeRuntime(base, overlay) { return { ...(base ?? {}), ...overlay, capabilities: { ...(base?.capabilities ?? {}), ...(overlay.capabilities ?? {}) } }; }
|
|
65
|
+
function mergeModel(base, overlay) { return { ...(base ?? {}), ...overlay, options: { ...(base?.options ?? {}), ...(overlay.options ?? {}) } }; }
|
|
66
|
+
function mergeAgentLayer(base, overlay) { return { ...(base ?? {}), ...overlay, execution: { ...(base?.execution ?? {}), ...(overlay.execution ?? {}) }, permissions: { ...(base?.permissions ?? {}), ...(overlay.permissions ?? {}) } }; }
|
|
67
|
+
function mergeProfile(base, overlay) { return { ...(base ?? {}), ...overlay, models: mergeRecord(base?.models, overlay.models, mergeModel), agents: mergeRecord(base?.agents, overlay.agents, mergeAgentLayer) }; }
|
|
68
|
+
function mergeRecord(base, overlay, merger) { if (!base && !overlay)
|
|
69
|
+
return undefined; const result = { ...(base ?? {}) }; for (const [name, value] of Object.entries(overlay ?? {}))
|
|
70
|
+
result[name] = merger(result[name], value); return result; }
|
|
71
|
+
function mergeRouting(base, overlay) { const result = [...base]; for (const rule of overlay) {
|
|
72
|
+
const index = result.findIndex((item) => item.id === rule.id);
|
|
73
|
+
if (index >= 0)
|
|
74
|
+
result[index] = rule;
|
|
75
|
+
else
|
|
76
|
+
result.push(rule);
|
|
77
|
+
} return result; }
|
|
78
|
+
function union(base, overlay) { return [...new Set([...base, ...overlay])]; }
|
|
79
|
+
function applyRemovals(layer, remove) {
|
|
80
|
+
if (!remove)
|
|
81
|
+
return layer;
|
|
82
|
+
const result = structuredClone(layer);
|
|
83
|
+
const removedAgents = deleteMatches(result.agents, remove.agents);
|
|
84
|
+
deleteMatches(result.runtimes, remove.runtimes);
|
|
85
|
+
deleteMatches(result.models, remove.models);
|
|
86
|
+
deleteMatches(result.profiles, remove.profiles);
|
|
87
|
+
deleteMatches(result.councils, remove.councils);
|
|
88
|
+
result.routing = (result.routing ?? []).filter((rule) => !matchesAny(rule.id, remove.routing ?? [])).map((rule) => ({ ...rule, use: rule.use && removedAgents.has(rule.use) ? undefined : rule.use, reviewers: (rule.reviewers ?? []).filter((name) => !removedAgents.has(name)), validators: (rule.validators ?? []).filter((name) => !removedAgents.has(name)) })).filter((rule) => Boolean(rule.use || rule.reviewers?.length || rule.validators?.length));
|
|
89
|
+
for (const [failure, steps] of Object.entries(result.recovery ?? {}))
|
|
90
|
+
result.recovery[failure] = (steps ?? []).filter((step) => !(step.action === "agent" && step.agent && removedAgents.has(step.agent)));
|
|
91
|
+
for (const council of Object.values(result.councils ?? {}))
|
|
92
|
+
council.members = council.members.filter((member) => !member.agent || !removedAgents.has(member.agent));
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
function deleteMatches(record, patterns) { const removed = new Set(); if (!record || !patterns?.length)
|
|
96
|
+
return removed; for (const name of Object.keys(record))
|
|
97
|
+
if (matchesAny(name, patterns)) {
|
|
98
|
+
delete record[name];
|
|
99
|
+
removed.add(name);
|
|
100
|
+
} return removed; }
|
|
101
|
+
function matchesAny(value, patterns) { return patterns.some((pattern) => minimatch(value, pattern, { dot: true })); }
|
|
102
|
+
export async function loadResolvedAgentTopology(root, config, profileOverride) { return resolveAgentTopology(await loadAgentTopologySource(root, config), profileOverride ?? config.agents?.activeProfile); }
|
|
103
|
+
export function resolveAgentTopology(source, profileOverride) {
|
|
104
|
+
const profileName = profileOverride ?? source.activeProfile;
|
|
105
|
+
const profile = profileName ? source.profiles?.[profileName] : undefined;
|
|
106
|
+
if (profileName && !profile)
|
|
107
|
+
throw new Error(`Unknown agent profile: ${profileName}`);
|
|
108
|
+
const models = structuredClone(source.models);
|
|
109
|
+
for (const [alias, override] of Object.entries(profile?.models ?? {})) {
|
|
110
|
+
if (!models[alias])
|
|
111
|
+
throw new Error(`Profile ${profileName} overrides unknown model alias @${alias}`);
|
|
112
|
+
models[alias] = { ...models[alias], ...override, options: { ...(models[alias].options ?? {}), ...(override.options ?? {}) } };
|
|
113
|
+
}
|
|
114
|
+
const agents = structuredClone(source.agents);
|
|
115
|
+
const overrides = Object.entries(profile?.agents ?? {}).sort(([a], [b]) => wildcardCount(b) - wildcardCount(a));
|
|
116
|
+
for (const [pattern, override] of overrides) {
|
|
117
|
+
const matched = Object.keys(agents).filter((name) => minimatch(name, pattern));
|
|
118
|
+
if (!matched.length && !/[?*\[]/.test(pattern))
|
|
119
|
+
throw new Error(`Profile ${profileName} overrides unknown agent ${pattern}`);
|
|
120
|
+
for (const name of matched)
|
|
121
|
+
agents[name] = mergeAgent(agents[name], override);
|
|
122
|
+
}
|
|
123
|
+
const resolvedModels = {};
|
|
124
|
+
for (const [alias, model] of Object.entries(models)) {
|
|
125
|
+
if (!source.runtimes[model.runtime])
|
|
126
|
+
throw new Error(`Model @${alias} references unknown runtime ${model.runtime}`);
|
|
127
|
+
const id = model.provider && !model.model.includes("/") ? `${model.provider}/${model.model}` : model.model;
|
|
128
|
+
resolvedModels[alias] = { ...model, alias, id };
|
|
129
|
+
}
|
|
130
|
+
const resolvedAgents = {};
|
|
131
|
+
for (const [name, agent] of Object.entries(agents)) {
|
|
132
|
+
const modelRef = agent.execution.model;
|
|
133
|
+
let model;
|
|
134
|
+
if (modelRef.startsWith("@")) {
|
|
135
|
+
const alias = modelRef.slice(1);
|
|
136
|
+
model = resolvedModels[alias];
|
|
137
|
+
if (!model)
|
|
138
|
+
throw new Error(`Agent ${name} references unknown model alias ${modelRef}`);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
const runtimeName = agent.execution.runtime;
|
|
142
|
+
if (!runtimeName)
|
|
143
|
+
throw new Error(`Agent ${name} uses direct model ${modelRef} and must set execution.runtime`);
|
|
144
|
+
const provider = modelRef.includes("/") ? modelRef.split("/")[0] : undefined;
|
|
145
|
+
model = { alias: modelRef, id: modelRef, runtime: runtimeName, provider, model: modelRef };
|
|
146
|
+
}
|
|
147
|
+
const runtimeName = agent.execution.runtime ?? model.runtime;
|
|
148
|
+
if (runtimeName !== model.runtime && modelRef.startsWith("@"))
|
|
149
|
+
throw new Error(`Agent ${name} runtime ${runtimeName} conflicts with ${modelRef} runtime ${model.runtime}`);
|
|
150
|
+
const runtime = source.runtimes[runtimeName];
|
|
151
|
+
if (!runtime)
|
|
152
|
+
throw new Error(`Agent ${name} references unknown runtime ${runtimeName}`);
|
|
153
|
+
if (agent.execution.nativeAgent && runtime.capabilities?.nativeAgent === false)
|
|
154
|
+
throw new Error(`Runtime ${runtimeName} does not support nativeAgent but ${name} configures ${agent.execution.nativeAgent}`);
|
|
155
|
+
resolvedAgents[name] = { ...agent, name, execution: { ...agent.execution, runtime: runtimeName, variant: agent.execution.variant ?? model.variant, transport: agent.execution.transport ?? "inherit" }, runtime: { ...runtime, name: runtimeName }, model };
|
|
156
|
+
}
|
|
157
|
+
return { version: 1, profile: profileName, skillRoots: source.skillRoots ?? [".harness/skills"], runtimes: source.runtimes, models: resolvedModels, agents: resolvedAgents, routing: source.routing ?? [], recovery: source.recovery ?? {}, councils: source.councils ?? {} };
|
|
158
|
+
}
|
|
159
|
+
function mergeAgent(base, override) { return { ...base, ...override, execution: { ...base.execution, ...(override.execution ?? {}) }, permissions: { ...(base.permissions ?? {}), ...(override.permissions ?? {}) } }; }
|
|
160
|
+
function wildcardCount(value) { return [...value].filter((char) => char === "*" || char === "?").length; }
|
|
161
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/agents/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { HarnessProjectConfig, ReviewEscalationStage } from "../core/types.js";
|
|
2
|
+
import type { AgentExecutionSelection, ResolvedAgentTopology } from "./types.js";
|
|
3
|
+
import type { QualityState } from "./qualityConvergence.js";
|
|
4
|
+
export declare const DEFAULT_ESCALATION_STAGES: ReviewEscalationStage[];
|
|
5
|
+
export declare function escalationStages(config: HarnessProjectConfig): ReviewEscalationStage[];
|
|
6
|
+
export declare function nextEscalationIndex(state: QualityState, current: number, config: HarnessProjectConfig): number;
|
|
7
|
+
export declare function resumeAfterReplan(config: HarnessProjectConfig): number;
|
|
8
|
+
export declare function selectionForStage(topology: ResolvedAgentTopology, fallback: AgentExecutionSelection, stage: ReviewEscalationStage): AgentExecutionSelection;
|
|
9
|
+
export declare function overrideSelectionModel(topology: ResolvedAgentTopology, selection: AgentExecutionSelection, modelRef: string): AgentExecutionSelection;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { executionSelectionForAgent } from "./routing.js";
|
|
2
|
+
export const DEFAULT_ESCALATION_STAGES = [
|
|
3
|
+
{ name: "normal", action: "remediate" },
|
|
4
|
+
{ name: "quality", action: "remediate", agent: "quality-implementer" },
|
|
5
|
+
{ name: "senior", action: "remediate", agent: "senior-implementer", model: "@brain" },
|
|
6
|
+
{ name: "diagnosis", action: "diagnose", agent: "oracle", model: "@brain" },
|
|
7
|
+
{ name: "replan", action: "replan", agent: "planner", model: "@brain" }
|
|
8
|
+
];
|
|
9
|
+
export function escalationStages(config) {
|
|
10
|
+
const configured = config.workflow?.reviews?.escalation?.stages;
|
|
11
|
+
return configured?.length ? configured : DEFAULT_ESCALATION_STAGES;
|
|
12
|
+
}
|
|
13
|
+
export function nextEscalationIndex(state, current, config) {
|
|
14
|
+
const stages = escalationStages(config);
|
|
15
|
+
if (!stages.length)
|
|
16
|
+
return 0;
|
|
17
|
+
if (state.counts.critical > 0 && state.round === 0)
|
|
18
|
+
return Math.min(config.workflow?.reviews?.escalation?.criticalStartStage ?? 2, stages.length - 1);
|
|
19
|
+
if (state.convergence === "STAGNATING" || state.convergence === "REGRESSING" || state.convergence === "CYCLING")
|
|
20
|
+
return Math.min(current + 1, stages.length - 1);
|
|
21
|
+
if (state.convergence === "IMPROVING" && current > 0)
|
|
22
|
+
return current - 1;
|
|
23
|
+
return Math.min(current, stages.length - 1);
|
|
24
|
+
}
|
|
25
|
+
export function resumeAfterReplan(config) {
|
|
26
|
+
const stages = escalationStages(config);
|
|
27
|
+
const desired = Math.min(config.workflow?.reviews?.escalation?.replanResumeStage ?? 2, Math.max(0, stages.length - 1));
|
|
28
|
+
return Math.max(0, desired - 1);
|
|
29
|
+
}
|
|
30
|
+
export function selectionForStage(topology, fallback, stage) {
|
|
31
|
+
let selection = fallback;
|
|
32
|
+
if (stage.agent) {
|
|
33
|
+
if (topology.agents[stage.agent] && !topology.agents[stage.agent].disabled)
|
|
34
|
+
selection = executionSelectionForAgent(topology, stage.agent);
|
|
35
|
+
else if (stage.action === "diagnose") {
|
|
36
|
+
const diagnostic = Object.values(topology.agents).find((agent) => !agent.disabled && (agent.role === "escalation" || agent.role === "orchestrator"));
|
|
37
|
+
if (diagnostic)
|
|
38
|
+
selection = executionSelectionForAgent(topology, diagnostic.name);
|
|
39
|
+
}
|
|
40
|
+
else if (stage.action === "replan") {
|
|
41
|
+
const planner = Object.values(topology.agents).find((agent) => !agent.disabled && agent.role === "planner");
|
|
42
|
+
if (planner)
|
|
43
|
+
selection = executionSelectionForAgent(topology, planner.name);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return stage.model ? overrideSelectionModel(topology, selection, stage.model) : selection;
|
|
47
|
+
}
|
|
48
|
+
export function overrideSelectionModel(topology, selection, modelRef) {
|
|
49
|
+
if (!modelRef.startsWith("@"))
|
|
50
|
+
throw new Error(`Escalation model override must use an alias such as @brain; received ${modelRef}.`);
|
|
51
|
+
const alias = modelRef.slice(1);
|
|
52
|
+
const model = topology.models[alias];
|
|
53
|
+
if (!model)
|
|
54
|
+
throw new Error(`Escalation references unknown model alias ${modelRef}.`);
|
|
55
|
+
const runtime = topology.runtimes[model.runtime];
|
|
56
|
+
if (!runtime)
|
|
57
|
+
throw new Error(`Escalation model ${modelRef} references unavailable runtime ${model.runtime}.`);
|
|
58
|
+
const agent = topology.agents[selection.logicalAgent];
|
|
59
|
+
const runtimeChanged = selection.runtimeName !== model.runtime;
|
|
60
|
+
return {
|
|
61
|
+
...selection,
|
|
62
|
+
runtimeName: model.runtime,
|
|
63
|
+
runtimeAdapter: runtime.adapter,
|
|
64
|
+
paseoProvider: runtime.paseoProvider ?? runtime.adapter,
|
|
65
|
+
modelAlias: alias,
|
|
66
|
+
modelId: model.id,
|
|
67
|
+
modelName: model.model,
|
|
68
|
+
modelProvider: model.provider,
|
|
69
|
+
variant: model.variant,
|
|
70
|
+
nativeAgent: runtimeChanged ? undefined : selection.nativeAgent,
|
|
71
|
+
args: [...(runtime.defaultArgs ?? []), ...(agent?.execution.args ?? [])],
|
|
72
|
+
runtimeCapabilities: runtime.capabilities ?? {}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=escalation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escalation.js","sourceRoot":"","sources":["../../src/agents/escalation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAI1D,MAAM,CAAC,MAAM,yBAAyB,GAA4B;IAChE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE;IACvC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,EAAE;IACtE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE;IACrF,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC3E,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;CACxE,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAA4B;IAC3D,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC;IAChE,OAAO,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,yBAAyB,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAmB,EAAE,OAAe,EAAE,MAA4B;IACpG,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtJ,IAAI,KAAK,CAAC,WAAW,KAAK,YAAY,IAAI,KAAK,CAAC,WAAW,KAAK,YAAY,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjK,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,OAAO,GAAG,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAA4B;IAC5D,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACvH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAA+B,EAAE,QAAiC,EAAE,KAA4B;IAChI,IAAI,SAAS,GAAG,QAAQ,CAAC;IACzB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ;YAAE,SAAS,GAAG,0BAA0B,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;aACrI,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC;YACrJ,IAAI,UAAU;gBAAE,SAAS,GAAG,0BAA0B,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QACpF,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YAC5G,IAAI,OAAO;gBAAE,SAAS,GAAG,0BAA0B,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAA+B,EAAE,SAAkC,EAAE,QAAgB;IAC1H,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wEAAwE,QAAQ,GAAG,CAAC,CAAC;IACpI,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,QAAQ,GAAG,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,mCAAmC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;IAC/G,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,KAAK,KAAK,CAAC,OAAO,CAAC;IAC/D,OAAO;QACL,GAAG,SAAS;QACZ,WAAW,EAAE,KAAK,CAAC,OAAO;QAC1B,cAAc,EAAE,OAAO,CAAC,OAAO;QAC/B,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,OAAO;QACvD,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,SAAS,EAAE,KAAK,CAAC,KAAK;QACtB,aAAa,EAAE,KAAK,CAAC,QAAQ;QAC7B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW;QAC/D,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACxE,mBAAmB,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;KAChD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { WorkerSession } from "../core/types.js";
|
|
3
|
+
import type { NormalizedFinding } from "./outputContracts.js";
|
|
4
|
+
export type ExceptionType = "SPEC_CONTRADICTION" | "REQUIRES_PRODUCT_DECISION" | "BLOCKED_EXTERNAL" | "SYSTEM_FAILURE";
|
|
5
|
+
export interface ExceptionDecision {
|
|
6
|
+
type: ExceptionType;
|
|
7
|
+
humanRequired: boolean;
|
|
8
|
+
rationale: string;
|
|
9
|
+
findings: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare const exceptionDiagnosisSchema: z.ZodObject<{
|
|
12
|
+
classification: z.ZodEnum<{
|
|
13
|
+
IMPLEMENTATION_DEFECT: "IMPLEMENTATION_DEFECT";
|
|
14
|
+
SPEC_CONTRADICTION: "SPEC_CONTRADICTION";
|
|
15
|
+
REQUIRES_PRODUCT_DECISION: "REQUIRES_PRODUCT_DECISION";
|
|
16
|
+
BLOCKED_EXTERNAL: "BLOCKED_EXTERNAL";
|
|
17
|
+
SYSTEM_FAILURE: "SYSTEM_FAILURE";
|
|
18
|
+
}>;
|
|
19
|
+
rationale: z.ZodString;
|
|
20
|
+
recommendedAction: z.ZodString;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
export declare function detectHumanException(findings: NormalizedFinding[]): ExceptionDecision | undefined;
|
|
23
|
+
export declare function detectRuntimeExternalException(session: WorkerSession): ExceptionDecision | undefined;
|
|
24
|
+
export declare function diagnosisToException(value: z.infer<typeof exceptionDiagnosisSchema>): ExceptionDecision | undefined;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const exceptionDiagnosisSchema = z.object({
|
|
3
|
+
classification: z.enum(["IMPLEMENTATION_DEFECT", "SPEC_CONTRADICTION", "REQUIRES_PRODUCT_DECISION", "BLOCKED_EXTERNAL", "SYSTEM_FAILURE"]),
|
|
4
|
+
rationale: z.string().min(1),
|
|
5
|
+
recommendedAction: z.string().min(1)
|
|
6
|
+
});
|
|
7
|
+
export function detectHumanException(findings) {
|
|
8
|
+
const matches = [];
|
|
9
|
+
for (const finding of findings) {
|
|
10
|
+
const explicit = finding.exceptionType;
|
|
11
|
+
if (explicit && explicit !== "IMPLEMENTATION_DEFECT")
|
|
12
|
+
matches.push({ type: explicit, finding });
|
|
13
|
+
else {
|
|
14
|
+
const category = finding.category.toLowerCase().replace(/[_\s]+/g, "-");
|
|
15
|
+
if (["spec-contradiction", "requirement-contradiction", "conflicting-requirements"].includes(category))
|
|
16
|
+
matches.push({ type: "SPEC_CONTRADICTION", finding });
|
|
17
|
+
else if (["product-decision", "business-decision", "ambiguous-requirement", "product-ambiguity"].includes(category))
|
|
18
|
+
matches.push({ type: "REQUIRES_PRODUCT_DECISION", finding });
|
|
19
|
+
else if (["external-blocker", "missing-secret", "credential-required", "external-permission", "external-dependency-unavailable"].includes(category))
|
|
20
|
+
matches.push({ type: "BLOCKED_EXTERNAL", finding });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (!matches.length)
|
|
24
|
+
return undefined;
|
|
25
|
+
const priority = ["SPEC_CONTRADICTION", "REQUIRES_PRODUCT_DECISION", "BLOCKED_EXTERNAL", "SYSTEM_FAILURE"];
|
|
26
|
+
const type = priority.find((candidate) => matches.some((match) => match.type === candidate));
|
|
27
|
+
const relevant = matches.filter((match) => match.type === type).map((match) => match.finding);
|
|
28
|
+
return { type, humanRequired: type !== "SYSTEM_FAILURE", rationale: relevant.map((finding) => finding.evidence).join(" | "), findings: relevant.map((finding) => finding.id) };
|
|
29
|
+
}
|
|
30
|
+
export function detectRuntimeExternalException(session) {
|
|
31
|
+
const text = `${session.stderr}\n${session.stdout}`;
|
|
32
|
+
const patterns = [/missing\s+(api[- ]?key|token|secret|credential)/i, /authentication\s+(required|failed)/i, /not\s+(authenticated|logged\s+in)/i, /credential(s)?\s+(required|missing|unavailable)/i, /permission denied[^\n]*(credential|secret|token|account)/i];
|
|
33
|
+
if (!patterns.some((pattern) => pattern.test(text)))
|
|
34
|
+
return undefined;
|
|
35
|
+
return { type: "BLOCKED_EXTERNAL", humanRequired: true, rationale: text.slice(-2000), findings: [] };
|
|
36
|
+
}
|
|
37
|
+
export function diagnosisToException(value) {
|
|
38
|
+
if (value.classification === "IMPLEMENTATION_DEFECT")
|
|
39
|
+
return undefined;
|
|
40
|
+
return { type: value.classification, humanRequired: value.classification !== "SYSTEM_FAILURE", rationale: value.rationale, findings: [] };
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=exceptionDetection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exceptionDetection.js","sourceRoot":"","sources":["../../src/agents/exceptionDetection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type NormalizedFinding } from "./outputContracts.js";
|
|
2
|
+
export interface FindingMerge {
|
|
3
|
+
into: string;
|
|
4
|
+
from: string[];
|
|
5
|
+
reason: string;
|
|
6
|
+
}
|
|
7
|
+
export interface DedupedFindings {
|
|
8
|
+
inputCount: number;
|
|
9
|
+
outputCount: number;
|
|
10
|
+
findings: NormalizedFinding[];
|
|
11
|
+
merges: FindingMerge[];
|
|
12
|
+
}
|
|
13
|
+
export declare function extractFindings(value: unknown): NormalizedFinding[];
|
|
14
|
+
export declare function dedupeFindings(input: NormalizedFinding[]): DedupedFindings;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { findingSchema, reviewerOutputSchema } from "./outputContracts.js";
|
|
2
|
+
const severityRank = { critical: 5, high: 4, medium: 3, low: 2, note: 1 };
|
|
3
|
+
export function extractFindings(value) { const reviewer = reviewerOutputSchema.safeParse(value); if (reviewer.success)
|
|
4
|
+
return reviewer.data.findings; if (Array.isArray(value))
|
|
5
|
+
return value.map((item) => findingSchema.parse(item)); return [findingSchema.parse(value)]; }
|
|
6
|
+
export function dedupeFindings(input) {
|
|
7
|
+
const output = [];
|
|
8
|
+
const merges = [];
|
|
9
|
+
for (const finding of input) {
|
|
10
|
+
const index = output.findIndex((current) => isDuplicate(current, finding));
|
|
11
|
+
if (index < 0) {
|
|
12
|
+
output.push(structuredClone(finding));
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
const current = output[index];
|
|
16
|
+
const winner = severityRank[finding.severity] > severityRank[current.severity] ? finding : current;
|
|
17
|
+
const loser = winner === finding ? current : finding;
|
|
18
|
+
const merged = { ...winner, evidence: joinUnique(winner.evidence, loser.evidence), impact: joinUnique(winner.impact, loser.impact), recommendedFix: joinUnique(winner.recommendedFix, loser.recommendedFix), location: { file: winner.location.file, startLine: minDefined(current.location.startLine, finding.location.startLine), endLine: maxDefined(current.location.endLine, finding.location.endLine) } };
|
|
19
|
+
output[index] = merged;
|
|
20
|
+
const existing = merges.find((item) => item.into === merged.id);
|
|
21
|
+
if (existing)
|
|
22
|
+
existing.from.push(loser.id);
|
|
23
|
+
else
|
|
24
|
+
merges.push({ into: merged.id, from: [loser.id], reason: `same/adjacent location and compatible category (${current.category}, ${finding.category})` });
|
|
25
|
+
}
|
|
26
|
+
return { inputCount: input.length, outputCount: output.length, findings: output, merges };
|
|
27
|
+
}
|
|
28
|
+
function isDuplicate(a, b) { if (a.location.file !== b.location.file)
|
|
29
|
+
return false; if (!categoriesCompatible(a.category, b.category))
|
|
30
|
+
return false; const aStart = a.location.startLine ?? 1; const aEnd = a.location.endLine ?? aStart; const bStart = b.location.startLine ?? 1; const bEnd = b.location.endLine ?? bStart; return aStart <= bEnd + 10 && bStart <= aEnd + 10; }
|
|
31
|
+
function categoriesCompatible(a, b) { if (a === b)
|
|
32
|
+
return true; const pairs = [["security", "backend"], ["architecture", "maintainability"], ["api-contract", "backend"], ["coverage", "test"]]; return pairs.some(([x, y]) => (a === x && b === y) || (a === y && b === x)); }
|
|
33
|
+
function joinUnique(a, b) { return a === b ? a : `${a}\n---\n${b}`; }
|
|
34
|
+
function minDefined(a, b) { if (a === undefined)
|
|
35
|
+
return b; if (b === undefined)
|
|
36
|
+
return a; return Math.min(a, b); }
|
|
37
|
+
function maxDefined(a, b) { if (a === undefined)
|
|
38
|
+
return b; if (b === undefined)
|
|
39
|
+
return a; return Math.max(a, b); }
|
|
40
|
+
//# sourceMappingURL=findings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/agents/findings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface WorktreeCheckpoint {
|
|
2
|
+
createdAt: string;
|
|
3
|
+
files: Map<string, Buffer | undefined>;
|
|
4
|
+
}
|
|
5
|
+
export declare function createWorktreeCheckpoint(root: string): Promise<WorktreeCheckpoint>;
|
|
6
|
+
export declare function rollbackWorktreeCheckpoint(root: string, checkpoint: WorktreeCheckpoint): Promise<string[]>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { runProcess } from "../utils/process.js";
|
|
4
|
+
export async function createWorktreeCheckpoint(root) {
|
|
5
|
+
const files = new Map();
|
|
6
|
+
for (const relative of await changedPaths(root)) {
|
|
7
|
+
const absolute = path.resolve(root, relative);
|
|
8
|
+
try {
|
|
9
|
+
files.set(relative, await fs.readFile(absolute));
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
files.set(relative, undefined);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return { createdAt: new Date().toISOString(), files };
|
|
16
|
+
}
|
|
17
|
+
export async function rollbackWorktreeCheckpoint(root, checkpoint) {
|
|
18
|
+
const current = new Set(await changedPaths(root));
|
|
19
|
+
const all = new Set([...current, ...checkpoint.files.keys()]);
|
|
20
|
+
const restored = [];
|
|
21
|
+
for (const relative of all) {
|
|
22
|
+
const absolute = path.resolve(root, relative);
|
|
23
|
+
if (!absolute.startsWith(`${path.resolve(root)}${path.sep}`) && absolute !== path.resolve(root))
|
|
24
|
+
throw new Error(`Unsafe rollback path: ${relative}`);
|
|
25
|
+
if (checkpoint.files.has(relative)) {
|
|
26
|
+
const content = checkpoint.files.get(relative);
|
|
27
|
+
if (content === undefined)
|
|
28
|
+
await fs.rm(absolute, { recursive: true, force: true });
|
|
29
|
+
else {
|
|
30
|
+
await fs.mkdir(path.dirname(absolute), { recursive: true });
|
|
31
|
+
await fs.writeFile(absolute, content);
|
|
32
|
+
}
|
|
33
|
+
restored.push(relative);
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const tracked = await runProcess(`git cat-file -e ${quote(`HEAD:${relative}`)}`, { cwd: root, timeoutMs: 30_000 });
|
|
37
|
+
if (tracked.exitCode === 0) {
|
|
38
|
+
const restore = await runProcess(`git restore --source=HEAD --worktree --staged -- ${quote(relative)}`, { cwd: root, timeoutMs: 30_000 });
|
|
39
|
+
if (restore.exitCode !== 0)
|
|
40
|
+
throw new Error(`Unable to rollback ${relative}: ${restore.stderr || restore.stdout}`);
|
|
41
|
+
}
|
|
42
|
+
else
|
|
43
|
+
await fs.rm(absolute, { recursive: true, force: true });
|
|
44
|
+
restored.push(relative);
|
|
45
|
+
}
|
|
46
|
+
return restored.sort();
|
|
47
|
+
}
|
|
48
|
+
async function changedPaths(root) {
|
|
49
|
+
const commands = ["git diff --name-only HEAD", "git diff --cached --name-only HEAD", "git ls-files --others --exclude-standard"];
|
|
50
|
+
const paths = new Set();
|
|
51
|
+
for (const command of commands) {
|
|
52
|
+
const result = await runProcess(command, { cwd: root, timeoutMs: 30_000 });
|
|
53
|
+
if (result.exitCode !== 0)
|
|
54
|
+
throw new Error(`Unable to inspect worktree for rollback checkpoint: ${result.stderr || result.stdout}`);
|
|
55
|
+
for (const line of result.stdout.split(/\r?\n/).map((value) => value.trim()).filter(Boolean))
|
|
56
|
+
paths.add(line);
|
|
57
|
+
}
|
|
58
|
+
return [...paths].sort();
|
|
59
|
+
}
|
|
60
|
+
function quote(value) { return `'${value.replaceAll("'", "'\\''")}'`; }
|
|
61
|
+
//# sourceMappingURL=gitCheckpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitCheckpoint.js","sourceRoot":"","sources":["../../src/agents/gitCheckpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function parseJsonc(text: string): unknown;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export function parseJsonc(text) {
|
|
2
|
+
const out = [];
|
|
3
|
+
let i = 0;
|
|
4
|
+
while (i < text.length) {
|
|
5
|
+
const ch = text[i];
|
|
6
|
+
if (ch === '"') {
|
|
7
|
+
out.push(ch);
|
|
8
|
+
i += 1;
|
|
9
|
+
while (i < text.length) {
|
|
10
|
+
const current = text[i];
|
|
11
|
+
out.push(current);
|
|
12
|
+
i += 1;
|
|
13
|
+
if (current === "\\" && i < text.length) {
|
|
14
|
+
out.push(text[i]);
|
|
15
|
+
i += 1;
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
if (current === '"')
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
if (ch === "/" && text[i + 1] === "/") {
|
|
24
|
+
i += 2;
|
|
25
|
+
while (i < text.length && text[i] !== "\n")
|
|
26
|
+
i += 1;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (ch === "/" && text[i + 1] === "*") {
|
|
30
|
+
i += 2;
|
|
31
|
+
while (i + 1 < text.length && !(text[i] === "*" && text[i + 1] === "/"))
|
|
32
|
+
i += 1;
|
|
33
|
+
i += 2;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
out.push(ch);
|
|
37
|
+
i += 1;
|
|
38
|
+
}
|
|
39
|
+
const withoutTrailingCommas = out.join("").replace(/,(\s*[}\]])/g, "$1");
|
|
40
|
+
return JSON.parse(withoutTrailingCommas);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=jsonc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonc.js","sourceRoot":"","sources":["../../src/agents/jsonc.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC,IAAI,CAAC,CAAC;YACrB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;oBAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAC,CAAC,IAAI,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBACjF,IAAI,OAAO,KAAK,GAAG;oBAAE,MAAM;YAC7B,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACtC,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,CAAC,IAAI,CAAC,CAAC;YAAC,SAAS;QACvE,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACtC,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;gBAAE,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC,IAAI,CAAC,CAAC;YAAC,SAAS;QAC5G,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,qBAAqB,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAC3C,CAAC"}
|