# UI/UX Pro Max Core (Phase A) This package includes an optional, lazy UI/UX Pro Max core integration. The normal `superpowers-dsh` preset is unchanged; install `superpowers-dsh-uiux` only when the optional UI/UX tools are needed. ## Install and smoke test From the package root: ~~~powershell node scripts/install-preset.mjs --variant uiux python --version node scripts/smoke-uiux-core.mjs ~~~ The Host service is lazy: it starts the Python-backed core only when an optional operation is requested. Python packages are never auto-installed. External MCP support arrives in Phase B. ## Data and contracts The upstream data is pinned to revision `e4f45473691e4b389519ee4bc359a3d6df666c26`. Search and generation responses retain provenance envelopes with bounded source identifiers and the pinned revision. Persistence results are constrained to the configured workspace and do not expose absolute paths. The optional tools expose the core search and generation contracts. Their model-facing parameter schemas encode the same conditional rules with `oneOf`, so the model is shown the valid shapes before dispatch. Search accepts `query`, either `domain` or `stack` (mutually exclusive), optional `max_results` (integer 1..20), and `diagnostics` (boolean). Generation accepts `query`, optional `project_name`, `format`, `variance`, `motion`, `density`, and `persist`; `page` and `force` are exposed only in the `persist: true` branch. Persistence forbids model-supplied absolute output paths and remains below the trusted workspace. The core retains normalized validation as a second defense and reports errors for unavailable Python runtimes, upstream failures, cancellation, closed cores, and unsafe persistence paths. ## Verification ~~~powershell npm test npm run verify:uiux npm run install-preset:uiux ~~~ Use a disposable `DSH_HOME` for installation checks. Install the base and UI/UX variants, confirm their metadata, verify a repeat install refuses without `--force`, and confirm `--force` creates a timestamped backup. ### Fresh-agent acceptance record (controller-owned) Step 9 was executed on the restarted disposable DSH Web profile; the exact evidence is recorded below. ~~~text URL: http://127.0.0.1:3081 DSH_HOME: D:\Code\_dsh_uiux_task5_acceptance cwd: D:\Code\superpowers-for-dsh\.worktrees\ui-ux-pro-max Install: dsh plugin --profile web add 'D:\Code\superpowers-for-dsh\.worktrees\ui-ux-pro-max' — exit 0; disposable profile initialized Preset install: node scripts/install-preset.mjs and --variant uiux — both exit 0; destinations .agent-presets\superpowers-dsh and .agent-presets\superpowers-dsh-uiux Restart: stopped and relaunched dsh web --no-open --port 3081 Post-restart: host.describe attachedSessions 0; agentPreset.list included superpowers-dsh and superpowers-dsh-uiux Fresh base: session-e4ec8ff4-938c-455b-acfc-61bd8ab05b1f — 25 tools; no ui_ux_search/ui_ux_generate; READY prompt Fresh UI/UX: session-513e7fd8-90b3-43be-bd5d-40c97705ed44 — 27 tools including both; search seq 40/result 41 running:false, revision e4f45473691e4b389519ee4bc359a3d6df666c26, count 2; generate seq 102/result 103 running:false, project Metrics, pinned revision/source IDs Cancellation: session-f2762cfa-daf4-4ae2-9f19-064d02f7fb50; pwsh seq 44 Start-Sleep -Seconds 60; cancel accepted; seq 45 Error: tool call aborted (AbortError/ABORTED); turn/end seq 47 reason user-aborted; session.list running:false Result: PASS ~~~ The disposable server was stopped after acceptance. Earlier model-route attempts with invalid domain+stack or missing credentials are excluded from success evidence.