nexo-brain 5.5.6 → 5.6.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexo-brain",
3
- "version": "5.5.6",
3
+ "version": "5.6.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,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 `5.5.6` is the current packaged-runtime line: same-day follow-up to v5.5.5 that adds in-process rate-limits to `nexo_backup_now` (30 s), `nexo_backup_restore` (60 s), and `export_user_bundle` (120 s) so a runaway MCP client can no longer hammer `sqlite3.Connection.backup()` from a tool-use loop — closing the cause of the 2026-04-16 incident the same day v5.5.5 closed its consequences.
21
+ Version `5.6.0` is the current packaged-runtime line: default model upgrade from Opus 4.6 to **Opus 4.7** with `reasoning_effort: "max"` (the new highest tier). Auto-migration on `nexo update` silently upgrades existing users from `claude-opus-4-6*` to `claude-opus-4-7` preserving the 1M context suffix. Codex profiles are untouched.
22
22
 
23
23
  Previously in `5.5.5`: data-loss guardrails + automatic self-heal. The updater now refuses to capture an already-wiped `nexo.db` into a `pre-update-*` snapshot (validated `sqlite3.backup` + pre-flight wipe guard + post-migration row-count gate), and an auto-heal restores `data/nexo.db` from the newest hourly backup on the next server boot when a wipe is detected. New `nexo recover` CLI + `nexo_recover` MCP tool.
24
24
 
@@ -830,7 +830,7 @@ If you want the shell or Python wrappers instead of raw MCP tools:
830
830
  - [docs/reference-verticals.md](docs/reference-verticals.md)
831
831
  - [compare/README.md](compare/README.md)
832
832
 
833
- The model you pick during install is used everywhere — interactive sessions, automation scripts, and all task profiles. Change it once in your preferences and every part of the system follows. Default: `Opus 4.6 with 1M context`.
833
+ The model you pick during install is used everywhere — interactive sessions, automation scripts, and all task profiles. Change it once in your preferences and every part of the system follows. Default: `Opus 4.7 with 1M context`.
834
834
 
835
835
  Or use the shell alias created during install (e.g. `atlas`), which now runs `nexo chat .` so it opens the terminal client you pick for that session, with the last-used option shown first.
836
836
 
