@agentikos/omega-os 0.19.45 → 0.19.47

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.
@@ -1037,7 +1037,50 @@ PY
1037
1037
  # Selection comes from the manifest's `claude_plugins:` list (headless) or a
1038
1038
  # whiptail checklist (interactive). Failures on individual plugins are
1039
1039
  # recorded but do not abort the step — Claude plugins are nice-to-have.
1040
+ _disable_broken_claude_plugins() {
1041
+ # v0.19.46 — detect + neutralize known-broken Claude Code plugins
1042
+ # before any `claude` session is spawned (AISB-chat, Hermès-chat,
1043
+ # auto-launch menu, etc.). Without this, broken plugins fire their
1044
+ # SessionStart hook on every claude invocation and pollute the TUI
1045
+ # with ugly stack traces.
1046
+ #
1047
+ # Currently neutralized:
1048
+ # * thedotmack/claude-mem@13.x — imports `zod/v3` which zod 4
1049
+ # removed; the SessionStart hook crashes on every claude start.
1050
+ # Upstream issue (no fix as of 2026-05-26).
1051
+ local cache_dir="${HOME}/.claude/plugins/cache"
1052
+ [ -d "$cache_dir" ] || return 0
1053
+ local found=0
1054
+ # claude-mem: look for the broken worker-service.cjs path.
1055
+ local cm
1056
+ for cm in "$cache_dir"/thedotmack/claude-mem/*/; do
1057
+ [ -d "$cm" ] || continue
1058
+ if [ -f "$cm/scripts/worker-service.cjs" ]; then
1059
+ # Probe the broken `zod/v3` require — if grep finds it, plugin is
1060
+ # the broken upstream version.
1061
+ if grep -q "require.*zod/v3\|require.*['\"]zod/v3['\"]" \
1062
+ "$cm/scripts/worker-service.cjs" 2>/dev/null; then
1063
+ local disabled="${cm%/}.disabled-by-omegaos"
1064
+ if [ ! -d "$disabled" ]; then
1065
+ mv "$cm" "$disabled" 2>/dev/null \
1066
+ && info " neutralized broken claude-mem at $(basename "$cm") (zod/v3 import bug)" \
1067
+ && found=1
1068
+ fi
1069
+ fi
1070
+ fi
1071
+ done
1072
+ if [ "$found" = "1" ]; then
1073
+ info " → re-enable later: \`mv ${cache_dir}/thedotmack/claude-mem.*.disabled-by-omegaos ${cache_dir}/thedotmack/claude-mem/\`"
1074
+ fi
1075
+ return 0
1076
+ }
1077
+
1040
1078
  step_claude_plugins() {
1079
+ # v0.19.46 — preflight: kill any known-broken plugins so the claude
1080
+ # commands we spawn later (and the user's interactive `claude` runs)
1081
+ # don't crash on hook startup.
1082
+ _disable_broken_claude_plugins
1083
+
1041
1084
  local catalog="$OMEGA_HOME/Agentik_SSOT/claude-plugins/claude-plugins.yaml"
1042
1085
  if [ ! -f "$catalog" ]; then
1043
1086
  info "no Claude plugin catalog — skipping (step 20 should have deployed it)"
@@ -188,7 +188,7 @@ from omega_engine.genesis import (
188
188
  )
189
189
  from omega_engine import plan as plan_v7
190
190
 
191
- __version__ = "0.19.45"
191
+ __version__ = "0.19.47"
192
192
 
193
193
  __all__ = [
194
194
  "__version__",
@@ -115,8 +115,17 @@ def _have_tmux() -> bool:
115
115
  return shutil.which("tmux") is not None
116
116
 
117
117
 
118
- def _tmux(*args: str, check: bool = False, timeout: int = 15) -> tuple[int, str]:
119
- """Run `tmux <args>` and return (exit, stdout)."""
118
+ def _tmux(*args: str, check: bool = False, timeout: int = 2) -> tuple[int, str]:
119
+ """Run `tmux <args>` and return (exit, stdout).
120
+
121
+ v0.19.47 — timeout LOWERED from 15s → 2s. The TUI calls these
122
+ probes every menu render (list-sessions, list-windows, has-session)
123
+ and a hung tmux server (stale socket, zombie, slow disk) would
124
+ block the menu indefinitely until the user Ctrl-C'd. 2s is more
125
+ than enough for a healthy tmux client; on timeout we just return
126
+ "not available" and the menu renders with empty session lists
127
+ rather than hanging.
128
+ """
120
129
  if not _have_tmux():
121
130
  return 1, ""
122
131
  try:
@@ -124,6 +133,9 @@ def _tmux(*args: str, check: bool = False, timeout: int = 15) -> tuple[int, str]
124
133
  ["tmux", *args],
125
134
  check=False, capture_output=True, text=True, timeout=timeout,
126
135
  )
136
+ except subprocess.TimeoutExpired:
137
+ # Treat hung tmux as "not available" — don't block the caller.
138
+ return 1, ""
127
139
  except (OSError, subprocess.SubprocessError) as exc:
128
140
  return 1, str(exc)
129
141
  out = (proc.stdout or "") + (proc.stderr or "")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "omega-engine"
3
- version = "0.19.45"
3
+ version = "0.19.47"
4
4
  description = "The Omega OS orchestration engine — event-sourced, verified-completion agent graphs."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -1 +1 @@
1
- 0.19.45
1
+ 0.19.47
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentikos/omega-os",
3
- "version": "0.19.45",
3
+ "version": "0.19.47",
4
4
  "description": "Omega OS — installable agentic operating system with verified-completion orchestration. Event-sourced engine, 8-block rack, autonomous agents, MCP.",
5
5
  "bin": {
6
6
  "omega-os": "bin/omega-os.js"