nexo-brain 7.15.1 → 7.15.2

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.15.1",
3
+ "version": "7.15.2",
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.15.1` is the current packaged-runtime line. Patch release over v7.15.0 - Brain drains larger self-audit clusters, bounds hook history with update-time cleanup, filters normal Codex bootstrap reads, routes email-monitor effort by message complexity, and locks morning briefings by local date and recipient.
21
+ Version `7.15.2` is the current packaged-runtime line. Patch release over v7.15.1 - Brain treats normal Codex startup context reads of calibration and project atlas files as healthy bootstrap activity instead of conditioned-file drift.
22
+
23
+ Previously in `7.15.1`: patch release over v7.15.0 - Brain drains larger self-audit clusters, bounds hook history with update-time cleanup, filters normal Codex bootstrap reads, routes email-monitor effort by message complexity, and locks morning briefings by local date and recipient.
22
24
 
23
25
  Previously in `7.15.0`: minor release — Brain unifies sent-email continuity across send paths, moves cognitive recall to multilingual embeddings, forces tagged learnings into context, hardens email loop guards and headless runners, exposes learning creation dates, and adds AUTO-N burst postmortems.
24
26
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexo-brain",
3
- "version": "7.15.1",
3
+ "version": "7.15.2",
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",
@@ -503,14 +503,18 @@ def _extract_declared_file_targets(args: dict, cwd: str) -> set[str]:
503
503
  return resolved
504
504
 
505
505
 
506
- _CODEX_PRESTARTUP_READ_EXEMPT_FILENAMES = {"calibration.json", "project-atlas.json"}
506
+ _CODEX_BOOTSTRAP_READ_EXEMPT_FILENAMES = {"calibration.json", "project-atlas.json"}
507
507
 
508
508
 
509
- def _is_codex_prestartup_runtime_read_exempt(touched: str, operation: str, startup_seen: bool) -> bool:
510
- if startup_seen or operation != "read":
509
+ def _is_codex_bootstrap_runtime_read_exempt(
510
+ touched: str,
511
+ operation: str,
512
+ bootstrap_context_phase: bool,
513
+ ) -> bool:
514
+ if not bootstrap_context_phase or operation != "read":
511
515
  return False
512
516
  normalized = _normalize_path_token(touched)
513
- if Path(normalized).name not in _CODEX_PRESTARTUP_READ_EXEMPT_FILENAMES:
517
+ if Path(normalized).name not in _CODEX_BOOTSTRAP_READ_EXEMPT_FILENAMES:
514
518
  return False
515
519
  return "/.nexo/" in normalized
516
520
 
@@ -587,7 +591,7 @@ def _recent_codex_conditioned_file_discipline_status(*, days: int = 7, max_files
587
591
  protocol_files: set[str] = set()
588
592
  guard_files: set[str] = set()
589
593
  guard_ack = False
590
- startup_seen = False
594
+ bootstrap_context_phase = True
591
595
  session_touches = 0
592
596
  session_samples: list[dict] = []
593
597
 
@@ -615,9 +619,9 @@ def _recent_codex_conditioned_file_discipline_status(*, days: int = 7, max_files
615
619
  args = _parse_jsonish_arguments(payload.get("arguments"))
616
620
 
617
621
  if name in {"mcp__nexo__nexo_startup", "nexo_startup"}:
618
- startup_seen = True
619
622
  continue
620
623
  if name in {"mcp__nexo__nexo_task_open", "nexo_task_open"}:
624
+ bootstrap_context_phase = False
621
625
  protocol_active = True
622
626
  protocol_files.update(_extract_declared_file_targets(args, cwd))
623
627
  continue
@@ -627,6 +631,7 @@ def _recent_codex_conditioned_file_discipline_status(*, days: int = 7, max_files
627
631
  "mcp__nexo__nexo_guard_file_check",
628
632
  "nexo_guard_file_check",
629
633
  }:
634
+ bootstrap_context_phase = False
630
635
  guard_files.update(_extract_declared_file_targets(args, cwd))
631
636
  continue
632
637
  if name in {"mcp__nexo__nexo_task_acknowledge_guard", "nexo_task_acknowledge_guard"}:
@@ -644,7 +649,11 @@ def _recent_codex_conditioned_file_discipline_status(*, days: int = 7, max_files
644
649
  continue
645
650
 
646
651
  for touched, operation in touched_files:
647
- if _is_codex_prestartup_runtime_read_exempt(touched, operation, startup_seen):
652
+ if _is_codex_bootstrap_runtime_read_exempt(
653
+ touched,
654
+ operation,
655
+ bootstrap_context_phase,
656
+ ):
648
657
  continue
649
658
  matches = [row for row in conditioned if _applies_to_matches_file(str(row.get("applies_to", "")), touched)]
650
659
  if not matches: