ruvnet-brain 4.7.12 → 4.7.13
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
|
@@ -9,7 +9,7 @@ Created: 2026-06-29 22:36:38 EDT
|
|
|
9
9
|
|
|
10
10
|
### Discover the stack. Read the source. Build with confidence.
|
|
11
11
|
|
|
12
|
-
[](plugin/.claude-plugin/plugin.json)
|
|
13
13
|
|
|
14
14
|
**A source-grounded companion for Claude Code and Codex that helps you find and use Reuven Cohen's (rUv's) RuvNet ecosystem.**
|
|
15
15
|
|
|
@@ -255,7 +255,7 @@ uses the protected release workflow; a consumer update downloads an available ge
|
|
|
255
255
|
does not rebuild upstream knowledge. Check `--doctor`, `SOURCE.json` and refresh receipts
|
|
256
256
|
before treating an installation as current.
|
|
257
257
|
|
|
258
|
-
The **4.6.0 published-corpus baseline** is **203 public stores · 164,
|
|
258
|
+
The **4.6.0 published-corpus baseline** is **203 public stores · 164,401 public source chunks**.
|
|
259
259
|
Those are bundle census values, not a claim that every upstream repository is fresh today.
|
|
260
260
|
Later corpus publication may advance the knowledge generation independently of code changes.
|
|
261
261
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ruvnet-brain",
|
|
3
|
-
"version": "4.7.
|
|
3
|
+
"version": "4.7.13",
|
|
4
4
|
"description": "One-command installer for RuvNet Brain — 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.7.
|
|
4
|
+
"version": "4.7.13",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Stuart Kerr"
|
|
7
7
|
},
|
|
@@ -67,6 +67,27 @@ function defaultNodeCandidates(env) {
|
|
|
67
67
|
return [...new Set(out)].filter((c) => { try { return fs.statSync(c).isFile(); } catch { return false; } });
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
// Where ruflo's native better-sqlite3 lives depends on the ruflo release. Measured 2026-10-17 with npm -g: ruflo
|
|
71
|
+
// 3.56.10 hoisted nothing (copies nested under @claude-flow/cli, @claude-flow/memory and agentdb), so probing only
|
|
72
|
+
// <ruflo>/node_modules/better-sqlite3 found nothing and node selection silently never ran; ruflo 3.57.0 hoists it.
|
|
73
|
+
// We probe the hoisted copy first, so a machine that has one behaves exactly as before, then the nested layouts.
|
|
74
|
+
// Every candidate is a fixed path under ruflo's own realpath. Copies can differ in version (3.57.0: hoisted 12.11.1,
|
|
75
|
+
// agentdb's nested 11.10.0), so the probed copy is a proxy for the one the writer loads, not proof of it.
|
|
76
|
+
const ADDON_DIRS = [
|
|
77
|
+
['node_modules', 'better-sqlite3'],
|
|
78
|
+
['node_modules', '@claude-flow', 'cli', 'node_modules', 'better-sqlite3'],
|
|
79
|
+
['node_modules', '@claude-flow', 'memory', 'node_modules', 'better-sqlite3'],
|
|
80
|
+
['node_modules', 'agentdb', 'node_modules', 'better-sqlite3'],
|
|
81
|
+
];
|
|
82
|
+
|
|
83
|
+
function findAddon(packageRoot) {
|
|
84
|
+
for (const parts of ADDON_DIRS) {
|
|
85
|
+
const dir = path.join(packageRoot, ...parts);
|
|
86
|
+
try { if (fs.statSync(dir).isDirectory()) return dir; } catch { /* try the next layout */ }
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
|
|
70
91
|
const nativeNodeCache = new Map();
|
|
71
92
|
const PROBE_TIMEOUT_MS = 2000;
|
|
72
93
|
const PROBE_BUDGET_MS = 3000;
|
|
@@ -91,8 +112,8 @@ export function rufloInvocationOrPlain(binary, args, opts) {
|
|
|
91
112
|
export function nativeNodeFor(binary, { env = process.env, candidates } = {}) {
|
|
92
113
|
let entry;
|
|
93
114
|
try { entry = fs.realpathSync(binary); } catch { return null; }
|
|
94
|
-
const addon =
|
|
95
|
-
|
|
115
|
+
const addon = findAddon(path.dirname(path.dirname(entry)));
|
|
116
|
+
if (!addon) return null;
|
|
96
117
|
|
|
97
118
|
const list = candidates ?? defaultNodeCandidates(env);
|
|
98
119
|
const cacheKey = `${entry}\0${list.join('\0')}`;
|