nexo-brain 7.20.25 → 7.22.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-plugin/plugin.json +1 -1
- package/README.md +5 -1
- package/bin/nexo-brain.js +21 -1
- package/package.json +1 -1
- package/src/auto_update.py +1 -1
- package/src/local_context/__init__.py +2 -0
- package/src/local_context/api.py +859 -27
- package/src/local_context/db.py +51 -0
- package/src/local_context/extractors.py +68 -8
- package/src/mcp_required_tools.py +2 -0
- package/src/mcp_write_queue.py +354 -0
- package/src/runtime_service.py +426 -0
- package/src/runtime_versioning.py +13 -0
- package/src/server.py +122 -3
- package/src/tools_sessions.py +326 -71
- package/tool-enforcement-map.json +64 -4
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nexo-brain",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.22.0",
|
|
4
4
|
"description": "Local cognitive runtime for Claude Code \u2014 persistent memory, overnight learning, doctor diagnostics, personal scripts, recovery-aware jobs, startup preflight, and optional dashboard/power helper.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "NEXO Brain",
|
package/README.md
CHANGED
|
@@ -18,7 +18,11 @@
|
|
|
18
18
|
|
|
19
19
|
[Watch the overview video](https://nexo-brain.com/watch/) · [Watch on YouTube](https://www.youtube.com/watch?v=i2lkGhKyVqI) · [Open the infographic](https://nexo-brain.com/assets/nexo-brain-infographic-v5.png)
|
|
20
20
|
|
|
21
|
-
Version `7.
|
|
21
|
+
Version `7.22.0` is the current packaged-runtime line. Minor release over v7.21.0 - heartbeat stays fast in Desktop-managed sessions, MCP writes can be accepted through a durable file-backed queue before SQLite commit, Brain exposes compliance state for Desktop gates, and Local Context adds Entity Dossier for open-domain local evidence aggregation.
|
|
22
|
+
|
|
23
|
+
Previously in `7.21.0`: minor release over v7.20.25 - MCP now starts through a thin compatibility adapter backed by one resident local Runtime Service, reducing duplicate Brain processes and SQLite contention across Claude Code, Codex, Claude Desktop, and NEXO Desktop.
|
|
24
|
+
|
|
25
|
+
Previously in `7.20.25`: patch release over v7.20.24 — Local Context now uses the pinned local BGE embedding model when available, automatically refreshes old hash embeddings, prioritizes known documents before lower-value files, and treats the Desktop-owned Qwen local-presence model as optional in standalone Brain installs.
|
|
22
26
|
|
|
23
27
|
Previously in `7.20.24`: patch release over v7.20.23 — Local Memory performance profile writes now tolerate active indexing, retry transient SQLite busy states, and shorten indexer write locks between processed files.
|
|
24
28
|
|
package/bin/nexo-brain.js
CHANGED
|
@@ -3879,12 +3879,32 @@ async function runSetup() {
|
|
|
3879
3879
|
const slug = (spec.name || "").trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
3880
3880
|
const targetDir = path.join(runtimeModelsDir, slug, spec.revision);
|
|
3881
3881
|
fs.mkdirSync(targetDir, { recursive: true });
|
|
3882
|
+
const missingFiles = [];
|
|
3882
3883
|
for (const f of (spec.required_files || [])) {
|
|
3883
3884
|
const src = path.join(sourceDir, f.path);
|
|
3884
3885
|
const dst = path.join(targetDir, f.path);
|
|
3885
|
-
if (fs.existsSync(src)
|
|
3886
|
+
if (!fs.existsSync(src)) {
|
|
3887
|
+
missingFiles.push(f.path);
|
|
3888
|
+
continue;
|
|
3889
|
+
}
|
|
3890
|
+
fs.mkdirSync(path.dirname(dst), { recursive: true });
|
|
3891
|
+
if (!fs.existsSync(dst) || (f.size && fs.statSync(dst).size !== f.size)) {
|
|
3886
3892
|
fs.copyFileSync(src, dst);
|
|
3887
3893
|
}
|
|
3894
|
+
if (f.size && fs.statSync(dst).size !== f.size) {
|
|
3895
|
+
missingFiles.push(`${f.path}:size`);
|
|
3896
|
+
continue;
|
|
3897
|
+
}
|
|
3898
|
+
if (f.sha256) {
|
|
3899
|
+
const actual = crypto.createHash("sha256").update(fs.readFileSync(dst)).digest("hex");
|
|
3900
|
+
if (actual !== f.sha256) {
|
|
3901
|
+
missingFiles.push(`${f.path}:sha256`);
|
|
3902
|
+
}
|
|
3903
|
+
}
|
|
3904
|
+
}
|
|
3905
|
+
if (missingFiles.length) {
|
|
3906
|
+
log(` WARN: bundled LLM model ${spec.name} incomplete (${missingFiles.join(", ")})`);
|
|
3907
|
+
continue;
|
|
3888
3908
|
}
|
|
3889
3909
|
// Write the lock file to match revision (avoids re-download).
|
|
3890
3910
|
fs.writeFileSync(path.join(targetDir, ".nexo-model-lock.json"), JSON.stringify({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nexo-brain",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.22.0",
|
|
4
4
|
"mcpName": "io.github.wazionapps/nexo",
|
|
5
5
|
"description": "NEXO Brain — Shared brain for AI agents. Persistent memory, semantic RAG, natural forgetting, metacognitive guard, trust scoring, 150+ MCP tools. Works with Claude Code, Codex, Claude Desktop & any MCP client. 100% local, free.",
|
|
6
6
|
"homepage": "https://nexo-brain.com",
|
package/src/auto_update.py
CHANGED
|
@@ -3988,7 +3988,7 @@ def _auto_update_check_locked() -> dict:
|
|
|
3988
3988
|
|
|
3989
3989
|
# Backfill runtime CLI modules for existing installs
|
|
3990
3990
|
try:
|
|
3991
|
-
for fname in ("cli.py", "script_registry.py", "skills_runtime.py", "cron_recovery.py", "client_preferences.py", "claude_cli.py", "agent_runner.py", "bootstrap_docs.py", "mcp_required_tools.py"):
|
|
3991
|
+
for fname in ("cli.py", "script_registry.py", "skills_runtime.py", "cron_recovery.py", "client_preferences.py", "claude_cli.py", "agent_runner.py", "bootstrap_docs.py", "mcp_required_tools.py", "runtime_service.py"):
|
|
3992
3992
|
src_file = SRC_DIR / fname
|
|
3993
3993
|
dest_file = NEXO_HOME / fname
|
|
3994
3994
|
if src_file.is_file() and (not dest_file.exists() or src_file.stat().st_mtime > dest_file.stat().st_mtime):
|
|
@@ -11,6 +11,7 @@ from .api import (
|
|
|
11
11
|
clear_index,
|
|
12
12
|
context_router,
|
|
13
13
|
context_query,
|
|
14
|
+
entity_dossier,
|
|
14
15
|
diagnostics_tail,
|
|
15
16
|
ensure_default_roots,
|
|
16
17
|
get_asset,
|
|
@@ -38,6 +39,7 @@ __all__ = [
|
|
|
38
39
|
"clear_index",
|
|
39
40
|
"context_router",
|
|
40
41
|
"context_query",
|
|
42
|
+
"entity_dossier",
|
|
41
43
|
"diagnostics_tail",
|
|
42
44
|
"ensure_default_roots",
|
|
43
45
|
"get_asset",
|