nexo-brain 5.3.26 → 5.3.27

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.
Files changed (211) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/package.json +1 -1
  3. package/src/server.py +3 -0
  4. package/src/tools_sessions.py +6 -1
  5. package/src/dashboard/static/favicon 2.svg +0 -32
  6. package/src/dashboard/static/nexo-logo 2.png +0 -0
  7. package/src/dashboard/static/nexo-logo 2.svg +0 -40
  8. package/src/dashboard/static/style 2.css +0 -2458
  9. package/src/dashboard/templates/adaptive 2.html +0 -118
  10. package/src/dashboard/templates/artifacts 2.html +0 -133
  11. package/src/dashboard/templates/backups 2.html +0 -136
  12. package/src/dashboard/templates/base 2.html +0 -417
  13. package/src/dashboard/templates/calendar 2.html +0 -591
  14. package/src/dashboard/templates/chat 2.html +0 -356
  15. package/src/dashboard/templates/claims 2.html +0 -259
  16. package/src/dashboard/templates/cortex 2.html +0 -321
  17. package/src/dashboard/templates/credentials 2.html +0 -128
  18. package/src/dashboard/templates/crons 2.html +0 -370
  19. package/src/dashboard/templates/dashboard 2.html +0 -494
  20. package/src/dashboard/templates/dreams 2.html +0 -252
  21. package/src/dashboard/templates/email 2.html +0 -160
  22. package/src/dashboard/templates/evolution 2.html +0 -189
  23. package/src/dashboard/templates/feed 2.html +0 -249
  24. package/src/dashboard/templates/followup_health 2.html +0 -170
  25. package/src/dashboard/templates/graph 2.html +0 -201
  26. package/src/dashboard/templates/guard 2.html +0 -259
  27. package/src/dashboard/templates/inbox 2.html +0 -251
  28. package/src/dashboard/templates/memory 2.html +0 -420
  29. package/src/dashboard/templates/operations 2.html +0 -608
  30. package/src/dashboard/templates/plugins 2.html +0 -185
  31. package/src/dashboard/templates/protocol 2.html +0 -199
  32. package/src/dashboard/templates/rules 2.html +0 -246
  33. package/src/dashboard/templates/sentiment 2.html +0 -247
  34. package/src/dashboard/templates/sessions 2.html +0 -218
  35. package/src/dashboard/templates/skills 2.html +0 -329
  36. package/src/dashboard/templates/somatic 2.html +0 -73
  37. package/src/dashboard/templates/triggers 2.html +0 -133
  38. package/src/dashboard/templates/trust 2.html +0 -360
  39. package/src/db/__init__ 2.py +0 -259
  40. package/src/db/_core 2.py +0 -437
  41. package/src/db/_credentials 2.py +0 -124
  42. package/src/db/_episodic 2.py +0 -762
  43. package/src/db/_evolution 2.py +0 -54
  44. package/src/db/_fts 2.py +0 -406
  45. package/src/db/_goal_profiles 2.py +0 -376
  46. package/src/db/_hot_context 2.py +0 -660
  47. package/src/db/_outcomes 2.py +0 -800
  48. package/src/db/_personal_scripts 2.py +0 -582
  49. package/src/db/_sessions 2.py +0 -330
  50. package/src/db/_tasks 2.py +0 -91
  51. package/src/db/_watchers 2.py +0 -173
  52. package/src/doctor/formatters 2.py +0 -52
  53. package/src/doctor/models 2.py +0 -69
  54. package/src/doctor/planes 2.py +0 -87
  55. package/src/doctor/providers/__init__ 2.py +0 -1
  56. package/src/doctor/providers/deep 2.py +0 -367
  57. package/src/evolution_cycle 2.py +0 -519
  58. package/src/hooks/auto_capture 2.py +0 -208
  59. package/src/hooks/caffeinate-guard 2.sh +0 -8
  60. package/src/hooks/capture-session 2.sh +0 -21
  61. package/src/hooks/capture-tool-logs 2.sh +0 -158
  62. package/src/hooks/daily-briefing-check 2.sh +0 -33
  63. package/src/hooks/heartbeat-enforcement 2.py +0 -90
  64. package/src/hooks/heartbeat-posttool 2.sh +0 -18
  65. package/src/hooks/inbox-hook 2.sh +0 -76
  66. package/src/hooks/post-compact 2.sh +0 -152
  67. package/src/hooks/pre-compact 2.sh +0 -169
  68. package/src/hooks/protocol-guardrail 2.sh +0 -10
  69. package/src/hooks/protocol-pretool-guardrail 2.sh +0 -9
  70. package/src/hooks/session-stop 2.sh +0 -52
  71. package/src/kg_populate 2.py +0 -292
  72. package/src/maintenance 2.py +0 -53
  73. package/src/memory_backends 2.py +0 -71
  74. package/src/migrate_embeddings 2.py +0 -124
  75. package/src/nexo_sdk 2.py +0 -103
  76. package/src/observability 2.py +0 -199
  77. package/src/plugin_loader 2.py +0 -217
  78. package/src/plugins/__init__ 2.py +0 -0
  79. package/src/plugins/artifact_registry 2.py +0 -450
  80. package/src/plugins/backup 2.py +0 -127
  81. package/src/plugins/claims_tools 2.py +0 -119
  82. package/src/plugins/cognitive_memory 2.py +0 -609
  83. package/src/plugins/core_rules 2.py +0 -252
  84. package/src/plugins/cortex 2.py +0 -1155
  85. package/src/plugins/entities 2.py +0 -67
  86. package/src/plugins/episodic_memory 2.py +0 -560
  87. package/src/plugins/evolution 2.py +0 -167
  88. package/src/plugins/goal_engine 2.py +0 -142
  89. package/src/plugins/guard 2.py +0 -862
  90. package/src/plugins/impact 2.py +0 -29
  91. package/src/plugins/knowledge_graph_tools 2.py +0 -137
  92. package/src/plugins/media_memory_tools 2.py +0 -98
  93. package/src/plugins/memory_export 2.py +0 -196
  94. package/src/plugins/outcomes 2.py +0 -130
  95. package/src/plugins/personal_scripts 2.py +0 -117
  96. package/src/plugins/preferences 2.py +0 -47
  97. package/src/plugins/protocol 2.py +0 -1449
  98. package/src/plugins/simple_api 2.py +0 -106
  99. package/src/plugins/skills 2.py +0 -341
  100. package/src/plugins/state_watchers 2.py +0 -79
  101. package/src/plugins/update 2.py +0 -986
  102. package/src/plugins/user_state_tools 2.py +0 -43
  103. package/src/plugins/workflow 2.py +0 -588
  104. package/src/protocol_settings 2.py +0 -59
  105. package/src/public_contribution 2.py +0 -466
  106. package/src/public_evolution_queue 2.py +0 -241
  107. package/src/requirements 2.txt +0 -14
  108. package/src/retroactive_learnings 2.py +0 -373
  109. package/src/rules/__init__ 2.py +0 -0
  110. package/src/rules/core-rules 2.json +0 -331
  111. package/src/rules/migrate 2.py +0 -207
  112. package/src/runtime_power 2.py +0 -874
  113. package/src/script_registry 2.py +0 -1559
  114. package/src/scripts/check-context 2.py +0 -272
  115. package/src/scripts/deep-sleep/apply_findings 2.py +0 -2327
  116. package/src/scripts/deep-sleep/collect 2.py +0 -928
  117. package/src/scripts/deep-sleep/extract 2.py +0 -330
  118. package/src/scripts/deep-sleep/extract-prompt 2.md +0 -285
  119. package/src/scripts/deep-sleep/synthesize 2.py +0 -312
  120. package/src/scripts/deep-sleep/synthesize-prompt 2.md +0 -336
  121. package/src/scripts/nexo-agent-run 2.py +0 -75
  122. package/src/scripts/nexo-auto-update 2.py +0 -6
  123. package/src/scripts/nexo-backup 2.sh +0 -25
  124. package/src/scripts/nexo-brain-activation 2.sh +0 -140
  125. package/src/scripts/nexo-catchup 2.py +0 -300
  126. package/src/scripts/nexo-cognitive-decay 2.py +0 -257
  127. package/src/scripts/nexo-cortex-cycle 2.py +0 -293
  128. package/src/scripts/nexo-cron-wrapper 2.sh +0 -53
  129. package/src/scripts/nexo-daily-self-audit 2.py +0 -2161
  130. package/src/scripts/nexo-dashboard 2.sh +0 -29
  131. package/src/scripts/nexo-deep-sleep 2.sh +0 -86
  132. package/src/scripts/nexo-evolution-run 2.py +0 -1664
  133. package/src/scripts/nexo-followup-hygiene 2.py +0 -139
  134. package/src/scripts/nexo-hook-record 2.py +0 -42
  135. package/src/scripts/nexo-immune 2.py +0 -936
  136. package/src/scripts/nexo-impact-scorer 2.py +0 -117
  137. package/src/scripts/nexo-inbox-hook 2.sh +0 -74
  138. package/src/scripts/nexo-install 2.py +0 -6
  139. package/src/scripts/nexo-learning-housekeep 2.py +0 -401
  140. package/src/scripts/nexo-learning-validator 2.py +0 -266
  141. package/src/scripts/nexo-migrate 2.py +0 -260
  142. package/src/scripts/nexo-outcome-checker 2.py +0 -127
  143. package/src/scripts/nexo-postmortem-consolidator 2.py +0 -456
  144. package/src/scripts/nexo-pre-commit 2.py +0 -120
  145. package/src/scripts/nexo-prevent-sleep 2.sh +0 -35
  146. package/src/scripts/nexo-proactive-dashboard 2.py +0 -354
  147. package/src/scripts/nexo-reflection 2.py +0 -256
  148. package/src/scripts/nexo-runtime-preflight 2.py +0 -274
  149. package/src/scripts/nexo-sleep 2.py +0 -631
  150. package/src/scripts/nexo-snapshot-restore 2.sh +0 -35
  151. package/src/scripts/nexo-sync-clients 2.py +0 -16
  152. package/src/scripts/nexo-synthesis 2.py +0 -475
  153. package/src/scripts/nexo-tcc-approve 2.sh +0 -79
  154. package/src/scripts/nexo-update 2.sh +0 -306
  155. package/src/scripts/nexo-watchdog 2.sh +0 -1207
  156. package/src/scripts/nexo-watchdog-smoke 2.py +0 -119
  157. package/src/scripts/rehydrate_learnings_from_archive 2.py +0 -245
  158. package/src/server 2.py +0 -1296
  159. package/src/skills/run-nexo-audit-phase/guide 2.md +0 -43
  160. package/src/skills/run-nexo-audit-phase/skill 2.json +0 -59
  161. package/src/skills/run-nexo-core-fix-cycle/guide 2.md +0 -17
  162. package/src/skills/run-nexo-core-fix-cycle/script 2.py +0 -276
  163. package/src/skills/run-nexo-core-fix-cycle/skill 2.json +0 -58
  164. package/src/skills/run-release-final-audit/guide 2.md +0 -16
  165. package/src/skills/run-release-final-audit/script 2.py +0 -259
  166. package/src/skills/run-release-final-audit/skill 2.json +0 -77
  167. package/src/skills/run-runtime-doctor/guide 2.md +0 -12
  168. package/src/skills/run-runtime-doctor/script 2.py +0 -21
  169. package/src/skills/run-runtime-doctor/skill 2.json +0 -25
  170. package/src/skills_runtime 2.py +0 -932
  171. package/src/state_watchers_runtime 2.py +0 -475
  172. package/src/storage_router 2.py +0 -32
  173. package/src/system_catalog 2.py +0 -786
  174. package/src/tools_coordination 2.py +0 -103
  175. package/src/tools_credentials 2.py +0 -68
  176. package/src/tools_drive 2.py +0 -487
  177. package/src/tools_hot_context 2.py +0 -163
  178. package/src/tools_learnings 2.py +0 -612
  179. package/src/tools_menu 2.py +0 -229
  180. package/src/tools_reminders 2.py +0 -88
  181. package/src/tools_reminders_crud 2.py +0 -363
  182. package/src/tools_sessions 2.py +0 -1054
  183. package/src/tools_system_catalog 2.py +0 -19
  184. package/src/tools_task_history 2.py +0 -57
  185. package/src/tools_transcripts 2.py +0 -98
  186. package/src/transcript_utils 2.py +0 -412
  187. package/src/user_context 2.py +0 -46
  188. package/src/user_data_portability 2.py +0 -328
  189. package/src/user_state_model 2.py +0 -170
  190. package/templates/CLAUDE.md 2.template +0 -108
  191. package/templates/CODEX.AGENTS.md 2.template +0 -66
  192. package/templates/launchagents/README 2.md +0 -132
  193. package/templates/launchagents/com.nexo.auto-close-sessions 2.plist +0 -39
  194. package/templates/launchagents/com.nexo.catchup 2.plist +0 -39
  195. package/templates/launchagents/com.nexo.cognitive-decay 2.plist +0 -40
  196. package/templates/launchagents/com.nexo.dashboard 2.plist +0 -43
  197. package/templates/launchagents/com.nexo.deep-sleep 2.plist +0 -43
  198. package/templates/launchagents/com.nexo.evolution 2.plist +0 -44
  199. package/templates/launchagents/com.nexo.followup-hygiene 2.plist +0 -45
  200. package/templates/launchagents/com.nexo.immune 2.plist +0 -41
  201. package/templates/launchagents/com.nexo.postmortem 2.plist +0 -45
  202. package/templates/launchagents/com.nexo.self-audit 2.plist +0 -47
  203. package/templates/launchagents/com.nexo.synthesis 2.plist +0 -45
  204. package/templates/launchagents/com.nexo.watchdog 2.plist +0 -37
  205. package/templates/nexo_helper 2.py +0 -301
  206. package/templates/openclaw 2.json +0 -13
  207. package/templates/plugin-template 2.py +0 -40
  208. package/templates/script-template 2.py +0 -59
  209. package/templates/script-template 2.sh +0 -13
  210. package/templates/skill-script-template 2.py +0 -48
  211. package/templates/skill-template 2.md +0 -33