@@ -911,7 +911,7 @@ The Doctor system reads existing health artifacts (immune, watchdog, self-audit)
911
911
  - **macOS or Linux** (Windows via [WSL](https://learn.microsoft.com/en-us/windows/wsl/install))
912
912
  - **Node.js 18+** (for the installer)
913
913
  - **Claude Code is the primary recommended client.** It remains the most mature NEXO path: native hooks, the most battle-tested automation contract, and the clearest parity with historical production behavior.
914
- - **Model:** You pick your model during install and every component uses it. Default is `Opus 4.6 with 1M context`. Scripts and automation profiles read from a single preference — no hardcoded model strings.
914
+ - **Model:** You pick your model during install and every component uses it. Default is `Opus 4.7 with 1M context`. Scripts and automation profiles read from a single preference — no hardcoded model strings.
915
915
  - Python 3, Homebrew, and the selected required client/backend can be installed automatically when NEXO has a supported installer path for that dependency.
916
916
 
917
917
  ## Architecture
@@ -1020,7 +1020,7 @@ NEXO Brain is designed as an MCP server. Claude Code remains the primary recomme
1020
1020
  npx nexo-brain
1021
1021
  ```
1022
1022
 
1023
- All 150+ tools are available immediately after installation. The installer configures Claude Code's `~/.claude/settings.json` automatically. The recommended Claude profile is `Opus 4.6 with 1M context`.
1023
+ All 150+ tools are available immediately after installation. The installer configures Claude Code's `~/.claude/settings.json` automatically. The recommended Claude profile is `Opus 4.7 with 1M context`.
1024
1024
 
1025
1025
  ### Claude Desktop
1026
1026
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexo-brain",
3
- "version": "5.5.6",
3
+ "version": "5.6.0",
4
4
  "mcpName": "io.github.wazionapps/nexo",
5
5
  "description": "NEXO Brain \u2014 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",
@@ -62,7 +62,7 @@ except Exception:
62
62
  }
63
63
 
64
64
  def resolve_client_runtime_profile(client: str, preferences: dict | None = None) -> dict:
65
- _default_model = "claude-opus-4-6[1m]"
65
+ _default_model = "claude-opus-4-7[1m]"
66
66
  defaults = {
67
67
  "claude_code": {"model": _default_model, "reasoning_effort": ""},
68
68
  "codex": {"model": _default_model, "reasoning_effort": ""},
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "schema_version": 1,
3
3
  "claude_code": {
4
- "model": "claude-opus-4-6[1m]",
5
- "reasoning_effort": "",
6
- "display_name": "Opus 4.6 with 1M context",
7
- "recommendation_version": 1,
8
- "previous_defaults": []
4
+ "model": "claude-opus-4-7[1m]",
5
+ "reasoning_effort": "max",
6
+ "display_name": "Opus 4.7 with 1M context",
7
+ "recommendation_version": 2,
8
+ "previous_defaults": ["claude-opus-4-6[1m]"]
9
9
  },
10
10
  "codex": {
11
11
  "model": "gpt-5.4",
@@ -20,11 +20,11 @@ from typing import Any
20
20
  _FALLBACK: dict[str, Any] = {
21
21
  "schema_version": 1,
22
22
  "claude_code": {
23
- "model": "claude-opus-4-6[1m]",
24
- "reasoning_effort": "",
25
- "display_name": "Opus 4.6 with 1M context",
26
- "recommendation_version": 1,
27
- "previous_defaults": [],
23
+ "model": "claude-opus-4-7[1m]",
24
+ "reasoning_effort": "max",
25
+ "display_name": "Opus 4.7 with 1M context",
26
+ "recommendation_version": 2,
27
+ "previous_defaults": ["claude-opus-4-6[1m]"],
28
28
  },
29
29
  "codex": {
30
30
  "model": "gpt-5.4",
@@ -99,15 +99,20 @@ def looks_like_claude_model(model: str) -> bool:
99
99
  return str(model or "").strip().lower().startswith(_CLAUDE_MODEL_PREFIXES)
100
100
 
101
101
 
102
+ _OPUS_46_PREFIX = "claude-opus-4-6"
103
+
104
+
102
105
  def heal_runtime_profiles(profiles: dict) -> tuple[dict, list[str]]:
103
106
  """Detect and repair invalid models in client_runtime_profiles. Returns
104
- (healed_profiles_dict, list_of_heal_messages). A Claude-family model in
105
- the codex profile is the main historical corruption; we reset such a
106
- profile to the current Codex default."""
107
+ (healed_profiles_dict, list_of_heal_messages). Handles two cases:
108
+ 1. Claude-family model in the codex profile (historical bug).
109
+ 2. Opus 4.6 4.7 auto-migration for claude_code users on a NEXO default."""
107
110
  if not isinstance(profiles, dict):
108
111
  return profiles, []
109
112
  healed = dict(profiles)
110
113
  messages: list[str] = []
114
+
115
+ # --- Codex heal (historical bug: Claude model in codex slot) ---
111
116
  codex_profile = healed.get("codex") if isinstance(healed.get("codex"), dict) else None
112
117
  if codex_profile is not None:
113
118
  current = str(codex_profile.get("model") or "").strip()
@@ -121,6 +126,26 @@ def heal_runtime_profiles(profiles: dict) -> tuple[dict, list[str]]:
121
126
  f"Healed Codex profile: model '{current}' → '{default['model']}' "
122
127
  f"(Claude models are invalid for Codex)."
123
128
  )
129
+
130
+ # --- Opus 4.6 → 4.7 auto-migration for claude_code ---
131
+ cc_profile = healed.get("claude_code") if isinstance(healed.get("claude_code"), dict) else None
132
+ if cc_profile is not None:
133
+ cc_model = str(cc_profile.get("model") or "").strip()
134
+ if cc_model.startswith(_OPUS_46_PREFIX):
135
+ default = client_default("claude_code")
136
+ suffix = cc_model[len(_OPUS_46_PREFIX):]
137
+ new_model = f"claude-opus-4-7{suffix}"
138
+ old_effort = str(cc_profile.get("reasoning_effort") or "").strip()
139
+ new_effort = default["reasoning_effort"]
140
+ healed["claude_code"] = dict(cc_profile)
141
+ healed["claude_code"]["model"] = new_model
142
+ if old_effort in ("", "xhigh", "enabled"):
143
+ healed["claude_code"]["reasoning_effort"] = new_effort
144
+ messages.append(
145
+ f"Auto-migrated Claude Code: '{cc_model}' → '{new_model}', "
146
+ f"effort '{old_effort or '(empty)'}' → '{healed['claude_code']['reasoning_effort']}'."
147
+ )
148
+
124
149
  return healed, messages
125
150
 
126
151