@agentikos/omega-os 0.19.39 → 0.19.41

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.
Files changed (42) hide show
  1. package/bootstrap/lib/common.sh +19 -10
  2. package/bootstrap/templates/aisb/architect.md +27 -1
  3. package/bootstrap/templates/aisb/construct.md +27 -1
  4. package/bootstrap/templates/aisb/keymaker.md +27 -1
  5. package/bootstrap/templates/aisb/link.md +27 -1
  6. package/bootstrap/templates/aisb/lmc-protocol.md +27 -1
  7. package/bootstrap/templates/aisb/merovingian.md +27 -1
  8. package/bootstrap/templates/aisb/morpheus.md +27 -1
  9. package/bootstrap/templates/aisb/neo.md +27 -1
  10. package/bootstrap/templates/aisb/niobe.md +27 -1
  11. package/bootstrap/templates/aisb/oracle.md +27 -1
  12. package/bootstrap/templates/aisb/pythia.md +36 -0
  13. package/bootstrap/templates/aisb/seraph.md +27 -1
  14. package/bootstrap/templates/aisb/smith.md +27 -1
  15. package/bootstrap/templates/aisb/zion.md +27 -1
  16. package/omega/Agentik_Engine/omega_engine/__init__.py +1 -1
  17. package/omega/Agentik_Engine/omega_engine/__pycache__/__init__.cpython-313.pyc +0 -0
  18. package/omega/Agentik_Engine/omega_engine/__pycache__/cli.cpython-313.pyc +0 -0
  19. package/omega/Agentik_Engine/omega_engine/__pycache__/tmux.cpython-313.pyc +0 -0
  20. package/omega/Agentik_Engine/omega_engine/__pycache__/tui.cpython-313.pyc +0 -0
  21. package/omega/Agentik_Engine/omega_engine/cli.py +35 -6
  22. package/omega/Agentik_Engine/omega_engine/tmux.py +45 -26
  23. package/omega/Agentik_Engine/omega_engine/tui.py +25 -20
  24. package/omega/Agentik_Engine/pyproject.toml +1 -1
  25. package/omega/Agentik_Engine/tests/__pycache__/test_install_ux.cpython-313-pytest-8.4.2.pyc +0 -0
  26. package/omega/Agentik_Engine/tests/__pycache__/test_install_ux.cpython-313.pyc +0 -0
  27. package/omega/Agentik_Engine/tests/__pycache__/test_prompt_audit.cpython-313-pytest-8.4.2.pyc +0 -0
  28. package/omega/Agentik_Engine/tests/__pycache__/test_prompt_audit.cpython-313.pyc +0 -0
  29. package/omega/Agentik_Engine/tests/__pycache__/test_tmux_and_aisb_chat.cpython-313-pytest-8.4.2.pyc +0 -0
  30. package/omega/Agentik_Engine/tests/__pycache__/test_tmux_and_aisb_chat.cpython-313.pyc +0 -0
  31. package/omega/Agentik_Engine/tests/__pycache__/test_tmux_palette.cpython-313-pytest-8.4.2.pyc +0 -0
  32. package/omega/Agentik_Engine/tests/__pycache__/test_tmux_palette.cpython-313.pyc +0 -0
  33. package/omega/Agentik_Engine/tests/__pycache__/test_tui_runtime.cpython-313-pytest-8.4.2.pyc +0 -0
  34. package/omega/Agentik_Engine/tests/__pycache__/test_tui_runtime.cpython-313.pyc +0 -0
  35. package/omega/Agentik_Engine/tests/test_install_ux.py +87 -2
  36. package/omega/Agentik_Engine/tests/test_prompt_audit.py +82 -0
  37. package/omega/Agentik_Engine/tests/test_tmux_and_aisb_chat.py +94 -0
  38. package/omega/Agentik_Engine/tests/test_tmux_palette.py +94 -0
  39. package/omega/Agentik_Engine/tests/test_tui_runtime.py +50 -0
  40. package/omega/Agentik_SSOT/VERSION +1 -1
  41. package/omega/Agentik_SSOT/docs/AUDIT-V0.19.40.md +163 -0
  42. package/package.json +1 -1
