epicshop 6.47.1 → 6.47.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport '@epic-web/workshop-utils/init-env'\nimport chalk from 'chalk'\nimport { matchSorter } from 'match-sorter'\nimport yargs, { type ArgumentsCamelCase, type Argv } from 'yargs'\nimport { hideBin } from 'yargs/helpers'\n\n// Check for --help on start command before yargs parses\n// (yargs exits before command handler when help is requested)\nconst args = hideBin(process.argv)\nif (\n\t(args.includes('--help') || args.includes('-h')) &&\n\t(args.length === 0 || args[0] === 'start')\n) {\n\tconst { displayHelp } = await import('./commands/start.js')\n\tdisplayHelp()\n\tprocess.exit(0)\n}\n\n// Helper function to colorize help output\nfunction formatHelp(helpText: string): string {\n\treturn helpText\n\t\t.replace(/^(Commands:)/gm, chalk.cyan.bold('$1'))\n\t\t.replace(/^(Options:)/gm, chalk.cyan.bold('$1'))\n\t\t.replace(/^(Examples:)/gm, chalk.cyan.bold('$1'))\n\t\t.replace(/^\\s{2}(\\S+)\\s{2,}/gm, (match, cmd) => {\n\t\t\treturn match.replace(cmd, chalk.green(cmd))\n\t\t})\n\t\t.replace(/--[\\w-]+/g, (match) => chalk.yellow(match))\n\t\t.replace(/-\\w(?=\\s|,)/g, (match) => chalk.yellow(match))\n}\n\n// Set up yargs CLI\nconst cli = yargs(args)\n\t.scriptName('epicshop')\n\t.usage(chalk.bold('$0 <command> [options]'))\n\t.help('help')\n\t.alias('h', 'help')\n\t.version(false)\n\t.showHelpOnFail(true)\n\t.command(\n\t\t'start [workshop]',\n\t\t'Start a workshop (auto-detects if inside a workshop directory)',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.positional('workshop', {\n\t\t\t\t\tdescribe: 'Workshop name to start (optional if inside a workshop)',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t})\n\t\t\t\t.option('verbose', {\n\t\t\t\t\talias: 'v',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Show verbose output',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.option('app-location', {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'Path to the workshop app directory',\n\t\t\t\t})\n\t\t\t\t.example('$0 start', 'Start the current workshop or select one')\n\t\t\t\t.example('$0 start full-stack-foundations', 'Start a specific workshop')\n\t\t\t\t.example(\n\t\t\t\t\t'$0 start --app-location /path/to/workshop-app',\n\t\t\t\t\t'Start with custom app location',\n\t\t\t\t)\n\t\t},\n\t\tasync (\n\t\t\targv: ArgumentsCamelCase<{\n\t\t\t\tworkshop?: string\n\t\t\t\tverbose?: boolean\n\t\t\t\tsilent?: boolean\n\t\t\t\tappLocation?: string\n\t\t\t}>,\n\t\t) => {\n\t\t\t// If a specific workshop is requested, start it from managed workshops\n\t\t\tif (argv.workshop) {\n\t\t\t\tconst { startWorkshop } = await import('./commands/workshops.js')\n\t\t\t\tconst result = await startWorkshop({\n\t\t\t\t\tworkshop: argv.workshop,\n\t\t\t\t\tsilent: argv.silent,\n\t\t\t\t})\n\t\t\t\tif (!result.success) {\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Check if we're inside any workshop directory (walk up to find package.json with epicshop)\n\t\t\tconst { findWorkshopRoot } = await import('./commands/workshops.js')\n\t\t\tconst workshopRoot = await findWorkshopRoot()\n\n\t\t\tif (workshopRoot) {\n\t\t\t\t// We're inside a workshop directory, start from that root\n\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\tprocess.chdir(workshopRoot)\n\n\t\t\t\ttry {\n\t\t\t\t\t// run migrations before starting\n\t\t\t\t\tawait import('./commands/migrate.js')\n\t\t\t\t\t\t.then(({ migrate }) => migrate())\n\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\t\tconsole.error(chalk.yellow('⚠️ Migration failed:'), error)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\n\t\t\t\t\t// kick off a warmup while we start the server\n\t\t\t\t\timport('./commands/warm.js')\n\t\t\t\t\t\t.then(({ warm }) => warm({ silent: true }))\n\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\t\tconsole.error(chalk.yellow('⚠️ Warmup failed:'), error)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\n\t\t\t\t\tconst { start } = await import('./commands/start.js')\n\t\t\t\t\tconst result = await start({\n\t\t\t\t\t\tappLocation: argv.appLocation,\n\t\t\t\t\t\tverbose: argv.verbose,\n\t\t\t\t\t\tsilent: argv.silent,\n\t\t\t\t\t})\n\n\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\tchalk.red(\n\t\t\t\t\t\t\t\t\t`❌ ${result.message || 'Failed to start workshop application'}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tif (result.error) {\n\t\t\t\t\t\t\t\tconsole.error(chalk.red(result.error.message))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Not inside a workshop, show selection from managed workshops\n\t\t\t\tconst { startWorkshop } = await import('./commands/workshops.js')\n\t\t\t\tconst result = await startWorkshop({ silent: argv.silent })\n\t\t\t\tif (!result.success) {\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'init',\n\t\t'Initialize epicshop and start the tutorial (first-time setup)',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs.example('$0 init', 'Run the first-time setup wizard')\n\t\t},\n\t\tasync () => {\n\t\t\tconst { onboarding } = await import('./commands/workshops.js')\n\t\t\tconst result = await onboarding()\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'add [repo-name]',\n\t\t'Add a workshop by cloning from epicweb-dev GitHub org',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.positional('repo-name', {\n\t\t\t\t\tdescribe:\n\t\t\t\t\t\t'Repository name from epicweb-dev org (optional, shows list if omitted)',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t})\n\t\t\t\t.option('directory', {\n\t\t\t\t\talias: 'd',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'Directory to clone into (defaults to configured repos directory)',\n\t\t\t\t})\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 add', 'Show available workshops to add')\n\t\t\t\t.example(\n\t\t\t\t\t'$0 add full-stack-foundations',\n\t\t\t\t\t'Clone and set up the full-stack-foundations workshop',\n\t\t\t\t)\n\t\t\t\t.example(\n\t\t\t\t\t'$0 add web-forms --directory ~/my-workshops',\n\t\t\t\t\t'Clone workshop to a custom directory',\n\t\t\t\t)\n\t\t},\n\t\tasync (\n\t\t\targv: ArgumentsCamelCase<{\n\t\t\t\trepoName?: string\n\t\t\t\tdirectory?: string\n\t\t\t\tsilent?: boolean\n\t\t\t}>,\n\t\t) => {\n\t\t\tconst { add } = await import('./commands/workshops.js')\n\t\t\tconst result = await add({\n\t\t\t\trepoName: argv.repoName,\n\t\t\t\tdirectory: argv.directory,\n\t\t\t\tsilent: argv.silent,\n\t\t\t})\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'list',\n\t\t'List all added workshops',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 list', 'List all added workshops')\n\t\t},\n\t\tasync (argv: ArgumentsCamelCase<{ silent?: boolean }>) => {\n\t\t\tconst { list } = await import('./commands/workshops.js')\n\t\t\tconst result = await list({ silent: argv.silent })\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'remove [workshop]',\n\t\t'Remove a workshop (deletes the directory)',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.positional('workshop', {\n\t\t\t\t\tdescribe:\n\t\t\t\t\t\t'Workshop to remove (auto-detects if inside a workshop directory)',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t})\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 remove', 'Remove current workshop or select one')\n\t\t\t\t.example(\n\t\t\t\t\t'$0 remove full-stack-foundations',\n\t\t\t\t\t'Remove a specific workshop',\n\t\t\t\t)\n\t\t},\n\t\tasync (\n\t\t\targv: ArgumentsCamelCase<{\n\t\t\t\tworkshop?: string\n\t\t\t\tsilent?: boolean\n\t\t\t}>,\n\t\t) => {\n\t\t\tconst { findWorkshopRoot, remove } = await import(\n\t\t\t\t'./commands/workshops.js'\n\t\t\t)\n\n\t\t\tlet workshopToRemove = argv.workshop\n\n\t\t\t// If no workshop specified, check if we're inside a workshop directory\n\t\t\tif (!workshopToRemove) {\n\t\t\t\tconst workshopRoot = await findWorkshopRoot()\n\t\t\t\tif (workshopRoot) {\n\t\t\t\t\t// Pass the path directly - remove will handle it\n\t\t\t\t\tworkshopToRemove = workshopRoot\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst result = await remove({\n\t\t\t\tworkshop: workshopToRemove,\n\t\t\t\tsilent: argv.silent,\n\t\t\t})\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'open [workshop]',\n\t\t'Open a workshop in your editor',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.positional('workshop', {\n\t\t\t\t\tdescribe:\n\t\t\t\t\t\t'Workshop to open (auto-detects if inside a workshop directory)',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t})\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 open', 'Open current workshop or select one')\n\t\t\t\t.example('$0 open full-stack-foundations', 'Open a specific workshop')\n\t\t},\n\t\tasync (\n\t\t\targv: ArgumentsCamelCase<{\n\t\t\t\tworkshop?: string\n\t\t\t\tsilent?: boolean\n\t\t\t}>,\n\t\t) => {\n\t\t\tconst { findWorkshopRoot, openWorkshop } = await import(\n\t\t\t\t'./commands/workshops.js'\n\t\t\t)\n\n\t\t\tlet workshopToOpen = argv.workshop\n\n\t\t\t// If no workshop specified, check if we're inside a workshop directory\n\t\t\tif (!workshopToOpen) {\n\t\t\t\tconst workshopRoot = await findWorkshopRoot()\n\t\t\t\tif (workshopRoot) {\n\t\t\t\t\t// Pass the path directly - openWorkshop will handle it\n\t\t\t\t\tworkshopToOpen = workshopRoot\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst result = await openWorkshop({\n\t\t\t\tworkshop: workshopToOpen,\n\t\t\t\tsilent: argv.silent,\n\t\t\t})\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'config [subcommand]',\n\t\t'View or update workshop configuration',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.positional('subcommand', {\n\t\t\t\t\tdescribe: 'Config subcommand (reset)',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tchoices: ['reset'],\n\t\t\t\t})\n\t\t\t\t.option('repos-dir', {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'Set the default directory for workshop repos',\n\t\t\t\t})\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 config', 'View current configuration')\n\t\t\t\t.example('$0 config reset', 'Delete config file and reset to defaults')\n\t\t\t\t.example('$0 config --repos-dir ~/epicweb', 'Set the repos directory')\n\t\t},\n\t\tasync (\n\t\t\targv: ArgumentsCamelCase<{\n\t\t\t\tsubcommand?: string\n\t\t\t\treposDir?: string\n\t\t\t\tsilent?: boolean\n\t\t\t}>,\n\t\t) => {\n\t\t\tconst { config } = await import('./commands/workshops.js')\n\t\t\tconst result = await config({\n\t\t\t\tsubcommand:\n\t\t\t\t\targv.subcommand === 'reset' ? 'reset' : undefined,\n\t\t\t\treposDir: argv.reposDir,\n\t\t\t\tsilent: argv.silent,\n\t\t\t})\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t['update', 'upgrade'],\n\t\t'Update the current workshop or select one to update',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 update', 'Update workshop to latest version')\n\t\t\t\t.example(\n\t\t\t\t\t'$0 update --silent',\n\t\t\t\t\t'Update workshop to latest version silently',\n\t\t\t\t)\n\t\t},\n\t\tasync (argv: ArgumentsCamelCase<{ silent?: boolean }>) => {\n\t\t\t// Check if we're inside any workshop directory\n\t\t\tconst { findWorkshopRoot } = await import('./commands/workshops.js')\n\t\t\tconst workshopRoot = await findWorkshopRoot()\n\n\t\t\tif (workshopRoot) {\n\t\t\t\t// Inside a workshop, run update on it\n\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\tprocess.chdir(workshopRoot)\n\n\t\t\t\ttry {\n\t\t\t\t\tconst { update } = await import('./commands/update.js')\n\t\t\t\t\tconst result = await update({ silent: argv.silent })\n\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\tchalk.red(\n\t\t\t\t\t\t\t\t\t`❌ ${result.message || 'Failed to update workshop'}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tif (result.error) {\n\t\t\t\t\t\t\t\tconsole.error(chalk.red(result.error.message))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\tconsole.error(chalk.red('❌ Update failed:'), error)\n\t\t\t\t\t}\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t} finally {\n\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Not inside a workshop, prompt user to select one\n\t\t\t\tconst { listWorkshops, getWorkshop } = await import(\n\t\t\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t\t\t)\n\t\t\t\tconst workshops = await listWorkshops()\n\n\t\t\t\tif (workshops.length === 0) {\n\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t\t\t`No workshops found. Use 'epicshop add <repo-name>' to add one.`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t}\n\n\t\t\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\t\t\tconst allChoices = workshops.map(\n\t\t\t\t\t(w: { title: string; repoName: string; path: string }) => ({\n\t\t\t\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\t\t\t\tvalue: w.repoName,\n\t\t\t\t\t\tdescription: w.path,\n\t\t\t\t\t}),\n\t\t\t\t)\n\n\t\t\t\ttry {\n\t\t\t\t\tconst selectedWorkshop = await search({\n\t\t\t\t\t\tmessage: 'Select a workshop to update:',\n\t\t\t\t\t\tsource: async (input) => {\n\t\t\t\t\t\t\tif (!input) {\n\t\t\t\t\t\t\t\treturn allChoices\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn matchSorter(allChoices, input, {\n\t\t\t\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\n\t\t\t\t\tconst workshop = await getWorkshop(selectedWorkshop)\n\t\t\t\t\tif (!workshop) {\n\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\tchalk.red(`❌ Workshop \"${selectedWorkshop}\" not found`),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Change to workshop directory and run update\n\t\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\t\tprocess.chdir(workshop.path)\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { update } = await import('./commands/update.js')\n\t\t\t\t\t\tconst result = await update({ silent: argv.silent })\n\t\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\t\tchalk.red(\n\t\t\t\t\t\t\t\t\t\t`❌ ${result.message || 'Failed to update workshop'}`,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tif (result.error) {\n\t\t\t\t\t\t\t\t\tconsole.error(chalk.red(result.error.message))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\t\t\t\tprocess.exit(0)\n\t\t\t\t\t}\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'warm',\n\t\t'Warm up the workshop application caches (apps, diffs)',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 warm', 'Warm up workshop caches')\n\t\t\t\t.example('$0 warm --silent', 'Warm up workshop caches silently')\n\t\t},\n\t\tasync (argv: ArgumentsCamelCase<{ silent?: boolean }>) => {\n\t\t\t// Check if we're inside any workshop directory\n\t\t\tconst { findWorkshopRoot } = await import('./commands/workshops.js')\n\t\t\tconst workshopRoot = await findWorkshopRoot()\n\n\t\t\tif (workshopRoot) {\n\t\t\t\t// Inside a workshop, warm it\n\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\tprocess.chdir(workshopRoot)\n\n\t\t\t\ttry {\n\t\t\t\t\tconst { warm } = await import('./commands/warm.js')\n\t\t\t\t\tconst result = await warm({ silent: argv.silent })\n\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\tchalk.red(\n\t\t\t\t\t\t\t\t\t`❌ ${result.message || 'Failed to warm up workshop'}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tif (result.error) {\n\t\t\t\t\t\t\t\tconsole.error(chalk.red(result.error.message))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\tconsole.error(chalk.red('❌ Warmup failed:'), error)\n\t\t\t\t\t}\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t} finally {\n\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Not inside a workshop, prompt user to select one\n\t\t\t\tconst { listWorkshops, getWorkshop } = await import(\n\t\t\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t\t\t)\n\t\t\t\tconst workshops = await listWorkshops()\n\n\t\t\t\tif (workshops.length === 0) {\n\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t\t\t`No workshops found. Use 'epicshop add <repo-name>' to add one.`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t}\n\n\t\t\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\t\t\tconst allChoices = workshops.map(\n\t\t\t\t\t(w: { title: string; repoName: string; path: string }) => ({\n\t\t\t\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\t\t\t\tvalue: w.repoName,\n\t\t\t\t\t\tdescription: w.path,\n\t\t\t\t\t}),\n\t\t\t\t)\n\n\t\t\t\ttry {\n\t\t\t\t\tconst selectedWorkshop = await search({\n\t\t\t\t\t\tmessage: 'Select a workshop to warm:',\n\t\t\t\t\t\tsource: async (input) => {\n\t\t\t\t\t\t\tif (!input) {\n\t\t\t\t\t\t\t\treturn allChoices\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn matchSorter(allChoices, input, {\n\t\t\t\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\n\t\t\t\t\tconst workshop = await getWorkshop(selectedWorkshop)\n\t\t\t\t\tif (!workshop) {\n\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\tchalk.red(`❌ Workshop \"${selectedWorkshop}\" not found`),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Change to workshop directory and run warm\n\t\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\t\tprocess.chdir(workshop.path)\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { warm } = await import('./commands/warm.js')\n\t\t\t\t\t\tconst result = await warm({ silent: argv.silent })\n\t\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\t\tchalk.red(\n\t\t\t\t\t\t\t\t\t\t`❌ ${result.message || 'Failed to warm up workshop'}`,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tif (result.error) {\n\t\t\t\t\t\t\t\t\tconsole.error(chalk.red(result.error.message))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\t\t\t\tprocess.exit(0)\n\t\t\t\t\t}\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'migrate',\n\t\t'Run any necessary migrations for workshop data',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 migrate', 'Run necessary migrations')\n\t\t\t\t.example('$0 migrate --silent', 'Run migrations silently')\n\t\t},\n\t\tasync (argv: ArgumentsCamelCase<{ silent?: boolean }>) => {\n\t\t\ttry {\n\t\t\t\tconst { migrate } = await import('./commands/migrate.js')\n\t\t\t\tconst result = await migrate()\n\t\t\t\tif (argv.silent) return\n\t\t\t\tif (result === null) {\n\t\t\t\t\tconsole.log(chalk.green('✅ No migrations needed'))\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (result.success) {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\tchalk.green(\n\t\t\t\t\t\t\tresult.message || '✅ Migrations completed successfully',\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\tchalk.red(`❌ ${result.message || 'Failed to run migrations'}`),\n\t\t\t\t\t)\n\t\t\t\t\tif (result.error) {\n\t\t\t\t\t\tconsole.error(chalk.red(result.error.message))\n\t\t\t\t\t}\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (!argv.silent) {\n\t\t\t\t\tconsole.error(chalk.red('❌ Migration failed:'), error)\n\t\t\t\t}\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'auth [subcommand] [domain]',\n\t\t'Manage authentication for Epic domains (epicweb.dev, epicreact.dev, epicai.pro)',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.positional('subcommand', {\n\t\t\t\t\tdescribe: 'Auth subcommand (status, login, logout)',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tchoices: ['status', 'login', 'logout'],\n\t\t\t\t})\n\t\t\t\t.positional('domain', {\n\t\t\t\t\tdescribe:\n\t\t\t\t\t\t'Domain to authenticate with (e.g., epicweb.dev, epicreact, epicai)',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t})\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 auth', 'Show auth subcommand menu')\n\t\t\t\t.example('$0 auth status', 'Show login status for all domains')\n\t\t\t\t.example('$0 auth login', 'Login to a domain (interactive)')\n\t\t\t\t.example('$0 auth login epicweb.dev', 'Login to EpicWeb.dev')\n\t\t\t\t.example('$0 auth logout epicreact', 'Logout from EpicReact.dev')\n\t\t},\n\t\tasync (\n\t\t\targv: ArgumentsCamelCase<{\n\t\t\t\tsubcommand?: string\n\t\t\t\tdomain?: string\n\t\t\t\tsilent?: boolean\n\t\t\t}>,\n\t\t) => {\n\t\t\tconst { status, login, logout } = await import('./commands/auth.js')\n\n\t\t\tlet subcommand = argv.subcommand\n\n\t\t\tif (!subcommand) {\n\t\t\t\tif (argv.silent) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\tchalk.red(\n\t\t\t\t\t\t\t'❌ Subcommand required in silent mode (status, login, logout)',\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t}\n\n\t\t\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\t\t\tconst authChoices = [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: `${chalk.green('status')} - Show login status`,\n\t\t\t\t\t\tvalue: 'status' as const,\n\t\t\t\t\t\tdescription: 'Show login status for all Epic domains',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: `${chalk.green('login')} - Log in to a domain`,\n\t\t\t\t\t\tvalue: 'login' as const,\n\t\t\t\t\t\tdescription: 'Log in to EpicWeb.dev, EpicReact.dev, or EpicAI.pro',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: `${chalk.green('logout')} - Log out from a domain`,\n\t\t\t\t\t\tvalue: 'logout' as const,\n\t\t\t\t\t\tdescription: 'Log out from an Epic domain',\n\t\t\t\t\t},\n\t\t\t\t]\n\n\t\t\t\ttry {\n\t\t\t\t\tsubcommand = await search({\n\t\t\t\t\t\tmessage: 'What would you like to do?',\n\t\t\t\t\t\tsource: async (input) => {\n\t\t\t\t\t\t\tif (!input) return authChoices\n\t\t\t\t\t\t\treturn matchSorter(authChoices, input, {\n\t\t\t\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\t\t\t\tprocess.exit(0)\n\t\t\t\t\t}\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet result: { success: boolean }\n\n\t\t\tswitch (subcommand) {\n\t\t\t\tcase 'status':\n\t\t\t\t\tresult = await status({ silent: argv.silent })\n\t\t\t\t\tbreak\n\t\t\t\tcase 'login':\n\t\t\t\t\tresult = await login({ domain: argv.domain, silent: argv.silent })\n\t\t\t\t\tbreak\n\t\t\t\tcase 'logout':\n\t\t\t\t\tresult = await logout({ domain: argv.domain, silent: argv.silent })\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.error(chalk.red(`❌ Unknown auth subcommand: ${subcommand}`))\n\t\t\t\t\tprocess.exit(1)\n\t\t\t}\n\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.epilogue(\n\t\t`For more information, visit: ${chalk.cyan('https://github.com/epicweb-dev/epicshop')}`,\n\t)\n\t.strict()\n\t.demandCommand(0, 1, '', 'Too many commands specified')\n\n// Parse and execute - show command chooser if no command provided\ntry {\n\tawait cli.parse()\n\n\t// If no command was provided, show command chooser\n\t// Only trigger when args is truly empty - any arg means a command was attempted\n\tif (args.length === 0) {\n\t\t// Check if we're inside a workshop first\n\t\tconst { findWorkshopRoot } = await import('./commands/workshops.js')\n\t\tconst workshopRoot = await findWorkshopRoot()\n\n\t\t// Get workshop title if we're inside one\n\t\tlet workshopTitle: string | null = null\n\t\tif (workshopRoot) {\n\t\t\ttry {\n\t\t\t\tconst fs = await import('node:fs')\n\t\t\t\tconst path = await import('node:path')\n\t\t\t\tconst pkgPath = path.join(workshopRoot, 'package.json')\n\t\t\t\tconst pkg = JSON.parse(\n\t\t\t\t\tawait fs.promises.readFile(pkgPath, 'utf-8'),\n\t\t\t\t) as {\n\t\t\t\t\tepicshop?: { title?: string }\n\t\t\t\t}\n\t\t\t\tworkshopTitle = pkg.epicshop?.title || path.basename(workshopRoot)\n\t\t\t} catch {\n\t\t\t\t// Use path.basename for cross-platform compatibility (Windows uses backslashes)\n\t\t\t\tconst path = await import('node:path')\n\t\t\t\tworkshopTitle = path.basename(workshopRoot) || 'current workshop'\n\t\t\t}\n\t\t}\n\n\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\tconst baseChoices = [\n\t\t\t{\n\t\t\t\tname: `${chalk.green('start')} - Start a workshop`,\n\t\t\t\tvalue: 'start' as const,\n\t\t\t\tdescription: workshopTitle\n\t\t\t\t\t? `Start ${workshopTitle}`\n\t\t\t\t\t: 'Select a workshop to start',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('open')} - Open a workshop in editor`,\n\t\t\t\tvalue: 'open' as const,\n\t\t\t\tdescription: workshopTitle\n\t\t\t\t\t? `Open ${workshopTitle}`\n\t\t\t\t\t: 'Select a workshop to open',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('list')} - List all workshops`,\n\t\t\t\tvalue: 'list' as const,\n\t\t\t\tdescription: 'List all added workshops',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('add')} - Add a workshop`,\n\t\t\t\tvalue: 'add' as const,\n\t\t\t\tdescription: 'Clone a workshop from epicweb-dev GitHub org',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('remove')} - Remove a workshop`,\n\t\t\t\tvalue: 'remove' as const,\n\t\t\t\tdescription: workshopTitle\n\t\t\t\t\t? `Remove ${workshopTitle}`\n\t\t\t\t\t: 'Select a workshop to remove',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('update')} - Update workshop`,\n\t\t\t\tvalue: 'update' as const,\n\t\t\t\tdescription: workshopTitle\n\t\t\t\t\t? `Update ${workshopTitle}`\n\t\t\t\t\t: 'Select a workshop to update',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('warm')} - Warm caches`,\n\t\t\t\tvalue: 'warm' as const,\n\t\t\t\tdescription: workshopTitle\n\t\t\t\t\t? `Warm the cache for ${workshopTitle}`\n\t\t\t\t\t: 'Select a workshop to warm the cache for',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('config')} - View/update configuration`,\n\t\t\t\tvalue: 'config' as const,\n\t\t\t\tdescription: 'View or update workshop configuration',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('init')} - First-time setup`,\n\t\t\t\tvalue: 'init' as const,\n\t\t\t\tdescription: 'Initialize epicshop and start the tutorial',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('auth')} - Manage authentication`,\n\t\t\t\tvalue: 'auth' as const,\n\t\t\t\tdescription: 'Login/logout from EpicWeb.dev, EpicReact.dev, EpicAI.pro',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('help')} - Show help`,\n\t\t\t\tvalue: 'help' as const,\n\t\t\t\tdescription: 'Display CLI help information',\n\t\t\t},\n\t\t]\n\n\t\tconst subcommand = await search({\n\t\t\tmessage: workshopTitle\n\t\t\t\t? `What would you like to do? ${chalk.gray(`(in ${workshopTitle})`)}`\n\t\t\t\t: 'What would you like to do?',\n\t\t\tsource: async (input) => {\n\t\t\t\tif (!input) {\n\t\t\t\t\treturn baseChoices\n\t\t\t\t}\n\t\t\t\treturn matchSorter(baseChoices, input, {\n\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\tswitch (subcommand) {\n\t\t\tcase 'start': {\n\t\t\t\tconst { findWorkshopRoot, startWorkshop } = await import(\n\t\t\t\t\t'./commands/workshops.js'\n\t\t\t\t)\n\t\t\t\tconst wsRoot = await findWorkshopRoot()\n\t\t\t\tif (wsRoot) {\n\t\t\t\t\t// Inside a workshop, start it directly\n\t\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\t\tprocess.chdir(wsRoot)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait import('./commands/migrate.js')\n\t\t\t\t\t\t\t.then(({ migrate }) => migrate())\n\t\t\t\t\t\t\t.catch(() => {})\n\t\t\t\t\t\timport('./commands/warm.js')\n\t\t\t\t\t\t\t.then(({ warm }) => warm({ silent: true }))\n\t\t\t\t\t\t\t.catch(() => {})\n\t\t\t\t\t\tconst { start } = await import('./commands/start.js')\n\t\t\t\t\t\tconst result = await start({})\n\t\t\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst result = await startWorkshop({})\n\t\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'open': {\n\t\t\t\tconst { findWorkshopRoot, openWorkshop } = await import(\n\t\t\t\t\t'./commands/workshops.js'\n\t\t\t\t)\n\t\t\t\tconst workshopRoot = await findWorkshopRoot()\n\t\t\t\tconst result = await openWorkshop({\n\t\t\t\t\tworkshop: workshopRoot || undefined,\n\t\t\t\t})\n\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'list': {\n\t\t\t\tconst { list } = await import('./commands/workshops.js')\n\t\t\t\tconst result = await list({})\n\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'add': {\n\t\t\t\tconst { add } = await import('./commands/workshops.js')\n\t\t\t\tconst result = await add({})\n\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'remove': {\n\t\t\t\tconst { findWorkshopRoot, remove } = await import(\n\t\t\t\t\t'./commands/workshops.js'\n\t\t\t\t)\n\t\t\t\tconst workshopRoot = await findWorkshopRoot()\n\t\t\t\tconst result = await remove({\n\t\t\t\t\tworkshop: workshopRoot || undefined,\n\t\t\t\t})\n\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'update': {\n\t\t\t\tconst { findWorkshopRoot } = await import('./commands/workshops.js')\n\t\t\t\tconst wsRoot = await findWorkshopRoot()\n\t\t\t\tif (wsRoot) {\n\t\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\t\tprocess.chdir(wsRoot)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { update } = await import('./commands/update.js')\n\t\t\t\t\t\tconst result = await update({})\n\t\t\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Need to select a workshop\n\t\t\t\t\tconst { listWorkshops, getWorkshop } = await import(\n\t\t\t\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t\t\t\t)\n\t\t\t\t\tconst workshops = await listWorkshops()\n\t\t\t\t\tif (workshops.length === 0) {\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t\t\t`No workshops found. Use 'epicshop add <repo-name>' to add one.`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\t\t\t\t\tconst workshopChoices = workshops.map(\n\t\t\t\t\t\t(w: { title: string; repoName: string; path: string }) => ({\n\t\t\t\t\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\t\t\t\t\tvalue: w.repoName,\n\t\t\t\t\t\t\tdescription: w.path,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t\tconst selectedWorkshop = await search({\n\t\t\t\t\t\tmessage: 'Select a workshop to update:',\n\t\t\t\t\t\tsource: async (input) => {\n\t\t\t\t\t\t\tif (!input) return workshopChoices\n\t\t\t\t\t\t\treturn matchSorter(workshopChoices, input, {\n\t\t\t\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tconst ws = await getWorkshop(selectedWorkshop)\n\t\t\t\t\tif (!ws) {\n\t\t\t\t\t\tconsole.error(chalk.red(`❌ Workshop not found`))\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\t\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\t\tprocess.chdir(ws.path)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { update } = await import('./commands/update.js')\n\t\t\t\t\t\tconst result = await update({})\n\t\t\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'warm': {\n\t\t\t\tconst { findWorkshopRoot } = await import('./commands/workshops.js')\n\t\t\t\tconst wsRoot = await findWorkshopRoot()\n\t\t\t\tif (wsRoot) {\n\t\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\t\tprocess.chdir(wsRoot)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { warm } = await import('./commands/warm.js')\n\t\t\t\t\t\tconst result = await warm({})\n\t\t\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Need to select a workshop\n\t\t\t\t\tconst { listWorkshops, getWorkshop } = await import(\n\t\t\t\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t\t\t\t)\n\t\t\t\t\tconst workshops = await listWorkshops()\n\t\t\t\t\tif (workshops.length === 0) {\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t\t\t`No workshops found. Use 'epicshop add <repo-name>' to add one.`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\t\t\t\t\tconst workshopChoices = workshops.map(\n\t\t\t\t\t\t(w: { title: string; repoName: string; path: string }) => ({\n\t\t\t\t\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\t\t\t\t\tvalue: w.repoName,\n\t\t\t\t\t\t\tdescription: w.path,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t\tconst selectedWorkshop = await search({\n\t\t\t\t\t\tmessage: 'Select a workshop to warm:',\n\t\t\t\t\t\tsource: async (input) => {\n\t\t\t\t\t\t\tif (!input) return workshopChoices\n\t\t\t\t\t\t\treturn matchSorter(workshopChoices, input, {\n\t\t\t\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tconst ws = await getWorkshop(selectedWorkshop)\n\t\t\t\t\tif (!ws) {\n\t\t\t\t\t\tconsole.error(chalk.red(`❌ Workshop not found`))\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\t\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\t\tprocess.chdir(ws.path)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { warm } = await import('./commands/warm.js')\n\t\t\t\t\t\tconst result = await warm({})\n\t\t\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'config': {\n\t\t\t\tconst { config } = await import('./commands/workshops.js')\n\t\t\t\tconst result = await config({})\n\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'init': {\n\t\t\t\tconst { onboarding } = await import('./commands/workshops.js')\n\t\t\t\tconst result = await onboarding()\n\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'auth': {\n\t\t\t\tconst { status, login, logout } = await import('./commands/auth.js')\n\t\t\t\tconst { search: authSearch } = await import('@inquirer/prompts')\n\n\t\t\t\tconst authChoices = [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: `${chalk.green('status')} - Show login status`,\n\t\t\t\t\t\tvalue: 'status' as const,\n\t\t\t\t\t\tdescription: 'Show login status for all Epic domains',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: `${chalk.green('login')} - Log in to a domain`,\n\t\t\t\t\t\tvalue: 'login' as const,\n\t\t\t\t\t\tdescription: 'Log in to EpicWeb.dev, EpicReact.dev, or EpicAI.pro',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: `${chalk.green('logout')} - Log out from a domain`,\n\t\t\t\t\t\tvalue: 'logout' as const,\n\t\t\t\t\t\tdescription: 'Log out from an Epic domain',\n\t\t\t\t\t},\n\t\t\t\t]\n\n\t\t\t\tconst authSubcommand = await authSearch({\n\t\t\t\t\tmessage: 'What would you like to do?',\n\t\t\t\t\tsource: async (input) => {\n\t\t\t\t\t\tif (!input) return authChoices\n\t\t\t\t\t\treturn matchSorter(authChoices, input, {\n\t\t\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\tlet authResult: { success: boolean }\n\t\t\t\tswitch (authSubcommand) {\n\t\t\t\t\tcase 'status':\n\t\t\t\t\t\tauthResult = await status({})\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'login':\n\t\t\t\t\t\tauthResult = await login({})\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'logout':\n\t\t\t\t\t\tauthResult = await logout({})\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t}\n\t\t\t\tif (!authResult.success) process.exit(1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'help': {\n\t\t\t\tcli.showHelp((helpText) => {\n\t\t\t\t\tconsole.log(formatHelp(helpText))\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n} catch (error) {\n\tif ((error as Error).message === 'USER_QUIT') {\n\t\tprocess.exit(0)\n\t}\n\tconsole.error(chalk.red('❌ Error:'), error)\n\tprocess.exit(1)\n}\n"]}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport '@epic-web/workshop-utils/init-env'\nimport chalk from 'chalk'\nimport { matchSorter } from 'match-sorter'\nimport yargs, { type ArgumentsCamelCase, type Argv } from 'yargs'\nimport { hideBin } from 'yargs/helpers'\n\n// Check for --help on start command before yargs parses\n// (yargs exits before command handler when help is requested)\nconst args = hideBin(process.argv)\nif (\n\t(args.includes('--help') || args.includes('-h')) &&\n\t(args.length === 0 || args[0] === 'start')\n) {\n\tconst { displayHelp } = await import('./commands/start.js')\n\tdisplayHelp()\n\tprocess.exit(0)\n}\n\n// Helper function to colorize help output\nfunction formatHelp(helpText: string): string {\n\treturn helpText\n\t\t.replace(/^(Commands:)/gm, chalk.cyan.bold('$1'))\n\t\t.replace(/^(Options:)/gm, chalk.cyan.bold('$1'))\n\t\t.replace(/^(Examples:)/gm, chalk.cyan.bold('$1'))\n\t\t.replace(/^\\s{2}(\\S+)\\s{2,}/gm, (match, cmd) => {\n\t\t\treturn match.replace(cmd, chalk.green(cmd))\n\t\t})\n\t\t.replace(/--[\\w-]+/g, (match) => chalk.yellow(match))\n\t\t.replace(/-\\w(?=\\s|,)/g, (match) => chalk.yellow(match))\n}\n\n// Set up yargs CLI\nconst cli = yargs(args)\n\t.scriptName('epicshop')\n\t.usage(chalk.bold('$0 <command> [options]'))\n\t.help('help')\n\t.alias('h', 'help')\n\t.version(false)\n\t.showHelpOnFail(true)\n\t.command(\n\t\t'start [workshop]',\n\t\t'Start a workshop (auto-detects if inside a workshop directory)',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.positional('workshop', {\n\t\t\t\t\tdescribe: 'Workshop name to start (optional if inside a workshop)',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t})\n\t\t\t\t.option('verbose', {\n\t\t\t\t\talias: 'v',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Show verbose output',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.option('app-location', {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'Path to the workshop app directory',\n\t\t\t\t})\n\t\t\t\t.example('$0 start', 'Start the current workshop or select one')\n\t\t\t\t.example('$0 start full-stack-foundations', 'Start a specific workshop')\n\t\t\t\t.example(\n\t\t\t\t\t'$0 start --app-location /path/to/workshop-app',\n\t\t\t\t\t'Start with custom app location',\n\t\t\t\t)\n\t\t},\n\t\tasync (\n\t\t\targv: ArgumentsCamelCase<{\n\t\t\t\tworkshop?: string\n\t\t\t\tverbose?: boolean\n\t\t\t\tsilent?: boolean\n\t\t\t\tappLocation?: string\n\t\t\t}>,\n\t\t) => {\n\t\t\t// If a specific workshop is requested, start it from managed workshops\n\t\t\tif (argv.workshop) {\n\t\t\t\tconst { startWorkshop } = await import('./commands/workshops.js')\n\t\t\t\tconst result = await startWorkshop({\n\t\t\t\t\tworkshop: argv.workshop,\n\t\t\t\t\tsilent: argv.silent,\n\t\t\t\t})\n\t\t\t\tif (!result.success) {\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Check if we're inside any workshop directory (walk up to find package.json with epicshop)\n\t\t\tconst { findWorkshopRoot } = await import('./commands/workshops.js')\n\t\t\tconst workshopRoot = await findWorkshopRoot()\n\n\t\t\tif (workshopRoot) {\n\t\t\t\t// We're inside a workshop directory, start from that root\n\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\tprocess.chdir(workshopRoot)\n\n\t\t\t\ttry {\n\t\t\t\t\t// run migrations before starting\n\t\t\t\t\tawait import('./commands/migrate.js')\n\t\t\t\t\t\t.then(({ migrate }) => migrate())\n\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\t\tconsole.error(chalk.yellow('⚠️ Migration failed:'), error)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\n\t\t\t\t\t// kick off a warmup while we start the server\n\t\t\t\t\timport('./commands/warm.js')\n\t\t\t\t\t\t.then(({ warm }) => warm({ silent: true }))\n\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\t\tconsole.error(chalk.yellow('⚠️ Warmup failed:'), error)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\n\t\t\t\t\tconst { start } = await import('./commands/start.js')\n\t\t\t\t\tconst result = await start({\n\t\t\t\t\t\tappLocation: argv.appLocation,\n\t\t\t\t\t\tverbose: argv.verbose,\n\t\t\t\t\t\tsilent: argv.silent,\n\t\t\t\t\t})\n\n\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\tchalk.red(\n\t\t\t\t\t\t\t\t\t`❌ ${result.message || 'Failed to start workshop application'}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tif (result.error) {\n\t\t\t\t\t\t\t\tconsole.error(chalk.red(result.error.message))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Not inside a workshop, show selection from managed workshops\n\t\t\t\tconst { startWorkshop } = await import('./commands/workshops.js')\n\t\t\t\tconst result = await startWorkshop({ silent: argv.silent })\n\t\t\t\tif (!result.success) {\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'init',\n\t\t'Initialize epicshop and start the tutorial (first-time setup)',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs.example('$0 init', 'Run the first-time setup wizard')\n\t\t},\n\t\tasync () => {\n\t\t\tconst { onboarding } = await import('./commands/workshops.js')\n\t\t\tconst result = await onboarding()\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'add [repo-name]',\n\t\t'Add a workshop by cloning from epicweb-dev GitHub org',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.positional('repo-name', {\n\t\t\t\t\tdescribe:\n\t\t\t\t\t\t'Repository name from epicweb-dev org (optional, shows list if omitted)',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t})\n\t\t\t\t.option('directory', {\n\t\t\t\t\talias: 'd',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'Directory to clone into (defaults to configured repos directory)',\n\t\t\t\t})\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 add', 'Show available workshops to add')\n\t\t\t\t.example(\n\t\t\t\t\t'$0 add full-stack-foundations',\n\t\t\t\t\t'Clone and set up the full-stack-foundations workshop',\n\t\t\t\t)\n\t\t\t\t.example(\n\t\t\t\t\t'$0 add web-forms --directory ~/my-workshops',\n\t\t\t\t\t'Clone workshop to a custom directory',\n\t\t\t\t)\n\t\t},\n\t\tasync (\n\t\t\targv: ArgumentsCamelCase<{\n\t\t\t\trepoName?: string\n\t\t\t\tdirectory?: string\n\t\t\t\tsilent?: boolean\n\t\t\t}>,\n\t\t) => {\n\t\t\tconst { add } = await import('./commands/workshops.js')\n\t\t\tconst result = await add({\n\t\t\t\trepoName: argv.repoName,\n\t\t\t\tdirectory: argv.directory,\n\t\t\t\tsilent: argv.silent,\n\t\t\t})\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'list',\n\t\t'List all added workshops',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 list', 'List all added workshops')\n\t\t},\n\t\tasync (argv: ArgumentsCamelCase<{ silent?: boolean }>) => {\n\t\t\tconst { list } = await import('./commands/workshops.js')\n\t\t\tconst result = await list({ silent: argv.silent })\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'remove [workshop]',\n\t\t'Remove a workshop (deletes the directory)',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.positional('workshop', {\n\t\t\t\t\tdescribe:\n\t\t\t\t\t\t'Workshop to remove (auto-detects if inside a workshop directory)',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t})\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 remove', 'Remove current workshop or select one')\n\t\t\t\t.example(\n\t\t\t\t\t'$0 remove full-stack-foundations',\n\t\t\t\t\t'Remove a specific workshop',\n\t\t\t\t)\n\t\t},\n\t\tasync (\n\t\t\targv: ArgumentsCamelCase<{\n\t\t\t\tworkshop?: string\n\t\t\t\tsilent?: boolean\n\t\t\t}>,\n\t\t) => {\n\t\t\tconst { findWorkshopRoot, remove } = await import(\n\t\t\t\t'./commands/workshops.js'\n\t\t\t)\n\n\t\t\tlet workshopToRemove = argv.workshop\n\n\t\t\t// If no workshop specified, check if we're inside a workshop directory\n\t\t\tif (!workshopToRemove) {\n\t\t\t\tconst workshopRoot = await findWorkshopRoot()\n\t\t\t\tif (workshopRoot) {\n\t\t\t\t\t// Pass the path directly - remove will handle it\n\t\t\t\t\tworkshopToRemove = workshopRoot\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst result = await remove({\n\t\t\t\tworkshop: workshopToRemove,\n\t\t\t\tsilent: argv.silent,\n\t\t\t})\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'open [workshop]',\n\t\t'Open a workshop in your editor',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.positional('workshop', {\n\t\t\t\t\tdescribe:\n\t\t\t\t\t\t'Workshop to open (auto-detects if inside a workshop directory)',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t})\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 open', 'Open current workshop or select one')\n\t\t\t\t.example('$0 open full-stack-foundations', 'Open a specific workshop')\n\t\t},\n\t\tasync (\n\t\t\targv: ArgumentsCamelCase<{\n\t\t\t\tworkshop?: string\n\t\t\t\tsilent?: boolean\n\t\t\t}>,\n\t\t) => {\n\t\t\tconst { findWorkshopRoot, openWorkshop } = await import(\n\t\t\t\t'./commands/workshops.js'\n\t\t\t)\n\n\t\t\tlet workshopToOpen = argv.workshop\n\n\t\t\t// If no workshop specified, check if we're inside a workshop directory\n\t\t\tif (!workshopToOpen) {\n\t\t\t\tconst workshopRoot = await findWorkshopRoot()\n\t\t\t\tif (workshopRoot) {\n\t\t\t\t\t// Pass the path directly - openWorkshop will handle it\n\t\t\t\t\tworkshopToOpen = workshopRoot\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst result = await openWorkshop({\n\t\t\t\tworkshop: workshopToOpen,\n\t\t\t\tsilent: argv.silent,\n\t\t\t})\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'config [subcommand]',\n\t\t'View or update workshop configuration',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.positional('subcommand', {\n\t\t\t\t\tdescribe: 'Config subcommand (reset)',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tchoices: ['reset'],\n\t\t\t\t})\n\t\t\t\t.option('repos-dir', {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'Set the default directory for workshop repos',\n\t\t\t\t})\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 config', 'View current configuration')\n\t\t\t\t.example('$0 config reset', 'Delete config file and reset to defaults')\n\t\t\t\t.example('$0 config --repos-dir ~/epicweb', 'Set the repos directory')\n\t\t},\n\t\tasync (\n\t\t\targv: ArgumentsCamelCase<{\n\t\t\t\tsubcommand?: string\n\t\t\t\treposDir?: string\n\t\t\t\tsilent?: boolean\n\t\t\t}>,\n\t\t) => {\n\t\t\tconst { config } = await import('./commands/workshops.js')\n\t\t\tconst result = await config({\n\t\t\t\tsubcommand: argv.subcommand === 'reset' ? 'reset' : undefined,\n\t\t\t\treposDir: argv.reposDir,\n\t\t\t\tsilent: argv.silent,\n\t\t\t})\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t['update', 'upgrade'],\n\t\t'Update the current workshop or select one to update',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 update', 'Update workshop to latest version')\n\t\t\t\t.example(\n\t\t\t\t\t'$0 update --silent',\n\t\t\t\t\t'Update workshop to latest version silently',\n\t\t\t\t)\n\t\t},\n\t\tasync (argv: ArgumentsCamelCase<{ silent?: boolean }>) => {\n\t\t\t// Check if we're inside any workshop directory\n\t\t\tconst { findWorkshopRoot } = await import('./commands/workshops.js')\n\t\t\tconst workshopRoot = await findWorkshopRoot()\n\n\t\t\tif (workshopRoot) {\n\t\t\t\t// Inside a workshop, run update on it\n\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\tprocess.chdir(workshopRoot)\n\n\t\t\t\ttry {\n\t\t\t\t\tconst { update } = await import('./commands/update.js')\n\t\t\t\t\tconst result = await update({ silent: argv.silent })\n\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\tchalk.red(\n\t\t\t\t\t\t\t\t\t`❌ ${result.message || 'Failed to update workshop'}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tif (result.error) {\n\t\t\t\t\t\t\t\tconsole.error(chalk.red(result.error.message))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\tconsole.error(chalk.red('❌ Update failed:'), error)\n\t\t\t\t\t}\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t} finally {\n\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Not inside a workshop, prompt user to select one\n\t\t\t\tconst { listWorkshops, getWorkshop } = await import(\n\t\t\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t\t\t)\n\t\t\t\tconst workshops = await listWorkshops()\n\n\t\t\t\tif (workshops.length === 0) {\n\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t\t\t`No workshops found. Use 'epicshop add <repo-name>' to add one.`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t}\n\n\t\t\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\t\t\tconst allChoices = workshops.map(\n\t\t\t\t\t(w: { title: string; repoName: string; path: string }) => ({\n\t\t\t\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\t\t\t\tvalue: w.repoName,\n\t\t\t\t\t\tdescription: w.path,\n\t\t\t\t\t}),\n\t\t\t\t)\n\n\t\t\t\ttry {\n\t\t\t\t\tconst selectedWorkshop = await search({\n\t\t\t\t\t\tmessage: 'Select a workshop to update:',\n\t\t\t\t\t\tsource: async (input) => {\n\t\t\t\t\t\t\tif (!input) {\n\t\t\t\t\t\t\t\treturn allChoices\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn matchSorter(allChoices, input, {\n\t\t\t\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\n\t\t\t\t\tconst workshop = await getWorkshop(selectedWorkshop)\n\t\t\t\t\tif (!workshop) {\n\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\tchalk.red(`❌ Workshop \"${selectedWorkshop}\" not found`),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Change to workshop directory and run update\n\t\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\t\tprocess.chdir(workshop.path)\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { update } = await import('./commands/update.js')\n\t\t\t\t\t\tconst result = await update({ silent: argv.silent })\n\t\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\t\tchalk.red(\n\t\t\t\t\t\t\t\t\t\t`❌ ${result.message || 'Failed to update workshop'}`,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tif (result.error) {\n\t\t\t\t\t\t\t\t\tconsole.error(chalk.red(result.error.message))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\t\t\t\tprocess.exit(0)\n\t\t\t\t\t}\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'warm',\n\t\t'Warm up the workshop application caches (apps, diffs)',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 warm', 'Warm up workshop caches')\n\t\t\t\t.example('$0 warm --silent', 'Warm up workshop caches silently')\n\t\t},\n\t\tasync (argv: ArgumentsCamelCase<{ silent?: boolean }>) => {\n\t\t\t// Check if we're inside any workshop directory\n\t\t\tconst { findWorkshopRoot } = await import('./commands/workshops.js')\n\t\t\tconst workshopRoot = await findWorkshopRoot()\n\n\t\t\tif (workshopRoot) {\n\t\t\t\t// Inside a workshop, warm it\n\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\tprocess.chdir(workshopRoot)\n\n\t\t\t\ttry {\n\t\t\t\t\tconst { warm } = await import('./commands/warm.js')\n\t\t\t\t\tconst result = await warm({ silent: argv.silent })\n\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\tchalk.red(\n\t\t\t\t\t\t\t\t\t`❌ ${result.message || 'Failed to warm up workshop'}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tif (result.error) {\n\t\t\t\t\t\t\t\tconsole.error(chalk.red(result.error.message))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\tconsole.error(chalk.red('❌ Warmup failed:'), error)\n\t\t\t\t\t}\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t} finally {\n\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Not inside a workshop, prompt user to select one\n\t\t\t\tconst { listWorkshops, getWorkshop } = await import(\n\t\t\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t\t\t)\n\t\t\t\tconst workshops = await listWorkshops()\n\n\t\t\t\tif (workshops.length === 0) {\n\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t\t\t`No workshops found. Use 'epicshop add <repo-name>' to add one.`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t}\n\n\t\t\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\t\t\tconst allChoices = workshops.map(\n\t\t\t\t\t(w: { title: string; repoName: string; path: string }) => ({\n\t\t\t\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\t\t\t\tvalue: w.repoName,\n\t\t\t\t\t\tdescription: w.path,\n\t\t\t\t\t}),\n\t\t\t\t)\n\n\t\t\t\ttry {\n\t\t\t\t\tconst selectedWorkshop = await search({\n\t\t\t\t\t\tmessage: 'Select a workshop to warm:',\n\t\t\t\t\t\tsource: async (input) => {\n\t\t\t\t\t\t\tif (!input) {\n\t\t\t\t\t\t\t\treturn allChoices\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn matchSorter(allChoices, input, {\n\t\t\t\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\n\t\t\t\t\tconst workshop = await getWorkshop(selectedWorkshop)\n\t\t\t\t\tif (!workshop) {\n\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\tchalk.red(`❌ Workshop \"${selectedWorkshop}\" not found`),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Change to workshop directory and run warm\n\t\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\t\tprocess.chdir(workshop.path)\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { warm } = await import('./commands/warm.js')\n\t\t\t\t\t\tconst result = await warm({ silent: argv.silent })\n\t\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\t\tif (!argv.silent) {\n\t\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\t\tchalk.red(\n\t\t\t\t\t\t\t\t\t\t`❌ ${result.message || 'Failed to warm up workshop'}`,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tif (result.error) {\n\t\t\t\t\t\t\t\t\tconsole.error(chalk.red(result.error.message))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\t\t\t\tprocess.exit(0)\n\t\t\t\t\t}\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'migrate',\n\t\t'Run any necessary migrations for workshop data',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 migrate', 'Run necessary migrations')\n\t\t\t\t.example('$0 migrate --silent', 'Run migrations silently')\n\t\t},\n\t\tasync (argv: ArgumentsCamelCase<{ silent?: boolean }>) => {\n\t\t\ttry {\n\t\t\t\tconst { migrate } = await import('./commands/migrate.js')\n\t\t\t\tconst result = await migrate()\n\t\t\t\tif (argv.silent) return\n\t\t\t\tif (result === null) {\n\t\t\t\t\tconsole.log(chalk.green('✅ No migrations needed'))\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (result.success) {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\tchalk.green(\n\t\t\t\t\t\t\tresult.message || '✅ Migrations completed successfully',\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\tchalk.red(`❌ ${result.message || 'Failed to run migrations'}`),\n\t\t\t\t\t)\n\t\t\t\t\tif (result.error) {\n\t\t\t\t\t\tconsole.error(chalk.red(result.error.message))\n\t\t\t\t\t}\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (!argv.silent) {\n\t\t\t\t\tconsole.error(chalk.red('❌ Migration failed:'), error)\n\t\t\t\t}\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.command(\n\t\t'auth [subcommand] [domain]',\n\t\t'Manage authentication for Epic domains (epicweb.dev, epicreact.dev, epicai.pro)',\n\t\t(yargs: Argv) => {\n\t\t\treturn yargs\n\t\t\t\t.positional('subcommand', {\n\t\t\t\t\tdescribe: 'Auth subcommand (status, login, logout)',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tchoices: ['status', 'login', 'logout'],\n\t\t\t\t})\n\t\t\t\t.positional('domain', {\n\t\t\t\t\tdescribe:\n\t\t\t\t\t\t'Domain to authenticate with (e.g., epicweb.dev, epicreact, epicai)',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t})\n\t\t\t\t.option('silent', {\n\t\t\t\t\talias: 's',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdescription: 'Run without output logs',\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\t\t\t\t.example('$0 auth', 'Show auth subcommand menu')\n\t\t\t\t.example('$0 auth status', 'Show login status for all domains')\n\t\t\t\t.example('$0 auth login', 'Login to a domain (interactive)')\n\t\t\t\t.example('$0 auth login epicweb.dev', 'Login to EpicWeb.dev')\n\t\t\t\t.example('$0 auth logout epicreact', 'Logout from EpicReact.dev')\n\t\t},\n\t\tasync (\n\t\t\targv: ArgumentsCamelCase<{\n\t\t\t\tsubcommand?: string\n\t\t\t\tdomain?: string\n\t\t\t\tsilent?: boolean\n\t\t\t}>,\n\t\t) => {\n\t\t\tconst { status, login, logout } = await import('./commands/auth.js')\n\n\t\t\tlet subcommand = argv.subcommand\n\n\t\t\tif (!subcommand) {\n\t\t\t\tif (argv.silent) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\tchalk.red(\n\t\t\t\t\t\t\t'❌ Subcommand required in silent mode (status, login, logout)',\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\tprocess.exit(1)\n\t\t\t\t}\n\n\t\t\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\t\t\tconst authChoices = [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: `${chalk.green('status')} - Show login status`,\n\t\t\t\t\t\tvalue: 'status' as const,\n\t\t\t\t\t\tdescription: 'Show login status for all Epic domains',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: `${chalk.green('login')} - Log in to a domain`,\n\t\t\t\t\t\tvalue: 'login' as const,\n\t\t\t\t\t\tdescription: 'Log in to EpicWeb.dev, EpicReact.dev, or EpicAI.pro',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: `${chalk.green('logout')} - Log out from a domain`,\n\t\t\t\t\t\tvalue: 'logout' as const,\n\t\t\t\t\t\tdescription: 'Log out from an Epic domain',\n\t\t\t\t\t},\n\t\t\t\t]\n\n\t\t\t\ttry {\n\t\t\t\t\tsubcommand = await search({\n\t\t\t\t\t\tmessage: 'What would you like to do?',\n\t\t\t\t\t\tsource: async (input) => {\n\t\t\t\t\t\t\tif (!input) return authChoices\n\t\t\t\t\t\t\treturn matchSorter(authChoices, input, {\n\t\t\t\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\t\t\t\tprocess.exit(0)\n\t\t\t\t\t}\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet result: { success: boolean }\n\n\t\t\tswitch (subcommand) {\n\t\t\t\tcase 'status':\n\t\t\t\t\tresult = await status({ silent: argv.silent })\n\t\t\t\t\tbreak\n\t\t\t\tcase 'login':\n\t\t\t\t\tresult = await login({ domain: argv.domain, silent: argv.silent })\n\t\t\t\t\tbreak\n\t\t\t\tcase 'logout':\n\t\t\t\t\tresult = await logout({ domain: argv.domain, silent: argv.silent })\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.error(chalk.red(`❌ Unknown auth subcommand: ${subcommand}`))\n\t\t\t\t\tprocess.exit(1)\n\t\t\t}\n\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t},\n\t)\n\t.epilogue(\n\t\t`For more information, visit: ${chalk.cyan('https://github.com/epicweb-dev/epicshop')}`,\n\t)\n\t.strict()\n\t.demandCommand(0, 1, '', 'Too many commands specified')\n\n// Parse and execute - show command chooser if no command provided\ntry {\n\tawait cli.parse()\n\n\t// If no command was provided, show command chooser\n\t// Only trigger when args is truly empty - any arg means a command was attempted\n\tif (args.length === 0) {\n\t\t// Check if we're inside a workshop first\n\t\tconst { findWorkshopRoot } = await import('./commands/workshops.js')\n\t\tconst workshopRoot = await findWorkshopRoot()\n\n\t\t// Get workshop title if we're inside one\n\t\tlet workshopTitle: string | null = null\n\t\tif (workshopRoot) {\n\t\t\ttry {\n\t\t\t\tconst fs = await import('node:fs')\n\t\t\t\tconst path = await import('node:path')\n\t\t\t\tconst pkgPath = path.join(workshopRoot, 'package.json')\n\t\t\t\tconst pkg = JSON.parse(\n\t\t\t\t\tawait fs.promises.readFile(pkgPath, 'utf-8'),\n\t\t\t\t) as {\n\t\t\t\t\tepicshop?: { title?: string }\n\t\t\t\t}\n\t\t\t\tworkshopTitle = pkg.epicshop?.title || path.basename(workshopRoot)\n\t\t\t} catch {\n\t\t\t\t// Use path.basename for cross-platform compatibility (Windows uses backslashes)\n\t\t\t\tconst path = await import('node:path')\n\t\t\t\tworkshopTitle = path.basename(workshopRoot) || 'current workshop'\n\t\t\t}\n\t\t}\n\n\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\tconst baseChoices = [\n\t\t\t{\n\t\t\t\tname: `${chalk.green('start')} - Start a workshop`,\n\t\t\t\tvalue: 'start' as const,\n\t\t\t\tdescription: workshopTitle\n\t\t\t\t\t? `Start ${workshopTitle}`\n\t\t\t\t\t: 'Select a workshop to start',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('open')} - Open a workshop in editor`,\n\t\t\t\tvalue: 'open' as const,\n\t\t\t\tdescription: workshopTitle\n\t\t\t\t\t? `Open ${workshopTitle}`\n\t\t\t\t\t: 'Select a workshop to open',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('list')} - List all workshops`,\n\t\t\t\tvalue: 'list' as const,\n\t\t\t\tdescription: 'List all added workshops',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('add')} - Add a workshop`,\n\t\t\t\tvalue: 'add' as const,\n\t\t\t\tdescription: 'Clone a workshop from epicweb-dev GitHub org',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('remove')} - Remove a workshop`,\n\t\t\t\tvalue: 'remove' as const,\n\t\t\t\tdescription: workshopTitle\n\t\t\t\t\t? `Remove ${workshopTitle}`\n\t\t\t\t\t: 'Select a workshop to remove',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('update')} - Update workshop`,\n\t\t\t\tvalue: 'update' as const,\n\t\t\t\tdescription: workshopTitle\n\t\t\t\t\t? `Update ${workshopTitle}`\n\t\t\t\t\t: 'Select a workshop to update',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('warm')} - Warm caches`,\n\t\t\t\tvalue: 'warm' as const,\n\t\t\t\tdescription: workshopTitle\n\t\t\t\t\t? `Warm the cache for ${workshopTitle}`\n\t\t\t\t\t: 'Select a workshop to warm the cache for',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('config')} - View/update configuration`,\n\t\t\t\tvalue: 'config' as const,\n\t\t\t\tdescription: 'View or update workshop configuration',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('init')} - First-time setup`,\n\t\t\t\tvalue: 'init' as const,\n\t\t\t\tdescription: 'Initialize epicshop and start the tutorial',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('auth')} - Manage authentication`,\n\t\t\t\tvalue: 'auth' as const,\n\t\t\t\tdescription: 'Login/logout from EpicWeb.dev, EpicReact.dev, EpicAI.pro',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `${chalk.green('help')} - Show help`,\n\t\t\t\tvalue: 'help' as const,\n\t\t\t\tdescription: 'Display CLI help information',\n\t\t\t},\n\t\t]\n\n\t\tconst subcommand = await search({\n\t\t\tmessage: workshopTitle\n\t\t\t\t? `What would you like to do? ${chalk.gray(`(in ${workshopTitle})`)}`\n\t\t\t\t: 'What would you like to do?',\n\t\t\tsource: async (input) => {\n\t\t\t\tif (!input) {\n\t\t\t\t\treturn baseChoices\n\t\t\t\t}\n\t\t\t\treturn matchSorter(baseChoices, input, {\n\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\tswitch (subcommand) {\n\t\t\tcase 'start': {\n\t\t\t\tconst { findWorkshopRoot, startWorkshop } = await import(\n\t\t\t\t\t'./commands/workshops.js'\n\t\t\t\t)\n\t\t\t\tconst wsRoot = await findWorkshopRoot()\n\t\t\t\tif (wsRoot) {\n\t\t\t\t\t// Inside a workshop, start it directly\n\t\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\t\tprocess.chdir(wsRoot)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait import('./commands/migrate.js')\n\t\t\t\t\t\t\t.then(({ migrate }) => migrate())\n\t\t\t\t\t\t\t.catch(() => {})\n\t\t\t\t\t\timport('./commands/warm.js')\n\t\t\t\t\t\t\t.then(({ warm }) => warm({ silent: true }))\n\t\t\t\t\t\t\t.catch(() => {})\n\t\t\t\t\t\tconst { start } = await import('./commands/start.js')\n\t\t\t\t\t\tconst result = await start({})\n\t\t\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst result = await startWorkshop({})\n\t\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'open': {\n\t\t\t\tconst { findWorkshopRoot, openWorkshop } = await import(\n\t\t\t\t\t'./commands/workshops.js'\n\t\t\t\t)\n\t\t\t\tconst workshopRoot = await findWorkshopRoot()\n\t\t\t\tconst result = await openWorkshop({\n\t\t\t\t\tworkshop: workshopRoot || undefined,\n\t\t\t\t})\n\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'list': {\n\t\t\t\tconst { list } = await import('./commands/workshops.js')\n\t\t\t\tconst result = await list({})\n\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'add': {\n\t\t\t\tconst { add } = await import('./commands/workshops.js')\n\t\t\t\tconst result = await add({})\n\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'remove': {\n\t\t\t\tconst { findWorkshopRoot, remove } = await import(\n\t\t\t\t\t'./commands/workshops.js'\n\t\t\t\t)\n\t\t\t\tconst workshopRoot = await findWorkshopRoot()\n\t\t\t\tconst result = await remove({\n\t\t\t\t\tworkshop: workshopRoot || undefined,\n\t\t\t\t})\n\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'update': {\n\t\t\t\tconst { findWorkshopRoot } = await import('./commands/workshops.js')\n\t\t\t\tconst wsRoot = await findWorkshopRoot()\n\t\t\t\tif (wsRoot) {\n\t\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\t\tprocess.chdir(wsRoot)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { update } = await import('./commands/update.js')\n\t\t\t\t\t\tconst result = await update({})\n\t\t\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Need to select a workshop\n\t\t\t\t\tconst { listWorkshops, getWorkshop } = await import(\n\t\t\t\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t\t\t\t)\n\t\t\t\t\tconst workshops = await listWorkshops()\n\t\t\t\t\tif (workshops.length === 0) {\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t\t\t`No workshops found. Use 'epicshop add <repo-name>' to add one.`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\t\t\t\t\tconst workshopChoices = workshops.map(\n\t\t\t\t\t\t(w: { title: string; repoName: string; path: string }) => ({\n\t\t\t\t\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\t\t\t\t\tvalue: w.repoName,\n\t\t\t\t\t\t\tdescription: w.path,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t\tconst selectedWorkshop = await search({\n\t\t\t\t\t\tmessage: 'Select a workshop to update:',\n\t\t\t\t\t\tsource: async (input) => {\n\t\t\t\t\t\t\tif (!input) return workshopChoices\n\t\t\t\t\t\t\treturn matchSorter(workshopChoices, input, {\n\t\t\t\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tconst ws = await getWorkshop(selectedWorkshop)\n\t\t\t\t\tif (!ws) {\n\t\t\t\t\t\tconsole.error(chalk.red(`❌ Workshop not found`))\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\t\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\t\tprocess.chdir(ws.path)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { update } = await import('./commands/update.js')\n\t\t\t\t\t\tconst result = await update({})\n\t\t\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'warm': {\n\t\t\t\tconst { findWorkshopRoot } = await import('./commands/workshops.js')\n\t\t\t\tconst wsRoot = await findWorkshopRoot()\n\t\t\t\tif (wsRoot) {\n\t\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\t\tprocess.chdir(wsRoot)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { warm } = await import('./commands/warm.js')\n\t\t\t\t\t\tconst result = await warm({})\n\t\t\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Need to select a workshop\n\t\t\t\t\tconst { listWorkshops, getWorkshop } = await import(\n\t\t\t\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t\t\t\t)\n\t\t\t\t\tconst workshops = await listWorkshops()\n\t\t\t\t\tif (workshops.length === 0) {\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t\t\t`No workshops found. Use 'epicshop add <repo-name>' to add one.`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\t\t\t\t\tconst workshopChoices = workshops.map(\n\t\t\t\t\t\t(w: { title: string; repoName: string; path: string }) => ({\n\t\t\t\t\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\t\t\t\t\tvalue: w.repoName,\n\t\t\t\t\t\t\tdescription: w.path,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t\tconst selectedWorkshop = await search({\n\t\t\t\t\t\tmessage: 'Select a workshop to warm:',\n\t\t\t\t\t\tsource: async (input) => {\n\t\t\t\t\t\t\tif (!input) return workshopChoices\n\t\t\t\t\t\t\treturn matchSorter(workshopChoices, input, {\n\t\t\t\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tconst ws = await getWorkshop(selectedWorkshop)\n\t\t\t\t\tif (!ws) {\n\t\t\t\t\t\tconsole.error(chalk.red(`❌ Workshop not found`))\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t\t}\n\t\t\t\t\tconst originalCwd = process.cwd()\n\t\t\t\t\tprocess.chdir(ws.path)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { warm } = await import('./commands/warm.js')\n\t\t\t\t\t\tconst result = await warm({})\n\t\t\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tprocess.chdir(originalCwd)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'config': {\n\t\t\t\tconst { config } = await import('./commands/workshops.js')\n\t\t\t\tconst result = await config({})\n\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'init': {\n\t\t\t\tconst { onboarding } = await import('./commands/workshops.js')\n\t\t\t\tconst result = await onboarding()\n\t\t\t\tif (!result.success) process.exit(1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'auth': {\n\t\t\t\tconst { status, login, logout } = await import('./commands/auth.js')\n\t\t\t\tconst { search: authSearch } = await import('@inquirer/prompts')\n\n\t\t\t\tconst authChoices = [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: `${chalk.green('status')} - Show login status`,\n\t\t\t\t\t\tvalue: 'status' as const,\n\t\t\t\t\t\tdescription: 'Show login status for all Epic domains',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: `${chalk.green('login')} - Log in to a domain`,\n\t\t\t\t\t\tvalue: 'login' as const,\n\t\t\t\t\t\tdescription: 'Log in to EpicWeb.dev, EpicReact.dev, or EpicAI.pro',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: `${chalk.green('logout')} - Log out from a domain`,\n\t\t\t\t\t\tvalue: 'logout' as const,\n\t\t\t\t\t\tdescription: 'Log out from an Epic domain',\n\t\t\t\t\t},\n\t\t\t\t]\n\n\t\t\t\tconst authSubcommand = await authSearch({\n\t\t\t\t\tmessage: 'What would you like to do?',\n\t\t\t\t\tsource: async (input) => {\n\t\t\t\t\t\tif (!input) return authChoices\n\t\t\t\t\t\treturn matchSorter(authChoices, input, {\n\t\t\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\tlet authResult: { success: boolean }\n\t\t\t\tswitch (authSubcommand) {\n\t\t\t\t\tcase 'status':\n\t\t\t\t\t\tauthResult = await status({})\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'login':\n\t\t\t\t\t\tauthResult = await login({})\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'logout':\n\t\t\t\t\t\tauthResult = await logout({})\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tprocess.exit(1)\n\t\t\t\t}\n\t\t\t\tif (!authResult.success) process.exit(1)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'help': {\n\t\t\t\tcli.showHelp((helpText) => {\n\t\t\t\t\tconsole.log(formatHelp(helpText))\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n} catch (error) {\n\tif ((error as Error).message === 'USER_QUIT') {\n\t\tprocess.exit(0)\n\t}\n\tconsole.error(chalk.red('❌ Error:'), error)\n\tprocess.exit(1)\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workshops.d.ts","sourceRoot":"","sources":["../../../src/commands/workshops.ts"],"names":[],"mappings":"AAAA,OAAO,mCAAmC,CAAA;AA0C1C;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4B/D;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE9D;AAED,MAAM,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,KAAK,CAAA;CACb,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AA6MD,MAAM,MAAM,YAAY,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;CAC/B,CAAA;AAED;;GAEG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CA+QvE;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,EAC1B,MAAc,GACd,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CA4HtD;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,EAC5B,QAAQ,EACR,MAAc,GACd,EAAE;IACF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB,GAAG,OAAO,CAAC,eAAe,CAAC,CAuI3B;AAED;;GAEG;AACH,wBAAsB,aAAa,CAClC,OAAO,GAAE,YAAiB,GACxB,OAAO,CAAC,eAAe,CAAC,CA6G1B;AAED;;GAEG;AACH,wBAAsB,YAAY,CACjC,OAAO,GAAE,YAAiB,GACxB,OAAO,CAAC,eAAe,CAAC,CA+I1B;AAED;;GAEG;AACH,wBAAsB,MAAM,CAC3B,OAAO,GAAE,aAAkB,GACzB,OAAO,CAAC,eAAe,CAAC,CAgO1B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAYzD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC,CAqG3D;
|
|
1
|
+
{"version":3,"file":"workshops.d.ts","sourceRoot":"","sources":["../../../src/commands/workshops.ts"],"names":[],"mappings":"AAAA,OAAO,mCAAmC,CAAA;AA0C1C;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4B/D;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE9D;AAED,MAAM,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,KAAK,CAAA;CACb,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AA6MD,MAAM,MAAM,YAAY,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;CAC/B,CAAA;AAED;;GAEG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CA+QvE;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,EAC1B,MAAc,GACd,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CA4HtD;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,EAC5B,QAAQ,EACR,MAAc,GACd,EAAE;IACF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB,GAAG,OAAO,CAAC,eAAe,CAAC,CAuI3B;AAED;;GAEG;AACH,wBAAsB,aAAa,CAClC,OAAO,GAAE,YAAiB,GACxB,OAAO,CAAC,eAAe,CAAC,CA6G1B;AAED;;GAEG;AACH,wBAAsB,YAAY,CACjC,OAAO,GAAE,YAAiB,GACxB,OAAO,CAAC,eAAe,CAAC,CA+I1B;AAED;;GAEG;AACH,wBAAsB,MAAM,CAC3B,OAAO,GAAE,aAAkB,GACzB,OAAO,CAAC,eAAe,CAAC,CAgO1B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAYzD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC,CAqG3D;AAmdD;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAKrD"}
|
|
@@ -1311,7 +1311,9 @@ async function promptAndSetupAccessibleWorkshops() {
|
|
|
1311
1311
|
const updated = await checkWorkshopDownloadStatus(candidates);
|
|
1312
1312
|
const remaining = updated.filter((w) => !w.isDownloaded);
|
|
1313
1313
|
const workshopChoices = remaining.map((w) => {
|
|
1314
|
-
const productIcon = w.productHost
|
|
1314
|
+
const productIcon = w.productHost
|
|
1315
|
+
? PRODUCT_ICONS[w.productHost] || ''
|
|
1316
|
+
: '';
|
|
1315
1317
|
const accessIcon = chalk.yellow('🔑');
|
|
1316
1318
|
const name = [productIcon, w.title || w.name, accessIcon]
|
|
1317
1319
|
.filter(Boolean)
|
|
@@ -1357,7 +1359,10 @@ async function promptAndSetupAccessibleWorkshops() {
|
|
|
1357
1359
|
keys: [
|
|
1358
1360
|
{ key: 'name', threshold: rankings.CONTAINS },
|
|
1359
1361
|
{ key: 'value', threshold: rankings.CONTAINS },
|
|
1360
|
-
{
|
|
1362
|
+
{
|
|
1363
|
+
key: 'workshop.productDisplayName',
|
|
1364
|
+
threshold: rankings.CONTAINS,
|
|
1365
|
+
},
|
|
1361
1366
|
{ key: 'workshop.instructorName', threshold: rankings.CONTAINS },
|
|
1362
1367
|
{ key: 'description', threshold: rankings.WORD_STARTS_WITH },
|
|
1363
1368
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workshops.js","sourceRoot":"","sources":["../../../src/commands/workshops.ts"],"names":[],"mappings":"AAAA,OAAO,mCAAmC,CAAA;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAA;AAClF,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,MAAM,UAAU,GAAG,aAAa,CAAA;AAChC,MAAM,aAAa,GAAG,mBAAmB,CAAA;AACzC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;AAQ7C,MAAM,UAAU,GAAoB;IACnC;QACC,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,6BAA6B;KAC1C;IACD;QACC,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,sCAAsC;KACnD;IACD;QACC,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,0BAA0B;KACvC;CACD,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACrC,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAA;IAExC,OAAO,UAAU,KAAK,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC;YACJ,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;YAC7D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;YACpE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA2B,CAAA;YAEjE,kCAAkC;YAClC,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAC1B,OAAO,UAAU,CAAA;YAClB,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,gDAAgD;QACjD,CAAC;QAED,wBAAwB;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAC1C,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC9B,yBAAyB;YACzB,MAAK;QACN,CAAC;QACD,UAAU,GAAG,SAAS,CAAA;IACvB,CAAC;IAED,OAAO,IAAI,CAAA;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IAC1C,OAAO,CAAC,MAAM,gBAAgB,EAAE,CAAC,KAAK,IAAI,CAAA;AAC3C,CAAC;AAuCD,MAAM,aAAa,GAA2B;IAC7C,iBAAiB,EAAE,IAAI;IACvB,gBAAgB,EAAE,GAAG;IACrB,mBAAmB,EAAE,IAAI;CACzB,CAAA;AAED,SAAS,gBAAgB;IACxB,MAAM,OAAO,GAAgB;QAC5B,MAAM,EAAE,gCAAgC;QACxC,YAAY,EAAE,cAAc;KAC5B,CAAA;IACD,IAAI,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,aAAa,GAAG,UAAU,YAAY,EAAE,CAAA;IACjD,CAAC;IACD,OAAO,OAAO,CAAA;AACf,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,uBAAuB;IACrC,OAAO,SAAS,CAAC;QAChB,GAAG,EAAE,uBAAuB;QAC5B,KAAK,EAAE,WAAW;QAClB,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,aAAa;QAClC,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,iCAAiC;QAC1D,KAAK,CAAC,aAAa;YAClB,MAAM,GAAG,GAAG,mEAAmE,UAAU,wBAAwB,CAAA;YAEjH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBACjC,OAAO,EAAE,gBAAgB,EAAE;aAC3B,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAClB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC7B,MAAM,IAAI,KAAK,CACd,+DAA+D,CAC/D,CAAA;gBACF,CAAC;gBACD,MAAM,IAAI,KAAK,CACd,0CAA0C,QAAQ,CAAC,MAAM,EAAE,CAC3D,CAAA;YACF,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAA;YAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACnD,CAAC;KACD,CAAC,CAAA;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,wBAAwB,CACtC,QAAgB;IAEhB,OAAO,SAAS,CAAC;QAChB,GAAG,EAAE,uBAAuB,QAAQ,EAAE;QACtC,KAAK,EAAE,WAAW;QAClB,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,UAAU;QACnC,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,iCAAiC;QAChE,KAAK,CAAC,aAAa;YAClB,MAAM,GAAG,GAAG,qCAAqC,UAAU,IAAI,QAAQ,oBAAoB,CAAA;YAE3F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBACjC,OAAO,EAAE;oBACR,YAAY,EAAE,cAAc;oBAC5B,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpE;aACD,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAA;YACZ,CAAC;YAED,IAAI,CAAC;gBACJ,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAA;YAC1D,CAAC;YAAC,MAAM,CAAC;gBACR,OAAO,IAAI,CAAA;YACZ,CAAC;QACF,CAAC;KACD,CAAC,CAAA;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,2BAA2B,CACzC,SAAuB;IAEvB,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CACtD,CAAA;IAED,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;QACvC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAEpE,OAAO;YACN,GAAG,QAAQ;YACX,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI;YAClC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI;YAClC,kBAAkB,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW;YAChD,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI;YACxC,KAAK,EAAE,MAAM,EAAE,KAAK;SACpB,CAAA;IACF,CAAC,CAAC,CAAA;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC7B,SAA6B;IAE7B,MAAM,WAAW,GAAG,IAAI,GAAG,CAC1B,SAAS;SACP,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;SACzB,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACjD,CAAA;IAED,MAAM,aAAa,GAAG,IAAI,GAAG,EAAmB,CAAA;IAChD,MAAM,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC1C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;QACzD,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAA;IACpD,CAAC,CAAC,CACF,CAAA;IAED,OAAO,aAAa,CAAA;AACrB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,2BAA2B,CACzC,SAA6B;IAE7B,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CACtC,2CAA2C,CAC3C,CAAA;IAED,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9C,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAChC,OAAO,MAAM,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC3C,CAAC,CAAC,CACF,CAAA;IAED,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,GAAG,QAAQ;QACX,YAAY,EAAE,qBAAqB,CAAC,KAAK,CAAC;KAC1C,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CACjC,SAA6B;IAE7B,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAChC,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACpD,OAAO,SAAS,CAAA;QACjB,CAAC;QACD,OAAO,uBAAuB,CAAC;YAC9B,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,YAAY,EAAE,QAAQ,CAAC,WAAW;SAClC,CAAC,CAAA;IACH,CAAC,CAAC,CACF,CAAA;IAED,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,GAAG,QAAQ;QACX,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC;KAC/B,CAAC,CAAC,CAAA;AACJ,CAAC;AAaD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAmB;IAC5C,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAClC,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAE1B,IAAI,CAAC;QACJ,0EAA0E;QAC1E,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,IAAI,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACN,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,4CAA4C;iBACrD,CAAA;YACF,CAAC;YAED,MAAM,OAAO,GAAG,GAAG,CAAC,iCAAiC,CAAC,CAAC,KAAK,EAAE,CAAA;YAE9D,IAAI,iBAAqC,CAAA;YACzC,IAAI,CAAC;gBACJ,MAAM,SAAS,GAAG,MAAM,uBAAuB,EAAE,CAAA;gBAEjD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;oBAC5C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAA;gBACnE,CAAC;gBAED,OAAO,CAAC,IAAI,GAAG,6BAA6B,CAAA;gBAC5C,iBAAiB,GAAG,MAAM,2BAA2B,CAAC,SAAS,CAAC,CAAA;gBAEhE,OAAO,CAAC,IAAI,GAAG,6BAA6B,CAAA;gBAC5C,iBAAiB,GAAG,MAAM,2BAA2B,CAAC,iBAAiB,CAAC,CAAA;gBAExE,OAAO,CAAC,IAAI,EAAE,CAAA;gBACd,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,iBAAiB,CAAC,CAAA;gBAE9D,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;qBAC1D,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC;qBACvC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;gBAEvB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;wBACtD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,IAAI,CAC7B,CAAA;wBACD,OAAO,QAAQ,EAAE,kBAAkB,IAAI,IAAI,CAAA;oBAC5C,CAAC,CAAC,CAAA;oBAEF,OAAO,CAAC,GAAG,EAAE,CAAA;oBACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,MAAM,CACX,oCAAoC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;wBAClE,yDAAyD,CAC1D,CACD,CAAA;oBACD,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAClE,CAAA;oBACD,OAAO,CAAC,GAAG,EAAE,CAAA;gBACd,CAAC;gBAED,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;gBACnC,iBAAiB,GAAG,MAAM,mBAAmB,CAAC,iBAAiB,CAAC,CAAA;gBAEhE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC/B,MAAM,UAAU,GAAG,CAAC,CAAC,SAAS,KAAK,IAAI,CAAA;oBACvC,MAAM,aAAa,GAAG,CAAC,CAAC,YAAY,KAAK,IAAI,CAAA;oBAC7C,MAAM,UAAU,GAAG,CAAC,CAAC,SAAS,KAAK,IAAI,CAAA;oBACvC,MAAM,aAAa,GAAG,CAAC,CAAC,YAAY,KAAK,IAAI,CAAA;oBAE7C,4CAA4C;oBAC5C,MAAM,UAAU,GAAG,UAAU,IAAI,CAAC,aAAa,CAAA;oBAC/C,MAAM,UAAU,GAAG,UAAU,IAAI,CAAC,aAAa,CAAA;oBAC/C,IAAI,UAAU,IAAI,CAAC,UAAU;wBAAE,OAAO,CAAC,CAAC,CAAA;oBACxC,IAAI,CAAC,UAAU,IAAI,UAAU;wBAAE,OAAO,CAAC,CAAA;oBAEvC,+CAA+C;oBAC/C,MAAM,UAAU,GAAG,CAAC,UAAU,IAAI,CAAC,aAAa,CAAA;oBAChD,MAAM,UAAU,GAAG,CAAC,UAAU,IAAI,CAAC,aAAa,CAAA;oBAChD,IAAI,UAAU,IAAI,CAAC,UAAU;wBAAE,OAAO,CAAC,CAAC,CAAA;oBACxC,IAAI,CAAC,UAAU,IAAI,UAAU;wBAAE,OAAO,CAAC,CAAA;oBAEvC,oCAAoC;oBACpC,MAAM,UAAU,GAAG,UAAU,IAAI,aAAa,CAAA;oBAC9C,MAAM,UAAU,GAAG,UAAU,IAAI,aAAa,CAAA;oBAC9C,IAAI,UAAU,IAAI,CAAC,UAAU;wBAAE,OAAO,CAAC,CAAC,CAAA;oBACxC,IAAI,CAAC,UAAU,IAAI,UAAU;wBAAE,OAAO,CAAC,CAAA;oBAEvC,OAAO,CAAC,CAAA;gBACT,CAAC,CAAC,CAAA;gBAEF,OAAO,CAAC,OAAO,CAAC,SAAS,iBAAiB,CAAC,MAAM,sBAAsB,CAAC,CAAA;YACzE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACtE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACrB,OAAO;oBACN,OAAO,EAAE,KAAK;oBACd,OAAO;oBACP,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC;iBAC1D,CAAA;YACF,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAEpD,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAA;YACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA;YACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAA;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAA;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAA;YACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAA;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAA;YAClE,OAAO,CAAC,GAAG,EAAE,CAAA;YAEb,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC9C,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW;oBAChC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE;oBACpC,CAAC,CAAC,EAAE,CAAA;gBACL,MAAM,UAAU,GAAG,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;gBACjE,MAAM,cAAc,GAAG,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;gBAEvE,MAAM,SAAS,GAAG;oBACjB,WAAW;oBACX,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI;oBACjB,UAAU;oBACV,cAAc;iBACd,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;gBACjB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAEhC,MAAM,gBAAgB,GAAG;oBACxB,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI;oBAClD,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,WAAW;oBACrC,CAAC,CAAC,WAAW;iBACb,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;gBACjB,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,CAAA;gBAE7D,OAAO;oBACN,IAAI;oBACJ,KAAK,EAAE,CAAC,CAAC,IAAI;oBACb,WAAW;oBACX,QAAQ,EAAE,CAAC;iBACX,CAAA;YACF,CAAC,CAAC,CAAA;YAEF,QAAQ,GAAG,MAAM,MAAM,CAAC;gBACvB,OAAO,EAAE,2BAA2B;gBACpC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;oBACvB,IAAI,CAAC,KAAK,EAAE,CAAC;wBACZ,OAAO,UAAU,CAAA;oBAClB,CAAC;oBACD,OAAO,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE;wBACrC,IAAI,EAAE;4BACL,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE;4BAC7C,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE;4BAC9C;gCACC,GAAG,EAAE,6BAA6B;gCAClC,SAAS,EAAE,QAAQ,CAAC,QAAQ;6BAC5B;4BACD;gCACC,GAAG,EAAE,yBAAyB;gCAC9B,SAAS,EAAE,QAAQ,CAAC,QAAQ;6BAC5B;4BACD,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC,gBAAgB,EAAE;yBAC5D;qBACD,CAAC,CAAA;gBACH,CAAC;aACD,CAAC,CAAA;QACH,CAAC;QAED,gCAAgC;QAChC,IAAI,CAAC,CAAC,MAAM,gBAAgB,EAAE,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAA;QACtD,CAAC;QAED,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CACzD,2CAA2C,CAC3C,CAAA;QAED,mCAAmC;QACnC,IAAI,MAAM,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,aAAa,QAAQ,kBAAkB,CAAA;YACvD,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAA;YACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;QACnC,CAAC;QAED,uBAAuB;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAAA;QACjE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAElD,oCAAoC;QACpC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAEtD,oCAAoC;QACpC,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;YACtC,MAAM,OAAO,GAAG,6BAA6B,YAAY,EAAE,CAAA;YAC3D,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAA;YACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;QACnC,CAAC;QAAC,MAAM,CAAC;YACR,iDAAiD;QAClD,CAAC;QAED,MAAM,OAAO,GAAG,sBAAsB,UAAU,IAAI,QAAQ,MAAM,CAAA;QAElE,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,KAAK,CAAC,CAAC,CAAA;QACpD,CAAC;QAED,uBAAuB;QACvB,MAAM,WAAW,GAAG,MAAM,UAAU,CACnC,KAAK,EACL,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,EAChC;YACC,GAAG,EAAE,QAAQ;YACb,MAAM;SACN,CACD,CAAA;QAED,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC1B,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,+BAA+B,WAAW,CAAC,OAAO,EAAE;gBAC7D,KAAK,EAAE,WAAW,CAAC,KAAK;aACxB,CAAA;QACF,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAA;QACvD,CAAC;QAED,oBAAoB;QACpB,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;YAC7D,GAAG,EAAE,YAAY;YACjB,MAAM;SACN,CAAC,CAAA;QAEF,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC1B,iDAAiD;YACjD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAA;YAChE,CAAC;YACD,IAAI,CAAC;gBACJ,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACrE,CAAC;YAAC,MAAM,CAAC;gBACR,wBAAwB;YACzB,CAAC;YACD,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,wBAAwB,WAAW,CAAC,OAAO,EAAE;gBACtD,KAAK,EAAE,WAAW,CAAC,KAAK;aACxB,CAAA;QACF,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,QAAQ,2BAA2B,YAAY,EAAE,CAAA;QAC9E,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;QACzC,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAAe,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QAChD,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;QACzC,CAAC;QACD,OAAO;YACN,OAAO,EAAE,KAAK;YACd,OAAO;YACP,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC;SAC1D,CAAA;IACF,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,EAC1B,MAAM,GAAG,KAAK,MACW,EAAE;IAC3B,IAAI,CAAC;QACJ,gCAAgC;QAChC,IAAI,CAAC,CAAC,MAAM,gBAAgB,EAAE,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAA;QACtD,CAAC;QAED,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CACxD,2CAA2C,CAC3C,CAAA;QAED,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAA;QACvC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAA;QAE1C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,gEAAgE,CAAA;YAChF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;gBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC,CAAA;YAC9D,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;QAClC,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO;gBACN,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,SAAS,SAAS,CAAC,MAAM,cAAc;aAChD,CAAA;QACF,CAAC;QAED,wBAAwB;QACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;QAEpD,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,QAAQ,GAAG;YAClC,KAAK,EAAE,CAAC;YACR,WAAW,EAAE,CAAC,CAAC,IAAI;SACnB,CAAC,CAAC,CAAA;QAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAA;QAEtD,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC;YACrC,OAAO,EAAE,oBAAoB;YAC7B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACvB,IAAI,CAAC,KAAK,EAAE,CAAC;oBACZ,OAAO,UAAU,CAAA;gBAClB,CAAC;gBACD,OAAO,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE;oBACrC,IAAI,EAAE;wBACL,MAAM;wBACN,gBAAgB;wBAChB,aAAa;wBACb,gBAAgB;wBAChB,aAAa;qBACb;iBACD,CAAC,CAAA;YACH,CAAC;SACD,CAAC,CAAA;QAEF,qCAAqC;QACrC,MAAM,aAAa,GAAG;YACrB;gBACC,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,OAAO;gBACd,WAAW,EAAE,yCAAyC;aACtD;YACD;gBACC,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,uCAAuC;aACpD;YACD;gBACC,IAAI,EAAE,iBAAiB;gBACvB,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,+BAA+B;aAC5C;YACD;gBACC,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,+BAA+B;aAC5C;SACD,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;YAC3B,OAAO,EAAE,mCAAmC,gBAAgB,CAAC,KAAK,IAAI;YACtE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACvB,IAAI,CAAC,KAAK,EAAE,CAAC;oBACZ,OAAO,aAAa,CAAA;gBACrB,CAAC;gBACD,OAAO,WAAW,CAAC,aAAa,EAAE,KAAK,EAAE;oBACxC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC;iBACtC,CAAC,CAAA;YACH,CAAC;SACD,CAAC,CAAA;QAEF,QAAQ,MAAM,EAAE,CAAC;YAChB,KAAK,OAAO;gBACX,OAAO,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAA;YACpE,KAAK,MAAM;gBACV,OAAO,MAAM,YAAY,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAA;YACnE,KAAK,QAAQ;gBACZ,OAAO,MAAM,MAAM,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC7D,KAAK,MAAM;gBACV,OAAO,MAAM,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QAC/B,CAAC;QAED,OAAO;YACN,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,SAAS,SAAS,CAAC,MAAM,cAAc;SAChD,CAAA;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAAe,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QAChD,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;QACzC,CAAC;QACD,OAAO;YACN,OAAO,EAAE,KAAK;YACd,OAAO;YACP,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC;SAC1D,CAAA;IACF,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,EAC5B,QAAQ,EACR,MAAM,GAAG,KAAK,GAId;IACA,IAAI,CAAC;QACJ,MAAM,EACL,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,cAAc,GACd,GAAG,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAA;QAE7D,IAAI,YAAY,CAAA;QAEhB,wCAAwC;QACxC,IAAI,QAAQ,EAAE,CAAC;YACd,kEAAkE;YAClE,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7D,sBAAsB;gBACtB,YAAY,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAA;gBAChD,IAAI,CAAC,YAAY,EAAE,CAAC;oBACnB,MAAM,OAAO,GAAG,gBAAgB,QAAQ,oGAAoG,CAAA;oBAC5I,IAAI,CAAC,MAAM;wBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAA;oBACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;gBACnC,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,mCAAmC;gBACnC,YAAY,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAA;gBAC1C,IAAI,CAAC,YAAY,EAAE,CAAC;oBACnB,MAAM,OAAO,GAAG,aAAa,QAAQ,aAAa,CAAA;oBAClD,IAAI,CAAC,MAAM;wBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAA;oBACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;gBACnC,CAAC;YACF,CAAC;QACF,CAAC;aAAM,CAAC;YACP,0DAA0D;YAC1D,IAAI,CAAC,CAAC,MAAM,gBAAgB,EAAE,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAA;YACtD,CAAC;YAED,8CAA8C;YAC9C,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAA;YAEvC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,0EAA0E,CAAA;gBAC1F,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;gBAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;YACnC,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAEpD,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,QAAQ,GAAG;gBAClC,KAAK,EAAE,CAAC;gBACR,WAAW,EAAE,CAAC,CAAC,IAAI;aACnB,CAAC,CAAC,CAAA;YAEH,YAAY,GAAG,MAAM,MAAM,CAAC;gBAC3B,OAAO,EAAE,8BAA8B;gBACvC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;oBACvB,IAAI,CAAC,KAAK,EAAE,CAAC;wBACZ,OAAO,UAAU,CAAA;oBAClB,CAAC;oBACD,OAAO,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE;wBACrC,IAAI,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,CAAC;qBAC9D,CAAC,CAAA;gBACH,CAAC;aACD,CAAC,CAAA;QACH,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,sBAAsB,CAAA;YACtC,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAA;YACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;QACnC,CAAC;QAED,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAE5D,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,MAAM,CAAC,IAAI,CAChB,iBAAiB,YAAY,CAAC,KAAK,2BAA2B,CAC9D,CACD,CAAA;YACD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAA;YAC1C,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAA;YAEb,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YACrD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC;gBAClC,OAAO,EAAE,WAAW,YAAY,CAAC,KAAK,kCAAkC;gBACxE,OAAO,EAAE,KAAK;aACd,CAAC,CAAA;YAEF,IAAI,CAAC,YAAY,EAAE,CAAC;gBACnB,MAAM,OAAO,GAAG,mBAAmB,CAAA;gBACnC,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;gBAC7C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;YACnC,CAAC;QACF,CAAC;aAAM,CAAC;YACP,kDAAkD;YAClD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YACrD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC;gBAClC,OAAO,EAAE,WAAW,YAAY,CAAC,KAAK,QAAQ,YAAY,CAAC,IAAI,GAAG;gBAClE,OAAO,EAAE,KAAK;aACd,CAAC,CAAA;YAEF,IAAI,CAAC,YAAY,EAAE,CAAC;gBACnB,MAAM,OAAO,GAAG,mBAAmB,CAAA;gBACnC,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;gBAC7C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;YACnC,CAAC;QACF,CAAC;QAED,gCAAgC;QAChC,MAAM,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAEvC,MAAM,OAAO,GAAG,aAAa,YAAY,CAAC,KAAK,wBAAwB,CAAA;QACvE,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;QACrD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAAe,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QAChD,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;QACzC,CAAC;QACD,OAAO;YACN,OAAO,EAAE,KAAK;YACd,OAAO;YACP,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC;SAC1D,CAAA;IACF,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,UAAwB,EAAE;IAE1B,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAElC,IAAI,CAAC;QACJ,gCAAgC;QAChC,IAAI,CAAC,CAAC,MAAM,gBAAgB,EAAE,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAA;QACtD,CAAC;QAED,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAClD,2CAA2C,CAC3C,CAAA;QAED,IAAI,eAAe,CAAA;QAEnB,0DAA0D;QAC1D,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,eAAe,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YACrD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtB,MAAM,OAAO,GAAG,aAAa,OAAO,CAAC,QAAQ,aAAa,CAAA;gBAC1D,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAA;gBACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;YACnC,CAAC;QACF,CAAC;aAAM,CAAC;YACP,wCAAwC;YACxC,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAA;YAEvC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,gEAAgE,CAAA;gBAChF,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;gBAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;YACnC,CAAC;YAED,wBAAwB;YACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAEpD,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,QAAQ,GAAG;gBAClC,KAAK,EAAE,CAAC;gBACR,WAAW,EAAE,CAAC,CAAC,IAAI;aACnB,CAAC,CAAC,CAAA;YAEH,eAAe,GAAG,MAAM,MAAM,CAAC;gBAC9B,OAAO,EAAE,6BAA6B;gBACtC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;oBACvB,IAAI,CAAC,KAAK,EAAE,CAAC;wBACZ,OAAO,UAAU,CAAA;oBAClB,CAAC;oBACD,OAAO,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE;wBACrC,IAAI,EAAE;4BACL,MAAM;4BACN,gBAAgB;4BAChB,aAAa;4BACb,gBAAgB;4BAChB,aAAa;yBACb;qBACD,CAAC,CAAA;gBACH,CAAC;aACD,CAAC,CAAA;QACH,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,sBAAsB,CAAA;YACtC,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAA;YACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;QACnC,CAAC;QAED,yCAAyC;QACzC,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACpD,MAAM,OAAO,GAAG,iCAAiC,eAAe,CAAC,IAAI,EAAE,CAAA;YACvE,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;YACnD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;QACnC,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CACjE,CAAA;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA;QAC9D,CAAC;QAED,0CAA0C;QAC1C,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE;YACjE,GAAG,EAAE,eAAe,CAAC,IAAI;SACzB,CAAC,CAAA;QAEF,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC1B,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,6BAA6B,WAAW,CAAC,OAAO,EAAE;gBAC3D,KAAK,EAAE,WAAW,CAAC,KAAK;aACxB,CAAA;QACF,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAA;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAAe,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QAChD,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;QACzC,CAAC;QACD,OAAO;YACN,OAAO,EAAE,KAAK;YACd,OAAO;YACP,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC;SAC1D,CAAA;IACF,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,UAAwB,EAAE;IAE1B,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAElC,IAAI,CAAC;QACJ,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CACrE,2CAA2C,CAC3C,CAAA;QACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CACpC,+CAA+C,CAC/C,CAAA;QAED,IAAI,cAAc,CAAA;QAElB,wCAAwC;QACxC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,kEAAkE;YAClE,IACC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;gBAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAClC,CAAC;gBACF,4BAA4B;gBAC5B,cAAc,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;gBAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;oBACrB,+EAA+E;oBAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;oBAC3D,IAAI,CAAC;wBACJ,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;wBAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAGhC,CAAA;wBACD,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;4BAClB,oEAAoE;4BACpE,cAAc,GAAG;gCAChB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;gCACjD,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;gCAC5D,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;gCACzC,IAAI,EAAE,OAAO,CAAC,QAAQ;6BACtB,CAAA;wBACF,CAAC;oBACF,CAAC;oBAAC,MAAM,CAAC;wBACR,iCAAiC;oBAClC,CAAC;gBACF,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,mCAAmC;gBACnC,cAAc,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YACrD,CAAC;YAED,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,aAAa,OAAO,CAAC,QAAQ,aAAa,CAAA;gBAC1D,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAA;gBACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;YACnC,CAAC;QACF,CAAC;aAAM,CAAC;YACP,0DAA0D;YAC1D,IAAI,CAAC,CAAC,MAAM,gBAAgB,EAAE,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAA;YACtD,CAAC;YACD,wCAAwC;YACxC,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAA;YAEvC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,gEAAgE,CAAA;gBAChF,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;gBAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;YACnC,CAAC;YAED,wBAAwB;YACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAEpD,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,QAAQ,GAAG;gBAClC,KAAK,EAAE,CAAC;gBACR,WAAW,EAAE,CAAC,CAAC,IAAI;aACnB,CAAC,CAAC,CAAA;YAEH,cAAc,GAAG,MAAM,MAAM,CAAC;gBAC7B,OAAO,EAAE,4BAA4B;gBACrC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;oBACvB,IAAI,CAAC,KAAK,EAAE,CAAC;wBACZ,OAAO,UAAU,CAAA;oBAClB,CAAC;oBACD,OAAO,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE;wBACrC,IAAI,EAAE;4BACL,MAAM;4BACN,gBAAgB;4BAChB,aAAa;4BACb,gBAAgB;4BAChB,aAAa;yBACb;qBACD,CAAC,CAAA;gBACH,CAAC;aACD,CAAC,CAAA;QACH,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,sBAAsB,CAAA;YACtC,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAA;YACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;QACnC,CAAC;QAED,yCAAyC;QACzC,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACnD,MAAM,OAAO,GAAG,iCAAiC,cAAc,CAAC,IAAI,EAAE,CAAA;YACtE,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;YACnD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;QACnC,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,cAAc,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,oBAAoB,CAClE,CACD,CAAA;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,cAAc,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA;QAC7D,CAAC;QAED,gDAAgD;QAChD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAEtD,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC/B,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,MAAM,CAAC,OAAO;aACvB,CAAA;QACF,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAA;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAAe,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QAChD,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;QACzC,CAAC;QACD,OAAO;YACN,OAAO,EAAE,KAAK;YACd,OAAO;YACP,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC;SAC1D,CAAA;IACF,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC3B,UAAyB,EAAE;IAE3B,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAElC,IAAI,CAAC;QACJ,MAAM,EACL,iBAAiB,EACjB,iBAAiB,EACjB,0BAA0B,EAC1B,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,YAAY,GACZ,GAAG,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAA;QAE7D,0BAA0B;QAC1B,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,IAAI,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACvE,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,YAAY,EAAE,CAAA;gBACpB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAA;YACzD,CAAC;YAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YACrD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC;gBAClC,OAAO,EACN,4FAA4F;gBAC7F,OAAO,EAAE,KAAK;aACd,CAAC,CAAA;YAEF,IAAI,YAAY,EAAE,CAAC;gBAClB,MAAM,YAAY,EAAE,CAAA;gBACpB,MAAM,OAAO,GAAG,sDAAsD,CAAA;gBACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;gBACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;YAClC,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAA;gBAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;YAC/C,CAAC;QACF,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,gDAAgD;YAChD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YACnD,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAA;YACrC,MAAM,OAAO,GAAG,2BAA2B,YAAY,EAAE,CAAA;YACzD,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;YACrD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;QAClC,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACZ,6CAA6C;YAC7C,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAA;YAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,QAAQ,EAAE,EAAE,CAAA;QAClE,CAAC;QAED,+BAA+B;QAC/B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;QAE7D,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAA;QAC1C,MAAM,YAAY,GAAG,MAAM,0BAA0B,EAAE,CAAA;QACvD,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAA;QAEvC,uBAAuB;QACvB,MAAM,aAAa,GAAG;YACrB;gBACC,IAAI,EAAE,iBAAiB;gBACvB,KAAK,EAAE,WAAW;gBAClB,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,YAAY;aAC9D;YACD;gBACC,IAAI,EAAE,mBAAmB;gBACzB,KAAK,EAAE,OAAO;gBACd,WAAW,EAAE,uDAAuD;aACpE;SACD,CAAA;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAA;QAE9D,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC;YACnC,OAAO,EAAE,gCAAgC;YACzC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACvB,IAAI,CAAC,KAAK;oBAAE,OAAO,aAAa,CAAA;gBAChC,OAAO,WAAW,CAAC,aAAa,EAAE,KAAK,EAAE;oBACxC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC;iBACtC,CAAC,CAAA;YACH,CAAC;SACD,CAAC,CAAA;QAEF,IAAI,cAAc,KAAK,OAAO,EAAE,CAAC;YAChC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC;gBAClC,OAAO,EACN,4FAA4F;gBAC7F,OAAO,EAAE,KAAK;aACd,CAAC,CAAA;YAEF,IAAI,YAAY,EAAE,CAAC;gBAClB,MAAM,YAAY,EAAE,CAAA;gBACpB,OAAO,CAAC,GAAG,EAAE,CAAA;gBACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CACV,wDAAwD,CACxD,CACD,CAAA;gBACD,OAAO;oBACN,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,sDAAsD;iBAC/D,CAAA;YACF,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAA;gBAC7C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;YAC/C,CAAC;QACF,CAAC;QAED,IAAI,cAAc,KAAK,WAAW,EAAE,CAAC;YACpC,iCAAiC;YACjC,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAA;YAC3C,IAAI,YAAY,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAA;YAC1C,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,gCAAgC,CAAC,CAAC,CAAA;YACvE,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAA;YAEb,MAAM,aAAa,GAAG;gBACrB;oBACC,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,MAAM;oBACb,WAAW,EAAE,4BAA4B;iBACzC;gBACD,GAAG,CAAC,YAAY;oBACf,CAAC,CAAC;wBACA;4BACC,IAAI,EAAE,QAAQ;4BACd,KAAK,EAAE,QAAQ;4BACf,WAAW,EAAE,qBAAqB,UAAU,GAAG;yBAC/C;qBACD;oBACF,CAAC,CAAC,EAAE,CAAC;gBACN;oBACC,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,QAAQ;oBACf,WAAW,EAAE,yBAAyB;iBACtC;aACD,CAAA;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;gBAC3B,OAAO,EAAE,4BAA4B;gBACrC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;oBACvB,IAAI,CAAC,KAAK;wBAAE,OAAO,aAAa,CAAA;oBAChC,OAAO,WAAW,CAAC,aAAa,EAAE,KAAK,EAAE;wBACxC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC;qBACtC,CAAC,CAAA;gBACH,CAAC;aACD,CAAC,CAAA;YAEF,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,EAAE,CAAA;gBACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CACpE,CAAA;gBACD,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAC9D,CAAA;gBAED,MAAM,MAAM,GAAG,MAAM,eAAe,CACnC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAClD,CAAA;gBACD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;gBACzC,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAA;gBAErC,OAAO,CAAC,GAAG,EAAE,CAAA;gBACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CAAC,6BAA6B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CACpE,CAAA;gBACD,OAAO;oBACN,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,2BAA2B,YAAY,EAAE;iBAClD,CAAA;YACF,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC;oBAClC,OAAO,EAAE,qCAAqC,UAAU,IAAI;oBAC5D,OAAO,EAAE,KAAK;iBACd,CAAC,CAAA;gBAEF,IAAI,YAAY,EAAE,CAAC;oBAClB,MAAM,aAAa,GAAG,MAAM,UAAU,EAAE,CAAA;oBACxC,OAAO,aAAa,CAAC,cAAc,CAAA;oBACnC,MAAM,UAAU,CAAC,aAAa,CAAC,CAAA;oBAE/B,OAAO,CAAC,GAAG,EAAE,CAAA;oBACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CACV,uCAAuC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAC/D,CACD,CAAA;oBACD,OAAO;wBACN,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,qCAAqC,UAAU,EAAE;qBAC1D,CAAA;gBACF,CAAC;qBAAM,CAAC;oBACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAA;oBAC7C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;gBAC/C,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAA;gBAC7C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;YAC/C,CAAC;QACF,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAA;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAAe,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QAChD,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;QACzC,CAAC;QACD,OAAO;YACN,OAAO,EAAE,KAAK;YACd,OAAO;YACP,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC;SAC1D,CAAA;IACF,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACrC,MAAM,EAAE,0BAA0B,EAAE,GAAG,MAAM,MAAM,CAClD,2CAA2C,CAC3C,CAAA;IAED,IAAI,MAAM,0BAA0B,EAAE,EAAE,CAAC;QACxC,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,iCAAiC;IACjC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IACjC,OAAO,MAAM,CAAC,OAAO,CAAA;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC/B,IAAI,CAAC;QACJ,MAAM,EACL,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,GACjB,GAAG,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAA;QAE7D,8BAA8B;QAC9B,IAAI,MAAM,0BAA0B,EAAE,EAAE,CAAC;YACxC,yCAAyC;YACzC,OAAO,MAAM,sBAAsB,EAAE,CAAA;QACtC,CAAC;QAED,4BAA4B;QAC5B,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,gGAAgG,CAChG,CACD,CAAA;QACD,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,2IAA2I,CAC3I,CACD,CAAA;QACD,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,wEAAwE,KAAK,CAAC,SAAS,CAAC,gBAAgB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CACrJ,CACD,CAAA;QAED,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CAAC,4DAA4D,CAAC,CACzE,CAAA;QACD,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CACV,iFAAiF,CACjF,CACD,CAAA;QAED,qCAAqC;QACrC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;QACrD,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAA;QAEvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QAEvE,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC;YAChC,OAAO,EAAE,gCAAgC;YACzC,OAAO,EAAE,IAAI;SACb,CAAC,CAAA;QAEF,IAAI,QAAgB,CAAA;QACpB,IAAI,UAAU,EAAE,CAAC;YAChB,QAAQ,GAAG,UAAU,CAAA;QACtB,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,2EAA2E,CAC3E,CACD,CAAA;YACD,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAC9D,CAAA;YACD,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;QAC3D,CAAC;QAED,iCAAiC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC3C,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAA;QAErC,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CAAC,iCAAiC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CACxE,CAAA;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,0BAA0B;QAC1B,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAE1D,wDAAwD;QACxD,MAAM,sBAAsB,EAAE,CAAA;QAE9B,0DAA0D;QAC1D,MAAM,iCAAiC,EAAE,CAAA;QAEzC,sCAAsC;QACtC,OAAO,MAAM,sBAAsB,EAAE,CAAA;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAAe,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QAChD,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;QACxC,OAAO;YACN,OAAO,EAAE,KAAK;YACd,OAAO;YACP,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC;SAC1D,CAAA;IACF,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAiB;IAK1C,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3D,MAAM,CAAC,GAAG,QAAe,CAAA;IACzB,OAAO,CACN,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;QAC3B,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAClB,OAAO,CAAC,CAAC,QAAQ,EAAE,YAAY,KAAK,QAAQ;QAC5C,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,CACnC,CAAA;AACF,CAAC;AAED,KAAK,UAAU,sBAAsB;IACpC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;IACpD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAA;IAE3C,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC7B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;YAC9D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAA;QAChE,CAAC,CAAC,CACF,CAAA;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAA;QACjD,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,YAAY,EAAE,CAAC;YACzD,IAAI,QAAQ,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;gBACvD,OAAO,CAAC,GAAG,CACV,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CACrH,CAAA;YACF,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CACV,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAC/E,CAAA;YACF,CAAC;QACF,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,2CAA2C;QAC3C,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,OAAM;QACP,CAAC;QAED,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,iHAAiH,CACjH,CACD,CAAA;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC5E,MAAM,OAAO,GAAG;YACf,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxB,IAAI,EAAE,aAAa,CAAC,CAAC,IAAI,EAAE;gBAC3B,KAAK,EAAE,CAAC,CAAC,IAAI;gBACb,WAAW,EAAE,CAAC,CAAC,WAAW;aAC1B,CAAC,CAAC;YACH;gBACC,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,MAAe;gBACtB,WAAW,EAAE,6BAA6B;aAC1C;SACD,CAAA;QAED,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC;YAC9B,OAAO,EAAE,qDAAqD;YAC9D,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACvB,IAAI,CAAC,KAAK;oBAAE,OAAO,OAAO,CAAA;gBAC1B,OAAO,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE;oBAClC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC;iBACtC,CAAC,CAAA;YACH,CAAC;SACD,CAAC,CAAA;QAEF,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAM;QACP,CAAC;QAED,oDAAoD;QACpD,IAAI,MAA6D,CAAA;QACjE,IAAI,CAAC;YACJ,MAAM,GAAG,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAc,EAAE,CAAA;QAC5D,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,MAAM,CACX,8BAA8B,MAAM,CAAC,OAAO,IAAI,eAAe,2DAA2D,CAC1H,CACD,CAAA;YACD,SAAQ;QACT,CAAC;IACF,CAAC;AACF,CAAC;AAED,KAAK,UAAU,iCAAiC;IAC/C,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CACtC,2CAA2C,CAC3C,CAAA;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,wEAAwE,CACxE,CACD,CAAA;IACD,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,gGAAgG;QAC/F,8FAA8F,CAC/F,CACD,CAAA;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;IAEpD,MAAM,OAAO,GAAG,GAAG,CAAC,iCAAiC,CAAC,CAAC,KAAK,EAAE,CAAA;IAC9D,IAAI,iBAAqC,CAAA;IACzC,IAAI,CAAC;QACJ,MAAM,SAAS,GAAG,MAAM,uBAAuB,EAAE,CAAA;QACjD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;YAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAA;YAC5C,OAAM;QACP,CAAC;QAED,OAAO,CAAC,IAAI,GAAG,6BAA6B,CAAA;QAC5C,iBAAiB,GAAG,MAAM,2BAA2B,CAAC,SAAS,CAAC,CAAA;QAEhE,OAAO,CAAC,IAAI,GAAG,6BAA6B,CAAA;QAC5C,iBAAiB,GAAG,MAAM,2BAA2B,CAAC,iBAAiB,CAAC,CAAA;QAExE,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,iBAAiB,CAAC,CAAA;QAC9D,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;aAC1D,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC;aACvC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;QAEvB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,EAAE,CAAA;YACd,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC/C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,CAAA;gBACtE,OAAO,QAAQ,EAAE,kBAAkB,IAAI,IAAI,CAAA;YAC5C,CAAC,CAAC,CAAA;YACF,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,MAAM,CACX,mCAAmC,SAAS,CAAC,IAAI,CAChD,IAAI,CACJ,sEAAsE,CACvE,CACD,CAAA;YACD,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CACnE,CAAA;YACD,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;QACpC,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;QACpC,CAAC;QAED,iBAAiB,GAAG,MAAM,mBAAmB,CAAC,iBAAiB,CAAC,CAAA;QAChE,OAAO,CAAC,OAAO,CAAC,SAAS,iBAAiB,CAAC,MAAM,sBAAsB,CAAC,CAAA;IACzE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACrB,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,MAAM,CACX,+DAA+D,CAC/D,CACD,CAAA;QACD,OAAM;IACP,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAC1E,CAAA;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,4GAA4G,CAC5G,CACD,CAAA;QACD,OAAM;IACP,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAA;IACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAA;IAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAA;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAA;IAChE,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;QAC/B,sEAAsE;QACtE,MAAM,OAAO,GAAG,MAAM,2BAA2B,CAAC,UAAU,CAAC,CAAA;QAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;QACxD,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3C,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YAC3E,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACrC,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC;iBACvD,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,GAAG,CAAC,CAAA;YAEX,MAAM,gBAAgB,GAAG;gBACxB,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI;gBAClD,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,WAAW;gBACrC,CAAC,CAAC,WAAW;aACb,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YACjB,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,CAAA;YAE7D,OAAO;gBACN,IAAI;gBACJ,KAAK,EAAE,CAAC,CAAC,IAAI;gBACb,WAAW;gBACX,QAAQ,EAAE,CAAC;aACX,CAAA;QACF,CAAC,CAAC,CAAA;QAEF,OAAO;YACN,GAAG,eAAe;YAClB;gBACC,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAe;gBACtB,WAAW,EAAE,gCAAgC;aAC7C;YACD;gBACC,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,MAAe;gBACtB,WAAW,EAAE,4CAA4C;aACzD;SACD,CAAA;IACF,CAAC,CAAA;IAED,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAA;QACpC,4CAA4C;QAC5C,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;YAAE,OAAM;QAE/B,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC;YAC9B,OAAO,EAAE,sDAAsD;YAC/D,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACvB,IAAI,CAAC,KAAK;oBAAE,OAAO,OAAO,CAAA;gBAC1B,OAAO,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE;oBAClC,IAAI,EAAE;wBACL,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE;wBAC7C,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE;wBAC9C,EAAE,GAAG,EAAE,6BAA6B,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE;wBACpE,EAAE,GAAG,EAAE,yBAAyB,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE;wBAChE,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC,gBAAgB,EAAE;qBAC5D;iBACD,CAAC,CAAA;YACH,CAAC;SACD,CAAC,CAAA;QAEF,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YAClD,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAM;QACP,CAAC;QAED,mDAAmD;QACnD,IAAI,MAAM,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,mBAAmB,CAAC,CAAC,CAAA;YAC1D,SAAQ;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;QAChE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,MAAM,CACX,wBAAwB,SAAS,iDAAiD,SAAS,KAAK,CAChG,CACD,CAAA;YACD,IAAI,MAAM,CAAC,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;YACnE,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,SAAQ;QACT,CAAC;IACF,CAAC;AACF,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,sBAAsB;IACpC,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CACtE,2CAA2C,CAC3C,CAAA;IAED,KAAK,UAAU,qBAAqB;QACnC,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,wFAAwF,CACxF,CACD,CAAA;QACD,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,oEAAoE,CACpE,CACD,CAAA;QACD,MAAM,WAAW,GAAG,qBAAqB,aAAa,EAAE,CAAA;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,WAAW,IAAI,CAAC,CAAC,CAAA;QAEpD,MAAM,SAAS,EAAE,CAAA;QAEjB,OAAO,MAAM,YAAY,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,UAAU,qBAAqB,CAAC,aAAqB;QACzD,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,yBAAyB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CACrE,CACD,CAAA;QACD,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,iEAAiE,CACjE,CACD,CAAA;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAA;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAA;QAEpE,MAAM,YAAY,GAAG,sBAAsB,aAAa,EAAE,CAAA;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,YAAY,IAAI,CAAC,CAAC,CAAA;QAErD,MAAM,SAAS,EAAE,CAAA;IAClB,CAAC;IAED,mCAAmC;IACnC,IAAI,MAAM,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;QACzC,gEAAgE;QAChE,MAAM,UAAU,GAAG,MAAM,qBAAqB,EAAE,CAAA;QAChD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,UAAU,CAAA;QAClB,CAAC;QAED,yBAAyB;QACzB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,CAAA;QACjD,MAAM,aAAa,GAAG,QAAQ,EAAE,KAAK,IAAI,aAAa,CAAA;QAEtD,MAAM,qBAAqB,CAAC,aAAa,CAAC,CAAA;QAC1C,OAAO,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAA;IACxD,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAA;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;IACvD,MAAM,OAAO,GAAG,sBAAsB,UAAU,IAAI,aAAa,MAAM,CAAA;IAEvE,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CACtE,CAAA;IACD,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,gEAAgE,CAChE,CACD,CAAA;IAED,6CAA6C;IAC7C,MAAM,UAAU,GAAG,oBAAoB,aAAa,EAAE,CAAA;IACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,UAAU,IAAI,CAAC,CAAC,CAAA;IAEnD,0CAA0C;IAC1C,MAAM,SAAS,EAAE,CAAA;IAEjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,aAAa,KAAK,CAAC,CAAC,CAAA;IAE3D,uBAAuB;IACvB,MAAM,WAAW,GAAG,MAAM,UAAU,CACnC,KAAK,EACL,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,EAChC;QACC,GAAG,EAAE,QAAQ;QACb,MAAM,EAAE,KAAK;KACb,CACD,CAAA;IAED,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CACZ,KAAK,CAAC,GAAG,CAAC,iCAAiC,WAAW,CAAC,OAAO,EAAE,CAAC,CACjE,CAAA;QACD,OAAO;YACN,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,+BAA+B,WAAW,CAAC,OAAO,EAAE;YAC7D,KAAK,EAAE,WAAW,CAAC,KAAK;SACxB,CAAA;IACF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAA;IAE1D,oBAAoB;IACpB,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;QAC7D,GAAG,EAAE,YAAY;QACjB,MAAM,EAAE,KAAK;KACb,CAAC,CAAA;IAEF,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC1B,sBAAsB;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAA;QAC/D,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACrE,CAAC;QAAC,MAAM,CAAC;YACR,wBAAwB;QACzB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACzE,OAAO;YACN,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,wBAAwB,WAAW,CAAC,OAAO,EAAE;YACtD,KAAK,EAAE,WAAW,CAAC,KAAK;SACxB,CAAA;IACF,CAAC;IAED,mFAAmF;IACnF,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,CAAA;IACjD,MAAM,aAAa,GAAG,QAAQ,EAAE,KAAK,IAAI,aAAa,CAAA;IAEtD,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CACV,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,kCAAkC,CAChE,CACD,CAAA;IAED,MAAM,UAAU,GAAG,MAAM,qBAAqB,EAAE,CAAA;IAChD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,UAAU,CAAA;IAClB,CAAC;IAED,MAAM,qBAAqB,CAAC,aAAa,CAAC,CAAA;IAE1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;IAE1E,qBAAqB;IACrB,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE;QACjE,GAAG,EAAE,YAAY;KACjB,CAAC,CAAA;IAEF,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO;YACN,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,6BAA6B,WAAW,CAAC,OAAO,EAAE;YAC3D,KAAK,EAAE,WAAW,CAAC,KAAK;SACxB,CAAA;IACF,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAA;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IACjC,MAAM,EAAE,0BAA0B,EAAE,GAAG,MAAM,MAAM,CAClD,2CAA2C,CAC3C,CAAA;IACD,OAAO,0BAA0B,EAAE,CAAA;AACpC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,SAAS;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAA;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAA;QACjD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;gBAC/B,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;gBAC5C,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;YACtB,CAAC;QACF,CAAC,CAAA;QAED,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;YAC3B,wDAAwD;YACxD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACpC,OAAO,EAAE,CAAA;gBACT,OAAO,EAAE,CAAA;YACV,CAAC;YACD,+BAA+B;YAC/B,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrD,OAAO,EAAE,CAAA;gBACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;gBACxC,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;YAC/B,CAAC;QACF,CAAC,CAAA;QAED,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YAC9B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;YACtB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACjC,CAAC;aAAM,CAAC;YACP,yCAAyC;YACzC,OAAO,EAAE,CAAA;QACV,CAAC;IACF,CAAC,CAAC,CAAA;AACH,CAAC;AAED,mBAAmB;AAEnB,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;AAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;AAS3C;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,SAAkB;IAChD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;IAE3D,IAAI,WAAW,GAAG,SAAS,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IAE3C,2BAA2B;IAC3B,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAEvC,OAAO,IAAI,EAAE,CAAC;QACb,sCAAsC;QACtC,MAAM,OAAO,GAIR,EAAE,CAAA;QAEP,gCAAgC;QAChC,OAAO,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE;YACjD,WAAW,EAAE,WAAW;SACxB,CAAC,CAAA;QAEF,oCAAoC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAC3C,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE;gBACxC,WAAW,EAAE,SAAS;aACtB,CAAC,CAAA;QACH,CAAC;QAED,yBAAyB;QACzB,OAAO,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE;YAC/C,WAAW,EAAE,2BAA2B;SACxC,CAAC,CAAA;QAEF,sBAAsB;QACtB,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE;gBACtD,aAAa,EAAE,IAAI;aACnB,CAAC,CAAA;YACF,MAAM,WAAW,GAAG,OAAO;iBACzB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;iBACrE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;YAE9C,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;gBACjD,OAAO,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,MAAM,GAAG,CAAC,IAAI,GAAG;oBACvB,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;oBAC5D,WAAW,EAAE,QAAQ;iBACrB,CAAC,CAAA;YACH,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,iDAAiD;QAClD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAkB;YAC9C,OAAO,EAAE,gCAAgC,WAAW,GAAG;YACvD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACtB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACX,OAAO,OAAO,CAAA;gBACf,CAAC;gBACD,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE;oBACjC,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC;iBAC3C,CAAC,CAAA;YACH,CAAC;YACD,QAAQ,EAAE,EAAE;SACZ,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,QAAQ,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;gBACxC,OAAO,WAAW,CAAA;YACnB,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACtC,WAAW,GAAG,SAAS,CAAA;YACxB,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC;oBAC9B,OAAO,EAAE,2BAA2B;oBACpC,OAAO,EAAE,WAAW;oBACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBACnB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;4BACnB,OAAO,+BAA+B,CAAA;wBACvC,CAAC;wBACD,OAAO,IAAI,CAAA;oBACZ,CAAC;iBACD,CAAC,CAAA;gBACF,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;YAChC,CAAC;QACF,CAAC;aAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC1C,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAA;QAC5B,CAAC;IACF,CAAC;AACF,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAC,WAAW,EAAE,CAAA;IAC1B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAA;IACb,CAAC;AACF,CAAC;AAQD,SAAS,UAAU,CAClB,OAAe,EACf,IAAc,EACd,OAA0C;IAE1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YAClC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAC1C,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBAChB,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;YAC3B,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC;oBACP,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,4BAA4B,IAAI,EAAE;iBAC3C,CAAC,CAAA;YACH,CAAC;QACF,CAAC,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;AACH,CAAC;AAED,SAAS,qBAAqB,CAC7B,OAAe,EACf,IAAc,EACd,OAAwB;IAExB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YAClC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,SAAS;SAChB,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACjC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;YAC3B,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC;oBACP,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,4BAA4B,IAAI,EAAE;iBAC3C,CAAC,CAAA;YACH,CAAC;QACF,CAAC,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;AACH,CAAC","sourcesContent":["import '@epic-web/workshop-utils/init-env'\n\nimport { spawn } from 'node:child_process'\nimport * as fs from 'node:fs'\nimport * as os from 'node:os'\nimport * as path from 'node:path'\nimport { cachified, githubCache } from '@epic-web/workshop-utils/cache.server'\nimport { parseEpicshopConfig } from '@epic-web/workshop-utils/config.server'\nimport { getAuthInfo } from '@epic-web/workshop-utils/db.server'\nimport { userHasAccessToWorkshop } from '@epic-web/workshop-utils/epic-api.server'\nimport chalk from 'chalk'\nimport { matchSorter, rankings } from 'match-sorter'\nimport ora from 'ora'\n\nconst GITHUB_ORG = 'epicweb-dev'\nconst TUTORIAL_REPO = 'epicshop-tutorial'\nconst GITHUB_TOKEN = process.env.GITHUB_TOKEN\n\ntype EpicSite = {\n\thost: string\n\tname: string\n\tdescription: string\n}\n\nconst EPIC_SITES: Array<EpicSite> = [\n\t{\n\t\thost: 'www.epicreact.dev',\n\t\tname: 'Epic React',\n\t\tdescription: 'React development workshops',\n\t},\n\t{\n\t\thost: 'www.epicweb.dev',\n\t\tname: 'Epic Web',\n\t\tdescription: 'Full-stack web development workshops',\n\t},\n\t{\n\t\thost: 'www.epicai.pro',\n\t\tname: 'Epic AI',\n\t\tdescription: 'AI development workshops',\n\t},\n]\n\n/**\n * Find the workshop root directory by walking up from the current directory\n * looking for a package.json with an epicshop field.\n * Returns the workshop root path if found, null otherwise.\n */\nexport async function findWorkshopRoot(): Promise<string | null> {\n\tlet currentDir = process.cwd()\n\tconst root = path.parse(currentDir).root\n\n\twhile (currentDir !== root) {\n\t\ttry {\n\t\t\tconst packageJsonPath = path.join(currentDir, 'package.json')\n\t\t\tconst content = await fs.promises.readFile(packageJsonPath, 'utf-8')\n\t\t\tconst packageJson = JSON.parse(content) as { epicshop?: unknown }\n\n\t\t\t// Check if epicshop config exists\n\t\t\tif (packageJson.epicshop) {\n\t\t\t\treturn currentDir\n\t\t\t}\n\t\t} catch {\n\t\t\t// No package.json or can't read it, continue up\n\t\t}\n\n\t\t// Move up one directory\n\t\tconst parentDir = path.dirname(currentDir)\n\t\tif (parentDir === currentDir) {\n\t\t\t// We've reached the root\n\t\t\tbreak\n\t\t}\n\t\tcurrentDir = parentDir\n\t}\n\n\treturn null\n}\n\n/**\n * Check if the current working directory is inside a workshop\n * (has epicshop config in package.json in current dir or any parent)\n */\nexport async function isInWorkshopDirectory(): Promise<boolean> {\n\treturn (await findWorkshopRoot()) !== null\n}\n\nexport type WorkshopsResult = {\n\tsuccess: boolean\n\tmessage?: string\n\terror?: Error\n}\n\nexport type AddOptions = {\n\trepoName?: string\n\tdirectory?: string\n\tsilent?: boolean\n}\n\ntype GitHubRepo = {\n\tname: string\n\tdescription: string | null\n\thtml_url: string\n\tstargazers_count: number\n\ttopics: string[]\n\tarchived: boolean\n}\n\ntype GitHubSearchResponse = {\n\ttotal_count: number\n\tincomplete_results: boolean\n\titems: GitHubRepo[]\n}\n\ntype EnrichedWorkshop = GitHubRepo & {\n\tproductHost?: string\n\tproductSlug?: string\n\tproductDisplayName?: string\n\tinstructorName?: string\n\ttitle?: string\n\thasAccess?: boolean\n\tisDownloaded?: boolean\n}\n\nconst PRODUCT_ICONS: Record<string, string> = {\n\t'www.epicweb.dev': '🌌',\n\t'www.epicai.pro': '⚡',\n\t'www.epicreact.dev': '🚀',\n}\n\nfunction getGitHubHeaders(): HeadersInit {\n\tconst headers: HeadersInit = {\n\t\tAccept: 'application/vnd.github.v3+json',\n\t\t'User-Agent': 'epicshop-cli',\n\t}\n\tif (GITHUB_TOKEN) {\n\t\theaders.Authorization = `Bearer ${GITHUB_TOKEN}`\n\t}\n\treturn headers\n}\n\n/**\n * Fetch available workshops from GitHub (epicweb-dev org with 'workshop' topic)\n */\nasync function fetchAvailableWorkshops(): Promise<GitHubRepo[]> {\n\treturn cachified({\n\t\tkey: `github-workshops-list`,\n\t\tcache: githubCache,\n\t\tttl: 1000 * 60 * 15, // 15 minutes\n\t\tswr: 1000 * 60 * 60 * 6, // 6 hours stale-while-revalidate\n\t\tasync getFreshValue() {\n\t\t\tconst url = `https://api.github.com/search/repositories?q=topic:workshop+org:${GITHUB_ORG}&sort=stars&order=desc`\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\theaders: getGitHubHeaders(),\n\t\t\t})\n\n\t\t\tif (!response.ok) {\n\t\t\t\tif (response.status === 403) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'GitHub API rate limit exceeded. Please try again in a minute.',\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to fetch workshops from GitHub: ${response.status}`,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tconst data = (await response.json()) as GitHubSearchResponse\n\t\t\treturn data.items.filter((repo) => !repo.archived)\n\t\t},\n\t})\n}\n\n/**\n * Fetch a workshop's package.json from GitHub raw content\n */\nasync function fetchWorkshopPackageJson(\n\trepoName: string,\n): Promise<Record<string, unknown> | null> {\n\treturn cachified({\n\t\tkey: `github-package-json:${repoName}`,\n\t\tcache: githubCache,\n\t\tttl: 1000 * 60 * 60 * 6, // 6 hours\n\t\tswr: 1000 * 60 * 60 * 24 * 30, // 30 days stale-while-revalidate\n\t\tasync getFreshValue() {\n\t\t\tconst url = `https://raw.githubusercontent.com/${GITHUB_ORG}/${repoName}/main/package.json`\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\theaders: {\n\t\t\t\t\t'User-Agent': 'epicshop-cli',\n\t\t\t\t\t...(GITHUB_TOKEN ? { Authorization: `Bearer ${GITHUB_TOKEN}` } : {}),\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\treturn (await response.json()) as Record<string, unknown>\n\t\t\t} catch {\n\t\t\t\treturn null\n\t\t\t}\n\t\t},\n\t})\n}\n\n/**\n * Enrich workshops with metadata from their package.json files\n */\nasync function enrichWorkshopsWithMetadata(\n\tworkshops: GitHubRepo[],\n): Promise<EnrichedWorkshop[]> {\n\tconst packageJsons = await Promise.all(\n\t\tworkshops.map((w) => fetchWorkshopPackageJson(w.name)),\n\t)\n\n\treturn workshops.map((workshop, index) => {\n\t\tconst packageJson = packageJsons[index]\n\t\tconst config = packageJson ? parseEpicshopConfig(packageJson) : null\n\n\t\treturn {\n\t\t\t...workshop,\n\t\t\tproductHost: config?.product?.host,\n\t\t\tproductSlug: config?.product?.slug,\n\t\t\tproductDisplayName: config?.product?.displayName,\n\t\t\tinstructorName: config?.instructor?.name,\n\t\t\ttitle: config?.title,\n\t\t}\n\t})\n}\n\n/**\n * Check which product sites the user is logged in to\n */\nasync function checkAuthStatus(\n\tworkshops: EnrichedWorkshop[],\n): Promise<Map<string, boolean>> {\n\tconst uniqueHosts = new Set(\n\t\tworkshops\n\t\t\t.map((w) => w.productHost)\n\t\t\t.filter((host): host is string => Boolean(host)),\n\t)\n\n\tconst authStatusMap = new Map<string, boolean>()\n\tawait Promise.all(\n\t\tArray.from(uniqueHosts).map(async (host) => {\n\t\t\tconst authInfo = await getAuthInfo({ productHost: host })\n\t\t\tauthStatusMap.set(host, isValidLoginInfo(authInfo))\n\t\t}),\n\t)\n\n\treturn authStatusMap\n}\n\n/**\n * Check if workshops are already downloaded\n */\nasync function checkWorkshopDownloadStatus(\n\tworkshops: EnrichedWorkshop[],\n): Promise<EnrichedWorkshop[]> {\n\tconst { workshopExists } = await import(\n\t\t'@epic-web/workshop-utils/workshops.server'\n\t)\n\n\tconst downloadStatusResults = await Promise.all(\n\t\tworkshops.map(async (workshop) => {\n\t\t\treturn await workshopExists(workshop.name)\n\t\t}),\n\t)\n\n\treturn workshops.map((workshop, index) => ({\n\t\t...workshop,\n\t\tisDownloaded: downloadStatusResults[index],\n\t}))\n}\n\n/**\n * Check access for workshops in parallel\n */\nasync function checkWorkshopAccess(\n\tworkshops: EnrichedWorkshop[],\n): Promise<EnrichedWorkshop[]> {\n\tconst accessResults = await Promise.all(\n\t\tworkshops.map(async (workshop) => {\n\t\t\tif (!workshop.productHost || !workshop.productSlug) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn userHasAccessToWorkshop({\n\t\t\t\tproductHost: workshop.productHost,\n\t\t\t\tworkshopSlug: workshop.productSlug,\n\t\t\t})\n\t\t}),\n\t)\n\n\treturn workshops.map((workshop, index) => ({\n\t\t...workshop,\n\t\thasAccess: accessResults[index],\n\t}))\n}\n\nexport type StartOptions = {\n\tworkshop?: string\n\tsilent?: boolean\n}\n\nexport type ConfigOptions = {\n\treposDir?: string\n\tsilent?: boolean\n\tsubcommand?: 'reset' | 'delete'\n}\n\n/**\n * Add a workshop by cloning from epicweb-dev GitHub org and running setup\n */\nexport async function add(options: AddOptions): Promise<WorkshopsResult> {\n\tconst { silent = false } = options\n\tlet { repoName } = options\n\n\ttry {\n\t\t// If no repo name provided, fetch available workshops and let user select\n\t\tif (!repoName) {\n\t\t\tif (silent) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\tmessage: 'Repository name is required in silent mode',\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst spinner = ora('Fetching available workshops...').start()\n\n\t\t\tlet enrichedWorkshops: EnrichedWorkshop[]\n\t\t\ttry {\n\t\t\t\tconst workshops = await fetchAvailableWorkshops()\n\n\t\t\t\tif (workshops.length === 0) {\n\t\t\t\t\tspinner.fail('No workshops found on GitHub')\n\t\t\t\t\treturn { success: false, message: 'No workshops found on GitHub' }\n\t\t\t\t}\n\n\t\t\t\tspinner.text = 'Loading workshop details...'\n\t\t\t\tenrichedWorkshops = await enrichWorkshopsWithMetadata(workshops)\n\n\t\t\t\tspinner.text = 'Checking download status...'\n\t\t\t\tenrichedWorkshops = await checkWorkshopDownloadStatus(enrichedWorkshops)\n\n\t\t\t\tspinner.stop()\n\t\t\t\tconst authStatusMap = await checkAuthStatus(enrichedWorkshops)\n\n\t\t\t\tconst hostsNotLoggedIn = Array.from(authStatusMap.entries())\n\t\t\t\t\t.filter(([, isLoggedIn]) => !isLoggedIn)\n\t\t\t\t\t.map(([host]) => host)\n\n\t\t\t\tif (hostsNotLoggedIn.length > 0) {\n\t\t\t\t\tconst hostDisplayNames = hostsNotLoggedIn.map((host) => {\n\t\t\t\t\t\tconst workshop = enrichedWorkshops.find(\n\t\t\t\t\t\t\t(w) => w.productHost === host,\n\t\t\t\t\t\t)\n\t\t\t\t\t\treturn workshop?.productDisplayName || host\n\t\t\t\t\t})\n\n\t\t\t\t\tconsole.log()\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t\t`💡 Tip: You are not logged in to ${hostDisplayNames.join(', ')}. ` +\n\t\t\t\t\t\t\t\t'Logging in will allow us to check your workshop access.',\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\tchalk.gray(` To login, run: ${chalk.cyan('npx epicshop auth')}`),\n\t\t\t\t\t)\n\t\t\t\t\tconsole.log()\n\t\t\t\t}\n\n\t\t\t\tspinner.start('Checking access...')\n\t\t\t\tenrichedWorkshops = await checkWorkshopAccess(enrichedWorkshops)\n\n\t\t\t\tenrichedWorkshops.sort((a, b) => {\n\t\t\t\t\tconst aHasAccess = a.hasAccess === true\n\t\t\t\t\tconst aIsDownloaded = a.isDownloaded === true\n\t\t\t\t\tconst bHasAccess = b.hasAccess === true\n\t\t\t\t\tconst bIsDownloaded = b.isDownloaded === true\n\n\t\t\t\t\t// Priority 1: Access and not yet downloaded\n\t\t\t\t\tconst aPriority1 = aHasAccess && !aIsDownloaded\n\t\t\t\t\tconst bPriority1 = bHasAccess && !bIsDownloaded\n\t\t\t\t\tif (aPriority1 && !bPriority1) return -1\n\t\t\t\t\tif (!aPriority1 && bPriority1) return 1\n\n\t\t\t\t\t// Priority 2: No access and not yet downloaded\n\t\t\t\t\tconst aPriority2 = !aHasAccess && !aIsDownloaded\n\t\t\t\t\tconst bPriority2 = !bHasAccess && !bIsDownloaded\n\t\t\t\t\tif (aPriority2 && !bPriority2) return -1\n\t\t\t\t\tif (!aPriority2 && bPriority2) return 1\n\n\t\t\t\t\t// Priority 3: Access and downloaded\n\t\t\t\t\tconst aPriority3 = aHasAccess && aIsDownloaded\n\t\t\t\t\tconst bPriority3 = bHasAccess && bIsDownloaded\n\t\t\t\t\tif (aPriority3 && !bPriority3) return -1\n\t\t\t\t\tif (!aPriority3 && bPriority3) return 1\n\n\t\t\t\t\treturn 0\n\t\t\t\t})\n\n\t\t\t\tspinner.succeed(`Found ${enrichedWorkshops.length} available workshops`)\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\t\t\tspinner.fail(message)\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\tmessage,\n\t\t\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\t\tconsole.log()\n\t\t\tconsole.log(chalk.bold.cyan('📚 Available Workshops\\n'))\n\t\t\tconsole.log(chalk.gray('Icon Key:'))\n\t\t\tconsole.log(chalk.gray(` 🚀 EpicReact.dev`))\n\t\t\tconsole.log(chalk.gray(` 🌌 EpicWeb.dev`))\n\t\t\tconsole.log(chalk.gray(` ⚡ EpicAI.pro`))\n\t\t\tconsole.log(chalk.gray(` 🔑 You have access to this workshop`))\n\t\t\tconsole.log(chalk.gray(` ✔︎ Already downloaded on your machine`))\n\t\t\tconsole.log()\n\n\t\t\tconst allChoices = enrichedWorkshops.map((w) => {\n\t\t\t\tconst productIcon = w.productHost\n\t\t\t\t\t? PRODUCT_ICONS[w.productHost] || ''\n\t\t\t\t\t: ''\n\t\t\t\tconst accessIcon = w.hasAccess === true ? chalk.yellow('🔑') : ''\n\t\t\t\tconst downloadedIcon = w.isDownloaded === true ? chalk.green('✔︎') : ''\n\n\t\t\t\tconst nameParts = [\n\t\t\t\t\tproductIcon,\n\t\t\t\t\tw.title || w.name,\n\t\t\t\t\taccessIcon,\n\t\t\t\t\tdownloadedIcon,\n\t\t\t\t].filter(Boolean)\n\t\t\t\tconst name = nameParts.join(' ')\n\n\t\t\t\tconst descriptionParts = [\n\t\t\t\t\tw.instructorName ? `by ${w.instructorName}` : null,\n\t\t\t\t\tw.productDisplayName || w.productHost,\n\t\t\t\t\tw.description,\n\t\t\t\t].filter(Boolean)\n\t\t\t\tconst description = descriptionParts.join(' • ') || undefined\n\n\t\t\t\treturn {\n\t\t\t\t\tname,\n\t\t\t\t\tvalue: w.name,\n\t\t\t\t\tdescription,\n\t\t\t\t\tworkshop: w,\n\t\t\t\t}\n\t\t\t})\n\n\t\t\trepoName = await search({\n\t\t\t\tmessage: 'Select a workshop to add:',\n\t\t\t\tsource: async (input) => {\n\t\t\t\t\tif (!input) {\n\t\t\t\t\t\treturn allChoices\n\t\t\t\t\t}\n\t\t\t\t\treturn matchSorter(allChoices, input, {\n\t\t\t\t\t\tkeys: [\n\t\t\t\t\t\t\t{ key: 'name', threshold: rankings.CONTAINS },\n\t\t\t\t\t\t\t{ key: 'value', threshold: rankings.CONTAINS },\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: 'workshop.productDisplayName',\n\t\t\t\t\t\t\t\tthreshold: rankings.CONTAINS,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: 'workshop.instructorName',\n\t\t\t\t\t\t\t\tthreshold: rankings.CONTAINS,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ key: 'description', threshold: rankings.WORD_STARTS_WITH },\n\t\t\t\t\t\t],\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\t// Ensure config is set up first\n\t\tif (!(await ensureConfigured())) {\n\t\t\treturn { success: false, message: 'Setup cancelled' }\n\t\t}\n\n\t\tconst { getReposDirectory, workshopExists } = await import(\n\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t)\n\n\t\t// Check if workshop already exists\n\t\tif (await workshopExists(repoName)) {\n\t\t\tconst message = `Workshop \"${repoName}\" already exists`\n\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\treturn { success: false, message }\n\t\t}\n\n\t\t// Get target directory\n\t\tconst reposDir = options.directory || (await getReposDirectory())\n\t\tconst workshopPath = path.join(reposDir, repoName)\n\n\t\t// Ensure the repos directory exists\n\t\tawait fs.promises.mkdir(reposDir, { recursive: true })\n\n\t\t// Check if directory already exists\n\t\ttry {\n\t\t\tawait fs.promises.access(workshopPath)\n\t\t\tconst message = `Directory already exists: ${workshopPath}`\n\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\treturn { success: false, message }\n\t\t} catch {\n\t\t\t// Directory doesn't exist, which is what we want\n\t\t}\n\n\t\tconst repoUrl = `https://github.com/${GITHUB_ORG}/${repoName}.git`\n\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.cyan(`📦 Cloning ${repoUrl}...`))\n\t\t}\n\n\t\t// Clone the repository\n\t\tconst cloneResult = await runCommand(\n\t\t\t'git',\n\t\t\t['clone', repoUrl, workshopPath],\n\t\t\t{\n\t\t\t\tcwd: reposDir,\n\t\t\t\tsilent,\n\t\t\t},\n\t\t)\n\n\t\tif (!cloneResult.success) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tmessage: `Failed to clone repository: ${cloneResult.message}`,\n\t\t\t\terror: cloneResult.error,\n\t\t\t}\n\t\t}\n\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.cyan(`🔧 Running npm run setup...`))\n\t\t}\n\n\t\t// Run npm run setup\n\t\tconst setupResult = await runCommand('npm', ['run', 'setup'], {\n\t\t\tcwd: workshopPath,\n\t\t\tsilent,\n\t\t})\n\n\t\tif (!setupResult.success) {\n\t\t\t// Clean up the cloned directory on setup failure\n\t\t\tif (!silent) {\n\t\t\t\tconsole.log(chalk.yellow(`🧹 Cleaning up cloned directory...`))\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait fs.promises.rm(workshopPath, { recursive: true, force: true })\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tmessage: `Failed to run setup: ${setupResult.message}`,\n\t\t\t\terror: setupResult.error,\n\t\t\t}\n\t\t}\n\n\t\tconst message = `Workshop \"${repoName}\" added successfully at ${workshopPath}`\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.green(`✅ ${message}`))\n\t\t}\n\n\t\treturn { success: true, message }\n\t} catch (error) {\n\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\treturn { success: false, message: 'User quit' }\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tif (!silent) {\n\t\t\tconsole.error(chalk.red(`❌ ${message}`))\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage,\n\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t}\n\t}\n}\n\n/**\n * List all workshops found in the repos directory\n */\nexport async function list({\n\tsilent = false,\n}: { silent?: boolean } = {}): Promise<WorkshopsResult> {\n\ttry {\n\t\t// Ensure config is set up first\n\t\tif (!(await ensureConfigured())) {\n\t\t\treturn { success: false, message: 'Setup cancelled' }\n\t\t}\n\n\t\tconst { listWorkshops, getReposDirectory } = await import(\n\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t)\n\n\t\tconst workshops = await listWorkshops()\n\t\tconst reposDir = await getReposDirectory()\n\n\t\tif (workshops.length === 0) {\n\t\t\tconst message = `No workshops found. Use 'epicshop add <repo-name>' to add one.`\n\t\t\tif (!silent) {\n\t\t\t\tconsole.log(chalk.yellow(message))\n\t\t\t\tconsole.log(chalk.gray(`\\nWorkshops directory: ${reposDir}`))\n\t\t\t}\n\t\t\treturn { success: true, message }\n\t\t}\n\n\t\tif (silent) {\n\t\t\treturn {\n\t\t\t\tsuccess: true,\n\t\t\t\tmessage: `Found ${workshops.length} workshop(s)`,\n\t\t\t}\n\t\t}\n\n\t\t// Interactive selection\n\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\tconst allChoices = workshops.map((w) => ({\n\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\tvalue: w,\n\t\t\tdescription: w.path,\n\t\t}))\n\n\t\tconsole.log(chalk.bold.cyan('\\n📚 Your Workshops:\\n'))\n\n\t\tconst selectedWorkshop = await search({\n\t\t\tmessage: 'Select a workshop:',\n\t\t\tsource: async (input) => {\n\t\t\t\tif (!input) {\n\t\t\t\t\treturn allChoices\n\t\t\t\t}\n\t\t\t\treturn matchSorter(allChoices, input, {\n\t\t\t\t\tkeys: [\n\t\t\t\t\t\t'name',\n\t\t\t\t\t\t'value.repoName',\n\t\t\t\t\t\t'value.title',\n\t\t\t\t\t\t'value.subtitle',\n\t\t\t\t\t\t'description',\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\t// Show actions for selected workshop\n\t\tconst actionChoices = [\n\t\t\t{\n\t\t\t\tname: 'Start workshop',\n\t\t\t\tvalue: 'start',\n\t\t\t\tdescription: 'Run npm start in the workshop directory',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Open in editor',\n\t\t\t\tvalue: 'open',\n\t\t\t\tdescription: 'Open the workshop in your code editor',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Remove workshop',\n\t\t\t\tvalue: 'remove',\n\t\t\t\tdescription: 'Delete the workshop directory',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Back to list',\n\t\t\t\tvalue: 'back',\n\t\t\t\tdescription: 'Go back to workshop selection',\n\t\t\t},\n\t\t]\n\n\t\tconst action = await search({\n\t\t\tmessage: `What would you like to do with \"${selectedWorkshop.title}\"?`,\n\t\t\tsource: async (input) => {\n\t\t\t\tif (!input) {\n\t\t\t\t\treturn actionChoices\n\t\t\t\t}\n\t\t\t\treturn matchSorter(actionChoices, input, {\n\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\tswitch (action) {\n\t\t\tcase 'start':\n\t\t\t\treturn await startWorkshop({ workshop: selectedWorkshop.repoName })\n\t\t\tcase 'open':\n\t\t\t\treturn await openWorkshop({ workshop: selectedWorkshop.repoName })\n\t\t\tcase 'remove':\n\t\t\t\treturn await remove({ workshop: selectedWorkshop.repoName })\n\t\t\tcase 'back':\n\t\t\t\treturn await list({ silent })\n\t\t}\n\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tmessage: `Found ${workshops.length} workshop(s)`,\n\t\t}\n\t} catch (error) {\n\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\treturn { success: false, message: 'User quit' }\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tif (!silent) {\n\t\t\tconsole.error(chalk.red(`❌ ${message}`))\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage,\n\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t}\n\t}\n}\n\n/**\n * Remove a workshop (deletes the directory)\n */\nexport async function remove({\n\tworkshop,\n\tsilent = false,\n}: {\n\tworkshop?: string\n\tsilent?: boolean\n}): Promise<WorkshopsResult> {\n\ttry {\n\t\tconst {\n\t\t\tgetWorkshop,\n\t\t\tgetWorkshopByPath,\n\t\t\tlistWorkshops,\n\t\t\tgetUnpushedChanges,\n\t\t\tdeleteWorkshop,\n\t\t} = await import('@epic-web/workshop-utils/workshops.server')\n\n\t\tlet workshopData\n\n\t\t// If workshop specified, try to find it\n\t\tif (workshop) {\n\t\t\t// First check if it's a path (absolute or looks like a directory)\n\t\t\tif (workshop.startsWith('/') || workshop.includes(path.sep)) {\n\t\t\t\t// Try to find by path\n\t\t\t\tworkshopData = await getWorkshopByPath(workshop)\n\t\t\t\tif (!workshopData) {\n\t\t\t\t\tconst message = `Workshop at \"${workshop}\" is not in your repos directory and cannot be removed via epicshop. Delete it manually if needed.`\n\t\t\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\t\t\treturn { success: false, message }\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// It's a workshop name, look it up\n\t\t\t\tworkshopData = await getWorkshop(workshop)\n\t\t\t\tif (!workshopData) {\n\t\t\t\t\tconst message = `Workshop \"${workshop}\" not found`\n\t\t\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\t\t\treturn { success: false, message }\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Ensure config is set up first for interactive selection\n\t\t\tif (!(await ensureConfigured())) {\n\t\t\t\treturn { success: false, message: 'Setup cancelled' }\n\t\t\t}\n\n\t\t\t// No workshop specified, prompt for selection\n\t\t\tconst workshops = await listWorkshops()\n\n\t\t\tif (workshops.length === 0) {\n\t\t\t\tconst message = `No workshops to remove. Use 'epicshop add <repo-name>' to add one first.`\n\t\t\t\tif (!silent) console.log(chalk.yellow(message))\n\t\t\t\treturn { success: false, message }\n\t\t\t}\n\n\t\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\t\tconst allChoices = workshops.map((w) => ({\n\t\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\t\tvalue: w,\n\t\t\t\tdescription: w.path,\n\t\t\t}))\n\n\t\t\tworkshopData = await search({\n\t\t\t\tmessage: 'Select a workshop to remove:',\n\t\t\t\tsource: async (input) => {\n\t\t\t\t\tif (!input) {\n\t\t\t\t\t\treturn allChoices\n\t\t\t\t\t}\n\t\t\t\t\treturn matchSorter(allChoices, input, {\n\t\t\t\t\t\tkeys: ['name', 'value.repoName', 'value.title', 'description'],\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\tif (!workshopData) {\n\t\t\tconst message = 'No workshop selected'\n\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\treturn { success: false, message }\n\t\t}\n\n\t\t// Check for unpushed changes\n\t\tconst unpushed = await getUnpushedChanges(workshopData.path)\n\n\t\tif (unpushed.hasUnpushed) {\n\t\t\tconsole.log()\n\t\t\tconsole.log(\n\t\t\t\tchalk.yellow.bold(\n\t\t\t\t\t`⚠️ Warning: \"${workshopData.title}\" has unpushed changes:\\n`,\n\t\t\t\t),\n\t\t\t)\n\t\t\tfor (const line of unpushed.summary) {\n\t\t\t\tconsole.log(chalk.yellow(` • ${line}`))\n\t\t\t}\n\t\t\tconsole.log()\n\n\t\t\tconst { confirm } = await import('@inquirer/prompts')\n\t\t\tconst shouldDelete = await confirm({\n\t\t\t\tmessage: `Delete \"${workshopData.title}\" anyway? This cannot be undone.`,\n\t\t\t\tdefault: false,\n\t\t\t})\n\n\t\t\tif (!shouldDelete) {\n\t\t\t\tconst message = 'Removal cancelled'\n\t\t\t\tif (!silent) console.log(chalk.gray(message))\n\t\t\t\treturn { success: false, message }\n\t\t\t}\n\t\t} else {\n\t\t\t// No unpushed changes, but still confirm deletion\n\t\t\tconst { confirm } = await import('@inquirer/prompts')\n\t\t\tconst shouldDelete = await confirm({\n\t\t\t\tmessage: `Delete \"${workshopData.title}\" at ${workshopData.path}?`,\n\t\t\t\tdefault: false,\n\t\t\t})\n\n\t\t\tif (!shouldDelete) {\n\t\t\t\tconst message = 'Removal cancelled'\n\t\t\t\tif (!silent) console.log(chalk.gray(message))\n\t\t\t\treturn { success: false, message }\n\t\t\t}\n\t\t}\n\n\t\t// Delete the workshop directory\n\t\tawait deleteWorkshop(workshopData.path)\n\n\t\tconst message = `Workshop \"${workshopData.title}\" deleted successfully`\n\t\tif (!silent) console.log(chalk.green(`✅ ${message}`))\n\t\treturn { success: true, message }\n\t} catch (error) {\n\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\treturn { success: false, message: 'User quit' }\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tif (!silent) {\n\t\t\tconsole.error(chalk.red(`❌ ${message}`))\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage,\n\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t}\n\t}\n}\n\n/**\n * Start a workshop\n */\nexport async function startWorkshop(\n\toptions: StartOptions = {},\n): Promise<WorkshopsResult> {\n\tconst { silent = false } = options\n\n\ttry {\n\t\t// Ensure config is set up first\n\t\tif (!(await ensureConfigured())) {\n\t\t\treturn { success: false, message: 'Setup cancelled' }\n\t\t}\n\n\t\tconst { listWorkshops, getWorkshop } = await import(\n\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t)\n\n\t\tlet workshopToStart\n\n\t\t// If workshop specified, look it up and fail if not found\n\t\tif (options.workshop) {\n\t\t\tworkshopToStart = await getWorkshop(options.workshop)\n\t\t\tif (!workshopToStart) {\n\t\t\t\tconst message = `Workshop \"${options.workshop}\" not found`\n\t\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\t\treturn { success: false, message }\n\t\t\t}\n\t\t} else {\n\t\t\t// No workshop specified, show selection\n\t\t\tconst workshops = await listWorkshops()\n\n\t\t\tif (workshops.length === 0) {\n\t\t\t\tconst message = `No workshops found. Use 'epicshop add <repo-name>' to add one.`\n\t\t\t\tif (!silent) console.log(chalk.yellow(message))\n\t\t\t\treturn { success: false, message }\n\t\t\t}\n\n\t\t\t// Interactive selection\n\t\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\t\tconst allChoices = workshops.map((w) => ({\n\t\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\t\tvalue: w,\n\t\t\t\tdescription: w.path,\n\t\t\t}))\n\n\t\t\tworkshopToStart = await search({\n\t\t\t\tmessage: 'Select a workshop to start:',\n\t\t\t\tsource: async (input) => {\n\t\t\t\t\tif (!input) {\n\t\t\t\t\t\treturn allChoices\n\t\t\t\t\t}\n\t\t\t\t\treturn matchSorter(allChoices, input, {\n\t\t\t\t\t\tkeys: [\n\t\t\t\t\t\t\t'name',\n\t\t\t\t\t\t\t'value.repoName',\n\t\t\t\t\t\t\t'value.title',\n\t\t\t\t\t\t\t'value.subtitle',\n\t\t\t\t\t\t\t'description',\n\t\t\t\t\t\t],\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\tif (!workshopToStart) {\n\t\t\tconst message = 'No workshop selected'\n\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\treturn { success: false, message }\n\t\t}\n\n\t\t// Check if the workshop directory exists\n\t\tif (!(await directoryExists(workshopToStart.path))) {\n\t\t\tconst message = `Workshop directory not found: ${workshopToStart.path}`\n\t\t\tif (!silent) console.log(chalk.red(`❌ ${message}`))\n\t\t\treturn { success: false, message }\n\t\t}\n\n\t\tif (!silent) {\n\t\t\tconsole.log(\n\t\t\t\tchalk.cyan(`🚀 Starting ${chalk.bold(workshopToStart.title)}...`),\n\t\t\t)\n\t\t\tconsole.log(chalk.gray(` Path: ${workshopToStart.path}\\n`))\n\t\t}\n\n\t\t// Run npm start in the workshop directory\n\t\tconst startResult = await runCommandInteractive('npm', ['start'], {\n\t\t\tcwd: workshopToStart.path,\n\t\t})\n\n\t\tif (!startResult.success) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tmessage: `Failed to start workshop: ${startResult.message}`,\n\t\t\t\terror: startResult.error,\n\t\t\t}\n\t\t}\n\n\t\treturn { success: true, message: 'Workshop started' }\n\t} catch (error) {\n\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\treturn { success: false, message: 'User quit' }\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tif (!silent) {\n\t\t\tconsole.error(chalk.red(`❌ ${message}`))\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage,\n\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t}\n\t}\n}\n\n/**\n * Open a workshop in the user's editor\n */\nexport async function openWorkshop(\n\toptions: StartOptions = {},\n): Promise<WorkshopsResult> {\n\tconst { silent = false } = options\n\n\ttry {\n\t\tconst { listWorkshops, getWorkshop, getWorkshopByPath } = await import(\n\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t)\n\t\tconst { launchEditor } = await import(\n\t\t\t'@epic-web/workshop-utils/launch-editor.server'\n\t\t)\n\n\t\tlet workshopToOpen\n\n\t\t// If workshop specified, try to find it\n\t\tif (options.workshop) {\n\t\t\t// First check if it's a path (absolute or looks like a directory)\n\t\t\tif (\n\t\t\t\toptions.workshop.startsWith('/') ||\n\t\t\t\toptions.workshop.includes(path.sep)\n\t\t\t) {\n\t\t\t\t// Try to find by path first\n\t\t\t\tworkshopToOpen = await getWorkshopByPath(options.workshop)\n\t\t\t\tif (!workshopToOpen) {\n\t\t\t\t\t// Not in managed workshops, but if it's a valid workshop dir, open it directly\n\t\t\t\t\tconst pkgPath = path.join(options.workshop, 'package.json')\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst pkgContent = await fs.promises.readFile(pkgPath, 'utf-8')\n\t\t\t\t\t\tconst pkg = JSON.parse(pkgContent) as {\n\t\t\t\t\t\t\tname?: string\n\t\t\t\t\t\t\tepicshop?: { title?: string }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pkg.epicshop) {\n\t\t\t\t\t\t\t// It's a valid workshop directory, create a minimal workshop object\n\t\t\t\t\t\t\tworkshopToOpen = {\n\t\t\t\t\t\t\t\tname: pkg.name || path.basename(options.workshop),\n\t\t\t\t\t\t\t\ttitle: pkg.epicshop.title || path.basename(options.workshop),\n\t\t\t\t\t\t\t\trepoName: path.basename(options.workshop),\n\t\t\t\t\t\t\t\tpath: options.workshop,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Not a valid workshop directory\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// It's a workshop name, look it up\n\t\t\t\tworkshopToOpen = await getWorkshop(options.workshop)\n\t\t\t}\n\n\t\t\tif (!workshopToOpen) {\n\t\t\t\tconst message = `Workshop \"${options.workshop}\" not found`\n\t\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\t\treturn { success: false, message }\n\t\t\t}\n\t\t} else {\n\t\t\t// Ensure config is set up first for interactive selection\n\t\t\tif (!(await ensureConfigured())) {\n\t\t\t\treturn { success: false, message: 'Setup cancelled' }\n\t\t\t}\n\t\t\t// No workshop specified, show selection\n\t\t\tconst workshops = await listWorkshops()\n\n\t\t\tif (workshops.length === 0) {\n\t\t\t\tconst message = `No workshops found. Use 'epicshop add <repo-name>' to add one.`\n\t\t\t\tif (!silent) console.log(chalk.yellow(message))\n\t\t\t\treturn { success: false, message }\n\t\t\t}\n\n\t\t\t// Interactive selection\n\t\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\t\tconst allChoices = workshops.map((w) => ({\n\t\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\t\tvalue: w,\n\t\t\t\tdescription: w.path,\n\t\t\t}))\n\n\t\t\tworkshopToOpen = await search({\n\t\t\t\tmessage: 'Select a workshop to open:',\n\t\t\t\tsource: async (input) => {\n\t\t\t\t\tif (!input) {\n\t\t\t\t\t\treturn allChoices\n\t\t\t\t\t}\n\t\t\t\t\treturn matchSorter(allChoices, input, {\n\t\t\t\t\t\tkeys: [\n\t\t\t\t\t\t\t'name',\n\t\t\t\t\t\t\t'value.repoName',\n\t\t\t\t\t\t\t'value.title',\n\t\t\t\t\t\t\t'value.subtitle',\n\t\t\t\t\t\t\t'description',\n\t\t\t\t\t\t],\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\tif (!workshopToOpen) {\n\t\t\tconst message = 'No workshop selected'\n\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\treturn { success: false, message }\n\t\t}\n\n\t\t// Check if the workshop directory exists\n\t\tif (!(await directoryExists(workshopToOpen.path))) {\n\t\t\tconst message = `Workshop directory not found: ${workshopToOpen.path}`\n\t\t\tif (!silent) console.log(chalk.red(`❌ ${message}`))\n\t\t\treturn { success: false, message }\n\t\t}\n\n\t\tif (!silent) {\n\t\t\tconsole.log(\n\t\t\t\tchalk.cyan(\n\t\t\t\t\t`📂 Opening ${chalk.bold(workshopToOpen.title)} in your editor...`,\n\t\t\t\t),\n\t\t\t)\n\t\t\tconsole.log(chalk.gray(` Path: ${workshopToOpen.path}\\n`))\n\t\t}\n\n\t\t// Launch the editor with the workshop directory\n\t\tconst result = await launchEditor(workshopToOpen.path)\n\n\t\tif (result.status === 'error') {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tmessage: result.message,\n\t\t\t}\n\t\t}\n\n\t\treturn { success: true, message: 'Workshop opened in editor' }\n\t} catch (error) {\n\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\treturn { success: false, message: 'User quit' }\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tif (!silent) {\n\t\t\tconsole.error(chalk.red(`❌ ${message}`))\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage,\n\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t}\n\t}\n}\n\n/**\n * Configure workshops settings\n */\nexport async function config(\n\toptions: ConfigOptions = {},\n): Promise<WorkshopsResult> {\n\tconst { silent = false } = options\n\n\ttry {\n\t\tconst {\n\t\t\tgetReposDirectory,\n\t\t\tsetReposDirectory,\n\t\t\tisReposDirectoryConfigured,\n\t\t\tloadConfig,\n\t\t\tsaveConfig,\n\t\t\tgetDefaultReposDir,\n\t\t\tdeleteConfig,\n\t\t} = await import('@epic-web/workshop-utils/workshops.server')\n\n\t\t// Handle reset subcommand\n\t\tif (options.subcommand === 'reset' || options.subcommand === 'delete') {\n\t\t\tif (silent) {\n\t\t\t\tawait deleteConfig()\n\t\t\t\treturn { success: true, message: 'Config file deleted' }\n\t\t\t}\n\n\t\t\tconst { confirm } = await import('@inquirer/prompts')\n\t\t\tconst shouldDelete = await confirm({\n\t\t\t\tmessage:\n\t\t\t\t\t'Are you sure you want to delete the config file? This will reset all settings to defaults.',\n\t\t\t\tdefault: false,\n\t\t\t})\n\n\t\t\tif (shouldDelete) {\n\t\t\t\tawait deleteConfig()\n\t\t\t\tconst message = 'Config file deleted. All settings reset to defaults.'\n\t\t\t\tconsole.log(chalk.green(`✅ ${message}`))\n\t\t\t\treturn { success: true, message }\n\t\t\t} else {\n\t\t\t\tconsole.log(chalk.gray('No changes made.'))\n\t\t\t\treturn { success: true, message: 'Cancelled' }\n\t\t\t}\n\t\t}\n\n\t\tif (options.reposDir) {\n\t\t\t// Set the repos directory directly via CLI flag\n\t\t\tconst resolvedPath = path.resolve(options.reposDir)\n\t\t\tawait setReposDirectory(resolvedPath)\n\t\t\tconst message = `Repos directory set to: ${resolvedPath}`\n\t\t\tif (!silent) console.log(chalk.green(`✅ ${message}`))\n\t\t\treturn { success: true, message }\n\t\t}\n\n\t\tif (silent) {\n\t\t\t// In silent mode, just return current config\n\t\t\tconst reposDir = await getReposDirectory()\n\t\t\treturn { success: true, message: `Repos directory: ${reposDir}` }\n\t\t}\n\n\t\t// Interactive config selection\n\t\tconst { search, confirm } = await import('@inquirer/prompts')\n\n\t\tconst reposDir = await getReposDirectory()\n\t\tconst isConfigured = await isReposDirectoryConfigured()\n\t\tconst defaultDir = getDefaultReposDir()\n\n\t\t// Build config options\n\t\tconst configOptions = [\n\t\t\t{\n\t\t\t\tname: `Repos directory`,\n\t\t\t\tvalue: 'repos-dir',\n\t\t\t\tdescription: isConfigured ? reposDir : `${reposDir} (default)`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `Reset config file`,\n\t\t\t\tvalue: 'reset',\n\t\t\t\tdescription: 'Delete config file and reset all settings to defaults',\n\t\t\t},\n\t\t]\n\n\t\tconsole.log(chalk.bold.cyan('\\n⚙️ Workshop Configuration\\n'))\n\n\t\tconst selectedConfig = await search({\n\t\t\tmessage: 'Select a setting to configure:',\n\t\t\tsource: async (input) => {\n\t\t\t\tif (!input) return configOptions\n\t\t\t\treturn matchSorter(configOptions, input, {\n\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\tif (selectedConfig === 'reset') {\n\t\t\tconst shouldDelete = await confirm({\n\t\t\t\tmessage:\n\t\t\t\t\t'Are you sure you want to delete the config file? This will reset all settings to defaults.',\n\t\t\t\tdefault: false,\n\t\t\t})\n\n\t\t\tif (shouldDelete) {\n\t\t\t\tawait deleteConfig()\n\t\t\t\tconsole.log()\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.green(\n\t\t\t\t\t\t`✅ Config file deleted. All settings reset to defaults.`,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tmessage: 'Config file deleted. All settings reset to defaults.',\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.log(chalk.gray('\\nNo changes made.'))\n\t\t\t\treturn { success: true, message: 'Cancelled' }\n\t\t\t}\n\t\t}\n\n\t\tif (selectedConfig === 'repos-dir') {\n\t\t\t// Show current value and actions\n\t\t\tconsole.log()\n\t\t\tconsole.log(chalk.bold(' Current value:'))\n\t\t\tif (isConfigured) {\n\t\t\t\tconsole.log(chalk.white(` ${reposDir}`))\n\t\t\t} else {\n\t\t\t\tconsole.log(chalk.gray(` ${reposDir} (default, not explicitly set)`))\n\t\t\t}\n\t\t\tconsole.log()\n\n\t\t\tconst actionChoices = [\n\t\t\t\t{\n\t\t\t\t\tname: 'Edit',\n\t\t\t\t\tvalue: 'edit',\n\t\t\t\t\tdescription: 'Change the repos directory',\n\t\t\t\t},\n\t\t\t\t...(isConfigured\n\t\t\t\t\t? [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Remove',\n\t\t\t\t\t\t\t\tvalue: 'remove',\n\t\t\t\t\t\t\t\tdescription: `Reset to default (${defaultDir})`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]\n\t\t\t\t\t: []),\n\t\t\t\t{\n\t\t\t\t\tname: 'Cancel',\n\t\t\t\t\tvalue: 'cancel',\n\t\t\t\t\tdescription: 'Go back without changes',\n\t\t\t\t},\n\t\t\t]\n\n\t\t\tconst action = await search({\n\t\t\t\tmessage: 'What would you like to do?',\n\t\t\t\tsource: async (input) => {\n\t\t\t\t\tif (!input) return actionChoices\n\t\t\t\t\treturn matchSorter(actionChoices, input, {\n\t\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tif (action === 'edit') {\n\t\t\t\tconsole.log()\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.cyan('🐨 Use the directory browser to select a new location.'),\n\t\t\t\t)\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.gray(' Type to search, use arrow keys to navigate.\\n'),\n\t\t\t\t)\n\n\t\t\t\tconst newDir = await browseDirectory(\n\t\t\t\t\tisConfigured ? reposDir : path.dirname(defaultDir),\n\t\t\t\t)\n\t\t\t\tconst resolvedPath = path.resolve(newDir)\n\t\t\t\tawait setReposDirectory(resolvedPath)\n\n\t\t\t\tconsole.log()\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.green(`✅ Repos directory set to: ${chalk.bold(resolvedPath)}`),\n\t\t\t\t)\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tmessage: `Repos directory set to: ${resolvedPath}`,\n\t\t\t\t}\n\t\t\t} else if (action === 'remove') {\n\t\t\t\tconst shouldRemove = await confirm({\n\t\t\t\t\tmessage: `Reset repos directory to default (${defaultDir})?`,\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\n\t\t\t\tif (shouldRemove) {\n\t\t\t\t\tconst currentConfig = await loadConfig()\n\t\t\t\t\tdelete currentConfig.reposDirectory\n\t\t\t\t\tawait saveConfig(currentConfig)\n\n\t\t\t\t\tconsole.log()\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\tchalk.green(\n\t\t\t\t\t\t\t`✅ Repos directory reset to default: ${chalk.bold(defaultDir)}`,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\tmessage: `Repos directory reset to default: ${defaultDir}`,\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(chalk.gray('\\nNo changes made.'))\n\t\t\t\t\treturn { success: true, message: 'Cancelled' }\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.log(chalk.gray('\\nNo changes made.'))\n\t\t\t\treturn { success: true, message: 'Cancelled' }\n\t\t\t}\n\t\t}\n\n\t\treturn { success: true, message: 'Config viewed' }\n\t} catch (error) {\n\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\treturn { success: false, message: 'User quit' }\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tif (!silent) {\n\t\t\tconsole.error(chalk.red(`❌ ${message}`))\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage,\n\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t}\n\t}\n}\n\n/**\n * Check if the workshops directory is configured, and run onboarding if not\n * Call this at the start of any command that requires the config to be set\n */\nexport async function ensureConfigured(): Promise<boolean> {\n\tconst { isReposDirectoryConfigured } = await import(\n\t\t'@epic-web/workshop-utils/workshops.server'\n\t)\n\n\tif (await isReposDirectoryConfigured()) {\n\t\treturn true\n\t}\n\n\t// Not configured, run onboarding\n\tconst result = await onboarding()\n\treturn result.success\n}\n\n/**\n * Run the onboarding flow for new users\n */\nexport async function onboarding(): Promise<WorkshopsResult> {\n\ttry {\n\t\tconst {\n\t\t\tisReposDirectoryConfigured,\n\t\t\tgetDefaultReposDir,\n\t\t\tsetReposDirectory,\n\t\t} = await import('@epic-web/workshop-utils/workshops.server')\n\n\t\t// Check if already configured\n\t\tif (await isReposDirectoryConfigured()) {\n\t\t\t// Already configured, check for tutorial\n\t\t\treturn await ensureTutorialAndStart()\n\t\t}\n\n\t\t// Welcome message from Kody\n\t\tconsole.log()\n\t\tconsole.log(\n\t\t\tchalk.cyan(\n\t\t\t\t\"🐨 Hey there! Welcome to the epicshop CLI. I'm Kody the Koala, and I'm here to help you learn.\",\n\t\t\t),\n\t\t)\n\t\tconsole.log(\n\t\t\tchalk.cyan(\n\t\t\t\t\" It looks like this is the first time you're using epicshop, so I'm going to help you get set up and get you started with the tutorial.\",\n\t\t\t),\n\t\t)\n\t\tconsole.log(\n\t\t\tchalk.gray(\n\t\t\t\t` Once you're finished going through the tutorial, feel free to run ${chalk.underline(`npx epicshop ${process.argv.slice(2).join(' ')}`)} again.\\n`,\n\t\t\t),\n\t\t)\n\n\t\tconsole.log(\n\t\t\tchalk.white(' First, we need to choose where to store your workshops.'),\n\t\t)\n\t\tconsole.log(\n\t\t\tchalk.white(\n\t\t\t\t' Workshops are cloned from GitHub and stored in a directory of your choice.\\n',\n\t\t\t),\n\t\t)\n\n\t\t// Prompt for directory configuration\n\t\tconst { confirm } = await import('@inquirer/prompts')\n\t\tconst defaultDir = getDefaultReposDir()\n\n\t\tconsole.log(chalk.gray(` Recommended: ${chalk.white(defaultDir)}\\n`))\n\n\t\tconst useDefault = await confirm({\n\t\t\tmessage: 'Use the recommended directory?',\n\t\t\tdefault: true,\n\t\t})\n\n\t\tlet reposDir: string\n\t\tif (useDefault) {\n\t\t\treposDir = defaultDir\n\t\t} else {\n\t\t\tconsole.log()\n\t\t\tconsole.log(\n\t\t\t\tchalk.cyan(\n\t\t\t\t\t'🐨 No problem! Use the directory browser to find your preferred location.',\n\t\t\t\t),\n\t\t\t)\n\t\t\tconsole.log(\n\t\t\t\tchalk.gray(' Type to search, use arrow keys to navigate.\\n'),\n\t\t\t)\n\t\t\treposDir = await browseDirectory(path.dirname(defaultDir))\n\t\t}\n\n\t\t// Resolve and save the directory\n\t\tconst resolvedPath = path.resolve(reposDir)\n\t\tawait setReposDirectory(resolvedPath)\n\n\t\tconsole.log()\n\t\tconsole.log(\n\t\t\tchalk.green(`✅ Workshops directory set to: ${chalk.bold(resolvedPath)}`),\n\t\t)\n\t\tconsole.log()\n\n\t\t// Ensure directory exists\n\t\tawait fs.promises.mkdir(resolvedPath, { recursive: true })\n\n\t\t// Offer site login right after workshop directory setup\n\t\tawait runSiteLoginOnboarding()\n\n\t\t// Offer to set up any workshops the user wants (optional)\n\t\tawait promptAndSetupAccessibleWorkshops()\n\n\t\t// Now check for tutorial and start it\n\t\treturn await ensureTutorialAndStart()\n\t} catch (error) {\n\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\treturn { success: false, message: 'User quit' }\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tconsole.error(chalk.red(`❌ ${message}`))\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage,\n\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t}\n\t}\n}\n\nfunction isValidLoginInfo(authInfo: unknown): authInfo is {\n\temail: string\n\tname?: string | null\n\ttokenSet: { access_token: string }\n} {\n\tif (!authInfo || typeof authInfo !== 'object') return false\n\tconst a = authInfo as any\n\treturn (\n\t\ttypeof a.email === 'string' &&\n\t\ta.email.length > 3 &&\n\t\ttypeof a.tokenSet?.access_token === 'string' &&\n\t\ta.tokenSet.access_token.length > 10\n\t)\n}\n\nasync function runSiteLoginOnboarding(): Promise<void> {\n\tconst { search } = await import('@inquirer/prompts')\n\tconst { login } = await import('./auth.js')\n\n\twhile (true) {\n\t\tconst siteStatuses = await Promise.all(\n\t\t\tEPIC_SITES.map(async (site) => {\n\t\t\t\tconst authInfo = await getAuthInfo({ productHost: site.host })\n\t\t\t\treturn { site, authInfo, loggedIn: isValidLoginInfo(authInfo) }\n\t\t\t}),\n\t\t)\n\n\t\tconsole.log(chalk.bold.cyan('\\n🔐 Site Login\\n'))\n\t\tfor (const { site, authInfo, loggedIn } of siteStatuses) {\n\t\t\tif (loggedIn && isValidLoginInfo(authInfo)) {\n\t\t\t\tconst name = authInfo.name ? ` (${authInfo.name})` : ''\n\t\t\t\tconsole.log(\n\t\t\t\t\t` ${chalk.green('✓')} ${chalk.bold(site.name)}: ${chalk.green('Logged in')} as ${chalk.cyan(authInfo.email)}${name}`,\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tconsole.log(\n\t\t\t\t\t` ${chalk.gray('○')} ${chalk.bold(site.name)}: ${chalk.gray('Not logged in')}`,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tconsole.log()\n\n\t\t// If already logged in everywhere, move on\n\t\tif (siteStatuses.every((s) => s.loggedIn)) {\n\t\t\treturn\n\t\t}\n\n\t\tconsole.log(\n\t\t\tchalk.gray(\n\t\t\t\t` Logging in is optional. If you don’t have an account yet, you can create a free one on any of these sites.\\n`,\n\t\t\t),\n\t\t)\n\n\t\tconst remaining = siteStatuses.filter((s) => !s.loggedIn).map((s) => s.site)\n\t\tconst choices = [\n\t\t\t...remaining.map((h) => ({\n\t\t\t\tname: `Log in to ${h.name}`,\n\t\t\t\tvalue: h.host,\n\t\t\t\tdescription: h.description,\n\t\t\t})),\n\t\t\t{\n\t\t\t\tname: `Skip login`,\n\t\t\t\tvalue: 'skip' as const,\n\t\t\t\tdescription: 'Continue without logging in',\n\t\t\t},\n\t\t]\n\n\t\tconst selection = await search({\n\t\t\tmessage: 'Would you like to log in to any of these sites now?',\n\t\t\tsource: async (input) => {\n\t\t\t\tif (!input) return choices\n\t\t\t\treturn matchSorter(choices, input, {\n\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\tif (selection === 'skip') {\n\t\t\treturn\n\t\t}\n\n\t\t// Run the existing login flow for the selected site\n\t\tlet result: { success: boolean; message?: string; error?: Error }\n\t\ttry {\n\t\t\tresult = await login({ domain: selection, silent: false })\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\t\tresult = { success: false, message, error: error as Error }\n\t\t}\n\n\t\tif (!result.success) {\n\t\t\tconsole.log()\n\t\t\tconsole.log(\n\t\t\t\tchalk.yellow(\n\t\t\t\t\t`⚠️ Login didn’t complete (${result.message ?? 'unknown error'}). You can try again, choose a different site, or skip.\\n`,\n\t\t\t\t),\n\t\t\t)\n\t\t\tcontinue\n\t\t}\n\t}\n}\n\nasync function promptAndSetupAccessibleWorkshops(): Promise<void> {\n\tconst { workshopExists } = await import(\n\t\t'@epic-web/workshop-utils/workshops.server'\n\t)\n\n\tconsole.log(chalk.bold.cyan('\\n📚 Workshop Setup\\n'))\n\tconsole.log(\n\t\tchalk.cyan(\n\t\t\t'🐨 Next, you can select any workshops you’d like me to set up for you.',\n\t\t),\n\t)\n\tconsole.log(\n\t\tchalk.gray(\n\t\t\t' This will clone each workshop repo into your workshops directory and run `npm run setup`.\\n' +\n\t\t\t\t' (If something fails, we’ll keep going and you can retry later with `npx epicshop add`.)\\n',\n\t\t),\n\t)\n\n\tconst { search } = await import('@inquirer/prompts')\n\n\tconst spinner = ora('Fetching available workshops...').start()\n\tlet enrichedWorkshops: EnrichedWorkshop[]\n\ttry {\n\t\tconst workshops = await fetchAvailableWorkshops()\n\t\tif (workshops.length === 0) {\n\t\t\tspinner.fail('No workshops found on GitHub')\n\t\t\tconsole.log(chalk.gray('\\nContinuing...\\n'))\n\t\t\treturn\n\t\t}\n\n\t\tspinner.text = 'Loading workshop details...'\n\t\tenrichedWorkshops = await enrichWorkshopsWithMetadata(workshops)\n\n\t\tspinner.text = 'Checking download status...'\n\t\tenrichedWorkshops = await checkWorkshopDownloadStatus(enrichedWorkshops)\n\n\t\tconst authStatusMap = await checkAuthStatus(enrichedWorkshops)\n\t\tconst sitesNotLoggedIn = Array.from(authStatusMap.entries())\n\t\t\t.filter(([, isLoggedIn]) => !isLoggedIn)\n\t\t\t.map(([host]) => host)\n\n\t\tif (sitesNotLoggedIn.length > 0) {\n\t\t\tspinner.stop()\n\t\t\tconst siteNames = sitesNotLoggedIn.map((host) => {\n\t\t\t\tconst workshop = enrichedWorkshops.find((w) => w.productHost === host)\n\t\t\t\treturn workshop?.productDisplayName || host\n\t\t\t})\n\t\t\tconsole.log()\n\t\t\tconsole.log(\n\t\t\t\tchalk.yellow(\n\t\t\t\t\t`💡 Tip: You’re not logged in to ${siteNames.join(\n\t\t\t\t\t\t', ',\n\t\t\t\t\t)}. Logging in can help us confirm which workshops you have access to.`,\n\t\t\t\t),\n\t\t\t)\n\t\t\tconsole.log(\n\t\t\t\tchalk.gray(` To log in, run: ${chalk.cyan('npx epicshop auth')}`),\n\t\t\t)\n\t\t\tconsole.log()\n\t\t\tspinner.start('Checking access...')\n\t\t} else {\n\t\t\tspinner.start('Checking access...')\n\t\t}\n\n\t\tenrichedWorkshops = await checkWorkshopAccess(enrichedWorkshops)\n\t\tspinner.succeed(`Found ${enrichedWorkshops.length} available workshops`)\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tspinner.fail(message)\n\t\tconsole.log(\n\t\t\tchalk.yellow(\n\t\t\t\t`⚠️ Could not load workshops right now. Skipping this step.\\n`,\n\t\t\t),\n\t\t)\n\t\treturn\n\t}\n\n\tconst candidates = enrichedWorkshops.filter(\n\t\t(w) => w.name !== TUTORIAL_REPO && w.hasAccess === true && !w.isDownloaded,\n\t)\n\n\tif (candidates.length === 0) {\n\t\tconsole.log(\n\t\t\tchalk.gray(\n\t\t\t\t'No additional workshops to set up right now (either none found, none accessible, or already downloaded).\\n',\n\t\t\t),\n\t\t)\n\t\treturn\n\t}\n\n\tconsole.log()\n\tconsole.log(chalk.bold.cyan('Available Workshops You Have Access To\\n'))\n\tconsole.log(chalk.gray('Icon Key:'))\n\tconsole.log(chalk.gray(` 🚀 EpicReact.dev`))\n\tconsole.log(chalk.gray(` 🌌 EpicWeb.dev`))\n\tconsole.log(chalk.gray(` ⚡ EpicAI.pro`))\n\tconsole.log(chalk.gray(` 🔑 You have access to this workshop`))\n\tconsole.log()\n\n\tconst buildChoices = async () => {\n\t\t// Recompute downloaded status each loop (in case user just added one)\n\t\tconst updated = await checkWorkshopDownloadStatus(candidates)\n\t\tconst remaining = updated.filter((w) => !w.isDownloaded)\n\t\tconst workshopChoices = remaining.map((w) => {\n\t\t\tconst productIcon = w.productHost ? PRODUCT_ICONS[w.productHost] || '' : ''\n\t\t\tconst accessIcon = chalk.yellow('🔑')\n\t\t\tconst name = [productIcon, w.title || w.name, accessIcon]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(' ')\n\n\t\t\tconst descriptionParts = [\n\t\t\t\tw.instructorName ? `by ${w.instructorName}` : null,\n\t\t\t\tw.productDisplayName || w.productHost,\n\t\t\t\tw.description,\n\t\t\t].filter(Boolean)\n\t\t\tconst description = descriptionParts.join(' • ') || undefined\n\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tvalue: w.name,\n\t\t\t\tdescription,\n\t\t\t\tworkshop: w,\n\t\t\t}\n\t\t})\n\n\t\treturn [\n\t\t\t...workshopChoices,\n\t\t\t{\n\t\t\t\tname: 'Done',\n\t\t\t\tvalue: 'done' as const,\n\t\t\t\tdescription: 'Continue to the tutorial setup',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Skip workshop setup',\n\t\t\t\tvalue: 'skip' as const,\n\t\t\t\tdescription: 'Continue without setting up more workshops',\n\t\t\t},\n\t\t]\n\t}\n\n\twhile (true) {\n\t\tconst choices = await buildChoices()\n\t\t// If there are no remaining workshops, stop\n\t\tif (choices.length <= 2) return\n\n\t\tconst selection = await search({\n\t\t\tmessage: 'Select a workshop to set up (you can pick multiple):',\n\t\t\tsource: async (input) => {\n\t\t\t\tif (!input) return choices\n\t\t\t\treturn matchSorter(choices, input, {\n\t\t\t\t\tkeys: [\n\t\t\t\t\t\t{ key: 'name', threshold: rankings.CONTAINS },\n\t\t\t\t\t\t{ key: 'value', threshold: rankings.CONTAINS },\n\t\t\t\t\t\t{ key: 'workshop.productDisplayName', threshold: rankings.CONTAINS },\n\t\t\t\t\t\t{ key: 'workshop.instructorName', threshold: rankings.CONTAINS },\n\t\t\t\t\t\t{ key: 'description', threshold: rankings.WORD_STARTS_WITH },\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\tif (selection === 'done' || selection === 'skip') {\n\t\t\tconsole.log()\n\t\t\treturn\n\t\t}\n\n\t\t// If already present, don’t treat that as an error\n\t\tif (await workshopExists(selection)) {\n\t\t\tconsole.log(chalk.gray(`• ${selection} (already set up)`))\n\t\t\tcontinue\n\t\t}\n\n\t\tconst result = await add({ repoName: selection, silent: false })\n\t\tif (!result.success) {\n\t\t\tconsole.log(\n\t\t\t\tchalk.yellow(\n\t\t\t\t\t`⚠️ Failed to set up ${selection}. You can retry later with \\`npx epicshop add ${selection}\\`.`,\n\t\t\t\t),\n\t\t\t)\n\t\t\tif (result.message) console.log(chalk.gray(` ${result.message}`))\n\t\t\tconsole.log()\n\t\t\tcontinue\n\t\t}\n\t}\n}\n\n/**\n * Ensure the tutorial workshop exists and start it\n */\nasync function ensureTutorialAndStart(): Promise<WorkshopsResult> {\n\tconst { workshopExists, getReposDirectory, getWorkshop } = await import(\n\t\t'@epic-web/workshop-utils/workshops.server'\n\t)\n\n\tasync function promptAndOpenTutorial(): Promise<WorkshopsResult> {\n\t\tconsole.log()\n\t\tconsole.log(\n\t\t\tchalk.cyan(\n\t\t\t\t\"🐨 Before we start the tutorial, let's open it in your editor so you can follow along.\",\n\t\t\t),\n\t\t)\n\t\tconsole.log(\n\t\t\tchalk.cyan(\n\t\t\t\t' This will run the \"open\" command for the tutorial repository.\\n',\n\t\t\t),\n\t\t)\n\t\tconst openCommand = `npx epicshop open ${TUTORIAL_REPO}`\n\t\tconsole.log(chalk.gray(' Running:'))\n\t\tconsole.log(chalk.white.bold(` ${openCommand}\\n`))\n\n\t\tawait waitForGo()\n\n\t\treturn await openWorkshop({ workshop: TUTORIAL_REPO })\n\t}\n\n\tasync function promptToStartTutorial(workshopTitle: string): Promise<void> {\n\t\tconsole.log()\n\t\tconsole.log(\n\t\t\tchalk.cyan(\n\t\t\t\t`🐨 Alright, let's get ${chalk.bold(workshopTitle)} started for you.`,\n\t\t\t),\n\t\t)\n\t\tconsole.log(\n\t\t\tchalk.cyan(\n\t\t\t\t' Once it\\'s running, open it using the \"o\" key or by going to',\n\t\t\t),\n\t\t)\n\t\tconsole.log(chalk.cyan.bold(' http://localhost:5639'))\n\t\tconsole.log(chalk.cyan(' in your browser. See you over there!\\n'))\n\n\t\tconst startCommand = `npx epicshop start ${TUTORIAL_REPO}`\n\t\tconsole.log(chalk.gray(' Running:'))\n\t\tconsole.log(chalk.white.bold(` ${startCommand}\\n`))\n\n\t\tawait waitForGo()\n\t}\n\n\t// Check if tutorial already exists\n\tif (await workshopExists(TUTORIAL_REPO)) {\n\t\t// Tutorial already added, open it in the editor before starting\n\t\tconst openResult = await promptAndOpenTutorial()\n\t\tif (!openResult.success) {\n\t\t\treturn openResult\n\t\t}\n\n\t\t// Now start the tutorial\n\t\tconst workshop = await getWorkshop(TUTORIAL_REPO)\n\t\tconst workshopTitle = workshop?.title || TUTORIAL_REPO\n\n\t\tawait promptToStartTutorial(workshopTitle)\n\t\treturn await startWorkshop({ workshop: TUTORIAL_REPO })\n\t}\n\n\tconst reposDir = await getReposDirectory()\n\tconst workshopPath = path.join(reposDir, TUTORIAL_REPO)\n\tconst repoUrl = `https://github.com/${GITHUB_ORG}/${TUTORIAL_REPO}.git`\n\n\tconsole.log()\n\tconsole.log(\n\t\tchalk.cyan(\"🐨 Now let's get you started with the epicshop tutorial.\"),\n\t)\n\tconsole.log(\n\t\tchalk.cyan(\n\t\t\t\" I'll clone the tutorial repository and set it up for you.\\n\",\n\t\t),\n\t)\n\n\t// Show the command we're effectively running\n\tconst addCommand = `npx epicshop add ${TUTORIAL_REPO}`\n\tconsole.log(chalk.gray(' Running:'))\n\tconsole.log(chalk.white.bold(` ${addCommand}\\n`))\n\n\t// Wait for user to press Enter to proceed\n\tawait waitForGo()\n\n\tconsole.log(chalk.cyan(`\\n📦 Cloning ${TUTORIAL_REPO}...`))\n\n\t// Clone the repository\n\tconst cloneResult = await runCommand(\n\t\t'git',\n\t\t['clone', repoUrl, workshopPath],\n\t\t{\n\t\t\tcwd: reposDir,\n\t\t\tsilent: false,\n\t\t},\n\t)\n\n\tif (!cloneResult.success) {\n\t\tconsole.error(\n\t\t\tchalk.red(`❌ Failed to clone repository: ${cloneResult.message}`),\n\t\t)\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage: `Failed to clone repository: ${cloneResult.message}`,\n\t\t\terror: cloneResult.error,\n\t\t}\n\t}\n\n\tconsole.log(chalk.cyan(`\\n🔧 Running npm run setup...\\n`))\n\n\t// Run npm run setup\n\tconst setupResult = await runCommand('npm', ['run', 'setup'], {\n\t\tcwd: workshopPath,\n\t\tsilent: false,\n\t})\n\n\tif (!setupResult.success) {\n\t\t// Clean up on failure\n\t\tconsole.log(chalk.yellow(`🧹 Cleaning up cloned directory...`))\n\t\ttry {\n\t\t\tawait fs.promises.rm(workshopPath, { recursive: true, force: true })\n\t\t} catch {\n\t\t\t// Ignore cleanup errors\n\t\t}\n\t\tconsole.error(chalk.red(`❌ Failed to run setup: ${setupResult.message}`))\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage: `Failed to run setup: ${setupResult.message}`,\n\t\t\terror: setupResult.error,\n\t\t}\n\t}\n\n\t// Get the workshop info (now discoverable since it has package.json with epicshop)\n\tconst workshop = await getWorkshop(TUTORIAL_REPO)\n\tconst workshopTitle = workshop?.title || TUTORIAL_REPO\n\n\tconsole.log()\n\tconsole.log(\n\t\tchalk.green(\n\t\t\t`✅ ${chalk.bold(workshopTitle)} has been set up successfully!\\n`,\n\t\t),\n\t)\n\n\tconst openResult = await promptAndOpenTutorial()\n\tif (!openResult.success) {\n\t\treturn openResult\n\t}\n\n\tawait promptToStartTutorial(workshopTitle)\n\n\tconsole.log(chalk.cyan(`\\n🚀 Starting ${chalk.bold(workshopTitle)}...\\n`))\n\n\t// Start the workshop\n\tconst startResult = await runCommandInteractive('npm', ['start'], {\n\t\tcwd: workshopPath,\n\t})\n\n\tif (!startResult.success) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage: `Failed to start workshop: ${startResult.message}`,\n\t\t\terror: startResult.error,\n\t\t}\n\t}\n\n\treturn { success: true, message: 'Tutorial started successfully' }\n}\n\n/**\n * Check if the workshops directory is configured\n */\nexport async function isConfigured(): Promise<boolean> {\n\tconst { isReposDirectoryConfigured } = await import(\n\t\t'@epic-web/workshop-utils/workshops.server'\n\t)\n\treturn isReposDirectoryConfigured()\n}\n\n/**\n * Wait for user to press Enter to proceed or 'q' to quit\n */\nasync function waitForGo(): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tconsole.log(chalk.cyan(\"🐨 Press Enter when you're ready to go.\"))\n\t\tconsole.log(chalk.gray(' (press \"q\" to quit)'))\n\t\tconsole.log()\n\n\t\tconst cleanup = () => {\n\t\t\tif (process.stdin.isTTY) {\n\t\t\t\tprocess.stdin.setRawMode(false)\n\t\t\t\tprocess.stdin.removeListener('data', onData)\n\t\t\t\tprocess.stdin.pause()\n\t\t\t}\n\t\t}\n\n\t\tconst onData = (key: Buffer) => {\n\t\t\tconst char = key.toString()\n\t\t\t// Handle Enter key to go (Enter sends '\\r' in raw mode)\n\t\t\tif (char === '\\r' || char === '\\n') {\n\t\t\t\tcleanup()\n\t\t\t\tresolve()\n\t\t\t}\n\t\t\t// Handle 'q' or Ctrl+C to quit\n\t\t\tif (char.toLowerCase() === 'q' || char === '\\u0003') {\n\t\t\t\tcleanup()\n\t\t\t\tconsole.log(chalk.gray('\\n👋 Goodbye!'))\n\t\t\t\treject(new Error('USER_QUIT'))\n\t\t\t}\n\t\t}\n\n\t\tif (process.stdin.isTTY) {\n\t\t\tprocess.stdin.setRawMode(true)\n\t\t\tprocess.stdin.resume()\n\t\t\tprocess.stdin.on('data', onData)\n\t\t} else {\n\t\t\t// Non-TTY mode, just resolve immediately\n\t\t\tresolve()\n\t\t}\n\t})\n}\n\n// Helper functions\n\nconst SELECT_CURRENT = Symbol('SELECT_CURRENT')\nconst GO_UP = Symbol('GO_UP')\nconst ENTER_CUSTOM = Symbol('ENTER_CUSTOM')\n\ntype DirectoryChoice =\n\t| { type: 'directory'; path: string; name: string }\n\t| {\n\t\t\ttype: 'action'\n\t\t\taction: typeof SELECT_CURRENT | typeof GO_UP | typeof ENTER_CUSTOM\n\t }\n\n/**\n * Interactive directory browser that lets users navigate and select a directory\n */\nasync function browseDirectory(startPath?: string): Promise<string> {\n\tconst { search, input } = await import('@inquirer/prompts')\n\n\tlet currentPath = startPath || os.homedir()\n\n\t// Resolve to absolute path\n\tcurrentPath = path.resolve(currentPath)\n\n\twhile (true) {\n\t\t// Build choices for current directory\n\t\tconst choices: Array<{\n\t\t\tname: string\n\t\t\tvalue: DirectoryChoice\n\t\t\tdescription?: string\n\t\t}> = []\n\n\t\t// Add action choices at the top\n\t\tchoices.push({\n\t\t\tname: `📁 Select this directory`,\n\t\t\tvalue: { type: 'action', action: SELECT_CURRENT },\n\t\t\tdescription: currentPath,\n\t\t})\n\n\t\t// Add \"go up\" option if not at root\n\t\tconst parentDir = path.dirname(currentPath)\n\t\tif (parentDir !== currentPath) {\n\t\t\tchoices.push({\n\t\t\t\tname: `⬆️ Go up to parent`,\n\t\t\t\tvalue: { type: 'action', action: GO_UP },\n\t\t\t\tdescription: parentDir,\n\t\t\t})\n\t\t}\n\n\t\t// Add custom path option\n\t\tchoices.push({\n\t\t\tname: `✏️ Enter a custom path`,\n\t\t\tvalue: { type: 'action', action: ENTER_CUSTOM },\n\t\t\tdescription: 'Type in any path manually',\n\t\t})\n\n\t\t// List subdirectories\n\t\ttry {\n\t\t\tconst entries = await fs.promises.readdir(currentPath, {\n\t\t\t\twithFileTypes: true,\n\t\t\t})\n\t\t\tconst directories = entries\n\t\t\t\t.filter((entry) => entry.isDirectory() && !entry.name.startsWith('.'))\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\n\t\t\tfor (const dir of directories) {\n\t\t\t\tconst fullPath = path.join(currentPath, dir.name)\n\t\t\t\tchoices.push({\n\t\t\t\t\tname: `📂 ${dir.name}/`,\n\t\t\t\t\tvalue: { type: 'directory', path: fullPath, name: dir.name },\n\t\t\t\t\tdescription: fullPath,\n\t\t\t\t})\n\t\t\t}\n\t\t} catch {\n\t\t\t// Can't read directory, just show action choices\n\t\t}\n\n\t\tconst selected = await search<DirectoryChoice>({\n\t\t\tmessage: `Browse directories (current: ${currentPath})`,\n\t\t\tsource: async (term) => {\n\t\t\t\tif (!term) {\n\t\t\t\t\treturn choices\n\t\t\t\t}\n\t\t\t\treturn matchSorter(choices, term, {\n\t\t\t\t\tkeys: ['name', 'value.name', 'description'],\n\t\t\t\t})\n\t\t\t},\n\t\t\tpageSize: 15,\n\t\t})\n\n\t\tif (selected.type === 'action') {\n\t\t\tif (selected.action === SELECT_CURRENT) {\n\t\t\t\treturn currentPath\n\t\t\t} else if (selected.action === GO_UP) {\n\t\t\t\tcurrentPath = parentDir\n\t\t\t} else if (selected.action === ENTER_CUSTOM) {\n\t\t\t\tconst customPath = await input({\n\t\t\t\t\tmessage: 'Enter the directory path:',\n\t\t\t\t\tdefault: currentPath,\n\t\t\t\t\tvalidate: (value) => {\n\t\t\t\t\t\tif (!value.trim()) {\n\t\t\t\t\t\t\treturn 'Please enter a directory path'\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\treturn path.resolve(customPath)\n\t\t\t}\n\t\t} else if (selected.type === 'directory') {\n\t\t\tcurrentPath = selected.path\n\t\t}\n\t}\n}\n\nasync function directoryExists(dirPath: string): Promise<boolean> {\n\ttry {\n\t\tconst stat = await fs.promises.stat(dirPath)\n\t\treturn stat.isDirectory()\n\t} catch {\n\t\treturn false\n\t}\n}\n\ntype CommandResult = {\n\tsuccess: boolean\n\tmessage?: string\n\terror?: Error\n}\n\nfunction runCommand(\n\tcommand: string,\n\targs: string[],\n\toptions: { cwd: string; silent?: boolean },\n): Promise<CommandResult> {\n\treturn new Promise((resolve) => {\n\t\tconst child = spawn(command, args, {\n\t\t\tcwd: options.cwd,\n\t\t\tstdio: options.silent ? 'pipe' : 'inherit',\n\t\t})\n\n\t\tchild.on('error', (error) => {\n\t\t\tresolve({ success: false, message: error.message, error })\n\t\t})\n\n\t\tchild.on('close', (code) => {\n\t\t\tif (code === 0) {\n\t\t\t\tresolve({ success: true })\n\t\t\t} else {\n\t\t\t\tresolve({\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\tmessage: `Command exited with code ${code}`,\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t})\n}\n\nfunction runCommandInteractive(\n\tcommand: string,\n\targs: string[],\n\toptions: { cwd: string },\n): Promise<CommandResult> {\n\treturn new Promise((resolve) => {\n\t\tconst child = spawn(command, args, {\n\t\t\tcwd: options.cwd,\n\t\t\tstdio: 'inherit',\n\t\t})\n\n\t\tchild.on('error', (error) => {\n\t\t\tresolve({ success: false, message: error.message, error })\n\t\t})\n\n\t\tchild.on('close', (code) => {\n\t\t\tif (code === 0 || code === null) {\n\t\t\t\tresolve({ success: true })\n\t\t\t} else {\n\t\t\t\tresolve({\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\tmessage: `Command exited with code ${code}`,\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t})\n}\n"]}
|
|
1
|
+
{"version":3,"file":"workshops.js","sourceRoot":"","sources":["../../../src/commands/workshops.ts"],"names":[],"mappings":"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","sourcesContent":["import '@epic-web/workshop-utils/init-env'\n\nimport { spawn } from 'node:child_process'\nimport * as fs from 'node:fs'\nimport * as os from 'node:os'\nimport * as path from 'node:path'\nimport { cachified, githubCache } from '@epic-web/workshop-utils/cache.server'\nimport { parseEpicshopConfig } from '@epic-web/workshop-utils/config.server'\nimport { getAuthInfo } from '@epic-web/workshop-utils/db.server'\nimport { userHasAccessToWorkshop } from '@epic-web/workshop-utils/epic-api.server'\nimport chalk from 'chalk'\nimport { matchSorter, rankings } from 'match-sorter'\nimport ora from 'ora'\n\nconst GITHUB_ORG = 'epicweb-dev'\nconst TUTORIAL_REPO = 'epicshop-tutorial'\nconst GITHUB_TOKEN = process.env.GITHUB_TOKEN\n\ntype EpicSite = {\n\thost: string\n\tname: string\n\tdescription: string\n}\n\nconst EPIC_SITES: Array<EpicSite> = [\n\t{\n\t\thost: 'www.epicreact.dev',\n\t\tname: 'Epic React',\n\t\tdescription: 'React development workshops',\n\t},\n\t{\n\t\thost: 'www.epicweb.dev',\n\t\tname: 'Epic Web',\n\t\tdescription: 'Full-stack web development workshops',\n\t},\n\t{\n\t\thost: 'www.epicai.pro',\n\t\tname: 'Epic AI',\n\t\tdescription: 'AI development workshops',\n\t},\n]\n\n/**\n * Find the workshop root directory by walking up from the current directory\n * looking for a package.json with an epicshop field.\n * Returns the workshop root path if found, null otherwise.\n */\nexport async function findWorkshopRoot(): Promise<string | null> {\n\tlet currentDir = process.cwd()\n\tconst root = path.parse(currentDir).root\n\n\twhile (currentDir !== root) {\n\t\ttry {\n\t\t\tconst packageJsonPath = path.join(currentDir, 'package.json')\n\t\t\tconst content = await fs.promises.readFile(packageJsonPath, 'utf-8')\n\t\t\tconst packageJson = JSON.parse(content) as { epicshop?: unknown }\n\n\t\t\t// Check if epicshop config exists\n\t\t\tif (packageJson.epicshop) {\n\t\t\t\treturn currentDir\n\t\t\t}\n\t\t} catch {\n\t\t\t// No package.json or can't read it, continue up\n\t\t}\n\n\t\t// Move up one directory\n\t\tconst parentDir = path.dirname(currentDir)\n\t\tif (parentDir === currentDir) {\n\t\t\t// We've reached the root\n\t\t\tbreak\n\t\t}\n\t\tcurrentDir = parentDir\n\t}\n\n\treturn null\n}\n\n/**\n * Check if the current working directory is inside a workshop\n * (has epicshop config in package.json in current dir or any parent)\n */\nexport async function isInWorkshopDirectory(): Promise<boolean> {\n\treturn (await findWorkshopRoot()) !== null\n}\n\nexport type WorkshopsResult = {\n\tsuccess: boolean\n\tmessage?: string\n\terror?: Error\n}\n\nexport type AddOptions = {\n\trepoName?: string\n\tdirectory?: string\n\tsilent?: boolean\n}\n\ntype GitHubRepo = {\n\tname: string\n\tdescription: string | null\n\thtml_url: string\n\tstargazers_count: number\n\ttopics: string[]\n\tarchived: boolean\n}\n\ntype GitHubSearchResponse = {\n\ttotal_count: number\n\tincomplete_results: boolean\n\titems: GitHubRepo[]\n}\n\ntype EnrichedWorkshop = GitHubRepo & {\n\tproductHost?: string\n\tproductSlug?: string\n\tproductDisplayName?: string\n\tinstructorName?: string\n\ttitle?: string\n\thasAccess?: boolean\n\tisDownloaded?: boolean\n}\n\nconst PRODUCT_ICONS: Record<string, string> = {\n\t'www.epicweb.dev': '🌌',\n\t'www.epicai.pro': '⚡',\n\t'www.epicreact.dev': '🚀',\n}\n\nfunction getGitHubHeaders(): HeadersInit {\n\tconst headers: HeadersInit = {\n\t\tAccept: 'application/vnd.github.v3+json',\n\t\t'User-Agent': 'epicshop-cli',\n\t}\n\tif (GITHUB_TOKEN) {\n\t\theaders.Authorization = `Bearer ${GITHUB_TOKEN}`\n\t}\n\treturn headers\n}\n\n/**\n * Fetch available workshops from GitHub (epicweb-dev org with 'workshop' topic)\n */\nasync function fetchAvailableWorkshops(): Promise<GitHubRepo[]> {\n\treturn cachified({\n\t\tkey: `github-workshops-list`,\n\t\tcache: githubCache,\n\t\tttl: 1000 * 60 * 15, // 15 minutes\n\t\tswr: 1000 * 60 * 60 * 6, // 6 hours stale-while-revalidate\n\t\tasync getFreshValue() {\n\t\t\tconst url = `https://api.github.com/search/repositories?q=topic:workshop+org:${GITHUB_ORG}&sort=stars&order=desc`\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\theaders: getGitHubHeaders(),\n\t\t\t})\n\n\t\t\tif (!response.ok) {\n\t\t\t\tif (response.status === 403) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'GitHub API rate limit exceeded. Please try again in a minute.',\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to fetch workshops from GitHub: ${response.status}`,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tconst data = (await response.json()) as GitHubSearchResponse\n\t\t\treturn data.items.filter((repo) => !repo.archived)\n\t\t},\n\t})\n}\n\n/**\n * Fetch a workshop's package.json from GitHub raw content\n */\nasync function fetchWorkshopPackageJson(\n\trepoName: string,\n): Promise<Record<string, unknown> | null> {\n\treturn cachified({\n\t\tkey: `github-package-json:${repoName}`,\n\t\tcache: githubCache,\n\t\tttl: 1000 * 60 * 60 * 6, // 6 hours\n\t\tswr: 1000 * 60 * 60 * 24 * 30, // 30 days stale-while-revalidate\n\t\tasync getFreshValue() {\n\t\t\tconst url = `https://raw.githubusercontent.com/${GITHUB_ORG}/${repoName}/main/package.json`\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\theaders: {\n\t\t\t\t\t'User-Agent': 'epicshop-cli',\n\t\t\t\t\t...(GITHUB_TOKEN ? { Authorization: `Bearer ${GITHUB_TOKEN}` } : {}),\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\treturn (await response.json()) as Record<string, unknown>\n\t\t\t} catch {\n\t\t\t\treturn null\n\t\t\t}\n\t\t},\n\t})\n}\n\n/**\n * Enrich workshops with metadata from their package.json files\n */\nasync function enrichWorkshopsWithMetadata(\n\tworkshops: GitHubRepo[],\n): Promise<EnrichedWorkshop[]> {\n\tconst packageJsons = await Promise.all(\n\t\tworkshops.map((w) => fetchWorkshopPackageJson(w.name)),\n\t)\n\n\treturn workshops.map((workshop, index) => {\n\t\tconst packageJson = packageJsons[index]\n\t\tconst config = packageJson ? parseEpicshopConfig(packageJson) : null\n\n\t\treturn {\n\t\t\t...workshop,\n\t\t\tproductHost: config?.product?.host,\n\t\t\tproductSlug: config?.product?.slug,\n\t\t\tproductDisplayName: config?.product?.displayName,\n\t\t\tinstructorName: config?.instructor?.name,\n\t\t\ttitle: config?.title,\n\t\t}\n\t})\n}\n\n/**\n * Check which product sites the user is logged in to\n */\nasync function checkAuthStatus(\n\tworkshops: EnrichedWorkshop[],\n): Promise<Map<string, boolean>> {\n\tconst uniqueHosts = new Set(\n\t\tworkshops\n\t\t\t.map((w) => w.productHost)\n\t\t\t.filter((host): host is string => Boolean(host)),\n\t)\n\n\tconst authStatusMap = new Map<string, boolean>()\n\tawait Promise.all(\n\t\tArray.from(uniqueHosts).map(async (host) => {\n\t\t\tconst authInfo = await getAuthInfo({ productHost: host })\n\t\t\tauthStatusMap.set(host, isValidLoginInfo(authInfo))\n\t\t}),\n\t)\n\n\treturn authStatusMap\n}\n\n/**\n * Check if workshops are already downloaded\n */\nasync function checkWorkshopDownloadStatus(\n\tworkshops: EnrichedWorkshop[],\n): Promise<EnrichedWorkshop[]> {\n\tconst { workshopExists } = await import(\n\t\t'@epic-web/workshop-utils/workshops.server'\n\t)\n\n\tconst downloadStatusResults = await Promise.all(\n\t\tworkshops.map(async (workshop) => {\n\t\t\treturn await workshopExists(workshop.name)\n\t\t}),\n\t)\n\n\treturn workshops.map((workshop, index) => ({\n\t\t...workshop,\n\t\tisDownloaded: downloadStatusResults[index],\n\t}))\n}\n\n/**\n * Check access for workshops in parallel\n */\nasync function checkWorkshopAccess(\n\tworkshops: EnrichedWorkshop[],\n): Promise<EnrichedWorkshop[]> {\n\tconst accessResults = await Promise.all(\n\t\tworkshops.map(async (workshop) => {\n\t\t\tif (!workshop.productHost || !workshop.productSlug) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn userHasAccessToWorkshop({\n\t\t\t\tproductHost: workshop.productHost,\n\t\t\t\tworkshopSlug: workshop.productSlug,\n\t\t\t})\n\t\t}),\n\t)\n\n\treturn workshops.map((workshop, index) => ({\n\t\t...workshop,\n\t\thasAccess: accessResults[index],\n\t}))\n}\n\nexport type StartOptions = {\n\tworkshop?: string\n\tsilent?: boolean\n}\n\nexport type ConfigOptions = {\n\treposDir?: string\n\tsilent?: boolean\n\tsubcommand?: 'reset' | 'delete'\n}\n\n/**\n * Add a workshop by cloning from epicweb-dev GitHub org and running setup\n */\nexport async function add(options: AddOptions): Promise<WorkshopsResult> {\n\tconst { silent = false } = options\n\tlet { repoName } = options\n\n\ttry {\n\t\t// If no repo name provided, fetch available workshops and let user select\n\t\tif (!repoName) {\n\t\t\tif (silent) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\tmessage: 'Repository name is required in silent mode',\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst spinner = ora('Fetching available workshops...').start()\n\n\t\t\tlet enrichedWorkshops: EnrichedWorkshop[]\n\t\t\ttry {\n\t\t\t\tconst workshops = await fetchAvailableWorkshops()\n\n\t\t\t\tif (workshops.length === 0) {\n\t\t\t\t\tspinner.fail('No workshops found on GitHub')\n\t\t\t\t\treturn { success: false, message: 'No workshops found on GitHub' }\n\t\t\t\t}\n\n\t\t\t\tspinner.text = 'Loading workshop details...'\n\t\t\t\tenrichedWorkshops = await enrichWorkshopsWithMetadata(workshops)\n\n\t\t\t\tspinner.text = 'Checking download status...'\n\t\t\t\tenrichedWorkshops = await checkWorkshopDownloadStatus(enrichedWorkshops)\n\n\t\t\t\tspinner.stop()\n\t\t\t\tconst authStatusMap = await checkAuthStatus(enrichedWorkshops)\n\n\t\t\t\tconst hostsNotLoggedIn = Array.from(authStatusMap.entries())\n\t\t\t\t\t.filter(([, isLoggedIn]) => !isLoggedIn)\n\t\t\t\t\t.map(([host]) => host)\n\n\t\t\t\tif (hostsNotLoggedIn.length > 0) {\n\t\t\t\t\tconst hostDisplayNames = hostsNotLoggedIn.map((host) => {\n\t\t\t\t\t\tconst workshop = enrichedWorkshops.find(\n\t\t\t\t\t\t\t(w) => w.productHost === host,\n\t\t\t\t\t\t)\n\t\t\t\t\t\treturn workshop?.productDisplayName || host\n\t\t\t\t\t})\n\n\t\t\t\t\tconsole.log()\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t\t`💡 Tip: You are not logged in to ${hostDisplayNames.join(', ')}. ` +\n\t\t\t\t\t\t\t\t'Logging in will allow us to check your workshop access.',\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\tchalk.gray(` To login, run: ${chalk.cyan('npx epicshop auth')}`),\n\t\t\t\t\t)\n\t\t\t\t\tconsole.log()\n\t\t\t\t}\n\n\t\t\t\tspinner.start('Checking access...')\n\t\t\t\tenrichedWorkshops = await checkWorkshopAccess(enrichedWorkshops)\n\n\t\t\t\tenrichedWorkshops.sort((a, b) => {\n\t\t\t\t\tconst aHasAccess = a.hasAccess === true\n\t\t\t\t\tconst aIsDownloaded = a.isDownloaded === true\n\t\t\t\t\tconst bHasAccess = b.hasAccess === true\n\t\t\t\t\tconst bIsDownloaded = b.isDownloaded === true\n\n\t\t\t\t\t// Priority 1: Access and not yet downloaded\n\t\t\t\t\tconst aPriority1 = aHasAccess && !aIsDownloaded\n\t\t\t\t\tconst bPriority1 = bHasAccess && !bIsDownloaded\n\t\t\t\t\tif (aPriority1 && !bPriority1) return -1\n\t\t\t\t\tif (!aPriority1 && bPriority1) return 1\n\n\t\t\t\t\t// Priority 2: No access and not yet downloaded\n\t\t\t\t\tconst aPriority2 = !aHasAccess && !aIsDownloaded\n\t\t\t\t\tconst bPriority2 = !bHasAccess && !bIsDownloaded\n\t\t\t\t\tif (aPriority2 && !bPriority2) return -1\n\t\t\t\t\tif (!aPriority2 && bPriority2) return 1\n\n\t\t\t\t\t// Priority 3: Access and downloaded\n\t\t\t\t\tconst aPriority3 = aHasAccess && aIsDownloaded\n\t\t\t\t\tconst bPriority3 = bHasAccess && bIsDownloaded\n\t\t\t\t\tif (aPriority3 && !bPriority3) return -1\n\t\t\t\t\tif (!aPriority3 && bPriority3) return 1\n\n\t\t\t\t\treturn 0\n\t\t\t\t})\n\n\t\t\t\tspinner.succeed(`Found ${enrichedWorkshops.length} available workshops`)\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\t\t\tspinner.fail(message)\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\tmessage,\n\t\t\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\t\tconsole.log()\n\t\t\tconsole.log(chalk.bold.cyan('📚 Available Workshops\\n'))\n\t\t\tconsole.log(chalk.gray('Icon Key:'))\n\t\t\tconsole.log(chalk.gray(` 🚀 EpicReact.dev`))\n\t\t\tconsole.log(chalk.gray(` 🌌 EpicWeb.dev`))\n\t\t\tconsole.log(chalk.gray(` ⚡ EpicAI.pro`))\n\t\t\tconsole.log(chalk.gray(` 🔑 You have access to this workshop`))\n\t\t\tconsole.log(chalk.gray(` ✔︎ Already downloaded on your machine`))\n\t\t\tconsole.log()\n\n\t\t\tconst allChoices = enrichedWorkshops.map((w) => {\n\t\t\t\tconst productIcon = w.productHost\n\t\t\t\t\t? PRODUCT_ICONS[w.productHost] || ''\n\t\t\t\t\t: ''\n\t\t\t\tconst accessIcon = w.hasAccess === true ? chalk.yellow('🔑') : ''\n\t\t\t\tconst downloadedIcon = w.isDownloaded === true ? chalk.green('✔︎') : ''\n\n\t\t\t\tconst nameParts = [\n\t\t\t\t\tproductIcon,\n\t\t\t\t\tw.title || w.name,\n\t\t\t\t\taccessIcon,\n\t\t\t\t\tdownloadedIcon,\n\t\t\t\t].filter(Boolean)\n\t\t\t\tconst name = nameParts.join(' ')\n\n\t\t\t\tconst descriptionParts = [\n\t\t\t\t\tw.instructorName ? `by ${w.instructorName}` : null,\n\t\t\t\t\tw.productDisplayName || w.productHost,\n\t\t\t\t\tw.description,\n\t\t\t\t].filter(Boolean)\n\t\t\t\tconst description = descriptionParts.join(' • ') || undefined\n\n\t\t\t\treturn {\n\t\t\t\t\tname,\n\t\t\t\t\tvalue: w.name,\n\t\t\t\t\tdescription,\n\t\t\t\t\tworkshop: w,\n\t\t\t\t}\n\t\t\t})\n\n\t\t\trepoName = await search({\n\t\t\t\tmessage: 'Select a workshop to add:',\n\t\t\t\tsource: async (input) => {\n\t\t\t\t\tif (!input) {\n\t\t\t\t\t\treturn allChoices\n\t\t\t\t\t}\n\t\t\t\t\treturn matchSorter(allChoices, input, {\n\t\t\t\t\t\tkeys: [\n\t\t\t\t\t\t\t{ key: 'name', threshold: rankings.CONTAINS },\n\t\t\t\t\t\t\t{ key: 'value', threshold: rankings.CONTAINS },\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: 'workshop.productDisplayName',\n\t\t\t\t\t\t\t\tthreshold: rankings.CONTAINS,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: 'workshop.instructorName',\n\t\t\t\t\t\t\t\tthreshold: rankings.CONTAINS,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ key: 'description', threshold: rankings.WORD_STARTS_WITH },\n\t\t\t\t\t\t],\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\t// Ensure config is set up first\n\t\tif (!(await ensureConfigured())) {\n\t\t\treturn { success: false, message: 'Setup cancelled' }\n\t\t}\n\n\t\tconst { getReposDirectory, workshopExists } = await import(\n\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t)\n\n\t\t// Check if workshop already exists\n\t\tif (await workshopExists(repoName)) {\n\t\t\tconst message = `Workshop \"${repoName}\" already exists`\n\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\treturn { success: false, message }\n\t\t}\n\n\t\t// Get target directory\n\t\tconst reposDir = options.directory || (await getReposDirectory())\n\t\tconst workshopPath = path.join(reposDir, repoName)\n\n\t\t// Ensure the repos directory exists\n\t\tawait fs.promises.mkdir(reposDir, { recursive: true })\n\n\t\t// Check if directory already exists\n\t\ttry {\n\t\t\tawait fs.promises.access(workshopPath)\n\t\t\tconst message = `Directory already exists: ${workshopPath}`\n\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\treturn { success: false, message }\n\t\t} catch {\n\t\t\t// Directory doesn't exist, which is what we want\n\t\t}\n\n\t\tconst repoUrl = `https://github.com/${GITHUB_ORG}/${repoName}.git`\n\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.cyan(`📦 Cloning ${repoUrl}...`))\n\t\t}\n\n\t\t// Clone the repository\n\t\tconst cloneResult = await runCommand(\n\t\t\t'git',\n\t\t\t['clone', repoUrl, workshopPath],\n\t\t\t{\n\t\t\t\tcwd: reposDir,\n\t\t\t\tsilent,\n\t\t\t},\n\t\t)\n\n\t\tif (!cloneResult.success) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tmessage: `Failed to clone repository: ${cloneResult.message}`,\n\t\t\t\terror: cloneResult.error,\n\t\t\t}\n\t\t}\n\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.cyan(`🔧 Running npm run setup...`))\n\t\t}\n\n\t\t// Run npm run setup\n\t\tconst setupResult = await runCommand('npm', ['run', 'setup'], {\n\t\t\tcwd: workshopPath,\n\t\t\tsilent,\n\t\t})\n\n\t\tif (!setupResult.success) {\n\t\t\t// Clean up the cloned directory on setup failure\n\t\t\tif (!silent) {\n\t\t\t\tconsole.log(chalk.yellow(`🧹 Cleaning up cloned directory...`))\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait fs.promises.rm(workshopPath, { recursive: true, force: true })\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tmessage: `Failed to run setup: ${setupResult.message}`,\n\t\t\t\terror: setupResult.error,\n\t\t\t}\n\t\t}\n\n\t\tconst message = `Workshop \"${repoName}\" added successfully at ${workshopPath}`\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.green(`✅ ${message}`))\n\t\t}\n\n\t\treturn { success: true, message }\n\t} catch (error) {\n\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\treturn { success: false, message: 'User quit' }\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tif (!silent) {\n\t\t\tconsole.error(chalk.red(`❌ ${message}`))\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage,\n\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t}\n\t}\n}\n\n/**\n * List all workshops found in the repos directory\n */\nexport async function list({\n\tsilent = false,\n}: { silent?: boolean } = {}): Promise<WorkshopsResult> {\n\ttry {\n\t\t// Ensure config is set up first\n\t\tif (!(await ensureConfigured())) {\n\t\t\treturn { success: false, message: 'Setup cancelled' }\n\t\t}\n\n\t\tconst { listWorkshops, getReposDirectory } = await import(\n\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t)\n\n\t\tconst workshops = await listWorkshops()\n\t\tconst reposDir = await getReposDirectory()\n\n\t\tif (workshops.length === 0) {\n\t\t\tconst message = `No workshops found. Use 'epicshop add <repo-name>' to add one.`\n\t\t\tif (!silent) {\n\t\t\t\tconsole.log(chalk.yellow(message))\n\t\t\t\tconsole.log(chalk.gray(`\\nWorkshops directory: ${reposDir}`))\n\t\t\t}\n\t\t\treturn { success: true, message }\n\t\t}\n\n\t\tif (silent) {\n\t\t\treturn {\n\t\t\t\tsuccess: true,\n\t\t\t\tmessage: `Found ${workshops.length} workshop(s)`,\n\t\t\t}\n\t\t}\n\n\t\t// Interactive selection\n\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\tconst allChoices = workshops.map((w) => ({\n\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\tvalue: w,\n\t\t\tdescription: w.path,\n\t\t}))\n\n\t\tconsole.log(chalk.bold.cyan('\\n📚 Your Workshops:\\n'))\n\n\t\tconst selectedWorkshop = await search({\n\t\t\tmessage: 'Select a workshop:',\n\t\t\tsource: async (input) => {\n\t\t\t\tif (!input) {\n\t\t\t\t\treturn allChoices\n\t\t\t\t}\n\t\t\t\treturn matchSorter(allChoices, input, {\n\t\t\t\t\tkeys: [\n\t\t\t\t\t\t'name',\n\t\t\t\t\t\t'value.repoName',\n\t\t\t\t\t\t'value.title',\n\t\t\t\t\t\t'value.subtitle',\n\t\t\t\t\t\t'description',\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\t// Show actions for selected workshop\n\t\tconst actionChoices = [\n\t\t\t{\n\t\t\t\tname: 'Start workshop',\n\t\t\t\tvalue: 'start',\n\t\t\t\tdescription: 'Run npm start in the workshop directory',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Open in editor',\n\t\t\t\tvalue: 'open',\n\t\t\t\tdescription: 'Open the workshop in your code editor',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Remove workshop',\n\t\t\t\tvalue: 'remove',\n\t\t\t\tdescription: 'Delete the workshop directory',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Back to list',\n\t\t\t\tvalue: 'back',\n\t\t\t\tdescription: 'Go back to workshop selection',\n\t\t\t},\n\t\t]\n\n\t\tconst action = await search({\n\t\t\tmessage: `What would you like to do with \"${selectedWorkshop.title}\"?`,\n\t\t\tsource: async (input) => {\n\t\t\t\tif (!input) {\n\t\t\t\t\treturn actionChoices\n\t\t\t\t}\n\t\t\t\treturn matchSorter(actionChoices, input, {\n\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\tswitch (action) {\n\t\t\tcase 'start':\n\t\t\t\treturn await startWorkshop({ workshop: selectedWorkshop.repoName })\n\t\t\tcase 'open':\n\t\t\t\treturn await openWorkshop({ workshop: selectedWorkshop.repoName })\n\t\t\tcase 'remove':\n\t\t\t\treturn await remove({ workshop: selectedWorkshop.repoName })\n\t\t\tcase 'back':\n\t\t\t\treturn await list({ silent })\n\t\t}\n\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tmessage: `Found ${workshops.length} workshop(s)`,\n\t\t}\n\t} catch (error) {\n\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\treturn { success: false, message: 'User quit' }\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tif (!silent) {\n\t\t\tconsole.error(chalk.red(`❌ ${message}`))\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage,\n\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t}\n\t}\n}\n\n/**\n * Remove a workshop (deletes the directory)\n */\nexport async function remove({\n\tworkshop,\n\tsilent = false,\n}: {\n\tworkshop?: string\n\tsilent?: boolean\n}): Promise<WorkshopsResult> {\n\ttry {\n\t\tconst {\n\t\t\tgetWorkshop,\n\t\t\tgetWorkshopByPath,\n\t\t\tlistWorkshops,\n\t\t\tgetUnpushedChanges,\n\t\t\tdeleteWorkshop,\n\t\t} = await import('@epic-web/workshop-utils/workshops.server')\n\n\t\tlet workshopData\n\n\t\t// If workshop specified, try to find it\n\t\tif (workshop) {\n\t\t\t// First check if it's a path (absolute or looks like a directory)\n\t\t\tif (workshop.startsWith('/') || workshop.includes(path.sep)) {\n\t\t\t\t// Try to find by path\n\t\t\t\tworkshopData = await getWorkshopByPath(workshop)\n\t\t\t\tif (!workshopData) {\n\t\t\t\t\tconst message = `Workshop at \"${workshop}\" is not in your repos directory and cannot be removed via epicshop. Delete it manually if needed.`\n\t\t\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\t\t\treturn { success: false, message }\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// It's a workshop name, look it up\n\t\t\t\tworkshopData = await getWorkshop(workshop)\n\t\t\t\tif (!workshopData) {\n\t\t\t\t\tconst message = `Workshop \"${workshop}\" not found`\n\t\t\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\t\t\treturn { success: false, message }\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Ensure config is set up first for interactive selection\n\t\t\tif (!(await ensureConfigured())) {\n\t\t\t\treturn { success: false, message: 'Setup cancelled' }\n\t\t\t}\n\n\t\t\t// No workshop specified, prompt for selection\n\t\t\tconst workshops = await listWorkshops()\n\n\t\t\tif (workshops.length === 0) {\n\t\t\t\tconst message = `No workshops to remove. Use 'epicshop add <repo-name>' to add one first.`\n\t\t\t\tif (!silent) console.log(chalk.yellow(message))\n\t\t\t\treturn { success: false, message }\n\t\t\t}\n\n\t\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\t\tconst allChoices = workshops.map((w) => ({\n\t\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\t\tvalue: w,\n\t\t\t\tdescription: w.path,\n\t\t\t}))\n\n\t\t\tworkshopData = await search({\n\t\t\t\tmessage: 'Select a workshop to remove:',\n\t\t\t\tsource: async (input) => {\n\t\t\t\t\tif (!input) {\n\t\t\t\t\t\treturn allChoices\n\t\t\t\t\t}\n\t\t\t\t\treturn matchSorter(allChoices, input, {\n\t\t\t\t\t\tkeys: ['name', 'value.repoName', 'value.title', 'description'],\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\tif (!workshopData) {\n\t\t\tconst message = 'No workshop selected'\n\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\treturn { success: false, message }\n\t\t}\n\n\t\t// Check for unpushed changes\n\t\tconst unpushed = await getUnpushedChanges(workshopData.path)\n\n\t\tif (unpushed.hasUnpushed) {\n\t\t\tconsole.log()\n\t\t\tconsole.log(\n\t\t\t\tchalk.yellow.bold(\n\t\t\t\t\t`⚠️ Warning: \"${workshopData.title}\" has unpushed changes:\\n`,\n\t\t\t\t),\n\t\t\t)\n\t\t\tfor (const line of unpushed.summary) {\n\t\t\t\tconsole.log(chalk.yellow(` • ${line}`))\n\t\t\t}\n\t\t\tconsole.log()\n\n\t\t\tconst { confirm } = await import('@inquirer/prompts')\n\t\t\tconst shouldDelete = await confirm({\n\t\t\t\tmessage: `Delete \"${workshopData.title}\" anyway? This cannot be undone.`,\n\t\t\t\tdefault: false,\n\t\t\t})\n\n\t\t\tif (!shouldDelete) {\n\t\t\t\tconst message = 'Removal cancelled'\n\t\t\t\tif (!silent) console.log(chalk.gray(message))\n\t\t\t\treturn { success: false, message }\n\t\t\t}\n\t\t} else {\n\t\t\t// No unpushed changes, but still confirm deletion\n\t\t\tconst { confirm } = await import('@inquirer/prompts')\n\t\t\tconst shouldDelete = await confirm({\n\t\t\t\tmessage: `Delete \"${workshopData.title}\" at ${workshopData.path}?`,\n\t\t\t\tdefault: false,\n\t\t\t})\n\n\t\t\tif (!shouldDelete) {\n\t\t\t\tconst message = 'Removal cancelled'\n\t\t\t\tif (!silent) console.log(chalk.gray(message))\n\t\t\t\treturn { success: false, message }\n\t\t\t}\n\t\t}\n\n\t\t// Delete the workshop directory\n\t\tawait deleteWorkshop(workshopData.path)\n\n\t\tconst message = `Workshop \"${workshopData.title}\" deleted successfully`\n\t\tif (!silent) console.log(chalk.green(`✅ ${message}`))\n\t\treturn { success: true, message }\n\t} catch (error) {\n\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\treturn { success: false, message: 'User quit' }\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tif (!silent) {\n\t\t\tconsole.error(chalk.red(`❌ ${message}`))\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage,\n\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t}\n\t}\n}\n\n/**\n * Start a workshop\n */\nexport async function startWorkshop(\n\toptions: StartOptions = {},\n): Promise<WorkshopsResult> {\n\tconst { silent = false } = options\n\n\ttry {\n\t\t// Ensure config is set up first\n\t\tif (!(await ensureConfigured())) {\n\t\t\treturn { success: false, message: 'Setup cancelled' }\n\t\t}\n\n\t\tconst { listWorkshops, getWorkshop } = await import(\n\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t)\n\n\t\tlet workshopToStart\n\n\t\t// If workshop specified, look it up and fail if not found\n\t\tif (options.workshop) {\n\t\t\tworkshopToStart = await getWorkshop(options.workshop)\n\t\t\tif (!workshopToStart) {\n\t\t\t\tconst message = `Workshop \"${options.workshop}\" not found`\n\t\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\t\treturn { success: false, message }\n\t\t\t}\n\t\t} else {\n\t\t\t// No workshop specified, show selection\n\t\t\tconst workshops = await listWorkshops()\n\n\t\t\tif (workshops.length === 0) {\n\t\t\t\tconst message = `No workshops found. Use 'epicshop add <repo-name>' to add one.`\n\t\t\t\tif (!silent) console.log(chalk.yellow(message))\n\t\t\t\treturn { success: false, message }\n\t\t\t}\n\n\t\t\t// Interactive selection\n\t\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\t\tconst allChoices = workshops.map((w) => ({\n\t\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\t\tvalue: w,\n\t\t\t\tdescription: w.path,\n\t\t\t}))\n\n\t\t\tworkshopToStart = await search({\n\t\t\t\tmessage: 'Select a workshop to start:',\n\t\t\t\tsource: async (input) => {\n\t\t\t\t\tif (!input) {\n\t\t\t\t\t\treturn allChoices\n\t\t\t\t\t}\n\t\t\t\t\treturn matchSorter(allChoices, input, {\n\t\t\t\t\t\tkeys: [\n\t\t\t\t\t\t\t'name',\n\t\t\t\t\t\t\t'value.repoName',\n\t\t\t\t\t\t\t'value.title',\n\t\t\t\t\t\t\t'value.subtitle',\n\t\t\t\t\t\t\t'description',\n\t\t\t\t\t\t],\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\tif (!workshopToStart) {\n\t\t\tconst message = 'No workshop selected'\n\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\treturn { success: false, message }\n\t\t}\n\n\t\t// Check if the workshop directory exists\n\t\tif (!(await directoryExists(workshopToStart.path))) {\n\t\t\tconst message = `Workshop directory not found: ${workshopToStart.path}`\n\t\t\tif (!silent) console.log(chalk.red(`❌ ${message}`))\n\t\t\treturn { success: false, message }\n\t\t}\n\n\t\tif (!silent) {\n\t\t\tconsole.log(\n\t\t\t\tchalk.cyan(`🚀 Starting ${chalk.bold(workshopToStart.title)}...`),\n\t\t\t)\n\t\t\tconsole.log(chalk.gray(` Path: ${workshopToStart.path}\\n`))\n\t\t}\n\n\t\t// Run npm start in the workshop directory\n\t\tconst startResult = await runCommandInteractive('npm', ['start'], {\n\t\t\tcwd: workshopToStart.path,\n\t\t})\n\n\t\tif (!startResult.success) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tmessage: `Failed to start workshop: ${startResult.message}`,\n\t\t\t\terror: startResult.error,\n\t\t\t}\n\t\t}\n\n\t\treturn { success: true, message: 'Workshop started' }\n\t} catch (error) {\n\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\treturn { success: false, message: 'User quit' }\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tif (!silent) {\n\t\t\tconsole.error(chalk.red(`❌ ${message}`))\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage,\n\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t}\n\t}\n}\n\n/**\n * Open a workshop in the user's editor\n */\nexport async function openWorkshop(\n\toptions: StartOptions = {},\n): Promise<WorkshopsResult> {\n\tconst { silent = false } = options\n\n\ttry {\n\t\tconst { listWorkshops, getWorkshop, getWorkshopByPath } = await import(\n\t\t\t'@epic-web/workshop-utils/workshops.server'\n\t\t)\n\t\tconst { launchEditor } = await import(\n\t\t\t'@epic-web/workshop-utils/launch-editor.server'\n\t\t)\n\n\t\tlet workshopToOpen\n\n\t\t// If workshop specified, try to find it\n\t\tif (options.workshop) {\n\t\t\t// First check if it's a path (absolute or looks like a directory)\n\t\t\tif (\n\t\t\t\toptions.workshop.startsWith('/') ||\n\t\t\t\toptions.workshop.includes(path.sep)\n\t\t\t) {\n\t\t\t\t// Try to find by path first\n\t\t\t\tworkshopToOpen = await getWorkshopByPath(options.workshop)\n\t\t\t\tif (!workshopToOpen) {\n\t\t\t\t\t// Not in managed workshops, but if it's a valid workshop dir, open it directly\n\t\t\t\t\tconst pkgPath = path.join(options.workshop, 'package.json')\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst pkgContent = await fs.promises.readFile(pkgPath, 'utf-8')\n\t\t\t\t\t\tconst pkg = JSON.parse(pkgContent) as {\n\t\t\t\t\t\t\tname?: string\n\t\t\t\t\t\t\tepicshop?: { title?: string }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pkg.epicshop) {\n\t\t\t\t\t\t\t// It's a valid workshop directory, create a minimal workshop object\n\t\t\t\t\t\t\tworkshopToOpen = {\n\t\t\t\t\t\t\t\tname: pkg.name || path.basename(options.workshop),\n\t\t\t\t\t\t\t\ttitle: pkg.epicshop.title || path.basename(options.workshop),\n\t\t\t\t\t\t\t\trepoName: path.basename(options.workshop),\n\t\t\t\t\t\t\t\tpath: options.workshop,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Not a valid workshop directory\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// It's a workshop name, look it up\n\t\t\t\tworkshopToOpen = await getWorkshop(options.workshop)\n\t\t\t}\n\n\t\t\tif (!workshopToOpen) {\n\t\t\t\tconst message = `Workshop \"${options.workshop}\" not found`\n\t\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\t\treturn { success: false, message }\n\t\t\t}\n\t\t} else {\n\t\t\t// Ensure config is set up first for interactive selection\n\t\t\tif (!(await ensureConfigured())) {\n\t\t\t\treturn { success: false, message: 'Setup cancelled' }\n\t\t\t}\n\t\t\t// No workshop specified, show selection\n\t\t\tconst workshops = await listWorkshops()\n\n\t\t\tif (workshops.length === 0) {\n\t\t\t\tconst message = `No workshops found. Use 'epicshop add <repo-name>' to add one.`\n\t\t\t\tif (!silent) console.log(chalk.yellow(message))\n\t\t\t\treturn { success: false, message }\n\t\t\t}\n\n\t\t\t// Interactive selection\n\t\t\tconst { search } = await import('@inquirer/prompts')\n\n\t\t\tconst allChoices = workshops.map((w) => ({\n\t\t\t\tname: `${w.title} (${w.repoName})`,\n\t\t\t\tvalue: w,\n\t\t\t\tdescription: w.path,\n\t\t\t}))\n\n\t\t\tworkshopToOpen = await search({\n\t\t\t\tmessage: 'Select a workshop to open:',\n\t\t\t\tsource: async (input) => {\n\t\t\t\t\tif (!input) {\n\t\t\t\t\t\treturn allChoices\n\t\t\t\t\t}\n\t\t\t\t\treturn matchSorter(allChoices, input, {\n\t\t\t\t\t\tkeys: [\n\t\t\t\t\t\t\t'name',\n\t\t\t\t\t\t\t'value.repoName',\n\t\t\t\t\t\t\t'value.title',\n\t\t\t\t\t\t\t'value.subtitle',\n\t\t\t\t\t\t\t'description',\n\t\t\t\t\t\t],\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\tif (!workshopToOpen) {\n\t\t\tconst message = 'No workshop selected'\n\t\t\tif (!silent) console.log(chalk.yellow(`⚠️ ${message}`))\n\t\t\treturn { success: false, message }\n\t\t}\n\n\t\t// Check if the workshop directory exists\n\t\tif (!(await directoryExists(workshopToOpen.path))) {\n\t\t\tconst message = `Workshop directory not found: ${workshopToOpen.path}`\n\t\t\tif (!silent) console.log(chalk.red(`❌ ${message}`))\n\t\t\treturn { success: false, message }\n\t\t}\n\n\t\tif (!silent) {\n\t\t\tconsole.log(\n\t\t\t\tchalk.cyan(\n\t\t\t\t\t`📂 Opening ${chalk.bold(workshopToOpen.title)} in your editor...`,\n\t\t\t\t),\n\t\t\t)\n\t\t\tconsole.log(chalk.gray(` Path: ${workshopToOpen.path}\\n`))\n\t\t}\n\n\t\t// Launch the editor with the workshop directory\n\t\tconst result = await launchEditor(workshopToOpen.path)\n\n\t\tif (result.status === 'error') {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tmessage: result.message,\n\t\t\t}\n\t\t}\n\n\t\treturn { success: true, message: 'Workshop opened in editor' }\n\t} catch (error) {\n\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\treturn { success: false, message: 'User quit' }\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tif (!silent) {\n\t\t\tconsole.error(chalk.red(`❌ ${message}`))\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage,\n\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t}\n\t}\n}\n\n/**\n * Configure workshops settings\n */\nexport async function config(\n\toptions: ConfigOptions = {},\n): Promise<WorkshopsResult> {\n\tconst { silent = false } = options\n\n\ttry {\n\t\tconst {\n\t\t\tgetReposDirectory,\n\t\t\tsetReposDirectory,\n\t\t\tisReposDirectoryConfigured,\n\t\t\tloadConfig,\n\t\t\tsaveConfig,\n\t\t\tgetDefaultReposDir,\n\t\t\tdeleteConfig,\n\t\t} = await import('@epic-web/workshop-utils/workshops.server')\n\n\t\t// Handle reset subcommand\n\t\tif (options.subcommand === 'reset' || options.subcommand === 'delete') {\n\t\t\tif (silent) {\n\t\t\t\tawait deleteConfig()\n\t\t\t\treturn { success: true, message: 'Config file deleted' }\n\t\t\t}\n\n\t\t\tconst { confirm } = await import('@inquirer/prompts')\n\t\t\tconst shouldDelete = await confirm({\n\t\t\t\tmessage:\n\t\t\t\t\t'Are you sure you want to delete the config file? This will reset all settings to defaults.',\n\t\t\t\tdefault: false,\n\t\t\t})\n\n\t\t\tif (shouldDelete) {\n\t\t\t\tawait deleteConfig()\n\t\t\t\tconst message = 'Config file deleted. All settings reset to defaults.'\n\t\t\t\tconsole.log(chalk.green(`✅ ${message}`))\n\t\t\t\treturn { success: true, message }\n\t\t\t} else {\n\t\t\t\tconsole.log(chalk.gray('No changes made.'))\n\t\t\t\treturn { success: true, message: 'Cancelled' }\n\t\t\t}\n\t\t}\n\n\t\tif (options.reposDir) {\n\t\t\t// Set the repos directory directly via CLI flag\n\t\t\tconst resolvedPath = path.resolve(options.reposDir)\n\t\t\tawait setReposDirectory(resolvedPath)\n\t\t\tconst message = `Repos directory set to: ${resolvedPath}`\n\t\t\tif (!silent) console.log(chalk.green(`✅ ${message}`))\n\t\t\treturn { success: true, message }\n\t\t}\n\n\t\tif (silent) {\n\t\t\t// In silent mode, just return current config\n\t\t\tconst reposDir = await getReposDirectory()\n\t\t\treturn { success: true, message: `Repos directory: ${reposDir}` }\n\t\t}\n\n\t\t// Interactive config selection\n\t\tconst { search, confirm } = await import('@inquirer/prompts')\n\n\t\tconst reposDir = await getReposDirectory()\n\t\tconst isConfigured = await isReposDirectoryConfigured()\n\t\tconst defaultDir = getDefaultReposDir()\n\n\t\t// Build config options\n\t\tconst configOptions = [\n\t\t\t{\n\t\t\t\tname: `Repos directory`,\n\t\t\t\tvalue: 'repos-dir',\n\t\t\t\tdescription: isConfigured ? reposDir : `${reposDir} (default)`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: `Reset config file`,\n\t\t\t\tvalue: 'reset',\n\t\t\t\tdescription: 'Delete config file and reset all settings to defaults',\n\t\t\t},\n\t\t]\n\n\t\tconsole.log(chalk.bold.cyan('\\n⚙️ Workshop Configuration\\n'))\n\n\t\tconst selectedConfig = await search({\n\t\t\tmessage: 'Select a setting to configure:',\n\t\t\tsource: async (input) => {\n\t\t\t\tif (!input) return configOptions\n\t\t\t\treturn matchSorter(configOptions, input, {\n\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\tif (selectedConfig === 'reset') {\n\t\t\tconst shouldDelete = await confirm({\n\t\t\t\tmessage:\n\t\t\t\t\t'Are you sure you want to delete the config file? This will reset all settings to defaults.',\n\t\t\t\tdefault: false,\n\t\t\t})\n\n\t\t\tif (shouldDelete) {\n\t\t\t\tawait deleteConfig()\n\t\t\t\tconsole.log()\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.green(\n\t\t\t\t\t\t`✅ Config file deleted. All settings reset to defaults.`,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tmessage: 'Config file deleted. All settings reset to defaults.',\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.log(chalk.gray('\\nNo changes made.'))\n\t\t\t\treturn { success: true, message: 'Cancelled' }\n\t\t\t}\n\t\t}\n\n\t\tif (selectedConfig === 'repos-dir') {\n\t\t\t// Show current value and actions\n\t\t\tconsole.log()\n\t\t\tconsole.log(chalk.bold(' Current value:'))\n\t\t\tif (isConfigured) {\n\t\t\t\tconsole.log(chalk.white(` ${reposDir}`))\n\t\t\t} else {\n\t\t\t\tconsole.log(chalk.gray(` ${reposDir} (default, not explicitly set)`))\n\t\t\t}\n\t\t\tconsole.log()\n\n\t\t\tconst actionChoices = [\n\t\t\t\t{\n\t\t\t\t\tname: 'Edit',\n\t\t\t\t\tvalue: 'edit',\n\t\t\t\t\tdescription: 'Change the repos directory',\n\t\t\t\t},\n\t\t\t\t...(isConfigured\n\t\t\t\t\t? [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Remove',\n\t\t\t\t\t\t\t\tvalue: 'remove',\n\t\t\t\t\t\t\t\tdescription: `Reset to default (${defaultDir})`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]\n\t\t\t\t\t: []),\n\t\t\t\t{\n\t\t\t\t\tname: 'Cancel',\n\t\t\t\t\tvalue: 'cancel',\n\t\t\t\t\tdescription: 'Go back without changes',\n\t\t\t\t},\n\t\t\t]\n\n\t\t\tconst action = await search({\n\t\t\t\tmessage: 'What would you like to do?',\n\t\t\t\tsource: async (input) => {\n\t\t\t\t\tif (!input) return actionChoices\n\t\t\t\t\treturn matchSorter(actionChoices, input, {\n\t\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tif (action === 'edit') {\n\t\t\t\tconsole.log()\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.cyan('🐨 Use the directory browser to select a new location.'),\n\t\t\t\t)\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.gray(' Type to search, use arrow keys to navigate.\\n'),\n\t\t\t\t)\n\n\t\t\t\tconst newDir = await browseDirectory(\n\t\t\t\t\tisConfigured ? reposDir : path.dirname(defaultDir),\n\t\t\t\t)\n\t\t\t\tconst resolvedPath = path.resolve(newDir)\n\t\t\t\tawait setReposDirectory(resolvedPath)\n\n\t\t\t\tconsole.log()\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.green(`✅ Repos directory set to: ${chalk.bold(resolvedPath)}`),\n\t\t\t\t)\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tmessage: `Repos directory set to: ${resolvedPath}`,\n\t\t\t\t}\n\t\t\t} else if (action === 'remove') {\n\t\t\t\tconst shouldRemove = await confirm({\n\t\t\t\t\tmessage: `Reset repos directory to default (${defaultDir})?`,\n\t\t\t\t\tdefault: false,\n\t\t\t\t})\n\n\t\t\t\tif (shouldRemove) {\n\t\t\t\t\tconst currentConfig = await loadConfig()\n\t\t\t\t\tdelete currentConfig.reposDirectory\n\t\t\t\t\tawait saveConfig(currentConfig)\n\n\t\t\t\t\tconsole.log()\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\tchalk.green(\n\t\t\t\t\t\t\t`✅ Repos directory reset to default: ${chalk.bold(defaultDir)}`,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\tmessage: `Repos directory reset to default: ${defaultDir}`,\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(chalk.gray('\\nNo changes made.'))\n\t\t\t\t\treturn { success: true, message: 'Cancelled' }\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.log(chalk.gray('\\nNo changes made.'))\n\t\t\t\treturn { success: true, message: 'Cancelled' }\n\t\t\t}\n\t\t}\n\n\t\treturn { success: true, message: 'Config viewed' }\n\t} catch (error) {\n\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\treturn { success: false, message: 'User quit' }\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tif (!silent) {\n\t\t\tconsole.error(chalk.red(`❌ ${message}`))\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage,\n\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t}\n\t}\n}\n\n/**\n * Check if the workshops directory is configured, and run onboarding if not\n * Call this at the start of any command that requires the config to be set\n */\nexport async function ensureConfigured(): Promise<boolean> {\n\tconst { isReposDirectoryConfigured } = await import(\n\t\t'@epic-web/workshop-utils/workshops.server'\n\t)\n\n\tif (await isReposDirectoryConfigured()) {\n\t\treturn true\n\t}\n\n\t// Not configured, run onboarding\n\tconst result = await onboarding()\n\treturn result.success\n}\n\n/**\n * Run the onboarding flow for new users\n */\nexport async function onboarding(): Promise<WorkshopsResult> {\n\ttry {\n\t\tconst {\n\t\t\tisReposDirectoryConfigured,\n\t\t\tgetDefaultReposDir,\n\t\t\tsetReposDirectory,\n\t\t} = await import('@epic-web/workshop-utils/workshops.server')\n\n\t\t// Check if already configured\n\t\tif (await isReposDirectoryConfigured()) {\n\t\t\t// Already configured, check for tutorial\n\t\t\treturn await ensureTutorialAndStart()\n\t\t}\n\n\t\t// Welcome message from Kody\n\t\tconsole.log()\n\t\tconsole.log(\n\t\t\tchalk.cyan(\n\t\t\t\t\"🐨 Hey there! Welcome to the epicshop CLI. I'm Kody the Koala, and I'm here to help you learn.\",\n\t\t\t),\n\t\t)\n\t\tconsole.log(\n\t\t\tchalk.cyan(\n\t\t\t\t\" It looks like this is the first time you're using epicshop, so I'm going to help you get set up and get you started with the tutorial.\",\n\t\t\t),\n\t\t)\n\t\tconsole.log(\n\t\t\tchalk.gray(\n\t\t\t\t` Once you're finished going through the tutorial, feel free to run ${chalk.underline(`npx epicshop ${process.argv.slice(2).join(' ')}`)} again.\\n`,\n\t\t\t),\n\t\t)\n\n\t\tconsole.log(\n\t\t\tchalk.white(' First, we need to choose where to store your workshops.'),\n\t\t)\n\t\tconsole.log(\n\t\t\tchalk.white(\n\t\t\t\t' Workshops are cloned from GitHub and stored in a directory of your choice.\\n',\n\t\t\t),\n\t\t)\n\n\t\t// Prompt for directory configuration\n\t\tconst { confirm } = await import('@inquirer/prompts')\n\t\tconst defaultDir = getDefaultReposDir()\n\n\t\tconsole.log(chalk.gray(` Recommended: ${chalk.white(defaultDir)}\\n`))\n\n\t\tconst useDefault = await confirm({\n\t\t\tmessage: 'Use the recommended directory?',\n\t\t\tdefault: true,\n\t\t})\n\n\t\tlet reposDir: string\n\t\tif (useDefault) {\n\t\t\treposDir = defaultDir\n\t\t} else {\n\t\t\tconsole.log()\n\t\t\tconsole.log(\n\t\t\t\tchalk.cyan(\n\t\t\t\t\t'🐨 No problem! Use the directory browser to find your preferred location.',\n\t\t\t\t),\n\t\t\t)\n\t\t\tconsole.log(\n\t\t\t\tchalk.gray(' Type to search, use arrow keys to navigate.\\n'),\n\t\t\t)\n\t\t\treposDir = await browseDirectory(path.dirname(defaultDir))\n\t\t}\n\n\t\t// Resolve and save the directory\n\t\tconst resolvedPath = path.resolve(reposDir)\n\t\tawait setReposDirectory(resolvedPath)\n\n\t\tconsole.log()\n\t\tconsole.log(\n\t\t\tchalk.green(`✅ Workshops directory set to: ${chalk.bold(resolvedPath)}`),\n\t\t)\n\t\tconsole.log()\n\n\t\t// Ensure directory exists\n\t\tawait fs.promises.mkdir(resolvedPath, { recursive: true })\n\n\t\t// Offer site login right after workshop directory setup\n\t\tawait runSiteLoginOnboarding()\n\n\t\t// Offer to set up any workshops the user wants (optional)\n\t\tawait promptAndSetupAccessibleWorkshops()\n\n\t\t// Now check for tutorial and start it\n\t\treturn await ensureTutorialAndStart()\n\t} catch (error) {\n\t\tif ((error as Error).message === 'USER_QUIT') {\n\t\t\treturn { success: false, message: 'User quit' }\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tconsole.error(chalk.red(`❌ ${message}`))\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage,\n\t\t\terror: error instanceof Error ? error : new Error(message),\n\t\t}\n\t}\n}\n\nfunction isValidLoginInfo(authInfo: unknown): authInfo is {\n\temail: string\n\tname?: string | null\n\ttokenSet: { access_token: string }\n} {\n\tif (!authInfo || typeof authInfo !== 'object') return false\n\tconst a = authInfo as any\n\treturn (\n\t\ttypeof a.email === 'string' &&\n\t\ta.email.length > 3 &&\n\t\ttypeof a.tokenSet?.access_token === 'string' &&\n\t\ta.tokenSet.access_token.length > 10\n\t)\n}\n\nasync function runSiteLoginOnboarding(): Promise<void> {\n\tconst { search } = await import('@inquirer/prompts')\n\tconst { login } = await import('./auth.js')\n\n\twhile (true) {\n\t\tconst siteStatuses = await Promise.all(\n\t\t\tEPIC_SITES.map(async (site) => {\n\t\t\t\tconst authInfo = await getAuthInfo({ productHost: site.host })\n\t\t\t\treturn { site, authInfo, loggedIn: isValidLoginInfo(authInfo) }\n\t\t\t}),\n\t\t)\n\n\t\tconsole.log(chalk.bold.cyan('\\n🔐 Site Login\\n'))\n\t\tfor (const { site, authInfo, loggedIn } of siteStatuses) {\n\t\t\tif (loggedIn && isValidLoginInfo(authInfo)) {\n\t\t\t\tconst name = authInfo.name ? ` (${authInfo.name})` : ''\n\t\t\t\tconsole.log(\n\t\t\t\t\t` ${chalk.green('✓')} ${chalk.bold(site.name)}: ${chalk.green('Logged in')} as ${chalk.cyan(authInfo.email)}${name}`,\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tconsole.log(\n\t\t\t\t\t` ${chalk.gray('○')} ${chalk.bold(site.name)}: ${chalk.gray('Not logged in')}`,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tconsole.log()\n\n\t\t// If already logged in everywhere, move on\n\t\tif (siteStatuses.every((s) => s.loggedIn)) {\n\t\t\treturn\n\t\t}\n\n\t\tconsole.log(\n\t\t\tchalk.gray(\n\t\t\t\t` Logging in is optional. If you don’t have an account yet, you can create a free one on any of these sites.\\n`,\n\t\t\t),\n\t\t)\n\n\t\tconst remaining = siteStatuses.filter((s) => !s.loggedIn).map((s) => s.site)\n\t\tconst choices = [\n\t\t\t...remaining.map((h) => ({\n\t\t\t\tname: `Log in to ${h.name}`,\n\t\t\t\tvalue: h.host,\n\t\t\t\tdescription: h.description,\n\t\t\t})),\n\t\t\t{\n\t\t\t\tname: `Skip login`,\n\t\t\t\tvalue: 'skip' as const,\n\t\t\t\tdescription: 'Continue without logging in',\n\t\t\t},\n\t\t]\n\n\t\tconst selection = await search({\n\t\t\tmessage: 'Would you like to log in to any of these sites now?',\n\t\t\tsource: async (input) => {\n\t\t\t\tif (!input) return choices\n\t\t\t\treturn matchSorter(choices, input, {\n\t\t\t\t\tkeys: ['name', 'value', 'description'],\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\tif (selection === 'skip') {\n\t\t\treturn\n\t\t}\n\n\t\t// Run the existing login flow for the selected site\n\t\tlet result: { success: boolean; message?: string; error?: Error }\n\t\ttry {\n\t\t\tresult = await login({ domain: selection, silent: false })\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\t\tresult = { success: false, message, error: error as Error }\n\t\t}\n\n\t\tif (!result.success) {\n\t\t\tconsole.log()\n\t\t\tconsole.log(\n\t\t\t\tchalk.yellow(\n\t\t\t\t\t`⚠️ Login didn’t complete (${result.message ?? 'unknown error'}). You can try again, choose a different site, or skip.\\n`,\n\t\t\t\t),\n\t\t\t)\n\t\t\tcontinue\n\t\t}\n\t}\n}\n\nasync function promptAndSetupAccessibleWorkshops(): Promise<void> {\n\tconst { workshopExists } = await import(\n\t\t'@epic-web/workshop-utils/workshops.server'\n\t)\n\n\tconsole.log(chalk.bold.cyan('\\n📚 Workshop Setup\\n'))\n\tconsole.log(\n\t\tchalk.cyan(\n\t\t\t'🐨 Next, you can select any workshops you’d like me to set up for you.',\n\t\t),\n\t)\n\tconsole.log(\n\t\tchalk.gray(\n\t\t\t' This will clone each workshop repo into your workshops directory and run `npm run setup`.\\n' +\n\t\t\t\t' (If something fails, we’ll keep going and you can retry later with `npx epicshop add`.)\\n',\n\t\t),\n\t)\n\n\tconst { search } = await import('@inquirer/prompts')\n\n\tconst spinner = ora('Fetching available workshops...').start()\n\tlet enrichedWorkshops: EnrichedWorkshop[]\n\ttry {\n\t\tconst workshops = await fetchAvailableWorkshops()\n\t\tif (workshops.length === 0) {\n\t\t\tspinner.fail('No workshops found on GitHub')\n\t\t\tconsole.log(chalk.gray('\\nContinuing...\\n'))\n\t\t\treturn\n\t\t}\n\n\t\tspinner.text = 'Loading workshop details...'\n\t\tenrichedWorkshops = await enrichWorkshopsWithMetadata(workshops)\n\n\t\tspinner.text = 'Checking download status...'\n\t\tenrichedWorkshops = await checkWorkshopDownloadStatus(enrichedWorkshops)\n\n\t\tconst authStatusMap = await checkAuthStatus(enrichedWorkshops)\n\t\tconst sitesNotLoggedIn = Array.from(authStatusMap.entries())\n\t\t\t.filter(([, isLoggedIn]) => !isLoggedIn)\n\t\t\t.map(([host]) => host)\n\n\t\tif (sitesNotLoggedIn.length > 0) {\n\t\t\tspinner.stop()\n\t\t\tconst siteNames = sitesNotLoggedIn.map((host) => {\n\t\t\t\tconst workshop = enrichedWorkshops.find((w) => w.productHost === host)\n\t\t\t\treturn workshop?.productDisplayName || host\n\t\t\t})\n\t\t\tconsole.log()\n\t\t\tconsole.log(\n\t\t\t\tchalk.yellow(\n\t\t\t\t\t`💡 Tip: You’re not logged in to ${siteNames.join(\n\t\t\t\t\t\t', ',\n\t\t\t\t\t)}. Logging in can help us confirm which workshops you have access to.`,\n\t\t\t\t),\n\t\t\t)\n\t\t\tconsole.log(\n\t\t\t\tchalk.gray(` To log in, run: ${chalk.cyan('npx epicshop auth')}`),\n\t\t\t)\n\t\t\tconsole.log()\n\t\t\tspinner.start('Checking access...')\n\t\t} else {\n\t\t\tspinner.start('Checking access...')\n\t\t}\n\n\t\tenrichedWorkshops = await checkWorkshopAccess(enrichedWorkshops)\n\t\tspinner.succeed(`Found ${enrichedWorkshops.length} available workshops`)\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\tspinner.fail(message)\n\t\tconsole.log(\n\t\t\tchalk.yellow(\n\t\t\t\t`⚠️ Could not load workshops right now. Skipping this step.\\n`,\n\t\t\t),\n\t\t)\n\t\treturn\n\t}\n\n\tconst candidates = enrichedWorkshops.filter(\n\t\t(w) => w.name !== TUTORIAL_REPO && w.hasAccess === true && !w.isDownloaded,\n\t)\n\n\tif (candidates.length === 0) {\n\t\tconsole.log(\n\t\t\tchalk.gray(\n\t\t\t\t'No additional workshops to set up right now (either none found, none accessible, or already downloaded).\\n',\n\t\t\t),\n\t\t)\n\t\treturn\n\t}\n\n\tconsole.log()\n\tconsole.log(chalk.bold.cyan('Available Workshops You Have Access To\\n'))\n\tconsole.log(chalk.gray('Icon Key:'))\n\tconsole.log(chalk.gray(` 🚀 EpicReact.dev`))\n\tconsole.log(chalk.gray(` 🌌 EpicWeb.dev`))\n\tconsole.log(chalk.gray(` ⚡ EpicAI.pro`))\n\tconsole.log(chalk.gray(` 🔑 You have access to this workshop`))\n\tconsole.log()\n\n\tconst buildChoices = async () => {\n\t\t// Recompute downloaded status each loop (in case user just added one)\n\t\tconst updated = await checkWorkshopDownloadStatus(candidates)\n\t\tconst remaining = updated.filter((w) => !w.isDownloaded)\n\t\tconst workshopChoices = remaining.map((w) => {\n\t\t\tconst productIcon = w.productHost\n\t\t\t\t? PRODUCT_ICONS[w.productHost] || ''\n\t\t\t\t: ''\n\t\t\tconst accessIcon = chalk.yellow('🔑')\n\t\t\tconst name = [productIcon, w.title || w.name, accessIcon]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(' ')\n\n\t\t\tconst descriptionParts = [\n\t\t\t\tw.instructorName ? `by ${w.instructorName}` : null,\n\t\t\t\tw.productDisplayName || w.productHost,\n\t\t\t\tw.description,\n\t\t\t].filter(Boolean)\n\t\t\tconst description = descriptionParts.join(' • ') || undefined\n\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tvalue: w.name,\n\t\t\t\tdescription,\n\t\t\t\tworkshop: w,\n\t\t\t}\n\t\t})\n\n\t\treturn [\n\t\t\t...workshopChoices,\n\t\t\t{\n\t\t\t\tname: 'Done',\n\t\t\t\tvalue: 'done' as const,\n\t\t\t\tdescription: 'Continue to the tutorial setup',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Skip workshop setup',\n\t\t\t\tvalue: 'skip' as const,\n\t\t\t\tdescription: 'Continue without setting up more workshops',\n\t\t\t},\n\t\t]\n\t}\n\n\twhile (true) {\n\t\tconst choices = await buildChoices()\n\t\t// If there are no remaining workshops, stop\n\t\tif (choices.length <= 2) return\n\n\t\tconst selection = await search({\n\t\t\tmessage: 'Select a workshop to set up (you can pick multiple):',\n\t\t\tsource: async (input) => {\n\t\t\t\tif (!input) return choices\n\t\t\t\treturn matchSorter(choices, input, {\n\t\t\t\t\tkeys: [\n\t\t\t\t\t\t{ key: 'name', threshold: rankings.CONTAINS },\n\t\t\t\t\t\t{ key: 'value', threshold: rankings.CONTAINS },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'workshop.productDisplayName',\n\t\t\t\t\t\t\tthreshold: rankings.CONTAINS,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ key: 'workshop.instructorName', threshold: rankings.CONTAINS },\n\t\t\t\t\t\t{ key: 'description', threshold: rankings.WORD_STARTS_WITH },\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\tif (selection === 'done' || selection === 'skip') {\n\t\t\tconsole.log()\n\t\t\treturn\n\t\t}\n\n\t\t// If already present, don’t treat that as an error\n\t\tif (await workshopExists(selection)) {\n\t\t\tconsole.log(chalk.gray(`• ${selection} (already set up)`))\n\t\t\tcontinue\n\t\t}\n\n\t\tconst result = await add({ repoName: selection, silent: false })\n\t\tif (!result.success) {\n\t\t\tconsole.log(\n\t\t\t\tchalk.yellow(\n\t\t\t\t\t`⚠️ Failed to set up ${selection}. You can retry later with \\`npx epicshop add ${selection}\\`.`,\n\t\t\t\t),\n\t\t\t)\n\t\t\tif (result.message) console.log(chalk.gray(` ${result.message}`))\n\t\t\tconsole.log()\n\t\t\tcontinue\n\t\t}\n\t}\n}\n\n/**\n * Ensure the tutorial workshop exists and start it\n */\nasync function ensureTutorialAndStart(): Promise<WorkshopsResult> {\n\tconst { workshopExists, getReposDirectory, getWorkshop } = await import(\n\t\t'@epic-web/workshop-utils/workshops.server'\n\t)\n\n\tasync function promptAndOpenTutorial(): Promise<WorkshopsResult> {\n\t\tconsole.log()\n\t\tconsole.log(\n\t\t\tchalk.cyan(\n\t\t\t\t\"🐨 Before we start the tutorial, let's open it in your editor so you can follow along.\",\n\t\t\t),\n\t\t)\n\t\tconsole.log(\n\t\t\tchalk.cyan(\n\t\t\t\t' This will run the \"open\" command for the tutorial repository.\\n',\n\t\t\t),\n\t\t)\n\t\tconst openCommand = `npx epicshop open ${TUTORIAL_REPO}`\n\t\tconsole.log(chalk.gray(' Running:'))\n\t\tconsole.log(chalk.white.bold(` ${openCommand}\\n`))\n\n\t\tawait waitForGo()\n\n\t\treturn await openWorkshop({ workshop: TUTORIAL_REPO })\n\t}\n\n\tasync function promptToStartTutorial(workshopTitle: string): Promise<void> {\n\t\tconsole.log()\n\t\tconsole.log(\n\t\t\tchalk.cyan(\n\t\t\t\t`🐨 Alright, let's get ${chalk.bold(workshopTitle)} started for you.`,\n\t\t\t),\n\t\t)\n\t\tconsole.log(\n\t\t\tchalk.cyan(\n\t\t\t\t' Once it\\'s running, open it using the \"o\" key or by going to',\n\t\t\t),\n\t\t)\n\t\tconsole.log(chalk.cyan.bold(' http://localhost:5639'))\n\t\tconsole.log(chalk.cyan(' in your browser. See you over there!\\n'))\n\n\t\tconst startCommand = `npx epicshop start ${TUTORIAL_REPO}`\n\t\tconsole.log(chalk.gray(' Running:'))\n\t\tconsole.log(chalk.white.bold(` ${startCommand}\\n`))\n\n\t\tawait waitForGo()\n\t}\n\n\t// Check if tutorial already exists\n\tif (await workshopExists(TUTORIAL_REPO)) {\n\t\t// Tutorial already added, open it in the editor before starting\n\t\tconst openResult = await promptAndOpenTutorial()\n\t\tif (!openResult.success) {\n\t\t\treturn openResult\n\t\t}\n\n\t\t// Now start the tutorial\n\t\tconst workshop = await getWorkshop(TUTORIAL_REPO)\n\t\tconst workshopTitle = workshop?.title || TUTORIAL_REPO\n\n\t\tawait promptToStartTutorial(workshopTitle)\n\t\treturn await startWorkshop({ workshop: TUTORIAL_REPO })\n\t}\n\n\tconst reposDir = await getReposDirectory()\n\tconst workshopPath = path.join(reposDir, TUTORIAL_REPO)\n\tconst repoUrl = `https://github.com/${GITHUB_ORG}/${TUTORIAL_REPO}.git`\n\n\tconsole.log()\n\tconsole.log(\n\t\tchalk.cyan(\"🐨 Now let's get you started with the epicshop tutorial.\"),\n\t)\n\tconsole.log(\n\t\tchalk.cyan(\n\t\t\t\" I'll clone the tutorial repository and set it up for you.\\n\",\n\t\t),\n\t)\n\n\t// Show the command we're effectively running\n\tconst addCommand = `npx epicshop add ${TUTORIAL_REPO}`\n\tconsole.log(chalk.gray(' Running:'))\n\tconsole.log(chalk.white.bold(` ${addCommand}\\n`))\n\n\t// Wait for user to press Enter to proceed\n\tawait waitForGo()\n\n\tconsole.log(chalk.cyan(`\\n📦 Cloning ${TUTORIAL_REPO}...`))\n\n\t// Clone the repository\n\tconst cloneResult = await runCommand(\n\t\t'git',\n\t\t['clone', repoUrl, workshopPath],\n\t\t{\n\t\t\tcwd: reposDir,\n\t\t\tsilent: false,\n\t\t},\n\t)\n\n\tif (!cloneResult.success) {\n\t\tconsole.error(\n\t\t\tchalk.red(`❌ Failed to clone repository: ${cloneResult.message}`),\n\t\t)\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage: `Failed to clone repository: ${cloneResult.message}`,\n\t\t\terror: cloneResult.error,\n\t\t}\n\t}\n\n\tconsole.log(chalk.cyan(`\\n🔧 Running npm run setup...\\n`))\n\n\t// Run npm run setup\n\tconst setupResult = await runCommand('npm', ['run', 'setup'], {\n\t\tcwd: workshopPath,\n\t\tsilent: false,\n\t})\n\n\tif (!setupResult.success) {\n\t\t// Clean up on failure\n\t\tconsole.log(chalk.yellow(`🧹 Cleaning up cloned directory...`))\n\t\ttry {\n\t\t\tawait fs.promises.rm(workshopPath, { recursive: true, force: true })\n\t\t} catch {\n\t\t\t// Ignore cleanup errors\n\t\t}\n\t\tconsole.error(chalk.red(`❌ Failed to run setup: ${setupResult.message}`))\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage: `Failed to run setup: ${setupResult.message}`,\n\t\t\terror: setupResult.error,\n\t\t}\n\t}\n\n\t// Get the workshop info (now discoverable since it has package.json with epicshop)\n\tconst workshop = await getWorkshop(TUTORIAL_REPO)\n\tconst workshopTitle = workshop?.title || TUTORIAL_REPO\n\n\tconsole.log()\n\tconsole.log(\n\t\tchalk.green(\n\t\t\t`✅ ${chalk.bold(workshopTitle)} has been set up successfully!\\n`,\n\t\t),\n\t)\n\n\tconst openResult = await promptAndOpenTutorial()\n\tif (!openResult.success) {\n\t\treturn openResult\n\t}\n\n\tawait promptToStartTutorial(workshopTitle)\n\n\tconsole.log(chalk.cyan(`\\n🚀 Starting ${chalk.bold(workshopTitle)}...\\n`))\n\n\t// Start the workshop\n\tconst startResult = await runCommandInteractive('npm', ['start'], {\n\t\tcwd: workshopPath,\n\t})\n\n\tif (!startResult.success) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmessage: `Failed to start workshop: ${startResult.message}`,\n\t\t\terror: startResult.error,\n\t\t}\n\t}\n\n\treturn { success: true, message: 'Tutorial started successfully' }\n}\n\n/**\n * Check if the workshops directory is configured\n */\nexport async function isConfigured(): Promise<boolean> {\n\tconst { isReposDirectoryConfigured } = await import(\n\t\t'@epic-web/workshop-utils/workshops.server'\n\t)\n\treturn isReposDirectoryConfigured()\n}\n\n/**\n * Wait for user to press Enter to proceed or 'q' to quit\n */\nasync function waitForGo(): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tconsole.log(chalk.cyan(\"🐨 Press Enter when you're ready to go.\"))\n\t\tconsole.log(chalk.gray(' (press \"q\" to quit)'))\n\t\tconsole.log()\n\n\t\tconst cleanup = () => {\n\t\t\tif (process.stdin.isTTY) {\n\t\t\t\tprocess.stdin.setRawMode(false)\n\t\t\t\tprocess.stdin.removeListener('data', onData)\n\t\t\t\tprocess.stdin.pause()\n\t\t\t}\n\t\t}\n\n\t\tconst onData = (key: Buffer) => {\n\t\t\tconst char = key.toString()\n\t\t\t// Handle Enter key to go (Enter sends '\\r' in raw mode)\n\t\t\tif (char === '\\r' || char === '\\n') {\n\t\t\t\tcleanup()\n\t\t\t\tresolve()\n\t\t\t}\n\t\t\t// Handle 'q' or Ctrl+C to quit\n\t\t\tif (char.toLowerCase() === 'q' || char === '\\u0003') {\n\t\t\t\tcleanup()\n\t\t\t\tconsole.log(chalk.gray('\\n👋 Goodbye!'))\n\t\t\t\treject(new Error('USER_QUIT'))\n\t\t\t}\n\t\t}\n\n\t\tif (process.stdin.isTTY) {\n\t\t\tprocess.stdin.setRawMode(true)\n\t\t\tprocess.stdin.resume()\n\t\t\tprocess.stdin.on('data', onData)\n\t\t} else {\n\t\t\t// Non-TTY mode, just resolve immediately\n\t\t\tresolve()\n\t\t}\n\t})\n}\n\n// Helper functions\n\nconst SELECT_CURRENT = Symbol('SELECT_CURRENT')\nconst GO_UP = Symbol('GO_UP')\nconst ENTER_CUSTOM = Symbol('ENTER_CUSTOM')\n\ntype DirectoryChoice =\n\t| { type: 'directory'; path: string; name: string }\n\t| {\n\t\t\ttype: 'action'\n\t\t\taction: typeof SELECT_CURRENT | typeof GO_UP | typeof ENTER_CUSTOM\n\t }\n\n/**\n * Interactive directory browser that lets users navigate and select a directory\n */\nasync function browseDirectory(startPath?: string): Promise<string> {\n\tconst { search, input } = await import('@inquirer/prompts')\n\n\tlet currentPath = startPath || os.homedir()\n\n\t// Resolve to absolute path\n\tcurrentPath = path.resolve(currentPath)\n\n\twhile (true) {\n\t\t// Build choices for current directory\n\t\tconst choices: Array<{\n\t\t\tname: string\n\t\t\tvalue: DirectoryChoice\n\t\t\tdescription?: string\n\t\t}> = []\n\n\t\t// Add action choices at the top\n\t\tchoices.push({\n\t\t\tname: `📁 Select this directory`,\n\t\t\tvalue: { type: 'action', action: SELECT_CURRENT },\n\t\t\tdescription: currentPath,\n\t\t})\n\n\t\t// Add \"go up\" option if not at root\n\t\tconst parentDir = path.dirname(currentPath)\n\t\tif (parentDir !== currentPath) {\n\t\t\tchoices.push({\n\t\t\t\tname: `⬆️ Go up to parent`,\n\t\t\t\tvalue: { type: 'action', action: GO_UP },\n\t\t\t\tdescription: parentDir,\n\t\t\t})\n\t\t}\n\n\t\t// Add custom path option\n\t\tchoices.push({\n\t\t\tname: `✏️ Enter a custom path`,\n\t\t\tvalue: { type: 'action', action: ENTER_CUSTOM },\n\t\t\tdescription: 'Type in any path manually',\n\t\t})\n\n\t\t// List subdirectories\n\t\ttry {\n\t\t\tconst entries = await fs.promises.readdir(currentPath, {\n\t\t\t\twithFileTypes: true,\n\t\t\t})\n\t\t\tconst directories = entries\n\t\t\t\t.filter((entry) => entry.isDirectory() && !entry.name.startsWith('.'))\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\n\t\t\tfor (const dir of directories) {\n\t\t\t\tconst fullPath = path.join(currentPath, dir.name)\n\t\t\t\tchoices.push({\n\t\t\t\t\tname: `📂 ${dir.name}/`,\n\t\t\t\t\tvalue: { type: 'directory', path: fullPath, name: dir.name },\n\t\t\t\t\tdescription: fullPath,\n\t\t\t\t})\n\t\t\t}\n\t\t} catch {\n\t\t\t// Can't read directory, just show action choices\n\t\t}\n\n\t\tconst selected = await search<DirectoryChoice>({\n\t\t\tmessage: `Browse directories (current: ${currentPath})`,\n\t\t\tsource: async (term) => {\n\t\t\t\tif (!term) {\n\t\t\t\t\treturn choices\n\t\t\t\t}\n\t\t\t\treturn matchSorter(choices, term, {\n\t\t\t\t\tkeys: ['name', 'value.name', 'description'],\n\t\t\t\t})\n\t\t\t},\n\t\t\tpageSize: 15,\n\t\t})\n\n\t\tif (selected.type === 'action') {\n\t\t\tif (selected.action === SELECT_CURRENT) {\n\t\t\t\treturn currentPath\n\t\t\t} else if (selected.action === GO_UP) {\n\t\t\t\tcurrentPath = parentDir\n\t\t\t} else if (selected.action === ENTER_CUSTOM) {\n\t\t\t\tconst customPath = await input({\n\t\t\t\t\tmessage: 'Enter the directory path:',\n\t\t\t\t\tdefault: currentPath,\n\t\t\t\t\tvalidate: (value) => {\n\t\t\t\t\t\tif (!value.trim()) {\n\t\t\t\t\t\t\treturn 'Please enter a directory path'\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\treturn path.resolve(customPath)\n\t\t\t}\n\t\t} else if (selected.type === 'directory') {\n\t\t\tcurrentPath = selected.path\n\t\t}\n\t}\n}\n\nasync function directoryExists(dirPath: string): Promise<boolean> {\n\ttry {\n\t\tconst stat = await fs.promises.stat(dirPath)\n\t\treturn stat.isDirectory()\n\t} catch {\n\t\treturn false\n\t}\n}\n\ntype CommandResult = {\n\tsuccess: boolean\n\tmessage?: string\n\terror?: Error\n}\n\nfunction runCommand(\n\tcommand: string,\n\targs: string[],\n\toptions: { cwd: string; silent?: boolean },\n): Promise<CommandResult> {\n\treturn new Promise((resolve) => {\n\t\tconst child = spawn(command, args, {\n\t\t\tcwd: options.cwd,\n\t\t\tstdio: options.silent ? 'pipe' : 'inherit',\n\t\t})\n\n\t\tchild.on('error', (error) => {\n\t\t\tresolve({ success: false, message: error.message, error })\n\t\t})\n\n\t\tchild.on('close', (code) => {\n\t\t\tif (code === 0) {\n\t\t\t\tresolve({ success: true })\n\t\t\t} else {\n\t\t\t\tresolve({\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\tmessage: `Command exited with code ${code}`,\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t})\n}\n\nfunction runCommandInteractive(\n\tcommand: string,\n\targs: string[],\n\toptions: { cwd: string },\n): Promise<CommandResult> {\n\treturn new Promise((resolve) => {\n\t\tconst child = spawn(command, args, {\n\t\t\tcwd: options.cwd,\n\t\t\tstdio: 'inherit',\n\t\t})\n\n\t\tchild.on('error', (error) => {\n\t\t\tresolve({ success: false, message: error.message, error })\n\t\t})\n\n\t\tchild.on('close', (code) => {\n\t\t\tif (code === 0 || code === null) {\n\t\t\t\tresolve({ success: true })\n\t\t\t} else {\n\t\t\t\tresolve({\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\tmessage: `Command exited with code ${code}`,\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t})\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "epicshop",
|
|
3
|
-
"version": "6.47.
|
|
3
|
+
"version": "6.47.3",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -60,12 +60,13 @@
|
|
|
60
60
|
"build:watch": "nx watch --projects=epicshop -- nx run \\$NX_PROJECT_NAME:build"
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"@epic-web/workshop-utils": "6.47.
|
|
63
|
+
"@epic-web/workshop-utils": "6.47.3",
|
|
64
64
|
"@inquirer/prompts": "^7.5.1",
|
|
65
65
|
"chalk": "^5.6.2",
|
|
66
66
|
"close-with-grace": "^2.3.0",
|
|
67
67
|
"get-port": "^7.1.0",
|
|
68
68
|
"match-sorter": "^8.2.0",
|
|
69
|
+
"openid-client": "^6.8.1",
|
|
69
70
|
"open": "^10.2.0",
|
|
70
71
|
"ora": "^8.1.1",
|
|
71
72
|
"yargs": "^18.0.0"
|