speedy75015-crypto e2effd5775
fix(data): make catalog snapshot hashes line-ending independent (#478)
* fix(data): regenerate stale catalog-summary snapshot hashes

catalog-summary.json was not regenerated after google-fonts.csv,
google-font-licenses.json, icons.csv and phosphor-icons-upstream.json
changed, so `npm --prefix cli run verify:data` fails on a clean
checkout of main:

  validate:semantic          4 stale snapshot errors
  validate:catalog-summary   "catalog-summary.json is stale"
  test:python                1 failure / 153
  check:assets               2 files out of sync

Regenerated with the existing --verified-at 2026-08-26: only the four
sha256 fields change. The date is a human attestation that the font
catalog was checked against the upstream google/fonts repository, so it
is deliberately left untouched -- no such verification was performed
here.

verify:data now exits 0.

Note: prepublishOnly runs sync:assets before verify:data, which
regenerates the snapshot at publish time. That is why released packages
are unaffected and the drift stayed invisible on main.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015UidECV1wVBD8SW6Abuj71

* fix(data): make catalog snapshot hashes line-ending independent

Root cause of the stale snapshot restored in the previous commit.

bd19ab9 (#462) regenerated catalog-summary.json from a CRLF checkout.
Every recorded sha256 was the CRLF hash of its source file, so the
check failed on every LF platform. The four committed values are
exactly sha256(crlf_bytes):

  google-fonts.csv              committed d03194d2…  = CRLF hash
  google-font-licenses.json     committed 7c35e410…  = CRLF hash
  icons.csv                     committed 272ccf0e…  = CRLF hash
  phosphor-icons-upstream.json  committed 81c37fb3…  = CRLF hash

Two conditions had to combine: the digest hashed raw bytes, and no
.gitattributes pinned these files to LF, so Windows checkouts get CRLF
by default. Restoring the hashes alone would let the next contributor
on Windows reproduce the same commit.

Three changes:

- normalize line endings in generate-catalog-summary.py's digest(), so
  the snapshot no longer depends on the checkout
- apply the same normalization in validate_data.py, which independently
  recomputes the hashes and has to agree with the generator
- add .gitattributes pinning src/ui-ux-pro-max/data/*.{csv,json} to LF,
  so a Windows checkout matches the committed bytes in the first place

sync-assets.mjs already normalizes to LF, so this only extends an
existing project convention to the two places that were missing it.

Adds test_catalog_summary_line_endings.py: LF and CRLF inputs must
digest identically, the committed snapshot must match the normalized
sources, and a simulated CRLF checkout must still produce the recorded
hashes. The third case fails against the pre-fix digest.

verify:data exits 0; the Python suite goes from 153 to 156 tests.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015UidECV1wVBD8SW6Abuj71

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 14:14:59 +07:00
..

ui-ux-pro-max-cli

CLI to install UI/UX Pro Max skill for AI coding assistants.

Installation

npm install -g ui-ux-pro-max-cli

Usage

# Install for specific AI assistant
uipro init --ai claude      # Claude Code
uipro init --ai cursor      # Cursor
uipro init --ai windsurf    # Windsurf
uipro init --ai antigravity # Antigravity
uipro init --ai copilot     # GitHub Copilot
uipro init --ai kiro        # Kiro
uipro init --ai codex       # Codex (Skills)
uipro init --ai roocode     # Roo Code
uipro init --ai qoder       # Qoder
uipro init --ai gemini      # Gemini CLI
uipro init --ai trae        # Trae
uipro init --ai opencode    # OpenCode
uipro init --ai universal   # Universal / Agent Standard (.agents/skills/)
uipro init --ai all         # All assistants

# Options
uipro init --offline        # Compatibility flag; installs bundled templates
uipro init --force          # Overwrite existing files
uipro init --global         # Install globally to home directory (~/)

# Other commands
uipro versions              # List available versions
uipro update                # Update the global CLI to the latest release
uipro update --global       # Refresh globally installed skill files from this CLI package

GitHub Authentication

GitHub's unauthenticated API allows 60 requests/hour per IP. If you hit rate limits, you can provide a GitHub Personal Access Token (PAT) to raise the limit to 5,000 requests/hour.

Options (in order of precedence):

# 1. Pass directly as a flag (one-off use)
uipro init --token ghp_yourtoken
uipro versions --token ghp_yourtoken
uipro update --token ghp_yourtoken

# 2. Set as a project-scoped environment variable (recommended)
export UI_PRO_MAX_GITHUB_TOKEN=ghp_yourtoken
uipro init

# 3. Fallback: GITHUB_TOKEN is also read if UI_PRO_MAX_GITHUB_TOKEN is not set
export GITHUB_TOKEN=ghp_yourtoken
uipro init

Creating a token: Go to https://github.com/settings/tokens, click Generate new token (classic), and select no scopes — public repo access requires no permissions. Copy the token and store it as an environment secret; never hardcode it in source files.

Warning: GITHUB_TOKEN is automatically injected by GitHub Actions with broad repo permissions. Prefer UI_PRO_MAX_GITHUB_TOKEN in CI to avoid accidentally attaching workflow credentials to release download requests.

How It Works

uipro init generates assistant-specific files from the templates bundled with the installed CLI package. To get newer templates and data, update the package, then regenerate:

uipro update                   # updates the global CLI to the latest release
uipro init --ai codex --force  # regenerate skill files from the new package

uipro update runs npm install -g ui-ux-pro-max-cli@latest for you (it shells out to npm only on Windows, where npm is a .cmd). You can still run that command manually if you prefer. When the CLI is already current, uipro update just refreshes the installed skill files.

Development

# Install dependencies
bun install

# Run locally
bun run src/index.ts --help

# Build
bun run build

# Sync bundled CLI assets from the source skill
npm run sync:assets

# Verify bundled assets are current before publishing
npm run check:assets

# Link for local testing
bun link

License

CC-BY-NC-4.0