@agentikos/omega-os 0.19.49 → 0.19.51

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.49"
191
+ __version__ = "0.19.51"
192
192
 
193
193
  __all__ = [
194
194
  "__version__",
@@ -429,10 +429,23 @@ def _arrow_menu() -> int:
429
429
  import shlex
430
430
  import shutil
431
431
  import subprocess
432
+ import sys as _sys
432
433
  from pathlib import Path
433
434
  from omega_engine import __version__
434
435
  from omega_engine import tmux
435
436
 
437
+ # v0.19.51 — IMMEDIATE visual feedback. The user (correctly) Ctrl-C'd
438
+ # every previous version because typing `omega` produced NO output
439
+ # for the 200-500ms it took fzf to start. Print a one-line ANSI
440
+ # banner FIRST so the operator sees something the moment they hit
441
+ # Enter — proves the command is running.
442
+ _ORANGE = "\033[38;5;137m"
443
+ _BOLD = "\033[1m"
444
+ _RST = "\033[0m"
445
+ _sys.stdout.write(f"\n {_ORANGE}{_BOLD}Ω Omega OS v{__version__}{_RST}"
446
+ f" · loading menu…\n")
447
+ _sys.stdout.flush()
448
+
436
449
  if not shutil.which("fzf"):
437
450
  print(" fzf not on PATH — falling back to slash REPL.")
438
451
  print(" install: brew install fzf (or apt install fzf)")
@@ -528,11 +541,17 @@ def _arrow_menu() -> int:
528
541
  3. MENU — sub-menus (audits, setup, infra, health)
529
542
  4. EXIT
530
543
  """
544
+ # v0.19.50 — DO NOT call tmux during menu render. Tmux probes
545
+ # were hanging on macOS during server initialization (cold-start
546
+ # tmux client → server fork → config load → potentially slow on
547
+ # APFS). The user pressed Ctrl-C every time. Render the menu
548
+ # IMMEDIATELY with no status dots, then actions can probe tmux
549
+ # if needed (after the user picks one).
531
550
  provider = _active_provider()
532
- aisb_alive = tmux.omega_window_alive("aisb")
533
- hermes_alive = tmux.omega_window_alive("hermes")
534
- oracles, workers = _active_oracles_and_workers()
535
- paperclip_alive, paperclip_hint = _paperclip_status_quick()
551
+ aisb_alive = False # rendered as ○ until user opens; cheap
552
+ hermes_alive = False
553
+ oracles, workers = [], []
554
+ paperclip_alive, paperclip_hint = False, ""
536
555
 
537
556
  items: list[tuple[str, str]] = []
538
557
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "omega-engine"
3
- version = "0.19.49"
3
+ version = "0.19.51"
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"
@@ -245,28 +245,49 @@ class TestChatFirstRedesign(unittest.TestCase):
245
245
  "switch-client" in src or "select-window" in src,
246
246
  "attach handler must use tmux select-window / switch-client")
247
247
 
248
- def test_omega_window_alive_helper_used(self):
249
- """The TUI status dots for AISB / Hermès rely on the
250
- tmux.omega_window_alive() helper added in v0.19.39 — without it
251
- we have no way to know if those windows are running."""
248
+ def test_menu_does_not_call_tmux_during_render(self):
249
+ """v0.19.50 RENAMED from test_omega_window_alive_helper_used.
250
+
251
+ Previously the menu called tmux.omega_window_alive() on every
252
+ render to set the ●/○ status dots. On macOS this hung for many
253
+ seconds during cold-start tmux server initialization, and the
254
+ user Ctrl-C'd every time. v0.19.50 removes those probes — the
255
+ menu MUST render instantly with no tmux calls."""
252
256
  import inspect
253
257
  from omega_engine.tui import _arrow_menu
254
258
  src = inspect.getsource(_arrow_menu)
255
- self.assertIn("omega_window_alive", src,
256
- "menu must call tmux.omega_window_alive() to render the "
259
+ # Look at the _build_items function specifically — that's the
260
+ # hot path called on every render.
261
+ m_start = src.find("def _build_items")
262
+ self.assertGreater(m_start, 0, "_build_items function must exist")
263
+ m_end = src.find("def ", m_start + 10) # next def OR end
264
+ body = src[m_start:m_end if m_end > 0 else len(src)]
265
+ # CRITICAL: no synchronous tmux calls in the render hot path.
266
+ for forbidden in ("tmux.omega_window_alive",
267
+ "tmux.list_sessions",
268
+ "_active_oracles_and_workers()"):
269
+ self.assertNotIn(forbidden, body,
270
+ f"_build_items MUST NOT call {forbidden} — it hangs the "
271
+ f"menu on cold-start tmux. v0.19.50 removed it for "
272
+ "instant render.")
273
+ # Belt-and-suspenders: the existing helper still exists in the
274
+ # tmux module (some other code path may call it), just not
275
+ # during menu render.
276
+ from omega_engine.tmux import omega_window_alive
277
+ self.assertTrue(callable(omega_window_alive),
278
+ "tmux.omega_window_alive must remain callable (used "
257
279
  "AISB / Hermès status dots")
258
280
 
259
- def test_paperclip_status_dot_inline_in_main_menu(self):
260
- """The Paperclip dashboard row in QUICK ACTIONS must show a
261
- live status dot the user must see at-a-glance whether the
262
- Paperclip daemon is running."""
281
+ def test_paperclip_dashboard_entry_in_main_menu(self):
282
+ """v0.19.50 paperclip dashboard entry must exist in the menu.
283
+ The status dot has been removed (it was a sync probe that could
284
+ hang) replaced with a fixed ○ that becomes ● only after the
285
+ user picks the action and we know paperclip is up."""
263
286
  import inspect
264
287
  from omega_engine.tui import _arrow_menu
265
288
  src = inspect.getsource(_arrow_menu)
266
- self.assertIn("_paperclip_status_quick", src,
267
- "menu must use the inline Paperclip probe to render its dot")
268
- # Must integrate the new chantier-4 is_running() probe.
269
- self.assertIn("paperclip_bridge", src)
289
+ self.assertIn("paperclip:dashboard", src,
290
+ "menu must wire paperclip:dashboard as an action key")
270
291
 
271
292
 
272
293
  class TestPixelPalette(unittest.TestCase):
@@ -1 +1 @@
1
- 0.19.49
1
+ 0.19.51
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentikos/omega-os",
3
- "version": "0.19.49",
3
+ "version": "0.19.51",
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"