Skip to content

feat(gui): adopt the shared desktop GUI (Flavian/Vespasian pattern) - #130

Merged
PAMulligan merged 12 commits into
mainfrom
feat/desktop-gui-122
Sep 13, 2026
Merged

PAMulligan merged 12 commits into
mainfrom
feat/desktop-gui-122

Conversation

@PAMulligan

Copy link
Copy Markdown
Collaborator

Summary

Closes #122. Adds packages/gui/ (@aurelius/gui), a cross-platform Electron desktop app that drives Aurelius's existing scripts and Claude Code through four screens, using the same engine, layering, and commands Flavian and Vespasian ship.

Approach. Forked Vespasian's manifest-driven GUI engine verbatim from the local clone (deb6c1c), stripped its Wix screen, and retargeted it with one Aurelius ProductManifest plus four bespoke React panels. Dependencies are bumped to Flavian's current, security-swept versions (electron-vite 5, electron-builder 26). Core stays pure Node and is unit-tested headless; the renderer can only call named, typed bridge operations.

Screens, each driving existing scripts unchanged:

Screen Wraps
Prerequisites new scripts/check-prerequisites.sh (sibling output format), scripts/setup-playwright.sh via an install button
Setup wizard (Next.js / Vite / Astro / SvelteKit / Expo, optional dry run) scripts/setup-project.sh <name> --renderer <id> [--dry-run]
Build from Figma claude -p "/build-from-figma <url>" (headless Claude Code)
Visual QA (app URL + capture baselines / regression / responsive / dark mode / cross-browser; renders reports and PNG galleries under .claude/visual-qa/) capture-baselines.sh, regression-test.sh, check-responsive.sh, check-dark-mode.sh, cross-browser-baseline.sh compare

Engine changes (generic, documented in packages/gui/docs/GUI-PLATFORM.md): a runStep(screen, step, vars) bridge/IPC channel replacing the per-screen runSite/runQa handlers; fillTemplate drops empty placeholder-only args so optional flags never produce a stray ''; the wizard is a plain bashScript step (the module descriptor is removed).

Also: root gui:* scripts, .github/workflows/gui.yml (path-filtered lint → typecheck → tests, plus an Xvfb smoke launch), docs/GUI.md, the README "Desktop GUI (experimental)" section, CLAUDE.md tree/commands, .versionrc.json bumpFiles so the GUI version tracks releases, and a documented script count of 56. Design spec and implementation plan are under docs/superpowers/.

Deferred (follow-ups): gui-release.yml attaching installers to releases; Canva / screenshot / conversation / InDesign pipeline steps; Lighthouse and Storybook QA steps; node-pty interactive sessions.

Test plan

  • pnpm gui:lint, pnpm gui:typecheck, pnpm gui:test (43 headless core tests: process runner, shell resolver, prereq parser against fixtures of the real script, command building from the manifest, wizard arg mapping, pipeline launch, QA discovery, sandboxed artifact reads, project detection, manifest shape incl. "every script it names exists")
  • scripts/__tests__/check-prerequisites.test.js pins the script's output contract; full script suite passes (40 files, 527 tests); root lint + Prettier clean; doc-count check clean
  • pnpm gui:build then the smoke test launches the app and reaches the shell (locally on a real display; CI runs it under Xvfb)
  • Screenshots of all four screens captured through Playwright; Prerequisites ran the real script; a wizard dry run through the GUI streamed the script's plan and created nothing
  • pnpm gui:package produces packages/gui/dist/Aurelius-2.0.0.AppImage; the packaged binary launches (app.isPackaged === true) and renders the prerequisite report
  • commit-and-tag-version --dry-run bumps both package.json and packages/gui/package.json
  • After merge: pnpm gui:dev on macOS/Windows (Git Bash required on Windows)

🤖 Generated with Claude Code

Paul Mulligan and others added 12 commits September 12, 2026 21:09
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Copied verbatim from PMDevSolutions/Vespasian packages/gui (deb6c1c), with the
Wix site screen removed, identity renamed to Aurelius, and dependencies bumped to
Flavian's current versions. The manifest, core, main, and renderer are retargeted
in the following commits.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…d, visual QA

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…@aurelius/gui

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ages/gui

pnpm/action-setup refuses a pinned version when package.json carries
packageManager (pnpm 10), so the GUI lane reads it like ci.yml does. ESLint 10
resolves config per file and would load the GUI's ESLint 9 + eslint-plugin-react
config (which has no ESLint 10 release yet) and crash; the package lints itself
in its own lane, so the root config ignores it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@PAMulligan
PAMulligan merged commit de4a0ba into main Sep 13, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Adopt the shared desktop GUI installer (Flavian/Vespasian pattern)

1 participant