{"version":3,"file":"reset-DiwM4lFK.mjs","names":[],"sources":["../src/commands/reset.ts"],"sourcesContent":["import { rm, stat } from \"node:fs/promises\"\nimport { createInterface } from \"node:readline\"\nimport chalk from \"chalk\"\nimport { getNovaDir } from \"../config/store.ts\"\nimport { closeDb, resetDb } from \"../db/client.ts\"\nimport type { Prompts } from \"../types.ts\"\n\nexport async function handleCliReset(): Promise<void> {\n\tconst novaDir = getNovaDir()\n\n\ttry {\n\t\tawait stat(novaDir)\n\t} catch {\n\t\tconsole.log(chalk.yellow(\"No nova data found. Nothing to reset.\"))\n\t\treturn\n\t}\n\n\tconsole.log(\n\t\tchalk.bold(\"This will delete all nova data (API keys, config, sessions, and global skills).\"),\n\t)\n\n\tconst confirmed = await askYesNo(\"Continue? (y/N): \")\n\tif (!confirmed) {\n\t\tconsole.log(chalk.yellow(\"Reset cancelled.\"))\n\t\treturn\n\t}\n\n\tcloseDb()\n\tresetDb()\n\n\ttry {\n\t\tawait rm(novaDir, { recursive: true, force: true })\n\t} catch (e) {\n\t\tconsole.error(chalk.red(`Failed to delete ${novaDir}: ${(e as Error).message}`))\n\t\tprocess.exit(1)\n\t}\n\n\tconsole.log(\n\t\tchalk.green(\"✓ Nova reset complete.\") +\n\t\t\t\"\\n  Run \" +\n\t\t\tchalk.bold.cyan(\"nova\") +\n\t\t\t\" to start fresh with onboarding.\",\n\t)\n}\n\nexport async function handleInteractiveReset(\n\tprompts?: Prompts,\n\tonExit?: () => void,\n): Promise<string> {\n\tconst novaDir = getNovaDir()\n\n\ttry {\n\t\tawait stat(novaDir)\n\t} catch {\n\t\treturn chalk.yellow(\"No nova data found. Nothing to reset.\")\n\t}\n\n\tif (!prompts) {\n\t\treturn chalk.red(\"Reset is only available in interactive mode. Use /reset.\")\n\t}\n\n\tconst confirmed = await prompts.confirm({\n\t\tmessage: \"Delete all nova data? This removes API keys, config, sessions, and global skills.\",\n\t})\n\n\tif (!confirmed) {\n\t\treturn chalk.yellow(\"Reset cancelled.\")\n\t}\n\n\tcloseDb()\n\tresetDb()\n\n\ttry {\n\t\tawait rm(novaDir, { recursive: true, force: true })\n\t} catch (e) {\n\t\treturn chalk.red(`Failed to delete ${novaDir}: ${(e as Error).message}`)\n\t}\n\n\tconst result =\n\t\tchalk.green(\"✓ Nova reset complete.\") +\n\t\t\"\\n  Run \" +\n\t\tchalk.bold.cyan(\"nova\") +\n\t\t\" to start fresh with onboarding.\"\n\n\tif (onExit) {\n\t\tprocess.stdout.write(`${result}\\n`)\n\t\tonExit()\n\t\treturn null as unknown as string\n\t}\n\n\treturn result\n}\n\nfunction askYesNo(question: string): Promise<boolean> {\n\tconst rl = createInterface({ input: process.stdin, output: process.stderr })\n\treturn new Promise((resolve) => {\n\t\trl.question(question, (answer) => {\n\t\t\trl.close()\n\t\t\tresolve(answer.toLowerCase() === \"y\" || answer.toLowerCase() === \"yes\")\n\t\t})\n\t})\n}\n"],"mappings":"6WAOA,eAAsB,GAAgC,CACrD,IAAM,EAAU,EAAW,EAE3B,GAAI,CACH,MAAM,EAAK,CAAO,CACnB,MAAQ,CACP,QAAQ,IAAI,EAAM,OAAO,uCAAuC,CAAC,EACjE,MACD,CAOA,GALA,QAAQ,IACP,EAAM,KAAK,iFAAiF,CAC7F,EAGI,CAAC,MADmB,EAAS,mBAAmB,EACpC,CACf,QAAQ,IAAI,EAAM,OAAO,kBAAkB,CAAC,EAC5C,MACD,CAEA,EAAQ,EACR,EAAQ,EAER,GAAI,CACH,MAAM,EAAG,EAAS,CAAE,UAAW,GAAM,MAAO,EAAK,CAAC,CACnD,OAAS,EAAG,CACX,QAAQ,MAAM,EAAM,IAAI,oBAAoB,EAAQ,IAAK,EAAY,SAAS,CAAC,EAC/E,QAAQ,KAAK,CAAC,CACf,CAEA,QAAQ,IACP,EAAM,MAAM,wBAAwB,EACnC;QACA,EAAM,KAAK,KAAK,MAAM,EACtB,kCACF,CACD,CAEA,eAAsB,EACrB,EACA,EACkB,CAClB,IAAM,EAAU,EAAW,EAE3B,GAAI,CACH,MAAM,EAAK,CAAO,CACnB,MAAQ,CACP,OAAO,EAAM,OAAO,uCAAuC,CAC5D,CAEA,GAAI,CAAC,EACJ,OAAO,EAAM,IAAI,0DAA0D,EAO5E,GAAI,CAAC,MAJmB,EAAQ,QAAQ,CACvC,QAAS,mFACV,CAAC,EAGA,OAAO,EAAM,OAAO,kBAAkB,EAGvC,EAAQ,EACR,EAAQ,EAER,GAAI,CACH,MAAM,EAAG,EAAS,CAAE,UAAW,GAAM,MAAO,EAAK,CAAC,CACnD,OAAS,EAAG,CACX,OAAO,EAAM,IAAI,oBAAoB,EAAQ,IAAK,EAAY,SAAS,CACxE,CAEA,IAAM,EACL,EAAM,MAAM,wBAAwB,EACpC;QACA,EAAM,KAAK,KAAK,MAAM,EACtB,mCAQD,OANI,GACH,QAAQ,OAAO,MAAM,GAAG,EAAO,GAAG,EAClC,EAAO,EACA,MAGD,CACR,CAEA,SAAS,EAAS,EAAoC,CACrD,IAAM,EAAK,EAAgB,CAAE,MAAO,QAAQ,MAAO,OAAQ,QAAQ,MAAO,CAAC,EAC3E,OAAO,IAAI,QAAS,GAAY,CAC/B,EAAG,SAAS,EAAW,GAAW,CACjC,EAAG,MAAM,EACT,EAAQ,EAAO,YAAY,IAAM,KAAO,EAAO,YAAY,IAAM,KAAK,CACvE,CAAC,CACF,CAAC,CACF"}