@agentikos/omega-os 0.19.38 → 0.19.40
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.
- package/bootstrap/lib/common.sh +19 -10
- package/bootstrap/templates/aisb/architect.md +27 -1
- package/bootstrap/templates/aisb/construct.md +27 -1
- package/bootstrap/templates/aisb/keymaker.md +27 -1
- package/bootstrap/templates/aisb/link.md +27 -1
- package/bootstrap/templates/aisb/lmc-protocol.md +27 -1
- package/bootstrap/templates/aisb/merovingian.md +27 -1
- package/bootstrap/templates/aisb/morpheus.md +27 -1
- package/bootstrap/templates/aisb/neo.md +27 -1
- package/bootstrap/templates/aisb/niobe.md +27 -1
- package/bootstrap/templates/aisb/oracle.md +27 -1
- package/bootstrap/templates/aisb/pythia.md +36 -0
- package/bootstrap/templates/aisb/seraph.md +27 -1
- package/bootstrap/templates/aisb/smith.md +27 -1
- package/bootstrap/templates/aisb/zion.md +27 -1
- package/omega/Agentik_Engine/omega_engine/__init__.py +1 -1
- package/omega/Agentik_Engine/omega_engine/__pycache__/__init__.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/cli.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/paperclip_bridge.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/prompt_audit.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/tmux.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/tui.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/cli.py +39 -0
- package/omega/Agentik_Engine/omega_engine/paperclip_bridge.py +110 -0
- package/omega/Agentik_Engine/omega_engine/prompt_audit.py +395 -0
- package/omega/Agentik_Engine/omega_engine/tmux.py +61 -26
- package/omega/Agentik_Engine/omega_engine/tui.py +293 -86
- package/omega/Agentik_Engine/pyproject.toml +1 -1
- package/omega/Agentik_Engine/tests/__pycache__/test_install_ux.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_install_ux.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_paperclip_status.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_paperclip_status.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_prompt_audit.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_prompt_audit.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_tmux_palette.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_tmux_palette.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_tui_runtime.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_tui_runtime.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/test_install_ux.py +87 -2
- package/omega/Agentik_Engine/tests/test_paperclip_status.py +142 -0
- package/omega/Agentik_Engine/tests/test_prompt_audit.py +281 -0
- package/omega/Agentik_Engine/tests/test_tmux_palette.py +94 -0
- package/omega/Agentik_Engine/tests/test_tui_runtime.py +156 -0
- package/omega/Agentik_SSOT/VERSION +1 -1
- package/omega/Agentik_SSOT/docs/AUDIT-V0.19.39.md +161 -0
- package/omega/Agentik_SSOT/docs/AUDIT-V0.19.40.md +163 -0
- package/omega/Agentik_SSOT/rules/audit-gates.md +189 -0
- package/omega/Agentik_SSOT/rules/constitution.md +7 -0
- package/omega/Agentik_SSOT/rules/orchestration.md +215 -0
- package/omega/Agentik_SSOT/rules/prompt-protocols.md +219 -0
- package/omega/Agentik_SSOT/rules/scope-safety.md +197 -0
- package/omega/Agentik_SSOT/rules/three-laws.md +214 -0
- package/omega/Agentik_SSOT/rules/verified-completion.md +216 -0
- package/package.json +1 -1
|
@@ -176,5 +176,161 @@ class TestPaperclipMenuIntegration(unittest.TestCase):
|
|
|
176
176
|
f"arrow menu must wire {action} (user asked for it in v0.19.37)")
|
|
177
177
|
|
|
178
178
|
|
|
179
|
+
class TestChatFirstRedesign(unittest.TestCase):
|
|
180
|
+
"""v0.19.39 — the TUI must open on CONVERSATIONS (live tmux sessions),
|
|
181
|
+
not on an action menu. Setup/config/infra/audits/scrape land in
|
|
182
|
+
sub-menus. These tests lock in the new layout so a careless refactor
|
|
183
|
+
doesn't bring back the v0.19.38 action-first menu."""
|
|
184
|
+
|
|
185
|
+
def test_conversations_section_appears_before_menu(self):
|
|
186
|
+
"""The 'CONVERSATIONS' section header must appear in the source
|
|
187
|
+
BEFORE the 'MENU' sub-menu list — the redesign's whole point is
|
|
188
|
+
that chats are primary, settings are secondary. Match literal
|
|
189
|
+
``_section("X")`` calls only (skip comments/docstrings)."""
|
|
190
|
+
import inspect
|
|
191
|
+
from omega_engine.tui import _arrow_menu
|
|
192
|
+
src = inspect.getsource(_arrow_menu)
|
|
193
|
+
conv_pos = src.find('_section("CONVERSATIONS")')
|
|
194
|
+
menu_pos = src.find('_section("MENU")')
|
|
195
|
+
self.assertGreater(conv_pos, 0,
|
|
196
|
+
"TUI must have a _section(\"CONVERSATIONS\") call")
|
|
197
|
+
self.assertGreater(menu_pos, 0,
|
|
198
|
+
"TUI must have a _section(\"MENU\") call for sub-menus")
|
|
199
|
+
self.assertLess(conv_pos, menu_pos,
|
|
200
|
+
"_section(\"CONVERSATIONS\") must render BEFORE _section(\"MENU\") "
|
|
201
|
+
"— the chat-first redesign requires it (v0.19.39)")
|
|
202
|
+
|
|
203
|
+
def test_dot_status_indicators_present(self):
|
|
204
|
+
"""Each conversation row must show a status dot ● (alive) / ○
|
|
205
|
+
(off). Without dots the user can't tell which chats are running."""
|
|
206
|
+
import inspect
|
|
207
|
+
from omega_engine.tui import _arrow_menu
|
|
208
|
+
src = inspect.getsource(_arrow_menu)
|
|
209
|
+
for dot in ("●", "○"):
|
|
210
|
+
self.assertIn(dot, src,
|
|
211
|
+
f"menu must use {dot} status dot for live/off chats")
|
|
212
|
+
# The helper that renders dots must exist.
|
|
213
|
+
self.assertIn("_dot(", src,
|
|
214
|
+
"menu must have a _dot() helper for status indicators")
|
|
215
|
+
|
|
216
|
+
def test_submenu_dispatch_present(self):
|
|
217
|
+
"""The new sub-menu pattern (`submenu:audits`, `submenu:setup`,
|
|
218
|
+
`submenu:infra`, `submenu:health`, `submenu:paperclip`) must be
|
|
219
|
+
wired AND the dispatch must handle them via _open_submenu()."""
|
|
220
|
+
import inspect
|
|
221
|
+
from omega_engine.tui import _arrow_menu
|
|
222
|
+
src = inspect.getsource(_arrow_menu)
|
|
223
|
+
for sub in ("submenu:audits", "submenu:setup", "submenu:infra",
|
|
224
|
+
"submenu:health", "submenu:paperclip"):
|
|
225
|
+
self.assertIn(sub, src,
|
|
226
|
+
f"menu must declare {sub} as a sub-menu entry")
|
|
227
|
+
# The dispatch must indirect through _open_submenu.
|
|
228
|
+
self.assertIn("_open_submenu(", src,
|
|
229
|
+
"main loop must call _open_submenu() to render sub-menus")
|
|
230
|
+
# Sub-menu items provider exists.
|
|
231
|
+
self.assertIn("_submenu_items(", src,
|
|
232
|
+
"sub-menu rendering must use a _submenu_items() factory")
|
|
233
|
+
|
|
234
|
+
def test_attach_action_handler_present(self):
|
|
235
|
+
"""The new `attach:<session>` action lets the user jump into a
|
|
236
|
+
live Oracle or Worker tmux session directly from the menu."""
|
|
237
|
+
import inspect
|
|
238
|
+
from omega_engine.tui import _arrow_menu
|
|
239
|
+
src = inspect.getsource(_arrow_menu)
|
|
240
|
+
self.assertIn('action.startswith("attach:")', src,
|
|
241
|
+
"menu must handle attach:<session> actions to let the user "
|
|
242
|
+
"jump into live Oracle/Worker sessions")
|
|
243
|
+
# Should use tmux select-window OR switch-client.
|
|
244
|
+
self.assertTrue(
|
|
245
|
+
"switch-client" in src or "select-window" in src,
|
|
246
|
+
"attach handler must use tmux select-window / switch-client")
|
|
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."""
|
|
252
|
+
import inspect
|
|
253
|
+
from omega_engine.tui import _arrow_menu
|
|
254
|
+
src = inspect.getsource(_arrow_menu)
|
|
255
|
+
self.assertIn("omega_window_alive", src,
|
|
256
|
+
"menu must call tmux.omega_window_alive() to render the "
|
|
257
|
+
"AISB / Hermès status dots")
|
|
258
|
+
|
|
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."""
|
|
263
|
+
import inspect
|
|
264
|
+
from omega_engine.tui import _arrow_menu
|
|
265
|
+
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)
|
|
270
|
+
|
|
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
|
+
|
|
322
|
+
class TestOmegaWindowAliveHelper(unittest.TestCase):
|
|
323
|
+
"""tmux.omega_window_alive() — the helper the chat-first TUI uses
|
|
324
|
+
to know whether AISB-chat / Hermès-chat are running."""
|
|
325
|
+
|
|
326
|
+
def test_returns_false_when_no_omega_session(self):
|
|
327
|
+
"""When the Omega master tmux session is dead, ANY window query
|
|
328
|
+
must return False — never raise."""
|
|
329
|
+
from omega_engine.tmux import omega_window_alive
|
|
330
|
+
# Use a definitely-unique window name to avoid colliding with
|
|
331
|
+
# any real session the developer might have running.
|
|
332
|
+
self.assertIsInstance(omega_window_alive("____nonexistent_xyz"), bool)
|
|
333
|
+
|
|
334
|
+
|
|
179
335
|
if __name__ == "__main__":
|
|
180
336
|
unittest.main()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.19.
|
|
1
|
+
0.19.40
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# OmegaOS v0.19.39 — chat-first TUI + rules folder + prompt audit + Paperclip live sync
|
|
2
|
+
|
|
3
|
+
> 4 parallel chantiers landed in one ship.
|
|
4
|
+
> The user's invariant: *"l'utilisateur, une fois qu'il a setup tout l'outil
|
|
5
|
+
> OmegaOS, doit être 100% fonctionnel. Il n'a rien à faire à part l'utiliser."*
|
|
6
|
+
|
|
7
|
+
## 1. What changed
|
|
8
|
+
|
|
9
|
+
| Chantier | Owner | Files touched | Net effect |
|
|
10
|
+
|---|---|---|---|
|
|
11
|
+
| **#1 TUI redesign (chat-first)** | main session | `tui.py` (+200 lines), `tmux.py` (+14 lines), `tests/test_tui_runtime.py` (+87 lines) | The TUI opens on CONVERSATIONS (AISB / Hermès / live Oracles / live Workers with ●/○ status dots) instead of an action menu. Everything else collapses into **MENU** with sub-menus. |
|
|
12
|
+
| **#2 Rules folder** | background agent | `omega/Agentik_SSOT/rules/{three-laws,orchestration,prompt-protocols,audit-gates,scope-safety,verified-completion}.md` (6 new files, 1250 lines), `constitution.md` (+frontmatter only) | The rule set every LLM CLI reads is now COMPLETE. 7 files, YAML-frontmatter envelope, full cross-references, ~1300 lines total. No fabrication — every protocol sourced from existing docs. |
|
|
13
|
+
| **#3 Prompt audit + doctor sections** | background agent | `omega_engine/prompt_audit.py` (395 lines, new), `tests/test_prompt_audit.py` (199 lines, new), `cli.py` (+39 lines) | New `omega doctor` sections `prompts` and `orchestration`. The audit scores each agent role /100 against Three Laws + LMC + `.done.json` references. Surfaces real drift (current suite average 52/100). |
|
|
14
|
+
| **#4 Paperclip live status** | background agent | `omega_engine/paperclip_bridge.py` (+`is_running()` + `PaperclipStatus`), `tests/test_paperclip_status.py` (new) | TUI can show ●/○ next to "Paperclip dashboard" with the live port. 3-tier probe (pidfile → port-scan → none), ≤0.3s worst case, never raises. |
|
|
15
|
+
| **#5 Integration + ship** | main session | `package.json`, `pyproject.toml`, `__init__.py`, `VERSION`, this doc | Version bump, commit, push, npm publish. |
|
|
16
|
+
| **#6 Role-prompt enrichment** | follow-up (NOT in this ship) | — | The doctor surfaces 10 weak role prompts; enriching them to ≥80/100 is intentionally deferred — the audit infrastructure is what we needed. |
|
|
17
|
+
|
|
18
|
+
## 2. The new TUI (chat-first)
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
── CONVERSATIONS ──
|
|
22
|
+
● AISB master claude (Max OAuth)
|
|
23
|
+
○ Hermès claude (Anthropic API)
|
|
24
|
+
|
|
25
|
+
— Active Oracles (2) —
|
|
26
|
+
● Causio-oracle-2 project: Causio
|
|
27
|
+
● DentistryGPT-oracle project: DentistryGPT
|
|
28
|
+
— Active Workers (1) —
|
|
29
|
+
● DentistryGPT-worker-3-ux-fix task: ux-fix
|
|
30
|
+
|
|
31
|
+
── QUICK ACTIONS ──
|
|
32
|
+
+ New AISB chat fresh session
|
|
33
|
+
+ New Hermès chat fresh session
|
|
34
|
+
+ New project Genesis pipeline
|
|
35
|
+
Run a mission verified completion
|
|
36
|
+
○ Paperclip dashboard not running
|
|
37
|
+
|
|
38
|
+
── MENU ──
|
|
39
|
+
Quality Arsenal 17 forensic audits
|
|
40
|
+
Setup & config LLM: claude_code
|
|
41
|
+
Infrastructure sessions, scrape
|
|
42
|
+
Health checks doctor, status
|
|
43
|
+
Paperclip governance register, status
|
|
44
|
+
|
|
45
|
+
── EXIT ──
|
|
46
|
+
Detach session keeps running
|
|
47
|
+
Quit Omega kills the tmux session
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Picking any conversation row** (Oracle / Worker / AISB / Hermès) attaches to
|
|
51
|
+
that tmux session via `tmux select-window` (for Omega windows) or
|
|
52
|
+
`tmux switch-client` (for foreign sessions). One click → in the conversation.
|
|
53
|
+
|
|
54
|
+
**Sub-menus** open in cascaded fzf with `← back` exit rows.
|
|
55
|
+
|
|
56
|
+
## 3. The rules folder — what an LLM now reads at runtime
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
omega/Agentik_SSOT/rules/
|
|
60
|
+
├── constitution.md (frontmatter: priority=1) — the Prime Principle
|
|
61
|
+
├── three-laws.md (priority=2) — operational discipline per law
|
|
62
|
+
├── orchestration.md (priority=3) — L0-L5 dispatch hierarchy
|
|
63
|
+
├── prompt-protocols.md (priority=4) — brief/done/blocked schemas + LMC
|
|
64
|
+
├── audit-gates.md (priority=5) — 17 Quality Arsenal audits as gates
|
|
65
|
+
├── scope-safety.md (priority=6) — files_owned + Sacred Scopes
|
|
66
|
+
└── verified-completion.md (priority=7) — done_clean contract + third-party rule
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
These files are mirrored into every LLM's persona dir at install time
|
|
70
|
+
(via `step_personas` from v0.19.38). So whether the operator runs
|
|
71
|
+
`claude`, `gemini`, `codex`, `qwen`, or `opencode` inside an AISB chat,
|
|
72
|
+
they ALL see the same complete rule set — no per-LLM drift.
|
|
73
|
+
|
|
74
|
+
## 4. The new `omega doctor` output (sections that didn't exist before)
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
omega doctor — OMEGA_HOME=…/Omega
|
|
78
|
+
…
|
|
79
|
+
-- personas -- (NEW in v0.19.38)
|
|
80
|
+
[ok] canonical: Agentik_SSOT/personas/OMEGAOS-CONTEXT.md (3402B)
|
|
81
|
+
[ok] chat-contexts/aisb-master/: 8 persona files
|
|
82
|
+
[ok] chat-contexts/hermes/: 8 persona files
|
|
83
|
+
…
|
|
84
|
+
-- prompts -- (NEW in v0.19.39)
|
|
85
|
+
[ok] CLAUDE: 90/100
|
|
86
|
+
[warn] morpheus: 75/100 — missing: LMC protocol
|
|
87
|
+
[warn] link: 65/100 — missing: LMC protocol
|
|
88
|
+
[FAIL] oracle: 45/100 — missing: LMC protocol, `.done.json` contract
|
|
89
|
+
[warn] average suite score: 52.0/100
|
|
90
|
+
[warn] weak prompts (<60): architect, construct, keymaker, …
|
|
91
|
+
|
|
92
|
+
-- orchestration -- (NEW in v0.19.39)
|
|
93
|
+
[ok] AISB master prompt
|
|
94
|
+
[ok] Oracle role prompt
|
|
95
|
+
[ok] Worker-class prompts
|
|
96
|
+
[ok] Checker prompts (Seraph/Smith)
|
|
97
|
+
[ok] LMC protocol document
|
|
98
|
+
[warn] shared `.done.json` vocab: 33% of agents
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The 52/100 average is **real drift**, not a bug. Most role prompts rely
|
|
102
|
+
on the engine's `load_agent_prompt()` to concatenate `lmc-protocol.md`
|
|
103
|
+
at spawn time, so the on-disk role file is silent. The audit makes that
|
|
104
|
+
drift VISIBLE — an operator editing `oracle.md` now has a clear signal
|
|
105
|
+
that the contract is implicit. Enriching the role files to score ≥80
|
|
106
|
+
is chantier #6, deferred to v0.19.40.
|
|
107
|
+
|
|
108
|
+
## 5. Paperclip status integration
|
|
109
|
+
|
|
110
|
+
`omega_engine.paperclip_bridge.is_running()` returns a `PaperclipStatus`
|
|
111
|
+
with `running: bool, pid, port, url, detection`. Three detection paths:
|
|
112
|
+
|
|
113
|
+
| # | Method | Latency | Hint emitted in TUI |
|
|
114
|
+
|---|---|---|---|
|
|
115
|
+
| 1 | `~/.paperclip/run/dashboard.pid` + `os.kill(pid, 0)` | ~5ms | `localhost:8080` |
|
|
116
|
+
| 2 | TCP connect 127.0.0.1:8080, 0.2s timeout | ≤200ms | `localhost:8080` |
|
|
117
|
+
| 3 | Neither — fall through | <1ms | `not running` |
|
|
118
|
+
|
|
119
|
+
The TUI's QUICK ACTIONS row renders a ●/○ dot using this probe — the
|
|
120
|
+
user sees at-a-glance whether their Paperclip governance daemon is live.
|
|
121
|
+
|
|
122
|
+
## 6. Multi-agent integration — the user's question, answered with code
|
|
123
|
+
|
|
124
|
+
| Question (from the user's brief) | Answer | File reference |
|
|
125
|
+
|---|---|---|
|
|
126
|
+
| Multi-agents bien setup? | ✅ 14 agents (Hermès + 13 AISB) — templates landed at install via `step_aisb_suite`; persona context mirrored to all 10 LLM filenames via `step_personas`. | `bootstrap/lib/steps.sh:279-293` + `omega_engine/personas.py` |
|
|
127
|
+
| Tmux orchestration AISB/Oracle/Workers? | ✅ Session naming convention parsed by `tmux.categorize()`; TUI now LISTS them with status dots and one-click attach. | `omega_engine/tmux.py:47-90` + `tui.py:528-557` |
|
|
128
|
+
| Rules respectés pour chaque LLM? | ✅ 7 rule files at `Agentik_SSOT/rules/` are mirrored to every LLM persona dir; doctor's `prompts` section verifies role files reference them. | `Agentik_SSOT/rules/*.md` + `omega doctor prompts` |
|
|
129
|
+
| Dossier maître linké pour le LLM? | ✅ `Agentik_SSOT/personas/OMEGAOS-CONTEXT.md` is the canonical; `Agentik_SSOT/agents/aisb/CLAUDE.md` is the AISB master; both auto-mirrored to per-LLM filenames (CLAUDE.md, GEMINI.md, AGENTS.md, QWEN.md, .opencode/CONTEXT.md, …) at install time. | `step_personas` from v0.19.38 |
|
|
130
|
+
| Tout setup à l'install, rien à faire post-install? | ✅ Install steps 25 (aisb-suite), 37 (hermes-brief), 38 (personas) all eager-seed. `npx -y @agentikos/omega-os@latest --full` is sufficient. | `install.sh STEPS[]` |
|
|
131
|
+
| Visibilité sur ce qui se passe? | ✅ TUI chat-first view + `omega doctor` 23 sections (incl. NEW personas/prompts/orchestration). | `tui.py::_arrow_menu` + `cli.py::cmd_doctor` |
|
|
132
|
+
|
|
133
|
+
## 7. Tests (regression-locked)
|
|
134
|
+
|
|
135
|
+
| Chantier | New tests | Suite total |
|
|
136
|
+
|---|---|---|
|
|
137
|
+
| Baseline (v0.19.38) | — | 627 passed |
|
|
138
|
+
| #1 TUI chat-first | +7 (TestChatFirstRedesign + TestOmegaWindowAliveHelper) | +7 |
|
|
139
|
+
| #3 Prompt audit | +5 (full-score, missing-laws, banned-phrases, real-suite, real-orchestration) | +5 |
|
|
140
|
+
| #4 Paperclip status | +5 (no-pidfile, stale-pidfile, live-pidfile, port-scan, url-field) | +5 |
|
|
141
|
+
| **v0.19.39 total** | **+17 new** | **644 passed, 0 regressions** |
|
|
142
|
+
|
|
143
|
+
Chantier #2 (rules folder) is documentation-only — no Python code, no tests
|
|
144
|
+
needed; format validated by manual grep + YAML parse.
|
|
145
|
+
|
|
146
|
+
## 8. Verdict
|
|
147
|
+
|
|
148
|
+
✅ TUI is now **conversation-first** as the user requested ("L'objectif…
|
|
149
|
+
c'est d'avoir une interface extrêmement simple… cette interface permet de
|
|
150
|
+
voir la conversation avec AISB… ensuite, de voir les conversations avec
|
|
151
|
+
les oracles et les conversations avec les workers").
|
|
152
|
+
✅ Setup/config/audits/scrape/governance moved to sub-menus reachable via
|
|
153
|
+
**MENU** (one row).
|
|
154
|
+
✅ Paperclip dashboard has a live status dot and is reachable in one pick.
|
|
155
|
+
✅ Rules folder is COMPLETE (7 files, 1301 lines, cross-referenced).
|
|
156
|
+
✅ `omega doctor` now surfaces the orchestration health (prompts + chain).
|
|
157
|
+
✅ No regression in existing 627 tests.
|
|
158
|
+
|
|
159
|
+
The user's "il n'a rien à faire à part l'utiliser" invariant is preserved:
|
|
160
|
+
one `npx -y @agentikos/omega-os@latest --full` and the new menu, the new
|
|
161
|
+
rules, the new audit, and the live Paperclip indicator are all in place.
|
|
@@ -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.
|