6597809847
* feat(cli): unify terminal output contract + add omnigent wordmark Adds a single, documented styling layer so every `omnigent` command reads as one coherent, branded product, and a bold "ANSI-Shadow" omnigent wordmark paired with the Otto mascot. New modules: - omnigent/inner/wordmark.py — the brand art: a regenerable per-letter glyph map for the 3-row ANSI-Shadow wordmark, the Otto lockup (gradient/tagline/epilogue), and the one-line `✦ omnigent` brandmark. - omnigent/inner/ui.py — shared consoles, brand Theme/palette, status helpers (step/success/info → stdout, warn/error → stderr), structure helpers (header/kv/rule/table/panel), and TTY-gated banner helpers (OMNIGENT_NO_BANNER honored). - designs/CLI_CONTRACT.md — the contract: palette, helper API, the stdout-is-data / stderr-is-decoration rule, gating, new-command checklist. Wiring: - Full lockup on `omnigent --help` and `omnigent setup`; compact brandmark on upgrade / server status / host status / config list (text mode only). - Runner-startup spinner recolored to the brand accent. - Installer (scripts/install_oss.sh): magenta Otto+wordmark banner, palette unified from cyan to brand magenta, TTY-gated. All decoration is on stderr and TTY-gated, so piped/`--json`/`| cat` output stays byte-clean; protocol/IPC stdout is untouched. Colored click.secho call sites routed through the shared helpers. Tests: tests/inner/test_wordmark.py, tests/inner/test_ui.py. Co-authored-by: Isaac * fix(cli): make wordmark 4 rows so g/e are legible The 3-row ANSI-Shadow squash dropped the middle bars that distinguish 'g' and 'e', leaving them unreadable. Keep each letter's identity row (rows 0,2,4,5 of the source font) for a 4-row wordmark — slightly taller, fully legible — and sit it on Otto rows 1-4 so its drop-shadow grounds on Otto's feet. Updates the installer banner and tests to match. * fix(cli): grow wordmark to 5 rows, aligned 1:1 with Otto Use the full-height ANSI-Shadow font (the canonical figlet form, as used by NeonX) with just one duplicate body row dropped — 5 rows, matching Otto's height so the lockup pairs 1:1 with no unpaired rows. Taller and fully legible. Updates the installer banner and tests to match. * refactor(cli): drop the per-command ✦ brandmark; banner on landing only Remove the compact `✦ omnigent` line from version/upgrade/server status/ host status/config list — those commands print unbranded again so the CLI stays quiet and scriptable. The full Otto + wordmark lockup stays on the landing surfaces only: `omnigent --help`, `omnigent setup`, and the installer. The print_brandmark helper remains available for opt-in use but is no longer wired onto any command. Contract doc updated to match.