@claude-flow/cli 3.47.1 → 3.49.0
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/.claude/helpers/auto-memory-hook.mjs +6 -2
- package/.claude/helpers/helpers.manifest.json +5 -5
- package/.claude/helpers/hook-handler.cjs +7 -4
- package/.claude/helpers/learning-service.mjs +4 -2
- package/.claude/helpers/{memory.js → memory.cjs} +1 -1
- package/.claude/helpers/metrics-db.mjs +4 -2
- package/.claude/helpers/{router.js → router.cjs} +1 -1
- package/.claude/helpers/{session.js → session.cjs} +1 -1
- package/README.md +1 -53
- package/bin/cli.js +4 -1
- package/catalog-manifest.json +4 -4
- package/dist/src/commands/analyze.js +2 -2
- package/dist/src/commands/config.js +5 -7
- package/dist/src/commands/doctor.d.ts +19 -1
- package/dist/src/commands/doctor.js +69 -8
- package/dist/src/commands/hooks.js +22 -9
- package/dist/src/commands/memory.js +119 -34
- package/dist/src/commands/metaharness.js +1 -0
- package/dist/src/commands/plugins.js +44 -7
- package/dist/src/commands/policy.js +5 -2
- package/dist/src/commands/security.js +113 -55
- package/dist/src/commands/session.js +132 -25
- package/dist/src/commands/swarm.js +11 -11
- package/dist/src/commands/task.js +5 -4
- package/dist/src/index.js +10 -1
- package/dist/src/init/executor.js +11 -5
- package/dist/src/init/helper-companions.d.ts +3 -0
- package/dist/src/init/helper-companions.js +34 -0
- package/dist/src/init/helper-integrity.d.ts +21 -0
- package/dist/src/init/helper-integrity.js +62 -0
- package/dist/src/init/helper-refresh.d.ts +18 -11
- package/dist/src/init/helper-refresh.js +56 -13
- package/dist/src/init/helpers-generator.js +14 -12
- package/dist/src/mcp-server.js +10 -3
- package/dist/src/mcp-tools/agentdb-tools.js +29 -62
- package/dist/src/mcp-tools/hooks-tools.d.ts +16 -7
- package/dist/src/mcp-tools/hooks-tools.js +226 -51
- package/dist/src/mcp-tools/memory-tools.d.ts +7 -0
- package/dist/src/mcp-tools/memory-tools.js +131 -40
- package/dist/src/mcp-tools/policy-enforcer.d.ts +8 -1
- package/dist/src/mcp-tools/policy-enforcer.js +80 -8
- package/dist/src/mcp-tools/session-tools.d.ts +15 -0
- package/dist/src/mcp-tools/session-tools.js +270 -58
- package/dist/src/memory/feedback-patterns.d.ts +13 -0
- package/dist/src/memory/feedback-patterns.js +14 -0
- package/dist/src/memory/live-memory-row.d.ts +3 -0
- package/dist/src/memory/live-memory-row.js +5 -0
- package/dist/src/memory/memory-bridge.d.ts +11 -20
- package/dist/src/memory/memory-bridge.js +348 -134
- package/dist/src/memory/memory-initializer.d.ts +9 -1
- package/dist/src/memory/memory-initializer.js +47 -34
- package/dist/src/plugins/manager.d.ts +37 -10
- package/dist/src/plugins/manager.js +106 -20
- package/dist/src/plugins/trust-policy.d.ts +61 -0
- package/dist/src/plugins/trust-policy.js +84 -0
- package/dist/src/ruvector/graph-analyzer.js +4 -1
- package/dist/src/services/config-file-manager.js +30 -8
- package/dist/src/services/memory-backup.d.ts +1 -1
- package/dist/src/services/memory-backup.js +67 -27
- package/dist/src/services/policy-runtime.d.ts +6 -0
- package/dist/src/services/policy-runtime.js +27 -2
- package/dist/src/services/worker-daemon.d.ts +2 -2
- package/dist/src/services/worker-daemon.js +23 -14
- package/node_modules/@claude-flow/codex/package.json +1 -1
- package/node_modules/@claude-flow/mcp/dist/tool-registry.d.ts.map +1 -1
- package/node_modules/@claude-flow/mcp/dist/tool-registry.js +11 -3
- package/node_modules/@claude-flow/mcp/dist/tool-registry.js.map +1 -1
- package/node_modules/@claude-flow/mcp/package.json +6 -3
- package/node_modules/@claude-flow/plugin-agent-federation/package.json +3 -3
- package/node_modules/@claude-flow/security/dist/policy/engine.d.ts +2 -6
- package/node_modules/@claude-flow/security/dist/policy/engine.d.ts.map +1 -1
- package/node_modules/@claude-flow/security/dist/policy/engine.js +35 -1
- package/node_modules/@claude-flow/security/dist/policy/engine.js.map +1 -1
- package/node_modules/@claude-flow/security/dist/policy/types.d.ts +18 -0
- package/node_modules/@claude-flow/security/dist/policy/types.d.ts.map +1 -1
- package/node_modules/@claude-flow/security/package.json +2 -3
- package/package.json +9 -9
- package/plugins/ruflo-metaharness/scripts/_cli-args.mjs +37 -0
- package/plugins/ruflo-metaharness/scripts/audit-list.mjs +8 -0
- package/plugins/ruflo-metaharness/scripts/audit-trend.mjs +12 -0
- package/plugins/ruflo-metaharness/scripts/bench-parse-mcp-scan.mjs +8 -0
- package/plugins/ruflo-metaharness/scripts/bench-recordpair-overhead.mjs +8 -0
- package/plugins/ruflo-metaharness/scripts/bench-similarity.mjs +8 -0
- package/plugins/ruflo-metaharness/scripts/bench.mjs +10 -0
- package/plugins/ruflo-metaharness/scripts/drift-from-history.mjs +13 -0
- package/plugins/ruflo-metaharness/scripts/evolve.mjs +27 -0
- package/plugins/ruflo-metaharness/scripts/genome.mjs +8 -0
- package/plugins/ruflo-metaharness/scripts/gepa.mjs +12 -0
- package/plugins/ruflo-metaharness/scripts/learn.mjs +13 -0
- package/plugins/ruflo-metaharness/scripts/mcp-scan.mjs +8 -0
- package/plugins/ruflo-metaharness/scripts/mint.mjs +11 -0
- package/plugins/ruflo-metaharness/scripts/oia-audit.mjs +9 -0
- package/plugins/ruflo-metaharness/scripts/router-parallel-analyze.mjs +8 -0
- package/plugins/ruflo-metaharness/scripts/score.mjs +8 -0
- package/plugins/ruflo-metaharness/scripts/security-bench.mjs +11 -0
- package/plugins/ruflo-metaharness/scripts/similarity.mjs +12 -0
- package/plugins/ruflo-metaharness/scripts/test-cli-help.mjs +72 -0
- package/plugins/ruflo-metaharness/scripts/threat-model.mjs +8 -0
|
@@ -24,6 +24,8 @@
|
|
|
24
24
|
// 1 --alert-on-worst threshold exceeded
|
|
25
25
|
// 2 config error or audit failure
|
|
26
26
|
|
|
27
|
+
import { guardCliArgs } from './_cli-args.mjs';
|
|
28
|
+
|
|
27
29
|
import { runRufloCli } from './_invoke.mjs';
|
|
28
30
|
// iter 63 — SEVERITY_RANK + rankSeverity consolidated to _harness.mjs
|
|
29
31
|
// (was local in iter 62; now shared with audit-trend + mcp-scan).
|
|
@@ -38,6 +40,13 @@ const NS = process.env.OIA_AUDIT_NAMESPACE || 'metaharness-audit';
|
|
|
38
40
|
// resolution per call, possible version skew, fails without registry access).
|
|
39
41
|
// CLI_CORE=1 still opts into `npx @claude-flow/cli-core@alpha`.
|
|
40
42
|
|
|
43
|
+
guardCliArgs(import.meta.url, {
|
|
44
|
+
'--path': 'value',
|
|
45
|
+
'--dry-run': null,
|
|
46
|
+
'--alert-on-worst': 'value',
|
|
47
|
+
'--format': 'value',
|
|
48
|
+
}, "Runs and persists an audit by default. --dry-run skips the memory write; analysis tools still run.");
|
|
49
|
+
|
|
41
50
|
const ARGS = (() => {
|
|
42
51
|
const a = { path: '.', format: 'json', dryRun: false, alertWorst: null };
|
|
43
52
|
for (let i = 2; i < process.argv.length; i++) {
|
|
@@ -33,8 +33,16 @@
|
|
|
33
33
|
// 1 --strict requested AND at least one criterion failed (NOT promotable)
|
|
34
34
|
// 2 config error or input file missing/malformed
|
|
35
35
|
|
|
36
|
+
import { guardCliArgs } from './_cli-args.mjs';
|
|
37
|
+
|
|
36
38
|
import { readFileSync, existsSync } from 'node:fs';
|
|
37
39
|
|
|
40
|
+
guardCliArgs(import.meta.url, {
|
|
41
|
+
'--input': 'value',
|
|
42
|
+
'--format': 'value',
|
|
43
|
+
'--strict': null,
|
|
44
|
+
});
|
|
45
|
+
|
|
38
46
|
const ARGS = (() => {
|
|
39
47
|
const a = { input: '.swarm/router-parallel.jsonl', format: 'table', strict: false };
|
|
40
48
|
for (let i = 2; i < process.argv.length; i++) {
|
|
@@ -16,8 +16,16 @@
|
|
|
16
16
|
// 1 --alert-on-fit-below threshold breached
|
|
17
17
|
// 2 config error or scoring failure
|
|
18
18
|
|
|
19
|
+
import { guardCliArgs } from './_cli-args.mjs';
|
|
20
|
+
|
|
19
21
|
import { runMetaharness, emitDegradedJsonAndExit } from './_harness.mjs';
|
|
20
22
|
|
|
23
|
+
guardCliArgs(import.meta.url, {
|
|
24
|
+
'--path': 'value',
|
|
25
|
+
'--alert-on-fit-below': 'value',
|
|
26
|
+
'--format': 'value',
|
|
27
|
+
});
|
|
28
|
+
|
|
21
29
|
const ARGS = (() => {
|
|
22
30
|
const a = { path: '.', format: 'json', alertFitBelow: null };
|
|
23
31
|
for (let i = 2; i < process.argv.length; i++) {
|
|
@@ -30,8 +30,19 @@
|
|
|
30
30
|
// 1 --alert-on-fail and any acceptance gate failed
|
|
31
31
|
// 2 config error or bench infrastructure failure
|
|
32
32
|
|
|
33
|
+
import { guardCliArgs } from './_cli-args.mjs';
|
|
34
|
+
|
|
33
35
|
import { runDarwinAsync, emitDarwinDegradedJsonAndExit } from './_darwin.mjs';
|
|
34
36
|
|
|
37
|
+
guardCliArgs(import.meta.url, {
|
|
38
|
+
'--population': 'value',
|
|
39
|
+
'--cycles': 'value',
|
|
40
|
+
'--seed': 'value',
|
|
41
|
+
'--alert-on-fail': null,
|
|
42
|
+
'--format': 'value',
|
|
43
|
+
'--timeout-ms': 'value',
|
|
44
|
+
}, "Runs the security benchmark. This command has no plan-only mode.");
|
|
45
|
+
|
|
35
46
|
const ARGS = (() => {
|
|
36
47
|
const a = {
|
|
37
48
|
population: 2,
|
|
@@ -23,6 +23,8 @@
|
|
|
23
23
|
// a structured `{ degraded: true, reason: ... }` payload on stdout
|
|
24
24
|
// - CI-gate ready: smoke step 17y locks this contract
|
|
25
25
|
|
|
26
|
+
import { guardCliArgs } from './_cli-args.mjs';
|
|
27
|
+
|
|
26
28
|
import { readFileSync, existsSync } from 'node:fs';
|
|
27
29
|
import { runRufloCli } from './_invoke.mjs';
|
|
28
30
|
import { similarity } from './_similarity.mjs';
|
|
@@ -33,6 +35,16 @@ const NS = process.env.HARNESS_SIMILARITY_NAMESPACE || 'metaharness-audit';
|
|
|
33
35
|
// resolution per call, possible version skew, fails without registry access).
|
|
34
36
|
// CLI_CORE=1 still opts into `npx @claude-flow/cli-core@alpha`.
|
|
35
37
|
|
|
38
|
+
guardCliArgs(import.meta.url, {
|
|
39
|
+
'--a': 'value',
|
|
40
|
+
'--b': 'value',
|
|
41
|
+
'--a-key': 'value',
|
|
42
|
+
'--b-key': 'value',
|
|
43
|
+
'--per-dimension': null,
|
|
44
|
+
'--format': 'value',
|
|
45
|
+
'--alert-below': 'value',
|
|
46
|
+
});
|
|
47
|
+
|
|
36
48
|
const ARGS = (() => {
|
|
37
49
|
const a = {
|
|
38
50
|
aFile: null, bFile: null,
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Hermetic CLI entry-point checks: no optional tools, network, or real memory writes.
|
|
3
|
+
import { test, before, after } from 'node:test';
|
|
4
|
+
import assert from 'node:assert/strict';
|
|
5
|
+
import { spawnSync } from 'node:child_process';
|
|
6
|
+
import { cpSync, mkdtempSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync, existsSync } from 'node:fs';
|
|
7
|
+
import { tmpdir } from 'node:os';
|
|
8
|
+
import { dirname, join } from 'node:path';
|
|
9
|
+
import { fileURLToPath } from 'node:url';
|
|
10
|
+
|
|
11
|
+
const scripts = ['audit-list', 'audit-trend', 'bench', 'bench-parse-mcp-scan', 'bench-recordpair-overhead',
|
|
12
|
+
'bench-similarity', 'drift-from-history', 'evolve', 'genome', 'gepa', 'learn', 'mcp-scan', 'mint',
|
|
13
|
+
'oia-audit', 'router-parallel-analyze', 'score', 'security-bench', 'similarity', 'threat-model'];
|
|
14
|
+
let root;
|
|
15
|
+
let entryDir;
|
|
16
|
+
let cwd;
|
|
17
|
+
let guard;
|
|
18
|
+
before(() => {
|
|
19
|
+
root = mkdtempSync(join(tmpdir(), 'metaharness-help-'));
|
|
20
|
+
entryDir = join(root, 'scripts');
|
|
21
|
+
cwd = join(root, 'workspace');
|
|
22
|
+
mkdirSync(cwd);
|
|
23
|
+
cpSync(dirname(fileURLToPath(import.meta.url)), entryDir, { recursive: true });
|
|
24
|
+
guard = join(root, 'guard.cjs');
|
|
25
|
+
writeFileSync(guard, `
|
|
26
|
+
const cp = require('node:child_process');
|
|
27
|
+
const fs = require('node:fs');
|
|
28
|
+
const append = fs.appendFileSync;
|
|
29
|
+
const blocked = name => (...args) => {
|
|
30
|
+
append(process.env.ATTEMPT_LOG, name + '\\n');
|
|
31
|
+
throw new Error('test blocked side effect: ' + name);
|
|
32
|
+
};
|
|
33
|
+
for (const name of ['spawn', 'spawnSync', 'exec', 'execSync', 'execFile', 'execFileSync', 'fork']) cp[name] = blocked(name);
|
|
34
|
+
for (const name of ['writeFileSync', 'appendFileSync', 'mkdirSync', 'mkdtempSync', 'renameSync', 'unlinkSync', 'rmSync']) fs[name] = blocked(name);
|
|
35
|
+
require('node:module').syncBuiltinESMExports();
|
|
36
|
+
`);
|
|
37
|
+
});
|
|
38
|
+
after(() => rmSync(root, { recursive: true, force: true }));
|
|
39
|
+
|
|
40
|
+
function invoke(script, args) {
|
|
41
|
+
const log = join(root, 'attempts');
|
|
42
|
+
rmSync(log, { force: true });
|
|
43
|
+
const result = spawnSync(process.execPath, ['--require', guard, join(entryDir, script + '.mjs'), ...args], {
|
|
44
|
+
cwd, encoding: 'utf8', timeout: 3000,
|
|
45
|
+
env: { ...process.env, HOME: root, USERPROFILE: root, ATTEMPT_LOG: log, NODE_OPTIONS: '' },
|
|
46
|
+
});
|
|
47
|
+
return { ...result, attempts: existsSync(log) ? readFileSync(log, 'utf8') : '' };
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
for (const script of scripts) {
|
|
51
|
+
for (const flag of ['--help', '-h']) {
|
|
52
|
+
test(`${script} ${flag} prints help before any side effects`, () => {
|
|
53
|
+
const result = invoke(script, [flag]);
|
|
54
|
+
assert.equal(result.status, 0, result.stderr);
|
|
55
|
+
assert.match(result.stdout, /Usage:/);
|
|
56
|
+
assert.equal(result.attempts, '', 'no subprocess or write may be attempted');
|
|
57
|
+
assert.deepEqual(readdirSync(cwd), []);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
test(`${script} rejects an unknown flag without running`, () => {
|
|
61
|
+
const result = invoke(script, ['--definitely-unknown']);
|
|
62
|
+
assert.equal(result.status, 2, result.stderr);
|
|
63
|
+
assert.match(result.stderr, /Unknown argument/);
|
|
64
|
+
assert.equal(result.attempts, '');
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
for (const args of [['--path'], ['--path', '--dry-run']]) test(`missing option value ${args.join(' ')} does not run`, () => {
|
|
68
|
+
const result = invoke('oia-audit', args);
|
|
69
|
+
assert.equal(result.status, 2);
|
|
70
|
+
assert.match(result.stderr, /requires a value/);
|
|
71
|
+
assert.equal(result.attempts, '');
|
|
72
|
+
});
|
|
@@ -4,10 +4,18 @@
|
|
|
4
4
|
// USAGE
|
|
5
5
|
// node scripts/threat-model.mjs --path . --fail-on high --format json
|
|
6
6
|
|
|
7
|
+
import { guardCliArgs } from './_cli-args.mjs';
|
|
8
|
+
|
|
7
9
|
import { runHarness, emitDegradedJsonAndExit } from './_harness.mjs';
|
|
8
10
|
|
|
9
11
|
const SEVERITY_RANK = { clean: 0, low: 1, medium: 2, high: 3 };
|
|
10
12
|
|
|
13
|
+
guardCliArgs(import.meta.url, {
|
|
14
|
+
'--path': 'value',
|
|
15
|
+
'--fail-on': 'value',
|
|
16
|
+
'--format': 'value',
|
|
17
|
+
});
|
|
18
|
+
|
|
11
19
|
const ARGS = (() => {
|
|
12
20
|
const a = { path: '.', format: 'json', failOn: 'high' };
|
|
13
21
|
for (let i = 2; i < process.argv.length; i++) {
|