nexo-brain 7.17.4 → 7.17.5

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.17.4",
3
+ "version": "7.17.5",
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.17.4` is the current packaged-runtime line. Corrective patch over v7.17.3 - automation runners now keep full NEXO discipline for real background agents while strict JSON children stay clean, and runtime doctor/metrics expose caller coverage and Guardian injection telemetry instead of hiding blind spots.
21
+ Version `7.17.5` is the current packaged-runtime line. Patch release over v7.17.4 - `nexo --version --json` now returns fast machine-readable update status (`installed`, `latest`, `hasUpdate`, `unknown`, `latestSource`) while the human output keeps the legacy `nexo vX` line plus a compact latest/installed status line for Desktop compatibility.
22
+
23
+ Previously in `7.17.4`: corrective patch over v7.17.3 - automation runners now keep full NEXO discipline for real background agents while strict JSON children stay clean, and runtime doctor/metrics expose caller coverage and Guardian injection telemetry instead of hiding blind spots.
22
24
 
23
25
  Previously in `7.17.3`: corrective patch over v7.17.2 - standalone Brain install/update no longer aborts when the Desktop-only `qwen3-0.6b-q4-local-presence` model is not bundled or already cached locally. Required Brain warmups stay strict; only the optional local-presence GGUF now degrades cleanly.
24
26
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexo-brain",
3
- "version": "7.17.4",
3
+ "version": "7.17.5",
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/cli.py CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
  Entry points:
5
5
  nexo chat [PATH]
6
+ nexo --version [--json]
6
7
  nexo export [PATH] [--json]
7
8
  nexo import-inspect PATH [--json]
8
9
  nexo import PATH [--json]
@@ -233,17 +234,41 @@ def _version_sort_key(raw: str) -> tuple[tuple[int, ...], int, str]:
233
234
  return (tuple(parts), 1 if not suffix else 0, suffix)
234
235
 
235
236
 
236
- def _version_status_line() -> str:
237
+ def _version_status_payload() -> dict:
237
238
  installed = _get_version()
238
239
  latest = _load_latest_version_cache()
240
+ latest_source = "cache" if latest else ""
239
241
  if latest is None and _should_refresh_latest_version():
240
242
  latest = _fetch_latest_version()
243
+ latest_source = "npm" if latest else ""
241
244
  if latest and installed and _version_sort_key(latest) < _version_sort_key(installed):
242
245
  latest = installed
246
+ latest_source = "installed"
243
247
  try:
244
248
  _save_latest_version_cache(installed)
245
249
  except Exception:
246
250
  pass
251
+ has_update = bool(
252
+ latest
253
+ and installed
254
+ and _version_sort_key(latest) > _version_sort_key(installed)
255
+ )
256
+ return {
257
+ "ok": True,
258
+ "name": "nexo",
259
+ "package": LATEST_NPM_PACKAGE,
260
+ "installed": installed,
261
+ "latest": latest or "",
262
+ "hasUpdate": has_update,
263
+ "unknown": not bool(installed and latest),
264
+ "latestSource": latest_source,
265
+ }
266
+
267
+
268
+ def _version_status_line(payload: dict | None = None) -> str:
269
+ payload = payload or _version_status_payload()
270
+ installed = str(payload.get("installed") or "?").strip()
271
+ latest = str(payload.get("latest") or "").strip()
247
272
  if latest:
248
273
  return f"NEXO Latest: v{latest} | Installed: v{installed}"
249
274
  return f"NEXO Installed: v{installed}"
@@ -2823,6 +2848,7 @@ def main():
2823
2848
  parser = argparse.ArgumentParser(prog="nexo", description="NEXO Runtime CLI", add_help=False)
2824
2849
  parser.add_argument("-h", "--help", action="store_true", help="Show help")
2825
2850
  parser.add_argument("-v", "--version", action="store_true", help="Show version")
2851
+ parser.add_argument("--json", action="store_true", help="JSON output for --version")
2826
2852
  sub = parser.add_subparsers(dest="command")
2827
2853
 
2828
2854
  # -- email (Plan F1 — interactive wizard for email accounts) --
@@ -3408,7 +3434,12 @@ def main():
3408
3434
  _print_help()
3409
3435
  return 0
3410
3436
  if args.version:
3411
- print(f"nexo v{_get_version()}")
3437
+ payload = _version_status_payload()
3438
+ if args.json:
3439
+ print(json.dumps(payload, ensure_ascii=False))
3440
+ else:
3441
+ print(f"nexo v{payload.get('installed') or _get_version()}")
3442
+ print(_version_status_line(payload))
3412
3443
  return 0
3413
3444
 
3414
3445
  if args.command == "email":