nexo-brain 5.3.19 → 5.3.21
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/bin/nexo-brain.js +52 -10
- package/package.json +1 -1
- package/src/auto_update.py +11 -8
- package/src/dashboard/static/favicon 2.svg +32 -0
- package/src/dashboard/static/nexo-logo 2.png +0 -0
- package/src/dashboard/static/nexo-logo 2.svg +40 -0
- package/src/dashboard/static/style 2.css +2458 -0
- package/src/dashboard/templates/adaptive 2.html +118 -0
- package/src/dashboard/templates/artifacts 2.html +133 -0
- package/src/dashboard/templates/backups 2.html +136 -0
- package/src/dashboard/templates/base 2.html +417 -0
- package/src/dashboard/templates/calendar 2.html +591 -0
- package/src/dashboard/templates/chat 2.html +356 -0
- package/src/dashboard/templates/claims 2.html +259 -0
- package/src/dashboard/templates/cortex 2.html +321 -0
- package/src/dashboard/templates/credentials 2.html +128 -0
- package/src/dashboard/templates/crons 2.html +370 -0
- package/src/dashboard/templates/dashboard 2.html +494 -0
- package/src/dashboard/templates/dreams 2.html +252 -0
- package/src/dashboard/templates/email 2.html +160 -0
- package/src/dashboard/templates/evolution 2.html +189 -0
- package/src/dashboard/templates/feed 2.html +249 -0
- package/src/dashboard/templates/followup_health 2.html +170 -0
- package/src/dashboard/templates/graph 2.html +201 -0
- package/src/dashboard/templates/guard 2.html +259 -0
- package/src/dashboard/templates/inbox 2.html +251 -0
- package/src/dashboard/templates/memory 2.html +420 -0
- package/src/dashboard/templates/operations 2.html +608 -0
- package/src/dashboard/templates/plugins 2.html +185 -0
- package/src/dashboard/templates/protocol 2.html +199 -0
- package/src/dashboard/templates/rules 2.html +246 -0
- package/src/dashboard/templates/sentiment 2.html +247 -0
- package/src/dashboard/templates/sessions 2.html +218 -0
- package/src/dashboard/templates/skills 2.html +329 -0
- package/src/dashboard/templates/somatic 2.html +73 -0
- package/src/dashboard/templates/triggers 2.html +133 -0
- package/src/dashboard/templates/trust 2.html +360 -0
- package/src/db/__init__ 2.py +259 -0
- package/src/db/_core 2.py +437 -0
- package/src/db/_credentials 2.py +124 -0
- package/src/db/_episodic 2.py +762 -0
- package/src/db/_evolution 2.py +54 -0
- package/src/db/_fts 2.py +406 -0
- package/src/db/_goal_profiles 2.py +376 -0
- package/src/db/_hot_context 2.py +660 -0
- package/src/db/_outcomes 2.py +800 -0
- package/src/db/_personal_scripts 2.py +582 -0
- package/src/db/_sessions 2.py +330 -0
- package/src/db/_tasks 2.py +91 -0
- package/src/db/_watchers 2.py +173 -0
- package/src/doctor/formatters 2.py +52 -0
- package/src/doctor/models 2.py +69 -0
- package/src/doctor/planes 2.py +87 -0
- package/src/doctor/providers/__init__ 2.py +1 -0
- package/src/doctor/providers/deep 2.py +367 -0
- package/src/evolution_cycle 2.py +519 -0
- package/src/hooks/auto_capture 2.py +208 -0
- package/src/hooks/caffeinate-guard 2.sh +8 -0
- package/src/hooks/capture-session 2.sh +21 -0
- package/src/hooks/capture-tool-logs 2.sh +158 -0
- package/src/hooks/daily-briefing-check 2.sh +33 -0
- package/src/hooks/heartbeat-enforcement 2.py +90 -0
- package/src/hooks/heartbeat-posttool 2.sh +18 -0
- package/src/hooks/inbox-hook 2.sh +76 -0
- package/src/hooks/post-compact 2.sh +152 -0
- package/src/hooks/pre-compact 2.sh +169 -0
- package/src/hooks/protocol-guardrail 2.sh +10 -0
- package/src/hooks/protocol-pretool-guardrail 2.sh +9 -0
- package/src/hooks/session-stop 2.sh +52 -0
- package/src/kg_populate 2.py +292 -0
- package/src/maintenance 2.py +53 -0
- package/src/memory_backends 2.py +71 -0
- package/src/migrate_embeddings 2.py +124 -0
- package/src/nexo_sdk 2.py +103 -0
- package/src/observability 2.py +199 -0
- package/src/plugin_loader 2.py +217 -0
- package/src/plugins/__init__ 2.py +0 -0
- package/src/plugins/artifact_registry 2.py +450 -0
- package/src/plugins/backup 2.py +127 -0
- package/src/plugins/claims_tools 2.py +119 -0
- package/src/plugins/cognitive_memory 2.py +609 -0
- package/src/plugins/core_rules 2.py +252 -0
- package/src/plugins/cortex 2.py +1155 -0
- package/src/plugins/entities 2.py +67 -0
- package/src/plugins/episodic_memory 2.py +560 -0
- package/src/plugins/evolution 2.py +167 -0
- package/src/plugins/goal_engine 2.py +142 -0
- package/src/plugins/guard 2.py +862 -0
- package/src/plugins/impact 2.py +29 -0
- package/src/plugins/knowledge_graph_tools 2.py +137 -0
- package/src/plugins/media_memory_tools 2.py +98 -0
- package/src/plugins/memory_export 2.py +196 -0
- package/src/plugins/outcomes 2.py +130 -0
- package/src/plugins/personal_scripts 2.py +117 -0
- package/src/plugins/preferences 2.py +47 -0
- package/src/plugins/protocol 2.py +1449 -0
- package/src/plugins/simple_api 2.py +106 -0
- package/src/plugins/skills 2.py +341 -0
- package/src/plugins/state_watchers 2.py +79 -0
- package/src/plugins/update 2.py +986 -0
- package/src/plugins/user_state_tools 2.py +43 -0
- package/src/plugins/workflow 2.py +588 -0
- package/src/protocol_settings 2.py +59 -0
- package/src/public_contribution 2.py +466 -0
- package/src/public_evolution_queue 2.py +241 -0
- package/src/requirements 2.txt +14 -0
- package/src/retroactive_learnings 2.py +373 -0
- package/src/rules/__init__ 2.py +0 -0
- package/src/rules/core-rules 2.json +331 -0
- package/src/rules/migrate 2.py +207 -0
- package/src/runtime_power 2.py +874 -0
- package/src/script_registry 2.py +1559 -0
- package/src/scripts/check-context 2.py +272 -0
- package/src/scripts/deep-sleep/apply_findings 2.py +2327 -0
- package/src/scripts/deep-sleep/collect 2.py +928 -0
- package/src/scripts/deep-sleep/extract 2.py +330 -0
- package/src/scripts/deep-sleep/extract-prompt 2.md +285 -0
- package/src/scripts/deep-sleep/synthesize 2.py +312 -0
- package/src/scripts/deep-sleep/synthesize-prompt 2.md +336 -0
- package/src/scripts/nexo-agent-run 2.py +75 -0
- package/src/scripts/nexo-auto-update 2.py +6 -0
- package/src/scripts/nexo-backup 2.sh +25 -0
- package/src/scripts/nexo-brain-activation 2.sh +140 -0
- package/src/scripts/nexo-catchup 2.py +300 -0
- package/src/scripts/nexo-cognitive-decay 2.py +257 -0
- package/src/scripts/nexo-cortex-cycle 2.py +293 -0
- package/src/scripts/nexo-cron-wrapper 2.sh +53 -0
- package/src/scripts/nexo-daily-self-audit 2.py +2161 -0
- package/src/scripts/nexo-dashboard 2.sh +29 -0
- package/src/scripts/nexo-deep-sleep 2.sh +86 -0
- package/src/scripts/nexo-evolution-run 2.py +1664 -0
- package/src/scripts/nexo-followup-hygiene 2.py +139 -0
- package/src/scripts/nexo-hook-record 2.py +42 -0
- package/src/scripts/nexo-immune 2.py +936 -0
- package/src/scripts/nexo-impact-scorer 2.py +117 -0
- package/src/scripts/nexo-inbox-hook 2.sh +74 -0
- package/src/scripts/nexo-install 2.py +6 -0
- package/src/scripts/nexo-learning-housekeep 2.py +401 -0
- package/src/scripts/nexo-learning-validator 2.py +266 -0
- package/src/scripts/nexo-migrate 2.py +260 -0
- package/src/scripts/nexo-outcome-checker 2.py +127 -0
- package/src/scripts/nexo-postmortem-consolidator 2.py +456 -0
- package/src/scripts/nexo-pre-commit 2.py +120 -0
- package/src/scripts/nexo-prevent-sleep 2.sh +35 -0
- package/src/scripts/nexo-proactive-dashboard 2.py +354 -0
- package/src/scripts/nexo-reflection 2.py +256 -0
- package/src/scripts/nexo-runtime-preflight 2.py +274 -0
- package/src/scripts/nexo-sleep 2.py +631 -0
- package/src/scripts/nexo-snapshot-restore 2.sh +35 -0
- package/src/scripts/nexo-sync-clients 2.py +16 -0
- package/src/scripts/nexo-synthesis 2.py +475 -0
- package/src/scripts/nexo-tcc-approve 2.sh +79 -0
- package/src/scripts/nexo-update 2.sh +306 -0
- package/src/scripts/nexo-watchdog 2.sh +1207 -0
- package/src/scripts/nexo-watchdog-smoke 2.py +119 -0
- package/src/scripts/rehydrate_learnings_from_archive 2.py +245 -0
- package/src/server 2.py +1296 -0
- package/src/skills/run-nexo-audit-phase/guide 2.md +43 -0
- package/src/skills/run-nexo-audit-phase/skill 2.json +59 -0
- package/src/skills/run-nexo-core-fix-cycle/guide 2.md +17 -0
- package/src/skills/run-nexo-core-fix-cycle/script 2.py +276 -0
- package/src/skills/run-nexo-core-fix-cycle/skill 2.json +58 -0
- package/src/skills/run-release-final-audit/guide 2.md +16 -0
- package/src/skills/run-release-final-audit/script 2.py +259 -0
- package/src/skills/run-release-final-audit/skill 2.json +77 -0
- package/src/skills/run-runtime-doctor/guide 2.md +12 -0
- package/src/skills/run-runtime-doctor/script 2.py +21 -0
- package/src/skills/run-runtime-doctor/skill 2.json +25 -0
- package/src/skills_runtime 2.py +932 -0
- package/src/state_watchers_runtime 2.py +475 -0
- package/src/storage_router 2.py +32 -0
- package/src/system_catalog 2.py +786 -0
- package/src/tools_coordination 2.py +103 -0
- package/src/tools_credentials 2.py +68 -0
- package/src/tools_drive 2.py +487 -0
- package/src/tools_hot_context 2.py +163 -0
- package/src/tools_learnings 2.py +612 -0
- package/src/tools_menu 2.py +229 -0
- package/src/tools_reminders 2.py +88 -0
- package/src/tools_reminders_crud 2.py +363 -0
- package/src/tools_sessions 2.py +1054 -0
- package/src/tools_system_catalog 2.py +19 -0
- package/src/tools_task_history 2.py +57 -0
- package/src/tools_transcripts 2.py +98 -0
- package/src/transcript_utils 2.py +412 -0
- package/src/user_context 2.py +46 -0
- package/src/user_data_portability 2.py +328 -0
- package/src/user_state_model 2.py +170 -0
- package/templates/CLAUDE.md 2.template +108 -0
- package/templates/CODEX.AGENTS.md 2.template +66 -0
- package/templates/launchagents/README 2.md +132 -0
- package/templates/launchagents/com.nexo.auto-close-sessions 2.plist +39 -0
- package/templates/launchagents/com.nexo.catchup 2.plist +39 -0
- package/templates/launchagents/com.nexo.cognitive-decay 2.plist +40 -0
- package/templates/launchagents/com.nexo.dashboard 2.plist +43 -0
- package/templates/launchagents/com.nexo.deep-sleep 2.plist +43 -0
- package/templates/launchagents/com.nexo.evolution 2.plist +44 -0
- package/templates/launchagents/com.nexo.followup-hygiene 2.plist +45 -0
- package/templates/launchagents/com.nexo.immune 2.plist +41 -0
- package/templates/launchagents/com.nexo.postmortem 2.plist +45 -0
- package/templates/launchagents/com.nexo.self-audit 2.plist +47 -0
- package/templates/launchagents/com.nexo.synthesis 2.plist +45 -0
- package/templates/launchagents/com.nexo.watchdog 2.plist +37 -0
- package/templates/nexo_helper 2.py +301 -0
- package/templates/openclaw 2.json +13 -0
- package/templates/plugin-template 2.py +40 -0
- package/templates/script-template 2.py +59 -0
- package/templates/script-template 2.sh +13 -0
- package/templates/skill-script-template 2.py +48 -0
- package/templates/skill-template 2.md +33 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"""NEXO Personal Scripts — registry-backed management for user scripts."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
|
|
5
|
+
from db import init_db, list_personal_scripts, list_personal_script_schedules
|
|
6
|
+
from plugins.schedule import handle_schedule_add
|
|
7
|
+
from script_registry import (
|
|
8
|
+
classify_scripts_dir,
|
|
9
|
+
create_script,
|
|
10
|
+
ensure_personal_schedules,
|
|
11
|
+
reconcile_personal_scripts,
|
|
12
|
+
remove_personal_script,
|
|
13
|
+
sync_personal_scripts,
|
|
14
|
+
unschedule_personal_script,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def handle_personal_scripts_sync() -> str:
|
|
19
|
+
init_db()
|
|
20
|
+
result = sync_personal_scripts()
|
|
21
|
+
return json.dumps(result, ensure_ascii=False)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def handle_personal_scripts_classify() -> str:
|
|
25
|
+
return json.dumps(classify_scripts_dir(), ensure_ascii=False)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def handle_personal_scripts_list(include_schedules: bool = True) -> str:
|
|
29
|
+
init_db()
|
|
30
|
+
sync_personal_scripts()
|
|
31
|
+
scripts = list_personal_scripts()
|
|
32
|
+
if include_schedules:
|
|
33
|
+
return json.dumps({"scripts": scripts}, ensure_ascii=False)
|
|
34
|
+
|
|
35
|
+
simplified = []
|
|
36
|
+
for script in scripts:
|
|
37
|
+
simplified.append({
|
|
38
|
+
"id": script["id"],
|
|
39
|
+
"name": script["name"],
|
|
40
|
+
"description": script.get("description", ""),
|
|
41
|
+
"runtime": script.get("runtime", "unknown"),
|
|
42
|
+
"path": script["path"],
|
|
43
|
+
"has_schedule": script.get("has_schedule", False),
|
|
44
|
+
})
|
|
45
|
+
return json.dumps({"scripts": simplified}, ensure_ascii=False)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def handle_personal_script_create(
|
|
49
|
+
name: str,
|
|
50
|
+
description: str = "",
|
|
51
|
+
runtime: str = "python",
|
|
52
|
+
schedule: str = "",
|
|
53
|
+
interval_seconds: int = 0,
|
|
54
|
+
) -> str:
|
|
55
|
+
init_db()
|
|
56
|
+
created = create_script(name, description=description, runtime=runtime)
|
|
57
|
+
if schedule or interval_seconds:
|
|
58
|
+
cron_id = created["name"]
|
|
59
|
+
handle_schedule_add(
|
|
60
|
+
cron_id=cron_id,
|
|
61
|
+
script=created["path"],
|
|
62
|
+
schedule=schedule,
|
|
63
|
+
interval_seconds=interval_seconds,
|
|
64
|
+
description=description,
|
|
65
|
+
script_type=runtime,
|
|
66
|
+
)
|
|
67
|
+
sync_result = sync_personal_scripts()
|
|
68
|
+
created["sync"] = sync_result
|
|
69
|
+
return json.dumps(created, ensure_ascii=False)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def handle_personal_script_schedules() -> str:
|
|
73
|
+
init_db()
|
|
74
|
+
sync_personal_scripts()
|
|
75
|
+
return json.dumps({"schedules": list_personal_script_schedules()}, ensure_ascii=False)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def handle_personal_scripts_reconcile(dry_run: bool = False) -> str:
|
|
79
|
+
init_db()
|
|
80
|
+
return json.dumps(reconcile_personal_scripts(dry_run=dry_run), ensure_ascii=False)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def handle_personal_scripts_ensure_schedules(dry_run: bool = False) -> str:
|
|
84
|
+
init_db()
|
|
85
|
+
return json.dumps(ensure_personal_schedules(dry_run=dry_run), ensure_ascii=False)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def handle_personal_script_unschedule(name: str) -> str:
|
|
89
|
+
init_db()
|
|
90
|
+
return json.dumps(unschedule_personal_script(name), ensure_ascii=False)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def handle_personal_script_remove(name: str, keep_file: bool = False) -> str:
|
|
94
|
+
init_db()
|
|
95
|
+
return json.dumps(remove_personal_script(name, keep_file=keep_file), ensure_ascii=False)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
TOOLS = [
|
|
99
|
+
(handle_personal_scripts_sync, "nexo_personal_scripts_sync",
|
|
100
|
+
"Sync personal scripts and personal cron schedules from filesystem and LaunchAgents into the registry."),
|
|
101
|
+
(handle_personal_scripts_classify, "nexo_personal_scripts_classify",
|
|
102
|
+
"Classify files in NEXO_HOME/scripts into personal, core, ignored, and non-script buckets."),
|
|
103
|
+
(handle_personal_scripts_list, "nexo_personal_scripts_list",
|
|
104
|
+
"List personal scripts known to NEXO, optionally including attached schedules."),
|
|
105
|
+
(handle_personal_script_create, "nexo_personal_script_create",
|
|
106
|
+
"Create a new personal script in NEXO_HOME/scripts, register it, and optionally attach a schedule."),
|
|
107
|
+
(handle_personal_script_schedules, "nexo_personal_script_schedules",
|
|
108
|
+
"List registered personal script schedules."),
|
|
109
|
+
(handle_personal_scripts_reconcile, "nexo_personal_scripts_reconcile",
|
|
110
|
+
"Classify, sync, and ensure declared personal schedules so NEXO_HOME/scripts and personal crons stay aligned."),
|
|
111
|
+
(handle_personal_scripts_ensure_schedules, "nexo_personal_scripts_ensure_schedules",
|
|
112
|
+
"Create or repair personal script schedules declared in inline metadata."),
|
|
113
|
+
(handle_personal_script_unschedule, "nexo_personal_script_unschedule",
|
|
114
|
+
"Remove all personal schedules attached to a script without touching core crons."),
|
|
115
|
+
(handle_personal_script_remove, "nexo_personal_script_remove",
|
|
116
|
+
"Remove a personal script from the registry and optionally delete its file after unscheduling it."),
|
|
117
|
+
]
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Preferences plugin — learned behavior patterns and workflow rules."""
|
|
2
|
+
from db import set_preference, get_preference, list_preferences, delete_preference
|
|
3
|
+
|
|
4
|
+
def handle_preference_get(key: str) -> str:
|
|
5
|
+
"""Get a specific preference by key."""
|
|
6
|
+
p = get_preference(key)
|
|
7
|
+
if not p: return f"Preference '{key}' not found."
|
|
8
|
+
return f"{p['key']} = {p['value']} (cat: {p['category']})"
|
|
9
|
+
|
|
10
|
+
def handle_preference_set(key: str, value: str, category: str = "general") -> str:
|
|
11
|
+
"""Set a preference (creates or updates)."""
|
|
12
|
+
set_preference(key, value, category)
|
|
13
|
+
try:
|
|
14
|
+
import cognitive
|
|
15
|
+
cognitive.ingest_to_ltm(f"{key}: {value}", "preference", key, key, "")
|
|
16
|
+
except Exception:
|
|
17
|
+
pass
|
|
18
|
+
return f"Preference '{key}' = '{value}' ({category})"
|
|
19
|
+
|
|
20
|
+
def handle_preference_list(category: str = "") -> str:
|
|
21
|
+
"""List all preferences, optionally filtered by category."""
|
|
22
|
+
prefs = list_preferences(category)
|
|
23
|
+
if not prefs: return "No preferences."
|
|
24
|
+
grouped = {}
|
|
25
|
+
for p in prefs:
|
|
26
|
+
c = p["category"]
|
|
27
|
+
if c not in grouped: grouped[c] = []
|
|
28
|
+
grouped[c].append(p)
|
|
29
|
+
lines = ["PREFERENCES:"]
|
|
30
|
+
for c, items in grouped.items():
|
|
31
|
+
lines.append(f"\n [{c.upper()}]")
|
|
32
|
+
for p in items:
|
|
33
|
+
lines.append(f" {p['key']} = {p['value']}")
|
|
34
|
+
return "\n".join(lines)
|
|
35
|
+
|
|
36
|
+
def handle_preference_delete(key: str) -> str:
|
|
37
|
+
"""Delete a preference."""
|
|
38
|
+
if not delete_preference(key):
|
|
39
|
+
return f"ERROR: Preference '{key}' not found."
|
|
40
|
+
return f"Preference '{key}' deleted."
|
|
41
|
+
|
|
42
|
+
TOOLS = [
|
|
43
|
+
(handle_preference_get, "nexo_preference_get", "Get a specific preference value"),
|
|
44
|
+
(handle_preference_set, "nexo_preference_set", "Set a preference (creates or updates)"),
|
|
45
|
+
(handle_preference_list, "nexo_preference_list", "List all preferences grouped by category"),
|
|
46
|
+
(handle_preference_delete, "nexo_preference_delete", "Delete a preference"),
|
|
47
|
+
]
|