nexo-brain 5.3.24 → 5.3.26

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.3.24",
3
+ "version": "5.3.26",
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/bin/nexo-brain.js CHANGED
@@ -187,10 +187,19 @@ function getCoreRuntimeFlatFiles(srcDir = path.join(__dirname, "..", "src")) {
187
187
  "cron_recovery.py",
188
188
  "runtime_power.py",
189
189
  "requirements.txt",
190
+ "model_defaults.json",
190
191
  ];
191
192
  const discoveredRootModules = fs.existsSync(srcDir)
192
193
  ? fs.readdirSync(srcDir)
193
- .filter((name) => name.endsWith(".py") && fs.statSync(path.join(srcDir, name)).isFile())
194
+ .filter((name) => {
195
+ const stat = fs.statSync(path.join(srcDir, name));
196
+ if (!stat.isFile()) return false;
197
+ // Include Python modules and any flat JSON config the Python runtime
198
+ // reads at import time (e.g. model_defaults.json). The "_defaults.json"
199
+ // suffix convention lets us add future config JSONs without touching
200
+ // this list.
201
+ return name.endsWith(".py") || name.endsWith("_defaults.json");
202
+ })
194
203
  : [];
195
204
  return [...new Set([...staticFiles, ...discoveredRootModules])];
196
205
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexo-brain",
3
- "version": "5.3.24",
3
+ "version": "5.3.26",
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",
@@ -580,7 +580,15 @@ def run_automation_prompt(
580
580
  raise AutomationBackendUnavailableError(
581
581
  "Claude Code automation backend selected but `claude` is not installed."
582
582
  )
583
- cmd = [claude_bin, "-p", prompt]
583
+ # Headless claude -p does NOT reliably honour permissions.allow from
584
+ # settings.json for MCP tool calls — it can stall waiting for an
585
+ # approval that will never come in non-interactive mode. All NEXO
586
+ # headless automation (followup-runner, email-monitor, deep-sleep,
587
+ # etc.) therefore must pass --dangerously-skip-permissions explicitly
588
+ # so the process actually runs instead of zombying. Interactive
589
+ # sessions (`nexo chat`) never go through this code path and keep
590
+ # their normal approval prompts.
591
+ cmd = [claude_bin, "-p", prompt, "--dangerously-skip-permissions"]
584
592
  if resolved_model:
585
593
  cmd.extend(["--model", resolved_model])
586
594
  if resolved_effort: