nexo-brain 7.30.32 → 7.30.33
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 +3 -1
- package/package.json +1 -1
- package/src/db/_personal_scripts.py +32 -3
- package/src/managed_mcp/lock.json +16 -8
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nexo-brain",
|
|
3
|
-
"version": "7.30.
|
|
3
|
+
"version": "7.30.33",
|
|
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.
|
|
21
|
+
Version `7.30.33` is the current packaged-runtime line. Patch release over v7.30.32 - personal agent/script status now keeps the newest real run between manual executions and cron history, so a successful manual agent run cannot be hidden behind an older scheduled failure.
|
|
22
|
+
|
|
23
|
+
Previously in `7.30.32`: patch release over v7.30.31 - packaged update/doctor now repair npm/npx wrapper drift, archive stale personal script backups, validate observable automation health contracts, and block legacy Claude/Codex project memory writes.
|
|
22
24
|
|
|
23
25
|
Previously in `7.30.31`: patch release over v7.30.30 - Core Rules now reach agents both through a compact managed bootstrap summary and task-specific `cortex/task_open` injection from the protected `core_rules` registry.
|
|
24
26
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nexo-brain",
|
|
3
|
-
"version": "7.30.
|
|
3
|
+
"version": "7.30.33",
|
|
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",
|
|
@@ -23,6 +23,30 @@ def _now_text() -> str:
|
|
|
23
23
|
return datetime.datetime.now().isoformat(timespec="seconds")
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
def _run_timestamp_sort_key(value: str | None) -> tuple[int, str]:
|
|
27
|
+
text = str(value or "").strip()
|
|
28
|
+
if not text:
|
|
29
|
+
return (0, "")
|
|
30
|
+
normalized = text.replace("Z", "+00:00")
|
|
31
|
+
try:
|
|
32
|
+
parsed = datetime.datetime.fromisoformat(normalized)
|
|
33
|
+
except ValueError:
|
|
34
|
+
return (1, text)
|
|
35
|
+
if parsed.tzinfo is not None:
|
|
36
|
+
parsed = parsed.astimezone(datetime.timezone.utc).replace(tzinfo=None)
|
|
37
|
+
return (2, parsed.isoformat(timespec="seconds"))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _newer_run(candidate: dict | None, current: dict | None) -> dict | None:
|
|
41
|
+
if not candidate or not candidate.get("started_at"):
|
|
42
|
+
return current
|
|
43
|
+
if not current or not current.get("started_at"):
|
|
44
|
+
return candidate
|
|
45
|
+
if _run_timestamp_sort_key(candidate.get("started_at")) > _run_timestamp_sort_key(current.get("started_at")):
|
|
46
|
+
return candidate
|
|
47
|
+
return current
|
|
48
|
+
|
|
49
|
+
|
|
26
50
|
def _get_db():
|
|
27
51
|
"""Resolve db._core lazily so reload-heavy tests use the live connection module."""
|
|
28
52
|
return importlib.import_module("db._core").get_db()
|
|
@@ -406,11 +430,16 @@ def list_personal_scripts(include_disabled: bool = True, *, include_core: bool =
|
|
|
406
430
|
schedule["last_exit_code"] = latest["exit_code"]
|
|
407
431
|
script["schedules"] = script_schedules
|
|
408
432
|
script["has_schedule"] = bool(script_schedules)
|
|
409
|
-
latest =
|
|
433
|
+
latest = _newer_run(
|
|
434
|
+
{"started_at": script.get("last_run_at"), "exit_code": script.get("last_exit_code")},
|
|
435
|
+
None,
|
|
436
|
+
)
|
|
410
437
|
for schedule in script_schedules:
|
|
411
438
|
started_at = schedule.get("last_run_at")
|
|
412
|
-
|
|
413
|
-
|
|
439
|
+
latest = _newer_run(
|
|
440
|
+
{"started_at": started_at, "exit_code": schedule.get("last_exit_code")},
|
|
441
|
+
latest,
|
|
442
|
+
)
|
|
414
443
|
if latest:
|
|
415
444
|
script["last_run_at"] = latest["started_at"]
|
|
416
445
|
script["last_exit_code"] = latest["exit_code"]
|
|
@@ -6,11 +6,13 @@
|
|
|
6
6
|
"chrome-devtools-mcp": {
|
|
7
7
|
"source_type": "npm",
|
|
8
8
|
"package": "chrome-devtools-mcp",
|
|
9
|
-
"version": "1.
|
|
10
|
-
"integrity": "sha512-
|
|
11
|
-
"tarball": "https://registry.npmjs.org/chrome-devtools-mcp/-/chrome-devtools-mcp-1.
|
|
9
|
+
"version": "1.2.0",
|
|
10
|
+
"integrity": "sha512-xHd8hoLZQArDsYhu8OUHvKBIiihx1Co9DgAPHWaM4kzRf41TpZ0IuxKioIWTEGzFKpRqQzIxpFqydY4AKqP5sQ==",
|
|
11
|
+
"tarball": "https://registry.npmjs.org/chrome-devtools-mcp/-/chrome-devtools-mcp-1.2.0.tgz",
|
|
12
12
|
"bin": "chrome-devtools-mcp",
|
|
13
|
-
"engines": {
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": "^20.19.0 || ^22.12.0 || >=23"
|
|
15
|
+
}
|
|
14
16
|
},
|
|
15
17
|
"mac-use-mcp": {
|
|
16
18
|
"source_type": "npm",
|
|
@@ -19,7 +21,9 @@
|
|
|
19
21
|
"integrity": "sha512-UcVkzvHuw+f21nEZwb3MwdqWGxLK/nYlhN55SRD6FZ2yn2t3ji0zKLD2XvQLp0ugeYyS92TqVgnw6E4P5VB+bg==",
|
|
20
22
|
"tarball": "https://registry.npmjs.org/mac-use-mcp/-/mac-use-mcp-1.1.1.tgz",
|
|
21
23
|
"bin": "mac-use-mcp",
|
|
22
|
-
"engines": {
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=22"
|
|
26
|
+
}
|
|
23
27
|
},
|
|
24
28
|
"native-devtools-mcp": {
|
|
25
29
|
"source_type": "npm",
|
|
@@ -28,7 +32,9 @@
|
|
|
28
32
|
"integrity": "sha512-TIR8QCKzYCaHY+N1IWB7OM6pZH49HJxRj1dZjT4RNkviA1QpgINm8H95ohMCbf4ZC5jdFssMlb9KmWNZnCeCSw==",
|
|
29
33
|
"tarball": "https://registry.npmjs.org/native-devtools-mcp/-/native-devtools-mcp-0.10.1.tgz",
|
|
30
34
|
"bin": "native-devtools-mcp",
|
|
31
|
-
"engines": {
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=18"
|
|
37
|
+
}
|
|
32
38
|
},
|
|
33
39
|
"open-computer-use": {
|
|
34
40
|
"source_type": "npm",
|
|
@@ -37,7 +43,7 @@
|
|
|
37
43
|
"integrity": "sha512-KlOHmFvXHe2IEMGE/O+zMN5ASo+FQ42copj4j1xEOnyeLq4oxUxhtHqEdPUACCUcMZaHzKXfZboL1dk5a2GjLA==",
|
|
38
44
|
"tarball": "https://registry.npmjs.org/open-computer-use/-/open-computer-use-0.1.52.tgz",
|
|
39
45
|
"bin": "open-computer-use-mcp",
|
|
40
|
-
"engines": {
|
|
46
|
+
"engines": {}
|
|
41
47
|
},
|
|
42
48
|
"desktop-commander": {
|
|
43
49
|
"source_type": "npm",
|
|
@@ -46,7 +52,9 @@
|
|
|
46
52
|
"integrity": "sha512-ZgdBDihpaLfrzQQQGQCPmElYMx91oUXeVEWbxbygeUfq2aOZvHrcVMeuTGy9oMDp9vxjq6d/+ZGE0mQLJnAWkw==",
|
|
47
53
|
"tarball": "https://registry.npmjs.org/@wonderwhy-er/desktop-commander/-/desktop-commander-0.2.42.tgz",
|
|
48
54
|
"bin": "desktop-commander",
|
|
49
|
-
"engines": {
|
|
55
|
+
"engines": {
|
|
56
|
+
"node": ">=18.0.0"
|
|
57
|
+
}
|
|
50
58
|
}
|
|
51
59
|
}
|
|
52
60
|
}
|