nexo-brain 0.8.1 → 0.8.2
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nexo-brain",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.2",
|
|
4
4
|
"mcpName": "io.github.wazionapps/nexo",
|
|
5
5
|
"description": "NEXO — Cognitive co-operator for Claude Code. Atkinson-Shiffrin memory, semantic RAG, trust scoring, and metacognitive error prevention.",
|
|
6
6
|
"bin": {
|
package/src/plugins/agents.py
CHANGED
|
@@ -4,7 +4,7 @@ from db import create_agent, get_agent, list_agents, update_agent, delete_agent
|
|
|
4
4
|
def handle_agent_get(id: str) -> str:
|
|
5
5
|
"""Get an agent's full profile by ID."""
|
|
6
6
|
a = get_agent(id)
|
|
7
|
-
if not a: return f"
|
|
7
|
+
if not a: return f"Agent '{id}' not found."
|
|
8
8
|
lines = [f"AGENTE: {a['name']} ({a['id']})", f" Especialización: {a['specialization']}", f" Modelo: {a['model']}"]
|
|
9
9
|
if a["tools"]: lines.append(f" Tools: {a['tools']}")
|
|
10
10
|
if a["context_files"]: lines.append(f" Contexto: {a['context_files']}")
|
|
@@ -15,7 +15,7 @@ def handle_agent_create(id: str, name: str, specialization: str, model: str = "s
|
|
|
15
15
|
tools: str = "", context_files: str = "", rules: str = "") -> str:
|
|
16
16
|
"""Register a new agent in the registry."""
|
|
17
17
|
create_agent(id, name, specialization, model, tools, context_files, rules)
|
|
18
|
-
return f"
|
|
18
|
+
return f"Agent '{id}' ({name}) registered. Model: {model}"
|
|
19
19
|
|
|
20
20
|
def handle_agent_update(id: str, name: str = "", specialization: str = "", model: str = "",
|
|
21
21
|
tools: str = "", context_files: str = "", rules: str = "") -> str:
|
|
@@ -26,12 +26,12 @@ def handle_agent_update(id: str, name: str = "", specialization: str = "", model
|
|
|
26
26
|
if v: kwargs[k] = v
|
|
27
27
|
if not kwargs: return "Nada que actualizar."
|
|
28
28
|
update_agent(id, **kwargs)
|
|
29
|
-
return f"
|
|
29
|
+
return f"Agent '{id}' updated."
|
|
30
30
|
|
|
31
31
|
def handle_agent_list() -> str:
|
|
32
32
|
"""List all registered agents."""
|
|
33
33
|
agents = list_agents()
|
|
34
|
-
if not agents: return "
|
|
34
|
+
if not agents: return "No agents registered."
|
|
35
35
|
lines = ["AGENTES REGISTRADOS:"]
|
|
36
36
|
for a in agents:
|
|
37
37
|
lines.append(f" {a['id']} — {a['name']} ({a['model']}) — {a['specialization'][:60]}")
|
|
@@ -40,8 +40,8 @@ def handle_agent_list() -> str:
|
|
|
40
40
|
def handle_agent_delete(id: str) -> str:
|
|
41
41
|
"""Remove an agent from the registry."""
|
|
42
42
|
if not delete_agent(id):
|
|
43
|
-
return f"ERROR:
|
|
44
|
-
return f"
|
|
43
|
+
return f"ERROR: Agent '{id}' not found."
|
|
44
|
+
return f"Agent '{id}' deleted."
|
|
45
45
|
|
|
46
46
|
TOOLS = [
|
|
47
47
|
(handle_agent_get, "nexo_agent_get", "Get an agent's full profile"),
|
package/src/plugins/backup.py
CHANGED
|
@@ -56,7 +56,7 @@ def handle_backup_restore(filename: str) -> str:
|
|
|
56
56
|
"""
|
|
57
57
|
src = os.path.join(BACKUP_DIR, filename)
|
|
58
58
|
if not os.path.isfile(src):
|
|
59
|
-
return f"Backup
|
|
59
|
+
return f"Backup not found: {filename}"
|
|
60
60
|
|
|
61
61
|
# Create safety backup first
|
|
62
62
|
safety = os.path.join(BACKUP_DIR, f"nexo-pre-restore-{time.strftime('%Y%m%d%H%M%S')}.db")
|
|
@@ -101,7 +101,7 @@ def handle_decision_search(query: str = '', domain: str = '', days: int = 30) ->
|
|
|
101
101
|
results = search_decisions(query, domain, days)
|
|
102
102
|
if not results:
|
|
103
103
|
scope = f"'{query}'" if query else domain or 'todas'
|
|
104
|
-
return f"Sin decisiones encontradas para {scope}
|
|
104
|
+
return f"Sin decisiones encontradas para {scope} in {days} days."
|
|
105
105
|
|
|
106
106
|
lines = [f"DECISIONES ({len(results)}):"]
|
|
107
107
|
for d in results:
|
|
@@ -312,7 +312,7 @@ def handle_change_search(query: str = '', files: str = '', days: int = 30) -> st
|
|
|
312
312
|
results = search_changes(query, files, days)
|
|
313
313
|
if not results:
|
|
314
314
|
scope = f"'{query}'" if query else files or 'todos'
|
|
315
|
-
return f"
|
|
315
|
+
return f"No changes found for {scope} in {days} days."
|
|
316
316
|
|
|
317
317
|
lines = [f"CAMBIOS ({len(results)}):"]
|
|
318
318
|
for c in results:
|
package/src/tools_learnings.py
CHANGED
|
@@ -24,7 +24,7 @@ def handle_learning_add(category: str, title: str, content: str, reasoning: str
|
|
|
24
24
|
"""
|
|
25
25
|
if category not in VALID_CATEGORIES:
|
|
26
26
|
valid = ", ".join(sorted(VALID_CATEGORIES))
|
|
27
|
-
return f"ERROR:
|
|
27
|
+
return f"ERROR: Category '{category}' invalid. Valid: {valid}"
|
|
28
28
|
result = create_learning(
|
|
29
29
|
category, title, content, reasoning=reasoning
|
|
30
30
|
)
|
|
@@ -142,7 +142,7 @@ def handle_learning_update(id: int, title: str = '', content: str = '', category
|
|
|
142
142
|
if category:
|
|
143
143
|
if category not in VALID_CATEGORIES:
|
|
144
144
|
valid = ", ".join(sorted(VALID_CATEGORIES))
|
|
145
|
-
return f"ERROR:
|
|
145
|
+
return f"ERROR: Category '{category}' invalid. Valid: {valid}"
|
|
146
146
|
kwargs["category"] = category
|
|
147
147
|
if reasoning:
|
|
148
148
|
kwargs["reasoning"] = reasoning
|
|
@@ -183,7 +183,7 @@ def handle_learning_delete(id: int) -> str:
|
|
|
183
183
|
"""Delete a learning entry by ID."""
|
|
184
184
|
deleted = delete_learning(id)
|
|
185
185
|
if not deleted:
|
|
186
|
-
return f"ERROR: Learning #{id}
|
|
186
|
+
return f"ERROR: Learning #{id} not found."
|
|
187
187
|
return f"Learning #{id} eliminado."
|
|
188
188
|
|
|
189
189
|
|