@agentikos/omega-os 0.19.27 → 0.19.29

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.27"
191
+ __version__ = "0.19.29"
192
192
 
193
193
  __all__ = [
194
194
  "__version__",
@@ -2855,19 +2855,20 @@ def cmd_menu(_args: argparse.Namespace) -> int:
2855
2855
  return 0
2856
2856
 
2857
2857
 
2858
- def cmd_menu_tui(_args: argparse.Namespace) -> int:
2859
- """`omega menu-tui` — the OmegaOS Textual TUI (v0.19.27+).
2858
+ def cmd_menu_tui(args: argparse.Namespace) -> int:
2859
+ """`omega menu-tui` — slash-command REPL (default) or Textual TUI.
2860
2860
 
2861
- Modern boxed-layout TUI with slash commands (Hermès-style), sidebar
2862
- categories, scrollable content log, footer keybindings. Falls back
2863
- to a plain slash REPL if `textual` isn't installed (e.g. headless
2864
- or before the engine venv finishes installing deps).
2861
+ v0.19.29 default = plain REPL. Textual was unreliable under
2862
+ tmux + send-keys (focus didn't reach the input). The REPL uses
2863
+ synchronous input() which works EVERYWHERE, plus readline for
2864
+ history + tab completion of slash commands.
2865
2865
 
2866
- Delegates to `omega_engine.tui.run_tui()` which encapsulates both
2867
- the Textual app and the plain REPL fallback.
2866
+ Opt into Textual: `omega menu-tui --textual` (useful when running
2867
+ omega directly in iTerm/Wezterm/Kitty without tmux send-keys).
2868
2868
  """
2869
2869
  from omega_engine.tui import run_tui
2870
- return run_tui()
2870
+ prefer_textual = getattr(args, "textual", False)
2871
+ return run_tui(prefer_textual=prefer_textual)
2871
2872
 
2872
2873
 
2873
2874
  def _legacy_fzf_menu(_args: argparse.Namespace) -> int:
@@ -4343,10 +4344,12 @@ def _build_parser() -> argparse.ArgumentParser:
4343
4344
  sub.add_parser("menu",
4344
4345
  help="open the interactive whiptail menu (legacy)"
4345
4346
  ).set_defaults(fn=cmd_menu_whiptail)
4346
- sub.add_parser("menu-tui",
4347
- help="the Textual TUI inside the Omega tmux session "
4348
- "(don't call directly — bare `omega` lands you here)"
4349
- ).set_defaults(fn=cmd_menu_tui)
4347
+ p_mt = sub.add_parser("menu-tui",
4348
+ help="slash-command REPL (default) use --textual for the "
4349
+ "fancier (but tmux-fragile) Textual TUI")
4350
+ p_mt.add_argument("--textual", action="store_true",
4351
+ help="try the Textual app instead of the REPL")
4352
+ p_mt.set_defaults(fn=cmd_menu_tui)
4350
4353
  sub.add_parser("menu-fzf",
4351
4354
  help="legacy v0.19.26 fzf menu fallback"
4352
4355
  ).set_defaults(fn=_legacy_fzf_menu)
@@ -533,9 +533,9 @@ bind-key S choose-tree -Zs
533
533
  # ════════════════════════════════════════════════════════════════════
534
534
  # Visual cues per session category
535
535
  # ════════════════════════════════════════════════════════════════════
536
- set -g status-style "bg=#1a1a2e,fg=#eee"
536
+ set -g status-style "bg=#1a1a2e,fg=#eeeeee"
537
537
  set -g status-left "#[fg=#7aa2f7,bold]#S #[fg=default]│ "
538
- set -g status-right "#[fg=#888]%H:%M │ #(omega tmux count 2>/dev/null) sessions"
538
+ set -g status-right "#[fg=#888888]%H:%M │ #(omega tmux count 2>/dev/null) sessions"
539
539
  """
540
540
 
541
541
 
@@ -625,15 +625,15 @@ bind-key r source-file ~/.tmux.conf \\; display-message "tmux.conf reloaded"
625
625
  # ════════════════════════════════════════════════════════════════════
626
626
  # Visual cues per session category — colour the status bar by name.
627
627
  # ════════════════════════════════════════════════════════════════════
628
- set -g status-style "bg=#1a1a2e,fg=#eee"
628
+ set -g status-style "bg=#1a1a2e,fg=#eeeeee"
629
629
  set -g status-left "#[fg=#7aa2f7,bold]#S #[fg=default]│ "
630
- set -g status-right "#[fg=#888]%H:%M │ #(omega tmux count 2>/dev/null) sessions"
630
+ set -g status-right "#[fg=#888888]%H:%M │ #(omega tmux count 2>/dev/null) sessions"
631
631
  set -g status-interval 5
632
632
  set -g status-left-length 40
633
633
  set -g status-right-length 60
634
634
 
635
635
  # Pane border colour — softer than default red
636
- set -g pane-border-style "fg=#333"
636
+ set -g pane-border-style "fg=#333333"
637
637
  set -g pane-active-border-style "fg=#7aa2f7"
638
638
  """
639
639
 
@@ -409,17 +409,34 @@ if TEXTUAL_AVAILABLE:
409
409
  _switch_client(res.session_jump)
410
410
 
411
411
 
412
- def run_tui() -> int:
413
- """Entry point — `omega menu-tui` calls this."""
414
- if not TEXTUAL_AVAILABLE:
415
- print(" textual not installed `omega upgrade` or run:")
416
- print(" pip install textual")
417
- print()
418
- print(" Falling back to plain prompt mode.")
419
- return _plain_repl()
420
- app = OmegaTUI()
421
- app.run()
422
- return 0
412
+ def run_tui(prefer_textual: bool = False) -> int:
413
+ """Entry point — `omega menu-tui` calls this.
414
+
415
+ v0.19.29 switched the DEFAULT to the plain slash REPL because the
416
+ Textual app, while pretty, has unreliable focus/keyboard delivery
417
+ inside tmux panes launched via send-keys. The user's bug report
418
+ ("je peux pas taper dans le keyboard ni sélectionner") was reproducible
419
+ on the VPS too — Textual's Input widget doesn't always claim focus
420
+ when the app starts under tmux + send-keys.
421
+
422
+ The plain REPL uses synchronous `input()` which is rock-solid in any
423
+ terminal, any tmux config, any TERM value. It accepts the SAME slash
424
+ commands (/aisb /hermes /switch /audit /mission /scrape /doctor …).
425
+
426
+ Opt back into Textual via `omega menu-tui --textual` (or pass
427
+ prefer_textual=True from code) — useful when iTerm/Wezterm/Kitty
428
+ runs the menu directly without tmux send-keys interference.
429
+ """
430
+ if prefer_textual and TEXTUAL_AVAILABLE:
431
+ try:
432
+ app = OmegaTUI()
433
+ app.run()
434
+ return 0
435
+ except Exception as exc: # noqa: BLE001
436
+ print(f" Textual TUI failed: {exc}")
437
+ print(" Falling back to plain REPL.")
438
+ return _plain_repl()
439
+ return _plain_repl()
423
440
 
424
441
 
425
442
  # ---------------------------------------------------------------------------
@@ -428,15 +445,73 @@ def run_tui() -> int:
428
445
 
429
446
 
430
447
  def _plain_repl() -> int:
431
- """Slash-command REPL with no textual TUI same command set."""
448
+ """Slash-command REPL the v0.19.29 default for `omega menu-tui`.
449
+
450
+ Rock-solid input via Python's stdlib `input()` — works in any
451
+ terminal, any tmux setup, any TERM value. Same slash command set
452
+ as the Textual app. readline gives history (↑/↓), basic line
453
+ editing, Ctrl-r reverse search.
454
+ """
455
+ import os
432
456
  from omega_engine import __version__
433
- print(f"\n Ω Omega OS v{__version__} — plain REPL mode")
434
- print(" Type /help for commands, /quit to exit.\n")
457
+
458
+ # readline gives line editing + history. Persist history under $OMEGA_HOME.
459
+ try:
460
+ import readline
461
+ hist_path = os.path.join(
462
+ os.environ.get("OMEGA_HOME", os.path.expanduser("~/Omega")),
463
+ "Agentik_Extra", "var", "omega-repl-history",
464
+ )
465
+ try:
466
+ os.makedirs(os.path.dirname(hist_path), exist_ok=True)
467
+ if os.path.exists(hist_path):
468
+ readline.read_history_file(hist_path)
469
+ except OSError:
470
+ hist_path = None
471
+ readline.set_history_length(500)
472
+ # Tab-completion over known slash commands.
473
+ _COMMANDS = [
474
+ "/help", "/aisb", "/hermes", "/switch", "/mission", "/audit",
475
+ "/genesis", "/scrape", "/sessions", "/accounts", "/vault",
476
+ "/doctor", "/status", "/detach", "/quit",
477
+ ]
478
+ def _completer(text: str, state: int) -> str | None:
479
+ matches = [c for c in _COMMANDS if c.startswith(text)]
480
+ return matches[state] if state < len(matches) else None
481
+ readline.set_completer(_completer)
482
+ readline.parse_and_bind("tab: complete")
483
+ except ImportError:
484
+ hist_path = None
485
+
486
+ # Banner — boxed, orange Ω like Hermès's launch screen.
487
+ print()
488
+ print(" ┌─────────────────────────────────────────────────────────┐")
489
+ print(f" │ \033[38;2;217;119;87m\033[1mΩ\033[0m \033[1mOmega OS\033[0m v{__version__:<10} │")
490
+ print( " │ type \033[1m/help\033[0m for slash commands • \033[1m/quit\033[0m to exit │")
491
+ print( " ├─────────────────────────────────────────────────────────┤")
492
+ print( " │ quick start: │")
493
+ print( " │ \033[1m/aisb\033[0m chat with AISB (Max OAuth) │")
494
+ print( " │ \033[1m/hermes\033[0m chat with Hermès (Anthropic API) │")
495
+ print( " │ \033[1m/switch\033[0m see + hot-swap LLM provider │")
496
+ print( " │ \033[1m/mission \"...\"\033[0m run verified-completion mission │")
497
+ print( " │ \033[1m/scrape <url>\033[0m stealth scrape (CloakBrowser) │")
498
+ print( " │ \033[1m/audit <id>\033[0m run a Quality Arsenal audit │")
499
+ print( " │ \033[1m/doctor\033[0m full health check │")
500
+ print( " └─────────────────────────────────────────────────────────┘")
501
+ print()
502
+ print(" TAB completes slash commands • ↑/↓ for history\n")
503
+
504
+ PROMPT = " \033[38;2;217;119;87mΩ\033[0m › "
435
505
  while True:
436
506
  try:
437
- line = input(" Ω › ").strip()
507
+ line = input(PROMPT).strip()
438
508
  except (EOFError, KeyboardInterrupt):
439
509
  print()
510
+ if hist_path:
511
+ try:
512
+ readline.write_history_file(hist_path)
513
+ except OSError:
514
+ pass
440
515
  return 0
441
516
  if not line:
442
517
  continue
@@ -455,3 +530,8 @@ def _plain_repl() -> int:
455
530
  print()
456
531
  if res.session_jump:
457
532
  _switch_client(res.session_jump)
533
+ if hist_path:
534
+ try:
535
+ readline.write_history_file(hist_path)
536
+ except OSError:
537
+ pass
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "omega-engine"
3
- version = "0.19.27"
3
+ version = "0.19.29"
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.27
1
+ 0.19.29
@@ -0,0 +1,350 @@
1
+ # OmegaOS — Audit Avant/Après (v0.19.27)
2
+
3
+ > Rapport d'audit profond comparant le **système VPS live** (Agentik OS
4
+ > historique tournant chez Gareth depuis ~14 mois) au **package OmegaOS
5
+ > v0.19.27** (la refonte distribuable au public).
6
+ >
7
+ > Méthode : inventaire en parallèle des deux côtés, mapping fonctionnel,
8
+ > identification des écarts (préservé / adapté / manquant / nouveau),
9
+ > tests fonctionnels + vérification logique de l'architecture.
10
+
11
+ ---
12
+
13
+ ## 1. Comparaison quantitative
14
+
15
+ | Surface | VPS live | OmegaOS v0.19.27 | Notes |
16
+ |---|---:|---:|---|
17
+ | Rules globales (~/.claude/rules/) | 15 | 0 + 3 lois embarquées | Rules condensées dans `personas/OMEGAOS-CONTEXT.md` |
18
+ | Agents | 61 | 13 AISB + 8 Genesis | Le suite AISB est ce qui compte; le reste = noise sur le VPS |
19
+ | Commands / Skills | 142 / 134 | 33 SSOT skills + 18 audits YAML | Refonte : les 17 audits + orchestrators = canon |
20
+ | ~/.aisb/lib scripts | 200 .sh/.py | Engine Python: 60 modules | Refonte : engine remplace les bash scripts ad-hoc |
21
+ | Cron entries | 39 | 1 launchd + autonomous charters | Refonte : systemd/launchd units canoniques + charters YAML |
22
+ | Systemd services | 4 (aisb-bot, reactor, session-tracker, webhook-bridge) | 3 launchd plists (engine, telegram, autonomous) | Réduit à l'essentiel |
23
+ | LLM CLIs disponibles | claude only (officiel) | 13 (Claude/Gemini/Codex/OpenCode/Qwen/Continue/Ollama/LM Studio/Aider/GLM/Copilot + provider configs pour 16 backends) | **Refonte massive** |
24
+ | Scrapers | aucun officiel | CloakBrowser (default) + Scrapling (opt-in) | **Nouveau** |
25
+ | Stacks Genesis | n/a (oracle = pure live) | 8 presets canoniques | **Nouveau** |
26
+ | Persona system | ad-hoc CLAUDE.md éparpillés | 1 canonical → mirroré dans 10 LLM filenames | **Nouveau** |
27
+ | TUI / Menu | tmux-claude session manager popup | Textual app (Hermès-style) + fzf fallback + plain REPL | **Nouveau** |
28
+ | Tests automatisés | 0 officiel | **599 tests** (pytest) | **Refonte qualité** |
29
+
30
+ ---
31
+
32
+ ## 2. Mapping fonctionnel — où vit quoi maintenant
33
+
34
+ ### Côté Live VPS (ce qu'on avait)
35
+
36
+ ```
37
+ ~/.claude/ ← Claude Code config + custom commands
38
+ ├── rules/ ← 15 .md "lois" globales
39
+ ├── agents/ ← 61 specialist personas
40
+ ├── commands/ ← 142 slash command files
41
+ ├── skills/ ← 134 skill files
42
+ └── settings.json ← Agent Teams flag, hooks
43
+
44
+ ~/.aisb/ ← AISB orchestration state
45
+ ├── lib/ ← 200 bash + python scripts ad-hoc
46
+ ├── secrets/ ← integrations.env (plain)
47
+ ├── state/ ← oracle/worker .done.json + briefs
48
+ ├── locks/ ← per-project ship locks
49
+ ├── docs/ ← ARCHITECTURE / ORCHESTRATION / CLOUD
50
+ └── heartbeats/ ← keep-alive markers
51
+
52
+ ~/VibeCoding/agentic/agentik-monitor/
53
+ ├── telegram-bot/ ← bot Python (single token)
54
+ ├── bot/ ← SOUL.md + MEMORY.md
55
+ ├── dashboard/ ← Next.js dashboard (separate)
56
+ └── mcp-server/ ← MCP integration
57
+ ```
58
+
59
+ ### Côté OmegaOS package (ce qu'on distribue)
60
+
61
+ ```
62
+ omega/
63
+ ├── Agentik_Engine/ ← LE MOTEUR (60 modules Python)
64
+ │ └── omega_engine/
65
+ │ ├── cli.py ← entry point — 70+ subcommands
66
+ │ ├── tui.py ← Textual app + slash dispatcher [NEW v0.19.27]
67
+ │ ├── tmux.py ← spawn AISB/Hermes/Omega/Oracle/Worker
68
+ │ ├── personas.py ← canonical OmegaOS context for 10 LLMs [NEW v0.19.22]
69
+ │ ├── genesis/ ← 8 stack presets + PHASES pipeline
70
+ │ ├── audits/ ← 18 audit YAML → SKILL.md generator
71
+ │ ├── hermes.py + hermes_*.py ← L2 companion bridge
72
+ │ ├── aisb_chat.py ← chat_once() + run_chat_loop()
73
+ │ ├── plan.py ← FSM-enforced multi-day planner
74
+ │ ├── pursue.py ← native /goal replacement
75
+ │ ├── vault.py ← age-encrypted secrets
76
+ │ ├── webhooks.py ← HMAC-signed inbound triggers
77
+ │ └── 50+ more...
78
+
79
+ ├── Agentik_SSOT/ ← source-of-truth (operator-editable)
80
+ │ ├── skills/ ← 33 skills (17 audits + orchestrators + scrape + switch)
81
+ │ ├── audits/*.yaml ← 18 audit definitions
82
+ │ ├── agents/aisb/ ← (populated at install from bootstrap/templates/aisb)
83
+ │ ├── personas/ ← (populated at install — canonical OMEGAOS-CONTEXT.md)
84
+ │ ├── clis/clis-catalog.yaml ← 27 system CLIs (incl. CloakBrowser + Scrapling) [NEW]
85
+ │ ├── llm-providers/providers-catalog.yaml ← 16 LLM providers (Anthropic/OpenAI/Gemini/GLM/DeepSeek/Qwen/Ollama/LM Studio/OpenRouter/Bedrock/Mistral/xAI/Vercel Gateway/Copilot/OpenAI-compat/ChatGPT sub) [NEW v0.19.23]
86
+ │ ├── mcp/mcp-catalog.yaml ← 16 MCPs (LEGACY — opt-in only since v0.19.21)
87
+ │ ├── claude-plugins/ ← 15 plugins (incl. superpowers, claude-mem, document-skills)
88
+ │ └── docs/ ← LAYERS.md (4-level archi) + USER-JOURNEY.md + this audit
89
+
90
+ ├── Agentik_Orchestration/
91
+ │ ├── topologies/aisb-oracle-worker.yaml
92
+ │ ├── autonomous/ ← cron-driven charters YAML
93
+ │ └── educators/ ← self-improvement loops
94
+
95
+ ├── Agentik_Coding/projects/<slug>/ ← strict per-project isolation
96
+ ├── Agentik_Providers/ ← (claude/ — sync target)
97
+ ├── Agentik_Runtime/ ← live: eventlog/rag.db/sessions/locks
98
+ ├── Agentik_Tools/bin/omega ← symlink to engine venv
99
+ └── Agentik_Extra/var/etc/staging/ ← logs, secrets vault, staging
100
+
101
+ bootstrap/
102
+ ├── lib/
103
+ │ ├── common.sh ← prompts, banner, NEWT_COLORS, install_venv
104
+ │ ├── steps.sh ← 22 step functions
105
+ │ ├── llm-clis.py ← 13 LLM CLI catalog
106
+ │ ├── claude-code-settings.py ← merge into ~/.claude/settings.json
107
+ │ └── manifest-helpers.py ← read install manifest
108
+ └── templates/
109
+ └── aisb/ ← 15 agent prompts (deployed at step 25)
110
+
111
+ install.sh ← 21 STEPS, plan mode, prompt_yes_no, exec shell at end
112
+ bin/omega-os.js ← npx entry → handoff to install.sh
113
+ package.json ← @agentikos/omega-os@0.19.27
114
+ ```
115
+
116
+ ---
117
+
118
+ ## 3. Diff catégorisé
119
+
120
+ ### 3.1 — Préservé / adapté (canon transposé)
121
+
122
+ | Concept Live | OmegaOS canon | Adaptation |
123
+ |---|---|---|
124
+ | 13 AISB agent prompts (Niobe/Oracle/Construct/Seraph/Smith/Pythia/...) | `bootstrap/templates/aisb/*.md` → `~/Omega/Agentik_SSOT/agents/aisb/` | Identiques. Step 25 les déploie tel quel. |
125
+ | 17 audits Quality Arsenal | `Agentik_SSOT/audits/*.yaml` + `Agentik_SSOT/skills/*audit/SKILL.md` | YAML structurés + SKILL.md généré au step 27. |
126
+ | Tmux-claude session manager | step 36 lance le canonical installer | Identique — `curl install.sh \| bash` du repo `agentik-os/tmux-claude`. |
127
+ | 3 Laws | Embarqués dans `personas/OMEGAOS-CONTEXT.md` | Chaque LLM (Claude/Gemini/Codex/...) les voit au boot. |
128
+ | Per-project Telegram topic | `Agentik_SSOT/projects/<slug>/registry.yaml` + topic_id map | Topic = project mission scope. |
129
+ | 4-level hiérarchie | Documenté dans `LAYERS.md` + enforcé par engine | Human → AISB → Oracle → Workers. |
130
+ | Claude Max OAuth single-token | Engine reads `~/.claude/.credentials.json` live | AISB+Oracle+Worker partagent. Hermès isolé (Anthropic API). |
131
+
132
+ ### 3.2 — Manquant / non porté
133
+
134
+ | Live VPS | OmegaOS v0.19.27 status |
135
+ |---|---|
136
+ | 200 lib scripts ad-hoc (`safe-npm-build.sh`, `dispatch-to-session.sh`, `oracle-ship.sh`, etc.) | Remplacés par engine Python (`omega run`, `omega genesis`, `omega plan run`, etc.). Aucune mention 1:1 dans le package. |
137
+ | 39 cron entries (mémoires SQLite, FFT-flusher, defensive scan, etc.) | Réduit à 0 entries cron — remplacé par 3 launchd services (engine, telegram, autonomous) + autonomous charters YAML. |
138
+ | Shadow Manager (14 signals daemon) | Pas porté. Remplacé par `omega doctor` snapshot + manual ops. |
139
+ | Safety Mesh L1-L4 (brief-replay, CPU Guard, Shadow Manager, Mission Auditor) | Mission Auditor partiellement = audit gate via Stop-hook. Les 3 autres non portés (CPU guard, shadow nudges, brief-replay). |
140
+ | Tracking Reactor (inotify ~129ms stall detection) | Pas porté. |
141
+ | Smart Resurrect Cascade (4 tiers) | Pas porté. |
142
+
143
+ ### 3.3 — Nouveau (refonte propre que le live n'a pas)
144
+
145
+ | Ajout OmegaOS | Pourquoi |
146
+ |---|---|
147
+ | **8 Genesis stack presets** (omegaos-canonical / mobile-native / mobile-expo / desktop-tauri / supabase / claude-dashboard / convex-selfhosted / sqlite-local) | Le live n'avait pas de pipeline de "nouveau projet" — opérateur partait du clone à la main. |
148
+ | **Persona system** (canonical OMEGAOS-CONTEXT.md → mirroré dans CLAUDE.md/GEMINI.md/AGENTS.md/...) | Hot-swap LLM possible — chaque CLI voit la même persona automatiquement. |
149
+ | **`omega switch <provider>`** | Hot-swap LLM en une commande. Live = pas de switching. |
150
+ | **Textual TUI** (`omega menu-tui` + slash commands `/aisb /hermes /switch /audit /mission /scrape`) | Le live = pas de TUI, juste tmux + scripts dispersés. |
151
+ | **CloakBrowser scraper** (`omega scrape <url>`) | Le live n'avait pas de scraper officiel — usage ad-hoc de Playwright. |
152
+ | **Scrapling scraper** (optionnel, `--engine scrapling`) | Idem, complément rapide pour les sites non protégés. |
153
+ | **CLI Catalog `clis-catalog.yaml`** (27 system CLIs avec install per-OS, post_install hooks) | Live = installs manuels. |
154
+ | **LLM Provider Catalog** (16 backends — Anthropic/OpenAI/Gemini/GLM/DeepSeek/Qwen/Ollama/LM Studio/OpenRouter/Bedrock/Mistral/xAI/Vercel Gateway/Copilot/OpenAI-compat/ChatGPT sub) | Live = claude only. |
155
+ | **Plan v7 FSM-enforced executor** (PENDING→IN_PROGRESS→CLAIMED_DONE→VERIFIED, plan.db SQLite per-project, `omega plan run` multi-day autonomous loop) | Live = pas d'engine de planning, juste dispatch. |
156
+ | **age-encrypted vault** (`omega vault read/write`) | Live = plain .env files. |
157
+ | **Webhooks HMAC-signés** (`omega webhook handle`) | Live = pas de surface d'entrée webhook canonique. |
158
+ | **Genesis pipeline** (vision → market 5 files → branding 3 files → PRD 9 files → features F-001..F-006 DAG → plan) | Live = aucun. Refonte produit-first. |
159
+ | **2 scrapers + Printing Press CLI factory** | Nouveau écosystème d'agent-CLIs. |
160
+ | **599 pytest tests** | Live = 0 test officiel. |
161
+ | **`@agentikos/omega-os` npm package** distribuable + installer 21 steps avec plan mode | Live = config manuelle, jamais redistribuable. |
162
+
163
+ ---
164
+
165
+ ## 4. Tests fonctionnels exécutés
166
+
167
+ | Test | Résultat |
168
+ |---|---|
169
+ | `python -m pytest -q --tb=no` | **599 passed**, 2 warnings (DeprecationWarning v0.6 backup), 20.8s |
170
+ | `bash -n install.sh bootstrap/lib/{common,steps}.sh` | shell syntax OK |
171
+ | Import canary: `from omega_engine import cli, tui, tmux, personas, genesis, audits` | all imports OK |
172
+ | Slash dispatch: `dispatch_slash("/help")` | 30-line help OK |
173
+ | Slash dispatch: `dispatch_slash("/aisb")` | `session_jump=AISB-chat` OK |
174
+ | Slash dispatch: `dispatch_slash("/hermes")` | `session_jump=Hermes-chat` OK |
175
+ | Slash dispatch: `dispatch_slash("/unknown_cmd")` | "unknown command" message OK |
176
+ | `bash install.sh --dry-run --profile workstation` | 21 steps listed cleanly |
177
+ | `personas.supported_llm_ids()` | 10 ids (claude_code/gemini_cli/codex/opencode/openrouter_cli/deepseek/qwen_code/continue_dev/aider/hermes) |
178
+ | Catalog parse: MCP/CLI/LLM-providers/plugins | All 4 YAMLs parse cleanly, counts correct (16/27/16/15) |
179
+ | npm tarball v0.19.27 contains all 13 LLM CLIs | verified via `npm pack` extraction |
180
+
181
+ ---
182
+
183
+ ## 5. Vérification de la logique architecture
184
+
185
+ ### 5.1 — 4-level hiérarchie
186
+
187
+ ```
188
+ Human (Telegram / TUI omega / CLI)
189
+
190
+ AISB (intake — Claude Max OAuth)
191
+ ↓ dispatch_oracle
192
+ Oracle (per-project planner — Claude Max OAuth, persistent tmux)
193
+ ↓ dispatch_worker
194
+ Worker (executor — short-lived tmux, .done.json signal)
195
+ ```
196
+
197
+ **OmegaOS map :**
198
+ - L1 Human → `omega` TUI + `omega run` CLI + Telegram bot (step 50)
199
+ - L2 AISB → `Agentik_SSOT/agents/aisb/niobe.md` (intake personality) + `aisb_chat.py` + Telegram daemon
200
+ - L3 Oracle → `tmux.spawn_oracle(project, oracle_id)` → persistent session
201
+ - L4 Worker → `tmux.spawn_worker(project, task)` + `done_signal.py` + audit gate
202
+ - L2bis Hermès → optionnel, séparé : `hermes.py` + Anthropic API + own Telegram bot
203
+
204
+ **Verdict :** ✓ Architecture cohérente, enforcée en code (tmux session naming + role aliases dans `prompts.py`).
205
+
206
+ ### 5.2 — Provider hot-swap
207
+
208
+ ```
209
+ omega switch gemini_cli
210
+
211
+ $OMEGA_HOME/Agentik_Extra/var/active-llm-provider ← "gemini_cli"
212
+
213
+ Next spawn_aisb_chat() reads active provider (planned v0.19.28+)
214
+
215
+ tmux session launches `gemini` instead of `claude`
216
+ ```
217
+
218
+ **OmegaOS status :** marker écrit (v0.19.22). `spawn_aisb_chat` ne le lit pas encore → utilise toujours `claude`. **Gap connu, v0.19.28.**
219
+
220
+ ### 5.3 — Persona system
221
+
222
+ ```
223
+ $OMEGA_HOME/Agentik_SSOT/personas/OMEGAOS-CONTEXT.md ← canonical (operator editable)
224
+ ↓ _ensure_chat_context_dir()
225
+ $OMEGA_HOME/Agentik_Coding/chat-contexts/aisb-master/
226
+ ├── CLAUDE.md ← Anthropic Claude Code reads this
227
+ ├── GEMINI.md ← Google Gemini CLI reads this
228
+ ├── AGENTS.md ← OpenAI Codex reads this
229
+ ├── QWEN.md ← Alibaba Qwen reads this
230
+ ├── .opencode/CONTEXT.md ← OpenCode reads this
231
+ ├── .continue/CONTEXT.md ← Continue.dev reads this
232
+ ├── CONVENTIONS.md ← Aider reads this
233
+ └── HERMES.md ← Hermès reads this
234
+ ```
235
+
236
+ **Verdict :** ✓ Tous les LLM voient le MÊME contexte OmegaOS. Edit `OMEGAOS-CONTEXT.md` une fois → propagé.
237
+
238
+ ### 5.4 — Scrapers (CLI surface pour les LLMs)
239
+
240
+ ```
241
+ LLM dans une session Claude/Gemini/Codex
242
+ ↓ user: "fetch https://stripe.com/docs"
243
+ ↓ LLM shell-out:
244
+ omega scrape https://stripe.com/docs ← default CloakBrowser
245
+ OR
246
+ omega scrape <url> --engine scrapling ← fast HTTP-first
247
+
248
+ markdown sur stdout → re-injecté dans le contexte du LLM
249
+ ```
250
+
251
+ **Verdict :** ✓ Tous les LLMs ont accès au même scraper via Bash. Bot detection bypass via CloakBrowser C++ patches.
252
+
253
+ ### 5.5 — 21 install steps — séquence vérifiée
254
+
255
+ | # | Step | Dépendances | Verdict |
256
+ |---|---|---|---|
257
+ | 00 | preflight | — | ✓ |
258
+ | 10 | system-deps | brew/apt/dnf + installer venv (uv + Python 3.13 + pyyaml) | ✓ Tahoe-safe via uv |
259
+ | 15 | llm-clis | npm (Node), uv (Python) | ✓ 13 CLIs offerts en multi-select |
260
+ | 20 | structure | `cp -R omega/` | ✓ 8 blocks |
261
+ | 25 | aisb-suite | step 20 done | ✓ 15 agent prompts copiés |
262
+ | 27 | audit-skills | step 20 + 25 + yaml | ✓ 18 SKILL.md générés |
263
+ | 30 | engine | uv venv + uv pip install -e . (incl. textual >= 1.0) | ✓ `omega` binary linké |
264
+ | 33 | claude-code-settings | step 30 + claude installé | ✓ Stop-hook + Agent Teams flag |
265
+ | 32 | accounts | manifest optional | skip si pas de manifest |
266
+ | 35 | providers | manifest optional | skip si pas de manifest |
267
+ | 36 | tmux-config | step 10 (tmux) | ✓ `agentik-os/tmux-claude` installer |
268
+ | 37 | hermes-brief | step 30 | ✓ `~/.hermes/skills/omega/SKILL.md` |
269
+ | 40 | **clis** (refonte v0.19.21 — replaces MCP) | step 30 | ✓ audit + install 10 native + Printing Press |
270
+ | 45 | claude-plugins | claude CLI | ✓ 10 plugins (4 anciennement cassés fixés) |
271
+ | 50 | telegram | curl | ✓ 2-bot model AISB + Hermès optionnel |
272
+ | 55 | autonomous | manifest optional | skip si pas de manifest |
273
+ | 57 | rag | step 30 | leaves defaults |
274
+ | 58 | first-project | manifest optional | skip si pas de manifest |
275
+ | 59 | hermes-session | step 30 + tmux | ✓ AISB-chat tmux toujours-active |
276
+ | 60 | services | systemd/launchd | ✓ 3 plists / units |
277
+ | 70 | doctor | step 30 + tout le reste | verdict READY/PARTIAL/NOT_READY |
278
+
279
+ **Verdict global :** Les 21 steps couvrent install end-to-end. Étapes optionnelles (manifest-driven) gèrent gracieusement l'absence.
280
+
281
+ ### 5.6 — Régression historique (du v0.19.x debug saga)
282
+
283
+ | Bug | Version d'origine | Fix | Verdict |
284
+ |---|---|---|---|
285
+ | `import yaml` crash sur macOS Tahoe | v0.19.7- | venv dédié avec uv + Python 3.13 managed | ✓ v0.19.11 |
286
+ | `prompt_yes_no: command not found` | v0.19.1 | helper défini dans common.sh | ✓ v0.19.5 |
287
+ | Banner G illisible (B confusion) | v0.19.0 | row 3 ouvert + arc bottom | ✓ v0.19.5 |
288
+ | `${readiness,,}` bash 3.2 crash macOS | v0.19.4 | `tr` au lieu de `${var,,}` | ✓ v0.19.12 |
289
+ | npx 404 (restricted access) | v0.19.4 | publishConfig.access=public | ✓ v0.19.7 |
290
+ | `omega` ne fait rien sur Mac | v0.19.7 | NEWT_COLORS + text menu fallback | ✓ v0.19.12 |
291
+ | MCP catalog count `(0\n?)` splatter | v0.19.11- | regex avec leading whitespace | ✓ v0.19.15 |
292
+ | 4 MCPs failed (git/fetch/higgsfield/linear) | v0.19.20- | uvx method + correct package names | ✓ v0.19.16 |
293
+ | AISB chat crash "cwd deleted" | v0.19.16- | spawn avec cwd=$HOME | ✓ v0.19.17 |
294
+ | `omega aisb` silent attach to dead session | v0.19.17 | shell-stays-alive via send-keys + force_replace | ✓ v0.19.20 |
295
+ | Claude plugins fail (anthropic-skills marketplace) | v0.19.19- | correct marketplace IDs + drop `-s scope` flag | ✓ v0.19.20 |
296
+ | Bot Telegram DM rejected | v0.19.12- | route DM → AISB chat_once | ✓ v0.19.13 |
297
+ | Source ~/.zshrc oubliée | toujours | `exec $SHELL -l` end of install | ✓ v0.19.20 |
298
+ | Menu actions silently no-op | v0.19.25 | label matching bug + inline execution | ✓ v0.19.26 |
299
+ | Plain fzf menu pas Hermès-grade | toujours | Textual TUI + slash commands | ✓ v0.19.27 |
300
+
301
+ ---
302
+
303
+ ## 6. Ce qui reste (roadmap v0.20+)
304
+
305
+ 1. **Streaming async dans le TUI** — actuellement subprocess capture + dump. Hermès = streaming live ligne-par-ligne.
306
+ 2. **`spawn_*_chat` provider-aware** — lire `active-llm-provider` et lancer le bon CLI (pas toujours `claude`).
307
+ 3. **Per-provider auth wizard** — `omega account login --provider gemini` qui lit `providers-catalog.yaml`.
308
+ 4. **Sync skills cross-provider** — translation Claude Code skills → Gemini CLI commands → Codex agents.
309
+ 5. **Safety Mesh L1-L4** — porter brief-replay + CPU Guard + Shadow Manager + Mission Auditor depuis le live VPS.
310
+ 6. **Tracking Reactor** — inotify stall detection.
311
+ 7. **Hermes dedicated daemon** — poll loop pour le bot Hermès séparé.
312
+ 8. **CloakBrowser auto-discovery via Claude `.claude/settings.json`** — pour que Claude découvre `omega scrape` sans qu'on lui dise.
313
+
314
+ ---
315
+
316
+ ## 7. Verdict
317
+
318
+ **OmegaOS v0.19.27 = vraie refonte du système live**, pas un copier-coller.
319
+
320
+ - ✓ **Distribuable** : `npx @agentikos/omega-os@0.19.27` install end-to-end en 21 steps.
321
+ - ✓ **Multi-LLM** : 13 CLIs + 16 provider configs + persona system unifié.
322
+ - ✓ **Multi-scraper** : CloakBrowser + Scrapling.
323
+ - ✓ **TUI Hermès-style** : Textual app + slash commands.
324
+ - ✓ **Testé** : 599 tests pytest passent.
325
+ - ✓ **Documentation** : LAYERS.md (architecture) + USER-JOURNEY.md (parcours) + ce rapport.
326
+
327
+ **Gaps connus** :
328
+ - Provider hot-swap incomplet (marker écrit, spawn pas encore lecteur)
329
+ - Safety Mesh non porté
330
+ - Streaming async dans le TUI à venir
331
+
332
+ **Ce qui rend OmegaOS supérieur au live VPS** :
333
+ - Distribuable au public (vs setup manuel chez Gareth)
334
+ - Hot-swap LLM (vs claude-only)
335
+ - Stack Genesis (vs partir de zéro à la main)
336
+ - Vault chiffré (vs .env plain)
337
+ - 599 tests (vs 0)
338
+ - TUI moderne (vs bash scripts dispersés)
339
+
340
+ **Ce que le live VPS a de plus** :
341
+ - Safety Mesh complet (4 layers de protection runtime)
342
+ - 39 cron entries (Smith reflection, defensive scans, etc.)
343
+ - 14 Shadow Manager signals
344
+ - Tracking Reactor (~129ms stall detection)
345
+
346
+ → La refonte privilégie la **distributabilité** et la **multi-LLM** ; les couches de safety runtime du live restent à porter.
347
+
348
+ ---
349
+
350
+ *Audit produit pour v0.19.27 — 2026-05-25 — testé sur le VPS (Linux x86_64, Python 3.13, uv 0.5+, tmux 3.x, fzf 0.60).*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentikos/omega-os",
3
- "version": "0.19.27",
3
+ "version": "0.19.29",
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"