@agentikos/omega-os 0.19.54 → 0.19.56

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.
@@ -116,6 +116,11 @@ def apply_settings(
116
116
  agent_teams = bool(cfg.get("experimental_agent_teams", True))
117
117
  bypass = bool(cfg.get("bypass_permissions", True))
118
118
  audit_gate = bool(cfg.get("audit_gate", True))
119
+ # v0.19.55 — default model is OPUS (was: whatever the user had —
120
+ # which on fresh Claude Code installs is sonnet). Gareth's CLAUDE.md
121
+ # is explicit: "Always opus — unlimited." For Max OAuth there's no
122
+ # per-call cost, so opus everywhere is the right default.
123
+ default_model = cfg.get("default_model", "opus")
119
124
 
120
125
  settings_file.parent.mkdir(parents=True, exist_ok=True)
121
126
  if settings_file.exists():
@@ -142,6 +147,11 @@ def apply_settings(
142
147
  # We previously set it; revert to "default" so the per-tool dialog returns.
143
148
  perms["defaultMode"] = "default"
144
149
 
150
+ # 2b. Default model — opus by default (Gareth's "Always opus" rule).
151
+ # Operator can override via manifest: `default_model: sonnet|haiku`.
152
+ if default_model and isinstance(default_model, str):
153
+ settings["model"] = default_model
154
+
145
155
  # 3. Stop hook.
146
156
  hooks = _ensure_dict(settings, "hooks")
147
157
  stop_entries = _ensure_list(hooks, "Stop")
@@ -101,7 +101,7 @@ run_step() {
101
101
  # from refreshing cli.py — the bug the user hit on v0.19.43.
102
102
  local _force_step=0
103
103
  case "$name" in
104
- *structure*|*aisb-suite*|*audit-skills*|*engine*|*personas*|*claude-plugins*|*tmux-config*)
104
+ *structure*|*aisb-suite*|*audit-skills*|*engine*|*personas*|*claude-plugins*|*tmux-config*|*claude-code-settings*)
105
105
  local _installed_v=""
106
106
  [ -f "$OMEGA_HOME/Agentik_SSOT/VERSION" ] \
107
107
  && _installed_v="$(cat "$OMEGA_HOME/Agentik_SSOT/VERSION" 2>/dev/null || echo '')"
@@ -1112,27 +1112,74 @@ _disable_broken_claude_plugins() {
1112
1112
  esac
1113
1113
  # Disable if EITHER signal fires.
1114
1114
  if [ "$broken_by_content" = "1" ] || [ "$broken_by_version" = "1" ]; then
1115
- local disabled="${cm%/}.disabled-by-omegaos"
1116
- if [ ! -d "$disabled" ]; then
1117
- if mv "$cm" "$disabled" 2>/dev/null; then
1118
- local reason=""
1119
- [ "$broken_by_content" = "1" ] && reason="zod/v3 import"
1120
- [ "$broken_by_version" = "1" ] && reason="${reason:+$reason + }known-broken 13.x"
1121
- info " neutralized claude-mem $version_dir ($reason)"
1122
- info " SessionStart hook will no longer crash on \`claude\` start"
1123
- found=1
1124
- else
1125
- warn " could not disable claude-mem at $cm — manual: \`mv $cm $disabled\`"
1126
- fi
1115
+ # v0.19.56 — rm -rf wasn't enough either: Claude Code re-downloads
1116
+ # the plugin at startup if it's still registered in settings.json
1117
+ # / marketplaces.json. We MUST also remove the registration.
1118
+ if rm -rf "$cm" 2>/dev/null; then
1119
+ local reason=""
1120
+ [ "$broken_by_content" = "1" ] && reason="zod/v3 import"
1121
+ [ "$broken_by_version" = "1" ] && reason="${reason:+$reason + }known-broken 13.x"
1122
+ info " removed cache: claude-mem $version_dir ($reason)"
1123
+ found=1
1127
1124
  else
1128
- info " claude-mem $version_dir already neutralized"
1125
+ warn " could not remove $cm manual: \`rm -rf $cm\`"
1129
1126
  fi
1130
1127
  fi
1131
1128
  done
1129
+ # v0.19.56 — also unregister from Claude Code so it doesn't re-download.
1132
1130
  if [ "$found" = "1" ]; then
1133
- info " → re-enable later (when upstream ships zod 4 fix):"
1134
- info " mv ${cache_dir}/thedotmack/claude-mem.*.disabled-by-omegaos \\"
1135
- info " ${cache_dir}/thedotmack/claude-mem/<version>"
1131
+ # 1. Try the official `claude plugin disable` if claude binary is on PATH.
1132
+ if have claude; then
1133
+ claude plugin disable claude-mem 2>/dev/null \
1134
+ && info " unregistered: claude plugin disable claude-mem" \
1135
+ || true
1136
+ fi
1137
+ # 2. Surgically edit settings.json + marketplaces.json to remove
1138
+ # claude-mem entries (Claude Code reads these on every startup).
1139
+ python3 - "$HOME" <<'PY' || true
1140
+ import json, os, sys
1141
+ home = sys.argv[1]
1142
+ removed = []
1143
+ for rel in (".claude/settings.json", ".claude/plugins/marketplaces.json",
1144
+ ".claude/plugins/registry.json"):
1145
+ p = os.path.join(home, rel)
1146
+ if not os.path.isfile(p): continue
1147
+ try:
1148
+ with open(p) as f:
1149
+ data = json.load(f)
1150
+ except Exception:
1151
+ continue
1152
+ def strip(obj):
1153
+ if isinstance(obj, dict):
1154
+ for k in list(obj.keys()):
1155
+ v = obj[k]
1156
+ if isinstance(v, (str,)) and "claude-mem" in v.lower():
1157
+ obj.pop(k, None); removed.append(f"{rel}:{k}")
1158
+ elif isinstance(v, (dict, list)):
1159
+ strip(v)
1160
+ if "claude-mem" in k.lower():
1161
+ obj.pop(k, None); removed.append(f"{rel}:{k}")
1162
+ elif isinstance(obj, list):
1163
+ for item in obj[:]:
1164
+ if isinstance(item, str) and "claude-mem" in item.lower():
1165
+ obj.remove(item); removed.append(f"{rel}[]:{item[:30]}")
1166
+ elif isinstance(item, dict):
1167
+ strip(item)
1168
+ try:
1169
+ strip(data)
1170
+ with open(p, "w") as f:
1171
+ json.dump(data, f, indent=2); f.write("\n")
1172
+ except Exception:
1173
+ pass
1174
+ if removed:
1175
+ print(f" unregistered {len(removed)} claude-mem entries from claude config")
1176
+ PY
1177
+ # 3. Drop the do-not-reinstall marker for ourselves.
1178
+ mkdir -p "${HOME}/.claude/plugins" 2>/dev/null
1179
+ touch "${HOME}/.claude/plugins/.claude-mem-disabled-by-omegaos"
1180
+ info " → SessionStart hook will no longer crash"
1181
+ info " → re-install when upstream ships zod 4 fix:"
1182
+ info " claude plugin install claude-mem@thedotmack"
1136
1183
  fi
1137
1184
  return 0
1138
1185
  }
@@ -27,7 +27,7 @@ from __future__ import annotations
27
27
  import importlib
28
28
  from typing import Any
29
29
 
30
- __version__ = "0.19.54"
30
+ __version__ = "0.19.56"
31
31
 
32
32
  # Public-name → (module_path, attribute_name) map.
33
33
  # ``attribute_name = None`` means "return the whole module" (used for the
@@ -615,6 +615,19 @@ def _arrow_menu() -> int:
615
615
 
616
616
  items.append(("", "__sep__"))
617
617
 
618
+ # ── + NEW LLM SESSION ──────────────────────────────────────────
619
+ # v0.19.55 — direct access to every supported LLM CLI.
620
+ items.append((_section("+ NEW LLM SESSION"), "__sep__"))
621
+ items.append((_label("+ Claude Code", "Anthropic · Max OAuth"), "open:llm:claude_code"))
622
+ items.append((_label("+ Gemini CLI", "Google AI"), "open:llm:gemini_cli"))
623
+ items.append((_label("+ Codex", "OpenAI"), "open:llm:codex"))
624
+ items.append((_label("+ GLM", "Zhipu (zhipuai SDK)"), "open:llm:glm_sdk"))
625
+ items.append((_label("+ Qwen Code", "Alibaba"), "open:llm:qwen_code"))
626
+ items.append((_label("+ OpenCode", "multi-provider gateway"), "open:llm:opencode"))
627
+ items.append((_label("+ Aider", "AI pair programmer"), "open:llm:aider"))
628
+ items.append((_label("+ Continue.dev", "VS Code-style"), "open:llm:continue_dev"))
629
+ items.append(("", "__sep__"))
630
+
618
631
  # ── QUICK ACTIONS ───────────────────────────────────────────────
619
632
  items.append((_section("QUICK ACTIONS"), "__sep__"))
620
633
  items.append((_label("+ New AISB chat", "fresh session"), "open:aisb:new"))
@@ -665,6 +678,10 @@ def _arrow_menu() -> int:
665
678
  (_label("Accounts", "Claude Max pool"), "accounts:menu"),
666
679
  (_label("Vault", "encrypted secrets"), "vault:menu"),
667
680
  ("", "__sep__"),
681
+ # v0.19.55 — Telegram bot setup wizard.
682
+ (_label("Telegram bot", "configure bot token + webhook"), "telegram:setup"),
683
+ (_label("Hermès API key", "set ANTHROPIC_API_KEY_HERMES"), "hermes:setkey"),
684
+ ("", "__sep__"),
668
685
  (_label("← back"), "back"),
669
686
  ]
