Implements three wizard UX gaps identified in issue #426:
AC-3: Replace plaintext password prompt in bootstrapFirstUser with a
masked reader (promptMasked) that suppresses echo and requires the user
to type their password twice to confirm. Min-8-chars validation is
preserved and applied after both entries agree.
AC-4: Add a hooks-preview stage (hooksPreviewStage) between
runtimeSetupStage and skillsSelectStage in the wizard. The stage
parses hooks-config.json, displays each hook event/matcher/command,
and prompts the user for consent before installation. Declined → state
recorded with accepted=false. Also adds `mosaic config hooks list|enable|
disable` subcommands to manage installed hooks in ~/.claude/ post-install.
AC-5: Add headless install path to runConfigWizard and bootstrapFirstUser
gated on MOSAIC_ASSUME_YES=1 or !process.stdin.isTTY. Env-var-driven
configuration with required-var validation and non-zero exit on missing
or invalid inputs. Documents all env vars in packages/mosaic/README.md.
Closes#426
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@mosaic/mosaic is now the single package providing both:
- 'mosaic' binary (CLI: yolo, coord, prdy, tui, gateway, etc.)
- 'mosaic-wizard' binary (installation wizard)
Changes:
- Move packages/cli/src/* into packages/mosaic/src/
- Convert dynamic @mosaic/mosaic imports to static relative imports
- Add CLI deps (ink, react, socket.io-client, @mosaic/config) to mosaic
- Add jsx: react-jsx to mosaic's tsconfig
- Exclude packages/cli from workspace (pnpm-workspace.yaml)
- Update install.sh to install @mosaic/mosaic instead of @mosaic/cli
- Bump version to 0.0.17
This eliminates the circular dependency between @mosaic/cli and
@mosaic/mosaic that was blocking the build graph.