@@ -0,0 +1,94 @@
1
+ """Regression tests for the bundled tmux palette.
2
+
3
+ We swapped the Claude-cream/orange paper theme (#FAFAF7 / #D97757) for
4
+ the tmux-claude pixel/CRT amber palette (xterm colour137 ≈ #af8700).
5
+ These tests pin the new palette so a future drift back to the old
6
+ theme fails loudly.
7
+
8
+ Pinned behaviour:
9
+
10
+ 1. The pro config uses ``colour137`` (the amber accent) in multiple
11
+ places — status bar, pane borders, message style.
12
+ 2. The old Claude paper palette (#FAFAF7 cream + #D97757 orange) is
13
+ completely gone from the pro config.
14
+ 3. The window list is hidden (tmux-claude clean look — the operator
15
+ navigates via Option+/ or `omega tmux menu`, not the window bar).
16
+ 4. The popup keybinds use the full-screen ``-w 100% -h 100%`` sizing
17
+ from tmux-claude (the old config used the smaller 80%/90% boxes).
18
+ """
19
+ from __future__ import annotations
20
+
21
+ import sys
22
+ import unittest
23
+ from pathlib import Path
24
+
25
+ HERE = Path(__file__).resolve().parent
26
+ sys.path.insert(0, str(HERE.parent))
27
+
28
+ from omega_engine.tmux import _PRO_CONFIG # noqa: E402
29
+
30
+
31
+ class TestTmuxClaudePalette(unittest.TestCase):
32
+ def test_pro_config_uses_colour137(self):
33
+ """Amber accent ``colour137`` must show up in at least 4 places.
34
+
35
+ Typically: status-left accent, status-right accent, pane-active
36
+ border, message-style — plus possibly mode-style. We assert >= 4
37
+ so a partial revert still trips the test.
38
+ """
39
+ n = _PRO_CONFIG.count("colour137")
40
+ self.assertGreaterEqual(
41
+ n, 4,
42
+ f"_PRO_CONFIG must reference colour137 at least 4 times "
43
+ f"(status accents + active border + message/mode style); "
44
+ f"found {n}",
45
+ )
46
+
47
+ def test_no_claude_cream_orange_palette(self):
48
+ """The old paper theme (#FAFAF7 + #D97757) must be gone."""
49
+ self.assertNotIn(
50
+ "#FAFAF7", _PRO_CONFIG,
51
+ "Old Claude cream bg #FAFAF7 must not appear in _PRO_CONFIG",
52
+ )
53
+ self.assertNotIn(
54
+ "#D97757", _PRO_CONFIG,
55
+ "Old Claude orange accent #D97757 must not appear in _PRO_CONFIG",
56
+ )
57
+
58
+ def test_window_status_hidden(self):
59
+ """Window list is hidden — both empty format strings present."""
60
+ self.assertIn(
61
+ "window-status-format ''", _PRO_CONFIG,
62
+ "Inactive window list must be hidden (window-status-format '')",
63
+ )
64
+ self.assertIn(
65
+ "window-status-current-format ''", _PRO_CONFIG,
66
+ "Active window must be hidden too (window-status-current-format '')",
67
+ )
68
+
69
+ def test_popup_keybinds_use_full_screen(self):
70
+ """The M-/ session switcher popup uses full-screen sizing."""
71
+ self.assertIn(
72
+ "-w 100% -h 100%", _PRO_CONFIG,
73
+ "Popup keybinds must use full-screen tmux-claude sizing "
74
+ "(-w 100% -h 100%)",
75
+ )
76
+ # Specifically the M-/ binding (the canonical session switcher).
77
+ # We grep the relevant line to make sure 100%/100% is wired there
78
+ # — not just present elsewhere by coincidence.
79
+ m_slash_lines = [
80
+ ln for ln in _PRO_CONFIG.splitlines() if "M-/" in ln
81
+ ]
82
+ self.assertTrue(
83
+ m_slash_lines,
84
+ "_PRO_CONFIG must keep the M-/ popup binding",
85
+ )
86
+ self.assertTrue(
87
+ any("-w 100% -h 100%" in ln for ln in m_slash_lines),
88
+ "M-/ popup binding must use -w 100% -h 100% "
89
+ "(full-screen tmux-claude style)",
90
+ )
91
+
92
+
93
+ if __name__ == "__main__":
94
+ unittest.main(verbosity=2)
@@ -269,6 +269,56 @@ class TestChatFirstRedesign(unittest.TestCase):
269
269
  self.assertIn("paperclip_bridge", src)
270
270
 
271
271
 
