nexo-brain 7.9.7 → 7.9.8

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.9.7",
3
+ "version": "7.9.8",
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,7 @@
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.9.7` is the current packaged-runtime line. Patch release that hardens the installed-user MCP/update path after live Desktop validation: Brain now normalizes managed runtime configs back to the stable `~/.nexo/core` root instead of leaving clients pinned to versioned snapshots, mirrors Claude Code MCP config into `~/.claude/mcp-cortex.json`, stamps the active MCP client in generated configs, and disables the FastMCP wrapped `output_schema` that was making Claude Code reject plain-text `nexo_*` tool results. Coordinated Desktop v0.28.8 consumes the same contract so archive/reopen/app-quit flows recover cleanly without reviving stale sessions.
21
+ Version `7.9.8` is the current packaged-runtime line. Hotfix release over `7.9.7`: packaged installs that already run from `~/.nexo/core/current -> versions/<version>` no longer mistake that managed snapshot for a mutable source checkout during `nexo update`. The updater now stays on the packaged path unless `version.json` points to a real external repo, so installed users stop “updating” from the old runtime back into itself. Coordinated Desktop v0.28.10 bundles the same fix.
22
22
 
23
23
  Previously in `7.9.5`: patch release that fixes canonical diary confirmation for Desktop: Brain resolves the Desktop/Claude session UUID through NEXO SID aliases before checking `session_diary`, so archive/delete/app-exit can confirm diaries written by `nexo_session_diary_write` under the active `nexo-...` SID. Verification: `pytest tests/test_lifecycle_events.py` (28 passing) plus coordinated Desktop v0.28.6 shutdown/archive/delete/app-exit checks.
24
24
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexo-brain",
3
- "version": "7.9.7",
3
+ "version": "7.9.8",
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",
@@ -3956,6 +3956,13 @@ UPDATE_HISTORY_FILE = paths.logs_dir() / "update-history.jsonl"
3956
3956
  def _resolve_sync_source() -> tuple[Path | None, Path | None]:
3957
3957
  dest = NEXO_HOME
3958
3958
 
3959
+ def _is_relative_to(path: Path, parent: Path) -> bool:
3960
+ try:
3961
+ path.relative_to(parent)
3962
+ return True
3963
+ except Exception:
3964
+ return False
3965
+
3959
3966
  def _runtime_version_source() -> Path | None:
3960
3967
  for version_file in (NEXO_HOME / "version.json", NEXO_HOME / "core" / "version.json"):
3961
3968
  if not version_file.is_file():
@@ -3974,16 +3981,21 @@ def _resolve_sync_source() -> tuple[Path | None, Path | None]:
3974
3981
 
3975
3982
  try:
3976
3983
  runtime_core = (dest / "core").resolve()
3984
+ runtime_versions = (runtime_core / "versions").resolve(strict=False)
3977
3985
  code_resolved = NEXO_CODE.resolve()
3978
3986
  except Exception:
3979
3987
  runtime_core = dest / "core"
3988
+ runtime_versions = runtime_core / "versions"
3980
3989
  code_resolved = NEXO_CODE
3981
3990
 
3982
3991
  # Packaged/runtime-only installs resolve the launcher to ``~/.nexo/core``.
3983
3992
  # Those must use the packaged updater path instead of treating the managed
3984
- # runtime itself as a mutable source repository. Only a recorded external
3985
- # source repo in ``version.json`` should reactivate source-sync mode.
3986
- if code_resolved == runtime_core:
3993
+ # runtime itself as a mutable source repository. That also applies once the
3994
+ # launcher resolves through ``core/current`` into ``core/versions/X.Y.Z``:
3995
+ # the active snapshot is still managed runtime state, not a dev checkout.
3996
+ # Only a recorded external source repo in ``version.json`` should
3997
+ # reactivate source-sync mode.
3998
+ if code_resolved == runtime_core or _is_relative_to(code_resolved, runtime_versions):
3987
3999
  version_source = _runtime_version_source()
3988
4000
  if version_source:
3989
4001
  return version_source / "src", version_source