ruvnet-brain 4.3.32 → 4.3.34
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
CHANGED
|
@@ -7,7 +7,7 @@ Created: 2026-06-29 22:36:38 EDT
|
|
|
7
7
|
|
|
8
8
|
# 🧠 RuvNet Brain
|
|
9
9
|
|
|
10
|
-
### 🧠 RuvNet Brain — [](https://github.com/stuinfla/ruvnet-brain/blob/main/plugin/.claude-plugin/plugin.json)
|
|
11
11
|
|
|
12
12
|
**A portable, source-grounded brain over Reuven Cohen's (rUv's) RuvNet stack — delivered as a Claude Code plugin that makes Claude _use_ the stack instead of fighting it.**
|
|
13
13
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ruvnet-brain",
|
|
3
|
-
"version": "4.3.
|
|
3
|
+
"version": "4.3.34",
|
|
4
4
|
"description": "One-command installer for RuvNet Brain \u2014 a portable, source-grounded brain over rUv's RuvNet building blocks, delivered as a Claude Code plugin so Claude uses the stack instead of fighting it.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ruvnet-brain",
|
|
3
3
|
"description": "RuvNet brain transplant for Claude Code — grounds every RuvNet decision in real source across 77 rUv repositories, prefers Ruflo / RuVector-RVF / AgentDB over training-prior defaults (pgvector, Pinecone, hand-rolled cosine), and can pull in any RuvNet repo on demand. Ships a UserPromptSubmit retrieve-and-inject grounding hook and a PreToolUse write gate that refuses ungrounded rUv-product code until search_ruvnet has been consulted (ADR-0012 / ADR-067).",
|
|
4
|
-
"version": "4.3.
|
|
4
|
+
"version": "4.3.34",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Stuart Kerr"
|
|
7
7
|
},
|
|
@@ -49,9 +49,13 @@ async function doctor(proj) {
|
|
|
49
49
|
const hasSchema = sql(db, 'SELECT count(*) FROM episodes;') !== null;
|
|
50
50
|
if (!hasSchema) row.notes.push('OLD SCHEMA — needs export/init/import migration (see migrate-agentdb-schema.sh)');
|
|
51
51
|
|
|
52
|
-
// What can the session-start hook actually see?
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
// What can the session-start hook actually see? `name` is a directory basename the operator
|
|
53
|
+
// chose on the CLI, not adversarial input -- but a project folder with an apostrophe in its name
|
|
54
|
+
// would otherwise break this query's syntax, so it gets the same escaping every other SQL
|
|
55
|
+
// interpolation in this codebase already uses.
|
|
56
|
+
const escapedName = name.replace(/'/g, "''");
|
|
57
|
+
row.visible = Number(sql(db, `SELECT count(*) FROM memory_entries WHERE namespace='${escapedName}';`) ?? 0);
|
|
58
|
+
row.checkpoint = Number(sql(db, `SELECT count(*) FROM memory_entries WHERE namespace='${escapedName}' AND key LIKE 'project-state-current%';`) ?? 0) > 0;
|
|
55
59
|
|
|
56
60
|
// Foreign-project namespaces: REPORT, never migrate.
|
|
57
61
|
const nsRows = (sql(db, 'SELECT namespace, count(*) FROM memory_entries GROUP BY namespace;') || '')
|
|
@@ -96,7 +96,7 @@ function rufloJson(args) {
|
|
|
96
96
|
const tmp = path.join(SCRATCH_DIR, `call-${callCounter++}.json`);
|
|
97
97
|
const fd = fs.openSync(tmp, 'w');
|
|
98
98
|
try {
|
|
99
|
-
execFileSync(RUFLO, args, { stdio: ['ignore', fd, 'ignore'], timeout: CLI_TIMEOUT_MS });
|
|
99
|
+
execFileSync(RUFLO, args, { stdio: ['ignore', fd, 'ignore'], timeout: CLI_TIMEOUT_MS, env: { ...process.env, RUFLO_DAEMON_AUTOSTART: '0' } });
|
|
100
100
|
} catch (e) {
|
|
101
101
|
if (e.signal || e.code === 'ETIMEDOUT') {
|
|
102
102
|
throw new Error(`ruflo ${args.join(' ')} did not finish within ${CLI_TIMEOUT_MS}ms (killed with ${e.signal || e.code}) — likely lock contention from a concurrent writer on this shared machine. Re-run.`);
|
|
@@ -93,6 +93,7 @@ const checks = [
|
|
|
93
93
|
['scripts/goldie-research.mjs', 'family prefix match against the live catalog'],
|
|
94
94
|
['scripts/routing-flywheel.mjs', 'comment example of id normalisation'],
|
|
95
95
|
['scripts/proxy/proxy-verify.mjs', 'standalone ADR-0026 proxy trial tool (wired-check exempt)'],
|
|
96
|
+
['scripts/model-router-engine.mjs', 'owner: built-in catalog fallback for when ~/.claude/model-router/catalog.json is absent'],
|
|
96
97
|
]);
|
|
97
98
|
const files = tracked.filter((f) => /^(scripts|plugin|bin|kb)\/.+\.mjs$/.test(f) && !allowed.has(f) && re.test(read(f)));
|
|
98
99
|
return none(files);
|
|
@@ -201,7 +202,7 @@ const checks = [
|
|
|
201
202
|
run: () => { const s = readAbs(path.join(HOME, '.claude/settings.json')); return { ok: !/agentdb-autocapture/.test(s), detail: /agentdb-autocapture/.test(s) ? 'global agentdb-autocapture still registered alongside the plugin session-snapshot' : 'single writer' }; } },
|
|
202
203
|
|
|
203
204
|
{ id: 'E3', area: 'hooks', scope: 'machine', title: 'Lessons live in one store (no .swarm lesson-* rows outside the plugin lesson store)',
|
|
204
|
-
run: () => { const r = spawnSync('ruflo', ['memory', 'list', '--path', path.join(HOME, 'Code/ruvnet-brain/.swarm/memory.db'), '--limit', '500'], { encoding: 'utf8', timeout: 60000 });
|
|
205
|
+
run: () => { const r = spawnSync('ruflo', ['memory', 'list', '--path', path.join(HOME, 'Code/ruvnet-brain/.swarm/memory.db'), '--limit', '500'], { encoding: 'utf8', timeout: 60000, env: { ...process.env, RUFLO_DAEMON_AUTOSTART: '0' } });
|
|
205
206
|
const n = (r.stdout.match(/lesson-/g) || []).length; return { ok: n === 0, detail: `${n} lesson-* rows in project .swarm (plugin store: ~/.config/ruvnet-brain/lessons.json)` }; } },
|
|
206
207
|
{ id: 'E4', area: 'hooks', scope: 'machine', title: 'One session-start continuity restorer (global hook stands down when the plugin is enabled)',
|
|
207
208
|
run: () => { const s = readAbs(path.join(HOME, '.claude/hooks/agentdb-ensure.sh')); return { ok: s.includes('SINGLE CONTINUITY OWNER'), detail: 'agentdb-ensure.sh must stand down its project-state recall' }; } },
|