272
+ class TestPixelPalette(unittest.TestCase):
273
+ """Pixel/CRT amber palette — colour137 family. Locks in the
274
+ replacement of the Claude cream/orange palette with a retro-CRT
275
+ amber accent that inherits the terminal background, matching the
276
+ look-and-feel reference from agentik-os/tmux-claude."""
277
+
278
+ def test_amber_constant_defined(self):
279
+ """`AMBER` must be declared in `_arrow_menu` — it's the new
280
+ primary accent color (xterm 256 colour137 = amber gold)."""
281
+ import inspect
282
+ from omega_engine.tui import _arrow_menu
283
+ src = inspect.getsource(_arrow_menu)
284
+ self.assertIn("AMBER", src,
285
+ "_arrow_menu must declare AMBER (the new colour137 accent)")
286
+
287
+ def test_colour137_in_fzf_args(self):
288
+ """The fzf `--color=` block must use the xterm `colour137`
289
+ named amber — that's the look-and-feel reference."""
290
+ import inspect
291
+ from omega_engine.tui import _arrow_menu
292
+ src = inspect.getsource(_arrow_menu)
293
+ self.assertIn("colour137", src,
294
+ "fzf --color= block must use colour137 (amber gold) — "
295
+ "the pixel/CRT palette references it explicitly")
296
+
297
+ def test_no_claude_cream_orange_in_fzf(self):
298
+ """The old Claude cream `#FAFAF7` background must NOT appear in
299
+ `_arrow_menu` anymore — the new palette inherits the terminal
300
+ background (`bg:-1`) for a transparent retro feel."""
301
+ import inspect
302
+ from omega_engine.tui import _arrow_menu
303
+ src = inspect.getsource(_arrow_menu)
304
+ self.assertNotIn("#FAFAF7", src,
305
+ "_arrow_menu must NOT contain Claude cream #FAFAF7 — "
306
+ "the new palette inherits the terminal background")
307
+
308
+ def test_orange_aliased_to_amber(self):
309
+ """Backward-compat: `ORANGE` must alias `AMBER` so existing
310
+ references (`_section`, `_label`, prompts) keep working with
311
+ only a color change, no logic change."""
312
+ import inspect
313
+ from omega_engine.tui import _arrow_menu
314
+ src = inspect.getsource(_arrow_menu)
315
+ # Tolerate any reasonable spacing around `=`.
316
+ import re
317
+ self.assertRegex(src, r"ORANGE\s*=\s*AMBER",
318
+ "ORANGE must alias AMBER (backward-compat for existing "
319
+ "_section/_label/prompt code)")
320
+
321
+
272
322
  class TestOmegaWindowAliveHelper(unittest.TestCase):
273
323
  """tmux.omega_window_alive() — the helper the chat-first TUI uses
274
324
  to know whether AISB-chat / Hermès-chat are running."""