@@ -1,259 +0,0 @@
1
- #!/usr/bin/env python3
2
- from __future__ import annotations
3
-
4
- import json
5
- import os
6
- import shutil
7
- import subprocess
8
- import sys
9
- from pathlib import Path
10
-
11
-
12
- def _is_repo_root(candidate: Path) -> bool:
13
- return (
14
- (candidate / "package.json").is_file()
15
- and (candidate / "release-contracts").is_dir()
16
- and (candidate / "scripts" / "verify_release_readiness.py").is_file()
17
- )
18
-
19
-
20
- def _normalize_candidate(raw: str | Path) -> Path:
21
- candidate = Path(raw).expanduser().resolve()
22
- if candidate.is_file():
23
- candidate = candidate.parent
24
- if candidate.name == "src" and (candidate / "server.py").is_file():
25
- candidate = candidate.parent
26
- return candidate
27
-
28
-
29
- def _resolve_repo_root_from_atlas() -> Path | None:
30
- homes = []
31
- env_home = os.environ.get("NEXO_HOME", "").strip()
32
- if env_home:
33
- homes.append(Path(env_home).expanduser())
34
- homes.extend((Path.home() / ".nexo", Path.home() / "claude"))
35
-
36
- seen = set()
37
- for home in homes:
38
- key = str(home)
39
- if key in seen:
40
- continue
41
- seen.add(key)
42
- atlas_path = home / "brain" / "project-atlas.json"
43
- if not atlas_path.is_file():
44
- continue
45
- try:
46
- payload = json.loads(atlas_path.read_text(encoding="utf-8"))
47
- except json.JSONDecodeError:
48
- continue
49
- nexo = payload.get("nexo") if isinstance(payload, dict) else None
50
- locations = nexo.get("locations") if isinstance(nexo, dict) else None
51
- source = locations.get("mcp_server", "") if isinstance(locations, dict) else ""
52
- if not isinstance(source, str) or not source.strip():
53
- continue
54
- candidate = _normalize_candidate(source)
55
- if _is_repo_root(candidate):
56
- return candidate
57
- return None
58
-
59
-
60
- def _resolve_repo_root() -> Path:
61
- env_code = os.environ.get("NEXO_CODE", "").strip()
62
- if env_code:
63
- candidate = _normalize_candidate(env_code)
64
- if _is_repo_root(candidate):
65
- return candidate
66
-
67
- cwd = Path.cwd().resolve()
68
- for candidate in (cwd, *cwd.parents):
69
- if _is_repo_root(candidate):
70
- return candidate
71
-
72
- atlas_repo = _resolve_repo_root_from_atlas()
73
- if atlas_repo is not None:
74
- return atlas_repo
75
-
76
- script_root = _normalize_candidate(Path(__file__).resolve().parents[3])
77
- if _is_repo_root(script_root):
78
- return script_root
79
- return script_root
80
-
81
-
82
- ROOT = _resolve_repo_root()
83
-
84
-
85
- def _package_version() -> str:
86
- payload = json.loads((ROOT / "package.json").read_text(encoding="utf-8"))
87
- version = str(payload.get("version", "") or "").strip()
88
- if not version:
89
- raise SystemExit("[release-final-audit] package.json missing version")
90
- return version
91
-
92
-
93
- def _parse_bool(raw: str, default: bool) -> bool:
94
- text = (raw or "").strip().lower()
95
- if not text:
96
- return default
97
- if text in {"1", "true", "yes", "on"}:
98
- return True
99
- if text in {"0", "false", "no", "off"}:
100
- return False
101
- raise SystemExit(f"[release-final-audit] invalid boolean: {raw}")
102
-
103
-
104
- def _resolve_contract(version: str, raw: str) -> Path | None:
105
- choice = (raw or "auto").strip()
106
- if not choice or choice.lower() == "auto":
107
- candidate = ROOT / "release-contracts" / f"v{version}.json"
108
- if not candidate.is_file():
109
- raise SystemExit(
110
- f"[release-final-audit] missing auto contract for v{version}: {candidate}"
111
- )
112
- return candidate
113
- if choice.lower() in {"none", "skip", "off"}:
114
- return None
115
-
116
- candidate = Path(choice).expanduser()
117
- if not candidate.is_absolute():
118
- candidate = (ROOT / candidate).resolve()
119
- if not candidate.is_file():
120
- raise SystemExit(f"[release-final-audit] contract not found: {candidate}")
121
- return candidate
122
-
123
-
124
- def _resolve_smoke_runner(version: str) -> Path | None:
125
- parts = version.split(".")
126
- if len(parts) < 2:
127
- return None
128
- candidate = ROOT / "scripts" / f"run_v{parts[0]}_{parts[1]}_smoke.py"
129
- return candidate if candidate.is_file() else None
130
-
131
-
132
- def _env(nexo_home: str) -> dict[str, str]:
133
- env = os.environ.copy()
134
- existing_pythonpath = env.get("PYTHONPATH", "").strip()
135
- src_path = str(ROOT / "src")
136
- env["PYTHONPATH"] = (
137
- f"{src_path}{os.pathsep}{existing_pythonpath}" if existing_pythonpath else src_path
138
- )
139
- env["NEXO_CODE"] = src_path
140
- if nexo_home.strip():
141
- env["NEXO_HOME"] = str(Path(nexo_home).expanduser())
142
- return env
143
-
144
-
145
- def _command_succeeds(cmd: list[str], *, env: dict[str, str]) -> bool:
146
- result = subprocess.run(
147
- cmd,
148
- cwd=ROOT,
149
- env=env,
150
- stdout=subprocess.DEVNULL,
151
- stderr=subprocess.DEVNULL,
152
- )
153
- return result.returncode == 0
154
-
155
-
156
- def _resolve_python(env: dict[str, str]) -> str:
157
- candidates = []
158
- override = os.environ.get("NEXO_RELEASE_PYTHON", "").strip()
159
- if override:
160
- candidates.append(override)
161
-
162
- for name in ("python3", "python"):
163
- path = shutil.which(name)
164
- if path:
165
- candidates.append(path)
166
-
167
- candidates.append(sys.executable)
168
-
169
- seen = set()
170
- for candidate in candidates:
171
- if not candidate or candidate in seen:
172
- continue
173
- seen.add(candidate)
174
- if _command_succeeds([candidate, "-m", "pytest", "--version"], env=env):
175
- return candidate
176
-
177
- raise SystemExit(
178
- "[release-final-audit] no Python interpreter with pytest available. "
179
- "Set NEXO_RELEASE_PYTHON or install pytest in the active runtime."
180
- )
181
-
182
-
183
- def _run(cmd: list[str], *, env: dict[str, str]) -> None:
184
- print(f"[release-final-audit] $ {' '.join(cmd)}")
185
- result = subprocess.run(cmd, cwd=ROOT, env=env)
186
- if result.returncode != 0:
187
- raise SystemExit(result.returncode)
188
-
189
-
190
- def _looks_like_nexo_home(raw: str) -> bool:
191
- if not raw.strip():
192
- return False
193
- candidate = Path(raw).expanduser()
194
- return (candidate / "skills-runtime").is_dir() or (candidate / "operations" / "tool-logs").is_dir()
195
-
196
-
197
- def _parse_optional_args(argv: list[str]) -> tuple[str, str, str, str]:
198
- website_root = argv[5] if len(argv) > 5 else ""
199
- nexo_home = argv[6] if len(argv) > 6 else ""
200
- final_closeout = argv[7] if len(argv) > 7 else ""
201
- protocol_task_id = argv[8] if len(argv) > 8 else ""
202
- if website_root and not nexo_home and _looks_like_nexo_home(website_root):
203
- nexo_home, website_root = website_root, ""
204
- return website_root, nexo_home, final_closeout, protocol_task_id
205
-
206
-
207
- def main() -> int:
208
- contract_arg = sys.argv[1] if len(sys.argv) > 1 else "auto"
209
- require_contract_complete = _parse_bool(sys.argv[2] if len(sys.argv) > 2 else "true", True)
210
- include_smoke = _parse_bool(sys.argv[3] if len(sys.argv) > 3 else "true", True)
211
- ci = _parse_bool(sys.argv[4] if len(sys.argv) > 4 else "false", False)
212
- website_root, nexo_home, final_closeout_raw, protocol_task_id = _parse_optional_args(sys.argv)
213
- final_closeout = _parse_bool(final_closeout_raw, False)
214
-
215
- version = _package_version()
216
- contract_path = _resolve_contract(version, contract_arg)
217
- env = _env(nexo_home)
218
- python_bin = _resolve_python(env)
219
-
220
- print(f"[release-final-audit] version={version}")
221
- print(f"[release-final-audit] contract={contract_path or 'none'}")
222
- print(f"[release-final-audit] include_smoke={include_smoke} ci={ci} final_closeout={final_closeout}")
223
- print(f"[release-final-audit] python={python_bin}")
224
- if final_closeout and protocol_task_id.strip():
225
- print(f"[release-final-audit] protocol_task_id={protocol_task_id.strip()}")
226
-
227
- if include_smoke:
228
- smoke_runner = _resolve_smoke_runner(version)
229
- if smoke_runner is None:
230
- print(f"[release-final-audit] smoke runner skipped for v{version} (not found)")
231
- else:
232
- smoke_output = ROOT / "release-contracts" / "smoke" / f"v{version}.json"
233
- _run([python_bin, str(smoke_runner), "--output", str(smoke_output)], env=env)
234
-
235
- readiness_cmd = [python_bin, "scripts/verify_release_readiness.py"]
236
- if ci:
237
- readiness_cmd.append("--ci")
238
- if website_root.strip():
239
- readiness_cmd.extend(["--website-root", website_root.strip()])
240
- if nexo_home.strip():
241
- readiness_cmd.extend(["--nexo-home", nexo_home.strip()])
242
- if contract_path is not None:
243
- readiness_cmd.extend(["--contract", str(contract_path)])
244
- if require_contract_complete:
245
- readiness_cmd.append("--require-contract-complete")
246
- elif require_contract_complete:
247
- print("[release-final-audit] require_contract_complete ignored because contract=none")
248
- if final_closeout:
249
- readiness_cmd.append("--final-closeout")
250
- if protocol_task_id.strip():
251
- readiness_cmd.extend(["--protocol-task-id", protocol_task_id.strip()])
252
-
253
- _run(readiness_cmd, env=env)
254
- print("[release-final-audit] OK")
255
- return 0
256
-
257
-
258
- if __name__ == "__main__":
259
- raise SystemExit(main())
@@ -1,77 +0,0 @@
1
- {
2
- "id": "SK-RUN-RELEASE-FINAL-AUDIT",
3
- "name": "Run Release Final Audit",
4
- "description": "Runs the final release audit for NEXO: smoke when available, release-readiness checks, contract completeness, and optional closeout gates for GitHub Release, npm, runtime update/doctor, and protocol evidence.",
5
- "level": "published",
6
- "mode": "hybrid",
7
- "source_kind": "core",
8
- "execution_level": "read-only",
9
- "approval_required": false,
10
- "tags": ["release", "audit", "readiness", "consistency", "reversibility"],
11
- "trigger_patterns": [
12
- "final release audit",
13
- "release readiness audit",
14
- "pre-release audit",
15
- "release closeout audit",
16
- "auditoria final release",
17
- "auditoria final publicacion",
18
- "seguridad reversibilidad consistencia"
19
- ],
20
- "params_schema": {
21
- "contract": {
22
- "type": "string",
23
- "required": false,
24
- "default": "auto"
25
- },
26
- "require_contract_complete": {
27
- "type": "boolean",
28
- "required": false,
29
- "default": true
30
- },
31
- "include_smoke": {
32
- "type": "boolean",
33
- "required": false,
34
- "default": true
35
- },
36
- "ci": {
37
- "type": "boolean",
38
- "required": false,
39
- "default": false
40
- },
41
- "final_closeout": {
42
- "type": "boolean",
43
- "required": false,
44
- "default": false
45
- },
46
- "protocol_task_id": {
47
- "type": "string",
48
- "required": false,
49
- "default": ""
50
- },
51
- "website_root": {
52
- "type": "string",
53
- "required": false,
54
- "default": ""
55
- },
56
- "nexo_home": {
57
- "type": "string",
58
- "required": false,
59
- "default": ""
60
- }
61
- },
62
- "command_template": {
63
- "argv": [
64
- "{{file_path}}",
65
- "{{contract}}",
66
- "{{require_contract_complete}}",
67
- "{{include_smoke}}",
68
- "{{ci}}",
69
- "{{website_root}}",
70
- "{{nexo_home}}",
71
- "{{final_closeout}}",
72
- "{{protocol_task_id}}"
73
- ]
74
- },
75
- "executable_entry": "script.py",
76
- "stable_after_uses": 5
77
- }
@@ -1,12 +0,0 @@
1
- # Run Runtime Doctor
2
-
3
- Use this skill when you want a fast health snapshot of the running NEXO system.
4
-
5
- ## Steps
6
- 1. Run the runtime doctor for the requested tier.
7
- 2. Review the degraded or critical checks first.
8
- 3. If the report recommends deterministic fixes, decide whether to run them explicitly.
9
-
10
- ## Gotchas
11
- - A critical watchdog result reflects a real system issue, not just a stale skill.
12
- - `all` is broader and slower than `runtime`.
@@ -1,21 +0,0 @@
1
- #!/usr/bin/env python3
2
- import os
3
- import subprocess
4
- import sys
5
-
6
-
7
- def main() -> int:
8
- tier = sys.argv[1] if len(sys.argv) > 1 and sys.argv[1] else "runtime"
9
- nexo_code = os.environ.get("NEXO_CODE", "")
10
- if not nexo_code:
11
- print("NEXO_CODE not set", file=sys.stderr)
12
- return 1
13
-
14
- cli_py = os.path.join(nexo_code, "cli.py")
15
- cmd = [sys.executable, cli_py, "doctor", "--tier", tier, "--plane", "runtime_personal", "--json"]
16
- result = subprocess.run(cmd, text=True)
17
- return result.returncode
18
-
19
-
20
- if __name__ == "__main__":
21
- raise SystemExit(main())
@@ -1,25 +0,0 @@
1
- {
2
- "id": "SK-RUN-RUNTIME-DOCTOR",
3
- "name": "Run Runtime Doctor",
4
- "description": "Runs the NEXO runtime doctor and returns the current health report.",
5
- "level": "published",
6
- "mode": "execute",
7
- "source_kind": "core",
8
- "execution_level": "read-only",
9
- "approval_required": false,
10
- "tags": ["doctor", "diagnostics", "runtime"],
11
- "trigger_patterns": ["run doctor", "check runtime health", "diagnose nexo"],
12
- "params_schema": {
13
- "tier": {
14
- "type": "string",
15
- "required": false,
16
- "default": "runtime",
17
- "enum": ["boot", "runtime", "deep", "all"]
18
- }
19
- },
20
- "command_template": {
21
- "argv": ["{{file_path}}", "{{tier}}"]
22
- },
23
- "executable_entry": "script.py",
24
- "stable_after_uses": 10
25
- }