Replace the plain-text API-key-only wizard with a branded, clack-based onboarding experience that guides first-launch users through LLM provider authentication (OAuth or API key), optional tool API keys, and a summary. - Create src/logo.ts as single source of truth for ASCII logo - Create src/onboarding.ts with shouldRunOnboarding() and runOnboarding() - Trim src/wizard.ts to env hydration only (loadStoredEnvKeys) - Wire onboarding into src/cli.ts, add `gsd config` subcommand - Remove duplicate first-launch banner from src/loader.ts Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
27 lines
1.1 KiB
TypeScript
27 lines
1.1 KiB
TypeScript
/**
|
|
* Shared GSD block-letter ASCII logo.
|
|
*
|
|
* Single source of truth — imported by:
|
|
* - scripts/postinstall.js (via dist/logo.js)
|
|
* - src/onboarding.ts (via ./logo.js)
|
|
*/
|
|
|
|
/** Raw logo lines — no ANSI codes, no leading newline. */
|
|
export const GSD_LOGO: string[] = [
|
|
' ██████╗ ███████╗██████╗ ',
|
|
' ██╔════╝ ██╔════╝██╔══██╗',
|
|
' ██║ ███╗███████╗██║ ██║',
|
|
' ██║ ██║╚════██║██║ ██║',
|
|
' ╚██████╔╝███████║██████╔╝',
|
|
' ╚═════╝ ╚══════╝╚═════╝ ',
|
|
]
|
|
|
|
/**
|
|
* Render the logo block with a color function applied to each line.
|
|
*
|
|
* @param color — e.g. picocolors.cyan or `(s) => `\x1b[36m${s}\x1b[0m``
|
|
* @returns Ready-to-write string with leading/trailing newlines.
|
|
*/
|
|
export function renderLogo(color: (s: string) => string): string {
|
|
return '\n' + GSD_LOGO.map(color).join('\n') + '\n'
|
|
}
|