nexo-brain 7.27.2 → 7.27.3
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 +2 -2
- package/package.json +1 -1
- package/src/agent_runner.py +0 -13
- package/src/call_model_raw.py +17 -4
- package/src/client_sync.py +4 -6
- package/src/doctor/providers/runtime.py +5 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nexo-brain",
|
|
3
|
-
"version": "7.27.
|
|
3
|
+
"version": "7.27.3",
|
|
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.27.
|
|
21
|
+
Version `7.27.3` is the current packaged-runtime line. Patch release over v7.27.2 - OpenAI raw calls and Codex-managed bootstrap no longer send system-role messages, preventing account-model failures while preserving Anthropic/OpenAI provider parity.
|
|
22
22
|
|
|
23
23
|
Previously in `7.27.1`: patch release over v7.27.0 - lifecycle stop calls skip external provider session UUIDs safely, and provider runtime selection keeps chat plus automation aligned to the same Anthropic/OpenAI account.
|
|
24
24
|
|
|
@@ -413,7 +413,7 @@ Version `5.0.0` closes the loop between memory, decisions, outcomes, and reusabl
|
|
|
413
413
|
|------------|-------------|-------|----------------|
|
|
414
414
|
| Shared brain / MCP runtime | Yes | Yes | Yes |
|
|
415
415
|
| Managed bootstrap document | `~/.claude/CLAUDE.md` | `~/.codex/AGENTS.md` | Not applicable |
|
|
416
|
-
| Global startup bootstrap sync | Native via hooks + bootstrap | Managed via bootstrap + Codex config `
|
|
416
|
+
| Global startup bootstrap sync | Native via hooks + bootstrap | Managed via bootstrap + Codex config `mcp_servers.nexo` | Managed MCP-only shared-brain metadata |
|
|
417
417
|
| `nexo chat` terminal client | Yes | Yes | No |
|
|
418
418
|
| Background automation backend | Recommended | Supported | No |
|
|
419
419
|
| Raw transcript source for Deep Sleep | Yes | Yes | No |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nexo-brain",
|
|
3
|
-
"version": "7.27.
|
|
3
|
+
"version": "7.27.3",
|
|
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/agent_runner.py
CHANGED
|
@@ -625,10 +625,6 @@ def _codex_managed_initial_messages_enabled() -> bool:
|
|
|
625
625
|
)
|
|
626
626
|
|
|
627
627
|
|
|
628
|
-
def _codex_initial_messages_config(prompt_text: str) -> str:
|
|
629
|
-
return f'initial_messages=[{{role="system",content={json.dumps(prompt_text, ensure_ascii=False)}}}]'
|
|
630
|
-
|
|
631
|
-
|
|
632
628
|
def _codex_interactive_launch_flags() -> list[str]:
|
|
633
629
|
return ["--sandbox", "danger-full-access", "--ask-for-approval", "never"]
|
|
634
630
|
|
|
@@ -752,9 +748,6 @@ def build_interactive_client_command(
|
|
|
752
748
|
"Codex launcher not found in PATH. Install `codex` first or reconfigure NEXO."
|
|
753
749
|
)
|
|
754
750
|
cmd = [codex_bin, *_codex_interactive_launch_flags()]
|
|
755
|
-
bootstrap_prompt = _load_client_bootstrap_prompt(CLIENT_CODEX)
|
|
756
|
-
if bootstrap_prompt and not _codex_managed_initial_messages_enabled():
|
|
757
|
-
cmd.extend(["-c", _codex_initial_messages_config(bootstrap_prompt)])
|
|
758
751
|
if resolved_model:
|
|
759
752
|
cmd.extend(["-m", resolved_model])
|
|
760
753
|
if resolved_effort:
|
|
@@ -915,9 +908,6 @@ def build_followup_terminal_shell_command(
|
|
|
915
908
|
)
|
|
916
909
|
target_cwd = str(Path(cwd).expanduser()) if cwd else str(Path.home())
|
|
917
910
|
cmd = [codex_bin, *_codex_interactive_launch_flags()]
|
|
918
|
-
bootstrap_prompt = _load_client_bootstrap_prompt(CLIENT_CODEX)
|
|
919
|
-
if bootstrap_prompt and not _codex_managed_initial_messages_enabled():
|
|
920
|
-
cmd.extend(["-c", _codex_initial_messages_config(bootstrap_prompt)])
|
|
921
911
|
if resolved_model:
|
|
922
912
|
cmd.extend(["-m", resolved_model])
|
|
923
913
|
if resolved_effort:
|
|
@@ -1451,9 +1441,6 @@ def run_automation_prompt(
|
|
|
1451
1441
|
"-o",
|
|
1452
1442
|
str(output_path),
|
|
1453
1443
|
]
|
|
1454
|
-
bootstrap_prompt = _load_client_bootstrap_prompt(CLIENT_CODEX)
|
|
1455
|
-
if bootstrap_prompt and not _codex_managed_initial_messages_enabled():
|
|
1456
|
-
cmd.extend(["-c", _codex_initial_messages_config(bootstrap_prompt)])
|
|
1457
1444
|
if resolved_model:
|
|
1458
1445
|
cmd.extend(["-m", resolved_model])
|
|
1459
1446
|
if resolved_effort:
|
package/src/call_model_raw.py
CHANGED
|
@@ -138,6 +138,22 @@ def _extract_openai_text(response) -> str:
|
|
|
138
138
|
return ""
|
|
139
139
|
|
|
140
140
|
|
|
141
|
+
def _openai_messages(prompt: str, system: str | None) -> list[dict]:
|
|
142
|
+
if system:
|
|
143
|
+
return [
|
|
144
|
+
{
|
|
145
|
+
"role": "user",
|
|
146
|
+
"content": (
|
|
147
|
+
"Instructions:\n"
|
|
148
|
+
f"{system}\n\n"
|
|
149
|
+
"Task:\n"
|
|
150
|
+
f"{prompt}"
|
|
151
|
+
),
|
|
152
|
+
}
|
|
153
|
+
]
|
|
154
|
+
return [{"role": "user", "content": prompt}]
|
|
155
|
+
|
|
156
|
+
|
|
141
157
|
def _call_anthropic_raw(
|
|
142
158
|
*,
|
|
143
159
|
prompt: str,
|
|
@@ -214,10 +230,7 @@ def _call_openai_raw(
|
|
|
214
230
|
raise ClassifierUnavailableError("openai: no OPENAI_API_KEY found")
|
|
215
231
|
|
|
216
232
|
client = openai.OpenAI(api_key=api_key, timeout=timeout)
|
|
217
|
-
messages
|
|
218
|
-
if system:
|
|
219
|
-
messages.append({"role": "system", "content": system})
|
|
220
|
-
messages.append({"role": "user", "content": prompt})
|
|
233
|
+
messages = _openai_messages(prompt, system)
|
|
221
234
|
|
|
222
235
|
try:
|
|
223
236
|
response = client.chat.completions.create(
|
package/src/client_sync.py
CHANGED
|
@@ -978,12 +978,10 @@ def _sync_codex_managed_config(
|
|
|
978
978
|
else:
|
|
979
979
|
payload["features"] = {"hooks": True}
|
|
980
980
|
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
}
|
|
986
|
-
] if bootstrap_prompt else []
|
|
981
|
+
# Codex model APIs used by some accounts reject system-role bootstrap
|
|
982
|
+
# messages. Keep the durable bootstrap in AGENTS.md and remove any legacy
|
|
983
|
+
# initial_messages block written by older NEXO versions.
|
|
984
|
+
payload.pop("initial_messages", None)
|
|
987
985
|
|
|
988
986
|
nexo_table = payload.setdefault("nexo", {})
|
|
989
987
|
codex_table = nexo_table.setdefault("codex", {})
|
|
@@ -2228,6 +2228,11 @@ def check_client_bootstrap_parity(fix: bool = False) -> DoctorCheck:
|
|
|
2228
2228
|
severity = "warn"
|
|
2229
2229
|
evidence.append(f"codex config missing managed `mcp_servers.nexo` at {codex_config.get('path')}")
|
|
2230
2230
|
repair_plan.append("Re-sync Codex so manual sessions keep the shared brain even if `codex mcp add` state drifts")
|
|
2231
|
+
elif codex_config.get("exists") and codex_config.get("has_initial_messages"):
|
|
2232
|
+
status = "degraded"
|
|
2233
|
+
severity = "warn"
|
|
2234
|
+
evidence.append(f"codex config still has legacy `initial_messages` at {codex_config.get('path')}")
|
|
2235
|
+
repair_plan.append("Run `nexo clients sync --client codex` so Codex uses the AGENTS.md bootstrap without legacy system-role startup messages")
|
|
2231
2236
|
elif codex_config.get("exists"):
|
|
2232
2237
|
evidence.append(
|
|
2233
2238
|
"codex config bootstrap managed"
|