metaharness 0.1.10 → 0.1.11
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/dist/constraints.d.ts +28 -0
- package/dist/constraints.d.ts.map +1 -0
- package/dist/constraints.js +59 -0
- package/dist/constraints.js.map +1 -0
- package/dist/repo-scorecard.d.ts +10 -0
- package/dist/repo-scorecard.d.ts.map +1 -1
- package/dist/repo-scorecard.js +32 -1
- package/dist/repo-scorecard.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { RepoProfile, HarnessPlan } from './analyze-repo.js';
|
|
2
|
+
export interface ConstraintResult {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
/** hard = must pass (a failing hard constraint should block scaffolding);
|
|
6
|
+
* soft = advisory (a missing nicety worth flagging). */
|
|
7
|
+
severity: 'hard' | 'soft';
|
|
8
|
+
passed: boolean;
|
|
9
|
+
detail?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Check a recommended harness design against the constraint set. Pure +
|
|
13
|
+
* deterministic — every check reads only the profile + plan.
|
|
14
|
+
*/
|
|
15
|
+
export declare function checkConstraints(profile: RepoProfile, plan: HarnessPlan): ConstraintResult[];
|
|
16
|
+
export interface ConstraintSummary {
|
|
17
|
+
hardPassed: number;
|
|
18
|
+
hardTotal: number;
|
|
19
|
+
softPassed: number;
|
|
20
|
+
softTotal: number;
|
|
21
|
+
/** true iff every HARD constraint passed (the scaffold gate). */
|
|
22
|
+
allHardPass: boolean;
|
|
23
|
+
failures: ConstraintResult[];
|
|
24
|
+
}
|
|
25
|
+
export declare function summarise(results: ConstraintResult[]): ConstraintSummary;
|
|
26
|
+
/** Format the constraint report as lines. */
|
|
27
|
+
export declare function formatConstraints(results: ConstraintResult[]): string[];
|
|
28
|
+
//# sourceMappingURL=constraints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../src/constraints.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd;6DACyD;IACzD,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,gBAAgB,EAAE,CA2B5F;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,iBAAiB,CAWxE;AAED,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE,CAWvE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
//
|
|
3
|
+
// ADR-041 validation stage — hard/soft constraint checks over a candidate harness
|
|
4
|
+
// design. The synthesis loop's "reject a candidate that fails a hard requirement"
|
|
5
|
+
// gate: a recommended design must compile-target a language, only reach for remote
|
|
6
|
+
// MCP when the repo warrants it, and ship the default-deny / audit / approval
|
|
7
|
+
// safety posture. Each constraint is a predicate over the repo profile + the
|
|
8
|
+
// recommended plan — real signals, no LLM, deterministic.
|
|
9
|
+
/** Non-code archetypes don't need a build command to be valid. */
|
|
10
|
+
const NON_CODE_TEMPLATES = new Set(['vertical:research', 'vertical:devops', 'vertical:business']);
|
|
11
|
+
/**
|
|
12
|
+
* Check a recommended harness design against the constraint set. Pure +
|
|
13
|
+
* deterministic — every check reads only the profile + plan.
|
|
14
|
+
*/
|
|
15
|
+
export function checkConstraints(profile, plan) {
|
|
16
|
+
const p = plan.policy;
|
|
17
|
+
const out = [];
|
|
18
|
+
const add = (id, label, severity, passed, detail) => out.push({ id, label, severity, passed, ...(detail ? { detail } : {}) });
|
|
19
|
+
// HARD — a generated harness must be able to target this repo + stay safe.
|
|
20
|
+
add('language-detected', 'A language was detected (compile target)', 'hard', profile.languages.length > 0, profile.languages.length ? undefined : 'no language signal — harness cannot reliably compile-target');
|
|
21
|
+
add('mcp-warranted', 'Remote MCP only when the repo uses MCP', 'hard', plan.mcp !== 'remote' || profile.hasMcp, plan.mcp === 'remote' && !profile.hasMcp ? 'remote MCP recommended but repo shows no MCP usage (unjustified exposure)' : undefined);
|
|
22
|
+
add('default-deny', 'Tool policy is default-deny', 'hard', p.defaultDeny);
|
|
23
|
+
add('audit-log', 'Tool calls are audit-logged', 'hard', p.auditLog);
|
|
24
|
+
add('approval-for-dangerous', 'Dangerous tools require approval', 'hard', p.requireApprovalForDangerous);
|
|
25
|
+
add('bounded-tools', 'Tool calls per turn + timeout are bounded', 'hard', Number.isFinite(p.maxToolCallsPerTurn) && p.maxToolCallsPerTurn > 0 && Number.isFinite(p.toolTimeoutMs) && p.toolTimeoutMs > 0);
|
|
26
|
+
// SOFT — advisory; missing these doesn't block, but the user should know.
|
|
27
|
+
const needsBuild = !NON_CODE_TEMPLATES.has(plan.template);
|
|
28
|
+
add('buildable', 'A build command was found', 'soft', !needsBuild || profile.buildCommands.length > 0, needsBuild && profile.buildCommands.length === 0 ? 'no build command detected — verify the harness builds' : undefined);
|
|
29
|
+
add('testable', 'A test command was found', 'soft', profile.testCommands.length > 0, profile.testCommands.length ? undefined : 'no test command detected — smoke coverage will be thin');
|
|
30
|
+
add('shell-off', 'Shell execution is disabled by default', 'soft', !p.allowShell);
|
|
31
|
+
add('network-off', 'Network access is disabled by default', 'soft', !p.allowNetwork);
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
export function summarise(results) {
|
|
35
|
+
const hard = results.filter((r) => r.severity === 'hard');
|
|
36
|
+
const soft = results.filter((r) => r.severity === 'soft');
|
|
37
|
+
return {
|
|
38
|
+
hardPassed: hard.filter((r) => r.passed).length,
|
|
39
|
+
hardTotal: hard.length,
|
|
40
|
+
softPassed: soft.filter((r) => r.passed).length,
|
|
41
|
+
softTotal: soft.length,
|
|
42
|
+
allHardPass: hard.every((r) => r.passed),
|
|
43
|
+
failures: results.filter((r) => !r.passed),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/** Format the constraint report as lines. */
|
|
47
|
+
export function formatConstraints(results) {
|
|
48
|
+
const s = summarise(results);
|
|
49
|
+
const lines = [
|
|
50
|
+
`Constraints — hard ${s.hardPassed}/${s.hardTotal}${s.allHardPass ? ' ✓ (scaffold-ready)' : ' ✗ (blocked)'}, soft ${s.softPassed}/${s.softTotal}`,
|
|
51
|
+
``,
|
|
52
|
+
];
|
|
53
|
+
for (const r of results) {
|
|
54
|
+
const mark = r.passed ? 'PASS' : r.severity === 'hard' ? 'FAIL' : 'WARN';
|
|
55
|
+
lines.push(` ${mark} [${r.severity}] ${r.label}${r.detail ? ` — ${r.detail}` : ''}`);
|
|
56
|
+
}
|
|
57
|
+
return lines;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=constraints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraints.js","sourceRoot":"","sources":["../src/constraints.ts"],"names":[],"mappings":"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"}
|
package/dist/repo-scorecard.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { checkConstraints } from './constraints.js';
|
|
1
2
|
export type SubcommandResult = {
|
|
2
3
|
code: number;
|
|
3
4
|
lines: string[];
|
|
@@ -16,6 +17,10 @@ export interface RepoScorecard {
|
|
|
16
17
|
recommendedMode: 'CLI' | 'CLI + MCP';
|
|
17
18
|
archetype: string;
|
|
18
19
|
template: string;
|
|
20
|
+
/** All HARD constraints passed → the recommended design is scaffold-ready (ADR-041 validation). */
|
|
21
|
+
scaffoldReady: boolean;
|
|
22
|
+
/** hard-constraints-passed / total (e.g. "6/6"). */
|
|
23
|
+
hardConstraints: string;
|
|
19
24
|
generatedAt: string;
|
|
20
25
|
}
|
|
21
26
|
/**
|
|
@@ -39,6 +44,11 @@ export interface CandidateScore {
|
|
|
39
44
|
* see the alternatives, not just the single recommendation.
|
|
40
45
|
*/
|
|
41
46
|
export declare function topCandidates(dir: string, n?: number): CandidateScore[];
|
|
47
|
+
/** Full constraint report for a repo's recommended design (ADR-041 validation). */
|
|
48
|
+
export declare function repoConstraints(dir: string): {
|
|
49
|
+
repo: string;
|
|
50
|
+
results: ReturnType<typeof checkConstraints>;
|
|
51
|
+
};
|
|
42
52
|
/** Format the top-N candidates as a ranked list. */
|
|
43
53
|
export declare function formatCandidates(repo: string, cands: CandidateScore[]): string[];
|
|
44
54
|
/** CLI: `metaharness score <repo> [--json]`. Mirrors genomeCmd's shape. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-scorecard.d.ts","sourceRoot":"","sources":["../src/repo-scorecard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"repo-scorecard.d.ts","sourceRoot":"","sources":["../src/repo-scorecard.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,gBAAgB,EAAgC,MAAM,kBAAkB,CAAC;AAElF,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,CAAC,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,KAAK,GAAG,WAAW,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,mGAAmG;IACnG,aAAa,EAAE,OAAO,CAAC;IACvB,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAUD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,GAAE,MAAiC,GAAG,aAAa,CA2E7G;AAED,uDAAuD;AACvD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,EAAE,CAa/D;AAED,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,KAAK,GAAG,WAAW,CAAC;CACtC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,cAAc,EAAE,CAmBlE;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAA;CAAE,CAY3G;AAED,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE,CAMhF;AAaD,2EAA2E;AAC3E,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuD5E"}
|
package/dist/repo-scorecard.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
// fits this repo and what it would cost, before you scaffold anything.
|
|
11
11
|
import { resolve, basename } from 'node:path';
|
|
12
12
|
import { inventory, analyzeFiles, recommendPlan, scoreArchetypes, ruvllmSemantic } from './analyze-repo.js';
|
|
13
|
+
import { checkConstraints, summarise, formatConstraints } from './constraints.js';
|
|
13
14
|
const clamp100 = (x) => Math.max(0, Math.min(100, Math.round(x)));
|
|
14
15
|
const round3 = (x) => Math.round(x * 1000) / 1000;
|
|
15
16
|
/** Cheap-tier blended $/1M tokens (DRACO: route DRACO-style work to a cheap model). */
|
|
@@ -73,6 +74,8 @@ export function buildRepoScorecard(dir, generatedAt = new Date().toISOString())
|
|
|
73
74
|
const estTokens = (plan.agents.length || 1) * TOKENS_PER_AGENT;
|
|
74
75
|
const estCostPerRunUsd = round3((estTokens / 1_000_000) * CHEAP_USD_PER_MTOK);
|
|
75
76
|
const recommendedMode = plan.mcp === 'off' ? 'CLI' : 'CLI + MCP';
|
|
77
|
+
// ADR-041 validation stage — hard/soft constraints over the recommended design.
|
|
78
|
+
const cs = summarise(checkConstraints(profile, plan));
|
|
76
79
|
return {
|
|
77
80
|
schema: 1,
|
|
78
81
|
repo: name,
|
|
@@ -85,6 +88,8 @@ export function buildRepoScorecard(dir, generatedAt = new Date().toISOString())
|
|
|
85
88
|
recommendedMode,
|
|
86
89
|
archetype: plan.archetypeId,
|
|
87
90
|
template: plan.template,
|
|
91
|
+
scaffoldReady: cs.allHardPass,
|
|
92
|
+
hardConstraints: `${cs.hardPassed}/${cs.hardTotal}`,
|
|
88
93
|
generatedAt,
|
|
89
94
|
};
|
|
90
95
|
}
|
|
@@ -100,6 +105,7 @@ export function formatRepoScorecard(sc) {
|
|
|
100
105
|
` Memory usefulness: ${sc.memoryUsefulness}/100`,
|
|
101
106
|
` Est. cost per run: $${sc.estCostPerRunUsd.toFixed(3)}`,
|
|
102
107
|
` Recommended mode: ${sc.recommendedMode} (template ${sc.template})`,
|
|
108
|
+
` Constraints: ${sc.hardConstraints} hard ${sc.scaffoldReady ? '✓ scaffold-ready' : '✗ blocked — run with --constraints'}`,
|
|
103
109
|
];
|
|
104
110
|
}
|
|
105
111
|
/**
|
|
@@ -129,6 +135,22 @@ export function topCandidates(dir, n = 3) {
|
|
|
129
135
|
recommendedMode: (s.archetype.mcp === 'off' ? 'CLI' : 'CLI + MCP'),
|
|
130
136
|
}));
|
|
131
137
|
}
|
|
138
|
+
/** Full constraint report for a repo's recommended design (ADR-041 validation). */
|
|
139
|
+
export function repoConstraints(dir) {
|
|
140
|
+
const files = inventory(dir);
|
|
141
|
+
let name = basename(resolve(dir)) || 'repo';
|
|
142
|
+
try {
|
|
143
|
+
const pkgName = files['package.json'] ? JSON.parse(files['package.json']).name : undefined;
|
|
144
|
+
if (pkgName)
|
|
145
|
+
name = pkgName;
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
/* keep basename */
|
|
149
|
+
}
|
|
150
|
+
const profile = analyzeFiles(name, files);
|
|
151
|
+
const plan = recommendPlan(profile, ruvllmSemantic(profile));
|
|
152
|
+
return { repo: name, results: checkConstraints(profile, plan) };
|
|
153
|
+
}
|
|
132
154
|
/** Format the top-N candidates as a ranked list. */
|
|
133
155
|
export function formatCandidates(repo, cands) {
|
|
134
156
|
return [
|
|
@@ -154,7 +176,7 @@ export async function scoreRepoCmd(args) {
|
|
|
154
176
|
let topN = null;
|
|
155
177
|
for (let i = 0; i < args.length; i++) {
|
|
156
178
|
const a = args[i];
|
|
157
|
-
if (a === '--json')
|
|
179
|
+
if (a === '--json' || a === '--constraints')
|
|
158
180
|
continue;
|
|
159
181
|
if (a === '--help' || a === '-h')
|
|
160
182
|
return { code: 0, lines: usage() };
|
|
@@ -176,7 +198,16 @@ export async function scoreRepoCmd(args) {
|
|
|
176
198
|
if (positional.length === 0)
|
|
177
199
|
return { code: 2, lines: usage() };
|
|
178
200
|
const dir = resolve(positional[0]);
|
|
201
|
+
const showConstraints = args.includes('--constraints');
|
|
179
202
|
try {
|
|
203
|
+
if (showConstraints) {
|
|
204
|
+
const { repo, results } = repoConstraints(dir);
|
|
205
|
+
const s = summarise(results);
|
|
206
|
+
return {
|
|
207
|
+
code: s.allHardPass ? 0 : 1, // non-zero exit when a hard constraint fails (CI gate)
|
|
208
|
+
lines: json ? [JSON.stringify({ schema: 1, repo, summary: { ...s, failures: undefined }, results }, null, 2)] : formatConstraints(results),
|
|
209
|
+
};
|
|
210
|
+
}
|
|
180
211
|
if (topN != null) {
|
|
181
212
|
const cands = topCandidates(dir, topN);
|
|
182
213
|
const repo = (() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-scorecard.js","sourceRoot":"","sources":["../src/repo-scorecard.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,EAAE;AACF,4EAA4E;AAC5E,iFAAiF;AACjF,+EAA+E;AAC/E,uEAAuE;AAEvE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAoB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"repo-scorecard.js","sourceRoot":"","sources":["../src/repo-scorecard.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "metaharness",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.11",
|
|
4
4
|
"description": "MetaHarness — mint a custom AI agent harness from any repo. Browser Studio + `npx metaharness` CLI. Runs on Claude Code, Codex, pi.dev, Hermes, OpenClaw, RVM.",
|
|
5
5
|
"homepage": "https://github.com/ruvnet/agent-harness-generator",
|
|
6
6
|
"repository": {
|