nexo-brain 5.3.26 → 5.3.28

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 (212) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/package.json +1 -1
  3. package/src/hook_guardrails.py +44 -0
  4. package/src/server.py +3 -0
  5. package/src/tools_sessions.py +6 -1
  6. package/src/dashboard/static/favicon 2.svg +0 -32
  7. package/src/dashboard/static/nexo-logo 2.png +0 -0
  8. package/src/dashboard/static/nexo-logo 2.svg +0 -40
  9. package/src/dashboard/static/style 2.css +0 -2458
  10. package/src/dashboard/templates/adaptive 2.html +0 -118
  11. package/src/dashboard/templates/artifacts 2.html +0 -133
  12. package/src/dashboard/templates/backups 2.html +0 -136
  13. package/src/dashboard/templates/base 2.html +0 -417
  14. package/src/dashboard/templates/calendar 2.html +0 -591
  15. package/src/dashboard/templates/chat 2.html +0 -356
  16. package/src/dashboard/templates/claims 2.html +0 -259
  17. package/src/dashboard/templates/cortex 2.html +0 -321
  18. package/src/dashboard/templates/credentials 2.html +0 -128
  19. package/src/dashboard/templates/crons 2.html +0 -370
  20. package/src/dashboard/templates/dashboard 2.html +0 -494
  21. package/src/dashboard/templates/dreams 2.html +0 -252
  22. package/src/dashboard/templates/email 2.html +0 -160
  23. package/src/dashboard/templates/evolution 2.html +0 -189
  24. package/src/dashboard/templates/feed 2.html +0 -249
  25. package/src/dashboard/templates/followup_health 2.html +0 -170
  26. package/src/dashboard/templates/graph 2.html +0 -201
  27. package/src/dashboard/templates/guard 2.html +0 -259
  28. package/src/dashboard/templates/inbox 2.html +0 -251
  29. package/src/dashboard/templates/memory 2.html +0 -420
  30. package/src/dashboard/templates/operations 2.html +0 -608
  31. package/src/dashboard/templates/plugins 2.html +0 -185
  32. package/src/dashboard/templates/protocol 2.html +0 -199
  33. package/src/dashboard/templates/rules 2.html +0 -246
  34. package/src/dashboard/templates/sentiment 2.html +0 -247
  35. package/src/dashboard/templates/sessions 2.html +0 -218
  36. package/src/dashboard/templates/skills 2.html +0 -329
  37. package/src/dashboard/templates/somatic 2.html +0 -73
  38. package/src/dashboard/templates/triggers 2.html +0 -133
  39. package/src/dashboard/templates/trust 2.html +0 -360
  40. package/src/db/__init__ 2.py +0 -259
  41. package/src/db/_core 2.py +0 -437
  42. package/src/db/_credentials 2.py +0 -124
  43. package/src/db/_episodic 2.py +0 -762
  44. package/src/db/_evolution 2.py +0 -54
  45. package/src/db/_fts 2.py +0 -406
  46. package/src/db/_goal_profiles 2.py +0 -376
  47. package/src/db/_hot_context 2.py +0 -660
  48. package/src/db/_outcomes 2.py +0 -800
  49. package/src/db/_personal_scripts 2.py +0 -582
  50. package/src/db/_sessions 2.py +0 -330
  51. package/src/db/_tasks 2.py +0 -91
  52. package/src/db/_watchers 2.py +0 -173
  53. package/src/doctor/formatters 2.py +0 -52
  54. package/src/doctor/models 2.py +0 -69
  55. package/src/doctor/planes 2.py +0 -87
  56. package/src/doctor/providers/__init__ 2.py +0 -1
  57. package/src/doctor/providers/deep 2.py +0 -367
  58. package/src/evolution_cycle 2.py +0 -519
  59. package/src/hooks/auto_capture 2.py +0 -208
  60. package/src/hooks/caffeinate-guard 2.sh +0 -8
  61. package/src/hooks/capture-session 2.sh +0 -21
  62. package/src/hooks/capture-tool-logs 2.sh +0 -158
  63. package/src/hooks/daily-briefing-check 2.sh +0 -33
  64. package/src/hooks/heartbeat-enforcement 2.py +0 -90
  65. package/src/hooks/heartbeat-posttool 2.sh +0 -18
  66. package/src/hooks/inbox-hook 2.sh +0 -76
  67. package/src/hooks/post-compact 2.sh +0 -152
  68. package/src/hooks/pre-compact 2.sh +0 -169
  69. package/src/hooks/protocol-guardrail 2.sh +0 -10
  70. package/src/hooks/protocol-pretool-guardrail 2.sh +0 -9
  71. package/src/hooks/session-stop 2.sh +0 -52
  72. package/src/kg_populate 2.py +0 -292
  73. package/src/maintenance 2.py +0 -53
  74. package/src/memory_backends 2.py +0 -71
  75. package/src/migrate_embeddings 2.py +0 -124
  76. package/src/nexo_sdk 2.py +0 -103
  77. package/src/observability 2.py +0 -199
  78. package/src/plugin_loader 2.py +0 -217
  79. package/src/plugins/__init__ 2.py +0 -0
  80. package/src/plugins/artifact_registry 2.py +0 -450
  81. package/src/plugins/backup 2.py +0 -127
  82. package/src/plugins/claims_tools 2.py +0 -119
  83. package/src/plugins/cognitive_memory 2.py +0 -609
  84. package/src/plugins/core_rules 2.py +0 -252
  85. package/src/plugins/cortex 2.py +0 -1155
  86. package/src/plugins/entities 2.py +0 -67
  87. package/src/plugins/episodic_memory 2.py +0 -560
  88. package/src/plugins/evolution 2.py +0 -167
  89. package/src/plugins/goal_engine 2.py +0 -142
  90. package/src/plugins/guard 2.py +0 -862
  91. package/src/plugins/impact 2.py +0 -29
  92. package/src/plugins/knowledge_graph_tools 2.py +0 -137
  93. package/src/plugins/media_memory_tools 2.py +0 -98
  94. package/src/plugins/memory_export 2.py +0 -196
  95. package/src/plugins/outcomes 2.py +0 -130
  96. package/src/plugins/personal_scripts 2.py +0 -117
  97. package/src/plugins/preferences 2.py +0 -47
  98. package/src/plugins/protocol 2.py +0 -1449
  99. package/src/plugins/simple_api 2.py +0 -106
  100. package/src/plugins/skills 2.py +0 -341
  101. package/src/plugins/state_watchers 2.py +0 -79
  102. package/src/plugins/update 2.py +0 -986
  103. package/src/plugins/user_state_tools 2.py +0 -43
  104. package/src/plugins/workflow 2.py +0 -588
  105. package/src/protocol_settings 2.py +0 -59
  106. package/src/public_contribution 2.py +0 -466
  107. package/src/public_evolution_queue 2.py +0 -241
  108. package/src/requirements 2.txt +0 -14
  109. package/src/retroactive_learnings 2.py +0 -373
  110. package/src/rules/__init__ 2.py +0 -0
  111. package/src/rules/core-rules 2.json +0 -331
  112. package/src/rules/migrate 2.py +0 -207
  113. package/src/runtime_power 2.py +0 -874
  114. package/src/script_registry 2.py +0 -1559
  115. package/src/scripts/check-context 2.py +0 -272
  116. package/src/scripts/deep-sleep/apply_findings 2.py +0 -2327
  117. package/src/scripts/deep-sleep/collect 2.py +0 -928
  118. package/src/scripts/deep-sleep/extract 2.py +0 -330
  119. package/src/scripts/deep-sleep/extract-prompt 2.md +0 -285
  120. package/src/scripts/deep-sleep/synthesize 2.py +0 -312
  121. package/src/scripts/deep-sleep/synthesize-prompt 2.md +0 -336
  122. package/src/scripts/nexo-agent-run 2.py +0 -75
  123. package/src/scripts/nexo-auto-update 2.py +0 -6
  124. package/src/scripts/nexo-backup 2.sh +0 -25
  125. package/src/scripts/nexo-brain-activation 2.sh +0 -140
  126. package/src/scripts/nexo-catchup 2.py +0 -300
  127. package/src/scripts/nexo-cognitive-decay 2.py +0 -257
  128. package/src/scripts/nexo-cortex-cycle 2.py +0 -293
  129. package/src/scripts/nexo-cron-wrapper 2.sh +0 -53
  130. package/src/scripts/nexo-daily-self-audit 2.py +0 -2161
  131. package/src/scripts/nexo-dashboard 2.sh +0 -29
  132. package/src/scripts/nexo-deep-sleep 2.sh +0 -86
  133. package/src/scripts/nexo-evolution-run 2.py +0 -1664
  134. package/src/scripts/nexo-followup-hygiene 2.py +0 -139
  135. package/src/scripts/nexo-hook-record 2.py +0 -42
  136. package/src/scripts/nexo-immune 2.py +0 -936
  137. package/src/scripts/nexo-impact-scorer 2.py +0 -117
  138. package/src/scripts/nexo-inbox-hook 2.sh +0 -74
  139. package/src/scripts/nexo-install 2.py +0 -6
  140. package/src/scripts/nexo-learning-housekeep 2.py +0 -401
  141. package/src/scripts/nexo-learning-validator 2.py +0 -266
  142. package/src/scripts/nexo-migrate 2.py +0 -260
  143. package/src/scripts/nexo-outcome-checker 2.py +0 -127
  144. package/src/scripts/nexo-postmortem-consolidator 2.py +0 -456
  145. package/src/scripts/nexo-pre-commit 2.py +0 -120
  146. package/src/scripts/nexo-prevent-sleep 2.sh +0 -35
  147. package/src/scripts/nexo-proactive-dashboard 2.py +0 -354
  148. package/src/scripts/nexo-reflection 2.py +0 -256
  149. package/src/scripts/nexo-runtime-preflight 2.py +0 -274
  150. package/src/scripts/nexo-sleep 2.py +0 -631
  151. package/src/scripts/nexo-snapshot-restore 2.sh +0 -35
  152. package/src/scripts/nexo-sync-clients 2.py +0 -16
  153. package/src/scripts/nexo-synthesis 2.py +0 -475
  154. package/src/scripts/nexo-tcc-approve 2.sh +0 -79
  155. package/src/scripts/nexo-update 2.sh +0 -306
  156. package/src/scripts/nexo-watchdog 2.sh +0 -1207
  157. package/src/scripts/nexo-watchdog-smoke 2.py +0 -119
  158. package/src/scripts/rehydrate_learnings_from_archive 2.py +0 -245
  159. package/src/server 2.py +0 -1296
  160. package/src/skills/run-nexo-audit-phase/guide 2.md +0 -43
  161. package/src/skills/run-nexo-audit-phase/skill 2.json +0 -59
  162. package/src/skills/run-nexo-core-fix-cycle/guide 2.md +0 -17
  163. package/src/skills/run-nexo-core-fix-cycle/script 2.py +0 -276
  164. package/src/skills/run-nexo-core-fix-cycle/skill 2.json +0 -58
  165. package/src/skills/run-release-final-audit/guide 2.md +0 -16
  166. package/src/skills/run-release-final-audit/script 2.py +0 -259
  167. package/src/skills/run-release-final-audit/skill 2.json +0 -77
  168. package/src/skills/run-runtime-doctor/guide 2.md +0 -12
  169. package/src/skills/run-runtime-doctor/script 2.py +0 -21
  170. package/src/skills/run-runtime-doctor/skill 2.json +0 -25
  171. package/src/skills_runtime 2.py +0 -932
  172. package/src/state_watchers_runtime 2.py +0 -475
  173. package/src/storage_router 2.py +0 -32
  174. package/src/system_catalog 2.py +0 -786
  175. package/src/tools_coordination 2.py +0 -103
  176. package/src/tools_credentials 2.py +0 -68
  177. package/src/tools_drive 2.py +0 -487
  178. package/src/tools_hot_context 2.py +0 -163
  179. package/src/tools_learnings 2.py +0 -612
  180. package/src/tools_menu 2.py +0 -229
  181. package/src/tools_reminders 2.py +0 -88
  182. package/src/tools_reminders_crud 2.py +0 -363
  183. package/src/tools_sessions 2.py +0 -1054
  184. package/src/tools_system_catalog 2.py +0 -19
  185. package/src/tools_task_history 2.py +0 -57
  186. package/src/tools_transcripts 2.py +0 -98
  187. package/src/transcript_utils 2.py +0 -412
  188. package/src/user_context 2.py +0 -46
  189. package/src/user_data_portability 2.py +0 -328
  190. package/src/user_state_model 2.py +0 -170
  191. package/templates/CLAUDE.md 2.template +0 -108
  192. package/templates/CODEX.AGENTS.md 2.template +0 -66
  193. package/templates/launchagents/README 2.md +0 -132
  194. package/templates/launchagents/com.nexo.auto-close-sessions 2.plist +0 -39
  195. package/templates/launchagents/com.nexo.catchup 2.plist +0 -39
  196. package/templates/launchagents/com.nexo.cognitive-decay 2.plist +0 -40
  197. package/templates/launchagents/com.nexo.dashboard 2.plist +0 -43
  198. package/templates/launchagents/com.nexo.deep-sleep 2.plist +0 -43
  199. package/templates/launchagents/com.nexo.evolution 2.plist +0 -44
  200. package/templates/launchagents/com.nexo.followup-hygiene 2.plist +0 -45
  201. package/templates/launchagents/com.nexo.immune 2.plist +0 -41
  202. package/templates/launchagents/com.nexo.postmortem 2.plist +0 -45
  203. package/templates/launchagents/com.nexo.self-audit 2.plist +0 -47
  204. package/templates/launchagents/com.nexo.synthesis 2.plist +0 -45
  205. package/templates/launchagents/com.nexo.watchdog 2.plist +0 -37
  206. package/templates/nexo_helper 2.py +0 -301
  207. package/templates/openclaw 2.json +0 -13
  208. package/templates/plugin-template 2.py +0 -40
  209. package/templates/script-template 2.py +0 -59
  210. package/templates/script-template 2.sh +0 -13
  211. package/templates/skill-script-template 2.py +0 -48
  212. 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
- }