metaharness 0.1.0 → 0.1.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/dist/diag.js CHANGED
@@ -86,8 +86,8 @@ function resolveLocalGeneratorVersion() {
86
86
  const candidates = [
87
87
  // Workspace: packages/create-agent-harness/dist/ → ../package.json
88
88
  resolve(__dirname, '..', 'package.json'),
89
- // Installed: node_modules/openharness/package.json (post iter 108 rename)
90
- resolve(__dirname, '..', '..', 'openharness', 'package.json'),
89
+ // Installed: node_modules/metaharness/package.json (post iter 108 rename)
90
+ resolve(__dirname, '..', '..', 'metaharness', 'package.json'),
91
91
  // Legacy: node_modules/create-agent-harness/package.json (pre-rename installs)
92
92
  resolve(__dirname, '..', '..', 'create-agent-harness', 'package.json'),
93
93
  ];
@@ -96,8 +96,8 @@ function resolveLocalGeneratorVersion() {
96
96
  if (existsSync(p)) {
97
97
  const pkg = JSON.parse(readFileSync(p, 'utf-8'));
98
98
  // Accept either name — `create-agent-harness` is the legacy resolved-from-sibling
99
- // case, `openharness` is the current publishable name (iter 108).
100
- if ((pkg.name === 'openharness' || pkg.name === 'create-agent-harness') && typeof pkg.version === 'string') {
99
+ // case, `metaharness` is the current publishable name (iter 108).
100
+ if ((pkg.name === 'metaharness' || pkg.name === 'create-agent-harness') && typeof pkg.version === 'string') {
101
101
  return pkg.version;
102
102
  }
103
103
  }
@@ -276,7 +276,7 @@ export async function buildSupportBundle(harnessDir) {
276
276
  for (const block of [pkg.dependencies, pkg.devDependencies, pkg.peerDependencies]) {
277
277
  if (block && typeof block === 'object') {
278
278
  for (const [name, version] of Object.entries(block)) {
279
- if (name.startsWith('@ruflo/') || name === 'create-agent-harness' || name === 'openharness') {
279
+ if (name.startsWith('@ruflo/') || name === 'create-agent-harness' || name === 'metaharness') {
280
280
  rufloDeps[name] = version;
281
281
  }
282
282
  }
package/dist/genome.js CHANGED
@@ -126,7 +126,7 @@ export function formatGenomeReport(r) {
126
126
  out.push(` test confidence: ${pct(r.genome.test_confidence)}`);
127
127
  out.push('');
128
128
  out.push(`Verdict: ${verdictLine(r.verdict)} (exit ${r.exitCode})`);
129
- out.push(`Scaffold it: npx openharness ${r.plan.name} --template ${r.plan.template}`);
129
+ out.push(`Scaffold it: npx metaharness ${r.plan.name} --template ${r.plan.template}`);
130
130
  return out;
131
131
  }
132
132
  // --- sanitisation (ADR-031) ------------------------------------------------
package/dist/index.js CHANGED
@@ -95,7 +95,7 @@ export function formatCatalog(entries) {
95
95
  const counts = `${e.agentCount}a/${e.skillCount}s/${e.commandCount}c`;
96
96
  lines.push(` ${e.id.padEnd(22)} ${counts.padEnd(10)} ${e.quickStart}`);
97
97
  }
98
- lines.push('', `Scaffold with: openharness <name> --template <id>`);
98
+ lines.push('', `Scaffold with: metaharness <name> --template <id>`);
99
99
  return lines;
100
100
  }
101
101
  export function parseArgs(argv) {
@@ -226,38 +226,38 @@ export function detectRufloProject(dir) {
226
226
  /**
227
227
  * iter 117 — subcommand router. Per the user's directive:
228
228
  *
229
- * Before generation: `openharness`
229
+ * Before generation: `metaharness`
230
230
  * Inside generated harness: `harness`
231
231
  *
232
232
  * The factory side gains 4 explicit verbs (new / from-repo / analyze / genome)
233
233
  * so the surface reads as a tool, not as "the thing that takes a name". The
234
- * legacy bare-name form (`openharness my-bot`) still works as a back-compat
235
- * shortcut for `openharness new my-bot`.
234
+ * legacy bare-name form (`metaharness my-bot`) still works as a back-compat
235
+ * shortcut for `metaharness new my-bot`.
236
236
  */
237
- async function runOpenHarnessSubcommand(sub, rest) {
237
+ async function runMetaHarnessSubcommand(sub, rest) {
238
238
  switch (sub) {
239
239
  case 'new': {
240
- // `openharness new <name> [--template <id>] [--host <id>]`
240
+ // `metaharness new <name> [--template <id>] [--host <id>]`
241
241
  // Just an explicit alias for the bare-name form. Falls through to the
242
242
  // legacy scaffold pipeline so semantics stay byte-identical.
243
243
  return null; // signal "not handled — fall through to main()"
244
244
  }
245
245
  case 'from-repo': {
246
- // `openharness from-repo <url> <name> [--template <id>] [--host <id>]`
246
+ // `metaharness from-repo <url> <name> [--template <id>] [--host <id>]`
247
247
  // Clones a public GitHub repo to a tempdir, runs analyze-repo on it,
248
248
  // and scaffolds the recommended harness as <name>. NO repository code
249
249
  // is executed during analysis — same invariant as `analyze`.
250
250
  const url = rest[0];
251
251
  const name = rest[1];
252
252
  if (!url || !name) {
253
- console.error('Usage: npx openharness from-repo <repo-url> <harness-name> [--template <id>] [--host <id>]');
253
+ console.error('Usage: npx metaharness from-repo <repo-url> <harness-name> [--template <id>] [--host <id>]');
254
254
  return 2;
255
255
  }
256
256
  const { spawnSync } = await import('node:child_process');
257
257
  const { mkdtempSync } = await import('node:fs');
258
258
  const { tmpdir } = await import('node:os');
259
259
  const { join: pathJoin } = await import('node:path');
260
- const tmp = mkdtempSync(pathJoin(tmpdir(), 'openharness-fromrepo-'));
260
+ const tmp = mkdtempSync(pathJoin(tmpdir(), 'metaharness-fromrepo-'));
261
261
  console.log(`Cloning ${url} → ${tmp} (depth=1, code never executed)`);
262
262
  const clone = spawnSync('git', ['clone', '--depth=1', '--quiet', url, tmp], { stdio: 'inherit' });
263
263
  if (clone.status !== 0) {
@@ -274,7 +274,7 @@ async function runOpenHarnessSubcommand(sub, rest) {
274
274
  return r.code;
275
275
  }
276
276
  case 'analyze': {
277
- // `openharness analyze <path> [--scaffold <name>] [--embed]`
277
+ // `metaharness analyze <path> [--scaffold <name>] [--embed]`
278
278
  // Alias for `harness analyze-repo`. Surface unification per the
279
279
  // user's command-model directive.
280
280
  const { analyzeRepoCmd } = await import('./analyze-repo.js');
@@ -284,7 +284,7 @@ async function runOpenHarnessSubcommand(sub, rest) {
284
284
  return r.code;
285
285
  }
286
286
  case 'genome': {
287
- // `openharness genome <path>` — flagship feature per the user.
287
+ // `metaharness genome <path>` — flagship feature per the user.
288
288
  // Same code path as `harness genome`.
289
289
  const { genomeCmd } = await import('./genome.js');
290
290
  const r = await genomeCmd(rest);
@@ -302,7 +302,7 @@ export async function main(argv) {
302
302
  // the first arg isn't a recognised subcommand, letting us fall through.
303
303
  const first = argv[0];
304
304
  if (first && !first.startsWith('-')) {
305
- const subResult = await runOpenHarnessSubcommand(first, argv.slice(1));
305
+ const subResult = await runMetaHarnessSubcommand(first, argv.slice(1));
306
306
  if (subResult !== null)
307
307
  return subResult;
308
308
  // `new <name>` — strip the verb and fall through to the legacy scaffold.
@@ -322,7 +322,7 @@ export async function main(argv) {
322
322
  // arg-driven scaffold is what CI should use).
323
323
  if (!process.stdin.isTTY) {
324
324
  console.error('--wizard requires an interactive TTY. Use the arg-driven form in CI:');
325
- console.error(' npx openharness <name> --template <id> --host <id>');
325
+ console.error(' npx metaharness <name> --template <id> --host <id>');
326
326
  return 2;
327
327
  }
328
328
  const { runWizard, makeReadlineAsker, answersToInvocation } = await import('./wizard.js');
@@ -363,10 +363,10 @@ export async function main(argv) {
363
363
  }
364
364
  }
365
365
  if (!args.name) {
366
- console.log('Usage: npx openharness <name> [--template <id>] [--host claude-code|codex|pi-dev|hermes] [--description "..."] [--force]');
367
- console.log(' npx openharness --from-existing [./path]');
368
- console.log(' npx openharness --wizard (iter 100 — interactive picker)');
369
- console.log(' npx openharness --list (browse all templates)');
366
+ console.log('Usage: npx metaharness <name> [--template <id>] [--host claude-code|codex|pi-dev|hermes] [--description "..."] [--force]');
367
+ console.log(' npx metaharness --from-existing [./path]');
368
+ console.log(' npx metaharness --wizard (iter 100 — interactive picker)');
369
+ console.log(' npx metaharness --list (browse all templates)');
370
370
  console.log('');
371
371
  console.log(`Templates: ${TEMPLATES.join(', ')}`);
372
372
  console.log(`Hosts: ${HOSTS.join(', ')}`);
package/dist/registry.js CHANGED
@@ -23,7 +23,7 @@ export function buildRegistryEntry(input) {
23
23
  // Default tags pulled from template + hosts + a few defaults.
24
24
  const tags = input.tags ?? Array.from(new Set([
25
25
  'agent-harness',
26
- 'openharness',
26
+ 'metaharness',
27
27
  templateCategory,
28
28
  ...hosts.map(h => `host:${h}`),
29
29
  'mcp',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "metaharness",
3
- "version": "0.1.0",
4
- "description": "OpenHarness — mint a custom AI agent harness from any repo. Browser Studio + `npx openharness` CLI. Runs on Claude Code, Codex, pi.dev, Hermes, OpenClaw, RVM.",
3
+ "version": "0.1.1",
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": {
7
7
  "type": "git",
@@ -20,7 +20,7 @@
20
20
  }
21
21
  },
22
22
  "bin": {
23
- "openharness": "./dist/bin.js",
23
+ "metaharness": "./dist/bin.js",
24
24
  "harness": "./dist/harness-bin.js"
25
25
  },
26
26
  "files": [
@@ -36,7 +36,7 @@
36
36
  "gen:templates": "node scripts/gen-templates.mjs"
37
37
  },
38
38
  "keywords": [
39
- "openharness",
39
+ "metaharness",
40
40
  "agent-harness",
41
41
  "agent-harness-generator",
42
42
  "ai-agent",