metaharness 0.1.9 → 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 +26 -0
- package/dist/repo-scorecard.d.ts.map +1 -1
- package/dist/repo-scorecard.js +95 -4
- 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
|
/**
|
|
@@ -25,6 +30,27 @@ export interface RepoScorecard {
|
|
|
25
30
|
export declare function buildRepoScorecard(dir: string, generatedAt?: string): RepoScorecard;
|
|
26
31
|
/** Format the scorecard as the ADR-041 6-line card. */
|
|
27
32
|
export declare function formatRepoScorecard(sc: RepoScorecard): string[];
|
|
33
|
+
/** One candidate harness design (ADR-041 candidate-generation / beam stage). */
|
|
34
|
+
export interface CandidateScore {
|
|
35
|
+
archetype: string;
|
|
36
|
+
label: string;
|
|
37
|
+
template: string;
|
|
38
|
+
harnessFit: number;
|
|
39
|
+
recommendedMode: 'CLI' | 'CLI + MCP';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The top-N candidate harness designs for a repo, each scored — the beam-search
|
|
43
|
+
* candidate-generation stage of ADR-041 over the archetype library. Lets the user
|
|
44
|
+
* see the alternatives, not just the single recommendation.
|
|
45
|
+
*/
|
|
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
|
+
};
|
|
52
|
+
/** Format the top-N candidates as a ranked list. */
|
|
53
|
+
export declare function formatCandidates(repo: string, cands: CandidateScore[]): string[];
|
|
28
54
|
/** CLI: `metaharness score <repo> [--json]`. Mirrors genomeCmd's shape. */
|
|
29
55
|
export declare function scoreRepoCmd(args: string[]): Promise<SubcommandResult>;
|
|
30
56
|
//# sourceMappingURL=repo-scorecard.d.ts.map
|
|
@@ -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
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
// — the scorecard's job is to tell the truth about whether a generated harness
|
|
10
10
|
// fits this repo and what it would cost, before you scaffold anything.
|
|
11
11
|
import { resolve, basename } from 'node:path';
|
|
12
|
-
import { inventory, analyzeFiles, recommendPlan, ruvllmSemantic } from './analyze-repo.js';
|
|
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,14 +105,67 @@ 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'}`,
|
|
109
|
+
];
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The top-N candidate harness designs for a repo, each scored — the beam-search
|
|
113
|
+
* candidate-generation stage of ADR-041 over the archetype library. Lets the user
|
|
114
|
+
* see the alternatives, not just the single recommendation.
|
|
115
|
+
*/
|
|
116
|
+
export function topCandidates(dir, n = 3) {
|
|
117
|
+
const files = inventory(dir);
|
|
118
|
+
let name = basename(resolve(dir)) || 'repo';
|
|
119
|
+
try {
|
|
120
|
+
const pkgName = files['package.json'] ? JSON.parse(files['package.json']).name : undefined;
|
|
121
|
+
if (pkgName)
|
|
122
|
+
name = pkgName;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
/* keep basename */
|
|
126
|
+
}
|
|
127
|
+
const profile = analyzeFiles(name, files);
|
|
128
|
+
return scoreArchetypes(profile, ruvllmSemantic(profile))
|
|
129
|
+
.slice(0, Math.max(1, n))
|
|
130
|
+
.map((s) => ({
|
|
131
|
+
archetype: s.archetype.id,
|
|
132
|
+
label: s.archetype.label,
|
|
133
|
+
template: s.archetype.template,
|
|
134
|
+
harnessFit: clamp100(s.confidence * 100),
|
|
135
|
+
recommendedMode: (s.archetype.mcp === 'off' ? 'CLI' : 'CLI + MCP'),
|
|
136
|
+
}));
|
|
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
|
+
}
|
|
154
|
+
/** Format the top-N candidates as a ranked list. */
|
|
155
|
+
export function formatCandidates(repo, cands) {
|
|
156
|
+
return [
|
|
157
|
+
`Top ${cands.length} harness designs — ${repo}`,
|
|
158
|
+
``,
|
|
159
|
+
...cands.map((c, i) => ` ${i + 1}. ${c.label.padEnd(22)} fit ${String(c.harnessFit).padStart(3)}/100 ${c.recommendedMode.padEnd(9)} (${c.template})`),
|
|
103
160
|
];
|
|
104
161
|
}
|
|
105
162
|
function usage() {
|
|
106
163
|
return [
|
|
107
|
-
'Usage: metaharness score <repo-path> [--json]',
|
|
164
|
+
'Usage: metaharness score <repo-path> [--json] [--top N]',
|
|
108
165
|
'',
|
|
109
166
|
'Produces the ADR-041 scorecard: harness fit, compile confidence, task',
|
|
110
167
|
'coverage, tool safety, memory usefulness, est. $/run, recommended mode.',
|
|
168
|
+
'--top N lists the N best-fit harness designs (candidate generation).',
|
|
111
169
|
'No-exec: only reads high-signal files; never runs repo code.',
|
|
112
170
|
];
|
|
113
171
|
}
|
|
@@ -115,11 +173,22 @@ function usage() {
|
|
|
115
173
|
export async function scoreRepoCmd(args) {
|
|
116
174
|
const json = args.includes('--json');
|
|
117
175
|
const positional = [];
|
|
118
|
-
|
|
119
|
-
|
|
176
|
+
let topN = null;
|
|
177
|
+
for (let i = 0; i < args.length; i++) {
|
|
178
|
+
const a = args[i];
|
|
179
|
+
if (a === '--json' || a === '--constraints')
|
|
120
180
|
continue;
|
|
121
181
|
if (a === '--help' || a === '-h')
|
|
122
182
|
return { code: 0, lines: usage() };
|
|
183
|
+
if (a === '--top') {
|
|
184
|
+
const v = parseInt(args[++i] ?? '', 10);
|
|
185
|
+
if (!Number.isFinite(v) || v < 1) {
|
|
186
|
+
const err = { schema: 1, error: 'invalid-top', exitCode: 2 };
|
|
187
|
+
return { code: 2, lines: [json ? JSON.stringify(err, null, 2) : '--top requires a positive integer'] };
|
|
188
|
+
}
|
|
189
|
+
topN = v;
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
123
192
|
if (a.startsWith('--')) {
|
|
124
193
|
const err = { schema: 1, error: `unknown-flag-${a.replace(/^--?/, '')}`, exitCode: 2 };
|
|
125
194
|
return { code: 2, lines: [json ? JSON.stringify(err, null, 2) : `Unknown flag: ${a}`] };
|
|
@@ -129,7 +198,29 @@ export async function scoreRepoCmd(args) {
|
|
|
129
198
|
if (positional.length === 0)
|
|
130
199
|
return { code: 2, lines: usage() };
|
|
131
200
|
const dir = resolve(positional[0]);
|
|
201
|
+
const showConstraints = args.includes('--constraints');
|
|
132
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
|
+
}
|
|
211
|
+
if (topN != null) {
|
|
212
|
+
const cands = topCandidates(dir, topN);
|
|
213
|
+
const repo = (() => {
|
|
214
|
+
try {
|
|
215
|
+
const f = inventory(dir)['package.json'];
|
|
216
|
+
return (f && JSON.parse(f).name) || basename(dir);
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return basename(dir);
|
|
220
|
+
}
|
|
221
|
+
})();
|
|
222
|
+
return { code: 0, lines: json ? [JSON.stringify({ schema: 1, repo, candidates: cands }, null, 2)] : formatCandidates(repo, cands) };
|
|
223
|
+
}
|
|
133
224
|
const sc = buildRepoScorecard(dir);
|
|
134
225
|
return { code: 0, lines: json ? [JSON.stringify(sc, null, 2)] : formatRepoScorecard(sc) };
|
|
135
226
|
}
|
|
@@ -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,cAAc,EAAoB,MAAM,mBAAmB,CAAC;
|
|
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;AAC9H,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAyBlF,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1D,uFAAuF;AACvF,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,4EAA4E;AAC5E,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,cAAsB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAC5F,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,gFAAgF;IAChF,uCAAuC;IACvC,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAClH,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,GAAG,OAAO,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,mBAAmB;IACrB,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAE1E,6EAA6E;IAC7E,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;IAEnD,2EAA2E;IAC3E,yEAAyE;IACzE,MAAM,iBAAiB,GAAG,QAAQ,CAChC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3B,CAAC;IAEF,gFAAgF;IAChF,wEAAwE;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC/E,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;IAErG,qEAAqE;IACrE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,CAAC,CAAC,WAAW;QAAE,MAAM,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,CAAC,CAAC,UAAU;QAAE,MAAM,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,CAAC,CAAC,YAAY;QAAE,MAAM,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,CAAC,CAAC,cAAc;QAAE,MAAM,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC,CAAC,2BAA2B;QAAE,MAAM,IAAI,EAAE,CAAC;IAChD,IAAI,CAAC,CAAC,QAAQ;QAAE,MAAM,IAAI,EAAE,CAAC;IAC7B,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ;QAAE,MAAM,IAAI,EAAE,CAAC,CAAC,oCAAoC;IAC7E,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEpC,6EAA6E;IAC7E,2CAA2C;IAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,gBAAgB,GAAG,QAAQ,CAC/B,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CACjG,CAAC;IAEF,4EAA4E;IAC5E,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,gBAAgB,CAAC;IAC/D,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,kBAAkB,CAAC,CAAC;IAE9E,MAAM,eAAe,GAAqC,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC;IAEnG,gFAAgF;IAChF,MAAM,EAAE,GAAG,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAEtD,OAAO;QACL,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,IAAI;QACV,UAAU;QACV,iBAAiB;QACjB,YAAY;QACZ,UAAU;QACV,gBAAgB;QAChB,gBAAgB;QAChB,eAAe;QACf,SAAS,EAAE,IAAI,CAAC,WAAW;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,aAAa,EAAE,EAAE,CAAC,WAAW;QAC7B,eAAe,EAAE,GAAG,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,SAAS,EAAE;QACnD,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,mBAAmB,CAAC,EAAiB;IACnD,OAAO;QACL,eAAe,EAAE,CAAC,IAAI,0BAA0B,EAAE,CAAC,SAAS,GAAG;QAC/D,EAAE;QACF,yBAAyB,EAAE,CAAC,UAAU,MAAM;QAC5C,yBAAyB,EAAE,CAAC,iBAAiB,MAAM;QACnD,yBAAyB,EAAE,CAAC,YAAY,MAAM;QAC9C,yBAAyB,EAAE,CAAC,UAAU,MAAM;QAC5C,yBAAyB,EAAE,CAAC,gBAAgB,MAAM;QAClD,0BAA0B,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC1D,yBAAyB,EAAE,CAAC,eAAe,eAAe,EAAE,CAAC,QAAQ,GAAG;QACxE,yBAAyB,EAAE,CAAC,eAAe,SAAS,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,oCAAoC,EAAE;KACnI,CAAC;AACJ,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,CAAC,GAAG,CAAC;IAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAClH,IAAI,OAAO;YAAE,IAAI,GAAG,OAAO,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,mBAAmB;IACrB,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,OAAO,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;SACrD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE;QACzB,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK;QACxB,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ;QAC9B,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC;QACxC,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAsC;KACxG,CAAC,CAAC,CAAC;AACR,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAClH,IAAI,OAAO;YAAE,IAAI,GAAG,OAAO,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,mBAAmB;IACrB,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAuB;IACpE,OAAO;QACL,OAAO,KAAK,CAAC,MAAM,sBAAsB,IAAI,EAAE;QAC/C,EAAE;QACF,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,GAAG,CAAC;KACzJ,CAAC;AACJ,CAAC;AAED,SAAS,KAAK;IACZ,OAAO;QACL,yDAAyD;QACzD,EAAE;QACF,uEAAuE;QACvE,yEAAyE;QACzE,sEAAsE;QACtE,8DAA8D;KAC/D,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,eAAe;YAAE,SAAS;QACtD,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;QACrE,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,CAAU,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACtE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAmC,CAAC,EAAE,CAAC;YACzG,CAAC;YACD,IAAI,GAAG,CAAC,CAAC;YACT,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,CAAU,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAChG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1F,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;IAEhE,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC;IACpC,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;YAC7B,OAAO;gBACL,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,uDAAuD;gBACpF,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC;aAC3I,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE;gBACjB,IAAI,CAAC;oBACH,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;oBACzC,OAAO,CAAC,CAAC,IAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAuB,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC3E,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;YACL,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACtI,CAAC;QACD,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,CAAU,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAClF,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,EAAE,CAAC,EAAE,CAAC;IAC1F,CAAC;AACH,CAAC"}
|
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": {
|