@agentikos/omega-os 0.19.31 → 0.19.32

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.
@@ -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.31"
191
+ __version__ = "0.19.32"
192
192
 
193
193
  __all__ = [
194
194
  "__version__",
@@ -2606,6 +2606,88 @@ def cmd_tmux(args: argparse.Namespace) -> int:
2606
2606
  print(f"no such session: {args.name}")
2607
2607
  return 1
2608
2608
 
2609
+ if sub == "switcher":
2610
+ # v0.19.32 — fzf-based tmux session picker.
2611
+ # Bound to Option+/ in the pro tmux config. Lists ALL live
2612
+ # tmux sessions (Omega, AISB-chat, Hermes-chat, per-project
2613
+ # oracles, workers, ...) with metadata, lets the user pick
2614
+ # one, and switches the client to it.
2615
+ import shlex, shutil, subprocess
2616
+ from omega_engine import __version__
2617
+ if not shutil.which("fzf"):
2618
+ print(" fzf not on PATH — install `brew install fzf` "
2619
+ "or `apt install fzf`")
2620
+ return 2
2621
+ sessions = tmux.list_sessions(home)
2622
+ if not sessions:
2623
+ print(" no tmux sessions yet — type `omega` to spawn the master")
2624
+ return 0
2625
+ sessions.sort(key=lambda s: -int(s.created))
2626
+
2627
+ def _age(ts: int) -> str:
2628
+ import time as _t
2629
+ delta = max(0, int(_t.time()) - int(ts))
2630
+ if delta < 60: return "now"
2631
+ if delta < 3600: return f"{delta // 60}m"
2632
+ if delta < 86400: return f"{delta // 3600}h"
2633
+ return f"{delta // 86400}d"
2634
+
2635
+ ORANGE = "\033[38;2;217;119;87m"
2636
+ MUTED = "\033[38;2;136;131;122m"
2637
+ BOLD = "\033[1m"
2638
+ DIM = "\033[2m"
2639
+ RST = "\033[0m"
2640
+
2641
+ lines = []
2642
+ keys = []
2643
+ for s in sessions:
2644
+ mark = f"{ORANGE}▶{RST}" if s.attached else " "
2645
+ project = f"[{s.project}]" if s.project else ""
2646
+ line = (
2647
+ f" {mark} {BOLD}{s.name:<32}{RST} "
2648
+ f"{DIM}{s.category:<10}{RST} "
2649
+ f"{MUTED}{s.windows}w {_age(s.created):<5}{RST} "
2650
+ f"{DIM}{project}{RST}"
2651
+ )
2652
+ lines.append(line)
2653
+ keys.append(s.name)
2654
+
2655
+ header = (
2656
+ f"{ORANGE}{BOLD}Ω Sessions{RST} "
2657
+ f"{MUTED}• ↑↓ navigate • ↵ switch-client • Esc cancel{RST}"
2658
+ )
2659
+ try:
2660
+ proc = subprocess.run(
2661
+ ["fzf", "--ansi", "--no-multi",
2662
+ "--prompt=session › ",
2663
+ f"--header={header}",
2664
+ "--header-first",
2665
+ "--layout=reverse",
2666
+ "--height=60%",
2667
+ "--border=rounded",
2668
+ "--padding=1,2",
2669
+ "--info=hidden",
2670
+ "--pointer=▶",
2671
+ "--color="
2672
+ "bg:#FAFAF7,fg:#3D3929,"
2673
+ "bg+:#E5E2DD,fg+:#D97757,"
2674
+ "hl:#D97757,hl+:#D97757,"
2675
+ "prompt:#D97757,pointer:#D97757,"
2676
+ "header:#88837A,border:#A8A29E,info:#88837A,"
2677
+ "gutter:#FAFAF7"],
2678
+ input="\n".join(lines), capture_output=True, text=True,
2679
+ )
2680
+ except (KeyboardInterrupt, subprocess.SubprocessError):
2681
+ return 0
2682
+ if proc.returncode != 0:
2683
+ return 0
2684
+ pick = proc.stdout.rstrip("\n")
2685
+ for line, name in zip(lines, keys):
2686
+ if line == pick:
2687
+ subprocess.run(["tmux", "switch-client", "-t", name])
2688
+ return 0
2689
+ return 0
2690
+
2609
2691
  if sub == "spawn":
2610
2692
  kind = args.kind
2611
2693
  name = args.name
@@ -4510,6 +4592,9 @@ def _build_parser() -> argparse.ArgumentParser:
4510
4592
  p_tcl.add_argument("--yes", action="store_true",
4511
4593
  help="apply (default is dry-run)")
4512
4594
  tx_sub.add_parser("menu", help="interactive whiptail picker (use under tmux for prefix+Z)")
4595
+ tx_sub.add_parser("switcher",
4596
+ help="fzf session switcher — list all live tmux sessions and "
4597
+ "switch-client to one (bound to Option+/ in the pro config)")
4513
4598
  p_tcfg = tx_sub.add_parser("config",
4514
4599
  help="write the recommended tmux.conf to Agentik_Tools/")
4515
4600
  p_tcfg.add_argument("--profile", choices=["minimal", "pro"],
@@ -572,9 +572,10 @@ bind-key Z display-popup -E -w 80% -h 80% "omega tmux menu"
572
572
  # Prefix+S — native session list (tmux's built-in choose-tree)
573
573
  bind-key S choose-tree -Zs
574
574
 
575
- # Open the Omega menu from anywhere in tmux (Option+/ or Option+z).
575
+ # Option+/ session switcher (fzf popup, pick any live tmux session)
576
+ # Option+z → Omega action menu (spawn Omega if missing + switch-client)
576
577
  # macOS Option key → enable "Use Option as Meta" in your terminal.
577
- bind-key -n M-/ run-shell -b "tmux has-session -t Omega 2>/dev/null || tmux new-session -d -s Omega -n menu -c $HOME 'omega menu-tui'; tmux switch-client -t Omega"
578
+ bind-key -n M-/ display-popup -E -h 80% -w 90% "omega tmux switcher"
578
579
  bind-key -n M-z run-shell -b "tmux has-session -t Omega 2>/dev/null || tmux new-session -d -s Omega -n menu -c $HOME 'omega menu-tui'; tmux switch-client -t Omega"
579
580
 
580
581
  # ════════════════════════════════════════════════════════════════════
@@ -686,7 +687,14 @@ bind-key r source-file ~/.tmux.conf \\; display-message "tmux.conf reloaded"
686
687
  # IMPORTANT — for Option key to work on macOS terminals, enable
687
688
  # "Use Option as Meta key" (iTerm2: Profile → Keys → Left/Right Option
688
689
  # Key → Esc+). Otherwise the binding stays inactive.
689
- bind-key -n M-/ run-shell -b "tmux has-session -t Omega 2>/dev/null || tmux new-session -d -s Omega -n menu -c $HOME 'omega menu-tui'; tmux switch-client -t Omega"
690
+ # ────────────────────────────────────────────────────────────────────
691
+ # Option+/ → SESSION SWITCHER (fzf — pick any live tmux session)
692
+ # Option+z → OMEGA ACTION MENU (the v0.19.30 fzf menu of actions)
693
+ # ────────────────────────────────────────────────────────────────────
694
+ # popup -E runs the command in a tmux popup overlay (modal). The popup
695
+ # closes when the command exits, returning the user to their previous
696
+ # pane. -h 80% / -w 90% sizes the popup.
697
+ bind-key -n M-/ display-popup -E -h 80% -w 90% "omega tmux switcher"
690
698
  bind-key -n M-z run-shell -b "tmux has-session -t Omega 2>/dev/null || tmux new-session -d -s Omega -n menu -c $HOME 'omega menu-tui'; tmux switch-client -t Omega"
691
699
 
692
700
  # ════════════════════════════════════════════════════════════════════
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "omega-engine"
3
- version = "0.19.31"
3
+ version = "0.19.32"
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.31
1
+ 0.19.32
@@ -53,11 +53,18 @@ catalog:
53
53
 
54
54
  - id: claude-mem
55
55
  name: claude-mem
56
- description: "Long-term memory + observation system across sessions"
56
+ description: |
57
+ Long-term memory + observation system across sessions.
58
+ KNOWN ISSUE (2026-05-25): claude-mem 13.3.0 ships a stop-hook
59
+ worker-service.cjs that imports `zod/v3` (doesn't exist in zod 4+).
60
+ Under Bun the hook crashes with "Cannot find module 'zod/v3'". The
61
+ plugin still installs — only the stop hook breaks.
62
+ Marked opt-in until upstream fixes. Install manually with:
63
+ claude plugin install claude-mem@thedotmack
57
64
  category: memory
58
65
  marketplace: thedotmack
59
66
  scope: user
60
- recommended: true
67
+ recommended: false
61
68
 
62
69
  - id: frontend-design
63
70
  name: frontend-design
@@ -76,11 +76,21 @@ native:
76
76
 
77
77
  - id: paperclipai
78
78
  name: Paperclip (orchestration UI — agent teams, org charts, governance)
79
- # Node.js + React app from paperclipai/paperclip. Coordinates multiple
80
- # agents (Claude Code, Codex, Cursor, OpenClaw) into teams with org
81
- # charts, budgets, governance. Launches a web dashboard + CLI tools.
82
- # We use the `onboard` npx flow which handles install + initial config.
83
- # Requires Node 20+, pnpm 9.15+ (both checked by step_system_deps).
79
+ # Node.js + React app from paperclipai/paperclip.
80
+ #
81
+ # STATUS (v0.19.32) honest disclosure:
82
+ # - The binary installs cleanly (`npx -y paperclipai onboard --yes`).
83
+ # - There is NO native OmegaOS↔Paperclip bridge yet. Paperclip's
84
+ # own docs list Claude Code, Codex, Cursor, OpenClaw — Hermès is
85
+ # NOT in their supported-agents list, and OmegaOS isn't either.
86
+ # - To make Paperclip "understand" our agents I'd need to:
87
+ # a) Write a Paperclip agent profile pointing at omega's
88
+ # claude/hermes subprocess invocations
89
+ # b) Add a heartbeat sender from our tmux sessions
90
+ # c) Map Paperclip's org-chart concepts to our 4-level model
91
+ # That's real work, scheduled for v0.20.x — not done yet.
92
+ # For now: install it if you want the standalone Paperclip UI, but
93
+ # treat it as a parallel system, not an OmegaOS bridge.
84
94
  install: { npm_global: "paperclipai" }
85
95
  binary: paperclip
86
96
  secrets: []
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentikos/omega-os",
3
- "version": "0.19.31",
3
+ "version": "0.19.32",
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"