agentic-engineering-harness 0.4.16 → 0.5.1
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/README.md +34 -5
- package/dist/agents/outputContracts.d.ts +1 -0
- package/dist/agents/outputContracts.js +12 -0
- package/dist/agents/outputContracts.js.map +1 -1
- package/dist/agents/parallelism.d.ts +1 -0
- package/dist/agents/parallelism.js +101 -14
- package/dist/agents/parallelism.js.map +1 -1
- package/dist/agents/structuredOutput.js +16 -4
- package/dist/agents/structuredOutput.js.map +1 -1
- package/dist/agents/waveExecutor.d.ts +41 -0
- package/dist/agents/waveExecutor.js +208 -0
- package/dist/agents/waveExecutor.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/config.js +23 -6
- package/dist/core/config.js.map +1 -1
- package/dist/core/controlPlane.d.ts +30 -0
- package/dist/core/controlPlane.js +131 -0
- package/dist/core/controlPlane.js.map +1 -0
- package/dist/core/init.js +12 -4
- package/dist/core/init.js.map +1 -1
- package/dist/core/run.d.ts +21 -0
- package/dist/core/run.js +104 -41
- package/dist/core/run.js.map +1 -1
- package/dist/core/types.d.ts +83 -1
- package/dist/distributed/queue.d.ts +11 -0
- package/dist/distributed/queue.js +140 -0
- package/dist/distributed/queue.js.map +1 -0
- package/dist/distributed/types.d.ts +34 -0
- package/dist/distributed/types.js +2 -0
- package/dist/distributed/types.js.map +1 -0
- package/dist/distributed/worker.d.ts +21 -0
- package/dist/distributed/worker.js +111 -0
- package/dist/distributed/worker.js.map +1 -0
- package/dist/entry.js +110 -46
- package/dist/entry.js.map +1 -1
- package/dist/evals/runner.js +2 -2
- package/dist/evals/runner.js.map +1 -1
- package/dist/evals/statistics.d.ts +38 -0
- package/dist/evals/statistics.js +88 -0
- package/dist/evals/statistics.js.map +1 -0
- package/dist/evidence/graph.d.ts +48 -0
- package/dist/evidence/graph.js +94 -0
- package/dist/evidence/graph.js.map +1 -0
- package/dist/mcp/benchmark.d.ts +24 -0
- package/dist/mcp/benchmark.js +82 -0
- package/dist/mcp/benchmark.js.map +1 -0
- package/dist/paseo/start.d.ts +47 -0
- package/dist/paseo/start.js +155 -0
- package/dist/paseo/start.js.map +1 -0
- package/dist/policy/bundles.d.ts +27 -0
- package/dist/policy/bundles.js +129 -0
- package/dist/policy/bundles.js.map +1 -0
- package/dist/security/sandbox.d.ts +12 -0
- package/dist/security/sandbox.js +64 -0
- package/dist/security/sandbox.js.map +1 -0
- package/dist/toolchain/resolve.js +51 -90
- package/dist/toolchain/resolve.js.map +1 -1
- package/dist/utils/process.d.ts +1 -0
- package/dist/utils/process.js +6 -1
- package/dist/utils/process.js.map +1 -1
- package/dist/validators/graphify.js +28 -6
- package/dist/validators/graphify.js.map +1 -1
- package/dist/workers/agentPrompt.d.ts +6 -1
- package/dist/workers/agentPrompt.js +118 -34
- package/dist/workers/agentPrompt.js.map +1 -1
- package/dist/workers/podman.js +30 -8
- package/dist/workers/podman.js.map +1 -1
- package/docs/V0.5.1.md +129 -0
- package/docs/V0.5.md +116 -0
- package/package.json +2 -2
- package/schemas/project.schema.json +27 -8
- package/skills/engineering-workflow/SKILL.md +9 -1
- package/templates/AGENTS.md +6 -0
- package/templates/project.yaml +70 -1
- package/templates/toolchain.yaml +8 -1
package/dist/evals/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/evals/runner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/evals/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { HarnessProjectConfig } from "../core/types.js";
|
|
2
|
+
import type { EvalResult } from "./types.js";
|
|
3
|
+
export interface ConfidenceInterval {
|
|
4
|
+
low: number;
|
|
5
|
+
high: number;
|
|
6
|
+
level: number;
|
|
7
|
+
}
|
|
8
|
+
export interface MetricSummary {
|
|
9
|
+
count: number;
|
|
10
|
+
mean: number;
|
|
11
|
+
median: number;
|
|
12
|
+
standardDeviation: number;
|
|
13
|
+
confidence: ConfidenceInterval;
|
|
14
|
+
}
|
|
15
|
+
export interface VariantStatistics {
|
|
16
|
+
variant: string;
|
|
17
|
+
runs: number;
|
|
18
|
+
passRate: number;
|
|
19
|
+
passRateConfidence: ConfidenceInterval;
|
|
20
|
+
score: MetricSummary;
|
|
21
|
+
durationMs?: MetricSummary;
|
|
22
|
+
totalTokens?: MetricSummary;
|
|
23
|
+
costUsd?: MetricSummary;
|
|
24
|
+
repairs?: MetricSummary;
|
|
25
|
+
humanInterventions?: MetricSummary;
|
|
26
|
+
}
|
|
27
|
+
export interface EvalDashboard {
|
|
28
|
+
version: 1;
|
|
29
|
+
caseId: string;
|
|
30
|
+
generatedAt: string;
|
|
31
|
+
confidenceLevel: number;
|
|
32
|
+
variants: VariantStatistics[];
|
|
33
|
+
}
|
|
34
|
+
export declare function runRepeatedEval(root: string, config: HarnessProjectConfig, caseId: string, variant: string | undefined, runs?: number): Promise<EvalDashboard>;
|
|
35
|
+
export declare function buildEvalDashboard(root: string, config: HarnessProjectConfig, caseId: string): Promise<EvalDashboard>;
|
|
36
|
+
export declare function aggregateVariant(variant: string, results: EvalResult[], level?: number): VariantStatistics;
|
|
37
|
+
export declare function summarize(values: number[], level?: number): MetricSummary;
|
|
38
|
+
export declare function wilson(successes: number, count: number, level?: number): ConfidenceInterval;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { runEvalCase, compareEvalCase } from "./runner.js";
|
|
4
|
+
export async function runRepeatedEval(root, config, caseId, variant, runs) {
|
|
5
|
+
const count = runs ?? config.evals?.defaultRuns ?? 5;
|
|
6
|
+
if (count < 2)
|
|
7
|
+
throw new Error("Repeated evals require at least two runs to estimate variance.");
|
|
8
|
+
for (let index = 0; index < count; index += 1)
|
|
9
|
+
await runEvalCase(root, config, caseId, variant);
|
|
10
|
+
return buildEvalDashboard(root, config, caseId);
|
|
11
|
+
}
|
|
12
|
+
export async function buildEvalDashboard(root, config, caseId) {
|
|
13
|
+
const results = await compareEvalCase(root, config, caseId);
|
|
14
|
+
const confidenceLevel = config.evals?.confidenceLevel ?? 0.95;
|
|
15
|
+
const groups = new Map();
|
|
16
|
+
for (const result of results) {
|
|
17
|
+
const items = groups.get(result.variant) ?? [];
|
|
18
|
+
items.push(result);
|
|
19
|
+
groups.set(result.variant, items);
|
|
20
|
+
}
|
|
21
|
+
const variants = [...groups.entries()].map(([variant, items]) => aggregateVariant(variant, items, confidenceLevel)).sort((a, b) => b.passRate - a.passRate || b.score.mean - a.score.mean || a.variant.localeCompare(b.variant));
|
|
22
|
+
const dashboard = { version: 1, caseId, generatedAt: new Date().toISOString(), confidenceLevel, variants };
|
|
23
|
+
const output = path.resolve(root, config.evals?.resultsDir ?? ".harness/evals/results", caseId, "dashboard.json");
|
|
24
|
+
await fs.mkdir(path.dirname(output), { recursive: true });
|
|
25
|
+
await fs.writeFile(output, `${JSON.stringify(dashboard, null, 2)}\n`);
|
|
26
|
+
return dashboard;
|
|
27
|
+
}
|
|
28
|
+
export function aggregateVariant(variant, results, level = 0.95) {
|
|
29
|
+
const passes = results.filter((result) => result.status === "PASS").length;
|
|
30
|
+
const metric = (select) => { const values = results.map(select).filter((value) => Number.isFinite(value)); return values.length ? summarize(values, level) : undefined; };
|
|
31
|
+
return {
|
|
32
|
+
variant,
|
|
33
|
+
runs: results.length,
|
|
34
|
+
passRate: results.length ? passes / results.length : 0,
|
|
35
|
+
passRateConfidence: wilson(passes, results.length, level),
|
|
36
|
+
score: summarize(results.map((result) => result.score), level),
|
|
37
|
+
durationMs: metric((result) => result.metrics?.durationMs),
|
|
38
|
+
totalTokens: metric((result) => result.metrics?.usage.totalTokens),
|
|
39
|
+
costUsd: metric((result) => result.metrics?.usage.costUsd),
|
|
40
|
+
repairs: metric((result) => result.metrics?.repairCount),
|
|
41
|
+
humanInterventions: metric((result) => result.metrics?.humanInterventions)
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export function summarize(values, level = 0.95) {
|
|
45
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
46
|
+
const count = sorted.length;
|
|
47
|
+
const mean = sorted.reduce((sum, value) => sum + value, 0) / count;
|
|
48
|
+
const variance = count > 1 ? sorted.reduce((sum, value) => sum + (value - mean) ** 2, 0) / (count - 1) : 0;
|
|
49
|
+
const standardDeviation = Math.sqrt(variance);
|
|
50
|
+
const median = count % 2 ? sorted[(count - 1) / 2] : (sorted[count / 2 - 1] + sorted[count / 2]) / 2;
|
|
51
|
+
const z = inverseNormal(0.5 + level / 2);
|
|
52
|
+
const margin = count > 1 ? z * standardDeviation / Math.sqrt(count) : 0;
|
|
53
|
+
return { count, mean, median, standardDeviation, confidence: { low: mean - margin, high: mean + margin, level } };
|
|
54
|
+
}
|
|
55
|
+
export function wilson(successes, count, level = 0.95) {
|
|
56
|
+
if (!count)
|
|
57
|
+
return { low: 0, high: 1, level };
|
|
58
|
+
const z = inverseNormal(0.5 + level / 2);
|
|
59
|
+
const p = successes / count;
|
|
60
|
+
const z2 = z * z;
|
|
61
|
+
const denominator = 1 + z2 / count;
|
|
62
|
+
const center = (p + z2 / (2 * count)) / denominator;
|
|
63
|
+
const margin = z * Math.sqrt((p * (1 - p) + z2 / (4 * count)) / count) / denominator;
|
|
64
|
+
return { low: Math.max(0, center - margin), high: Math.min(1, center + margin), level };
|
|
65
|
+
}
|
|
66
|
+
// Peter J. Acklam's rational approximation, sufficient for confidence reporting.
|
|
67
|
+
function inverseNormal(p) {
|
|
68
|
+
if (!(p > 0 && p < 1))
|
|
69
|
+
throw new Error("Normal quantile requires 0 < p < 1.");
|
|
70
|
+
const a = [-39.69683028665376, 220.9460984245205, -275.9285104469687, 138.357751867269, -30.66479806614716, 2.506628277459239];
|
|
71
|
+
const b = [-54.47609879822406, 161.5858368580409, -155.6989798598866, 66.80131188771972, -13.28068155288572];
|
|
72
|
+
const c = [-0.007784894002430293, -0.3223964580411365, -2.400758277161838, -2.549732539343734, 4.374664141464968, 2.938163982698783];
|
|
73
|
+
const d = [0.007784695709041462, 0.3224671290700398, 2.445134137142996, 3.754408661907416];
|
|
74
|
+
const low = 0.02425;
|
|
75
|
+
const high = 1 - low;
|
|
76
|
+
if (p < low) {
|
|
77
|
+
const q = Math.sqrt(-2 * Math.log(p));
|
|
78
|
+
return (((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) / ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1);
|
|
79
|
+
}
|
|
80
|
+
if (p > high) {
|
|
81
|
+
const q = Math.sqrt(-2 * Math.log(1 - p));
|
|
82
|
+
return -(((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) / ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1);
|
|
83
|
+
}
|
|
84
|
+
const q = p - 0.5;
|
|
85
|
+
const r = q * q;
|
|
86
|
+
return (((((a[0] * r + a[1]) * r + a[2]) * r + a[3]) * r + a[4]) * r + a[5]) * q / (((((b[0] * r + b[1]) * r + b[2]) * r + b[3]) * r + b[4]) * r + 1);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=statistics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statistics.js","sourceRoot":"","sources":["../../src/evals/statistics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { NormalizedFinding, PlannerOutput } from "../agents/outputContracts.js";
|
|
2
|
+
import type { DeliveryFinalizationResult } from "../delivery/finalize.js";
|
|
3
|
+
import type { HarnessProjectConfig, TaskContract, ValidationCheck, ValidationReport, WorkerSession } from "../core/types.js";
|
|
4
|
+
export type EvidenceNodeType = "run" | "requirement" | "task" | "file" | "check" | "finding" | "agent-session" | "commit" | "pull-request";
|
|
5
|
+
export interface EvidenceNode {
|
|
6
|
+
id: string;
|
|
7
|
+
type: EvidenceNodeType;
|
|
8
|
+
label: string;
|
|
9
|
+
data?: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export interface EvidenceEdge {
|
|
12
|
+
from: string;
|
|
13
|
+
to: string;
|
|
14
|
+
type: "contains" | "implemented-by" | "changed" | "validated-by" | "reported-by" | "located-in" | "produced" | "finalized-as" | "delivered-by";
|
|
15
|
+
}
|
|
16
|
+
export interface RequirementCoverage {
|
|
17
|
+
requirementId: string;
|
|
18
|
+
implementation: boolean;
|
|
19
|
+
validation: boolean;
|
|
20
|
+
passingValidators: string[];
|
|
21
|
+
missingValidators: string[];
|
|
22
|
+
files: string[];
|
|
23
|
+
tasks: string[];
|
|
24
|
+
complete: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface RequirementEvidenceGraph {
|
|
27
|
+
version: 1;
|
|
28
|
+
taskId: string;
|
|
29
|
+
createdAt: string;
|
|
30
|
+
nodes: EvidenceNode[];
|
|
31
|
+
edges: EvidenceEdge[];
|
|
32
|
+
requirements: RequirementCoverage[];
|
|
33
|
+
complete: boolean;
|
|
34
|
+
reasons: string[];
|
|
35
|
+
sha256: string;
|
|
36
|
+
}
|
|
37
|
+
export declare function buildRequirementEvidenceGraph(input: {
|
|
38
|
+
root: string;
|
|
39
|
+
stateRoot?: string;
|
|
40
|
+
config: HarnessProjectConfig;
|
|
41
|
+
contract: TaskContract;
|
|
42
|
+
report: ValidationReport;
|
|
43
|
+
plan?: PlannerOutput;
|
|
44
|
+
findings?: NormalizedFinding[];
|
|
45
|
+
sessions?: WorkerSession[];
|
|
46
|
+
delivery?: DeliveryFinalizationResult;
|
|
47
|
+
}): Promise<RequirementEvidenceGraph>;
|
|
48
|
+
export declare function evidenceValidationCheck(graph: RequirementEvidenceGraph, config: HarnessProjectConfig): ValidationCheck;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { minimatch } from "minimatch";
|
|
5
|
+
export async function buildRequirementEvidenceGraph(input) {
|
|
6
|
+
const stateRoot = path.resolve(input.stateRoot ?? input.root);
|
|
7
|
+
const runId = `run:${input.contract.task.id}`;
|
|
8
|
+
const nodes = new Map();
|
|
9
|
+
const edges = [];
|
|
10
|
+
addNode(nodes, { id: runId, type: "run", label: input.contract.task.title, data: { mode: input.contract.mode ?? "spec", status: input.report.status } });
|
|
11
|
+
const requirements = normalizedRequirements(input.contract);
|
|
12
|
+
const planTasks = input.plan?.tasks?.length ? input.plan.tasks : [{ id: input.contract.task.id, summary: input.contract.task.title, agent: input.contract.routing?.agent ?? "implementation-worker", scope: input.contract.scope?.allowed ?? ["**"], dependencies: [], acceptance: requirements.map((item) => item.id), risk: input.contract.routing?.risk ?? "low" }];
|
|
13
|
+
for (const requirement of requirements) {
|
|
14
|
+
const id = `req:${requirement.id}`;
|
|
15
|
+
addNode(nodes, { id, type: "requirement", label: requirement.description || requirement.id });
|
|
16
|
+
addEdge(edges, runId, id, "contains");
|
|
17
|
+
}
|
|
18
|
+
for (const task of planTasks) {
|
|
19
|
+
const id = `task:${task.id}`;
|
|
20
|
+
addNode(nodes, { id, type: "task", label: task.summary, data: { agent: task.agent, scope: task.scope, dependencies: task.dependencies } });
|
|
21
|
+
addEdge(edges, runId, id, "contains");
|
|
22
|
+
for (const req of task.acceptance)
|
|
23
|
+
if (requirements.some((item) => item.id === req))
|
|
24
|
+
addEdge(edges, `req:${req}`, id, "implemented-by");
|
|
25
|
+
}
|
|
26
|
+
for (const file of input.report.changedFiles) {
|
|
27
|
+
const id = `file:${file}`;
|
|
28
|
+
addNode(nodes, { id, type: "file", label: file });
|
|
29
|
+
addEdge(edges, runId, id, "contains");
|
|
30
|
+
for (const task of planTasks)
|
|
31
|
+
if (task.scope.some((scope) => matches(file, scope)))
|
|
32
|
+
addEdge(edges, `task:${task.id}`, id, "changed");
|
|
33
|
+
}
|
|
34
|
+
for (const check of input.report.checks) {
|
|
35
|
+
const id = `check:${check.id}`;
|
|
36
|
+
addNode(nodes, { id, type: "check", label: check.id, data: { category: check.category, status: check.status, message: check.message } });
|
|
37
|
+
addEdge(edges, runId, id, "contains");
|
|
38
|
+
for (const requirement of requirements)
|
|
39
|
+
if (requirement.validators.includes(check.id))
|
|
40
|
+
addEdge(edges, `req:${requirement.id}`, id, "validated-by");
|
|
41
|
+
}
|
|
42
|
+
for (const [index, finding] of (input.findings ?? []).entries()) {
|
|
43
|
+
const id = `finding:${finding.id || index}`;
|
|
44
|
+
addNode(nodes, { id, type: "finding", label: finding.id, data: { severity: finding.severity, category: finding.category, evidence: finding.evidence } });
|
|
45
|
+
addEdge(edges, runId, id, "contains");
|
|
46
|
+
const fileId = `file:${finding.location.file}`;
|
|
47
|
+
if (!nodes.has(fileId))
|
|
48
|
+
addNode(nodes, { id: fileId, type: "file", label: finding.location.file });
|
|
49
|
+
addEdge(edges, id, fileId, "located-in");
|
|
50
|
+
}
|
|
51
|
+
for (const [index, session] of (input.sessions ?? []).entries()) {
|
|
52
|
+
const id = `session:${session.id ?? `${session.logicalAgent ?? session.provider}-${index}`}`;
|
|
53
|
+
addNode(nodes, { id, type: "agent-session", label: session.logicalAgent ?? session.provider, data: { runtime: session.runtime, model: session.model, exitCode: session.exitCode } });
|
|
54
|
+
addEdge(edges, runId, id, "produced");
|
|
55
|
+
}
|
|
56
|
+
if (input.delivery?.commitSha) {
|
|
57
|
+
const id = `commit:${input.delivery.commitSha}`;
|
|
58
|
+
addNode(nodes, { id, type: "commit", label: input.delivery.commitSha });
|
|
59
|
+
addEdge(edges, runId, id, "finalized-as");
|
|
60
|
+
}
|
|
61
|
+
if (input.delivery?.pullRequest?.number) {
|
|
62
|
+
const id = `pr:${input.delivery.pullRequest.number}`;
|
|
63
|
+
addNode(nodes, { id, type: "pull-request", label: `PR #${input.delivery.pullRequest.number}`, data: { url: input.delivery.pullRequest.url } });
|
|
64
|
+
addEdge(edges, runId, id, "delivered-by");
|
|
65
|
+
if (input.delivery.commitSha)
|
|
66
|
+
addEdge(edges, `commit:${input.delivery.commitSha}`, id, "delivered-by");
|
|
67
|
+
}
|
|
68
|
+
const coverage = requirements.map((requirement) => coverageFor(requirement, nodes, edges));
|
|
69
|
+
const reasons = [];
|
|
70
|
+
for (const item of coverage) {
|
|
71
|
+
if (!item.implementation)
|
|
72
|
+
reasons.push(`${item.requirementId} has no changed implementation evidence.`);
|
|
73
|
+
if (!item.validation)
|
|
74
|
+
reasons.push(`${item.requirementId} lacks PASS evidence for: ${item.missingValidators.join(", ") || "a declared validator"}.`);
|
|
75
|
+
}
|
|
76
|
+
const payload = { version: 1, taskId: input.contract.task.id, createdAt: new Date().toISOString(), nodes: [...nodes.values()].sort((a, b) => a.id.localeCompare(b.id)), edges: uniqueEdges(edges), requirements: coverage, complete: coverage.every((item) => item.complete), reasons };
|
|
77
|
+
const graph = { ...payload, sha256: digest(payload) };
|
|
78
|
+
const output = path.resolve(stateRoot, input.config.evidence?.outputDir ?? ".harness/evidence", `${input.contract.task.id}.json`);
|
|
79
|
+
await fs.mkdir(path.dirname(output), { recursive: true });
|
|
80
|
+
await fs.writeFile(output, `${JSON.stringify(graph, null, 2)}\n`);
|
|
81
|
+
return graph;
|
|
82
|
+
}
|
|
83
|
+
export function evidenceValidationCheck(graph, config) { const strict = config.evidence?.requireComplete === true; return { id: "evidence.requirement-coverage", category: "evidence", status: graph.complete ? "PASS" : strict ? "FAIL" : "WARN", message: graph.complete ? `Requirement evidence graph complete for ${graph.requirements.length} requirement(s).` : `Requirement evidence graph is incomplete: ${graph.reasons.join("; ")}`, details: { sha256: graph.sha256, requirements: graph.requirements, strict } }; }
|
|
84
|
+
function normalizedRequirements(contract) { if (contract.requirements?.length)
|
|
85
|
+
return contract.requirements.map((item) => ({ id: item.id, description: item.description ?? item.id, validators: [...new Set([...(item.validators ?? []), ...(item.validator ? [item.validator] : [])])] })); const validators = [...(contract.verification?.validators ?? []).map((item) => item.id), ...(contract.verification?.commands ?? []).map((item) => item.id)]; return (contract.quick?.acceptance ?? []).map((description, index) => ({ id: `QUICK-AC-${index + 1}`, description, validators })); }
|
|
86
|
+
function coverageFor(requirement, nodes, edges) { const req = `req:${requirement.id}`; const taskIds = edges.filter((edge) => edge.from === req && edge.type === "implemented-by").map((edge) => edge.to); const files = [...new Set(taskIds.flatMap((task) => edges.filter((edge) => edge.from === task && edge.type === "changed").map((edge) => edge.to.replace(/^file:/, ""))))].sort(); const validators = requirement.validators; const passingValidators = validators.filter((id) => nodes.get(`check:${id}`)?.data?.status === "PASS"); const missingValidators = validators.filter((id) => !passingValidators.includes(id)); const implementation = taskIds.length > 0 && files.length > 0; const validation = validators.length > 0 && missingValidators.length === 0; return { requirementId: requirement.id, implementation, validation, passingValidators, missingValidators, files, tasks: taskIds.map((id) => id.replace(/^task:/, "")), complete: implementation && validation }; }
|
|
87
|
+
function addNode(nodes, node) { if (!nodes.has(node.id))
|
|
88
|
+
nodes.set(node.id, node); }
|
|
89
|
+
function addEdge(edges, from, to, type) { edges.push({ from, to, type }); }
|
|
90
|
+
function uniqueEdges(edges) { const seen = new Set(); return edges.filter((edge) => { const key = `${edge.from}\0${edge.type}\0${edge.to}`; if (seen.has(key))
|
|
91
|
+
return false; seen.add(key); return true; }).sort((a, b) => `${a.from}:${a.type}:${a.to}`.localeCompare(`${b.from}:${b.type}:${b.to}`)); }
|
|
92
|
+
function matches(file, scope) { return scope === "**" || minimatch(file, scope, { dot: true }) || (Boolean(scope.split(/[?*\[]/, 1)[0]) && file.startsWith(scope.split(/[?*\[]/, 1)[0].replace(/\/+$/, ""))); }
|
|
93
|
+
function digest(value) { return crypto.createHash("sha256").update(JSON.stringify(value)).digest("hex"); }
|
|
94
|
+
//# sourceMappingURL=graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/evidence/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { HarnessProjectConfig } from "../core/types.js";
|
|
2
|
+
export interface McpBenchmarkResult {
|
|
3
|
+
server: string;
|
|
4
|
+
type: "local" | "remote";
|
|
5
|
+
available: boolean;
|
|
6
|
+
baselineConfigTokens: number;
|
|
7
|
+
permissionSurfaceScore: number;
|
|
8
|
+
staleDataRisk: "low" | "medium" | "high";
|
|
9
|
+
latencyMs?: {
|
|
10
|
+
median: number;
|
|
11
|
+
min: number;
|
|
12
|
+
max: number;
|
|
13
|
+
samples: number[];
|
|
14
|
+
};
|
|
15
|
+
notes: string[];
|
|
16
|
+
}
|
|
17
|
+
export interface McpBenchmarkReport {
|
|
18
|
+
version: 1;
|
|
19
|
+
generatedAt: string;
|
|
20
|
+
results: McpBenchmarkResult[];
|
|
21
|
+
packs: Record<string, string[]>;
|
|
22
|
+
}
|
|
23
|
+
export declare function benchmarkMcpCatalog(root: string, config: HarnessProjectConfig, names?: string[]): Promise<McpBenchmarkReport>;
|
|
24
|
+
export declare function resolveMcpPack(config: HarnessProjectConfig, pack: string): string[];
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { commandExists } from "../utils/process.js";
|
|
4
|
+
export async function benchmarkMcpCatalog(root, config, names) {
|
|
5
|
+
const catalog = config.mcp?.servers ?? {};
|
|
6
|
+
const selected = names?.length ? names : Object.keys(catalog).filter((name) => catalog[name].enabled !== false);
|
|
7
|
+
const repetitions = config.mcp?.benchmark?.repetitions ?? 3;
|
|
8
|
+
const results = [];
|
|
9
|
+
for (const name of selected) {
|
|
10
|
+
const server = catalog[name];
|
|
11
|
+
if (!server)
|
|
12
|
+
throw new Error(`Unknown MCP server '${name}'.`);
|
|
13
|
+
results.push(await benchmarkOne(root, name, server, repetitions));
|
|
14
|
+
}
|
|
15
|
+
const packs = {};
|
|
16
|
+
for (const [name, pack] of Object.entries(config.mcp?.packs ?? {}))
|
|
17
|
+
if (pack.enabled !== false)
|
|
18
|
+
packs[name] = pack.servers.filter((server) => Boolean(catalog[server]));
|
|
19
|
+
const report = { version: 1, generatedAt: new Date().toISOString(), results: results.sort((a, b) => a.server.localeCompare(b.server)), packs };
|
|
20
|
+
const output = path.resolve(root, config.mcp?.benchmark?.resultsDir ?? ".harness/mcp-benchmarks", `${Date.now()}.json`);
|
|
21
|
+
await fs.mkdir(path.dirname(output), { recursive: true });
|
|
22
|
+
await fs.writeFile(output, `${JSON.stringify(report, null, 2)}\n`);
|
|
23
|
+
return report;
|
|
24
|
+
}
|
|
25
|
+
export function resolveMcpPack(config, pack) { const value = config.mcp?.packs?.[pack]; if (!value || value.enabled === false)
|
|
26
|
+
throw new Error(`Unknown or disabled MCP pack '${pack}'.`); const catalog = config.mcp?.servers ?? {}; const missing = value.servers.filter((name) => !catalog[name]); if (missing.length)
|
|
27
|
+
throw new Error(`MCP pack '${pack}' references unknown servers: ${missing.join(", ")}`); return [...new Set(value.servers)]; }
|
|
28
|
+
async function benchmarkOne(root, name, server, repetitions) {
|
|
29
|
+
const notes = [];
|
|
30
|
+
const serialized = JSON.stringify({ name, ...server });
|
|
31
|
+
const baselineConfigTokens = Math.ceil(serialized.length / 4);
|
|
32
|
+
const samples = [];
|
|
33
|
+
let available = false;
|
|
34
|
+
if (server.type === "local") {
|
|
35
|
+
const command = server.command?.[0];
|
|
36
|
+
available = Boolean(command && await commandExists(command, root));
|
|
37
|
+
if (!available)
|
|
38
|
+
notes.push(`local command '${command ?? "<missing>"}' unavailable`);
|
|
39
|
+
else
|
|
40
|
+
for (let index = 0; index < repetitions; index += 1) {
|
|
41
|
+
const started = performance.now();
|
|
42
|
+
await commandExists(command, root);
|
|
43
|
+
samples.push(performance.now() - started);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
for (let index = 0; index < repetitions; index += 1) {
|
|
48
|
+
const controller = new AbortController();
|
|
49
|
+
const timeout = setTimeout(() => controller.abort(), Math.min(server.timeoutMs ?? 10_000, 10_000));
|
|
50
|
+
const started = performance.now();
|
|
51
|
+
try {
|
|
52
|
+
const response = await fetch(server.url, { method: "HEAD", headers: resolvedHeaders(server.headers), signal: controller.signal });
|
|
53
|
+
samples.push(performance.now() - started);
|
|
54
|
+
available = available || response.status < 500;
|
|
55
|
+
if (response.status === 401 || response.status === 403)
|
|
56
|
+
notes.push(`probe reached server but authentication is required (HTTP ${response.status})`);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
notes.push(`probe failed: ${String(error)}`);
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
clearTimeout(timeout);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const permissionSurfaceScore = permissionSurface(server);
|
|
67
|
+
const staleDataRisk = staleRisk(name, server);
|
|
68
|
+
if (baselineConfigTokens > 500)
|
|
69
|
+
notes.push("large MCP configuration footprint; measure runtime tool-schema overhead before broad enablement");
|
|
70
|
+
return { server: name, type: server.type, available, baselineConfigTokens, permissionSurfaceScore, staleDataRisk, latencyMs: samples.length ? summarizeLatency(samples) : undefined, notes: [...new Set(notes)] };
|
|
71
|
+
}
|
|
72
|
+
function permissionSurface(server) { let score = server.type === "remote" ? 2 : 1; score += Object.keys(server.environment ?? {}).length; score += Object.keys(server.headers ?? {}).length; if (server.oauth)
|
|
73
|
+
score += 2; if (server.command?.some((item) => /docker|podman|kubectl|terraform|gh|aws|gcloud|az/i.test(item)))
|
|
74
|
+
score += 3; if (/write|admin|mutation/i.test(server.description ?? ""))
|
|
75
|
+
score += 4; return score; }
|
|
76
|
+
function staleRisk(name, server) { const text = `${name} ${server.description ?? ""}`.toLowerCase(); if (/database|cluster|kubernetes|production|inventory|cloud/.test(text))
|
|
77
|
+
return "high"; if (/docs|documentation|issue|sentry|observability|search/.test(text))
|
|
78
|
+
return "medium"; return "low"; }
|
|
79
|
+
function summarizeLatency(samples) { const sorted = [...samples].sort((a, b) => a - b); const middle = Math.floor(sorted.length / 2); const median = sorted.length % 2 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2; return { median, min: sorted[0], max: sorted.at(-1), samples }; }
|
|
80
|
+
function resolvedHeaders(headers) { const result = new Headers(); for (const [name, value] of Object.entries(headers ?? {}))
|
|
81
|
+
result.set(name, value.replace(/\{env:([^}]+)\}/g, (_, env) => process.env[env] ?? "")); return result; }
|
|
82
|
+
//# sourceMappingURL=benchmark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../src/mcp/benchmark.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ResolvedAgentTopology } from "../agents/types.js";
|
|
2
|
+
import { loadResolvedAgentTopology } from "../agents/config.js";
|
|
3
|
+
import type { HarnessProjectConfig } from "../core/types.js";
|
|
4
|
+
import { setupToolchain } from "../toolchain/setup.js";
|
|
5
|
+
import { commandExists, runProcess } from "../utils/process.js";
|
|
6
|
+
export declare const PASEO_BOOTSTRAP_VERSION = 1;
|
|
7
|
+
export interface PaseoStartOptions {
|
|
8
|
+
autoSetup?: boolean;
|
|
9
|
+
webUi?: boolean;
|
|
10
|
+
forceNew?: boolean;
|
|
11
|
+
leadAgent?: string;
|
|
12
|
+
title?: string;
|
|
13
|
+
aehCommand?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface PaseoLeadState {
|
|
16
|
+
version: 1;
|
|
17
|
+
bootstrapVersion: number;
|
|
18
|
+
projectRoot: string;
|
|
19
|
+
projectName: string;
|
|
20
|
+
agentId: string;
|
|
21
|
+
title: string;
|
|
22
|
+
leadAgent: string;
|
|
23
|
+
provider: string;
|
|
24
|
+
model: string;
|
|
25
|
+
createdAt: string;
|
|
26
|
+
}
|
|
27
|
+
export interface PaseoStartResult {
|
|
28
|
+
daemonStarted: boolean;
|
|
29
|
+
session: "created" | "reused";
|
|
30
|
+
agentId: string;
|
|
31
|
+
title: string;
|
|
32
|
+
leadAgent: string;
|
|
33
|
+
provider: string;
|
|
34
|
+
model: string;
|
|
35
|
+
stateFile: string;
|
|
36
|
+
bootstrapFile: string;
|
|
37
|
+
}
|
|
38
|
+
interface PaseoStartDeps {
|
|
39
|
+
run: typeof runProcess;
|
|
40
|
+
commandExists: typeof commandExists;
|
|
41
|
+
setupToolchain: typeof setupToolchain;
|
|
42
|
+
loadTopology: typeof loadResolvedAgentTopology;
|
|
43
|
+
}
|
|
44
|
+
export declare function startPaseoHarness(root: string, config: HarnessProjectConfig, options?: PaseoStartOptions, deps?: PaseoStartDeps): Promise<PaseoStartResult>;
|
|
45
|
+
export declare function buildPaseoLeadBootstrap(projectName: string, projectRoot: string, aehCommand: string): string;
|
|
46
|
+
export declare function resolveLeadAgent(topology: ResolvedAgentTopology, configured?: string): string;
|
|
47
|
+
export {};
|