nexo-brain 7.30.25 → 7.30.26

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexo-brain",
3
- "version": "7.30.25",
3
+ "version": "7.30.26",
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,9 @@
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.30.25` is the current packaged-runtime line. Patch release over v7.30.24 - Desktop-facing maintenance diagnostics now self-heal or stay informational when the runtime is healthy, and watchdog uses the canonical cognitive DB layout.
21
+ Version `7.30.26` is the current packaged-runtime line. Patch release over v7.30.25 - `nexo update` now copies packaged core scripts through the F0.6 `scripts -> core/scripts` shim, so watchdog fixes reach the active LaunchAgent path.
22
+
23
+ Previously in `7.30.25`: patch release over v7.30.24 - Desktop-facing maintenance diagnostics now self-heal or stay informational when the runtime is healthy, and watchdog uses the canonical cognitive DB layout.
22
24
 
23
25
  Previously in `7.30.24`: patch release over v7.30.23 - client sync now stages and verifies managed MCP providers before writing Brain-owned default MCP entries into Claude, Codex, or Desktop configs.
24
26
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexo-brain",
3
- "version": "7.30.25",
3
+ "version": "7.30.26",
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",
@@ -4843,6 +4843,14 @@ def _copy_runtime_from_source(src_dir: Path, repo_dir: Path, dest: Path = NEXO_H
4843
4843
  script_conflicts: list[dict[str, str]] = []
4844
4844
  installed_script_classes = _installed_scripts_classification(dest)
4845
4845
 
4846
+ def _preserve_f06_legacy_shims() -> bool:
4847
+ if dest != NEXO_HOME:
4848
+ return False
4849
+ try:
4850
+ return (dest / ".structure-version").read_text(encoding="utf-8").strip() == "F0.6"
4851
+ except Exception:
4852
+ return False
4853
+
4846
4854
  for dirname in ("bin", "skills", "skills-core", "skills-runtime", "templates"):
4847
4855
  (dest / dirname).mkdir(parents=True, exist_ok=True)
4848
4856
 
@@ -4886,7 +4894,10 @@ def _copy_runtime_from_source(src_dir: Path, repo_dir: Path, dest: Path = NEXO_H
4886
4894
  scripts_dest = dest / "scripts"
4887
4895
  if scripts_src.is_dir():
4888
4896
  if scripts_dest.is_symlink():
4889
- _remove_runtime_copy_target(scripts_dest)
4897
+ if _preserve_f06_legacy_shims():
4898
+ scripts_dest = scripts_dest.resolve(strict=False)
4899
+ else:
4900
+ _remove_runtime_copy_target(scripts_dest)
4890
4901
  scripts_dest.mkdir(parents=True, exist_ok=True)
4891
4902
  for item in scripts_src.iterdir():
4892
4903
  if item.name == "__pycache__" or item.name.startswith(".") or is_duplicate_artifact_name(item):
@@ -4897,7 +4908,7 @@ def _copy_runtime_from_source(src_dir: Path, repo_dir: Path, dest: Path = NEXO_H
4897
4908
  shutil.copytree(str(item), str(dst), ignore=_runtime_copy_ignore())
4898
4909
  elif item.is_file():
4899
4910
  existing_class = installed_script_classes.get(item.name, "")
4900
- if dst.exists() and existing_class in {"personal", "non-script"}:
4911
+ if dst.exists() and existing_class == "personal":
4901
4912
  script_conflicts.append(
4902
4913
  {
4903
4914
  "name": item.name,