@@ -1 +1 @@
1
- 0.19.39
1
+ 0.19.41
@@ -0,0 +1,163 @@
1
+ # OmegaOS v0.19.40 — pixel/tmux-claude design + progress bar fix + AISB roles enriched
2
+
3
+ > Four parallel chantiers + one main-session chantier. Total: 5 deliverables, 660 tests passing.
4
+ > Reference design: github.com/agentik-os/tmux-claude — adopted verbatim where applicable.
5
+
6
+ ## 1. What changed
7
+
8
+ | Chantier | Owner | Effect |
9
+ |---|---|---|
10
+ | **2A — progress bar fix** | agent | `_full_progress` was incrementing `STEP_COUNT` on BOTH `run` AND `ok` phases → counter ran to 2× STEP_TOTAL → bar hit 200% → newline spawned mid-install. Now: only `ok`/`skip` increment. The `\r`-driven single-line overwrite works as designed. |
11
+ | **2B — pixel tmux palette** | agent | Replaced Claude cream/orange (`#FAFAF7` / `#D97757`) with tmux-claude's amber `colour137` palette. Window list HIDDEN (`window-status-format ''`). Status bar with bullets `•`. Popups full-screen (`-w 100% -h 100%`). Paste-deadlock fixes, kill forensics, smart-scroll all preserved. |
12
+ | **2C — pixel fzf palette** | agent | Omega menu's fzf colors swapped to CRT amber: `bg:-1` (inherits terminal), `fg:default`, accents `colour137`/`colour215`. Backward-compat alias `ORANGE = AMBER` keeps existing `_section`/`_label` calls working. |
13
+ | **6 — AISB role enrichment** | main session | 14 AISB role prompts enriched with a uniform "THREE LAWS + Operating Contract" block. Adds LAW 3 (autonomous execution), names LMC protocol path, references `.done.json` + done-marker tooling, requires fresh-context handoff. Per-role tier customization (Manager / Worker / Checker / Watcher). |
14
+
15
+ ## 2. Audit numbers — before / after
16
+
17
+ **Prompt audit suite scores (v0.19.39 → v0.19.40):**
18
+
19
+ | Role | Tier | Before | After |
20
+ |---|---|---:|---:|
21
+ | CLAUDE (master) | Lead | 90 | 90 |
22
+ | morpheus | Worker | 75 | **100** |
23
+ | link | Worker | 65 | **100** |
24
+ | neo | Worker | 65 | **100** |
25
+ | zion | Worker | 65 | **100** |
26
+ | seraph | Checker | 55 | **100** |
27
+ | oracle | Manager | 45 | **100** |
28
+ | architect | Worker | 45 | **100** |
29
+ | construct | Worker | 45 | **100** |
30
+ | keymaker | Worker | 45 | **100** |
31
+ | merovingian | Worker | 45 | **100** |
32
+ | niobe | Worker | 45 | **100** |
33
+ | smith | Worker | 45 | **100** |
34
+ | pythia | Watcher | 5 | **100** |
35
+ | lmc-protocol (doc) | Reference | 45 | **85** |
36
+ | **Average** | | **52.0** | **98.3** |
37
+ | **shared `.done.json` vocab overlap** | | 33% | **100%** |
38
+
39
+ ## 3. The Operating Contract every role now embeds
40
+
41
+ ```markdown
42
+ ## Operating Contract
43
+
44
+ You are a **<TIER>** in the **LMC (Lead-Manager-Checker) protocol** — see
45
+ `Agentik_SSOT/agents/aisb/lmc-protocol.md` for the full spec.
46
+
47
+ **Tier responsibility**: <one-line per-role>
48
+
49
+ **Verified completion** — you NEVER declare your own work done. The engine
50
+ derives completion from a `.done.json` signal you emit via:
51
+
52
+ ~/.aisb/lib/<MARKER> # writes .done.json with status + evidence
53
+
54
+ Status ∈ {done_clean, pending, failed}. If genuinely blocked (Third-Law
55
+ fallback), write worker-blocked-<session>.json + execute the fallback —
56
+ never sit idle.
57
+
58
+ **Fresh-context handoff** — every brief MUST be self-contained:
59
+ Mission / Purpose / Context / Done Criteria / Verify Command.
60
+ ```
61
+
62
+ Per-role tiers:
63
+ - **Manager** (Oracle) — `oracle-mark-done.sh`
64
+ - **Workers** (Morpheus, Construct, Architect, Keymaker, Niobe, Smith, Merovingian, Neo, Link, Zion) — `worker-mark-done.sh`
65
+ - **Checker** (Seraph) — `worker-mark-done.sh`
66
+ - **Watcher** (Pythia, read-only) — `worker-mark-done.sh`, status=`pending` for human review
67
+
68
+ ## 4. The new tmux look (tmux-claude alignment)
69
+
70
+ **Before** (Claude cream/orange):
71
+ ```
72
+ status-style "bg=#FAFAF7,fg=#3D3929"
73
+ status-left "#[fg=#D97757,bold]Ω #S #[fg=#A8A29E]│ "
74
+ status-right "#[fg=#88837A]%H:%M │ <count> sessions"
75
+ ```
76
+
77
+ **After** (tmux-claude amber):
78
+ ```
79
+ status-style "fg=default" # inherits terminal background
80
+ status-left ' #[fg=colour137,bold]Ω #S #[fg=default,nobold]• #[fg=colour137]#(omega tmux count) sess #[fg=default]• #[fg=colour137]%H:%M '
81
+ status-right '#[fg=default]CPU #[fg=colour137]<cpu>% #[fg=default]• #[fg=colour137]Ω v<version> '
82
+
83
+ setw -g window-status-format '' # hide window list
84
+ setw -g window-status-current-format ''
85
+ setw -g window-status-separator ''
86
+
87
+ bind-key Z display-popup -E -w 100% -h 100% "omega tmux menu" # was 80%
88
+ bind-key -n M-/ display-popup -E -w 100% -h 100% "omega tmux switcher"
89
+
90
+ set -g pane-active-border-style "fg=colour137"
91
+ set -g message-style "fg=colour137,bg=default,bold"
92
+ set -g mode-style "fg=default,bg=colour137"
93
+ ```
94
+
95
+ `bind-key -n M-z` keeps spawning the Omega session (unchanged).
96
+
97
+ ## 5. The fzf menu palette (Omega TUI)
98
+
99
+ **ANSI constants in `_arrow_menu`** (with backward-compat alias):
100
+ ```python
101
+ AMBER = "\033[38;5;137m" # xterm 256 colour137 — amber gold
102
+ AMBER_BR = "\033[38;5;215m" # bright amber for highlighted rows
103
+ MUTED = "\033[38;5;240m" # dim gray
104
+ ORANGE = AMBER # alias — keeps existing code working
105
+ ```
106
+
107
+ **fzf `--color=` block:**
108
+ ```
109
+ bg:-1, fg:default, # inherit terminal background (no cream)
110
+ bg+:#1c1c1c, fg+:colour215, # dark highlight bar, bright amber on selection
111
+ hl/hl+/prompt/pointer/marker/header/border/info/spinner: colour137/215,
112
+ gutter:-1
113
+ ```
114
+
115
+ ## 6. Tests (regression-locked)
116
+
117
+ | Chantier | New tests | Suite total |
118
+ |---|---|---|
119
+ | v0.19.39 baseline | — | 644 |
120
+ | 2A progress bar (3 new) | +3 | 647 |
121
+ | 2C fzf palette (4 new) | +4 | 651 |
122
+ | 2B tmux palette (4 new) | +4 | 655 |
123
+ | 6 role enrichment (5 new) | +5 | **660** |
124
+
125
+ **Regression locks for role enrichment:**
126
+ - `test_every_aisb_role_scores_at_least_80` — floor: 80/100 per role
127
+ - `test_average_suite_score_at_least_85` — floor: 85.0 average (current 98.3)
128
+ - `test_done_json_vocab_overlap_at_least_80_percent` — floor: 80% (current 100%)
129
+ - `test_every_role_references_lmc_protocol` — direct grep check
130
+ - `test_every_role_references_three_laws` — LAW 3 mandatory
131
+
132
+ ## 7. Progress bar — before / after (the actual UX)
133
+
134
+ **Before** (`STEP_TOTAL=21` but `STEP_COUNT` reaches 42):
135
+ ```
136
+ Installing… ███████████████████ 21/21 100% step_aisb_suite
137
+ Installing… ███████████████████ 22/21 104% step_audit_skills ← newline mid-install
138
+ Installing… ███████████████████ 23/21 109% step_engine
139
+
140
+ ```
141
+
142
+ **After** (count only on `ok`/`skip`):
143
+ ```
144
+ Installing… ██████████████████░░ 18/21 85% step_clis ← single line, no scroll noise
145
+ ```
146
+
147
+ (then on the very last `ok` of the run, ONE newline so the post-install card prints cleanly)
148
+
149
+ ## 8. Verdict
150
+
151
+ ✅ TUI menu (fzf) — **pixel/CRT amber palette**, terminal bg inherited.
152
+ ✅ Tmux config — **tmux-claude design adopted** (colour137 amber, bullets, hidden window list, full-screen popups).
153
+ ✅ Install progress bar — **stays on one line**, no newline spawn.
154
+ ✅ AISB role prompts — **average 98.3/100** (was 52.0), every role references the LMC protocol + `.done.json` + Three Laws + done-marker + fresh-context.
155
+ ✅ `omega doctor prompts` section — surfaces healthy scores, drift detection live.
156
+ ✅ 660 tests passing, 0 regressions.
157
+
158
+ Next steps (deferred to v0.19.41+, in order):
159
+ - **Convex install step** — bundle Convex CLI, scaffold a starter project with Claude Code SDK + Google SDK + A2A schema
160
+ - **Tmux popup-based menu** — replace inline fzf with `display-popup -E -w 100% -h 100%` like tmux-claude's `session-manager-v2`
161
+ - **Status-bar cache daemon** — match tmux-claude's `/tmp/tmux-status-cache/` pattern to avoid subprocess spawning during paste
162
+
163
+ The user's invariant remains: `npx -y @agentikos/omega-os@latest --full` and the system is 100% functional.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentikos/omega-os",
3
- "version": "0.19.39",
3
+ "version": "0.19.41",
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"