nexo-brain 5.2.0 → 5.2.1
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.2.
|
|
3
|
+
"version": "5.2.1",
|
|
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nexo-brain",
|
|
3
|
-
"version": "5.2.
|
|
3
|
+
"version": "5.2.1",
|
|
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/plugins/cortex.py
CHANGED
|
@@ -19,7 +19,7 @@ import os
|
|
|
19
19
|
import re
|
|
20
20
|
import secrets
|
|
21
21
|
import time
|
|
22
|
-
from datetime import datetime
|
|
22
|
+
from datetime import datetime, timedelta
|
|
23
23
|
from pathlib import Path
|
|
24
24
|
|
|
25
25
|
|
|
@@ -897,6 +897,27 @@ def handle_cortex_decide(
|
|
|
897
897
|
task_id=task_id,
|
|
898
898
|
)
|
|
899
899
|
|
|
900
|
+
# Auto-create outcome when none exists, so cortex decisions
|
|
901
|
+
# get verified by outcome-checker and close the feedback loop.
|
|
902
|
+
if resolved_outcome_id is None and clean_goal and task_id:
|
|
903
|
+
try:
|
|
904
|
+
from db import create_outcome
|
|
905
|
+
|
|
906
|
+
_deadline = (datetime.now() + timedelta(days=7)).strftime("%Y-%m-%d")
|
|
907
|
+
_outcome = create_outcome(
|
|
908
|
+
action_type="cortex_decision",
|
|
909
|
+
description=f"Cortex decision: {clean_goal[:120]}",
|
|
910
|
+
expected_result=f"Recommended '{scored[0]['name']}' succeeds",
|
|
911
|
+
metric_source="decision_outcome",
|
|
912
|
+
action_id=task_id,
|
|
913
|
+
session_id=session_id,
|
|
914
|
+
deadline=_deadline,
|
|
915
|
+
)
|
|
916
|
+
if isinstance(_outcome, dict) and _outcome.get("id"):
|
|
917
|
+
resolved_outcome_id = int(_outcome["id"])
|
|
918
|
+
except Exception:
|
|
919
|
+
pass # non-critical: decision still records without outcome
|
|
920
|
+
|
|
900
921
|
try:
|
|
901
922
|
from db import create_cortex_evaluation
|
|
902
923
|
|
|
@@ -855,7 +855,8 @@ def _parse_any_datetime(value) -> datetime | None:
|
|
|
855
855
|
except Exception:
|
|
856
856
|
continue
|
|
857
857
|
try:
|
|
858
|
-
|
|
858
|
+
dt = datetime.fromisoformat(raw.replace("Z", "+00:00"))
|
|
859
|
+
return dt.replace(tzinfo=None)
|
|
859
860
|
except Exception:
|
|
860
861
|
return None
|
|
861
862
|
|