Skip to content

LUCID TUI welcome: replace omp logo + version banner with LUCID branding (keep pink skin) #314

Description

@alexander-blackwell

Summary

The gated LUCID terminal (lucid / lucid tui) wears the LUCID pink skin (P-THEME.1, ADR-0160) but still shows omp's own welcome box: the block-Π logo and the omp v16.3.6 title. So a LUCID terminal still reads as omp.

Change the splash so it shows the LUCID logo and contains no "omp" text, while keeping the existing pink skin.

Current splash (unchanged from base omp except the pink palette):

┌ omp v16.3.6 ────────────────────────────────────────────────
│   Welcome back!            Tips
│      ▀████████▀            # for prompt actions
│       ██   ██              / for commands
│       ██   ██              ! to run bash
│      ▄██▄ ▄██▄             $ to run python
│   Claude Opus 4.8          ...

Current behavior (grounded in the pinned omp 16.3.6 source)

  • The splash is omp's WelcomeComponent (@oh-my-pi/pi-coding-agent/src/modes/components/welcome.ts), added unconditionally to the transcript in interactive-mode.ts:850.
  • Logo = hardcoded module const PI_LOGO (welcome.ts:454) — the Π block art — painted through the gradient (gradientLogo / REST_FRAME).
  • Title = `${APP_NAME} v${this.version}` (welcome.ts:357). APP_NAME is a hardcoded const "omp" in @oh-my-pi/pi-utils/src/dirs.ts:20, used pervasively (config dir .omp, log file names) — must not be changed.
  • WelcomeComponent's constructor takes only (version, modelName, providerName, recentSessions, lspServers)no logo or product-name injection seam.
  • The extension UI API (ExtensionUIContext, dist/types/extensibility/extensions/types.d.ts) exposes setTheme (what P-THEME.1 uses) but no logo/name/welcome override. It does expose setWidget (above/below the editor), setHeader, custom, and notify.
  • The entire welcome box is gated by the startup.quiet setting (interactive-mode.ts:840,848; schema config/settings-schema.ts:1543, default false) — "Skip welcome screen and startup status messages".
  • omp supports per-session --config <overlay> overlays (main.ts:161) — a route to set startup.quiet: true for only the LUCID session without touching the user's global ~/.omp/agent/config.yml.

Net: the logo and the product name are frozen omp module constants with no supported override, so there is no way to swap just the logo/title inside omp's welcome box without forking omp.

Constraints

  • Invariant feat/mac-build #1 (extend omp, never fork): no patching bundled omp / PI_LOGO / APP_NAME.
  • Invariant build(deps): bump actions/setup-python from 5 to 6 #6 (frozen prompt prefix, byte-stable): the welcome is terminal chrome, not prompt bytes, but the prefix-hash test must stay green.
  • Fail-OPEN cosmetics (mirror P-THEME.1 / ADR-0160): any failure degrades to "not branded" and NEVER blocks/kills a session or weakens the fail-closed gate (invariant build(deps): bump github/codeql-action from 3 to 4 #3).
  • Keep the pink LUCID skin (P-THEME.1) intact.
  • Bare omp must be visually unaffected (no global config/theme writes).

Recommended approach (mirrors P-THEME.1)

  1. New optional -e extension harness/omp/lucid_welcome_extension.ts (sibling of lucid_theme_extension.ts), threaded in harness/launcher/lucid_acp.ts buildTuiArgs / runTui after the mandatory gate -e and the theme -e. TUI-only (the theme is too; ACP/desktop have their own chrome).
  2. Suppress omp's welcome box per-session by setting startup.quiet: true via a LUCID-owned --config overlay passed to the omp child (NOT the user's global config.yml). Confirm during implementation that a --config overlay is the least-invasive per-session route on 16.3.6; otherwise fall back to another per-session mechanism.
  3. The extension renders a LUCID-branded welcome via a supported extension UI surface (candidate: setWidget above the editor, or a startup message). Content:
    • the LUCID block mark — reuse/adapt .github/assets/cli-banner.txt (already a LUCID block wordmark), or derive from desktop/build/icon.svg / desktop/renderer/about.ts lucidLogo();
    • a LUCID v<version> line using LUCID's version (desktop/version.ts APP_VERSION), never omp's;
    • the model name.
    • Reuse omp's exported gradientLogo for palette parity with the pink skin. Optionally re-surface tips / recent-sessions / LSP via omp's exported renderWelcomeTip + RecentSession / LspServerInfo if we want feature parity with today's box.
  4. Escape hatch env (mirror LUCID_THEME): LUCID_WELCOME=off restores omp's default welcome.

Alternatives considered (rejected)

  • Patch bundled omp PI_LOGO / APP_NAME — a fork; violates invariant feat/mac-build #1. Changing APP_NAME also breaks .omp config/log path resolution.
  • Post-process omp's TUI stdout to rewrite the frame — fragile against ANSI + differential rendering.
  • Write startup.quiet / branding into the global config.yml — leaks into bare omp; violates the P-THEME.1 "only the gated session is branded" principle.

Acceptance criteria

  • lucid / lucid tui splash shows the LUCID logo and contains no "omp" substring (title, logo, or version line).
  • The version line shows LUCID's version, not omp's.
  • The pink LUCID skin (P-THEME.1) still applies.
  • Bare omp is visually unchanged (no global config/theme writes).
  • Fail-open: with the welcome extension forced to fail (and with LUCID_WELCOME=off), the session still starts; a dead scanner still causes exit 1 with zero omp spawns (fail-closed untouched).
  • -e order: gate first, then theme, then welcome; appended policy + user passthru unchanged.
  • Prefix-hash test green (invariant build(deps): bump actions/setup-python from 5 to 6 #6); make test green; a new make demo-<increment> green; new unit tests for the extension (provisioning / fail-open / argv order), mirroring lucid_theme_extension.test.ts + launcher/lucid_acp.test.ts.

Open questions

  • Exact render API for the branded welcome (setWidget vs. a transcript startup message vs. custom) — finalize against the installed omp (16.3.6) during implementation.
  • Keep a minimal LUCID banner, or re-surface omp's tips / LSP / recent-sessions for full parity? (Users rely on those today.)
  • Confirm --config overlay is the cleanest per-session startup.quiet route on 16.3.6.
  • Final LUCID TUI logo art (full block wordmark vs. a compact mark) and the increment id (proposed: P-BRAND.1).

References

  • P-THEME.1 / ADR-0160 (the pink skin — the pattern to mirror): harness/omp/lucid_theme_extension.ts, harness/launcher/lucid_acp.ts, docs/NEOVIM.md.
  • omp 16.3.6: src/modes/components/welcome.ts (PI_LOGO:454, title:357), src/modes/interactive-mode.ts:840-864, @oh-my-pi/pi-utils/src/dirs.ts:20 (APP_NAME), src/config/settings-schema.ts:1543 (startup.quiet), dist/types/extensibility/extensions/types.d.ts (ExtensionUIContext).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions