nexo-brain 7.30.3 → 7.30.4

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.3",
3
+ "version": "7.30.4",
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.3` is the current packaged-runtime line. Patch release over v7.30.2 - release closeout now protects the freshly written runtime backup from technical pruning and validates protocol evidence against the canonical `runtime/data/nexo.db` layout.
21
+ Version `7.30.4` is the current packaged-runtime line. Patch release over v7.30.3 - local runtime update post-sync now gives bounded Memory Fabric repair enough time to finish, and headless automations now treat `nexo_stop` as a terminal close so followup/deep-sleep runners do not reopen no-op protocol loops.
22
+
23
+ Previously in `7.30.3`: patch release over v7.30.2 - release closeout now protects the freshly written runtime backup from technical pruning and validates protocol evidence against the canonical `runtime/data/nexo.db` layout.
22
24
 
23
25
  Previously in `7.30.2`: patch release over v7.30.1 - Deep Sleep now fails closed on partial nightly runs, carries complete learning context into synthesis, writes an explicit agent start packet, and creates governed followups with verification, priority, owner, and date fields.
24
26
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexo-brain",
3
- "version": "7.30.3",
3
+ "version": "7.30.4",
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",
@@ -98,6 +98,7 @@ TEMPLATE_FILE = _RESOLVED_REPO_DIR / "templates" / "CLAUDE.md.template"
98
98
 
99
99
  CHECK_COOLDOWN_SECONDS = 3600 # 1 hour
100
100
  GIT_TIMEOUT_SECONDS = 4 # stay well under the 5s total budget
101
+ RUNTIME_POST_SYNC_TIMEOUT_SECONDS = 180
101
102
  CRITICAL_BACKUP_TABLES = ("learnings", "session_diary", "guard_checks", "protocol_debt")
102
103
  LOCAL_CONTEXT_BACKUP_TABLES = (
103
104
  "local_index_roots",
@@ -4883,7 +4884,7 @@ def _run_runtime_post_sync(dest: Path = NEXO_HOME, progress_fn=None) -> tuple[bo
4883
4884
  cwd=str(dest),
4884
4885
  capture_output=True,
4885
4886
  text=True,
4886
- timeout=60,
4887
+ timeout=RUNTIME_POST_SYNC_TIMEOUT_SECONDS,
4887
4888
  env=env,
4888
4889
  )
4889
4890
  if init_result.returncode != 0:
@@ -475,6 +475,10 @@ class HeadlessEnforcer:
475
475
  # per task cycle. Cleared on skill_match OR task_close.
476
476
  self._multi_step_event_fired: bool = False
477
477
  self._post_close_cooldown_until: float = 0.0
478
+ # A headless nexo_stop is terminal for the automation cycle. Once
479
+ # seen, periodic/conditional reminders stay suppressed so cron
480
+ # runners can reach TURN_END instead of reopening the task loop.
481
+ self._session_stopped: bool = False
478
482
  try:
479
483
  self._post_close_cooldown_seconds = max(
480
484
  0,
@@ -2287,6 +2291,10 @@ class HeadlessEnforcer:
2287
2291
  self._start_post_close_cooldown()
2288
2292
  self._resolve_r17_commitments_from_task_close(tool_input)
2289
2293
 
2294
+ if name == "nexo_stop":
2295
+ self._session_stopped = True
2296
+ self._start_post_close_cooldown()
2297
+
2290
2298
  # v7.7 Gap 1 — autonomous detector for multi_step_task_detected.
2291
2299
  # The event was dispatched by the map but nothing ever raised it.
2292
2300
  # Heuristic: three or more edit/execute/delegate calls within the
@@ -2602,6 +2610,9 @@ class HeadlessEnforcer:
2602
2610
  _logger.info("POST_CLOSE_COOLDOWN: cleared %d queued protocol injection(s)", removed)
2603
2611
 
2604
2612
  def check_periodic(self):
2613
+ if getattr(self, "_session_stopped", False):
2614
+ _logger.info("SESSION_STOPPED: periodic checks suppressed (nexo_stop seen)")
2615
+ return
2605
2616
  if self._post_close_cooldown_active():
2606
2617
  _logger.info("POST_CLOSE_COOLDOWN: periodic checks suppressed")
2607
2618
  return