670
687
  if name == "infra":
@@ -895,6 +912,42 @@ def _arrow_menu() -> int:
895
912
  if audit_id:
896
913
  _run_inline([OMEGA_BIN, "audit", audit_id])
897
914
  continue
915
+ # v0.19.55 — generic LLM spawn: open:llm:<cli_id>
916
+ if action.startswith("open:llm:"):
917
+ llm_id = action.split(":", 2)[2]
918
+ # Map LLM id → bin name (matches bootstrap/lib/llm-clis.py catalog)
919
+ _LLM_BIN = {
920
+ "claude_code": "claude", "gemini_cli": "gemini",
921
+ "codex": "codex", "glm_sdk": "python3 -c 'import zhipuai'",
922
+ "qwen_code": "qwen", "opencode": "opencode",
923
+ "aider": "aider", "continue_dev": "cn",
924
+ }
925
+ bin_cmd = _LLM_BIN.get(llm_id, llm_id)
926
+ if not shutil.which(bin_cmd.split()[0]):
927
+ _run_inline(
928
+ f"echo ' {llm_id} ({bin_cmd}) not installed. Run:' && "
929
+ f"echo ' {OMEGA_BIN} tool install {llm_id}'",
930
+ shell=True,
931
+ )
932
+ continue
933
+ # Spawn as Omega window with the CLI's persona context dir.
934
+ persona = HOME / "Agentik_SSOT" / "agents" / "aisb" / "CLAUDE.md"
935
+ ctx_dir = tmux._ensure_chat_context_dir(HOME, llm_id, persona)
936
+ tmux.spawn_chat_in_omega(
937
+ llm_id, ctx_dir=ctx_dir, run_command=bin_cmd,
938
+ force_replace=False,
939
+ )
940
+ subprocess.run(["tmux", "select-window", "-t", f"Omega:{llm_id}"])
941
+ continue
942
+ if action == "telegram:setup":
943
+ _run_inline([OMEGA_BIN, "telegram", "setup"])
944
+ continue
945
+ if action == "hermes:setkey":
946
+ key = _prompt("ANTHROPIC_API_KEY_HERMES (sk-ant-…)")
947
+ if key:
948
+ _run_inline([OMEGA_BIN, "vault", "write",
949
+ "ANTHROPIC_API_KEY_HERMES", key])
950
+ continue
898
951
  # (v0.19.31 open:aisb / open:hermes legacy handlers removed in
899
952
  # v0.19.39 — the new unified handlers above (which accept both
900
953
  # plain and `:new` variants) cover the same surface.)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "omega-engine"
3
- version = "0.19.54"
3
+ version = "0.19.56"
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.54
1
+ 0.19.56
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentikos/omega-os",
3
- "version": "0.19.54",
3
+ "version": "0.19.56",
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"