@onexapis/cli 1.1.65 → 1.1.66

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/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/logger.ts","../src/utils/compile-theme.ts","../src/utils/dev-server.ts","../src/utils/file-helpers.ts","../src/commands/init.ts","../src/utils/validators.ts","../src/utils/cli-auth.ts","../src/commands/create-section.ts","../src/commands/create-block.ts","../src/commands/create-component.ts","../src/commands/list.ts","../src/commands/validate.ts","../src/commands/build.ts","../src/commands/package.ts","../src/commands/deploy.ts","../src/commands/upload.ts","../src/commands/download.ts","../src/commands/clone.ts","../src/commands/dev.ts","../src/commands/config.ts","../src/commands/login.ts","../src/commands/logout.ts","../src/commands/whoami.ts","../src/commands/publish.ts","../src/utils/scan-theme-assets.ts","../src/commands/mcp.ts","../src/cli.ts"],"names":["chalk","path","fs","build","subpath","cacheKey","exports","hash","crypto","hashedName","hashedMapName","oldFiles","version","context","data","execSync","inquirer","answers","isThemeDir","compileStandaloneTheme","runCommand","spawn","fetch","ora","unwrapEnvelope","resolveLatestVersion","glob","AdmZip","fsNode","os","compilePreviewRuntime","createDevServer","archiver","require","createRequire"],"mappings":"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","file":"cli.mjs","sourcesContent":["import chalk from \"chalk\";\nimport ora, { Ora } from \"ora\";\n\nexport class Logger {\n private spinner: Ora | null = null;\n\n success(message: string): void {\n console.log(chalk.green(\"✓\"), message);\n }\n\n error(message: string): void {\n console.log(chalk.red(\"✗\"), message);\n }\n\n warning(message: string): void {\n console.log(chalk.yellow(\"⚠\"), message);\n }\n\n info(message: string): void {\n console.log(chalk.blue(\"ℹ\"), message);\n }\n\n log(message: string): void {\n console.log(message);\n }\n\n startSpinner(message: string): void {\n this.spinner = ora(message).start();\n }\n\n stopSpinner(success: boolean = true, message?: string): void {\n if (!this.spinner) return;\n\n if (success) {\n this.spinner.succeed(message);\n } else {\n this.spinner.fail(message);\n }\n this.spinner = null;\n }\n\n updateSpinner(message: string): void {\n if (this.spinner) {\n this.spinner.text = message;\n }\n }\n\n newLine(): void {\n console.log();\n }\n\n header(message: string): void {\n console.log();\n console.log(chalk.bold.cyan(message));\n console.log(chalk.cyan(\"=\".repeat(message.length)));\n console.log();\n }\n\n section(message: string): void {\n console.log();\n console.log(chalk.bold(message));\n }\n}\n\nexport const logger = new Logger();\n","/**\n * Standalone Theme Compiler\n *\n * Compiles standalone theme source code to ESM bundles using esbuild.\n * Adapted from scripts/compile-theme.ts for use in the CLI.\n *\n * Key differences from the monorepo version:\n * - Core global plugin reads from node_modules/@onexapis/core/dist/ (not packages/core/dist/)\n * - Process shim is inlined (no external file dependency)\n * - Output goes to ./dist/ in the theme directory\n */\n\nimport * as esbuild from \"esbuild\";\nimport type { Plugin } from \"esbuild\";\nimport path from \"path\";\nimport fs from \"fs/promises\";\nimport crypto from \"crypto\";\nimport { glob } from \"glob\";\nimport { createRequire } from \"node:module\";\nimport { logger } from \"./logger\";\n\n/**\n * Generate Tailwind CSS bundle for the theme.\n * Scans theme section/component TSX files to compile all used utility classes.\n * Output: dist/bundle.css — loaded by the editor iframe as a CSS asset.\n */\nasync function generateThemeCSS(\n themePath: string,\n outDir: string\n): Promise<void> {\n try {\n // Dynamic imports so tailwindcss/postcss don't break if missing\n const postcss = (await import(\"postcss\")).default;\n const tailwindcss = (await import(\"tailwindcss\")).default;\n\n const tailwindConfig = {\n content: [\n path.join(themePath, \"sections/**/*.{ts,tsx}\"),\n path.join(themePath, \"components/**/*.{ts,tsx}\"),\n ],\n theme: { extend: {} },\n plugins: [] as any[],\n };\n\n const inputCSS =\n \"@tailwind base;\\n@tailwind components;\\n@tailwind utilities;\";\n const result = await postcss([tailwindcss(tailwindConfig)]).process(\n inputCSS,\n { from: undefined }\n );\n\n await fs.writeFile(path.join(outDir, \"bundle.css\"), result.css);\n logger.info(\"Generated bundle.css\");\n } catch (err) {\n logger.warning(\n `CSS generation skipped: ${err instanceof Error ? err.message : String(err)}`\n );\n }\n}\n\n/**\n * Inline process shim for browser environments.\n * Equivalent to scripts/process-shim.js but embedded as a string.\n */\nconst PROCESS_SHIM = `\nif (typeof process === \"undefined\") {\n globalThis.process = {\n env: {},\n browser: true,\n };\n}\n`;\n\n/**\n * Plugin to externalize React as window globals.\n * React/ReactDOM are shared via globalThis to prevent duplication.\n */\nconst reactGlobalPlugin: Plugin = {\n name: \"react-global\",\n setup(build) {\n build.onResolve({ filter: /^react$/ }, () => ({\n path: \"react-external\",\n namespace: \"react-global\",\n }));\n\n build.onResolve({ filter: /^react-dom$/ }, () => ({\n path: \"react-dom-external\",\n namespace: \"react-global\",\n }));\n\n build.onResolve({ filter: /^react\\/jsx-runtime$/ }, () => ({\n path: \"react-jsx-runtime-external\",\n namespace: \"react-global\",\n }));\n\n build.onLoad({ filter: /.*/, namespace: \"react-global\" }, (args) => {\n if (args.path === \"react-external\") {\n return {\n contents: `\nif (!globalThis.__ONEX_REACT__) {\n throw new Error('[Theme Bundle] React not initialized. Ensure globalThis.__ONEX_REACT__ is set before loading theme.');\n}\n\nconst React = globalThis.__ONEX_REACT__;\nexport default React;\n\nexport const {\n useState,\n useEffect,\n useContext,\n useReducer,\n useCallback,\n useMemo,\n useRef,\n useImperativeHandle,\n useLayoutEffect,\n useDebugValue,\n useDeferredValue,\n useTransition,\n useId,\n useSyncExternalStore,\n useInsertionEffect,\n createContext,\n forwardRef,\n lazy,\n memo,\n startTransition,\n createElement,\n cloneElement,\n isValidElement,\n Children,\n Fragment,\n Profiler,\n StrictMode,\n Suspense,\n Component,\n PureComponent,\n useActionState,\n use,\n} = React;\n `.trim(),\n loader: \"js\",\n };\n }\n\n if (args.path === \"react-dom-external\") {\n return {\n contents: `\nif (!globalThis.__ONEX_REACT_DOM__) {\n throw new Error('[Theme Bundle] ReactDOM not initialized. Ensure globalThis.__ONEX_REACT_DOM__ is set before loading theme.');\n}\n\nconst ReactDOM = globalThis.__ONEX_REACT_DOM__;\nexport default ReactDOM;\n\nexport const {\n createRoot,\n hydrateRoot,\n flushSync,\n createPortal,\n findDOMNode,\n render,\n hydrate,\n unmountComponentAtNode,\n} = ReactDOM;\n `.trim(),\n loader: \"js\",\n };\n }\n\n if (args.path === \"react-jsx-runtime-external\") {\n return {\n contents: `\nif (!globalThis.__ONEX_JSX_RUNTIME__) {\n throw new Error('[Theme Bundle] React JSX runtime not initialized. Ensure globalThis.__ONEX_JSX_RUNTIME__ is set before loading theme.');\n}\nconst _jsxRuntime = globalThis.__ONEX_JSX_RUNTIME__;\nexport const jsx = _jsxRuntime.jsx;\nexport const jsxs = _jsxRuntime.jsxs;\nexport const Fragment = _jsxRuntime.Fragment;\n `.trim(),\n loader: \"js\",\n };\n }\n\n return null;\n });\n },\n};\n\n/**\n * Plugin to externalize @tanstack/react-query as a window global.\n * Prevents the theme bundle from shipping its own copy of react-query,\n * which would create a second QueryClient instance separate from the host's.\n */\nconst reactQueryGlobalPlugin: Plugin = {\n name: \"react-query-global\",\n setup(build) {\n build.onResolve({ filter: /^@tanstack\\/react-query$/ }, () => ({\n path: \"react-query-external\",\n namespace: \"react-query-global\",\n }));\n\n build.onLoad({ filter: /.*/, namespace: \"react-query-global\" }, () => ({\n contents: `\nif (!globalThis.__REACT_QUERY__) {\n throw new Error('[Theme Bundle] @tanstack/react-query not initialized. Ensure globalThis.__REACT_QUERY__ is set before loading theme.');\n}\nconst _rq = globalThis.__REACT_QUERY__;\nexport default _rq;\nexport const {\n useQuery,\n useMutation,\n useQueryClient,\n useInfiniteQuery,\n QueryClient,\n QueryClientProvider,\n useIsFetching,\n useIsMutating,\n usePrefetchQuery,\n usePrefetchInfiniteQuery,\n} = _rq;\n `.trim(),\n loader: \"js\",\n }));\n },\n};\n\n/**\n * Resolve a file inside node_modules, searching up the directory tree.\n * Handles monorepo hoisting where deps are in a parent node_modules.\n */\nasync function resolveNodeModulesFile(\n startDir: string,\n relativePath: string\n): Promise<string | null> {\n let dir = startDir;\n while (true) {\n const candidate = path.join(dir, \"node_modules\", relativePath);\n try {\n await fs.access(candidate);\n return candidate;\n } catch {\n const parent = path.dirname(dir);\n if (parent === dir) break; // reached filesystem root\n dir = parent;\n }\n }\n return null;\n}\n\n/**\n * Scan source files in `sourceDir` for named imports/exports from `packageName`.\n * Returns a map of subpath → Set of imported names.\n * e.g. for `@onexapis/core/internal` → key \"internal\", names {\"useCart\", \"Button\"}\n * for `@onexapis/core` → key \"\" (empty string)\n */\nasync function scanImportsFromPackage(\n sourceDir: string,\n packageName: string\n): Promise<Record<string, Set<string>>> {\n const result: Record<string, Set<string>> = {};\n const escapedPkg = packageName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n // Match named imports: import { useCart, useAuth } from \"@onexapis/core/hooks\"\n const importRegex = new RegExp(\n `(?:import|export)\\\\s+(?:type\\\\s+)?\\\\{([^}]+)\\\\}\\\\s+from\\\\s+[\"']${escapedPkg}(/[\\\\w./-]+)?[\"']`,\n \"g\"\n );\n // Match namespace imports: import * as H from \"@onexapis/core/hooks\"\n const namespaceImportRegex = new RegExp(\n `import\\\\s+\\\\*\\\\s+as\\\\s+\\\\w+\\\\s+from\\\\s+[\"']${escapedPkg}(/[\\\\w./-]+)?[\"']`,\n \"g\"\n );\n\n const sourceFiles = await glob(\"**/*.{ts,tsx}\", {\n cwd: sourceDir,\n ignore: [\"node_modules/**\", \"dist/**\"],\n });\n\n for (const file of sourceFiles) {\n try {\n const content = await fs.readFile(path.join(sourceDir, file), \"utf-8\");\n // Check namespace imports first — marks subpath for full export reading\n for (const match of content.matchAll(namespaceImportRegex)) {\n const subpath = match[1] ? match[1].slice(1) : \"\";\n if (!result[subpath]) result[subpath] = new Set();\n result[subpath].add(\"*\"); // Flag: needs ALL exports from dist\n }\n // Check named imports\n for (const match of content.matchAll(importRegex)) {\n const subpath = match[2] ? match[2].slice(1) : \"\";\n if (!result[subpath]) result[subpath] = new Set();\n for (const name of match[1].split(\",\")) {\n let original = name\n .trim()\n .split(/\\s+as\\s+/)[0]\n .trim();\n if (original.startsWith(\"type \")) continue;\n if (original) result[subpath].add(original);\n }\n }\n } catch {\n // skip unreadable files\n }\n }\n\n return result;\n}\n\n/**\n * Plugin to externalize @onexapis/core as window global.\n * Scans theme source to discover imports; falls back to reading dist files.\n */\nfunction createCoreGlobalPlugin(themePath: string): Plugin {\n const exportsBySubpath: Record<string, string[]> = {};\n let scanPromise: Promise<void> | null = null;\n\n return {\n name: \"core-global\",\n setup(build) {\n build.onResolve({ filter: /^@onexapis\\/core(\\/.*)?$/ }, (args) => ({\n path: args.path,\n namespace: \"core-global\",\n }));\n\n build.onLoad({ filter: /.*/, namespace: \"core-global\" }, async (args) => {\n // On first load, scan theme source files to discover all @onexapis/core imports\n // Use a shared promise to avoid race conditions with concurrent onLoad calls\n if (!scanPromise) {\n scanPromise = scanImportsFromPackage(themePath, \"@onexapis/core\")\n .then((scanned) => {\n for (const [subpath, names] of Object.entries(scanned)) {\n const cacheKey = subpath || \"__root__\";\n exportsBySubpath[cacheKey] = [...names];\n }\n })\n .catch(() => {\n // Source scan failed, will fall back to dist-file reading\n });\n }\n await scanPromise;\n\n const match = args.path.match(/^@onexapis\\/core(\\/(.+))?$/);\n const subpath = match?.[2] || \"\";\n const moduleAccess = subpath ? `['${subpath}']` : \"\";\n\n let namedExports: string[] = [];\n const cacheKey = subpath || \"__root__\";\n const cached = exportsBySubpath[cacheKey];\n const needsAllExports = cached?.includes(\"*\");\n if (cached && cached.length > 0 && !needsAllExports) {\n // Deduplicate (multiple sections may import same hook)\n namedExports = [...new Set(cached)];\n } else {\n // Fallback: read dist files when source scan found nothing for this subpath\n const distFileName = subpath ? `${subpath}.mjs` : \"index.mjs\";\n let distPath = await resolveNodeModulesFile(\n themePath,\n path.join(\"@onexapis\", \"core\", \"dist\", distFileName)\n );\n if (!distPath) {\n distPath = await resolveNodeModulesFile(\n __dirname,\n path.join(\"@onexapis\", \"core\", \"dist\", distFileName)\n );\n }\n try {\n if (!distPath) throw new Error(\"not found\");\n const distContent = await fs.readFile(distPath, \"utf-8\");\n const exportMatches = distContent.matchAll(/export\\s*\\{([^}]+)\\}/g);\n for (const m of exportMatches) {\n const names = m[1]\n .split(\",\")\n .map((n) => {\n const parts = n.trim().split(/\\s+as\\s+/);\n return (parts[1] || parts[0]).trim();\n })\n .filter((n) => n.length > 0);\n namedExports.push(...names);\n }\n // Merge with any named imports from source scan (remove \"*\" flag)\n if (cached && cached.length > 0) {\n for (const n of cached) {\n if (n !== \"*\") namedExports.push(n);\n }\n }\n namedExports = [...new Set(namedExports)];\n } catch {\n // dist file not found - fall back to default-only export\n }\n exportsBySubpath[cacheKey] = namedExports;\n }\n\n const namedExportLines =\n namedExports.length > 0\n ? `\\nexport const {\\n ${namedExports.join(\",\\n \")}\\n} = _module;\\n`\n : \"\";\n\n return {\n contents: `\nif (!globalThis.__ONEX_CORE__) {\n throw new Error('[Theme Bundle] @onexapis/core not initialized. Ensure globalThis.__ONEX_CORE__ is set before loading theme.');\n}\n\nconst _module = globalThis.__ONEX_CORE__${moduleAccess};\nif (!_module) {\n const subpath = ${subpath ? `'${subpath}'` : \"null\"};\n const modulePath = subpath ? '/' + subpath : '';\n const moduleKey = subpath ? '[\"' + subpath + '\"]' : '';\n throw new Error('[Theme Bundle] @onexapis/core' + modulePath + ' not available in globalThis.__ONEX_CORE__' + moduleKey);\n}\n\nexport default _module;\n${namedExportLines}\n `.trim(),\n loader: \"js\",\n };\n });\n },\n };\n}\n\n/**\n * Plugin to stub common theme dependencies (next/*, framer-motion, lucide-react, etc.)\n * for standalone theme compilation. Tries to resolve from node_modules first;\n * only stubs if the package is not installed.\n */\nfunction createThemeDepsStubPlugin(themePath: string): Plugin {\n return {\n name: \"theme-deps-stub\",\n setup(build) {\n // Helper: try resolve, stub if missing\n const tryResolveOrStub = (filter: RegExp, namespace: string) => {\n build.onResolve({ filter }, async (args) => {\n if (args.pluginData?.skipStub) return undefined;\n // Try resolving from theme directory\n try {\n const result = await build.resolve(args.path, {\n kind: args.kind,\n resolveDir: args.resolveDir || themePath,\n importer: args.importer,\n namespace: \"file\",\n pluginData: { skipStub: true },\n });\n if (!result.errors.length) return result;\n } catch {}\n // Try resolving via CLI's node_modules (monorepo)\n try {\n const req = createRequire(import.meta.url || __filename);\n const resolved = req.resolve(args.path);\n if (resolved) return { path: resolved, namespace: \"file\" };\n } catch {}\n return { path: args.path, namespace };\n });\n };\n\n // --- Next.js ---\n tryResolveOrStub(/^next\\//, \"next-stub\");\n build.onLoad({ filter: /.*/, namespace: \"next-stub\" }, (args) => {\n const stubs: Record<string, string> = {\n \"next/image\": `\nimport React from 'react';\nconst Image = React.forwardRef((props, ref) => {\n const { src, alt, width, height, fill, priority, sizes, quality, placeholder, blurDataURL, onLoad, onError, style, className, ...rest } = props;\n const imgSrc = typeof src === 'object' ? src.src : src;\n const fillStyle = fill ? { position: 'absolute', inset: 0, width: '100%', height: '100%', objectFit: style?.objectFit || 'cover', display: 'block' } : {};\n const mergedStyle = { ...fillStyle, ...style };\n return React.createElement('img', {\n ref, src: imgSrc, alt,\n width: fill ? undefined : width, height: fill ? undefined : height,\n loading: priority ? 'eager' : 'lazy',\n style: Object.keys(mergedStyle).length > 0 ? mergedStyle : undefined,\n className, onLoad, onError, ...rest,\n });\n});\nexport default Image;\n `,\n \"next/link\": `\nimport React from 'react';\nconst Link = ({ href, children, ...rest }) => React.createElement('a', { href, ...rest }, children);\nexport default Link;\n `,\n \"next/navigation\": `\nexport function useRouter() { return { push(u){window.location.href=u}, replace(u){window.location.href=u}, back(){window.history.back()}, forward(){window.history.forward()}, refresh(){window.location.reload()}, prefetch(){} }; }\nexport function usePathname() { return window.location.pathname; }\nexport function useSearchParams() { return new URLSearchParams(window.location.search); }\nexport function useParams() { return {}; }\nexport function redirect(url) { window.location.href = url; }\nexport function notFound() { throw new Error('Not Found'); }\n `,\n \"next/headers\": `\nexport function cookies() { return { get(){}, getAll(){ return []; }, set(){}, delete(){}, has(){ return false; } }; }\nexport function headers() { return new Headers(); }\n `,\n };\n return {\n contents: stubs[args.path] || \"export default {};\",\n loader: \"jsx\",\n resolveDir: themePath,\n };\n });\n\n // --- lucide-react ---\n // Collect all imported icon names from the theme source at resolve time,\n // then generate a stub that exports every one of them.\n const lucideImports = new Set<string>();\n let lucideThemeScanned = false;\n tryResolveOrStub(/^lucide-react/, \"lucide-stub\");\n build.onLoad({ filter: /.*/, namespace: \"lucide-stub\" }, async () => {\n // Scan theme source files for lucide-react imports to discover all icon names\n if (!lucideThemeScanned) {\n lucideThemeScanned = true;\n try {\n const scanned = await scanImportsFromPackage(\n themePath,\n \"lucide-react\"\n );\n for (const names of Object.values(scanned)) {\n for (const name of names) lucideImports.add(name);\n }\n } catch {}\n }\n const iconNames = [...lucideImports];\n const exports = iconNames.map((n) => `icon as ${n}`).join(\", \");\n return {\n contents: `\nconst icon = (props) => null;\nexport { ${exports} };\nexport default new Proxy({}, { get: (_, name) => name === '__esModule' ? true : icon });\n `.trim(),\n loader: \"jsx\",\n };\n });\n\n // --- framer-motion ---\n tryResolveOrStub(/^framer-motion/, \"motion-stub\");\n build.onLoad({ filter: /.*/, namespace: \"motion-stub\" }, () => ({\n contents: `\nimport React from 'react';\nconst handler = { get: (_, name) => {\n if (name === '__esModule') return true;\n return React.forwardRef((props, ref) => React.createElement(name, { ...props, ref }));\n}};\nexport const motion = new Proxy({}, handler);\nexport const AnimatePresence = ({ children }) => children || null;\nexport function useInView() { return true; }\nexport default { motion, AnimatePresence, useInView };\n `.trim(),\n loader: \"jsx\",\n resolveDir: themePath,\n }));\n\n // --- sonner ---\n tryResolveOrStub(/^sonner$/, \"sonner-stub\");\n build.onLoad({ filter: /.*/, namespace: \"sonner-stub\" }, () => ({\n contents: `\nexport const toast = new Proxy(() => {}, { get: () => () => {} });\nexport const Toaster = () => null;\nexport default { toast, Toaster };\n `.trim(),\n loader: \"jsx\",\n }));\n\n // --- react-hook-form ---\n tryResolveOrStub(/^react-hook-form$/, \"rhf-stub\");\n build.onLoad({ filter: /.*/, namespace: \"rhf-stub\" }, () => ({\n contents: `\nexport function useForm() {\n return {\n register: () => ({}),\n handleSubmit: (fn) => (e) => { e?.preventDefault?.(); fn({}); },\n formState: { errors: {}, isSubmitting: false, isValid: true },\n watch: () => undefined,\n setValue: () => {},\n reset: () => {},\n control: {},\n };\n}\nexport function useController() { return { field: {}, fieldState: {} }; }\nexport function useFormContext() { return useForm(); }\n `.trim(),\n loader: \"js\",\n }));\n\n // --- @hookform/resolvers ---\n tryResolveOrStub(/^@hookform\\/resolvers/, \"hookform-resolvers-stub\");\n build.onLoad(\n { filter: /.*/, namespace: \"hookform-resolvers-stub\" },\n () => ({\n contents: `export function zodResolver() { return () => ({ values: {}, errors: {} }); }`,\n loader: \"js\",\n })\n );\n\n // --- next-intl ---\n tryResolveOrStub(/^next-intl$/, \"next-intl-stub\");\n build.onLoad({ filter: /.*/, namespace: \"next-intl-stub\" }, () => ({\n contents: `\nexport function useTranslations(ns) {\n return (key) => ns ? ns + '.' + key : key;\n}\nexport function useLocale() { return 'en'; }\nexport function useMessages() { return {}; }\n `.trim(),\n loader: \"js\",\n }));\n\n // --- zod (often used with hookform) ---\n tryResolveOrStub(/^zod$/, \"zod-stub\");\n build.onLoad({ filter: /.*/, namespace: \"zod-stub\" }, () => ({\n contents: `\nconst schema = () => ({ parse: (v) => v, safeParse: (v) => ({ success: true, data: v }), optional: schema, min: schema, max: schema, email: schema, url: schema, regex: schema, refine: schema, transform: schema });\nexport const z = { string: schema, number: schema, boolean: schema, object: (s) => ({ ...schema(), shape: s }), array: schema, enum: schema, union: schema, literal: schema, infer: undefined };\nexport default z;\n `.trim(),\n loader: \"js\",\n }));\n },\n };\n}\n\n/**\n * Generate theme-data.json from theme source files using jiti.\n * This provides a server-side fallback for themes without API data.\n */\nasync function generateThemeData(\n themePath: string,\n outputDir: string,\n themeId: string\n): Promise<void> {\n const { createJiti } = await import(\"jiti\");\n const jiti = createJiti(import.meta.url);\n\n let themeConfig: any = null;\n let layoutConfig: any = null;\n const pages: Record<string, any> = {};\n\n // Load theme config\n for (const ext of [\".ts\", \".js\"]) {\n try {\n const mod = await jiti.import(path.join(themePath, `theme.config${ext}`));\n themeConfig = (mod as any).default || mod;\n break;\n } catch {}\n }\n\n // Load layout\n for (const ext of [\".ts\", \".js\"]) {\n try {\n const mod = await jiti.import(path.join(themePath, `theme.layout${ext}`));\n layoutConfig = (mod as any).default || mod;\n break;\n } catch {}\n }\n\n // Load schemas (to merge defaults into page sections)\n const schemas: Record<string, any> = {};\n const sectionsDir = path.join(themePath, \"sections\");\n try {\n const sectionDirs = await fs.readdir(sectionsDir);\n for (const dir of sectionDirs) {\n const schemaFile = path.join(sectionsDir, dir, `${dir}.schema.ts`);\n try {\n await fs.access(schemaFile);\n const mod = await jiti.import(schemaFile);\n // Find the schema export (ends with \"Schema\")\n for (const [key, value] of Object.entries(mod as Record<string, any>)) {\n if (\n key.endsWith(\"Schema\") &&\n value &&\n typeof value === \"object\" &&\n (value as any).type\n ) {\n schemas[(value as any).type] = value;\n }\n }\n } catch {}\n }\n } catch {}\n\n // Load pages\n const pagesDir = path.join(themePath, \"pages\");\n try {\n const files = await fs.readdir(pagesDir);\n for (const file of files) {\n if (!file.match(/\\.(ts|js)$/)) continue;\n const name = file.replace(/\\.(ts|js)$/, \"\");\n try {\n const mod = await jiti.import(path.join(pagesDir, file));\n const config = (mod as any).default || mod;\n\n // Merge schema defaults (components/blocks) into sections\n const sections = (config.sections || []).map((section: any) => {\n const schema = schemas[section.type];\n if (!schema?.defaults) return section;\n return {\n ...section,\n components:\n section.components?.length > 0\n ? section.components\n : schema.defaults.components || [],\n blocks:\n section.blocks?.length > 0\n ? section.blocks\n : schema.defaults.blocks || [],\n settings: {\n ...(schema.defaults.settings || {}),\n ...section.settings,\n },\n };\n });\n\n pages[name] = {\n id: name,\n name: config.title || name,\n path: config.path || `/${name}`,\n config: { id: name, ...config, sections },\n sections,\n seo: config.seo,\n };\n } catch {}\n }\n } catch {}\n\n await fs.writeFile(\n path.join(outputDir, \"theme-data.json\"),\n JSON.stringify(\n {\n themeId,\n theme: {\n id: themeId,\n name: themeConfig?.name || themeId,\n config: themeConfig,\n layout: {\n header: layoutConfig?.headerSections || [],\n footer: layoutConfig?.footerSections || [],\n },\n pages: Object.keys(pages),\n },\n pages,\n },\n null,\n 2\n )\n );\n logger.info(`Generated theme-data.json (${Object.keys(pages).length} pages)`);\n}\n\n/**\n * Content-hash the bundle entry point for cache busting.\n * Renames bundle-entry.js -> bundle-entry-{hash}.js\n */\nasync function contentHashEntry(outputDir: string): Promise<void> {\n const entryPath = path.join(outputDir, \"bundle-entry.js\");\n const mapPath = path.join(outputDir, \"bundle-entry.js.map\");\n\n // Read the entry file BEFORE cleaning old hashed files.\n // bundle-entry.js may be a symlink pointing at the previous hashed file —\n // deleting that target first would leave a broken symlink and make the\n // subsequent readFile fail with ENOENT.\n let entryContent: string;\n try {\n entryContent = await fs.readFile(entryPath, \"utf-8\");\n } catch {\n // bundle-entry.js not found, try index.js\n const indexPath = path.join(outputDir, \"index.js\");\n try {\n entryContent = await fs.readFile(indexPath, \"utf-8\");\n } catch {\n logger.warning(\"No entry file found in output, skipping content hash\");\n return;\n }\n // For index.ts entry, rename index.js -> bundle-entry-{hash}.js\n const hash = crypto\n .createHash(\"sha256\")\n .update(entryContent)\n .digest(\"hex\")\n .slice(0, 8);\n\n const hashedName = `bundle-entry-${hash}.js`;\n const indexMapPath = path.join(outputDir, \"index.js.map\");\n const hashedMapName = `bundle-entry-${hash}.js.map`;\n\n entryContent = entryContent.replace(\n /\\/\\/# sourceMappingURL=index\\.js\\.map/,\n `//# sourceMappingURL=${hashedMapName}`\n );\n\n // Clean old hashed files now that we have the content safely in memory\n const oldFiles = await glob(\"bundle-entry-*.js*\", { cwd: outputDir });\n for (const f of oldFiles) {\n await fs.unlink(path.join(outputDir, f));\n }\n\n await fs.writeFile(path.join(outputDir, hashedName), entryContent);\n await fs.unlink(indexPath);\n // Remove existing file/symlink then write a real copy so archiver\n // includes actual JS content in the zip (symlinks store only the target path).\n try {\n await fs.unlink(entryPath);\n } catch {\n /* may not exist */\n }\n await fs.writeFile(entryPath, entryContent);\n\n try {\n await fs.access(indexMapPath);\n await fs.rename(indexMapPath, path.join(outputDir, hashedMapName));\n } catch {\n // No source map\n }\n\n logger.info(`Entry hashed: ${hashedName}`);\n return;\n }\n\n const hash = crypto\n .createHash(\"sha256\")\n .update(entryContent)\n .digest(\"hex\")\n .slice(0, 8);\n\n const hashedName = `bundle-entry-${hash}.js`;\n const hashedMapName = `bundle-entry-${hash}.js.map`;\n\n entryContent = entryContent.replace(\n /\\/\\/# sourceMappingURL=bundle-entry\\.js\\.map/,\n `//# sourceMappingURL=${hashedMapName}`\n );\n\n // Clean old hashed files now that content is safely in memory\n const oldFiles = await glob(\"bundle-entry-*.js*\", { cwd: outputDir });\n for (const f of oldFiles) {\n await fs.unlink(path.join(outputDir, f));\n }\n\n await fs.writeFile(path.join(outputDir, hashedName), entryContent);\n // Remove existing file/symlink then write a real copy so archiver\n // includes actual JS content in the zip (symlinks store only the target path).\n try {\n await fs.unlink(entryPath);\n } catch {\n /* may not exist */\n }\n await fs.writeFile(entryPath, entryContent);\n\n try {\n await fs.access(mapPath);\n await fs.rename(mapPath, path.join(outputDir, hashedMapName));\n } catch {\n // No source map\n }\n\n logger.info(`Entry hashed: ${hashedName}`);\n}\n\n/**\n * Extract dataRequirements from section schema files using jiti.\n * Same pattern as generateThemeData() — jiti handles TypeScript natively.\n * Returns a map of sectionType → dataRequirements object.\n */\nasync function extractDataRequirements(\n themePath: string\n): Promise<Record<string, Record<string, boolean>>> {\n const { createJiti } = await import(\"jiti\");\n const jiti = createJiti(import.meta.url);\n\n const schemaFiles = await glob(\"sections/**/*.schema.ts\", { cwd: themePath });\n const requirements: Record<string, Record<string, boolean>> = {};\n\n for (const file of schemaFiles) {\n try {\n const mod = await jiti.import(path.join(themePath, file));\n const exports = mod as Record<string, any>;\n\n // Find schema exports: look for objects with .type (string) + .dataRequirements\n for (const value of Object.values(exports)) {\n if (\n value &&\n typeof value === \"object\" &&\n typeof value.type === \"string\" &&\n value.dataRequirements &&\n typeof value.dataRequirements === \"object\"\n ) {\n requirements[value.type] = value.dataRequirements;\n }\n }\n } catch (err) {\n logger.warning(\n `Could not load schema ${file}: ${err instanceof Error ? err.message : String(err)}`\n );\n }\n }\n\n return requirements;\n}\n\n/**\n * Generate manifest.json with theme metadata.\n */\nexport async function generateManifest(\n themeName: string,\n themePath: string,\n outputDir: string\n): Promise<void> {\n // Read version and themeId from package.json\n let version = \"1.0.0\";\n let themeId = themeName;\n try {\n const pkgContent = await fs.readFile(\n path.join(themePath, \"package.json\"),\n \"utf-8\"\n );\n const pkg = JSON.parse(pkgContent);\n version = pkg.version || version;\n // Derive themeId from package name: \"@onex-themes/simple\" → \"simple\"\n if (pkg.name) {\n themeId = pkg.name.replace(/^@onex-themes\\//, \"\");\n }\n } catch {\n // Use defaults\n }\n\n const [sectionFiles, blockFiles, schemaFiles] = await Promise.all([\n glob(\"sections/**/index.ts\", { cwd: themePath }),\n glob(\"blocks/**/index.ts\", { cwd: themePath }),\n glob(\"**/*.schema.ts\", { cwd: themePath }),\n ]);\n\n // Extract dataRequirements declared in section schemas\n const dataRequirements = await extractDataRequirements(themePath);\n\n let hasThemeConfig = false;\n try {\n await fs.access(path.join(themePath, \"theme.config.ts\"));\n hasThemeConfig = true;\n } catch {\n // No theme config\n }\n\n const allFiles = await glob(\"**/*\", { cwd: outputDir, nodir: true });\n const jsFiles = allFiles.filter((f) => f.endsWith(\".js\"));\n const cssFiles = allFiles.filter((f) => f.endsWith(\".css\"));\n\n const entryFile =\n jsFiles.find((f) => f.includes(\"bundle-entry\")) || \"bundle-entry.js\";\n\n const manifest = {\n themeId,\n version,\n name: themeId.charAt(0).toUpperCase() + themeId.slice(1),\n compiledAt: new Date().toISOString(),\n format: \"esm\",\n platform: \"browser\",\n target: \"es2020\",\n\n counts: {\n sections: sectionFiles.length,\n blocks: blockFiles.length,\n schemas: schemaFiles.length,\n },\n\n output: {\n entry: entryFile,\n chunks: jsFiles.filter((f) => f !== entryFile && !f.endsWith(\".map\")),\n assets: allFiles.filter((f) =>\n [\".png\", \".jpg\", \".jpeg\", \".svg\", \".gif\", \".webp\"].some((ext) =>\n f.endsWith(ext)\n )\n ),\n stylesheets: cssFiles,\n },\n\n external: [\"react\", \"react-dom\", \"@onexapis/core\"],\n\n source: {\n sections: sectionFiles,\n blocks: blockFiles,\n schemas: schemaFiles,\n hasThemeConfig,\n },\n\n // Section data requirements for server-side prefetching (keyed by section type)\n dataRequirements,\n };\n\n await fs.writeFile(\n path.join(outputDir, \"manifest.json\"),\n JSON.stringify(manifest, null, 2)\n );\n}\n\n/**\n * Compile a standalone theme using esbuild.\n * Produces ESM bundles with React/core externalized to globals.\n *\n * @returns true if build succeeded\n */\nexport async function compileStandaloneTheme(\n themePath: string,\n themeName: string\n): Promise<boolean> {\n const outputDir = path.join(themePath, \"dist\");\n\n // Detect entry point: bundle-entry.ts preferred, fallback to index.ts\n const bundleEntry = path.join(themePath, \"bundle-entry.ts\");\n const indexEntry = path.join(themePath, \"index.ts\");\n\n let entryPoint = indexEntry;\n try {\n await fs.access(bundleEntry);\n entryPoint = bundleEntry;\n } catch {\n // Use index.ts\n }\n\n // Write process shim to a temp file (esbuild inject requires a file path)\n const shimPath = path.join(outputDir, \".process-shim.js\");\n await fs.mkdir(outputDir, { recursive: true });\n await fs.writeFile(shimPath, PROCESS_SHIM);\n\n const buildOptions: esbuild.BuildOptions = {\n entryPoints: [entryPoint],\n bundle: true,\n platform: \"browser\",\n format: \"esm\",\n outdir: outputDir,\n splitting: false,\n chunkNames: \"[name]-[hash]\",\n banner: {\n js: '\"use client\";',\n },\n\n plugins: [\n reactGlobalPlugin,\n reactQueryGlobalPlugin,\n createCoreGlobalPlugin(themePath),\n createThemeDepsStubPlugin(themePath),\n ],\n\n external: [],\n\n alias: {\n events: \"events/\",\n buffer: \"buffer/\",\n },\n\n inject: [shimPath],\n\n define: {\n \"process.env.NODE_ENV\": JSON.stringify(\"production\"),\n global: \"globalThis\",\n },\n\n minify: true,\n sourcemap: true,\n logLevel: \"warning\",\n target: \"es2020\",\n jsx: \"automatic\",\n jsxImportSource: \"react\",\n\n loader: {\n \".tsx\": \"tsx\",\n \".ts\": \"ts\",\n \".jpg\": \"file\",\n \".jpeg\": \"file\",\n \".png\": \"file\",\n \".gif\": \"file\",\n \".svg\": \"file\",\n \".webp\": \"file\",\n },\n\n assetNames: \"assets/[name]-[hash]\",\n publicPath: \"./\",\n metafile: true,\n };\n\n try {\n const result = await esbuild.build(buildOptions);\n\n // Clean up temp shim file\n try {\n await fs.unlink(shimPath);\n } catch {\n // Ignore\n }\n\n // Content-hash the entry point\n await contentHashEntry(outputDir);\n\n // Copy static assets (logos, banners, etc.) into dist/theme-assets/\n // so they are included in the published bundle zip.\n // Theme settings reference these as /assets/<themeId>/path.\n const themeAssetsDir = path.join(themePath, \"assets\");\n const distThemeAssets = path.join(outputDir, \"theme-assets\");\n try {\n await fs.access(themeAssetsDir);\n await fs.cp(themeAssetsDir, distThemeAssets, { recursive: true });\n logger.info(\"Copied static assets to dist/theme-assets/\");\n } catch {\n // No assets directory — skip\n }\n\n // Generate manifest\n await generateManifest(themeName, themePath, outputDir);\n\n // Generate theme-data.json for server-side fallback\n await generateThemeData(themePath, outputDir, themeName);\n\n // Generate bundle.css with all Tailwind classes used by the theme\n // This is injected into the editor preview iframe so it matches the storefront\n await generateThemeCSS(themePath, outputDir);\n\n // Log bundle analysis\n if (result.metafile) {\n const outputs = result.metafile.outputs;\n let totalSize = 0;\n for (const output of Object.values(outputs)) {\n totalSize += output.bytes;\n }\n const totalKB = (totalSize / 1024).toFixed(2);\n logger.info(`Bundle size: ${totalKB} KB`);\n }\n\n return true;\n } catch (error) {\n // Clean up temp shim file on failure\n try {\n await fs.unlink(shimPath);\n } catch {\n // Ignore\n }\n\n logger.error(`esbuild compilation failed: ${error}`);\n return false;\n }\n}\n\n/**\n * Compile standalone theme in dev mode with incremental rebuilds.\n * Differences from production compileStandaloneTheme:\n * - Uses esbuild.context() for incremental rebuilds\n * - No minification, no content-hash (stable bundle-entry.js filename)\n * - Returns the build context for subsequent rebuilds\n */\nexport async function compileStandaloneThemeDev(\n themePath: string,\n themeName: string\n): Promise<{ context: esbuild.BuildContext; outputDir: string }> {\n const outputDir = path.join(themePath, \"dist\");\n\n // Detect entry point (same as production build)\n const bundleEntry = path.join(themePath, \"bundle-entry.ts\");\n const indexEntry = path.join(themePath, \"index.ts\");\n let entryPoint = indexEntry;\n try {\n await fs.access(bundleEntry);\n entryPoint = bundleEntry;\n } catch {\n // Use index.ts\n }\n\n // Write process shim\n const shimPath = path.join(outputDir, \".process-shim.js\");\n await fs.mkdir(outputDir, { recursive: true });\n await fs.writeFile(shimPath, PROCESS_SHIM);\n\n const buildOptions: esbuild.BuildOptions = {\n entryPoints: [entryPoint],\n bundle: true,\n platform: \"browser\",\n format: \"esm\",\n outdir: outputDir,\n splitting: false,\n banner: {\n js: '\"use client\";',\n },\n\n plugins: [\n reactGlobalPlugin,\n reactQueryGlobalPlugin,\n createCoreGlobalPlugin(themePath),\n createThemeDepsStubPlugin(themePath),\n ],\n external: [],\n\n alias: {\n events: \"events/\",\n buffer: \"buffer/\",\n },\n\n inject: [shimPath],\n\n define: {\n \"process.env.NODE_ENV\": JSON.stringify(\"development\"),\n global: \"globalThis\",\n },\n\n minify: false,\n sourcemap: true,\n logLevel: \"warning\",\n target: \"es2020\",\n jsx: \"automatic\",\n jsxImportSource: \"react\",\n\n loader: {\n \".tsx\": \"tsx\",\n \".ts\": \"ts\",\n \".jpg\": \"file\",\n \".jpeg\": \"file\",\n \".png\": \"file\",\n \".gif\": \"file\",\n \".svg\": \"file\",\n \".webp\": \"file\",\n },\n\n assetNames: \"assets/[name]-[hash]\",\n publicPath: \"./\",\n metafile: true,\n };\n\n const context = await esbuild.context(buildOptions);\n\n // Initial build\n await context.rebuild();\n\n // NOTE: Do NOT delete shimPath here — incremental rebuilds need it.\n // It will be cleaned up when context.dispose() is called.\n\n // Generate manifest (no content-hash step for dev)\n await generateManifest(themeName, themePath, outputDir);\n\n // Generate theme-data.json for server-side fallback\n await generateThemeData(themePath, outputDir, themeName);\n\n return { context, outputDir };\n}\n\n/**\n * Compile the preview runtime (React + @onexapis/core bundled in).\n * One-time compilation on dev server startup.\n * React and core are bundled INTO the output (not externalized) because\n * the preview runtime IS the host that provides these globals.\n */\nexport async function compilePreviewRuntime(\n themePath: string\n): Promise<string> {\n const outputDir = path.join(themePath, \"dist\");\n await fs.mkdir(outputDir, { recursive: true });\n\n const outputPath = path.join(outputDir, \"preview-runtime.js\");\n\n // Resolve the preview-app.tsx source from CLI package\n // In dev: src/preview/preview-app.tsx\n // In dist: preview/preview-app.tsx (copied by tsup config)\n const locations = [\n path.join(__dirname, \"..\", \"preview\", \"preview-app.tsx\"),\n path.join(__dirname, \"preview\", \"preview-app.tsx\"),\n path.join(__dirname, \"..\", \"..\", \"src\", \"preview\", \"preview-app.tsx\"),\n ];\n\n let previewEntryPath: string | null = null;\n for (const loc of locations) {\n try {\n await fs.access(loc);\n previewEntryPath = loc;\n break;\n } catch {\n // Try next location\n }\n }\n\n if (!previewEntryPath) {\n throw new Error(\n `Preview app source not found. Searched:\\n${locations.join(\"\\n\")}`\n );\n }\n\n // Plugin to stub out server-only packages that leak from @onexapis/core chunks\n const serverStubPlugin: Plugin = {\n name: \"server-stub\",\n setup(build) {\n // Stub server-only marker package\n build.onResolve({ filter: /^server-only$/ }, () => ({\n path: \"server-only\",\n namespace: \"server-stub\",\n }));\n build.onLoad({ filter: /.*/, namespace: \"server-stub\" }, () => ({\n contents: \"// server-only stub for browser\",\n loader: \"js\",\n }));\n\n // Stub Node.js built-ins that leak from server chunks\n const nodeBuiltins = [\n \"fs\",\n \"fs/promises\",\n \"path\",\n \"os\",\n \"crypto\",\n \"stream\",\n \"url\",\n \"http\",\n \"https\",\n \"net\",\n \"tls\",\n \"child_process\",\n \"util\",\n \"events\",\n \"buffer\",\n \"querystring\",\n \"zlib\",\n ];\n for (const mod of nodeBuiltins) {\n build.onResolve(\n { filter: new RegExp(`^${mod.replace(\"/\", \"\\\\/\")}$`) },\n () => ({\n path: mod,\n namespace: \"node-stub\",\n })\n );\n }\n build.onLoad({ filter: /.*/, namespace: \"node-stub\" }, (args) => {\n const stubs: Record<string, string> = {\n events:\n \"export class EventEmitter { on(){return this} off(){return this} emit(){return false} addListener(){return this} removeListener(){return this} } export default { EventEmitter };\",\n path: \"export function join(){return ''} export function resolve(){return ''} export function dirname(){return ''} export function basename(){return ''} export function extname(){return ''} export default {};\",\n fs: \"export const promises = {}; export function readFileSync(){return ''} export function existsSync(){return false} export default {};\",\n };\n return {\n contents: stubs[args.path] || \"export default {};\",\n loader: \"js\",\n };\n });\n\n // Stub optional UI dependencies that may not be installed in standalone themes.\n // First try to resolve normally; only stub if the package is missing.\n const lucideIconNames = new Set<string>();\n let lucideScanned = false;\n build.onResolve({ filter: /^lucide-react/ }, async (args) => {\n if (args.pluginData?.skipStub) return undefined;\n try {\n const result = await build.resolve(args.path, {\n kind: args.kind,\n resolveDir: args.resolveDir,\n importer: args.importer,\n namespace: \"file\",\n pluginData: { skipStub: true },\n });\n if (!result.errors.length) return result;\n } catch {}\n return { path: args.path, namespace: \"lucide-stub\" };\n });\n build.onLoad({ filter: /.*/, namespace: \"lucide-stub\" }, async () => {\n // Dynamically scan @onexapis/core source for lucide-react imports\n if (!lucideScanned) {\n lucideScanned = true;\n // Try multiple locations to find @onexapis/core source\n const coreSrcCandidates = [\n path.join(themePath, \"node_modules\", \"@onexapis\", \"core\", \"src\"),\n path.join(themePath, \"..\", \"..\", \"packages\", \"core\", \"src\"), // monorepo sibling\n path.join(\n __dirname,\n \"..\",\n \"..\",\n \"..\",\n \"..\",\n \"packages\",\n \"core\",\n \"src\"\n ), // from CLI src\n ];\n let coreSourceDir: string | null = null;\n for (const candidate of coreSrcCandidates) {\n try {\n await fs.access(candidate);\n coreSourceDir = candidate;\n break;\n } catch {}\n }\n if (coreSourceDir) {\n try {\n const scanned = await scanImportsFromPackage(\n coreSourceDir,\n \"lucide-react\"\n );\n for (const names of Object.values(scanned)) {\n for (const name of names) lucideIconNames.add(name);\n }\n } catch {}\n } else {\n // No source dir found (e.g. global install) — scan core dist .mjs files\n const coreDistCandidates: string[] = [\n path.join(themePath, \"node_modules\", \"@onexapis\", \"core\", \"dist\"),\n ];\n const resolvedDist = await resolveNodeModulesFile(\n __dirname,\n path.join(\"@onexapis\", \"core\", \"dist\")\n );\n if (resolvedDist) coreDistCandidates.push(resolvedDist);\n\n for (const candidate of coreDistCandidates) {\n try {\n await fs.access(candidate);\n const mjsFiles = await glob(\"*.mjs\", { cwd: candidate });\n const importRegex =\n /import\\s*\\{([^}]+)\\}\\s*from\\s*[\"']lucide-react[\"']/g;\n for (const file of mjsFiles) {\n const content = await fs.readFile(\n path.join(candidate, file),\n \"utf-8\"\n );\n for (const match of content.matchAll(importRegex)) {\n for (const name of match[1].split(\",\")) {\n const original = name\n .trim()\n .split(/\\s+as\\s+/)[0]\n .trim();\n if (original && !original.startsWith(\"type \")) {\n lucideIconNames.add(original);\n }\n }\n }\n }\n break; // found and scanned dist dir\n } catch {}\n }\n }\n // Also scan theme source files\n try {\n const scanned = await scanImportsFromPackage(\n themePath,\n \"lucide-react\"\n );\n for (const names of Object.values(scanned)) {\n for (const name of names) lucideIconNames.add(name);\n }\n } catch {}\n }\n\n const iconExports = [...lucideIconNames]\n .map((n) => `icon as ${n}`)\n .join(\", \");\n return {\n contents: `\nconst icon = (props) => null;\nexport { ${iconExports} };\nexport default new Proxy({}, { get: (_, name) => name === '__esModule' ? true : icon });\n `.trim(),\n loader: \"jsx\",\n };\n });\n\n build.onResolve({ filter: /^framer-motion/ }, async (args) => {\n if (args.pluginData?.skipStub) return undefined;\n // Try resolving from theme directory first\n try {\n const result = await build.resolve(args.path, {\n kind: args.kind,\n resolveDir: args.resolveDir,\n importer: args.importer,\n namespace: \"file\",\n pluginData: { skipStub: true },\n });\n if (!result.errors.length) return result;\n } catch {}\n // Try resolving via createRequire (works in bundled CLI / monorepo)\n try {\n const req = createRequire(import.meta.url || __filename);\n const cjsPath = req.resolve(\"framer-motion\");\n // Navigate to package root and use ESM entry for browser bundling\n const pkgDir = cjsPath.replace(/[/\\\\]dist[/\\\\].*$/, \"\");\n const esmEntry = path.join(pkgDir, \"dist\", \"es\", \"index.mjs\");\n const { existsSync } = await import(\"fs\");\n if (existsSync(esmEntry)) {\n return { path: esmEntry, namespace: \"file\" };\n }\n // Fallback: use the resolved path as-is\n return { path: cjsPath, namespace: \"file\" };\n } catch {}\n return { path: args.path, namespace: \"motion-stub\" };\n });\n build.onLoad({ filter: /.*/, namespace: \"motion-stub\" }, () => ({\n contents: `\nimport React from 'react';\nconst MotionComponent = React.forwardRef((props, ref) => {\n const { initial, animate, exit, variants, transition, whileInView, whileHover, whileTap, viewport, onAnimationComplete, layout, layoutId, style, className, ...rest } = props;\n return React.createElement(rest.as || 'div', { ref, style, className, ...rest }, rest.children);\n});\nconst handler = { get: (_, name) => {\n if (name === '__esModule') return true;\n if (name === 'create') return () => new Proxy({}, handler);\n return MotionComponent;\n}};\nexport const motion = new Proxy({}, handler);\nexport const AnimatePresence = (props) => props.children || null;\nexport const useInView = () => true;\nexport const useAnimation = () => ({ start: () => {}, stop: () => {}, set: () => {} });\nexport const useMotionValue = (v) => ({ get: () => v, set: () => {}, onChange: () => () => {} });\nexport const useTransform = (v) => v;\nexport const useScroll = () => ({ scrollY: { get: () => 0, onChange: () => () => {} }, scrollYProgress: { get: () => 0, onChange: () => () => {} } });\nexport default { motion, AnimatePresence };\n `.trim(),\n loader: \"jsx\",\n }));\n\n // Stub Next.js modules (not installed in standalone themes)\n build.onResolve({ filter: /^next\\// }, async (args) => {\n if (args.pluginData?.skipStub) return undefined;\n try {\n const result = await build.resolve(args.path, {\n kind: args.kind,\n resolveDir: args.resolveDir,\n importer: args.importer,\n namespace: \"file\",\n pluginData: { skipStub: true },\n });\n if (!result.errors.length) return result;\n } catch {}\n return { path: args.path, namespace: \"next-stub\" };\n });\n build.onLoad({ filter: /.*/, namespace: \"next-stub\" }, (args) => {\n const stubs: Record<string, string> = {\n \"next/image\": `\nimport React from 'react';\nconst Image = React.forwardRef((props, ref) => {\n const { src, alt, width, height, fill, priority, sizes, quality, placeholder, blurDataURL, onLoad, onError, style, className, ...rest } = props;\n const imgSrc = typeof src === 'object' ? src.src : src;\n const fillStyle = fill ? { position: 'absolute', inset: 0, width: '100%', height: '100%', objectFit: style?.objectFit || 'cover', display: 'block' } : {};\n const mergedStyle = { ...fillStyle, ...style };\n return React.createElement('img', {\n ref,\n src: imgSrc,\n alt,\n width: fill ? undefined : width,\n height: fill ? undefined : height,\n loading: priority ? 'eager' : 'lazy',\n style: Object.keys(mergedStyle).length > 0 ? mergedStyle : undefined,\n className,\n onLoad,\n onError,\n ...rest,\n });\n});\nexport default Image;\n `,\n \"next/link\": `\nconst Link = ({ href, children, ...rest }) => React.createElement('a', { href, ...rest }, children);\nimport React from 'react';\nexport default Link;\n `,\n \"next/navigation\": `\nexport function useRouter() { return { push(u){window.location.href=u}, replace(u){window.location.href=u}, back(){window.history.back()}, forward(){window.history.forward()}, refresh(){window.location.reload()}, prefetch(){} }; }\nexport function usePathname() { return window.location.pathname; }\nexport function useSearchParams() { return new URLSearchParams(window.location.search); }\nexport function useParams() { return {}; }\nexport function redirect(url) { window.location.href = url; }\nexport function notFound() { throw new Error('Not Found'); }\n `,\n \"next/headers\": `\nexport function cookies() { return { get(){}, getAll(){ return []; }, set(){}, delete(){}, has(){ return false; } }; }\nexport function headers() { return new Headers(); }\n `,\n };\n return {\n contents: stubs[args.path] || \"export default {};\",\n loader: \"jsx\",\n resolveDir: themePath,\n };\n });\n },\n };\n\n // Write process shim for preview runtime (CJS code paths may reference `process`)\n const shimPath = path.join(outputDir, \".process-shim-preview.js\");\n await fs.writeFile(shimPath, PROCESS_SHIM);\n\n await esbuild.build({\n entryPoints: [previewEntryPath],\n bundle: true,\n platform: \"browser\",\n format: \"esm\",\n outfile: outputPath,\n // Bundle React + core INTO the output (NOT externalized)\n external: [],\n plugins: [serverStubPlugin],\n inject: [shimPath],\n minify: false,\n sourcemap: true,\n target: \"es2020\",\n jsx: \"automatic\",\n jsxImportSource: \"react\",\n define: {\n \"process.env.NODE_ENV\": JSON.stringify(\"development\"),\n \"process.env.NEXT_PUBLIC_API_URL\": JSON.stringify(\n process.env.NEXT_PUBLIC_API_URL || \"\"\n ),\n \"process.env.NEXT_PUBLIC_COMPANY_ID\": JSON.stringify(\n process.env.NEXT_PUBLIC_COMPANY_ID || \"\"\n ),\n global: \"globalThis\",\n },\n loader: { \".tsx\": \"tsx\", \".ts\": \"ts\" },\n // Force CJS resolution to avoid sideEffects:false dropping ESM chunk imports\n conditions: [\"require\", \"default\"],\n mainFields: [\"main\"],\n logOverride: {\n \"ignored-bare-import\": \"silent\",\n },\n });\n\n // Clean up temp shim file\n try {\n await fs.unlink(shimPath);\n } catch {\n // Ignore\n }\n\n return outputPath;\n}\n","import http from \"node:http\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { WebSocketServer, WebSocket } from \"ws\";\n\ninterface DevServerOptions {\n port: number;\n distDir: string;\n previewRuntimePath: string;\n themeName: string;\n themePath: string;\n}\n\nconst MIME_TYPES: Record<string, string> = {\n \".js\": \"application/javascript\",\n \".mjs\": \"application/javascript\",\n \".css\": \"text/css\",\n \".json\": \"application/json\",\n \".html\": \"text/html\",\n \".svg\": \"image/svg+xml\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".webp\": \"image/webp\",\n \".gif\": \"image/gif\",\n \".map\": \"application/json\",\n};\n\nexport function createDevServer(options: DevServerOptions) {\n const clients = new Set<WebSocket>();\n const themeDataPath = path.join(options.distDir, \"theme-data.json\");\n\n const server = http.createServer((req, res) => {\n // CORS + no-cache headers on ALL responses\n res.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n res.setHeader(\"Access-Control-Allow-Methods\", \"GET, OPTIONS\");\n res.setHeader(\"Cache-Control\", \"no-store, no-cache, must-revalidate\");\n\n if (req.method === \"OPTIONS\") {\n res.writeHead(200);\n res.end();\n return;\n }\n\n const url = new URL(req.url || \"/\", `http://localhost:${options.port}`);\n const pathname = url.pathname;\n\n // Route: GET / → preview HTML page\n if (pathname === \"/\" || pathname === \"/index.html\") {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n generatePreviewHTML(options.themeName, options.port, themeDataPath)\n );\n return;\n }\n\n // Route: GET /preview-runtime.js → compiled preview runtime\n if (pathname === \"/preview-runtime.js\") {\n serveFile(res, options.previewRuntimePath);\n return;\n }\n\n // Route: GET /_assets/* → serve theme assets\n if (pathname.startsWith(\"/_assets/\")) {\n // Strip /_assets/<themeName>/ prefix → resolve from themePath/assets/\n const parts = pathname.replace(/^\\/_assets\\//, \"\").split(\"/\");\n // First segment is the theme name — skip it\n const assetSubpath = parts.slice(1).join(\"/\");\n const assetPath = path.join(options.themePath, \"assets\", assetSubpath);\n // Security: prevent path traversal\n if (!assetPath.startsWith(path.join(options.themePath, \"assets\"))) {\n res.writeHead(403);\n res.end(\"Forbidden\");\n return;\n }\n serveFile(res, assetPath);\n return;\n }\n\n // Route: GET /themes/<themeName>/assets/* → serve theme assets (legacy path pattern)\n if (pathname.startsWith(\"/themes/\")) {\n const match = pathname.match(/^\\/themes\\/[^/]+\\/assets\\/(.+)/);\n if (match) {\n const assetPath = path.join(options.themePath, \"assets\", match[1]);\n // Security: prevent path traversal\n if (!assetPath.startsWith(path.join(options.themePath, \"assets\"))) {\n res.writeHead(403);\n res.end(\"Forbidden\");\n return;\n }\n serveFile(res, assetPath);\n return;\n }\n }\n\n // Route: GET /assets/* → serve theme assets (bare path pattern)\n // Handles both /assets/<subpath> and /assets/<themeName>/<subpath>\n // Falls through to dist catch-all if not found (for esbuild content-hashed assets)\n if (pathname.startsWith(\"/assets/\")) {\n const subpath = pathname.replace(/^\\/assets\\//, \"\");\n const segments = subpath.split(\"/\");\n const assetsBase = path.join(options.themePath, \"assets\");\n let assetPath: string;\n if (\n segments[0] === options.themeName ||\n segments[0] === options.themeName.replace(/^my-/, \"\")\n ) {\n assetPath = path.join(assetsBase, segments.slice(1).join(\"/\"));\n } else {\n assetPath = path.join(assetsBase, subpath);\n }\n if (assetPath.startsWith(assetsBase) && fs.existsSync(assetPath)) {\n serveFile(res, assetPath);\n return;\n }\n // Fallback: the first segment may be a theme config ID that differs from\n // the directory name (e.g. \"tinan\" vs \"tin-an\"). Try stripping it.\n if (segments.length > 1) {\n const fallbackPath = path.join(assetsBase, segments.slice(1).join(\"/\"));\n if (\n fallbackPath.startsWith(assetsBase) &&\n fs.existsSync(fallbackPath)\n ) {\n serveFile(res, fallbackPath);\n return;\n }\n }\n // Fall through to dist catch-all for hashed assets\n }\n\n // Route: GET /* → serve from dist/ directory (with SPA fallback)\n const filePath = path.join(options.distDir, pathname);\n // Security: prevent path traversal\n if (!filePath.startsWith(options.distDir)) {\n res.writeHead(403);\n res.end(\"Forbidden\");\n return;\n }\n\n // If the file exists in dist/, serve it; otherwise SPA fallback to preview HTML\n if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {\n serveFile(res, filePath);\n } else {\n // SPA fallback: serve preview HTML for client-side routing (e.g. /showcase, /about)\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n generatePreviewHTML(options.themeName, options.port, themeDataPath)\n );\n }\n });\n\n // WebSocket server on same HTTP server\n const wss = new WebSocketServer({ server });\n wss.on(\"connection\", (ws) => {\n clients.add(ws);\n ws.on(\"close\", () => clients.delete(ws));\n });\n\n server.listen(options.port);\n\n return {\n broadcast(message: object) {\n const data = JSON.stringify(message);\n for (const client of clients) {\n if (client.readyState === WebSocket.OPEN) {\n client.send(data);\n }\n }\n },\n close() {\n wss.close();\n server.close();\n },\n };\n}\n\nfunction serveFile(res: http.ServerResponse, filePath: string) {\n try {\n if (!fs.existsSync(filePath)) {\n res.writeHead(404);\n res.end(\"Not Found\");\n return;\n }\n\n const ext = path.extname(filePath);\n const contentType = MIME_TYPES[ext] || \"application/octet-stream\";\n const content = fs.readFileSync(filePath);\n\n res.writeHead(200, { \"Content-Type\": contentType });\n res.end(content);\n } catch {\n res.writeHead(500);\n res.end(\"Internal Server Error\");\n }\n}\n\nfunction generatePreviewHTML(\n themeName: string,\n port: number,\n themeDataPath?: string\n): string {\n // Try to read theme-data.json for font information\n let fontLinks = \"\";\n let fontVarsCSS = \"\";\n if (themeDataPath) {\n try {\n const themeData = JSON.parse(fs.readFileSync(themeDataPath, \"utf-8\"));\n const typography = (themeData?.themeConfig || themeData?.theme?.config)\n ?.typography?.fontFamily;\n if (typography) {\n // Extract font family names for Google Fonts\n const fontFamilies = new Set<string>();\n for (const value of Object.values(typography) as string[]) {\n // Take the first font in the list (before the comma)\n const primary = value.split(\",\")[0].trim();\n if (\n primary &&\n ![\n \"serif\",\n \"sans-serif\",\n \"monospace\",\n \"system-ui\",\n \"Georgia\",\n \"Inter\",\n \"Consolas\",\n ].includes(primary)\n ) {\n fontFamilies.add(primary);\n }\n }\n if (fontFamilies.size > 0) {\n const families = Array.from(fontFamilies)\n .map(\n (f) =>\n `family=${f.replace(/\\s+/g, \"+\")}:wght@300;400;500;600;700;800;900`\n )\n .join(\"&\");\n fontLinks = `<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n <link href=\"https://fonts.googleapis.com/css2?${families}&display=swap\" rel=\"stylesheet\">`;\n }\n // Set font-family CSS vars for Tailwind\n const heading = typography.heading || typography.body || \"system-ui\";\n const body = typography.body || \"system-ui\";\n fontVarsCSS = `\n :root {\n --font-heading: ${heading};\n --font-body: ${body};\n }\n body { font-family: var(--font-body); }\n h1, h2, h3, h4, h5, h6 { font-family: var(--font-heading); }`;\n }\n } catch {\n // theme-data.json not available — skip font injection\n }\n }\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>OneX Dev — ${themeName}</title>\n ${fontLinks}\n <!-- Tailwind CSS Play CDN — JIT compilation in browser for dev preview -->\n <script src=\"https://cdn.tailwindcss.com\"></script>\n <script>\n tailwind.config = {\n theme: {\n extend: {\n aspectRatio: {\n '2/1': '2 / 1',\n '3/2': '3 / 2',\n '4/3': '4 / 3',\n '3/4': '3 / 4',\n '5/4': '5 / 4',\n '16/9': '16 / 9',\n '21/9': '21 / 9',\n },\n fontFamily: {\n playfair: ['Playfair Display', 'Georgia', 'serif'],\n roboto: ['Roboto', 'system-ui', 'sans-serif'],\n },\n },\n },\n }\n </script>\n <style>\n #onex-preview-root { margin-top: 0; }${fontVarsCSS}\n </style>\n</head>\n<body>\n <div id=\"onex-preview-root\"></div>\n <script type=\"module\" src=\"/preview-runtime.js\"></script>\n</body>\n</html>`;\n}\n","import fs from \"fs-extra\";\nimport path from \"path\";\nimport ejs from \"ejs\";\nimport { execSync } from \"child_process\";\nimport { logger } from \"./logger\";\n\n/**\n * Render a template file with EJS\n */\nexport async function renderTemplate(\n templatePath: string,\n data: Record<string, unknown>\n): Promise<string> {\n const template = await fs.readFile(templatePath, \"utf-8\");\n return ejs.render(template, data);\n}\n\n/**\n * Write a file with directory creation\n */\nexport async function writeFile(\n filePath: string,\n content: string\n): Promise<void> {\n await fs.ensureDir(path.dirname(filePath));\n await fs.writeFile(filePath, content, \"utf-8\");\n}\n\n/**\n * Get the templates directory\n * Works in both development and production (bundled) environments\n */\nexport function getTemplatesDir(): string {\n // Try common locations\n const locations = [\n path.join(__dirname, \"../../templates\"), // Development\n path.join(__dirname, \"../templates\"), // Production (dist/)\n path.join(process.cwd(), \"templates\"), // Fallback\n path.join(process.cwd(), \"packages/cli/templates\"), // Monorepo\n ];\n\n for (const location of locations) {\n if (fs.existsSync(location)) {\n return location;\n }\n }\n\n throw new Error(\"Templates directory not found\");\n}\n\n/**\n * Copy template directory\n */\nexport async function copyTemplate(\n templateName: string,\n targetDir: string,\n data: Record<string, unknown>\n): Promise<void> {\n // Get template directory from CLI package\n const templatesDir = getTemplatesDir();\n const templateDir = path.join(templatesDir, templateName);\n\n if (!fs.existsSync(templateDir)) {\n throw new Error(\n `Template \"${templateName}\" not found at ${templateDir}. Available templates: ${fs.readdirSync(templatesDir).join(\", \")}`\n );\n }\n\n await fs.ensureDir(targetDir);\n\n const files = await fs.readdir(templateDir);\n\n for (const file of files) {\n const templatePath = path.join(templateDir, file);\n const targetPath = path.join(targetDir, file);\n\n const stat = await fs.stat(templatePath);\n\n if (stat.isDirectory()) {\n // Recursively copy directories\n await copyTemplateDir(templatePath, targetPath, data);\n } else if (file.endsWith(\".ejs\")) {\n // Render EJS template\n const content = await renderTemplate(templatePath, data);\n const outputPath = targetPath.replace(/\\.ejs$/, \"\");\n await writeFile(outputPath, content);\n } else {\n // Copy file as-is\n await fs.copy(templatePath, targetPath);\n }\n }\n}\n\n/**\n * Internal helper to copy a template directory recursively\n */\nasync function copyTemplateDir(\n templateDir: string,\n targetDir: string,\n data: Record<string, unknown>\n): Promise<void> {\n await fs.ensureDir(targetDir);\n\n const files = await fs.readdir(templateDir);\n\n for (const file of files) {\n const templatePath = path.join(templateDir, file);\n const targetPath = path.join(targetDir, file);\n\n const stat = await fs.stat(templatePath);\n\n if (stat.isDirectory()) {\n await copyTemplateDir(templatePath, targetPath, data);\n } else if (file.endsWith(\".ejs\")) {\n // Render EJS template\n const content = await renderTemplate(templatePath, data);\n const outputPath = targetPath.replace(/\\.ejs$/, \"\");\n await writeFile(outputPath, content);\n } else {\n // Copy file as-is\n await fs.copy(templatePath, targetPath);\n }\n }\n}\n\n/**\n * Get project root directory\n */\nexport function getProjectRoot(): string {\n let currentDir = process.cwd();\n\n // Look for package.json with workspace config or themes directory\n while (currentDir !== path.parse(currentDir).root) {\n const packageJsonPath = path.join(currentDir, \"package.json\");\n\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = fs.readJsonSync(packageJsonPath);\n\n // Check if this is the root (has workspaces, src/themes, or themes)\n if (\n packageJson.workspaces ||\n fs.existsSync(path.join(currentDir, \"src/themes\")) ||\n fs.existsSync(path.join(currentDir, \"themes\"))\n ) {\n return currentDir;\n }\n }\n\n currentDir = path.dirname(currentDir);\n }\n\n return process.cwd();\n}\n\n/**\n * Get themes directory\n */\nexport function getThemesDir(): string {\n const root = getProjectRoot();\n if (fs.existsSync(path.join(root, \"themes\")))\n return path.join(root, \"themes\");\n if (fs.existsSync(path.join(root, \"src/themes\")))\n return path.join(root, \"src/themes\");\n // Standalone theme: parent dir acts as themes dir\n return path.dirname(root);\n}\n\n/**\n * Get features directory\n */\nexport function getFeaturesDir(): string {\n return path.join(getProjectRoot(), \"src/features\");\n}\n\n/**\n * Check if running in OneX project\n */\nexport function isOneXProject(): boolean {\n const root = getProjectRoot();\n return (\n fs.existsSync(path.join(root, \"themes\")) ||\n fs.existsSync(path.join(root, \"src/themes\")) ||\n fs.existsSync(path.join(root, \"theme.config.ts\")) ||\n fs.existsSync(path.join(root, \"bundle-entry.ts\"))\n );\n}\n\n/**\n * Ensure running in OneX project\n */\nexport function ensureOneXProject(): void {\n if (!isOneXProject()) {\n logger.error(\n \"Not in a OneX project. Please run this command from a OneX project root.\"\n );\n process.exit(1);\n }\n}\n\n/**\n * List available themes\n */\nexport function listThemes(): string[] {\n const themesDir = getThemesDir();\n\n if (!fs.existsSync(themesDir)) {\n return [];\n }\n\n return fs.readdirSync(themesDir).filter((name) => {\n const themePath = path.join(themesDir, name);\n return (\n fs.statSync(themePath).isDirectory() &&\n (fs.existsSync(path.join(themePath, \"theme.config.ts\")) ||\n fs.existsSync(path.join(themePath, \"bundle-entry.ts\")) ||\n fs.existsSync(path.join(themePath, \"manifest.ts\")))\n );\n });\n}\n\n/**\n * Check if theme exists\n */\nexport function themeExists(themeName: string): boolean {\n const themePath = path.join(getThemesDir(), themeName);\n return (\n fs.existsSync(themePath) &&\n (fs.existsSync(path.join(themePath, \"theme.config.ts\")) ||\n fs.existsSync(path.join(themePath, \"bundle-entry.ts\")) ||\n fs.existsSync(path.join(themePath, \"manifest.ts\")))\n );\n}\n\n/**\n * Detect package manager (npm, yarn, pnpm, bun)\n */\nexport function detectPackageManager(): \"npm\" | \"yarn\" | \"pnpm\" | \"bun\" {\n // Check if running with specific package manager\n const userAgent = process.env.npm_config_user_agent || \"\";\n\n if (userAgent.includes(\"pnpm\")) return \"pnpm\";\n if (userAgent.includes(\"yarn\")) return \"yarn\";\n if (userAgent.includes(\"bun\")) return \"bun\";\n\n // Check for lock files in cwd\n const cwd = process.cwd();\n if (fs.existsSync(path.join(cwd, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (fs.existsSync(path.join(cwd, \"yarn.lock\"))) return \"yarn\";\n if (fs.existsSync(path.join(cwd, \"bun.lockb\"))) return \"bun\";\n\n // Default to npm\n return \"npm\";\n}\n\n/**\n * Install dependencies in a directory\n */\nexport async function installDependencies(\n projectPath: string,\n packageManager: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\" = \"npm\"\n): Promise<void> {\n return new Promise((resolve, reject) => {\n try {\n const installCmd =\n packageManager === \"yarn\" ? \"yarn\" : `${packageManager} install`;\n\n execSync(installCmd, {\n cwd: projectPath,\n stdio: \"inherit\",\n });\n\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n}\n","import path from \"path\";\nimport fs from \"fs\";\nimport { execSync } from \"child_process\";\nimport inquirer from \"inquirer\";\nimport { logger } from \"../utils/logger\";\nimport {\n validateThemeName,\n toKebabCase,\n toPascalCase,\n} from \"../utils/validators\";\nimport {\n writeFile,\n copyTemplate,\n detectPackageManager,\n installDependencies,\n} from \"../utils/file-helpers\";\nimport { getApiUrl, type Env } from \"../utils/cli-auth\";\n\ninterface InitOptions {\n template?: string;\n noInstall?: boolean;\n git?: boolean;\n yes?: boolean;\n env?: Env;\n}\n\nexport async function initCommand(\n projectName?: string,\n options: InitOptions = {}\n): Promise<void> {\n logger.header(\"Create New OneX Theme Project\");\n\n // Validate project name or prompt for it\n let name: string;\n\n if (!projectName) {\n const { inputName } = await inquirer.prompt([\n {\n type: \"input\",\n name: \"inputName\",\n message: \"Project name (kebab-case):\",\n validate: (input: string) => {\n if (!input) return \"Project name is required\";\n const kebabName = toKebabCase(input);\n if (!validateThemeName(kebabName)) {\n return \"Invalid project name. Use lowercase letters, numbers, and hyphens only.\";\n }\n if (fs.existsSync(path.join(process.cwd(), kebabName))) {\n return `Directory \"${kebabName}\" already exists`;\n }\n return true;\n },\n },\n ]);\n name = toKebabCase(inputName);\n } else {\n name = toKebabCase(projectName);\n }\n\n // Check if directory already exists\n const projectPath = path.join(process.cwd(), name);\n if (fs.existsSync(projectPath)) {\n logger.error(`Directory \"${name}\" already exists.`);\n process.exit(1);\n }\n\n // Check if theme ID is already registered (non-blocking — works offline)\n if (!options.yes) {\n try {\n const apiUrl = getApiUrl(options.env ?? \"dev\");\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 3000);\n const response = await fetch(\n `${apiUrl}/website-api/themes/${encodeURIComponent(name)}/exists`,\n { signal: controller.signal }\n );\n clearTimeout(timeout);\n if (response.ok) {\n const data = await response.json();\n const body = data.statusCode ? data.body : data;\n if (body.exists && body.owner === \"other\") {\n logger.warning(\n `Theme ID \"${name}\" is already registered by another developer.\\n` +\n ` You can still create this locally, but publishing will fail.\\n` +\n ` Consider using a different name.`\n );\n const { proceed } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"proceed\",\n message: \"Continue anyway?\",\n default: false,\n },\n ]);\n if (!proceed) {\n process.exit(0);\n }\n }\n }\n } catch {\n // Offline or API unreachable — skip check silently\n }\n }\n\n // Skip prompts if --yes flag is provided\n let displayName: string;\n let description: string;\n let author: string;\n let template: string;\n\n if (options.yes) {\n displayName = toPascalCase(name)\n .replace(/([A-Z])/g, \" $1\")\n .trim();\n description = \"A custom OneX theme\";\n author = \"\";\n template = options.template || \"default\";\n } else {\n const answers = await inquirer.prompt([\n {\n type: \"input\",\n name: \"displayName\",\n message: \"Display name:\",\n default: toPascalCase(name)\n .replace(/([A-Z])/g, \" $1\")\n .trim(),\n },\n {\n type: \"input\",\n name: \"description\",\n message: \"Theme description:\",\n default: \"A custom OneX theme\",\n },\n {\n type: \"input\",\n name: \"author\",\n message: \"Author name:\",\n default: \"\",\n },\n {\n type: \"list\",\n name: \"template\",\n message: \"Template to use:\",\n choices: [\n { name: \"Default (basic theme structure)\", value: \"default\" },\n { name: \"Minimal (bare minimum)\", value: \"minimal\" },\n ],\n default: options.template || \"default\",\n },\n ]);\n\n displayName = answers.displayName;\n description = answers.description;\n author = answers.author;\n template = answers.template;\n }\n\n const data = {\n projectName: name,\n themeName: name,\n themeNamePascal: toPascalCase(name),\n displayName,\n description,\n author,\n template,\n };\n\n // Prompt for Figma API key (optional, skip if --yes)\n let figmaApiKey = \"\";\n if (!options.yes) {\n const figmaAnswer = await inquirer.prompt([\n {\n type: \"password\",\n name: \"figmaApiKey\",\n message:\n \"Figma API Key (optional, for Figma-to-code MCP — press Enter to skip):\",\n },\n ]);\n figmaApiKey = figmaAnswer.figmaApiKey || \"\";\n }\n\n logger.startSpinner(\"Creating project structure...\");\n\n try {\n // Create project directory\n fs.mkdirSync(projectPath, { recursive: true });\n\n // Copy template files (real theme source — no EJS)\n await copyTemplate(template, projectPath, data);\n\n // Rename theme ID/name in copied files\n await renameThemeInFiles(\n projectPath,\n name,\n displayName,\n description,\n author\n );\n\n // Patch .mcp.json with Figma API key (or remove figma server if no key)\n const mcpJsonPath = path.join(projectPath, \".mcp.json\");\n if (fs.existsSync(mcpJsonPath)) {\n let mcpContent = fs.readFileSync(mcpJsonPath, \"utf-8\");\n if (figmaApiKey) {\n mcpContent = mcpContent.replace(\"__FIGMA_API_KEY__\", figmaApiKey);\n } else {\n // Remove figma server entry if no key provided\n try {\n const mcpJson = JSON.parse(mcpContent);\n delete mcpJson.mcpServers.figma;\n mcpContent = JSON.stringify(mcpJson, null, 2) + \"\\n\";\n } catch {}\n }\n fs.writeFileSync(mcpJsonPath, mcpContent, \"utf-8\");\n }\n\n logger.stopSpinner(true, \"Project structure created!\");\n\n // Initialize git if requested\n if (options.git) {\n logger.startSpinner(\"Initializing git repository...\");\n try {\n execSync(\"git init\", { cwd: projectPath, stdio: \"ignore\" });\n execSync(\"git add .\", { cwd: projectPath, stdio: \"ignore\" });\n execSync('git commit -m \"Initial commit from onexthm init\"', {\n cwd: projectPath,\n stdio: \"ignore\",\n });\n logger.stopSpinner(true, \"Git repository initialized!\");\n } catch {\n logger.stopSpinner(false, \"Failed to initialize git\");\n }\n }\n\n // Install dependencies\n if (!options.noInstall) {\n logger.newLine();\n const packageManager = detectPackageManager();\n logger.startSpinner(`Installing dependencies with ${packageManager}...`);\n try {\n await installDependencies(projectPath, packageManager);\n logger.stopSpinner(true, \"Dependencies installed!\");\n } catch {\n logger.stopSpinner(false, \"Failed to install dependencies\");\n logger.info(\n \"You can install dependencies manually by running: cd \" +\n name +\n \" && npm install\"\n );\n }\n }\n\n // Print success message and next steps\n logger.newLine();\n logger.section(\"Success! 🎉\");\n logger.newLine();\n logger.info(`Created OneX theme project at: ${projectPath}`);\n logger.newLine();\n logger.section(\"Next steps:\");\n logger.log(` cd ${name}`);\n if (options.noInstall) {\n logger.log(` npm install`);\n }\n logger.log(` npm run build # Build your theme`);\n logger.log(` npm run dev # Start development mode`);\n logger.newLine();\n logger.section(\"Theme structure:\");\n logger.log(\" bundle-entry.ts - Theme manifest and exports\");\n logger.log(\n \" theme.config.ts - Design tokens (colors, typography, etc.)\"\n );\n logger.log(\" theme.layout.ts - Header and footer configuration\");\n logger.log(\" sections/ - Custom sections for your theme\");\n logger.log(\" pages/ - Page configurations\");\n logger.log(\" CLAUDE.md - AI assistant context\");\n logger.newLine();\n logger.success(`Happy theming! 🎨`);\n } catch (error) {\n logger.stopSpinner(false, \"Failed to create project\");\n logger.error(\n error instanceof Error ? error.message : \"Unknown error occurred\"\n );\n // Clean up on failure\n if (fs.existsSync(projectPath)) {\n fs.rmSync(projectPath, { recursive: true, force: true });\n }\n process.exit(1);\n }\n}\n\n/**\n * Rename theme ID/name in copied template files.\n * Replaces \"simple\"/\"My Simple Theme\" with the user's theme name.\n */\nasync function renameThemeInFiles(\n projectPath: string,\n themeName: string,\n displayName: string,\n description: string,\n author: string\n): Promise<void> {\n // Only rename in metadata files — NOT in sections/pages (section type IDs must stay)\n // theme.config.ts — update id, name, description\n const configPath = path.join(projectPath, \"theme.config.ts\");\n if (fs.existsSync(configPath)) {\n let content = fs.readFileSync(configPath, \"utf-8\");\n // Keep id as \"my-simple\" — section types depend on it for prefix stripping\n content = content.replace(\n /name: \"My Simple Theme\"/,\n `name: \"${displayName}\"`\n );\n content = content.replace(\n /description: \".*?\"/,\n `description: \"${description}\"`\n );\n fs.writeFileSync(configPath, content, \"utf-8\");\n }\n\n // package.json — update name, description\n const pkgPath = path.join(projectPath, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n let content = fs.readFileSync(pkgPath, \"utf-8\");\n content = content.replace(\n /@onex-themes\\/my-simple/g,\n `@onex-themes/${themeName}`\n );\n content = content.replace(\n /\"description\": \".*?\"/,\n `\"description\": \"${description}\"`\n );\n fs.writeFileSync(pkgPath, content, \"utf-8\");\n }\n}\n\nfunction toCamelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n}\n\n// Legacy generator functions (kept for backward compat, unused with new template)\nfunction generateManifest(data: {\n themeName: string;\n displayName: string;\n description: string;\n author: string;\n}): string {\n return `import type { ThemeExport } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} Theme Manifest\n * ${data.description}\n */\nexport const manifest: ThemeExport = {\n id: \"${data.themeName}\",\n name: \"${data.displayName}\",\n description: \"${data.description}\",\n version: \"1.0.0\",\n author: \"${data.author}\",\n\n // Theme configuration\n config: () => import(\"./config\").then((m) => m.themeConfig),\n\n // Theme layout (header/footer sections)\n layout: () => import(\"./layout\").then((m) => m.themeLayout),\n\n // Available sections in this theme\n sections: {\n // Example: hero: () => import(\"./sections/hero\").then((m) => m.heroSchema),\n },\n\n // Available blocks in this theme\n blocks: {\n // Example: productCard: () => import(\"./blocks/product-card\").then((m) => m.productCardDefinition),\n },\n\n // Default pages\n pages: {\n home: () => import(\"./pages/home\").then((m) => m.homePageConfig),\n },\n\n // Supported page types\n supportedPageTypes: [\"home\", \"about\", \"contact\", \"custom\"],\n\n // Preview image (optional)\n preview: undefined,\n\n // Tags for categorization (optional)\n tags: [\"custom\"],\n};\n\nexport default manifest;\n`;\n}\n\nfunction generateThemeConfig(data: {\n themeName: string;\n displayName: string;\n}): string {\n return `import type { ThemeConfig } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} Theme Configuration\n * Design tokens: colors, typography, spacing, etc.\n */\nexport const themeConfig: ThemeConfig = {\n // Color palette\n colors: {\n primary: {\n 50: \"#eff6ff\",\n 100: \"#dbeafe\",\n 200: \"#bfdbfe\",\n 300: \"#93c5fd\",\n 400: \"#60a5fa\",\n 500: \"#3b82f6\",\n 600: \"#2563eb\",\n 700: \"#1d4ed8\",\n 800: \"#1e40af\",\n 900: \"#1e3a8a\",\n },\n secondary: {\n 50: \"#f8fafc\",\n 100: \"#f1f5f9\",\n 200: \"#e2e8f0\",\n 300: \"#cbd5e1\",\n 400: \"#94a3b8\",\n 500: \"#64748b\",\n 600: \"#475569\",\n 700: \"#334155\",\n 800: \"#1e293b\",\n 900: \"#0f172a\",\n },\n accent: {\n 50: \"#fdf4ff\",\n 100: \"#fae8ff\",\n 200: \"#f5d0fe\",\n 300: \"#f0abfc\",\n 400: \"#e879f9\",\n 500: \"#d946ef\",\n 600: \"#c026d3\",\n 700: \"#a21caf\",\n 800: \"#86198f\",\n 900: \"#701a75\",\n },\n },\n\n // Typography\n typography: {\n fontFamily: {\n sans: [\"Inter\", \"system-ui\", \"sans-serif\"],\n serif: [\"Georgia\", \"serif\"],\n mono: [\"Monaco\", \"monospace\"],\n },\n fontSize: {\n xs: \"0.75rem\",\n sm: \"0.875rem\",\n base: \"1rem\",\n lg: \"1.125rem\",\n xl: \"1.25rem\",\n \"2xl\": \"1.5rem\",\n \"3xl\": \"1.875rem\",\n \"4xl\": \"2.25rem\",\n \"5xl\": \"3rem\",\n },\n },\n\n // Spacing\n spacing: {\n xs: \"0.5rem\",\n sm: \"1rem\",\n md: \"1.5rem\",\n lg: \"2rem\",\n xl: \"3rem\",\n \"2xl\": \"4rem\",\n \"3xl\": \"6rem\",\n \"4xl\": \"8rem\",\n },\n\n // Border radius\n borderRadius: {\n none: \"0\",\n sm: \"0.125rem\",\n md: \"0.375rem\",\n lg: \"0.5rem\",\n xl: \"0.75rem\",\n full: \"9999px\",\n },\n\n // Breakpoints\n breakpoints: {\n sm: \"640px\",\n md: \"768px\",\n lg: \"1024px\",\n xl: \"1280px\",\n \"2xl\": \"1536px\",\n },\n};\n`;\n}\n\nfunction generateThemeLayout(data: { themeName: string }): string {\n return `import type { ThemeLayoutConfig } from \"@onexapis/core\";\n\n/**\n * ${data.themeName} Theme Layout\n * Define header and footer sections\n */\nexport const themeLayout: ThemeLayoutConfig = {\n // Header section configuration\n header: undefined,\n // Example:\n // header: {\n // type: \"header\",\n // template: \"default\",\n // enabled: true,\n // settings: {},\n // },\n\n // Footer section configuration\n footer: undefined,\n // Example:\n // footer: {\n // type: \"footer\",\n // template: \"default\",\n // enabled: true,\n // settings: {},\n // },\n};\n`;\n}\n\nfunction generateThemeIndex(data: {\n themeName: string;\n themeNamePascal: string;\n}): string {\n return `/**\n * ${data.themeNamePascal} Theme\n */\n\nexport { manifest as ${data.themeNamePascal}Manifest } from \"./manifest\";\nexport { themeConfig as ${data.themeNamePascal}Config } from \"./config\";\nexport { themeLayout as ${data.themeNamePascal}Layout } from \"./layout\";\n`;\n}\n\nfunction generateHomePage(data: { displayName: string }): string {\n return `import type { PageConfig } from \"@onexapis/core\";\n\n/**\n * Home Page Configuration\n */\nexport const homePageConfig: PageConfig = {\n type: \"home\",\n title: \"${data.displayName}\",\n description: \"Welcome to ${data.displayName}\",\n\n // SEO metadata\n seo: {\n title: \"${data.displayName} - Home\",\n description: \"Welcome to ${data.displayName}\",\n keywords: [],\n ogImage: undefined,\n },\n\n // Page sections\n sections: [\n // Add your sections here\n // Example:\n // {\n // id: \"hero-1\",\n // type: \"hero\",\n // template: \"default\",\n // order: 0,\n // enabled: true,\n // settings: {},\n // components: [],\n // blocks: [],\n // },\n ],\n};\n`;\n}\n","/**\n * Validation utilities for CLI inputs\n */\n\n/**\n * Validate component/section/block name\n * Must be kebab-case and alphanumeric\n */\nexport function validateName(name: string): boolean {\n return /^[a-z0-9]+(-[a-z0-9]+)*$/.test(name);\n}\n\n/**\n * Convert string to kebab-case\n */\nexport function toKebabCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .replace(/[\\s_]+/g, \"-\")\n .toLowerCase();\n}\n\n/**\n * Convert string to PascalCase\n */\nexport function toPascalCase(str: string): string {\n return str\n .split(/[-_\\s]+/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(\"\");\n}\n\n/**\n * Convert string to camelCase\n */\nexport function toCamelCase(str: string): string {\n const pascal = toPascalCase(str);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\n/**\n * Validate theme name\n */\nexport function validateThemeName(name: string): boolean {\n return /^[a-z][a-z0-9-]*$/.test(name);\n}\n\n/**\n * Check if path exists\n */\nexport function pathExists(filePath: string): boolean {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const fs = require(\"fs-extra\");\n return fs.existsSync(filePath);\n}\n\n/**\n * Validate section category\n */\nexport function validateCategory(category: string): boolean {\n const validCategories = [\n \"headers\",\n \"heroes\",\n \"content\",\n \"features\",\n \"testimonials\",\n \"galleries\",\n \"cta\",\n \"footers\",\n \"ecommerce\",\n \"blog\",\n \"contact\",\n ];\n return validCategories.includes(category);\n}\n\n/**\n * Get valid categories\n */\nexport function getValidCategories(): string[] {\n return [\n \"headers\",\n \"heroes\",\n \"content\",\n \"features\",\n \"testimonials\",\n \"galleries\",\n \"cta\",\n \"footers\",\n \"ecommerce\",\n \"blog\",\n \"contact\",\n ];\n}\n","/**\n * CLI Auth Utilities\n * Token storage, refresh, and API authentication for onexthm CLI.\n */\n\nimport fs from \"fs-extra\";\nimport path from \"path\";\nimport os from \"os\";\nimport crypto from \"crypto\";\n\nconst AUTH_DIR = path.join(os.homedir(), \".onexthm\");\n\n/** Supported target environments. */\nexport type Env = \"dev\" | \"prod\";\n\n/** API base URLs per environment. */\nconst ENV_URLS: Record<Env, string> = {\n dev: \"https://platform-dev.onexeos.com\",\n prod: \"https://platform-staging.onexeos.com\",\n};\n\n/**\n * Resolve the auth file path for a given environment.\n * Handles one-time migration: if the old auth.json exists and auth-dev.json\n * does not, the old file is renamed so existing dev sessions keep working.\n */\nfunction getAuthFile(env: Env = \"dev\"): string {\n const newFile = path.join(AUTH_DIR, `auth-${env}.json`);\n\n // Migrate legacy auth.json → auth-dev.json (runs once per machine)\n if (env === \"dev\") {\n const legacyFile = path.join(AUTH_DIR, \"auth.json\");\n if (fs.existsSync(legacyFile) && !fs.existsSync(newFile)) {\n try {\n fs.moveSync(legacyFile, newFile);\n } catch {\n // If move fails (e.g. cross-device), fall back to copy + delete\n try {\n fs.copySync(legacyFile, newFile);\n fs.removeSync(legacyFile);\n } catch {\n // Leave both files; new file will take precedence going forward\n }\n }\n }\n }\n\n return newFile;\n}\n\nexport interface AuthTokens {\n accessToken: string;\n idToken: string;\n refreshToken: string;\n expiresAt: number; // Unix timestamp (seconds)\n user: {\n email: string;\n name?: string;\n companyId?: string;\n userId?: string;\n };\n}\n\n/**\n * Get the Platform API base URL for a given environment.\n * ONEXTHM_API_URL always overrides — useful for local dev / custom staging.\n * Only ONEXTHM_API_URL is honoured — NEXT_PUBLIC_API_URL is a theme-facing\n * variable (storefront / preview) and must never bleed into CLI platform calls.\n */\nexport function getApiUrl(env: Env = \"dev\"): string {\n return process.env.ONEXTHM_API_URL || ENV_URLS[env];\n}\n\n/**\n * Save auth tokens to disk for the given environment.\n */\nexport async function saveAuthTokens(\n tokens: AuthTokens,\n env: Env = \"dev\"\n): Promise<void> {\n await fs.ensureDir(AUTH_DIR);\n\n const key = getMachineKey();\n const data = JSON.stringify(tokens);\n const encrypted = encrypt(data, key);\n\n await fs.writeFile(getAuthFile(env), encrypted, \"utf-8\");\n}\n\n/**\n * Load auth tokens from disk for the given environment.\n * Returns null if not logged in or file is unreadable.\n */\nexport function loadAuthTokens(env: Env = \"dev\"): AuthTokens | null {\n try {\n const file = getAuthFile(env);\n if (!fs.existsSync(file)) return null;\n\n const encrypted = fs.readFileSync(file, \"utf-8\");\n const key = getMachineKey();\n const data = decrypt(encrypted, key);\n\n return JSON.parse(data) as AuthTokens;\n } catch {\n return null;\n }\n}\n\n/**\n * Clear stored auth tokens for the given environment.\n */\nexport async function clearAuthTokens(env: Env = \"dev\"): Promise<void> {\n try {\n await fs.remove(getAuthFile(env));\n } catch {\n // Ignore if file doesn't exist\n }\n}\n\n/**\n * Check if tokens are expired (with 5-minute buffer so long operations\n * like large uploads don't race to the expiry boundary).\n */\nexport function isTokenExpired(tokens: AuthTokens): boolean {\n return Date.now() / 1000 > tokens.expiresAt - 300;\n}\n\n/**\n * Get valid tokens for the given environment — auto-refreshes if expired.\n */\nexport async function getValidTokens(\n env: Env = \"dev\"\n): Promise<AuthTokens | null> {\n const tokens = loadAuthTokens(env);\n if (!tokens) return null;\n\n if (!isTokenExpired(tokens)) return tokens;\n\n // Try to refresh\n try {\n const apiUrl = getApiUrl(env);\n const response = await fetch(`${apiUrl}/auth/refresh`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ refresh_token: tokens.refreshToken }),\n });\n\n if (!response.ok) {\n await clearAuthTokens(env);\n return null;\n }\n\n const data = await response.json();\n const body = data.statusCode ? data.body : data;\n\n if (!body.IdToken) {\n await clearAuthTokens(env);\n return null;\n }\n\n const refreshed: AuthTokens = {\n ...tokens,\n accessToken: body.AccessToken || tokens.accessToken,\n idToken: body.IdToken,\n expiresAt: Math.floor(Date.now() / 1000) + (body.ExpiresIn || 3600),\n };\n\n await saveAuthTokens(refreshed, env);\n return refreshed;\n } catch {\n await clearAuthTokens(env);\n return null;\n }\n}\n\n/**\n * Make an authenticated API request for the given environment.\n */\nexport async function authenticatedFetch(\n url: string,\n init?: RequestInit,\n env: Env = \"dev\"\n): Promise<Response> {\n const tokens = await getValidTokens(env);\n if (!tokens) {\n throw new Error(\n `Not logged in to ${env} environment. Run: onexthm login --env ${env}`\n );\n }\n\n const headers = new Headers(init?.headers);\n headers.set(\"Authorization\", `Bearer ${tokens.idToken}`);\n headers.set(\"Content-Type\", \"application/json\");\n\n return fetch(url, { ...init, headers });\n}\n\n// ─── Machine-specific encryption ─────────────────────────────────\n\nfunction getMachineKey(): Buffer {\n let seed: string;\n\n if (process.platform === \"darwin\") {\n seed = `onexthm:${os.hostname()}:${os.userInfo().username}`;\n } else if (process.platform === \"linux\") {\n try {\n seed = `onexthm:${fs.readFileSync(\"/etc/machine-id\", \"utf-8\").trim()}`;\n } catch {\n seed = `onexthm:${os.hostname()}:${os.userInfo().username}`;\n }\n } else {\n seed = `onexthm:${os.hostname()}:${os.userInfo().username}`;\n }\n\n return crypto.createHash(\"sha256\").update(seed).digest();\n}\n\nfunction encrypt(text: string, key: Buffer): string {\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv(\"aes-256-gcm\", key, iv);\n let encrypted = cipher.update(text, \"utf-8\", \"hex\");\n encrypted += cipher.final(\"hex\");\n const tag = cipher.getAuthTag();\n return `${iv.toString(\"hex\")}:${tag.toString(\"hex\")}:${encrypted}`;\n}\n\nfunction decrypt(text: string, key: Buffer): string {\n const [ivHex, tagHex, encrypted] = text.split(\":\");\n const iv = Buffer.from(ivHex, \"hex\");\n const tag = Buffer.from(tagHex, \"hex\");\n const decipher = crypto.createDecipheriv(\"aes-256-gcm\", key, iv);\n decipher.setAuthTag(tag);\n let decrypted = decipher.update(encrypted, \"hex\", \"utf-8\");\n decrypted += decipher.final(\"utf-8\");\n return decrypted;\n}\n\n/**\n * Parse JWT claims from an IdToken.\n */\nexport function parseJwtClaims(idToken: string): Record<string, unknown> {\n try {\n const payload = idToken.split(\".\")[1];\n const decoded = Buffer.from(payload, \"base64url\").toString(\"utf-8\");\n return JSON.parse(decoded);\n } catch {\n return {};\n }\n}\n","import path from \"path\";\nimport inquirer from \"inquirer\";\nimport { logger } from \"../utils/logger\";\nimport {\n validateName,\n toKebabCase,\n toPascalCase,\n getValidCategories,\n} from \"../utils/validators\";\nimport fs from \"fs-extra\";\nimport {\n ensureOneXProject,\n getThemesDir,\n listThemes,\n themeExists,\n writeFile,\n} from \"../utils/file-helpers\";\n\ninterface CreateSectionOptions {\n theme?: string;\n category?: string;\n template?: string;\n}\n\nexport async function createSectionCommand(\n name: string,\n options: CreateSectionOptions\n): Promise<void> {\n logger.header(\"Create New Section\");\n\n // Ensure we're in a OneX project\n ensureOneXProject();\n\n // Auto-detect theme in standalone theme directory\n if (!options.theme) {\n const isStandaloneTheme = [\"theme.config.ts\", \"bundle-entry.ts\"].some((f) =>\n fs.existsSync(path.join(process.cwd(), f))\n );\n if (isStandaloneTheme) {\n options.theme = path.basename(process.cwd());\n }\n }\n\n // Validate and normalize name\n const sectionName = toKebabCase(name);\n if (!validateName(sectionName)) {\n logger.error(\n `Invalid section name: ${sectionName}. Use kebab-case (e.g., hero, featured-products)`\n );\n process.exit(1);\n }\n\n // Prompt for missing options\n const answers = await inquirer.prompt([\n {\n type: \"list\",\n name: \"theme\",\n message: \"Which theme should this section belong to?\",\n choices: listThemes(),\n when: !options.theme,\n },\n {\n type: \"list\",\n name: \"category\",\n message: \"What category is this section?\",\n choices: getValidCategories(),\n when: !options.category,\n },\n {\n type: \"input\",\n name: \"displayName\",\n message: \"Display name for this section:\",\n default: toPascalCase(sectionName)\n .replace(/([A-Z])/g, \" $1\")\n .trim(),\n },\n {\n type: \"input\",\n name: \"description\",\n message: \"Section description:\",\n default: `${toPascalCase(sectionName)} section`,\n },\n {\n type: \"confirm\",\n name: \"createTemplate\",\n message: \"Create a default template variant?\",\n default: true,\n },\n ]);\n\n const themeName = options.theme || answers.theme;\n const category = options.category || answers.category;\n const displayName = answers.displayName;\n const description = answers.description;\n const createTemplate = answers.createTemplate;\n\n // Validate theme exists\n if (!themeExists(themeName)) {\n logger.error(`Theme \"${themeName}\" does not exist.`);\n process.exit(1);\n }\n\n // Prepare data for templates\n const data = {\n sectionName,\n sectionNamePascal: toPascalCase(sectionName),\n themeName,\n category,\n displayName,\n description,\n };\n\n logger.startSpinner(\"Creating section files...\");\n\n try {\n const themePath = path.join(getThemesDir(), themeName);\n const sectionPath = path.join(themePath, \"sections\", sectionName);\n\n // Create section schema file\n const schemaContent = generateSectionSchema(data);\n await writeFile(\n path.join(sectionPath, `${sectionName}.schema.ts`),\n schemaContent\n );\n\n // Create default template if requested\n if (createTemplate) {\n const templateContent = generateSectionTemplate(data);\n await writeFile(\n path.join(sectionPath, `${sectionName}-default.tsx`),\n templateContent\n );\n }\n\n // Create index file\n const indexContent = generateSectionIndex(data, createTemplate);\n await writeFile(path.join(sectionPath, \"index.ts\"), indexContent);\n\n logger.stopSpinner(true, \"Section files created successfully!\");\n\n // Print next steps\n logger.newLine();\n logger.section(\"Next steps:\");\n logger.log(\n ` 1. Edit schema: ${path.relative(process.cwd(), path.join(sectionPath, `${sectionName}.schema.ts`))}`\n );\n if (createTemplate) {\n logger.log(\n ` 2. Edit template: ${path.relative(process.cwd(), path.join(sectionPath, `${sectionName}-default.tsx`))}`\n );\n }\n logger.log(\n ` 3. Add to theme manifest: ${path.relative(process.cwd(), path.join(themePath, \"manifest.ts\"))}`\n );\n logger.newLine();\n logger.success(\"Section created successfully!\");\n } catch (error) {\n logger.stopSpinner(false, \"Failed to create section\");\n logger.error(\n error instanceof Error ? error.message : \"Unknown error occurred\"\n );\n process.exit(1);\n }\n}\n\nfunction generateSectionSchema(data: {\n sectionName: string;\n sectionNamePascal: string;\n category: string;\n displayName: string;\n description: string;\n}): string {\n return `import type { SectionSchema } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} Section Schema\n * ${data.description}\n */\nexport const ${data.sectionName}Schema: SectionSchema = {\n type: \"${data.sectionName}\",\n name: \"${data.displayName}\",\n description: \"${data.description}\",\n category: \"${data.category}\",\n icon: \"layout\",\n\n // Available template variants\n templates: [\n {\n id: \"default\",\n name: \"Default\",\n description: \"Default ${data.sectionName} layout\",\n isDefault: true,\n },\n ],\n\n // Section-level settings\n settings: [\n {\n id: \"backgroundColor\",\n type: \"color\",\n label: \"Background Color\",\n category: \"style\",\n },\n {\n id: \"padding\",\n type: \"select\",\n label: \"Padding\",\n category: \"style\",\n options: [\n { label: \"None\", value: \"none\" },\n { label: \"Small\", value: \"sm\" },\n { label: \"Medium\", value: \"md\" },\n { label: \"Large\", value: \"lg\" },\n ],\n defaultValue: \"md\",\n },\n ],\n\n // Default settings values\n defaults: {\n backgroundColor: \"#ffffff\",\n padding: \"md\",\n },\n\n // Allowed blocks (optional)\n allowedBlocks: [],\n\n // Maximum number of instances on a page (optional)\n maxInstances: undefined,\n};\n`;\n}\n\nfunction generateSectionTemplate(data: {\n sectionName: string;\n sectionNamePascal: string;\n displayName: string;\n}): string {\n return `import React from \"react\";\nimport type { SectionComponentProps } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} - Default Template\n */\nexport function ${data.sectionNamePascal}Default({\n section,\n isEditing = false,\n}: SectionComponentProps) {\n const { settings = {} } = section;\n const backgroundColor = settings.backgroundColor as string || \"#ffffff\";\n const padding = settings.padding as string || \"md\";\n\n // Map padding values to Tailwind classes\n const paddingClasses = {\n none: \"\",\n sm: \"py-8\",\n md: \"py-16\",\n lg: \"py-24\",\n };\n\n return (\n <section\n className={\\`${data.sectionName}-section \\${paddingClasses[padding as keyof typeof paddingClasses] || paddingClasses.md}\\`}\n style={{ backgroundColor }}\n data-section-id={section.id}\n data-section-type={section.type}\n >\n <div className=\"container mx-auto px-4\">\n {/* TODO: Implement section content */}\n <div className=\"text-center\">\n <h2 className=\"text-3xl font-bold\">${data.displayName}</h2>\n <p className=\"mt-4 text-gray-600\">\n Start building your section here\n </p>\n </div>\n\n {/* Render blocks if any */}\n {section.blocks && section.blocks.length > 0 && (\n <div className=\"mt-8\">\n {/* TODO: Render blocks */}\n </div>\n )}\n\n {/* Render components if any */}\n {section.components && section.components.length > 0 && (\n <div className=\"mt-8\">\n {/* TODO: Render components */}\n </div>\n )}\n </div>\n </section>\n );\n}\n`;\n}\n\nfunction generateSectionIndex(\n data: { sectionName: string; sectionNamePascal: string },\n hasTemplate: boolean\n): string {\n return `/**\n * ${data.sectionNamePascal} Section\n */\n\nexport { ${data.sectionName}Schema } from \"./${data.sectionName}.schema\";\n${hasTemplate ? `export { ${data.sectionNamePascal}Default } from \"./${data.sectionName}-default\";` : \"\"}\n`;\n}\n","import path from \"path\";\nimport fs from \"fs-extra\";\nimport inquirer from \"inquirer\";\nimport { logger } from \"../utils/logger\";\nimport { validateName, toKebabCase, toPascalCase } from \"../utils/validators\";\nimport {\n ensureOneXProject,\n getFeaturesDir,\n getThemesDir,\n listThemes,\n themeExists,\n writeFile,\n} from \"../utils/file-helpers\";\n\ninterface CreateBlockOptions {\n theme?: string;\n}\n\nexport async function createBlockCommand(\n name: string,\n options: CreateBlockOptions\n): Promise<void> {\n logger.header(\"Create New Block\");\n\n // Ensure we're in a OneX project\n ensureOneXProject();\n\n // Auto-detect theme in standalone theme directory\n if (!options.theme) {\n const isStandaloneTheme = [\"theme.config.ts\", \"bundle-entry.ts\"].some((f) =>\n fs.existsSync(path.join(process.cwd(), f))\n );\n if (isStandaloneTheme) {\n options.theme = path.basename(process.cwd());\n }\n }\n\n // Validate and normalize name\n const blockName = toKebabCase(name);\n if (!validateName(blockName)) {\n logger.error(\n `Invalid block name: ${blockName}. Use kebab-case (e.g., product-card, testimonial-item)`\n );\n process.exit(1);\n }\n\n // Prompt for options\n const answers = await inquirer.prompt([\n {\n type: \"list\",\n name: \"scope\",\n message: \"Block scope:\",\n choices: [\n { name: \"Shared (available to all themes)\", value: \"shared\" },\n { name: \"Theme-specific\", value: \"theme\" },\n ],\n default: \"shared\",\n },\n {\n type: \"list\",\n name: \"theme\",\n message: \"Which theme?\",\n choices: listThemes(),\n when: (answers) => answers.scope === \"theme\" && !options.theme,\n },\n {\n type: \"input\",\n name: \"displayName\",\n message: \"Display name for this block:\",\n default: toPascalCase(blockName)\n .replace(/([A-Z])/g, \" $1\")\n .trim(),\n },\n {\n type: \"input\",\n name: \"description\",\n message: \"Block description:\",\n default: `${toPascalCase(blockName)} block`,\n },\n {\n type: \"confirm\",\n name: \"hasComponents\",\n message: \"Does this block contain components?\",\n default: true,\n },\n {\n type: \"confirm\",\n name: \"hasNestedBlocks\",\n message: \"Does this block support nested blocks?\",\n default: false,\n },\n ]);\n\n const scope = answers.scope;\n const themeName = options.theme || answers.theme;\n const displayName = answers.displayName;\n const description = answers.description;\n const hasComponents = answers.hasComponents;\n const hasNestedBlocks = answers.hasNestedBlocks;\n\n // Validate theme if theme-specific\n if (scope === \"theme\" && !themeExists(themeName)) {\n logger.error(`Theme \"${themeName}\" does not exist.`);\n process.exit(1);\n }\n\n // Prepare data for templates\n const data = {\n blockName,\n blockNamePascal: toPascalCase(blockName),\n displayName,\n description,\n hasComponents,\n hasNestedBlocks,\n scope,\n themeName,\n };\n\n logger.startSpinner(\"Creating block files...\");\n\n try {\n const blockPath =\n scope === \"shared\"\n ? path.join(getFeaturesDir(), \"blocks\", blockName)\n : path.join(getThemesDir(), themeName, \"blocks\", blockName);\n\n // Create block schema file\n const schemaContent = generateBlockSchema(data);\n await writeFile(\n path.join(blockPath, `${blockName}.schema.ts`),\n schemaContent\n );\n\n // Create block component file\n const componentContent = generateBlockComponent(data);\n await writeFile(path.join(blockPath, `${blockName}.tsx`), componentContent);\n\n // Create index file\n const indexContent = generateBlockIndex(data);\n await writeFile(path.join(blockPath, \"index.ts\"), indexContent);\n\n logger.stopSpinner(true, \"Block files created successfully!\");\n\n // Print next steps\n logger.newLine();\n logger.section(\"Next steps:\");\n logger.log(\n ` 1. Edit schema: ${path.relative(process.cwd(), path.join(blockPath, `${blockName}.schema.ts`))}`\n );\n logger.log(\n ` 2. Edit component: ${path.relative(process.cwd(), path.join(blockPath, `${blockName}.tsx`))}`\n );\n logger.log(\n ` 3. Register in block registry: src/lib/registry/block-registry.ts`\n );\n logger.newLine();\n logger.success(\"Block created successfully!\");\n } catch (error) {\n logger.stopSpinner(false, \"Failed to create block\");\n logger.error(\n error instanceof Error ? error.message : \"Unknown error occurred\"\n );\n process.exit(1);\n }\n}\n\nfunction generateBlockSchema(data: {\n blockName: string;\n blockNamePascal: string;\n displayName: string;\n description: string;\n hasComponents: boolean;\n hasNestedBlocks: boolean;\n}): string {\n return `import type { BlockDefinition } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} Block Schema\n * ${data.description}\n */\nexport const ${data.blockName}Definition: BlockDefinition = {\n type: \"${data.blockName}\",\n name: \"${data.displayName}\",\n description: \"${data.description}\",\n icon: \"square\",\n\n // Block settings\n settings: [\n {\n id: \"title\",\n type: \"text\",\n label: \"Title\",\n category: \"content\",\n },\n {\n id: \"alignment\",\n type: \"select\",\n label: \"Alignment\",\n category: \"style\",\n options: [\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n { label: \"Right\", value: \"right\" },\n ],\n defaultValue: \"left\",\n },\n ],\n\n // Default settings values\n defaults: {\n title: \"${data.displayName}\",\n alignment: \"left\",\n },\n\n ${data.hasComponents ? `// This block can contain components\\n allowsComponents: true,` : \"\"}\n ${data.hasNestedBlocks ? `// This block can contain nested blocks\\n allowsNestedBlocks: true,` : \"\"}\n};\n`;\n}\n\nfunction generateBlockComponent(data: {\n blockName: string;\n blockNamePascal: string;\n displayName: string;\n hasComponents: boolean;\n hasNestedBlocks: boolean;\n}): string {\n return `import React from \"react\";\nimport type { BlockComponentProps } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} Block Component\n */\nexport function ${data.blockNamePascal}({\n block,\n isEditing = false,\n}: BlockComponentProps) {\n const { settings = {} } = block;\n const title = settings.title as string || \"${data.displayName}\";\n const alignment = settings.alignment as string || \"left\";\n\n const alignmentClasses = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n };\n\n return (\n <div\n className={\\`${data.blockName}-block \\${alignmentClasses[alignment as keyof typeof alignmentClasses]}\\`}\n data-block-id={block.id}\n data-block-type={block.type}\n >\n {title && <h3 className=\"text-xl font-semibold mb-4\">{title}</h3>}\n\n {/* TODO: Implement block content */}\n <div className=\"block-content\">\n <p className=\"text-gray-600\">Block content goes here</p>\n </div>\n\n ${\n data.hasComponents\n ? `{/* Render components if any */}\n {block.components && block.components.length > 0 && (\n <div className=\"block-components mt-4\">\n {/* TODO: Render components using ComponentRenderer */}\n </div>\n )}`\n : \"\"\n }\n\n ${\n data.hasNestedBlocks\n ? `{/* Render nested blocks if any */}\n {block.blocks && block.blocks.length > 0 && (\n <div className=\"nested-blocks mt-4\">\n {/* TODO: Render nested blocks using BlockRenderer */}\n </div>\n )}`\n : \"\"\n }\n </div>\n );\n}\n`;\n}\n\nfunction generateBlockIndex(data: {\n blockName: string;\n blockNamePascal: string;\n}): string {\n return `/**\n * ${data.blockNamePascal} Block\n */\n\nexport { ${data.blockName}Definition } from \"./${data.blockName}.schema\";\nexport { ${data.blockNamePascal} } from \"./${data.blockName}\";\n`;\n}\n","import path from \"path\";\nimport inquirer from \"inquirer\";\nimport { logger } from \"../utils/logger\";\nimport { validateName, toKebabCase, toPascalCase } from \"../utils/validators\";\nimport {\n ensureOneXProject,\n getFeaturesDir,\n writeFile,\n} from \"../utils/file-helpers\";\n\ninterface CreateComponentOptions {\n type?: string;\n}\n\nexport async function createComponentCommand(\n name: string,\n options: CreateComponentOptions\n): Promise<void> {\n logger.header(\"Create New Component\");\n\n // Ensure we're in a OneX project\n ensureOneXProject();\n\n // Validate and normalize name\n const componentName = toKebabCase(name);\n if (!validateName(componentName)) {\n logger.error(\n `Invalid component name: ${componentName}. Use kebab-case (e.g., button, icon-badge)`\n );\n process.exit(1);\n }\n\n // Prompt for options\n const answers = await inquirer.prompt([\n {\n type: \"list\",\n name: \"componentType\",\n message: \"Component type:\",\n choices: [\n { name: \"UI Component (button, badge, etc.)\", value: \"ui\" },\n { name: \"Form Component (input, select, etc.)\", value: \"form\" },\n { name: \"Layout Component (container, grid, etc.)\", value: \"layout\" },\n {\n name: \"Content Component (heading, paragraph, etc.)\",\n value: \"content\",\n },\n ],\n when: !options.type,\n },\n {\n type: \"input\",\n name: \"displayName\",\n message: \"Display name for this component:\",\n default: toPascalCase(componentName)\n .replace(/([A-Z])/g, \" $1\")\n .trim(),\n },\n {\n type: \"input\",\n name: \"description\",\n message: \"Component description:\",\n default: `${toPascalCase(componentName)} component`,\n },\n ]);\n\n const componentType = options.type || answers.componentType;\n const displayName = answers.displayName;\n const description = answers.description;\n\n // Prepare data for templates\n const data = {\n componentName,\n componentNamePascal: toPascalCase(componentName),\n componentType,\n displayName,\n description,\n };\n\n logger.startSpinner(\"Creating component files...\");\n\n try {\n const componentPath = path.join(\n getFeaturesDir(),\n \"components\",\n componentName\n );\n\n // Create component schema file\n const schemaContent = generateComponentSchema(data);\n await writeFile(\n path.join(componentPath, `${componentName}.schema.ts`),\n schemaContent\n );\n\n // Create component file\n const componentContent = generateComponent(data);\n await writeFile(\n path.join(componentPath, `${componentName}.tsx`),\n componentContent\n );\n\n // Create index file\n const indexContent = generateComponentIndex(data);\n await writeFile(path.join(componentPath, \"index.ts\"), indexContent);\n\n logger.stopSpinner(true, \"Component files created successfully!\");\n\n // Print next steps\n logger.newLine();\n logger.section(\"Next steps:\");\n logger.log(\n ` 1. Edit schema: ${path.relative(process.cwd(), path.join(componentPath, `${componentName}.schema.ts`))}`\n );\n logger.log(\n ` 2. Edit component: ${path.relative(process.cwd(), path.join(componentPath, `${componentName}.tsx`))}`\n );\n logger.log(\n ` 3. Register in component registry: src/lib/registry/component-registry.ts`\n );\n logger.newLine();\n logger.success(\"Component created successfully!\");\n } catch (error) {\n logger.stopSpinner(false, \"Failed to create component\");\n logger.error(\n error instanceof Error ? error.message : \"Unknown error occurred\"\n );\n process.exit(1);\n }\n}\n\nfunction generateComponentSchema(data: {\n componentName: string;\n displayName: string;\n description: string;\n componentType: string;\n}): string {\n return `import type { ComponentDefinition } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} Component Schema\n * ${data.description}\n */\nexport const ${data.componentName}Definition: ComponentDefinition = {\n type: \"${data.componentName}\",\n name: \"${data.displayName}\",\n description: \"${data.description}\",\n category: \"${data.componentType}\",\n icon: \"square\",\n\n // Content fields (what the component displays)\n contentFields: [\n {\n id: \"text\",\n type: \"text\",\n label: \"Text\",\n defaultValue: \"${data.displayName}\",\n },\n ],\n\n // Style fields (how the component looks)\n styleFields: [\n {\n id: \"variant\",\n type: \"select\",\n label: \"Variant\",\n options: [\n { label: \"Default\", value: \"default\" },\n { label: \"Primary\", value: \"primary\" },\n { label: \"Secondary\", value: \"secondary\" },\n ],\n defaultValue: \"default\",\n },\n {\n id: \"size\",\n type: \"select\",\n label: \"Size\",\n options: [\n { label: \"Small\", value: \"sm\" },\n { label: \"Medium\", value: \"md\" },\n { label: \"Large\", value: \"lg\" },\n ],\n defaultValue: \"md\",\n },\n ],\n\n // Default content values\n defaultContent: {\n text: \"${data.displayName}\",\n },\n\n // Default style values\n defaultStyle: {\n variant: \"default\",\n size: \"md\",\n },\n};\n`;\n}\n\nfunction generateComponent(data: {\n componentName: string;\n componentNamePascal: string;\n displayName: string;\n}): string {\n return `import React from \"react\";\nimport type { ComponentProps } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} Component\n */\nexport function ${data.componentNamePascal}({\n component,\n isEditing = false,\n}: ComponentProps) {\n const { content = {}, style = {} } = component;\n const text = content.text as string || \"${data.displayName}\";\n const variant = style.variant as string || \"default\";\n const size = style.size as string || \"md\";\n\n // Variant classes\n const variantClasses = {\n default: \"bg-gray-100 text-gray-900\",\n primary: \"bg-blue-600 text-white\",\n secondary: \"bg-gray-600 text-white\",\n };\n\n // Size classes\n const sizeClasses = {\n sm: \"text-sm px-3 py-1\",\n md: \"text-base px-4 py-2\",\n lg: \"text-lg px-6 py-3\",\n };\n\n return (\n <div\n className={\\`${data.componentName} \\${variantClasses[variant as keyof typeof variantClasses]} \\${sizeClasses[size as keyof typeof sizeClasses]} inline-block rounded\\`}\n data-component-id={component.id}\n data-component-type={component.type}\n >\n {text}\n </div>\n );\n}\n`;\n}\n\nfunction generateComponentIndex(data: {\n componentName: string;\n componentNamePascal: string;\n}): string {\n return `/**\n * ${data.componentNamePascal} Component\n */\n\nexport { ${data.componentName}Definition } from \"./${data.componentName}.schema\";\nexport { ${data.componentNamePascal} } from \"./${data.componentName}\";\n`;\n}\n","import fs from \"fs-extra\";\nimport path from \"path\";\nimport chalk from \"chalk\";\nimport { logger } from \"../utils/logger\";\nimport {\n ensureOneXProject,\n getThemesDir,\n getFeaturesDir,\n listThemes,\n} from \"../utils/file-helpers\";\n\ninterface ListOptions {\n sections?: boolean;\n blocks?: boolean;\n components?: boolean;\n theme?: string;\n}\n\nexport async function listCommand(options: ListOptions): Promise<void> {\n logger.header(\"OneX Project Inventory\");\n\n // Ensure we're in a OneX project\n ensureOneXProject();\n\n const showAll = !options.sections && !options.blocks && !options.components;\n\n if (showAll || options.sections) {\n await listSections(options.theme);\n }\n\n if (showAll || options.blocks) {\n await listBlocks(options.theme);\n }\n\n if (showAll || options.components) {\n await listComponents();\n }\n\n if (showAll) {\n await listThemesInfo();\n }\n}\n\nasync function listSections(themeFilter?: string): Promise<void> {\n logger.section(\"📄 Sections\");\n\n const themes = themeFilter ? [themeFilter] : listThemes();\n\n if (themes.length === 0) {\n logger.warning(\"No themes found\");\n return;\n }\n\n for (const theme of themes) {\n const sectionsDir = path.join(getThemesDir(), theme, \"sections\");\n\n if (!fs.existsSync(sectionsDir)) {\n continue;\n }\n\n const sections = fs.readdirSync(sectionsDir).filter((name) => {\n const sectionPath = path.join(sectionsDir, name);\n return (\n fs.statSync(sectionPath).isDirectory() &&\n fs.existsSync(path.join(sectionPath, \"index.ts\"))\n );\n });\n\n if (sections.length > 0) {\n logger.log(chalk.cyan(`\\n ${theme}:`));\n sections.forEach((section) => {\n logger.log(` • ${section}`);\n });\n }\n }\n\n logger.newLine();\n}\n\nasync function listBlocks(themeFilter?: string): Promise<void> {\n logger.section(\"🧱 Blocks\");\n\n // List shared blocks\n const sharedBlocksDir = path.join(getFeaturesDir(), \"blocks\");\n if (fs.existsSync(sharedBlocksDir)) {\n const sharedBlocks = fs.readdirSync(sharedBlocksDir).filter((name) => {\n const blockPath = path.join(sharedBlocksDir, name);\n return (\n fs.statSync(blockPath).isDirectory() &&\n fs.existsSync(path.join(blockPath, \"index.ts\"))\n );\n });\n\n if (sharedBlocks.length > 0) {\n logger.log(chalk.cyan(\"\\n Shared:\"));\n sharedBlocks.forEach((block) => {\n logger.log(` • ${block}`);\n });\n }\n }\n\n // List theme-specific blocks\n const themes = themeFilter ? [themeFilter] : listThemes();\n\n for (const theme of themes) {\n const blocksDir = path.join(getThemesDir(), theme, \"blocks\");\n\n if (!fs.existsSync(blocksDir)) {\n continue;\n }\n\n const blocks = fs.readdirSync(blocksDir).filter((name) => {\n const blockPath = path.join(blocksDir, name);\n return (\n fs.statSync(blockPath).isDirectory() &&\n fs.existsSync(path.join(blockPath, \"index.ts\"))\n );\n });\n\n if (blocks.length > 0) {\n logger.log(chalk.cyan(`\\n ${theme}:`));\n blocks.forEach((block) => {\n logger.log(` • ${block}`);\n });\n }\n }\n\n logger.newLine();\n}\n\nasync function listComponents(): Promise<void> {\n logger.section(\"⚙️ Components\");\n\n const componentsDir = path.join(getFeaturesDir(), \"components\");\n\n if (!fs.existsSync(componentsDir)) {\n logger.warning(\"No components directory found\");\n return;\n }\n\n const components = fs.readdirSync(componentsDir).filter((name) => {\n const componentPath = path.join(componentsDir, name);\n return (\n fs.statSync(componentPath).isDirectory() &&\n fs.existsSync(path.join(componentPath, \"index.ts\"))\n );\n });\n\n if (components.length === 0) {\n logger.warning(\"No components found\");\n return;\n }\n\n logger.log(\"\");\n components.forEach((component) => {\n logger.log(` • ${component}`);\n });\n\n logger.newLine();\n}\n\nasync function listThemesInfo(): Promise<void> {\n logger.section(\"🎨 Themes\");\n\n const themes = listThemes();\n\n if (themes.length === 0) {\n logger.warning(\"No themes found\");\n return;\n }\n\n logger.log(\"\");\n\n for (const theme of themes) {\n const themeDir = path.join(getThemesDir(), theme);\n const candidates = [\"theme.config.ts\", \"bundle-entry.ts\", \"manifest.ts\"];\n let manifestContent = \"\";\n for (const candidate of candidates) {\n const candidatePath = path.join(themeDir, candidate);\n if (fs.existsSync(candidatePath)) {\n manifestContent = fs.readFileSync(candidatePath, \"utf-8\");\n break;\n }\n }\n\n // Try to extract theme info from manifest\n const nameMatch = manifestContent.match(/name:\\s*[\"'](.+)[\"']/);\n const versionMatch = manifestContent.match(/version:\\s*[\"'](.+)[\"']/);\n const descMatch = manifestContent.match(/description:\\s*[\"'](.+)[\"']/);\n\n const displayName = nameMatch ? nameMatch[1] : theme;\n const version = versionMatch ? versionMatch[1] : \"unknown\";\n const description = descMatch ? descMatch[1] : \"\";\n\n logger.log(chalk.cyan(` ${displayName}`) + chalk.gray(` (v${version})`));\n if (description) {\n logger.log(chalk.gray(` ${description}`));\n }\n }\n\n logger.newLine();\n}\n","import path from \"path\";\nimport fs from \"fs-extra\";\nimport { logger } from \"../utils/logger\";\nimport {\n ensureOneXProject,\n getThemesDir,\n themeExists,\n} from \"../utils/file-helpers\";\n\ninterface ValidateOptions {\n theme?: string;\n fix?: boolean;\n}\n\ninterface ValidationIssue {\n type: \"error\" | \"warning\";\n file: string;\n message: string;\n}\n\nexport async function validateCommand(options: ValidateOptions): Promise<void> {\n logger.header(\"Validate Theme\");\n\n // Ensure we're in a OneX project\n ensureOneXProject();\n\n const issues: ValidationIssue[] = [];\n let themeToValidate: string | undefined;\n\n // If theme specified, validate that theme\n if (options.theme) {\n if (!themeExists(options.theme)) {\n logger.error(`Theme \"${options.theme}\" not found.`);\n process.exit(1);\n }\n themeToValidate = options.theme;\n } else {\n // Check if we're in a theme directory\n const isThemeDir = [\n \"theme.config.ts\",\n \"bundle-entry.ts\",\n \"manifest.ts\",\n ].some((f) => fs.existsSync(path.join(process.cwd(), f)));\n if (isThemeDir) {\n // We're in a theme directory\n themeToValidate = path.basename(process.cwd());\n logger.info(`Validating current theme: ${themeToValidate}`);\n } else {\n logger.error(\n \"Not in a theme directory and no --theme specified. Run from theme root or use --theme flag.\"\n );\n process.exit(1);\n }\n }\n\n const themePath = path.join(getThemesDir(), themeToValidate);\n\n logger.startSpinner(\"Running validation checks...\");\n\n // Check 1: Theme entry file exists (manifest.ts, theme.config.ts, or bundle-entry.ts)\n const entryFiles = [\"manifest.ts\", \"theme.config.ts\", \"bundle-entry.ts\"];\n const foundEntry = entryFiles.find((f) =>\n fs.existsSync(path.join(themePath, f))\n );\n if (!foundEntry) {\n issues.push({\n type: \"error\",\n file: \"manifest.ts / theme.config.ts / bundle-entry.ts\",\n message:\n \"No theme entry file found (need at least one of: manifest.ts, theme.config.ts, bundle-entry.ts)\",\n });\n } else if (foundEntry === \"manifest.ts\") {\n // Check manifest structure - just verify it has some exports\n const manifestContent = fs.readFileSync(\n path.join(themePath, foundEntry),\n \"utf-8\"\n );\n if (\n !manifestContent.includes(\"export const\") &&\n !manifestContent.includes(\"export default\") &&\n !manifestContent.includes(\"export interface\")\n ) {\n issues.push({\n type: \"error\",\n file: \"manifest.ts\",\n message: \"Must have at least one export\",\n });\n }\n }\n\n // Check 2: Theme config exists\n const configPath = path.join(themePath, \"theme.config.ts\");\n if (!fs.existsSync(configPath)) {\n issues.push({\n type: \"warning\",\n file: \"theme.config.ts\",\n message: \"Theme config file not found (recommended)\",\n });\n }\n\n // Check 3: Index file exists\n const indexPath = path.join(themePath, \"index.ts\");\n if (!fs.existsSync(indexPath)) {\n issues.push({\n type: \"warning\",\n file: \"index.ts\",\n message: \"Index file not found (recommended)\",\n });\n }\n\n // Check 4: Sections directory + file structure\n const sectionsDir = path.join(themePath, \"sections\");\n if (!fs.existsSync(sectionsDir)) {\n issues.push({\n type: \"warning\",\n file: \"sections/\",\n message: \"Sections directory not found\",\n });\n } else {\n // Validate each section\n const sections = fs\n .readdirSync(sectionsDir)\n .filter((name) =>\n fs.statSync(path.join(sectionsDir, name)).isDirectory()\n );\n\n for (const sectionName of sections) {\n const sectionPath = path.join(sectionsDir, sectionName);\n\n // Check for required files\n const schemaFile = path.join(sectionPath, `${sectionName}.schema.ts`);\n const defaultTemplate = path.join(\n sectionPath,\n `${sectionName}-default.tsx`\n );\n const indexFile = path.join(sectionPath, \"index.ts\");\n\n if (!fs.existsSync(schemaFile)) {\n issues.push({\n type: \"error\",\n file: `sections/${sectionName}/${sectionName}.schema.ts`,\n message: \"Section schema file missing\",\n });\n }\n\n if (!fs.existsSync(indexFile)) {\n issues.push({\n type: \"error\",\n file: `sections/${sectionName}/index.ts`,\n message: \"Section index file missing\",\n });\n }\n\n if (!fs.existsSync(defaultTemplate)) {\n issues.push({\n type: \"warning\",\n file: `sections/${sectionName}/${sectionName}-default.tsx`,\n message: \"Default template not found (recommended)\",\n });\n }\n }\n }\n\n // Check 5: Blocks directory\n const blocksDir = path.join(themePath, \"blocks\");\n if (fs.existsSync(blocksDir)) {\n const blocks = fs\n .readdirSync(blocksDir)\n .filter((name) => fs.statSync(path.join(blocksDir, name)).isDirectory());\n\n for (const blockName of blocks) {\n const blockPath = path.join(blocksDir, blockName);\n\n // Check for required files\n const schemaFile = path.join(blockPath, `${blockName}.schema.ts`);\n const componentFile = path.join(blockPath, `${blockName}.tsx`);\n const indexFile = path.join(blockPath, \"index.ts\");\n\n if (!fs.existsSync(schemaFile)) {\n issues.push({\n type: \"error\",\n file: `blocks/${blockName}/${blockName}.schema.ts`,\n message: \"Block schema file missing\",\n });\n }\n\n if (!fs.existsSync(componentFile)) {\n issues.push({\n type: \"error\",\n file: `blocks/${blockName}/${blockName}.tsx`,\n message: \"Block component file missing\",\n });\n }\n\n if (!fs.existsSync(indexFile)) {\n issues.push({\n type: \"error\",\n file: `blocks/${blockName}/index.ts`,\n message: \"Block index file missing\",\n });\n }\n }\n }\n\n // Check 6: Section code quality\n if (fs.existsSync(sectionsDir)) {\n const sections = fs\n .readdirSync(sectionsDir)\n .filter((name) =>\n fs.statSync(path.join(sectionsDir, name)).isDirectory()\n );\n\n for (const sectionName of sections) {\n const sectionPath = path.join(sectionsDir, sectionName);\n const tsxFiles = fs\n .readdirSync(sectionPath)\n .filter((f) => f.endsWith(\".tsx\") && !f.endsWith(\".schema.ts\"));\n\n for (const tsxFile of tsxFiles) {\n const filePath = path.join(sectionPath, tsxFile);\n const content = fs.readFileSync(filePath, \"utf-8\");\n const relPath = `sections/${sectionName}/${tsxFile}`;\n\n // Must have \"use client\"\n if (\n !content.includes('\"use client\"') &&\n !content.includes(\"'use client'\")\n ) {\n issues.push({\n type: \"error\",\n file: relPath,\n message: 'Missing \"use client\" directive at top of file',\n });\n }\n\n // Must use ComponentRenderer or BlockRenderer\n if (\n !content.includes(\"ComponentRenderer\") &&\n !content.includes(\"BlockRenderer\")\n ) {\n issues.push({\n type: \"warning\",\n file: relPath,\n message:\n \"No ComponentRenderer or BlockRenderer found — sections should use core renderers for content\",\n });\n }\n\n // Must have data-section-id\n if (!content.includes(\"data-section-id\")) {\n issues.push({\n type: \"error\",\n file: relPath,\n message:\n \"Missing data-section-id attribute — editor cannot select this section\",\n });\n }\n\n // Security: check for blocked patterns\n if (/\\beval\\s*\\(/.test(content)) {\n issues.push({\n type: \"error\",\n file: relPath,\n message: \"eval() detected — arbitrary code execution risk\",\n });\n }\n if (content.includes(\"document.cookie\")) {\n issues.push({\n type: \"error\",\n file: relPath,\n message: \"document.cookie access — session hijacking risk\",\n });\n }\n if (/\\brequire\\s*\\(/.test(content)) {\n issues.push({\n type: \"warning\",\n file: relPath,\n message: \"require() detected — themes should use ES module imports\",\n });\n }\n }\n }\n }\n\n // Check 7: Sections registered in registry (ERROR, not warning)\n const registryPath = path.join(themePath, \"sections-registry.ts\");\n const bundleEntryPath = path.join(themePath, \"bundle-entry.ts\");\n const registryContent = fs.existsSync(registryPath)\n ? fs.readFileSync(registryPath, \"utf-8\")\n : fs.existsSync(bundleEntryPath)\n ? fs.readFileSync(bundleEntryPath, \"utf-8\")\n : \"\";\n\n if (fs.existsSync(sectionsDir) && registryContent) {\n const sections = fs\n .readdirSync(sectionsDir)\n .filter((name) =>\n fs.statSync(path.join(sectionsDir, name)).isDirectory()\n );\n\n for (const sectionName of sections) {\n if (\n !registryContent.includes(`sections/${sectionName}`) &&\n !registryContent.includes(`\"${sectionName}\"`)\n ) {\n issues.push({\n type: \"error\",\n file: `sections/${sectionName}/`,\n message:\n \"Section not exported in sections-registry.ts or bundle-entry.ts — will not be included in build\",\n });\n }\n }\n }\n\n // Check 8: Schema type must match folder name\n if (fs.existsSync(sectionsDir)) {\n const schemaTypes = await loadSchemaTypes(themePath, sectionsDir);\n for (const { folderName, schemaType } of schemaTypes) {\n if (schemaType && schemaType !== folderName) {\n issues.push({\n type: \"error\",\n file: `sections/${folderName}/${folderName}.schema.ts`,\n message:\n `Schema type \"${schemaType}\" doesn't match folder name \"${folderName}\". ` +\n `Rename folder to \"${schemaType}/\" or change schema type to \"${folderName}\".`,\n });\n }\n }\n\n // Check 9: Page section types must have matching sections\n const pagesDir = path.join(themePath, \"pages\");\n if (fs.existsSync(pagesDir)) {\n const allSchemaTypeSet = new Set(\n schemaTypes.map((s) => s.schemaType || s.folderName)\n );\n const pageIssues = await validatePageSectionTypes(\n pagesDir,\n allSchemaTypeSet\n );\n issues.push(...pageIssues);\n }\n }\n\n logger.stopSpinner(true, \"Validation complete\");\n\n // Report results\n const errors = issues.filter((i) => i.type === \"error\");\n const warnings = issues.filter((i) => i.type === \"warning\");\n\n logger.newLine();\n\n if (errors.length === 0 && warnings.length === 0) {\n logger.success(\"✓ Theme is valid!\");\n logger.newLine();\n logger.info(`Theme: ${themeToValidate}`);\n logger.log(\" No issues found\");\n } else {\n if (errors.length > 0) {\n logger.error(`✗ Found ${errors.length} error(s):`);\n logger.newLine();\n errors.forEach((issue) => {\n logger.log(` ${issue.file}`);\n logger.log(` ${issue.message}`);\n });\n logger.newLine();\n }\n\n if (warnings.length > 0) {\n logger.warning(`⚠ Found ${warnings.length} warning(s):`);\n logger.newLine();\n warnings.forEach((issue) => {\n logger.log(` ${issue.file}`);\n logger.log(` ${issue.message}`);\n });\n logger.newLine();\n }\n\n if (errors.length > 0) {\n logger.error(\"Validation failed. Please fix the errors above.\");\n process.exit(1);\n } else {\n logger.warning(\n \"Validation passed with warnings. Consider addressing them.\"\n );\n }\n }\n}\n\n/**\n * Load schema types from all section schema files using regex.\n * Returns [{folderName, schemaType}] pairs.\n */\nasync function loadSchemaTypes(\n themePath: string,\n sectionsDir: string\n): Promise<Array<{ folderName: string; schemaType: string | null }>> {\n const results: Array<{ folderName: string; schemaType: string | null }> = [];\n const sections = fs\n .readdirSync(sectionsDir)\n .filter((name) => fs.statSync(path.join(sectionsDir, name)).isDirectory());\n\n for (const sectionName of sections) {\n const schemaFile = path.join(\n sectionsDir,\n sectionName,\n `${sectionName}.schema.ts`\n );\n if (!fs.existsSync(schemaFile)) {\n results.push({ folderName: sectionName, schemaType: null });\n continue;\n }\n\n const content = fs.readFileSync(schemaFile, \"utf-8\");\n // Match the schema type — look for `type:` that follows a SectionSchema assignment\n // or `export const`. This avoids matching field definition `type: \"text\"` etc.\n // Strategy: find all type: \"...\" matches and pick the one that is NOT a known field type.\n let schemaType: string | null = null;\n // Primary strategy: find type: after SectionSchema assignment.\n // Use [\\s\\S]*? to match across nested braces in the schema object.\n const schemaExportMatch = content.match(\n /:\\s*SectionSchema\\s*=\\s*\\{[\\s\\S]*?\\btype:\\s*[\"']([^\"']+)[\"']/\n );\n if (schemaExportMatch) {\n schemaType = schemaExportMatch[1];\n } else {\n // Fallback: find first type: value that is NOT a known field type\n const allTypeMatches = [\n ...content.matchAll(/\\btype:\\s*[\"']([^\"']+)[\"']/g),\n ];\n for (const m of allTypeMatches) {\n if (!FIELD_TYPES.has(m[1])) {\n schemaType = m[1];\n break;\n }\n }\n }\n results.push({\n folderName: sectionName,\n schemaType,\n });\n }\n\n return results;\n}\n\n/**\n * Check that all section types used in page configs exist in the theme's sections.\n * Only scans `type:` values inside the `sections: [...]` array block,\n * so page-level `type: \"home\"` etc. are naturally excluded.\n */\nasync function validatePageSectionTypes(\n pagesDir: string,\n validTypes: Set<string>\n): Promise<ValidationIssue[]> {\n const issues: ValidationIssue[] = [];\n const files = fs.readdirSync(pagesDir).filter((f) => f.match(/\\.(ts|js)$/));\n\n for (const file of files) {\n const content = fs.readFileSync(path.join(pagesDir, file), \"utf-8\");\n const pageName = file.replace(/\\.(ts|js)$/, \"\");\n\n // Extract only the sections array block to avoid matching page-level type\n const sectionsMatch = content.match(/\\bsections:\\s*\\[/);\n if (!sectionsMatch || sectionsMatch.index === undefined) continue;\n\n // Find the matching closing bracket for the sections array\n const startIdx = sectionsMatch.index + sectionsMatch[0].length;\n let depth = 1;\n let endIdx = startIdx;\n for (let i = startIdx; i < content.length && depth > 0; i++) {\n if (content[i] === \"[\") depth++;\n else if (content[i] === \"]\") depth--;\n endIdx = i;\n }\n const sectionsBlock = content.slice(startIdx, endIdx);\n\n // Match section type references only within the sections block\n const typeMatches = sectionsBlock.matchAll(/\\btype:\\s*[\"']([^\"']+)[\"']/g);\n for (const match of typeMatches) {\n const sectionType = match[1];\n if (!validTypes.has(sectionType)) {\n issues.push({\n type: \"error\",\n file: `pages/${file}`,\n message: `Page \"${pageName}\" uses section type \"${sectionType}\" which doesn't exist in sections/`,\n });\n }\n }\n }\n\n return issues;\n}\n\n/** Field types that are not section types */\nconst FIELD_TYPES = new Set([\n \"text\",\n \"textarea\",\n \"richtext\",\n \"number\",\n \"range\",\n \"toggle\",\n \"switch\",\n \"select\",\n \"radio\",\n \"checkbox\",\n \"color\",\n \"image\",\n \"video\",\n \"url\",\n \"link\",\n \"icon\",\n \"date\",\n \"datetime\",\n \"collection\",\n \"product\",\n \"blog\",\n \"page\",\n \"html\",\n \"code\",\n \"json\",\n \"array\",\n \"object\",\n \"group\",\n \"section\",\n \"boolean\",\n \"color_token\",\n \"color_background\",\n \"image_picker\",\n \"video_url\",\n \"font\",\n \"font_picker\",\n \"text_alignment\",\n \"inline_richtext\",\n \"repeater\",\n]);\n","import { spawn } from \"child_process\";\nimport path from \"path\";\nimport fs from \"fs-extra\";\nimport { logger } from \"../utils/logger\";\nimport { getThemesDir } from \"../utils/file-helpers\";\n\ninterface BuildOptions {\n theme?: string;\n production?: boolean;\n watch?: boolean;\n}\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n logger.header(\"Build Theme\");\n\n let themePath: string;\n let themeName: string;\n\n // Determine theme to build\n if (options.theme) {\n themeName = options.theme;\n // Try to find theme in workspace first, otherwise use current directory\n try {\n const workspaceThemePath = path.join(getThemesDir(), themeName);\n if (fs.existsSync(workspaceThemePath)) {\n themePath = workspaceThemePath;\n } else {\n themePath = path.join(process.cwd(), themeName);\n }\n } catch {\n // Not in a workspace, use current directory\n themePath = path.join(process.cwd(), themeName);\n }\n\n if (!fs.existsSync(themePath)) {\n logger.error(`Theme \"${themeName}\" not found.`);\n process.exit(1);\n }\n } else {\n // Check if we're in a theme directory\n const isThemeDir = [\n \"theme.config.ts\",\n \"bundle-entry.ts\",\n \"manifest.ts\",\n ].some((f) => fs.existsSync(path.join(process.cwd(), f)));\n if (isThemeDir) {\n themePath = process.cwd();\n themeName = path.basename(themePath);\n logger.info(`Building current theme: ${themeName}`);\n } else {\n logger.error(\n \"Not in a theme directory and no --theme specified. Run from theme root or use --theme flag.\"\n );\n process.exit(1);\n }\n }\n\n const packageJsonPath = path.join(themePath, \"package.json\");\n const hasPkgJson = fs.existsSync(packageJsonPath);\n\n if (!hasPkgJson) {\n logger.warning(\n \"No package.json found in theme. Skipping build (themes in monorepo are built via turbo).\"\n );\n logger.newLine();\n logger.info(\"To build all packages, run:\");\n logger.log(\" pnpm turbo build\");\n logger.newLine();\n logger.info(\"To build specific theme components:\");\n logger.log(\" pnpm turbo build --filter=./src/themes/*\");\n return;\n }\n\n // Run build steps\n logger.newLine();\n logger.section(\"Build Steps\");\n\n // Step 1: Type Check\n logger.startSpinner(\"Running type check...\");\n const typeCheckSuccess = await runCommand(\"pnpm\", [\"type-check\"], themePath);\n\n if (!typeCheckSuccess) {\n logger.stopSpinner(false, \"Type check failed\");\n logger.error(\"Fix type errors before building.\");\n process.exit(1);\n }\n logger.stopSpinner(true, \"Type check passed\");\n\n // Step 2: Lint\n logger.startSpinner(\"Running linter...\");\n const lintSuccess = await runCommand(\"pnpm\", [\"lint\"], themePath);\n\n if (!lintSuccess) {\n logger.stopSpinner(false, \"Lint failed\");\n logger.error(\"Fix lint errors before building.\");\n process.exit(1);\n }\n logger.stopSpinner(true, \"Lint passed\");\n\n // Step 3: Build\n // Detect if theme's build script would cause recursion (e.g., \"onexthm build\")\n const pkgJson = fs.readJsonSync(packageJsonPath);\n const buildScript = pkgJson.scripts?.build || \"\";\n const isRecursive =\n buildScript.includes(\"onexthm build\") ||\n buildScript.includes(\"onex build\") ||\n buildScript.includes(\"onex-cli build\");\n\n logger.startSpinner(\n options.watch ? \"Building (watch mode)...\" : \"Building...\"\n );\n\n let buildSuccess: boolean;\n\n if (isRecursive) {\n // Standalone theme: use embedded esbuild compilation\n const { compileStandaloneTheme } = await import(\"../utils/compile-theme\");\n buildSuccess = await compileStandaloneTheme(themePath, themeName);\n } else {\n // Monorepo: use existing pnpm build\n const buildArgs = options.watch ? [\"build\", \"--watch\"] : [\"build\"];\n buildSuccess = await runCommand(\"pnpm\", buildArgs, themePath);\n }\n\n if (!buildSuccess && !options.watch) {\n logger.stopSpinner(false, \"Build failed\");\n process.exit(1);\n }\n\n if (!options.watch) {\n logger.stopSpinner(true, \"Build complete\");\n\n // Show output location\n logger.newLine();\n logger.success(\"✓ Theme built successfully!\");\n logger.newLine();\n logger.info(`Theme: ${themeName}`);\n\n const distPath = path.join(themePath, \"dist\");\n if (fs.existsSync(distPath)) {\n logger.log(`Output: ${path.relative(process.cwd(), distPath)}`);\n\n // Show build stats\n const files = fs.readdirSync(distPath);\n logger.log(`Files: ${files.length}`);\n }\n }\n}\n\n/**\n * Run a command and return success status\n */\nfunction runCommand(\n command: string,\n args: string[],\n cwd: string\n): Promise<boolean> {\n return new Promise((resolve) => {\n const proc = spawn(command, args, {\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n shell: true,\n });\n\n let stdout = \"\";\n let stderr = \"\";\n\n proc.stdout.on(\"data\", (data) => {\n stdout += data.toString();\n });\n proc.stderr.on(\"data\", (data) => {\n stderr += data.toString();\n });\n\n proc.on(\"close\", (code) => {\n if (code !== 0) {\n // Show actual errors to the developer\n const output = (stderr + stdout).trim();\n if (output) {\n logger.newLine();\n for (const line of output.split(\"\\n\")) {\n const t = line.trim();\n if (!t) continue;\n if (\n t.includes(\"error\") ||\n t.includes(\"Error\") ||\n t.includes(\"TS\")\n ) {\n logger.log(` ❌ ${t}`);\n } else if (t.includes(\"warning\") || t.includes(\"Warning\")) {\n logger.log(` ⚠️ ${t}`);\n } else {\n logger.log(` ${t}`);\n }\n }\n }\n }\n resolve(code === 0);\n });\n\n proc.on(\"error\", () => {\n resolve(false);\n });\n });\n}\n","import { spawn } from \"child_process\";\nimport path from \"path\";\nimport fs from \"fs-extra\";\nimport archiver from \"archiver\";\nimport { logger } from \"../utils/logger\";\nimport { ensureOneXProject, getThemesDir } from \"../utils/file-helpers\";\n\ninterface PackageOptions {\n theme?: string;\n output?: string;\n name?: string;\n minify?: boolean;\n skipBuild?: boolean;\n}\n\nexport async function packageCommand(options: PackageOptions): Promise<void> {\n logger.header(\"Package Theme\");\n\n // Ensure we're in a OneX project\n ensureOneXProject();\n\n let themePath: string;\n let themeName: string;\n\n // Determine theme to package\n if (options.theme) {\n themeName = options.theme;\n themePath = path.join(getThemesDir(), themeName);\n\n if (!fs.existsSync(themePath)) {\n logger.error(`Theme \"${themeName}\" not found.`);\n process.exit(1);\n }\n } else {\n // Check if we're in a theme directory\n const isThemeDir = [\n \"theme.config.ts\",\n \"bundle-entry.ts\",\n \"manifest.ts\",\n ].some((f) => fs.existsSync(path.join(process.cwd(), f)));\n if (isThemeDir) {\n themePath = process.cwd();\n themeName = path.basename(themePath);\n logger.info(`Packaging current theme: ${themeName}`);\n } else {\n logger.error(\n \"Not in a theme directory and no --theme specified. Run from theme root or use --theme flag.\"\n );\n process.exit(1);\n }\n }\n\n // Read version from package.json\n const packageJsonPath = path.join(themePath, \"package.json\");\n let version = \"1.0.0\";\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = await fs.readJson(packageJsonPath);\n version = packageJson.version || \"1.0.0\";\n }\n\n logger.newLine();\n logger.info(`Theme: ${themeName}`);\n logger.info(`Version: ${version}`);\n logger.newLine();\n\n // Step 1: Build/compile theme (unless skipped)\n const compiledThemePath = path.join(\n process.cwd(),\n \"themes\",\n themeName,\n \"dist\"\n );\n\n if (!options.skipBuild) {\n logger.section(\"Step 1: Compile Theme\");\n logger.startSpinner(\"Compiling theme with esbuild...\");\n\n const compileArgs = [\"tsx\", \"scripts/compile-theme.ts\", themeName];\n if (options.minify) {\n compileArgs.push(\"--minify\");\n }\n\n const compileSuccess = await runCommand(\n compileArgs[0],\n compileArgs.slice(1)\n );\n\n if (!compileSuccess) {\n logger.stopSpinner(false, \"Compilation failed\");\n logger.error(\"Fix compilation errors before packaging.\");\n process.exit(1);\n }\n logger.stopSpinner(true, \"Theme compiled\");\n } else {\n logger.info(\"Skipping build (--skip-build flag)\");\n }\n\n // Check if compiled theme exists\n if (!fs.existsSync(compiledThemePath)) {\n logger.error(`Compiled theme not found at: ${compiledThemePath}`);\n logger.info(\"Run without --skip-build to compile first.\");\n process.exit(1);\n }\n\n // Step 2: Package compiled theme\n logger.newLine();\n logger.section(\"Step 2: Create Package\");\n\n // Determine output file name and path\n const packageName = options.name || `${themeName}-${version}`;\n const outputDir = options.output || path.join(process.cwd(), \"dist\");\n const outputPath = path.join(outputDir, `${packageName}.zip`);\n\n // Ensure output directory exists\n await fs.ensureDir(outputDir);\n\n // Create zip archive\n logger.startSpinner(\"Creating zip archive...\");\n\n try {\n await createZipArchive(compiledThemePath, outputPath);\n\n logger.stopSpinner(true, \"Package created\");\n\n // Get file size\n const stats = await fs.stat(outputPath);\n const sizeMB = (stats.size / 1024 / 1024).toFixed(2);\n\n // Show package info\n logger.newLine();\n logger.success(\"✓ Theme packaged successfully!\");\n logger.newLine();\n logger.info(`Package: ${packageName}.zip`);\n logger.log(`Size: ${sizeMB} MB`);\n logger.log(`Location: ${path.relative(process.cwd(), outputPath)}`);\n\n logger.newLine();\n logger.section(\"Next steps:\");\n logger.log(\n ` onexthm deploy --package ${path.relative(process.cwd(), outputPath)}`\n );\n } catch (error) {\n logger.stopSpinner(false, \"Failed to create package\");\n logger.error(\n error instanceof Error ? error.message : \"Unknown error occurred\"\n );\n process.exit(1);\n }\n}\n\n/**\n * Run a command and return success status\n */\nfunction runCommand(command: string, args: string[]): Promise<boolean> {\n return new Promise((resolve) => {\n const proc = spawn(command, args, {\n cwd: process.cwd(),\n stdio: \"pipe\",\n shell: true,\n });\n\n let hasError = false;\n\n proc.stderr.on(\"data\", (data) => {\n const message = data.toString();\n if (\n message.includes(\"error\") ||\n message.includes(\"Error\") ||\n message.includes(\"ERROR\")\n ) {\n hasError = true;\n }\n });\n\n proc.on(\"close\", (code) => {\n resolve(code === 0 && !hasError);\n });\n\n proc.on(\"error\", () => {\n resolve(false);\n });\n });\n}\n\n/**\n * Create a zip archive of the compiled theme\n */\nasync function createZipArchive(\n compiledThemePath: string,\n outputPath: string\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const output = fs.createWriteStream(outputPath);\n const archive = archiver(\"zip\", {\n zlib: { level: 9 }, // Maximum compression\n });\n\n output.on(\"close\", () => {\n resolve();\n });\n\n archive.on(\"error\", (err) => {\n reject(err);\n });\n\n archive.pipe(output);\n\n // Add all files from the compiled theme directory\n // This includes: bundle.js, chunks/, assets/, manifest.json, bundle-analysis.json\n archive.directory(compiledThemePath, false);\n\n archive.finalize();\n });\n}\n","import path from \"path\";\nimport fs from \"fs-extra\";\nimport FormData from \"form-data\";\nimport fetch from \"node-fetch\";\nimport { logger } from \"../utils/logger\";\nimport { ensureOneXProject } from \"../utils/file-helpers\";\n\ninterface DeployOptions {\n theme?: string;\n package?: string;\n apiUrl?: string;\n apiKey?: string;\n environment?: \"production\" | \"staging\" | \"development\";\n}\n\nexport async function deployCommand(options: DeployOptions): Promise<void> {\n logger.header(\"Deploy Theme\");\n\n // Ensure we're in a OneX project\n ensureOneXProject();\n\n // Determine package file to upload\n let packagePath: string;\n\n if (options.package) {\n // Use specified package file\n packagePath = path.resolve(options.package);\n } else if (options.theme) {\n // Look for package in dist/\n const distDir = path.join(process.cwd(), \"dist\");\n\n if (!fs.existsSync(distDir)) {\n logger.error(\"No dist/ directory found. Run 'onexthm package' first.\");\n process.exit(1);\n }\n\n const files = fs.readdirSync(distDir);\n const packageFiles = files.filter(\n (f) => f.startsWith(options.theme!) && f.endsWith(\".zip\")\n );\n\n if (packageFiles.length === 0) {\n logger.error(`No package found for theme \"${options.theme}\".`);\n logger.info(\"Run: onexthm package --theme \" + options.theme);\n process.exit(1);\n }\n\n // Use most recent package\n packageFiles.sort().reverse();\n packagePath = path.join(distDir, packageFiles[0]);\n } else {\n logger.error(\"Either --package or --theme must be specified.\");\n logger.info(\"Examples:\");\n logger.log(\" onexthm deploy --package dist/tinan-1.0.0.zip\");\n logger.log(\" onexthm deploy --theme tinan\");\n process.exit(1);\n }\n\n // Verify package exists\n if (!fs.existsSync(packagePath)) {\n logger.error(`Package not found: ${packagePath}`);\n process.exit(1);\n }\n\n // Get package info\n const stats = await fs.stat(packagePath);\n const sizeMB = (stats.size / 1024 / 1024).toFixed(2);\n const fileName = path.basename(packagePath);\n\n logger.newLine();\n logger.info(`Package: ${fileName}`);\n logger.log(`Size: ${sizeMB} MB`);\n logger.log(`Path: ${path.relative(process.cwd(), packagePath)}`);\n logger.newLine();\n\n // Determine API URL\n const apiUrl =\n options.apiUrl || process.env.ONEX_API_URL || \"http://localhost:3001\";\n\n const uploadEndpoint = `${apiUrl}/website-api/themes/upload`;\n\n logger.section(\"Uploading to API Server\");\n logger.info(`Endpoint: ${uploadEndpoint}`);\n logger.newLine();\n\n // Upload package\n logger.startSpinner(\"Uploading theme package...\");\n\n try {\n const formData = new FormData();\n formData.append(\"theme\", fs.createReadStream(packagePath), {\n filename: fileName,\n contentType: \"application/zip\",\n });\n\n // Add metadata\n if (options.apiKey) {\n formData.append(\"apiKey\", options.apiKey);\n }\n if (options.environment) {\n formData.append(\"environment\", options.environment);\n }\n\n const response = await fetch(uploadEndpoint, {\n method: \"POST\",\n body: formData,\n headers: formData.getHeaders(),\n });\n\n const result = (await response.json()) as {\n error?: string;\n message?: string;\n packageId?: string;\n themeId?: string;\n version?: string;\n url?: string;\n };\n\n if (!response.ok) {\n logger.stopSpinner(false, \"Upload failed\");\n logger.error(\n `Server returned ${response.status}: ${response.statusText}`\n );\n if (result.error) {\n logger.log(`Error: ${result.error}`);\n }\n process.exit(1);\n }\n\n logger.stopSpinner(true, \"Upload complete\");\n\n // Show deployment info\n logger.newLine();\n logger.success(\"✓ Theme deployed successfully!\");\n logger.newLine();\n\n if (result.themeId) {\n logger.info(`Theme ID: ${result.themeId}`);\n }\n if (result.version) {\n logger.info(`Version: ${result.version}`);\n }\n if (result.url) {\n logger.info(`Preview URL: ${result.url}`);\n }\n\n logger.newLine();\n logger.log(\"Theme is now available on the API server!\");\n } catch (error) {\n logger.stopSpinner(false, \"Upload failed\");\n logger.error(\n `Failed to upload: ${error instanceof Error ? error.message : String(error)}`\n );\n logger.newLine();\n logger.info(\"Make sure the API server is running:\");\n logger.log(\" cd apps/api-server && pnpm dev\");\n process.exit(1);\n }\n}\n","/**\n * `onexthm upload` is deprecated.\n *\n * It used to push bundle.zip / source.zip / latest.json directly to S3 via\n * the AWS SDK. The platform no longer exposes themes via direct S3 access,\n * so this path is broken by construction. The canonical replacement is\n * `onexthm publish`, which:\n *\n * 1. Authenticates against the platform (`onexthm login`)\n * 2. Registers the theme + version through the API\n * 3. Receives presigned PUT URLs for bundle.zip, source.zip, and any\n * content-hashed assets\n * 4. Uploads everything via HTTP and confirms the publish\n *\n * This file is kept (rather than deleted) so existing CI scripts that call\n * `onexthm upload` get a clear migration message instead of \"command not\n * found\". After all consumers migrate, the command can be removed from\n * cli.ts entirely.\n */\n\nimport chalk from \"chalk\";\nimport { logger } from \"../utils/logger\";\n\ninterface UploadOptions {\n theme?: string;\n bucket?: string;\n version?: string;\n environment?: \"staging\" | \"production\";\n dryRun?: boolean;\n skipSource?: boolean;\n sourceDir?: string;\n}\n\nexport async function uploadCommand(_options: UploadOptions): Promise<void> {\n logger.header(\"Upload Theme to S3 — DEPRECATED\");\n console.log();\n console.log(\n chalk.yellow.bold(\n \"`onexthm upload` is deprecated and no longer functional.\"\n )\n );\n console.log();\n console.log(\n \"The platform no longer exposes themes via direct S3 access, so this\"\n );\n console.log(\n \"command can no longer reach the bucket. Use `onexthm publish` instead:\"\n );\n console.log();\n console.log(chalk.cyan(\" cd themes/your-theme\"));\n console.log(chalk.cyan(\" onexthm login # one-time, refreshes JWT\"));\n console.log(\n chalk.cyan(\" onexthm publish # builds + uploads + confirms\")\n );\n console.log();\n console.log(\n \"`publish` does everything this command did (build, version bump,\"\n );\n console.log(\n \"bundle + source upload) plus content-hashed asset upload, security\"\n );\n console.log(\"scanning, and atomic version registration in one step.\");\n console.log();\n process.exit(1);\n}\n","import path from \"path\";\nimport fs from \"fs-extra\";\nimport ora from \"ora\";\nimport chalk from \"chalk\";\nimport AdmZip from \"adm-zip\";\nimport { logger } from \"../utils/logger\";\nimport { getApiUrl, type Env } from \"../utils/cli-auth\";\n\ninterface DownloadOptions {\n themeId?: string;\n version?: string;\n output?: string;\n env?: Env;\n /** @deprecated kept for backwards-compat with older scripts; ignored. */\n bucket?: string;\n}\n\ninterface ThemeManifest {\n themeId: string;\n version: string;\n compiledAt: string;\n counts: {\n sections: number;\n blocks: number;\n schemas: number;\n };\n output: {\n entry: string;\n chunks: string[];\n assets: string[];\n };\n [key: string]: any;\n}\n\n/**\n * Unwrap an API Gateway envelope `{ statusCode, body }` into the inner body.\n * Returns the input unchanged if it's not an envelope.\n */\nfunction unwrapEnvelope<T = any>(raw: any): T {\n if (raw && typeof raw === \"object\" && \"statusCode\" in raw && \"body\" in raw) {\n return raw.body as T;\n }\n return raw as T;\n}\n\n/**\n * Resolve the latest version for a theme by calling the public website-api\n * `/versions` Lambda.\n */\nasync function resolveLatestVersion(\n apiUrl: string,\n themeId: string\n): Promise<string> {\n const url = `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/versions`;\n let response: Response;\n try {\n response = await fetch(url, { cache: \"no-store\" });\n } catch (err) {\n throw new Error(\n `Network error contacting ${url}: ${err instanceof Error ? err.message : \"unknown\"}`\n );\n }\n if (!response.ok) {\n throw new Error(\n `Version lookup failed for \"${themeId}\" (HTTP ${response.status})`\n );\n }\n const raw = await response.json();\n const data = unwrapEnvelope<{ latest_version?: string }>(raw);\n const latest = data?.latest_version;\n if (typeof latest !== \"string\" || latest.length === 0) {\n throw new Error(\n `Theme \"${themeId}\" has no published versions yet (no latest_version in response)`\n );\n }\n return latest;\n}\n\n/**\n * Download bundle.zip via the public website-api `/download` Lambda.\n */\nasync function downloadBundleZip(\n apiUrl: string,\n themeId: string,\n version: string\n): Promise<Buffer> {\n const url = `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/${encodeURIComponent(version)}/download`;\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(\n `Bundle download failed for \"${themeId}@${version}\" (HTTP ${response.status})`\n );\n }\n\n const contentType = response.headers.get(\"content-type\") || \"\";\n\n if (contentType.includes(\"application/json\")) {\n const raw = await response.json();\n const envelope =\n raw && typeof raw === \"object\" && \"statusCode\" in raw\n ? raw\n : { body: raw };\n const body = envelope.body;\n if (typeof body !== \"string\") {\n throw new Error(\n \"Unexpected /download response shape: expected base64 string in body\"\n );\n }\n return Buffer.from(body, \"base64\");\n }\n\n const arrayBuffer = await response.arrayBuffer();\n return Buffer.from(arrayBuffer);\n}\n\n/**\n * Create compatibility files for module resolution.\n */\nasync function createCompatibilityFiles(\n outputDir: string,\n manifest: ThemeManifest\n): Promise<void> {\n const entryFile = manifest.output?.entry || \"bundle-entry.js\";\n\n if (\n entryFile !== \"bundle-entry.js\" &&\n entryFile.startsWith(\"bundle-entry-\")\n ) {\n const hashedPath = path.join(outputDir, entryFile);\n const stablePath = path.join(outputDir, \"bundle-entry.js\");\n if (await fs.pathExists(hashedPath)) {\n await fs.copy(hashedPath, stablePath);\n const mapPath = hashedPath + \".map\";\n if (await fs.pathExists(mapPath)) {\n await fs.copy(mapPath, stablePath + \".map\");\n }\n }\n }\n\n const sectionsRegistryPath = path.join(outputDir, \"sections-registry.js\");\n const content = `// Re-export all sections from bundle-entry\\n// This file exists to maintain compatibility with the import path\\nexport * from './bundle-entry.js';\\n`;\n await fs.writeFile(sectionsRegistryPath, content, \"utf-8\");\n\n const pkgJsonPath = path.join(outputDir, \"package.json\");\n await fs.writeFile(pkgJsonPath, '{\\n \"type\": \"module\"\\n}\\n', \"utf-8\");\n}\n\n/**\n * Show helpful error message when the download fails.\n */\nfunction showDownloadFailureHelp(themeId: string, apiUrl: string): void {\n console.log();\n logger.error(chalk.red.bold(\"Theme download failed\"));\n console.log();\n console.log(chalk.yellow(\"Possible reasons:\"));\n console.log(\n chalk.gray(\" 1. Theme has not been published yet (run `onexthm publish`)\")\n );\n console.log(\n chalk.gray(\n \" 2. Theme ID is wrong (typo in --theme-id or THEME_ID env var)\"\n )\n );\n console.log(\n chalk.gray(\" 3. API base URL is wrong or the website-api is unreachable\")\n );\n console.log();\n console.log(chalk.cyan.bold(\"To fix this:\"));\n console.log();\n console.log(chalk.white(\"1. Verify the theme is published:\"));\n console.log(\n chalk.gray(\n ` curl -s ${apiUrl}/website-api/themes/${themeId}/versions | jq .latest_version`\n )\n );\n console.log();\n console.log(chalk.white(\"2. Check API URL configuration:\"));\n console.log(chalk.gray(` Current API URL: ${apiUrl}`));\n console.log(chalk.gray(\" Override with ONEXTHM_API_URL env var if needed\"));\n console.log();\n console.log(chalk.white(\"3. Pin a specific version (CI/production):\"));\n console.log(\n chalk.gray(` THEME_VERSION=1.2.3 onexthm download --theme-id ${themeId}`)\n );\n console.log();\n}\n\n/**\n * Download a published theme via the website-api Lambda endpoints.\n */\nexport async function downloadCommand(options: DownloadOptions): Promise<void> {\n logger.header(\"Download Theme\");\n\n const env: Env = options.env ?? \"dev\";\n const apiUrl = getApiUrl(env);\n\n logger.info(`Environment: ${env} (${apiUrl})`);\n\n const spinner = ora(\"Initializing download...\").start();\n\n if (options.bucket) {\n spinner.stop();\n logger.warning(\n \"--bucket is deprecated and ignored. Themes are now served via HTTP from the website-api Lambda.\"\n );\n spinner.start();\n }\n\n try {\n const themeId =\n options.themeId ||\n process.env.NEXT_PUBLIC_THEME_ID ||\n process.env.THEME_ID;\n const requestedVersion =\n options.version || process.env.THEME_VERSION || \"latest\";\n const outputDir = options.output || \"./active-theme\";\n\n if (!themeId) {\n spinner.fail(\n chalk.red(\n \"Theme ID not specified. Use --theme-id or set NEXT_PUBLIC_THEME_ID environment variable.\"\n )\n );\n process.exit(1);\n }\n\n spinner.text = `Resolving ${themeId}@${requestedVersion}...`;\n\n let resolvedVersion = requestedVersion;\n if (requestedVersion === \"latest\") {\n resolvedVersion = await resolveLatestVersion(apiUrl, themeId);\n spinner.succeed(\n `Resolved latest version: ${chalk.cyan(resolvedVersion)}`\n );\n\n const isCI = !!(\n process.env.CI ||\n process.env.GITHUB_ACTIONS ||\n process.env.VERCEL\n );\n if (isCI) {\n console.log(\n chalk.yellow(\n `\\n Warning: Resolved \"latest\" to ${resolvedVersion} in CI environment.\\n` +\n ` For reproducible builds, pin to a specific version:\\n` +\n ` THEME_VERSION=${resolvedVersion}\\n`\n )\n );\n }\n } else {\n spinner.succeed(`Using version: ${chalk.cyan(resolvedVersion)}`);\n }\n\n spinner.start(\n `Downloading bundle.zip for ${themeId}@${resolvedVersion}...`\n );\n const zipBuffer = await downloadBundleZip(apiUrl, themeId, resolvedVersion);\n const sizeMB = (zipBuffer.length / 1024 / 1024).toFixed(2);\n spinner.succeed(`Downloaded bundle.zip (${sizeMB} MB)`);\n\n spinner.start(\"Extracting bundle...\");\n await fs.remove(outputDir);\n await fs.ensureDir(outputDir);\n\n const zip = new AdmZip(zipBuffer);\n zip.extractAllTo(outputDir, true);\n\n const entries = zip.getEntries().filter((e) => !e.isDirectory);\n spinner.succeed(`Extracted ${entries.length} files to ${outputDir}`);\n\n const manifestPath = path.join(outputDir, \"manifest.json\");\n const manifest: ThemeManifest = await fs.readJson(manifestPath);\n await createCompatibilityFiles(outputDir, manifest);\n\n console.log();\n logger.success(chalk.green.bold(\"Theme downloaded successfully!\"));\n console.log();\n console.log(\n chalk.cyan(\" Theme: \") + chalk.white(`${themeId}@${resolvedVersion}`)\n );\n console.log(chalk.cyan(\" Env: \") + chalk.white(env));\n console.log(chalk.cyan(\" Source: \") + chalk.white(apiUrl));\n console.log(chalk.cyan(\" Output: \") + chalk.white(outputDir));\n console.log(chalk.cyan(\" Files: \") + chalk.white(entries.length));\n if (manifest.counts) {\n console.log(\n chalk.cyan(\" Sections:\") + chalk.white(` ${manifest.counts.sections}`)\n );\n }\n console.log();\n } catch (error: any) {\n spinner.fail(chalk.red(\"Download failed\"));\n logger.error(error.message);\n\n const themeId =\n options.themeId ||\n process.env.NEXT_PUBLIC_THEME_ID ||\n process.env.THEME_ID ||\n \"unknown\";\n\n showDownloadFailureHelp(themeId, apiUrl);\n process.exit(1);\n }\n}\n","import path from \"path\";\nimport fs from \"fs-extra\";\nimport ora from \"ora\";\nimport chalk from \"chalk\";\nimport { spawn } from \"child_process\";\nimport AdmZip from \"adm-zip\";\nimport { logger } from \"../utils/logger\";\nimport { glob } from \"glob\";\nimport {\n getApiUrl,\n getValidTokens,\n authenticatedFetch,\n type Env,\n} from \"../utils/cli-auth\";\n\ninterface CloneOptions {\n version?: string;\n output?: string;\n env?: Env;\n /** @deprecated kept for backwards-compat with older scripts; ignored. */\n bucket?: string;\n install?: boolean;\n name?: string;\n}\n\n/**\n * Unwrap an API Gateway envelope `{ statusCode, body }` into the inner body.\n */\nfunction unwrapEnvelope<T = any>(raw: any): T {\n if (raw && typeof raw === \"object\" && \"statusCode\" in raw && \"body\" in raw) {\n return raw.body as T;\n }\n return raw as T;\n}\n\n/**\n * Resolve the latest version of a theme via the public website-api `/versions` Lambda.\n */\nasync function resolveLatestVersion(\n apiUrl: string,\n themeId: string\n): Promise<string> {\n const url = `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/versions`;\n const response = await fetch(url, { cache: \"no-store\" });\n if (!response.ok) {\n throw new Error(\n `Version lookup failed for \"${themeId}\" (HTTP ${response.status})`\n );\n }\n const raw = await response.json();\n const data = unwrapEnvelope<{ latest_version?: string }>(raw);\n const latest = data?.latest_version;\n if (typeof latest !== \"string\" || latest.length === 0) {\n throw new Error(`Theme \"${themeId}\" has no published versions yet`);\n }\n return latest;\n}\n\n/**\n * Fetch source.zip via the authenticated `/source` Lambda.\n */\nasync function fetchSourceZip(\n apiUrl: string,\n themeId: string,\n version: string,\n env: Env\n): Promise<Buffer> {\n const url = `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/source?version=${encodeURIComponent(version)}`;\n const response = await authenticatedFetch(url, { method: \"GET\" }, env);\n if (!response.ok) {\n if (response.status === 404) {\n throw new Error(\n `Source not found for ${themeId}@${version}. The theme may not have been published with source upload enabled.`\n );\n }\n if (response.status === 401 || response.status === 403) {\n throw new Error(\n `Not authorized to download source for \"${themeId}\". Run \\`onexthm login --env ${env}\\` first.`\n );\n }\n throw new Error(\n `Source URL request failed for \"${themeId}@${version}\" (HTTP ${response.status})`\n );\n }\n const raw = await response.json();\n const data = unwrapEnvelope<{ download_url?: string }>(raw);\n const presignedUrl = data?.download_url;\n if (typeof presignedUrl !== \"string\" || presignedUrl.length === 0) {\n throw new Error(\"Unexpected /source response shape: missing download_url\");\n }\n\n const zipResponse = await fetch(presignedUrl);\n if (!zipResponse.ok) {\n throw new Error(\n `Presigned source download failed (HTTP ${zipResponse.status})`\n );\n }\n const arrayBuffer = await zipResponse.arrayBuffer();\n return Buffer.from(arrayBuffer);\n}\n\n/**\n * Run pnpm install in a directory\n */\nfunction runInstall(cwd: string): Promise<boolean> {\n return new Promise((resolve) => {\n const proc = spawn(\"pnpm\", [\"install\"], {\n cwd,\n stdio: \"inherit\",\n shell: true,\n });\n proc.on(\"close\", (code) => resolve(code === 0));\n proc.on(\"error\", () => resolve(false));\n });\n}\n\n/**\n * Prompt user for new theme name using inquirer\n */\nasync function promptThemeName(originalName: string): Promise<string> {\n const { default: inquirer } = await import(\"inquirer\");\n const { themeName } = await inquirer.prompt([\n {\n type: \"input\",\n name: \"themeName\",\n message: \"New theme name (kebab-case):\",\n default: `my-${originalName}`,\n validate: (input: string) => {\n if (!/^[a-z][a-z0-9-]*$/.test(input)) {\n return \"Theme name must be kebab-case (lowercase letters, numbers, hyphens)\";\n }\n if (input === originalName) {\n return `Name must differ from the original theme \"${originalName}\"`;\n }\n return true;\n },\n },\n ]);\n return themeName;\n}\n\n/**\n * Rename all theme references in the cloned source.\n */\nasync function renameTheme(\n themeDir: string,\n oldName: string,\n newName: string\n): Promise<void> {\n const oldPrefix = `${oldName}-`;\n const newPrefix = `${newName}-`;\n const newDisplayName = newName\n .split(\"-\")\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(\" \");\n\n const pkgPath = path.join(themeDir, \"package.json\");\n if (await fs.pathExists(pkgPath)) {\n const pkg = await fs.readJson(pkgPath);\n pkg.name = `@onex-themes/${newName}`;\n if (pkg.description) {\n pkg.description = pkg.description.replace(\n new RegExp(oldName, \"gi\"),\n newDisplayName\n );\n }\n pkg.version = \"1.0.0\";\n\n if (pkg.devDependencies?.[\"@onexapis/cli\"]) {\n delete pkg.devDependencies[\"@onexapis/cli\"];\n }\n\n await fs.writeJson(pkgPath, pkg, { spaces: 2 });\n }\n\n const configPath = path.join(themeDir, \"theme.config.ts\");\n if (await fs.pathExists(configPath)) {\n let content = await fs.readFile(configPath, \"utf-8\");\n content = content.replace(/id:\\s*\"[^\"]*\"/, `id: \"${newName}\"`);\n content = content.replace(\n /name:\\s*\"[^\"]*Theme\"/,\n `name: \"${newDisplayName} Theme\"`\n );\n await fs.writeFile(configPath, content);\n }\n\n const layoutPath = path.join(themeDir, \"theme.layout.ts\");\n if (await fs.pathExists(layoutPath)) {\n let content = await fs.readFile(layoutPath, \"utf-8\");\n content = content.replace(/id:\\s*\"[^\"]*\"/, `id: \"${newName}\"`);\n content = content.replace(\n /name:\\s*\"[^\"]*Theme\"/,\n `name: \"${newDisplayName} Theme\"`\n );\n await fs.writeFile(layoutPath, content);\n }\n\n const oldDisplayName = oldName\n .split(\"-\")\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(\" \");\n\n const tsFiles = await glob(\"**/*.ts\", { cwd: themeDir, nodir: true });\n for (const file of tsFiles) {\n const filePath = path.join(themeDir, file);\n let content = await fs.readFile(filePath, \"utf-8\");\n const original = content;\n\n content = content.replace(\n new RegExp(`\"${oldPrefix}`, \"g\"),\n `\"${newPrefix}`\n );\n content = content.replace(\n new RegExp(`themeId:\\\\s*\"${oldName}\"`, \"g\"),\n `themeId: \"${newName}\"`\n );\n content = content.replace(\n new RegExp(`${oldDisplayName} Theme`, \"g\"),\n `${newDisplayName} Theme`\n );\n\n if (content !== original) {\n await fs.writeFile(filePath, content);\n }\n }\n}\n\n/**\n * Clone theme source code via the website-api.\n */\nexport async function cloneCommand(\n themeName: string,\n options: CloneOptions\n): Promise<void> {\n logger.header(\"Clone Theme Source\");\n\n const env: Env = options.env ?? \"dev\";\n const apiUrl = getApiUrl(env);\n\n logger.info(`Environment: ${env} (${apiUrl})`);\n\n if (options.bucket) {\n logger.warning(\n \"--bucket is deprecated and ignored. Source is now fetched via HTTP from the website-api Lambda.\"\n );\n }\n\n const tokens = await getValidTokens(env);\n if (!tokens) {\n logger.error(\n `Not logged in to ${env} environment. Run: onexthm login --env ${env}`\n );\n process.exit(1);\n }\n\n let newName = options.name;\n if (!newName) {\n newName = await promptThemeName(themeName);\n }\n\n const spinner = ora(\"Initializing clone...\").start();\n\n try {\n const outputDir = options.output || path.resolve(process.cwd(), newName);\n\n if (await fs.pathExists(outputDir)) {\n spinner.fail(chalk.red(`Directory already exists: ${outputDir}`));\n logger.info(\n chalk.gray(\n \"Use -o to specify a different output directory, or remove the existing directory.\"\n )\n );\n process.exit(1);\n }\n\n let version = options.version || \"latest\";\n if (version === \"latest\") {\n spinner.text = \"Resolving latest version...\";\n version = await resolveLatestVersion(apiUrl, themeName);\n spinner.succeed(`Resolved latest version: ${chalk.cyan(version)}`);\n }\n\n spinner.start(`Downloading source.zip for ${themeName}@${version}...`);\n let zipBuffer: Buffer;\n try {\n zipBuffer = await fetchSourceZip(apiUrl, themeName, version, env);\n } catch (error: any) {\n spinner.fail(chalk.red(error.message));\n console.log();\n console.log(\n chalk.gray(\n `Verify the theme is published: curl -s ${apiUrl}/website-api/themes/${themeName}/versions`\n )\n );\n console.log();\n process.exit(1);\n }\n\n const sizeMB = (zipBuffer.length / 1024 / 1024).toFixed(2);\n spinner.succeed(`Downloaded source.zip (${sizeMB} MB)`);\n\n spinner.start(`Extracting to ${outputDir}...`);\n await fs.ensureDir(outputDir);\n\n const zip = new AdmZip(zipBuffer);\n zip.extractAllTo(outputDir, true);\n\n const entries = zip.getEntries().filter((e) => !e.isDirectory);\n spinner.succeed(`Extracted ${entries.length} files`);\n\n spinner.start(\n `Renaming theme: ${chalk.gray(themeName)} → ${chalk.cyan(newName)}...`\n );\n await renameTheme(outputDir, themeName, newName);\n spinner.succeed(\n `Renamed theme: ${chalk.gray(themeName)} → ${chalk.cyan(newName)}`\n );\n\n const envExamplePath = path.join(outputDir, \".env.example\");\n if (!(await fs.pathExists(envExamplePath))) {\n await fs.writeFile(\n envExamplePath,\n [\n \"# API Configuration (enables real data in preview)\",\n \"# Get your Company ID from the OneX dashboard\",\n `NEXT_PUBLIC_API_URL=${apiUrl}`,\n \"NEXT_PUBLIC_COMPANY_ID=\",\n \"\",\n ].join(\"\\n\")\n );\n }\n\n const mcpJsonPath = path.join(outputDir, \".mcp.json\");\n if (await fs.pathExists(mcpJsonPath)) {\n const { default: inquirerMod } = await import(\"inquirer\");\n const { figmaApiKey } = await inquirerMod.prompt([\n {\n type: \"password\",\n name: \"figmaApiKey\",\n message:\n \"Figma API Key (optional, for Figma-to-code MCP — press Enter to skip):\",\n },\n ]);\n let mcpContent = await fs.readFile(mcpJsonPath, \"utf-8\");\n if (figmaApiKey) {\n mcpContent = mcpContent.replace(\"__FIGMA_API_KEY__\", figmaApiKey);\n } else {\n try {\n const mcpJson = JSON.parse(mcpContent);\n delete mcpJson.mcpServers?.figma;\n mcpContent = JSON.stringify(mcpJson, null, 2) + \"\\n\";\n } catch {}\n }\n await fs.writeFile(mcpJsonPath, mcpContent, \"utf-8\");\n }\n\n if (options.install !== false) {\n const hasPkgJson = await fs.pathExists(\n path.join(outputDir, \"package.json\")\n );\n if (hasPkgJson) {\n spinner.start(\"Installing dependencies...\");\n const success = await runInstall(outputDir);\n if (success) {\n spinner.succeed(\"Dependencies installed\");\n } else {\n spinner.warn(\n chalk.yellow(\n \"Failed to install dependencies — run 'pnpm install' manually\"\n )\n );\n }\n }\n }\n\n console.log();\n logger.success(chalk.green.bold(\"Theme cloned successfully!\"));\n console.log();\n console.log(\n chalk.cyan(\" Source: \") + chalk.gray(`${themeName}@${version}`)\n );\n console.log(chalk.cyan(\" Env: \") + chalk.white(env));\n console.log(chalk.cyan(\" Theme: \") + chalk.white(newName));\n console.log(chalk.cyan(\" Location: \") + chalk.white(outputDir));\n console.log(chalk.cyan(\" Files: \") + chalk.white(entries.length));\n console.log();\n console.log(chalk.cyan(\"Next steps:\"));\n console.log(chalk.gray(` cd ${path.relative(process.cwd(), outputDir)}`));\n console.log(\n chalk.gray(\" cp .env.example .env # then add your Company ID\")\n );\n if (options.install === false) {\n console.log(chalk.gray(\" pnpm install\"));\n }\n console.log(chalk.gray(\" onexthm build\"));\n console.log();\n } catch (error: any) {\n spinner.fail(chalk.red(`Clone failed: ${error.message}`));\n logger.error(error.stack || error.message);\n process.exit(1);\n }\n}\n","import path from \"path\";\nimport fsNode from \"fs/promises\";\nimport fs from \"fs-extra\";\nimport chokidar from \"chokidar\";\nimport { logger } from \"../utils/logger\";\nimport { getThemesDir } from \"../utils/file-helpers\";\nimport {\n compileStandaloneThemeDev,\n compilePreviewRuntime,\n generateManifest,\n} from \"../utils/compile-theme\";\nimport { createDevServer } from \"../utils/dev-server\";\n\ninterface DevOptions {\n theme?: string;\n port?: string;\n open?: boolean;\n}\n\nexport async function devCommand(options: DevOptions): Promise<void> {\n logger.header(\"OneX Dev Server\");\n\n // 1. Resolve theme path (same pattern as build.ts)\n let themePath: string;\n let themeName: string;\n\n if (options.theme) {\n themeName = options.theme;\n try {\n const workspaceThemePath = path.join(getThemesDir(), themeName);\n if (fs.existsSync(workspaceThemePath)) {\n themePath = workspaceThemePath;\n } else {\n themePath = path.join(process.cwd(), themeName);\n }\n } catch {\n themePath = path.join(process.cwd(), themeName);\n }\n\n if (!fs.existsSync(themePath)) {\n logger.error(`Theme \"${themeName}\" not found.`);\n process.exit(1);\n }\n } else {\n const isThemeDir = [\n \"theme.config.ts\",\n \"bundle-entry.ts\",\n \"manifest.ts\",\n ].some((f) => fs.existsSync(path.join(process.cwd(), f)));\n if (isThemeDir) {\n themePath = process.cwd();\n themeName = path.basename(themePath);\n } else {\n logger.error(\n \"Not in a theme directory and no --theme specified. Run from theme root or use --theme flag.\"\n );\n process.exit(1);\n }\n }\n\n // 2. Compile preview runtime (one-time)\n logger.startSpinner(\"Compiling preview runtime...\");\n const previewRuntimePath = await compilePreviewRuntime(themePath);\n logger.stopSpinner(true, \"Preview runtime compiled\");\n\n // 3. Initial theme compile (incremental context)\n logger.startSpinner(\"Compiling theme...\");\n const { context, outputDir } = await compileStandaloneThemeDev(\n themePath,\n themeName\n );\n logger.stopSpinner(true, \"Theme compiled\");\n\n // 4. Start dev server\n const port = Number(options.port) || 3456;\n const server = createDevServer({\n port,\n distDir: outputDir,\n previewRuntimePath,\n themeName,\n themePath,\n });\n\n // 5. Start file watcher\n const watcher = chokidar.watch(\n [\n \"sections\",\n \"blocks\",\n \"components\",\n \"pages\",\n \"theme.config.ts\",\n \"theme.layout.ts\",\n \"bundle-entry.ts\",\n \"sections-registry.ts\",\n ],\n { cwd: themePath, ignoreInitial: true }\n );\n\n let debounceTimer: ReturnType<typeof setTimeout> | undefined;\n\n watcher.on(\"all\", (_event, filePath) => {\n clearTimeout(debounceTimer);\n debounceTimer = setTimeout(async () => {\n logger.info(`File changed: ${filePath}`);\n try {\n await context.rebuild();\n await generateManifest(themeName, themePath, outputDir);\n server.broadcast({ type: \"reload\", timestamp: Date.now() });\n logger.success(\"Rebuilt successfully\");\n } catch (error) {\n server.broadcast({ type: \"error\", message: String(error) });\n logger.error(`Rebuild failed: ${error}`);\n }\n }, 150);\n });\n\n // 6. Print URLs\n logger.newLine();\n logger.success(`Theme compiled: ${themeName}`);\n logger.info(`Preview: http://localhost:${port}`);\n logger.info(\"Watching for changes...\");\n logger.newLine();\n\n // 7. Open browser\n if (options.open !== false) {\n const open = await import(\"open\");\n open.default(`http://localhost:${port}`);\n }\n\n // 8. Keep alive until Ctrl+C\n process.on(\"SIGINT\", async () => {\n logger.newLine();\n logger.info(\"Shutting down...\");\n watcher.close();\n await context.dispose();\n server.close();\n // Clean up process shim left for incremental rebuilds\n const shimPath = path.join(outputDir, \".process-shim.js\");\n try {\n await fsNode.unlink(shimPath);\n } catch {}\n process.exit(0);\n });\n}\n","import path from \"path\";\nimport os from \"os\";\nimport fs from \"fs-extra\";\nimport inquirer from \"inquirer\";\nimport { logger } from \"../utils/logger\";\n\nconst CONFIG_DIR = path.join(os.homedir(), \".onexthm\");\nconst CONFIG_FILE = path.join(CONFIG_DIR, \".env\");\n\ninterface ConfigEntry {\n key: string;\n label: string;\n required: boolean;\n secret?: boolean;\n defaultValue?: string;\n}\n\nconst CONFIG_ENTRIES: ConfigEntry[] = [\n {\n key: \"AWS_ACCESS_KEY_ID\",\n label: \"AWS Access Key ID\",\n required: true,\n },\n {\n key: \"AWS_SECRET_ACCESS_KEY\",\n label: \"AWS Secret Access Key\",\n required: true,\n secret: true,\n },\n {\n key: \"AWS_REGION\",\n label: \"AWS Region\",\n required: false,\n defaultValue: \"ap-southeast-1\",\n },\n {\n key: \"BUCKET_NAME\",\n label: \"S3 Bucket Name\",\n required: false,\n defaultValue: \"theme-s3-bucket\",\n },\n {\n key: \"NEXT_PUBLIC_API_URL\",\n label: \"API URL\",\n required: false,\n defaultValue: \"https://platform-dev.onexeos.com\",\n },\n {\n key: \"NEXT_PUBLIC_COMPANY_ID\",\n label: \"Company ID\",\n required: false,\n },\n];\n\n/**\n * Parse existing .env file into a key-value map.\n */\nfunction parseEnvFile(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const line of content.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n const eqIndex = trimmed.indexOf(\"=\");\n if (eqIndex === -1) continue;\n const key = trimmed.slice(0, eqIndex).trim();\n const value = trimmed.slice(eqIndex + 1).trim();\n result[key] = value;\n }\n return result;\n}\n\n/**\n * Serialize key-value map back to .env format.\n */\nfunction serializeEnv(values: Record<string, string>): string {\n const lines: string[] = [\n \"# OneX CLI Configuration\",\n \"# Generated by: onexthm config\",\n \"\",\n ];\n\n // Group: AWS\n lines.push(\"# AWS / S3 Configuration\");\n for (const key of [\n \"AWS_ACCESS_KEY_ID\",\n \"AWS_SECRET_ACCESS_KEY\",\n \"AWS_REGION\",\n \"BUCKET_NAME\",\n ]) {\n if (values[key]) lines.push(`${key}=${values[key]}`);\n }\n\n lines.push(\"\");\n\n // Group: API\n lines.push(\"# API Configuration\");\n for (const key of [\"NEXT_PUBLIC_API_URL\", \"NEXT_PUBLIC_COMPANY_ID\"]) {\n if (values[key]) lines.push(`${key}=${values[key]}`);\n }\n\n // Preserve any extra keys not in our schema\n const knownKeys = new Set(CONFIG_ENTRIES.map((e) => e.key));\n const extraKeys = Object.keys(values).filter((k) => !knownKeys.has(k));\n if (extraKeys.length > 0) {\n lines.push(\"\");\n lines.push(\"# Other\");\n for (const key of extraKeys) {\n lines.push(`${key}=${values[key]}`);\n }\n }\n\n lines.push(\"\");\n return lines.join(\"\\n\");\n}\n\nexport async function configCommand(): Promise<void> {\n logger.header(\"OneX CLI Configuration\");\n\n // Load existing config\n let existing: Record<string, string> = {};\n try {\n const content = await fs.readFile(CONFIG_FILE, \"utf-8\");\n existing = parseEnvFile(content);\n logger.info(`Existing config found at: ${CONFIG_FILE}`);\n logger.newLine();\n } catch {\n logger.info(\"No existing config found. Let's set one up.\");\n logger.newLine();\n }\n\n // Prompt for each entry\n const answers: Record<string, string> = {};\n\n for (const entry of CONFIG_ENTRIES) {\n const currentValue = existing[entry.key] || \"\";\n const defaultVal = currentValue || entry.defaultValue || \"\";\n\n const displayDefault =\n entry.secret && currentValue\n ? currentValue.slice(0, 4) + \"****\" + currentValue.slice(-4)\n : defaultVal;\n\n const { value } = await inquirer.prompt([\n {\n type: entry.secret ? \"password\" : \"input\",\n name: \"value\",\n message: `${entry.label}${entry.required ? \" (required)\" : \"\"}:`,\n default: entry.secret ? undefined : defaultVal,\n ...(entry.secret && currentValue\n ? {\n suffix: ` (current: ${displayDefault}, press Enter to keep)`,\n }\n : {}),\n validate: (input: string) => {\n if (entry.required && !input && !currentValue) {\n return `${entry.label} is required`;\n }\n return true;\n },\n },\n ]);\n\n // Keep existing value if user pressed Enter on a secret field\n answers[entry.key] = value || currentValue;\n }\n\n // Merge with existing (preserving unknown keys)\n const merged = { ...existing, ...answers };\n\n // Remove empty values\n for (const key of Object.keys(merged)) {\n if (!merged[key]) delete merged[key];\n }\n\n // Write config\n await fs.ensureDir(CONFIG_DIR);\n await fs.writeFile(CONFIG_FILE, serializeEnv(merged));\n\n logger.newLine();\n logger.success(`Config saved to: ${CONFIG_FILE}`);\n logger.newLine();\n logger.section(\"Configured values:\");\n for (const entry of CONFIG_ENTRIES) {\n const val = merged[entry.key];\n if (!val) continue;\n const display = entry.secret\n ? val.slice(0, 4) + \"****\" + val.slice(-4)\n : val;\n logger.log(` ${entry.label}: ${display}`);\n }\n logger.newLine();\n logger.info(\n \"These credentials are stored globally and used by clone, upload, and download commands.\"\n );\n}\n","import inquirer from \"inquirer\";\nimport { logger } from \"../utils/logger\";\nimport {\n saveAuthTokens,\n loadAuthTokens,\n getApiUrl,\n parseJwtClaims,\n type AuthTokens,\n type Env,\n} from \"../utils/cli-auth\";\n\ninterface LoginOptions {\n env?: Env;\n}\n\nexport async function loginCommand(options: LoginOptions = {}): Promise<void> {\n const env: Env = options.env ?? \"dev\";\n const apiUrl = getApiUrl(env);\n\n logger.header(\"OneX Theme Developer Login\");\n logger.info(`Environment: ${env} (${apiUrl})`);\n logger.newLine();\n\n // Check if already logged in to this env\n const existing = loadAuthTokens(env);\n if (existing) {\n logger.info(`Already logged in as: ${existing.user.email}`);\n const { relogin } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"relogin\",\n message: \"Re-login with different account?\",\n default: false,\n },\n ]);\n if (!relogin) return;\n }\n\n // Prompt for credentials\n const { email, password } = await inquirer.prompt([\n {\n type: \"input\",\n name: \"email\",\n message: \"Email:\",\n validate: (input: string) =>\n input.includes(\"@\") ? true : \"Enter a valid email\",\n },\n {\n type: \"password\",\n name: \"password\",\n message: \"Password:\",\n validate: (input: string) =>\n input.length >= 6 ? true : \"Password too short\",\n },\n ]);\n\n logger.startSpinner(\"Logging in...\");\n\n try {\n const response = await fetch(`${apiUrl}/auth/login`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ username: email, password }),\n });\n\n const raw = await response.json();\n const data = raw.statusCode ? raw.body : raw;\n\n if (!response.ok || data.error) {\n logger.stopSpinner(false, \"Login failed\");\n logger.error(data.message || data.error || \"Invalid credentials\");\n process.exit(1);\n }\n\n const idToken = data.IdToken;\n const accessToken = data.AccessToken;\n const refreshToken = data.RefreshToken;\n const expiresIn = data.ExpiresIn || 3600;\n\n if (!idToken) {\n logger.stopSpinner(false, \"Login failed\");\n logger.error(\"No token received from server\");\n process.exit(1);\n }\n\n const claims = parseJwtClaims(idToken);\n\n const tokens: AuthTokens = {\n accessToken,\n idToken,\n refreshToken,\n expiresAt: Math.floor(Date.now() / 1000) + expiresIn,\n user: {\n email: (claims.email as string) || email,\n name: claims.name as string,\n companyId: claims[\"custom:company_id\"] as string,\n userId: claims.sub as string,\n },\n };\n\n await saveAuthTokens(tokens, env);\n\n logger.stopSpinner(true, \"Logged in!\");\n logger.newLine();\n logger.info(` Environment: ${env}`);\n logger.info(` Email: ${tokens.user.email}`);\n if (tokens.user.name) logger.info(` Name: ${tokens.user.name}`);\n if (tokens.user.companyId)\n logger.info(` Company: ${tokens.user.companyId}`);\n logger.newLine();\n logger.success(\n `Token stored securely in ~/.onexthm/auth-${env}.json (encrypted)`\n );\n } catch (error) {\n logger.stopSpinner(false, \"Login failed\");\n logger.error(error instanceof Error ? error.message : \"Connection failed\");\n process.exit(1);\n }\n}\n","import { logger } from \"../utils/logger\";\nimport { clearAuthTokens, loadAuthTokens, type Env } from \"../utils/cli-auth\";\n\ninterface LogoutOptions {\n env?: Env;\n}\n\nexport async function logoutCommand(\n options: LogoutOptions = {}\n): Promise<void> {\n const env: Env = options.env ?? \"dev\";\n const tokens = loadAuthTokens(env);\n\n if (!tokens) {\n logger.info(`Not logged in to ${env} environment.`);\n return;\n }\n\n await clearAuthTokens(env);\n logger.success(`Logged out of ${env} (was: ${tokens.user.email})`);\n}\n","import { logger } from \"../utils/logger\";\nimport {\n loadAuthTokens,\n isTokenExpired,\n getApiUrl,\n type Env,\n} from \"../utils/cli-auth\";\n\ninterface WhoamiOptions {\n env?: Env;\n}\n\nexport async function whoamiCommand(\n options: WhoamiOptions = {}\n): Promise<void> {\n const env: Env = options.env ?? \"dev\";\n const tokens = loadAuthTokens(env);\n\n if (!tokens) {\n logger.error(\n `Not logged in to ${env} environment. Run: onexthm login --env ${env}`\n );\n process.exit(1);\n }\n\n const expired = isTokenExpired(tokens);\n\n logger.header(\"OneX Theme Developer\");\n logger.info(` Environment: ${env} (${getApiUrl(env)})`);\n logger.info(` Email: ${tokens.user.email}`);\n if (tokens.user.name) logger.info(` Name: ${tokens.user.name}`);\n if (tokens.user.companyId)\n logger.info(` Company: ${tokens.user.companyId}`);\n logger.info(\n ` Status: ${expired ? \"⚠ Token expired (will auto-refresh)\" : \"✓ Active\"}`\n );\n}\n","import fs from \"fs-extra\";\nimport path from \"path\";\nimport semver from \"semver\";\nimport { logger } from \"../utils/logger\";\nimport {\n getValidTokens,\n authenticatedFetch,\n getApiUrl,\n type Env,\n} from \"../utils/cli-auth\";\nimport {\n scanThemeAssets,\n buildAssetMap,\n isVideoAsset,\n type HashedAssetEntry,\n} from \"../utils/scan-theme-assets\";\n\ninterface PublishOptions {\n theme?: string;\n bump?: \"patch\" | \"minor\" | \"major\";\n env?: Env;\n}\n\nexport async function publishCommand(options: PublishOptions): Promise<void> {\n const env: Env = options.env ?? \"dev\";\n\n logger.header(\"OneX Theme Publish\");\n logger.info(`Environment: ${env} (${getApiUrl(env)})`);\n logger.newLine();\n\n // 1. Check authentication\n const tokens = await getValidTokens(env);\n if (!tokens) {\n logger.error(\n `Not logged in to ${env} environment. Run: onexthm login --env ${env}`\n );\n process.exit(1);\n }\n logger.info(`Logged in as: ${tokens.user.email}`);\n\n // 2. Resolve theme directory\n let themePath: string;\n if (options.theme) {\n themePath = path.resolve(options.theme);\n } else {\n const isThemeDir = [\n \"theme.config.ts\",\n \"bundle-entry.ts\",\n \"manifest.ts\",\n ].some((f) => fs.existsSync(path.join(process.cwd(), f)));\n if (isThemeDir) {\n themePath = process.cwd();\n } else {\n logger.error(\n \"Not in a theme directory. Run from theme root or use --theme flag.\"\n );\n process.exit(1);\n }\n }\n\n // 3. Read theme metadata\n const pkgPath = path.join(themePath, \"package.json\");\n if (!fs.existsSync(pkgPath)) {\n logger.error(\"No package.json found in theme directory\");\n process.exit(1);\n }\n\n const pkg = fs.readJsonSync(pkgPath);\n const themeId =\n pkg.name?.replace(\"@onex-themes/\", \"\") || path.basename(themePath);\n\n // Auto-bump version if --bump flag provided\n if (options.bump) {\n const currentVersion = pkg.version || \"1.0.0\";\n const newVersion = semver.inc(currentVersion, options.bump);\n if (!newVersion) {\n logger.error(`Failed to bump version from ${currentVersion}`);\n process.exit(1);\n }\n pkg.version = newVersion;\n fs.writeJsonSync(pkgPath, pkg, { spaces: 2 });\n logger.info(`Bumped version: ${currentVersion} -> ${newVersion}`);\n }\n\n const version = pkg.version || \"1.0.0\";\n\n // Validate semver format\n if (!semver.valid(version)) {\n logger.error(\n `Invalid version \"${version}\" in package.json. Must be valid semver (e.g., 1.0.0)`\n );\n process.exit(1);\n }\n\n logger.newLine();\n logger.info(`Theme: ${themeId}`);\n logger.info(`Version: ${version}`);\n logger.newLine();\n\n const apiUrl = getApiUrl(env);\n\n // 4. Register theme (idempotent — safe to call multiple times)\n logger.startSpinner(\"Registering theme...\");\n try {\n const regResponse = await authenticatedFetch(\n `${apiUrl}/website-api/themes/register`,\n {\n method: \"POST\",\n body: JSON.stringify({\n themeId,\n name: pkg.displayName || themeId,\n description: pkg.description || \"\",\n email: tokens.user.email,\n author:\n typeof pkg.author === \"string\"\n ? pkg.author\n : pkg.author?.name || tokens.user.name || \"\",\n category: pkg.onex?.category || \"MINIMAL\",\n tags: pkg.keywords || [],\n thumbnail_url: pkg.onex?.thumbnail || \"\",\n }),\n },\n env\n );\n\n const regData = await regResponse.json();\n const regBody = regData.statusCode ? regData.body : regData;\n\n if (!regResponse.ok) {\n const errMsg = regBody.error || regBody.message || \"Registration failed\";\n if (!errMsg.includes(\"already registered\")) {\n logger.stopSpinner(false, \"Registration failed\");\n logger.error(errMsg);\n process.exit(1);\n }\n }\n\n logger.stopSpinner(true, regBody.message || \"Theme registered\");\n } catch (error) {\n logger.stopSpinner(false, \"Registration failed\");\n logger.error(error instanceof Error ? error.message : \"Connection failed\");\n process.exit(1);\n }\n\n // 4.5 Check if version already exists (immutability check)\n logger.startSpinner(\"Checking version availability...\");\n try {\n const checkResponse = await authenticatedFetch(\n `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/versions/${encodeURIComponent(version)}/exists`,\n { method: \"GET\" },\n env\n );\n const checkData = await checkResponse.json();\n const checkBody = checkData.statusCode ? checkData.body : checkData;\n\n if (checkBody.exists) {\n logger.stopSpinner(false, \"Version already published\");\n const patchVer = semver.inc(version, \"patch\") || \"?\";\n const minorVer = semver.inc(version, \"minor\") || \"?\";\n const majorVer = semver.inc(version, \"major\") || \"?\";\n logger.error(\n `\\nVersion ${version} of \"${themeId}\" is already published and cannot be overwritten.\\n\\n` +\n `To publish a new version:\\n` +\n ` 1. Bump version in package.json (e.g., ${version} -> ${patchVer})\\n` +\n ` 2. Run: onexthm publish\\n\\n` +\n `Or use the --bump flag:\\n` +\n ` onexthm publish --bump patch (${version} -> ${patchVer})\\n` +\n ` onexthm publish --bump minor (${version} -> ${minorVer})\\n` +\n ` onexthm publish --bump major (${version} -> ${majorVer})`\n );\n process.exit(1);\n }\n logger.stopSpinner(true, `Version ${version} is available`);\n } catch (error) {\n // Non-blocking: if the check endpoint doesn't exist yet, continue with publish\n // The backend will also reject duplicates at the presigned URL step\n logger.stopSpinner(true, \"Version check skipped (endpoint not available)\");\n }\n\n // 5. Build theme using the standalone compiler\n logger.startSpinner(\"Building theme...\");\n try {\n const { compileStandaloneTheme } = await import(\"../utils/compile-theme\");\n const buildSuccess = await compileStandaloneTheme(themePath, themeId);\n if (!buildSuccess) {\n logger.stopSpinner(false, \"Build failed\");\n logger.error(\"Run 'onexthm build' to see build errors\");\n process.exit(1);\n }\n logger.stopSpinner(true, \"Theme compiled\");\n } catch (error) {\n logger.stopSpinner(false, \"Build failed\");\n logger.error(error instanceof Error ? error.message : \"Build error\");\n process.exit(1);\n }\n\n // 5.5. Scan theme-assets/ and compute content hashes\n const distDir = path.join(themePath, \"dist\");\n let assetEntries: HashedAssetEntry[] = [];\n try {\n assetEntries = await scanThemeAssets(distDir);\n if (assetEntries.length > 0) {\n logger.info(`Found ${assetEntries.length} theme asset file(s)`);\n }\n } catch (error) {\n logger.error(\n `Asset scan failed: ${error instanceof Error ? error.message : \"unknown\"}`\n );\n process.exit(1);\n }\n\n // 5.6. Split assets: videos go through the multipart video API (up to\n // 3GB each), everything else uses the presigned-URL flow (20MB cap).\n const videoAssets = assetEntries.filter((a) => isVideoAsset(a.originalPath));\n const regularAssets = assetEntries.filter(\n (a) => !isVideoAsset(a.originalPath)\n );\n\n // 5.7. Upload videos via media service multipart API.\n // Video URLs replace the hashed-path value in asset-map.json so the\n // manifest endpoint passes them through as-is (see theme_bundles.py).\n const videoUrls: Record<string, string> = {};\n if (videoAssets.length > 0) {\n logger.startSpinner(`Uploading ${videoAssets.length} video(s)...`);\n try {\n for (const video of videoAssets) {\n const url = await uploadVideoMultipart(apiUrl, themeId, video, env);\n videoUrls[video.originalPath] = url;\n }\n logger.stopSpinner(true, `Uploaded ${videoAssets.length} video(s)`);\n } catch (error) {\n logger.stopSpinner(false, \"Video upload failed\");\n logger.error(error instanceof Error ? error.message : \"Upload error\");\n process.exit(1);\n }\n }\n\n // 5.8. Write asset-map.json into dist/ so it ships inside bundle.zip.\n // Editor reads this at load time to resolve original paths -> hashed names.\n // For videos, the value is the full media-service URL (http(s)://...),\n // which the manifest endpoint detects and returns verbatim.\n try {\n const assetMap = buildAssetMap(regularAssets);\n for (const [originalPath, url] of Object.entries(videoUrls)) {\n assetMap[originalPath] = url;\n }\n const assetMapPath = path.join(distDir, \"asset-map.json\");\n await fs.writeFile(assetMapPath, JSON.stringify(assetMap, null, 2));\n } catch (error) {\n logger.error(\n `Failed to write asset-map.json: ${error instanceof Error ? error.message : \"unknown\"}`\n );\n process.exit(1);\n }\n\n // 6. Get presigned upload URLs (now includes asset presigned URLs)\n logger.startSpinner(\"Getting upload URLs...\");\n let bundleUploadUrl: string;\n let sourceUploadUrl: string;\n let assetUploads: Array<{\n path: string;\n upload_url: string;\n s3_key: string;\n }> = [];\n let alreadyUploaded: string[] = [];\n\n try {\n const pubResponse = await authenticatedFetch(\n `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/versions`,\n {\n method: \"POST\",\n body: JSON.stringify({\n version,\n assets: regularAssets.map((a) => ({\n path: a.hashedPath,\n hash: a.hash,\n size: a.size,\n content_type: a.contentType,\n })),\n }),\n },\n env\n );\n\n const pubData = await pubResponse.json();\n const pubBody = pubData.statusCode ? pubData.body : pubData;\n\n if (!pubResponse.ok || !pubBody.bundleUploadUrl) {\n logger.stopSpinner(false, \"Failed to get upload URLs\");\n logger.error(pubBody.error || \"Server error\");\n logger.error(`Status: ${pubResponse.status} ${pubResponse.statusText}`);\n logger.error(`Response: ${JSON.stringify(pubBody).slice(0, 500)}`);\n process.exit(1);\n }\n\n bundleUploadUrl = pubBody.bundleUploadUrl;\n sourceUploadUrl = pubBody.sourceUploadUrl;\n assetUploads = pubBody.assetUploads || [];\n alreadyUploaded = pubBody.alreadyUploaded || [];\n logger.stopSpinner(\n true,\n `Upload URLs obtained (${assetUploads.length} new, ${alreadyUploaded.length} reused)`\n );\n } catch (error) {\n logger.stopSpinner(false, \"Failed\");\n logger.error(error instanceof Error ? error.message : \"Connection failed\");\n process.exit(1);\n }\n\n // 6.5. Upload new assets to S3 in parallel (dedup'd by content hash)\n if (assetUploads.length > 0) {\n logger.startSpinner(`Uploading ${assetUploads.length} asset(s) to S3...`);\n\n // Log a sample presigned URL so we can diagnose routing issues\n if (assetUploads[0]) {\n logger.log(\n ` [debug] sample presigned PUT URL: ${assetUploads[0].upload_url}`\n );\n logger.log(` [debug] sample s3_key: ${assetUploads[0].s3_key}`);\n }\n\n const CONCURRENCY = 8;\n const byHashedPath = new Map(regularAssets.map((a) => [a.hashedPath, a]));\n const queue = [...assetUploads];\n let uploaded = 0;\n let failed = 0;\n\n async function worker(): Promise<void> {\n while (queue.length > 0) {\n const item = queue.shift();\n if (!item) break;\n const entry = byHashedPath.get(item.path);\n if (!entry) {\n failed++;\n logger.error(` ✗ ${item.path}: no local file found`);\n continue;\n }\n try {\n const buf = await fs.promises.readFile(entry.absPath);\n const res = await fetch(item.upload_url, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": entry.contentType,\n \"x-amz-acl\": \"public-read\",\n },\n body: buf,\n });\n if (!res.ok) {\n // On first failure log the full response body for diagnosis\n if (failed === 0) {\n const errBody = await res.text().catch(() => \"(unreadable)\");\n logger.log(` [debug] PUT ${item.upload_url}`);\n logger.log(\n ` [debug] response ${res.status} ${res.statusText}: ${errBody.slice(0, 500)}`\n );\n }\n throw new Error(`HTTP ${res.status}`);\n }\n uploaded++;\n } catch (e) {\n failed++;\n logger.error(\n ` ✗ ${item.path}: ${e instanceof Error ? e.message : \"failed\"}`\n );\n }\n }\n }\n\n await Promise.all(\n Array.from({ length: Math.min(CONCURRENCY, assetUploads.length) }, () =>\n worker()\n )\n );\n\n if (failed > 0) {\n logger.stopSpinner(false, `${failed} asset(s) failed`);\n process.exit(1);\n }\n logger.stopSpinner(true, `Uploaded ${uploaded} asset(s)`);\n }\n\n // 7. Create and upload bundle.zip\n // theme-assets/ is EXCLUDED because assets now live at\n // themes/{themeId}/assets/<hashed> in S3 (shared across versions).\n // The bundle ships asset-map.json instead, which the editor uses to\n // resolve original paths to hashed S3 filenames.\n logger.startSpinner(\"Uploading bundle...\");\n try {\n if (!fs.existsSync(distDir)) {\n logger.stopSpinner(false, \"No dist/ directory\");\n logger.error(\"Build the theme first: onexthm build\");\n process.exit(1);\n }\n\n const bundleZipPath = path.join(themePath, \"dist\", \"bundle.zip\");\n await createZip(distDir, bundleZipPath, [\n \"bundle.zip\",\n \"source.zip\",\n \"preview-runtime.js\",\n \"preview-runtime.js.map\",\n \"theme-assets\",\n \"theme-assets/**\",\n ]);\n\n const bundleBuffer = fs.readFileSync(bundleZipPath);\n const bundleRes = await fetch(bundleUploadUrl, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/zip\" },\n body: bundleBuffer,\n });\n\n if (!bundleRes.ok) {\n throw new Error(`Upload failed: ${bundleRes.status}`);\n }\n\n const sizeMB = (bundleBuffer.length / 1024 / 1024).toFixed(2);\n logger.stopSpinner(true, `Bundle uploaded (${sizeMB} MB)`);\n } catch (error) {\n logger.stopSpinner(false, \"Upload failed\");\n logger.error(error instanceof Error ? error.message : \"Upload error\");\n process.exit(1);\n }\n\n // 8. Create and upload source.zip\n logger.startSpinner(\"Uploading source...\");\n try {\n const sourceZipPath = path.join(themePath, \"dist\", \"source.zip\");\n await createZip(themePath, sourceZipPath, [\n \"node_modules\",\n \"dist\",\n \".git\",\n \".env\",\n \".env.local\",\n ]);\n\n const sourceBuffer = fs.readFileSync(sourceZipPath);\n const sourceRes = await fetch(sourceUploadUrl, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/zip\" },\n body: sourceBuffer,\n });\n\n if (!sourceRes.ok) {\n throw new Error(`Source upload failed: ${sourceRes.status}`);\n }\n\n const sizeMB = (sourceBuffer.length / 1024 / 1024).toFixed(2);\n logger.stopSpinner(true, `Source uploaded (${sizeMB} MB)`);\n } catch (error) {\n logger.stopSpinner(false, \"Source upload failed\");\n // Not fatal — source upload is optional\n logger.info(\"Source upload skipped (bundle was uploaded successfully)\");\n }\n\n // 9. Confirm upload (triggers security scan)\n logger.startSpinner(\"Scanning and publishing...\");\n try {\n const confirmResponse = await authenticatedFetch(\n `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/versions/${encodeURIComponent(version)}/confirm`,\n { method: \"POST\" },\n env\n );\n\n const confirmData = await confirmResponse.json();\n const confirmBody = confirmData.statusCode ? confirmData.body : confirmData;\n\n if (!confirmResponse.ok || !confirmBody.success) {\n logger.stopSpinner(false, \"Publishing failed\");\n\n const violations = confirmBody.violations || confirmData.violations;\n if (violations && violations.length > 0) {\n logger.error(\"Theme rejected — security violations found:\");\n for (const v of violations) {\n logger.log(\n ` ❌ ${v.file || v.path || \"?\"}: ${v.violation || v.message || JSON.stringify(v)}`\n );\n }\n } else {\n logger.error(confirmBody.error || \"Unknown error\");\n logger.error(confirmBody.message || \"\");\n logger.error(\n `Status: ${confirmResponse.status} ${confirmResponse.statusText}`\n );\n logger.error(`Response: ${JSON.stringify(confirmBody).slice(0, 2000)}`);\n }\n\n if (confirmBody.warnings?.length) {\n logger.newLine();\n logger.info(\"Warnings:\");\n for (const w of confirmBody.warnings) {\n logger.log(` ⚠️ ${w.file}: ${w.warning}`);\n }\n }\n\n process.exit(1);\n }\n\n logger.stopSpinner(true, confirmBody.message || \"Published!\");\n\n if (confirmBody.warnings?.length) {\n logger.newLine();\n logger.info(\"Warnings (non-blocking):\");\n for (const w of confirmBody.warnings) {\n logger.log(` ⚠️ ${w.file}: ${w.warning}`);\n }\n }\n } catch (error) {\n logger.stopSpinner(false, \"Publishing failed\");\n logger.error(error instanceof Error ? error.message : \"Connection failed\");\n process.exit(1);\n }\n\n logger.newLine();\n logger.success(`✓ Theme \"${themeId}\" v${version} published!`);\n\n // 10. Upload thumbnail (local file takes priority, fallback to auto-screenshot)\n await uploadThumbnail(apiUrl, themeId, themePath, distDir, env);\n}\n\nasync function uploadThumbnail(\n apiUrl: string,\n themeId: string,\n themePath: string,\n distDir: string,\n env: Env = \"dev\"\n): Promise<void> {\n const THUMBNAIL_CANDIDATES = [\n { file: \"thumbnail.png\", mime: \"image/png\" },\n { file: \"thumbnail.jpg\", mime: \"image/jpeg\" },\n { file: \"thumbnail.jpeg\", mime: \"image/jpeg\" },\n { file: \"thumbnail.webp\", mime: \"image/webp\" },\n ];\n\n let imageBase64: string | null = null;\n let mimeType = \"image/png\";\n\n // Priority 1: local thumbnail file in theme root\n for (const { file, mime } of THUMBNAIL_CANDIDATES) {\n const candidate = path.join(themePath, file);\n if (fs.existsSync(candidate)) {\n const buf = fs.readFileSync(candidate);\n imageBase64 = `data:${mime};base64,${buf.toString(\"base64\")}`;\n mimeType = mime;\n logger.info(`Using local thumbnail: ${file}`);\n break;\n }\n }\n\n // Priority 2: auto-screenshot the home page\n if (!imageBase64) {\n logger.startSpinner(\"Taking screenshot for thumbnail...\");\n try {\n const buf = await screenshotHomePage(themePath, distDir);\n imageBase64 = `data:image/png;base64,${buf.toString(\"base64\")}`;\n mimeType = \"image/png\";\n logger.stopSpinner(true, \"Screenshot captured\");\n } catch (err) {\n logger.stopSpinner(false, \"Screenshot failed — skipping thumbnail\");\n logger.info(\n \"Tip: add thumbnail.png to your theme root to set a custom thumbnail\"\n );\n return;\n }\n }\n\n logger.startSpinner(\"Uploading thumbnail...\");\n const imageUploadUrl = `${apiUrl}/media/images/upload`;\n const imageRequestBody = {\n prefix: `themes/${themeId}`,\n image: imageBase64\n ? `${imageBase64.slice(0, 60)}... [${Math.round((imageBase64.length * 3) / 4 / 1024)} KB]`\n : null,\n name: \"thumbnail.png\",\n };\n logger.log(` → POST ${imageUploadUrl}`);\n logger.log(\n ` → body: ${JSON.stringify({ ...imageRequestBody, image: imageBase64 ? `<base64 ${mimeType} truncated>` : null })}`\n );\n\n try {\n const uploadRes = await authenticatedFetch(\n imageUploadUrl,\n {\n method: \"POST\",\n body: JSON.stringify({\n prefix: `themes/${themeId}`,\n image: imageBase64,\n name: \"thumbnail.png\",\n }),\n },\n env\n );\n\n logger.log(` ← HTTP ${uploadRes.status} ${uploadRes.statusText}`);\n\n const uploadRawText = await uploadRes.text();\n logger.log(` ← raw response: ${uploadRawText.slice(0, 500)}`);\n\n let uploadData: any;\n try {\n uploadData = JSON.parse(uploadRawText);\n } catch {\n throw new Error(\n `Image upload returned non-JSON (HTTP ${uploadRes.status}): ${uploadRawText.slice(0, 200)}`\n );\n }\n const uploadBody = uploadData.statusCode ? uploadData.body : uploadData;\n\n if (!uploadRes.ok || !uploadBody.url) {\n throw new Error(\n `Image upload failed — HTTP ${uploadRes.status}: ${uploadBody.error || uploadBody.message || JSON.stringify(uploadBody).slice(0, 300)}`\n );\n }\n\n // Set thumbnail_url on theme via generic update endpoint\n const patchUrl = `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}`;\n logger.log(` → PATCH ${patchUrl}`);\n const patchRes = await authenticatedFetch(\n patchUrl,\n {\n method: \"PATCH\",\n body: JSON.stringify({ thumbnail_url: uploadBody.url }),\n },\n env\n );\n\n logger.log(` ← HTTP ${patchRes.status} ${patchRes.statusText}`);\n\n if (!patchRes.ok) {\n const patchRawText = await patchRes.text();\n logger.log(` ← raw response: ${patchRawText.slice(0, 500)}`);\n let patchBody: any = {};\n try {\n patchBody = JSON.parse(patchRawText);\n } catch {}\n patchBody = patchBody.statusCode ? patchBody.body : patchBody;\n throw new Error(\n `Thumbnail patch failed — HTTP ${patchRes.status}: ${patchBody.error || patchBody.message || patchRawText.slice(0, 200)}`\n );\n }\n\n logger.stopSpinner(true, \"Thumbnail set\");\n } catch (err) {\n logger.stopSpinner(false, \"Thumbnail upload failed\");\n logger.error(err instanceof Error ? err.message : String(err));\n logger.info(\n \"Theme published successfully. Thumbnail can be updated later.\"\n );\n }\n}\n\nasync function screenshotHomePage(\n themePath: string,\n distDir: string\n): Promise<Buffer> {\n const { compilePreviewRuntime } = await import(\"../utils/compile-theme\");\n const { createDevServer } = await import(\"../utils/dev-server\");\n\n const previewRuntimePath = await compilePreviewRuntime(themePath);\n const themeName = path.basename(themePath);\n const port = await findFreePort(4500);\n\n const server = createDevServer({\n port,\n distDir,\n previewRuntimePath,\n themeName,\n themePath,\n });\n\n // Give HTTP server a moment to bind\n await new Promise((resolve) => setTimeout(resolve, 300));\n\n const puppeteer = await import(\"puppeteer\");\n const browser = await puppeteer.default.launch({\n headless: true,\n args: [\"--no-sandbox\", \"--disable-setuid-sandbox\"],\n });\n\n try {\n const page = await browser.newPage();\n // Normal viewport height so 100vh sections render at natural size\n await page.setViewport({ width: 1440, height: 900 });\n await page.goto(`http://localhost:${port}`, {\n waitUntil: \"networkidle0\",\n timeout: 30_000,\n });\n\n // Wait for the preview root to render at least one child\n await page.waitForSelector(\"#onex-preview-root > *\", { timeout: 15_000 });\n\n // Scroll through the full page so lazy-loaded sections paint before capture\n await page.evaluate(async () => {\n await new Promise<void>((resolve) => {\n const distance = 400;\n const delay = 120;\n const timer = setInterval(() => {\n window.scrollBy(0, distance);\n if (\n window.scrollY + window.innerHeight >=\n document.body.scrollHeight\n ) {\n clearInterval(timer);\n window.scrollTo(0, 0);\n resolve();\n }\n }, delay);\n });\n });\n\n // Give animations and lazy-loaded images 5 seconds to settle\n await new Promise((resolve) => setTimeout(resolve, 5_000));\n\n const screenshot = await page.screenshot({ fullPage: true, type: \"png\" });\n return Buffer.from(screenshot);\n } finally {\n await browser.close();\n server.close();\n }\n}\n\nasync function findFreePort(start: number): Promise<number> {\n const net = await import(\"net\");\n return new Promise((resolve) => {\n const srv = net.createServer();\n srv.listen(start, () => {\n const addr = srv.address() as { port: number };\n srv.close(() => resolve(addr.port));\n });\n srv.on(\"error\", () => resolve(findFreePort(start + 1)));\n });\n}\n\n/**\n * Upload a single video file to S3 via the media service multipart API.\n * Returns the public URL the video lives at after completion.\n */\nasync function uploadVideoMultipart(\n apiUrl: string,\n themeId: string,\n video: HashedAssetEntry,\n env: Env = \"dev\"\n): Promise<string> {\n const fileName = path.basename(video.originalPath);\n const videoInitUrl = `${apiUrl}/media/videos/multipart/init`;\n const videoInitBody = {\n file_name: fileName,\n content_type: video.contentType,\n file_size: video.size,\n prefix: `themes/${themeId}/assets`,\n };\n\n logger.log(` → POST ${videoInitUrl}`);\n logger.log(` → body: ${JSON.stringify(videoInitBody)}`);\n\n const initRes = await authenticatedFetch(\n videoInitUrl,\n {\n method: \"POST\",\n body: JSON.stringify(videoInitBody),\n },\n env\n );\n\n logger.log(` ← HTTP ${initRes.status} ${initRes.statusText}`);\n\n const initRawText = await initRes.text();\n logger.log(` ← raw response: ${initRawText.slice(0, 500)}`);\n\n let initData: any;\n try {\n initData = JSON.parse(initRawText);\n } catch {\n throw new Error(\n `Video init returned non-JSON (HTTP ${initRes.status}): ${initRawText.slice(0, 200)}`\n );\n }\n const initBody = initData.statusCode ? initData.body : initData;\n if (!initRes.ok || !initBody.upload_id) {\n throw new Error(\n `Init multipart failed for ${fileName} — HTTP ${initRes.status}: ${initBody.error || initBody.message || JSON.stringify(initBody).slice(0, 300)}`\n );\n }\n\n const { upload_id, file_key, chunk_size, chunk_urls } = initBody as {\n upload_id: string;\n file_key: string;\n chunk_size: number;\n chunk_urls: Array<{ part_number: number; upload_url: string }>;\n };\n\n const fileBuffer = await fs.promises.readFile(video.absPath);\n\n const CHUNK_CONCURRENCY = 4;\n const queue = [...chunk_urls];\n const parts: Array<{ part_number: number; etag: string }> = [];\n\n async function chunkWorker(): Promise<void> {\n while (queue.length > 0) {\n const chunk = queue.shift();\n if (!chunk) break;\n const start = (chunk.part_number - 1) * chunk_size;\n const end = Math.min(start + chunk_size, fileBuffer.length);\n const body = fileBuffer.subarray(start, end);\n const res = await fetch(chunk.upload_url, { method: \"PUT\", body });\n if (!res.ok) {\n throw new Error(\n `Chunk ${chunk.part_number} upload failed: HTTP ${res.status}`\n );\n }\n const etag = res.headers.get(\"etag\") || res.headers.get(\"ETag\");\n if (!etag) {\n throw new Error(`Chunk ${chunk.part_number}: missing ETag header`);\n }\n parts.push({ part_number: chunk.part_number, etag });\n }\n }\n\n await Promise.all(\n Array.from({ length: Math.min(CHUNK_CONCURRENCY, chunk_urls.length) }, () =>\n chunkWorker()\n )\n );\n\n parts.sort((a, b) => a.part_number - b.part_number);\n\n const videoCompleteUrl = `${apiUrl}/media/videos/multipart/complete`;\n logger.log(` → POST ${videoCompleteUrl}`);\n logger.log(\n ` → body: ${JSON.stringify({ upload_id, file_key, parts: `[${parts.length} parts]` })}`\n );\n\n const completeRes = await authenticatedFetch(\n videoCompleteUrl,\n {\n method: \"POST\",\n body: JSON.stringify({ upload_id, file_key, parts }),\n },\n env\n );\n\n logger.log(` ← HTTP ${completeRes.status} ${completeRes.statusText}`);\n\n const completeRawText = await completeRes.text();\n logger.log(` ← raw response: ${completeRawText.slice(0, 500)}`);\n\n let completeData: any;\n try {\n completeData = JSON.parse(completeRawText);\n } catch {\n throw new Error(\n `Video complete returned non-JSON (HTTP ${completeRes.status}): ${completeRawText.slice(0, 200)}`\n );\n }\n const completeBody = completeData.statusCode\n ? completeData.body\n : completeData;\n if (!completeRes.ok || !completeBody.url) {\n // Best-effort cleanup on failure\n try {\n const abortUrl = `${apiUrl}/media/videos/multipart/abort`;\n logger.log(` → POST ${abortUrl} (cleanup)`);\n await authenticatedFetch(\n abortUrl,\n {\n method: \"POST\",\n body: JSON.stringify({ upload_id, file_key }),\n },\n env\n );\n } catch {}\n throw new Error(\n `Complete multipart failed for ${fileName} — HTTP ${completeRes.status}: ${completeBody.error || completeBody.message || JSON.stringify(completeBody).slice(0, 300)}`\n );\n }\n\n return completeBody.url as string;\n}\n\n/**\n * Create a zip file from a directory, excluding certain paths.\n */\nasync function createZip(\n sourceDir: string,\n outputPath: string,\n exclude: string[]\n): Promise<void> {\n const archiver = (await import(\"archiver\")).default;\n const { createWriteStream } = await import(\"fs\");\n\n return new Promise((resolve, reject) => {\n const output = createWriteStream(outputPath);\n const archive = archiver(\"zip\", { zlib: { level: 9 } });\n\n output.on(\"close\", resolve);\n archive.on(\"error\", reject);\n\n archive.pipe(output);\n archive.glob(\"**/*\", {\n cwd: sourceDir,\n ignore: exclude.flatMap((e) => [e, `${e}/**`]),\n dot: false,\n });\n archive.finalize();\n });\n}\n","/**\n * Scan dist/theme-assets/ and produce a content-addressable asset list.\n *\n * Each file gets a short SHA256 prefix appended to its name (Vite/Webpack\n * style) so subsequent publishes can dedup unchanged files against the\n * per-theme asset index on the backend.\n *\n * Hashing follows the same SHA256 pattern as compile-theme.ts::contentHashEntry\n * (8-char hex prefix).\n */\n\nimport fs from \"fs-extra\";\nimport path from \"path\";\nimport crypto from \"crypto\";\nimport { glob } from \"glob\";\n\n/** MIME lookup used for both the upload Content-Type and the manifest. */\nconst MIME_MAP: Record<string, string> = {\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".avif\": \"image/avif\",\n \".svg\": \"image/svg+xml\",\n \".ico\": \"image/x-icon\",\n \".bmp\": \"image/bmp\",\n \".woff\": \"font/woff\",\n \".woff2\": \"font/woff2\",\n \".ttf\": \"font/ttf\",\n \".otf\": \"font/otf\",\n \".eot\": \"application/vnd.ms-fontobject\",\n \".mp4\": \"video/mp4\",\n \".webm\": \"video/webm\",\n \".mov\": \"video/quicktime\",\n \".ogg\": \"video/ogg\",\n \".json\": \"application/json\",\n};\n\n/** Length of the hex hash segment appended to filenames. */\nconst HASH_LEN = 8;\n\n/**\n * Video extensions that exceed the 20MB presigned-URL limit and must be\n * uploaded via the multipart video API instead.\n */\nexport const VIDEO_EXTENSIONS = [\n \".mp4\",\n \".webm\",\n \".ogg\",\n \".mov\",\n \".avi\",\n \".mkv\",\n];\n\nexport function isVideoAsset(filePath: string): boolean {\n const lower = filePath.toLowerCase();\n return VIDEO_EXTENSIONS.some((ext) => lower.endsWith(ext));\n}\n\nexport interface HashedAssetEntry {\n /** Original relative path inside theme-assets/, e.g. \"banners/hero.png\" */\n originalPath: string;\n /** Hashed relative path, e.g. \"banners/hero-abc12345.png\" */\n hashedPath: string;\n /** 8-char hex SHA256 prefix of the file content */\n hash: string;\n /** File size in bytes */\n size: number;\n /** MIME type inferred from extension */\n contentType: string;\n /** Local absolute filesystem path — used during upload */\n absPath: string;\n}\n\nfunction mimeFor(filename: string): string {\n const ext = path.extname(filename).toLowerCase();\n return MIME_MAP[ext] || \"application/octet-stream\";\n}\n\nasync function sha256Prefix(absPath: string, len: number): Promise<string> {\n const buf = await fs.readFile(absPath);\n return crypto.createHash(\"sha256\").update(buf).digest(\"hex\").slice(0, len);\n}\n\n/**\n * Given a relative path like \"banners/hero.png\" and a hash \"abc12345\",\n * return \"banners/hero-abc12345.png\".\n */\nfunction insertHashIntoName(relPath: string, hash: string): string {\n const dir = path.posix.dirname(relPath);\n const base = path.posix.basename(relPath);\n const ext = path.posix.extname(base);\n const stem = ext ? base.slice(0, -ext.length) : base;\n const hashed = `${stem}-${hash}${ext}`;\n return dir === \".\" ? hashed : `${dir}/${hashed}`;\n}\n\n/**\n * Walk dist/theme-assets/ and return all asset files with content hashes.\n * Returns [] if the directory does not exist.\n *\n * @param distDir Absolute path to the theme's dist/ directory.\n */\nexport async function scanThemeAssets(\n distDir: string\n): Promise<HashedAssetEntry[]> {\n const assetsDir = path.join(distDir, \"theme-assets\");\n if (!(await fs.pathExists(assetsDir))) return [];\n\n const files = await glob(\"**/*\", {\n cwd: assetsDir,\n nodir: true,\n dot: false,\n });\n\n const results: HashedAssetEntry[] = [];\n for (const rel of files) {\n const absPath = path.join(assetsDir, rel);\n const stat = await fs.stat(absPath);\n if (!stat.isFile()) continue;\n\n // Normalize to forward slashes for S3 keys\n const originalPath = rel.split(path.sep).join(\"/\");\n const hash = await sha256Prefix(absPath, HASH_LEN);\n const hashedPath = insertHashIntoName(originalPath, hash);\n const contentType = mimeFor(rel);\n\n results.push({\n originalPath,\n hashedPath,\n hash,\n size: stat.size,\n contentType,\n absPath,\n });\n }\n\n // Deterministic order for stable diffs and logging\n results.sort((a, b) => a.originalPath.localeCompare(b.originalPath));\n return results;\n}\n\n/**\n * Build the asset-map.json content that ships inside bundle.zip.\n * Maps original theme-relative paths to hashed filenames the editor /\n * storefront can resolve against the shared S3 asset folder.\n */\nexport function buildAssetMap(\n entries: HashedAssetEntry[]\n): Record<string, string> {\n const map: Record<string, string> = {};\n for (const e of entries) {\n map[e.originalPath] = e.hashedPath;\n }\n return map;\n}\n","/**\n * `onexthm mcp` — manage AI-context files in an existing theme.\n *\n * Subcommands:\n * setup Install .mcp.json + CLAUDE.md + AGENTS.md + .cursorrules + THEME_REFERENCE.md\n * into the current directory if missing.\n * upgrade Overwrite the AI-context files with the latest from the bundled\n * template (asks before overwriting). Use this on themes that were\n * scaffolded with an older CLI version.\n * doctor Report whether the MCP server is registered, whether the AI\n * context files exist, and what version of the CLI shipped them.\n *\n * Why this exists: themes scaffolded by `onexthm init` ship with `.mcp.json`\n * and `CLAUDE.md` automatically. But themes created before those files were\n * added (or themes that have drifted from the template) need a way to refresh\n * them without re-running init. This is that way.\n */\n\nimport path from \"path\";\nimport fs from \"fs-extra\";\nimport inquirer from \"inquirer\";\nimport { logger } from \"../utils/logger\";\nimport { getTemplatesDir } from \"../utils/file-helpers\";\n\n/** Files we manage. Each is copied verbatim from the default template. */\nconst AI_CONTEXT_FILES = [\n \"CLAUDE.md\",\n \"AGENTS.md\",\n \".cursorrules\",\n \"THEME_REFERENCE.md\",\n \".mcp.json\",\n] as const;\n\ninterface McpOptions {\n yes?: boolean;\n /** Where to install the files. Defaults to process.cwd(). */\n cwd?: string;\n}\n\nfunction resolveTargetDir(opts: McpOptions): string {\n return path.resolve(opts.cwd ?? process.cwd());\n}\n\nfunction resolveDefaultTemplateDir(): string {\n return path.join(getTemplatesDir(), \"default\");\n}\n\n/**\n * Quick sanity check that we're in a theme directory.\n * Looks for theme.config.ts (the canonical marker).\n */\nfunction isThemeDir(dir: string): boolean {\n return (\n fs.existsSync(path.join(dir, \"theme.config.ts\")) ||\n fs.existsSync(path.join(dir, \"theme.config.js\"))\n );\n}\n\ninterface FileStatus {\n name: string;\n templatePath: string;\n targetPath: string;\n exists: boolean;\n identical: boolean;\n}\n\nfunction inspectFiles(templateDir: string, targetDir: string): FileStatus[] {\n return AI_CONTEXT_FILES.map((name) => {\n const templatePath = path.join(templateDir, name);\n const targetPath = path.join(targetDir, name);\n const exists = fs.existsSync(targetPath);\n let identical = false;\n if (exists && fs.existsSync(templatePath)) {\n try {\n const a = fs.readFileSync(templatePath, \"utf-8\");\n const b = fs.readFileSync(targetPath, \"utf-8\");\n // Normalize line endings before comparing so a CRLF/LF mismatch\n // doesn't show as \"different\".\n identical = a.replace(/\\r\\n/g, \"\\n\") === b.replace(/\\r\\n/g, \"\\n\");\n } catch {\n identical = false;\n }\n }\n return { name, templatePath, targetPath, exists, identical };\n });\n}\n\n// ─── setup ──────────────────────────────────────────────────────────────\n\nexport async function mcpSetupCommand(options: McpOptions = {}): Promise<void> {\n const targetDir = resolveTargetDir(options);\n const templateDir = resolveDefaultTemplateDir();\n\n logger.header(\"Install OneX MCP context files\");\n logger.log(`Target: ${targetDir}`);\n logger.log(\"\");\n\n if (!isThemeDir(targetDir)) {\n logger.error(\n `${targetDir} does not look like an OneX theme (no theme.config.ts found).`\n );\n logger.log(\"Run this command from the root of your theme project.\");\n process.exitCode = 1;\n return;\n }\n\n const statuses = inspectFiles(templateDir, targetDir);\n const missing = statuses.filter((s) => !s.exists);\n\n if (missing.length === 0) {\n logger.success(\"All AI context files are already present.\");\n logger.log(\n \"Run `onexthm mcp upgrade` to refresh them to the latest version.\"\n );\n return;\n }\n\n logger.log(`Will install ${missing.length} file(s):`);\n for (const s of missing) logger.log(` + ${s.name}`);\n logger.log(\"\");\n\n if (!options.yes) {\n const { confirm } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"confirm\",\n message: \"Proceed?\",\n default: true,\n },\n ]);\n if (!confirm) {\n logger.log(\"Cancelled.\");\n return;\n }\n }\n\n for (const s of missing) {\n if (!fs.existsSync(s.templatePath)) {\n logger.warning(` ! ${s.name} not in template — skipped`);\n continue;\n }\n await fs.copy(s.templatePath, s.targetPath);\n logger.success(` ✓ ${s.name}`);\n }\n\n logger.log(\"\");\n logger.success(\"Done. Restart your AI client to pick up the new MCP server.\");\n logger.log(\"\");\n logger.log(\"Tip: if your theme uses the Figma MCP, edit .mcp.json and\");\n logger.log(\n \"replace __FIGMA_API_KEY__ with your Figma personal access token.\"\n );\n}\n\n// ─── upgrade ────────────────────────────────────────────────────────────\n\nexport async function mcpUpgradeCommand(\n options: McpOptions = {}\n): Promise<void> {\n const targetDir = resolveTargetDir(options);\n const templateDir = resolveDefaultTemplateDir();\n\n logger.header(\"Upgrade OneX MCP context files\");\n logger.log(`Target: ${targetDir}`);\n logger.log(\"\");\n\n if (!isThemeDir(targetDir)) {\n logger.error(\n `${targetDir} does not look like an OneX theme (no theme.config.ts found).`\n );\n process.exitCode = 1;\n return;\n }\n\n const statuses = inspectFiles(templateDir, targetDir);\n\n // .mcp.json is excluded from upgrade by default. Once installed, the user\n // owns it — it may register additional servers, hold a real Figma API key,\n // or use a custom MCP command. Use `mcp setup` if you want it written\n // fresh into a brand-new theme that doesn't have one yet.\n const toUpgrade = statuses.filter(\n (s) => !s.identical && s.name !== \".mcp.json\"\n );\n\n // But still warn if .mcp.json is missing entirely or doesn't register onexthm.\n const mcpJsonStatus = statuses.find((s) => s.name === \".mcp.json\");\n if (mcpJsonStatus && !mcpJsonStatus.exists) {\n logger.warning(\n \".mcp.json is missing. Run `onexthm mcp setup` to install it.\"\n );\n }\n\n if (toUpgrade.length === 0) {\n logger.success(\"All AI context files are already up to date.\");\n return;\n }\n\n logger.log(\"Files to update:\");\n for (const s of toUpgrade) {\n const tag = !s.exists ? \"+ new\" : \"~ changed\";\n logger.log(` ${tag} ${s.name}`);\n }\n logger.log(\"\");\n logger.log(\"(.mcp.json is never auto-upgraded — edit by hand if needed.)\");\n logger.log(\"\");\n\n if (!options.yes) {\n const { confirm } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"confirm\",\n message: \"Overwrite the file(s) above?\",\n default: true,\n },\n ]);\n if (!confirm) {\n logger.log(\"Cancelled.\");\n return;\n }\n }\n\n for (const s of toUpgrade) {\n if (!fs.existsSync(s.templatePath)) {\n logger.warning(` ! ${s.name} not in template — skipped`);\n continue;\n }\n await fs.copy(s.templatePath, s.targetPath, { overwrite: true });\n logger.success(` ✓ ${s.name}`);\n }\n\n logger.log(\"\");\n logger.success(\"Done. Restart your AI client to pick up the new context.\");\n}\n\n// ─── doctor ─────────────────────────────────────────────────────────────\n\nexport async function mcpDoctorCommand(\n options: McpOptions = {}\n): Promise<void> {\n const targetDir = resolveTargetDir(options);\n const templateDir = resolveDefaultTemplateDir();\n\n logger.header(\"OneX MCP doctor\");\n logger.log(`Target: ${targetDir}`);\n logger.log(\"\");\n\n // Check 1: theme dir\n if (!isThemeDir(targetDir)) {\n logger.error(\"Not an OneX theme directory (no theme.config.ts).\");\n process.exitCode = 1;\n return;\n }\n logger.success(\"theme.config.ts present\");\n\n // Check 2: .mcp.json registers onexthm\n const mcpJsonPath = path.join(targetDir, \".mcp.json\");\n if (!fs.existsSync(mcpJsonPath)) {\n logger.error(\".mcp.json missing — run `onexthm mcp setup`\");\n } else {\n try {\n const mcpJson = JSON.parse(fs.readFileSync(mcpJsonPath, \"utf-8\"));\n const servers = mcpJson?.mcpServers ?? {};\n if (servers.onexthm) {\n logger.success(\".mcp.json registers `onexthm`\");\n } else {\n logger.error(\".mcp.json does not register `onexthm`\");\n }\n if (servers.figma) {\n const arg = (servers.figma.args ?? []).join(\" \");\n if (arg.includes(\"__FIGMA_API_KEY__\")) {\n logger.warning(\n \"figma server uses placeholder API key — replace __FIGMA_API_KEY__\"\n );\n } else {\n logger.success(\".mcp.json registers `figma`\");\n }\n }\n } catch (err) {\n logger.error(`.mcp.json could not be parsed: ${(err as Error).message}`);\n }\n }\n\n // Check 3: AI context files. Skip .mcp.json byte-comparison — that file is\n // user-owned and the functional \"registers onexthm\" check above is the\n // real test. Comparing bytes against the template would always show false\n // positives for any user with a custom MCP config.\n const statuses = inspectFiles(templateDir, targetDir).filter(\n (s) => s.name !== \".mcp.json\"\n );\n for (const s of statuses) {\n if (!s.exists) {\n logger.warning(`${s.name} missing`);\n } else if (!s.identical) {\n logger.warning(`${s.name} is out of date — run \\`onexthm mcp upgrade\\``);\n } else {\n logger.success(`${s.name} up to date`);\n }\n }\n\n // Check 4: sections-registry.ts (the file the MCP tools patch)\n const registryPath = path.join(targetDir, \"sections-registry.ts\");\n if (fs.existsSync(registryPath)) {\n logger.success(\"sections-registry.ts present\");\n } else {\n logger.warning(\n \"sections-registry.ts missing — section tools won't auto-register\"\n );\n }\n}\n","#!/usr/bin/env node\n\nimport path from \"path\";\nimport os from \"os\";\nimport dotenv from \"dotenv\";\nimport { getProjectRoot } from \"./utils/file-helpers\";\n\n// Load .env files: cwd first, then project root, then global fallback (~/.onexthm/.env)\n// CWD-level (theme directory) takes priority\ndotenv.config({\n path: path.join(process.cwd(), \".env.local\"),\n override: true,\n} as any);\ndotenv.config({ path: path.join(process.cwd(), \".env\") } as any);\ntry {\n const projectRoot = getProjectRoot();\n // Only load project root if different from cwd (avoid double-loading)\n if (path.resolve(projectRoot) !== path.resolve(process.cwd())) {\n dotenv.config({\n path: path.join(projectRoot, \".env.local\"),\n } as any);\n dotenv.config({ path: path.join(projectRoot, \".env\") } as any);\n }\n} catch {\n // Not in a valid project directory — skip project-level .env\n}\ndotenv.config({\n path: path.join(os.homedir(), \".onexthm\", \".env\"),\n quiet: true,\n} as any);\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { createRequire } from \"module\";\nimport { initCommand } from \"./commands/init\";\nimport { createSectionCommand } from \"./commands/create-section\";\nimport { createBlockCommand } from \"./commands/create-block\";\nimport { createComponentCommand } from \"./commands/create-component\";\nimport { listCommand } from \"./commands/list\";\nimport { validateCommand } from \"./commands/validate\";\nimport { buildCommand } from \"./commands/build\";\nimport { packageCommand } from \"./commands/package\";\nimport { deployCommand } from \"./commands/deploy\";\nimport { uploadCommand } from \"./commands/upload\";\nimport { downloadCommand } from \"./commands/download\";\nimport { cloneCommand } from \"./commands/clone\";\nimport { devCommand } from \"./commands/dev\";\nimport { configCommand } from \"./commands/config\";\nimport { loginCommand } from \"./commands/login\";\nimport { logoutCommand } from \"./commands/logout\";\nimport { whoamiCommand } from \"./commands/whoami\";\nimport { publishCommand } from \"./commands/publish\";\nimport {\n mcpSetupCommand,\n mcpUpgradeCommand,\n mcpDoctorCommand,\n} from \"./commands/mcp\";\n\nconst require = createRequire(import.meta.url);\nconst { version } = require(\"../package.json\");\n\nconst program = new Command();\n\nprogram\n .name(\"onexthm\")\n .description(\"CLI tool for OneX theme development\")\n .version(version);\n\n// Init command\nprogram\n .command(\"init\")\n .description(\"Create a new OneX theme project\")\n .argument(\"[project-name]\", \"Name of the project\")\n .option(\n \"-t, --template <template>\",\n \"Template to use (default, minimal)\",\n \"default\"\n )\n .option(\"--no-install\", \"Skip installing dependencies\")\n .option(\"--git\", \"Initialize git repository\")\n .option(\"-y, --yes\", \"Skip prompts and use defaults\")\n .option(\n \"--env <env>\",\n \"Target environment: dev or prod (default: dev)\",\n \"dev\"\n )\n .action(initCommand);\n\n// Create section command\nprogram\n .command(\"create:section\")\n .alias(\"cs\")\n .description(\"Create a new section\")\n .argument(\"<name>\", \"Name of the section (e.g., hero, features)\")\n .option(\"-t, --theme <theme>\", \"Theme to create section in\")\n .option(\n \"-c, --category <category>\",\n \"Section category (headers, content, footers)\"\n )\n .option(\n \"--template <template>\",\n \"Initial template variant (default, minimal)\"\n )\n .action(createSectionCommand);\n\n// Create block command\nprogram\n .command(\"create:block\")\n .alias(\"cb\")\n .description(\"Create a new block\")\n .argument(\n \"<name>\",\n \"Name of the block (e.g., product-card, testimonial-item)\"\n )\n .option(\"-t, --theme <theme>\", \"Theme to create block in (optional)\")\n .action(createBlockCommand);\n\n// Create component command\nprogram\n .command(\"create:component\")\n .alias(\"cc\")\n .description(\"Create a new component\")\n .argument(\"<name>\", \"Name of the component (e.g., button, badge)\")\n .option(\"-t, --type <type>\", \"Component type (ui, layout, form)\")\n .action(createComponentCommand);\n\n// List command\nprogram\n .command(\"list\")\n .description(\"List available themes, sections, blocks, and components\")\n .option(\"-s, --sections\", \"List sections only\")\n .option(\"-b, --blocks\", \"List blocks only\")\n .option(\"-c, --components\", \"List components only\")\n .option(\"-t, --theme <theme>\", \"Filter by theme\")\n .action(listCommand);\n\n// Validate command\nprogram\n .command(\"validate\")\n .description(\"Validate theme structure and files\")\n .option(\"-t, --theme <theme>\", \"Theme to validate\")\n .option(\"-f, --fix\", \"Auto-fix issues if possible (not implemented yet)\")\n .action(validateCommand);\n\n// Dev command\nprogram\n .command(\"dev\")\n .description(\"Start dev server with live preview and hot reload\")\n .option(\"-t, --theme <theme>\", \"Theme to develop\")\n .option(\"-p, --port <port>\", \"Dev server port\", \"3456\")\n .option(\"--no-open\", \"Don't open browser automatically\")\n .action(devCommand);\n\n// Build command\nprogram\n .command(\"build\")\n .description(\"Build theme for production\")\n .option(\"-t, --theme <theme>\", \"Theme to build\")\n .option(\"-p, --production\", \"Production build with optimizations\")\n .option(\"-w, --watch\", \"Watch mode for development\")\n .action(buildCommand);\n\n// Package command\nprogram\n .command(\"package\")\n .description(\"Compile and package theme as distributable zip file\")\n .option(\"-t, --theme <theme>\", \"Theme to package\")\n .option(\"-o, --output <dir>\", \"Output directory for package\")\n .option(\"-n, --name <name>\", \"Custom package name\")\n .option(\"-m, --minify\", \"Minify compiled output\")\n .option(\"--skip-build\", \"Skip compilation step (use existing compiled theme)\")\n .action(packageCommand);\n\n// Deploy command\nprogram\n .command(\"deploy\")\n .description(\"Upload theme package to API server\")\n .option(\"-t, --theme <theme>\", \"Theme to deploy (finds latest package)\")\n .option(\"-p, --package <file>\", \"Specific package file to upload\")\n .option(\"--api-url <url>\", \"API server URL (default: http://localhost:3001)\")\n .option(\"-k, --api-key <key>\", \"API key for authentication\")\n .option(\n \"-e, --environment <env>\",\n \"Environment (production, staging, development)\"\n )\n .action(deployCommand);\n\n// Upload command — DEPRECATED. Use `publish` instead.\n// Kept registered so existing CI scripts get a clear migration message.\nprogram\n .command(\"upload\")\n .description(\"[deprecated] use `onexthm publish` instead\")\n .option(\"-t, --theme <theme>\", \"[deprecated] ignored\")\n .option(\"-b, --bucket <name>\", \"[deprecated] ignored\")\n .option(\"-v, --version <version>\", \"[deprecated] ignored\")\n .option(\"-e, --environment <env>\", \"[deprecated] ignored\")\n .option(\"--dry-run\", \"[deprecated] ignored\")\n .option(\"--skip-source\", \"[deprecated] ignored\")\n .option(\"--source-dir <dir>\", \"[deprecated] ignored\")\n .action(uploadCommand);\n\n// Download command\nprogram\n .command(\"download\")\n .description(\"Download a published theme via the website-api\")\n .option(\"-t, --theme-id <id>\", \"Theme ID to download\")\n .option(\n \"-v, --version <version>\",\n \"Theme version (default: latest)\",\n \"latest\"\n )\n .option(\n \"--env <env>\",\n \"Target environment: dev or prod (default: dev)\",\n \"dev\"\n )\n // --bucket is deprecated. Themes are now served via HTTP from the website-api Lambda.\n .option(\"-b, --bucket <name>\", \"[deprecated] ignored\")\n .option(\"-o, --output <dir>\", \"Output directory\", \"./active-theme\")\n .action(downloadCommand);\n\n// Clone command\nprogram\n .command(\"clone\")\n .description(\"Clone theme source code via the website-api\")\n .argument(\"<theme-name>\", \"Theme to clone\")\n .option(\n \"-v, --version <version>\",\n \"Theme version (default: latest)\",\n \"latest\"\n )\n .option(\"-n, --name <name>\", \"New theme name (skips interactive prompt)\")\n .option(\"-o, --output <dir>\", \"Output directory\")\n .option(\n \"--env <env>\",\n \"Target environment: dev or prod (default: dev)\",\n \"dev\"\n )\n // --bucket is deprecated. Source is now fetched via authenticated HTTP, not direct S3.\n .option(\"-b, --bucket <name>\", \"[deprecated] ignored\")\n .option(\"--no-install\", \"Skip running pnpm install after clone\")\n .action(cloneCommand);\n\n// Config command\nprogram\n .command(\"config\")\n .description(\"Configure OneX CLI credentials (AWS, API keys)\")\n .action(configCommand);\n\n// Auth commands\nprogram\n .command(\"login\")\n .description(\"Login to OneX platform\")\n .option(\n \"--env <env>\",\n \"Target environment: dev or prod (default: dev)\",\n \"dev\"\n )\n .action(loginCommand);\n\nprogram\n .command(\"logout\")\n .description(\"Logout from OneX platform\")\n .option(\n \"--env <env>\",\n \"Target environment: dev or prod (default: dev)\",\n \"dev\"\n )\n .action(logoutCommand);\n\nprogram\n .command(\"whoami\")\n .description(\"Show current logged-in developer\")\n .option(\n \"--env <env>\",\n \"Target environment: dev or prod (default: dev)\",\n \"dev\"\n )\n .action(whoamiCommand);\n\n// MCP / AI-context management\nconst mcpCmd = program\n .command(\"mcp\")\n .description(\"Manage MCP server registration and AI-context files\");\n\nmcpCmd\n .command(\"setup\")\n .description(\n \"Install .mcp.json + CLAUDE.md + AGENTS.md + .cursorrules into the current theme\"\n )\n .option(\"-y, --yes\", \"Skip confirmation prompts\")\n .action(mcpSetupCommand);\n\nmcpCmd\n .command(\"upgrade\")\n .description(\n \"Refresh AI-context files to the latest version from the bundled template\"\n )\n .option(\"-y, --yes\", \"Skip confirmation prompts\")\n .action(mcpUpgradeCommand);\n\nmcpCmd\n .command(\"doctor\")\n .description(\"Diagnose MCP setup in the current theme directory\")\n .action(mcpDoctorCommand);\n\n// Publish command (secure theme publishing)\nprogram\n .command(\"publish\")\n .description(\"Build, scan, and publish theme to marketplace (requires login)\")\n .option(\"-t, --theme <path>\", \"Theme directory path\")\n .option(\n \"--bump <type>\",\n \"Auto-bump version before publish (patch|minor|major)\"\n )\n .option(\n \"--env <env>\",\n \"Target environment: dev or prod (default: dev)\",\n \"dev\"\n )\n .action(publishCommand);\n\n// Error handling\nprogram.configureOutput({\n writeErr: (str) => process.stderr.write(chalk.red(str)),\n});\n\nprogram.parse();\n"]}
1
+ {"version":3,"sources":["../src/utils/logger.ts","../src/utils/extract-schemas.ts","../src/utils/scan-theme-assets.ts","../src/utils/compile-theme.ts","../src/utils/dev-server.ts","../src/utils/file-helpers.ts","../src/commands/init.ts","../src/utils/validators.ts","../src/utils/cli-auth.ts","../src/commands/create-section.ts","../src/commands/create-block.ts","../src/commands/create-component.ts","../src/commands/list.ts","../src/commands/validate.ts","../src/commands/build.ts","../src/commands/package.ts","../src/commands/deploy.ts","../src/commands/upload.ts","../src/commands/download.ts","../src/commands/clone.ts","../src/commands/dev.ts","../src/commands/config.ts","../src/commands/login.ts","../src/commands/logout.ts","../src/commands/whoami.ts","../src/commands/publish.ts","../src/utils/fetch-prior-schemas.ts","../src/utils/schema-diff.ts","../src/commands/mcp.ts","../src/cli.ts"],"names":["chalk","path","exports","fs","crypto","glob","build","subpath","cacheKey","hash","hashedName","hashedMapName","oldFiles","version","context","data","execSync","inquirer","answers","isThemeDir","compileStandaloneTheme","runCommand","spawn","fetch","ora","unwrapEnvelope","resolveLatestVersion","AdmZip","fsNode","os","compilePreviewRuntime","createDevServer","archiver","require","createRequire"],"mappings":"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","file":"cli.mjs","sourcesContent":["import chalk from \"chalk\";\nimport ora, { Ora } from \"ora\";\n\nexport class Logger {\n private spinner: Ora | null = null;\n\n success(message: string): void {\n console.log(chalk.green(\"✓\"), message);\n }\n\n error(message: string): void {\n console.log(chalk.red(\"✗\"), message);\n }\n\n warning(message: string): void {\n console.log(chalk.yellow(\"⚠\"), message);\n }\n\n info(message: string): void {\n console.log(chalk.blue(\"ℹ\"), message);\n }\n\n log(message: string): void {\n console.log(message);\n }\n\n startSpinner(message: string): void {\n this.spinner = ora(message).start();\n }\n\n stopSpinner(success: boolean = true, message?: string): void {\n if (!this.spinner) return;\n\n if (success) {\n this.spinner.succeed(message);\n } else {\n this.spinner.fail(message);\n }\n this.spinner = null;\n }\n\n updateSpinner(message: string): void {\n if (this.spinner) {\n this.spinner.text = message;\n }\n }\n\n newLine(): void {\n console.log();\n }\n\n header(message: string): void {\n console.log();\n console.log(chalk.bold.cyan(message));\n console.log(chalk.cyan(\"=\".repeat(message.length)));\n console.log();\n }\n\n section(message: string): void {\n console.log();\n console.log(chalk.bold(message));\n }\n}\n\nexport const logger = new Logger();\n","/**\n * Schema extractor for the publish-time diff gate.\n *\n * Walks sections/ *.schema.ts via jiti (same pattern as compile-theme.ts) and\n * emits a canonical, deterministic JSON shape that can be diffed against a\n * prior published version's schemas.json to detect breaking changes, renames\n * (via aliases), and defaults-only drift.\n *\n * Only fields that affect saved-data compatibility or rendered output are\n * captured. Display-only fields (label, info, placeholder, description, icon)\n * are stripped so cosmetic label edits don't show up as diffs.\n */\n\nimport path from \"path\";\nimport { glob } from \"glob\";\n\nexport interface ExtractedField {\n id: string;\n type: string;\n required?: boolean;\n default?: unknown;\n aliases?: string[];\n // Constraints that, if tightened, invalidate existing saved data\n maxLength?: number;\n min?: number;\n max?: number;\n step?: number;\n accept?: string[];\n // select/radio option values (labels stripped)\n options?: string[];\n}\n\nexport interface ExtractedBlock {\n type: string;\n settings: ExtractedField[];\n defaults: Record<string, unknown>;\n limit?: number;\n min?: number;\n sortable?: boolean;\n baseType?: string;\n}\n\nexport interface ExtractedTemplate {\n id: string;\n isDefault?: boolean;\n settings?: ExtractedField[];\n defaults?: Record<string, unknown>;\n}\n\nexport interface ExtractedSection {\n type: string;\n settings: ExtractedField[];\n defaults: Record<string, unknown>;\n blocks: ExtractedBlock[];\n templates: ExtractedTemplate[];\n dataRequirements: Record<string, boolean> | null;\n global?: boolean;\n maxBlocks?: number;\n}\n\nexport interface SchemaManifest {\n /** Schema version of this manifest format itself — bump if we change shape */\n manifestVersion: 1;\n sections: Record<string, ExtractedSection>;\n}\n\n/**\n * Deterministic object sort: returns a new object with keys in sorted order,\n * recursively. Ensures JSON.stringify produces byte-identical output across\n * runs and machines.\n */\nfunction sortedCopy<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map((v) => sortedCopy(v)) as unknown as T;\n }\n if (value && typeof value === \"object\") {\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n sorted[key] = sortedCopy((value as Record<string, unknown>)[key]);\n }\n return sorted as unknown as T;\n }\n return value;\n}\n\n/** Strip display-only properties and coerce into ExtractedField. */\nfunction normalizeField(raw: any): ExtractedField {\n const out: ExtractedField = {\n id: String(raw.id),\n type: String(raw.type),\n };\n if (raw.required === true) out.required = true;\n if (raw.default !== undefined) out.default = raw.default;\n if (Array.isArray(raw.aliases) && raw.aliases.length > 0) {\n out.aliases = [...raw.aliases].map(String).sort();\n }\n if (typeof raw.maxLength === \"number\") out.maxLength = raw.maxLength;\n if (typeof raw.min === \"number\") out.min = raw.min;\n if (typeof raw.max === \"number\") out.max = raw.max;\n if (typeof raw.step === \"number\") out.step = raw.step;\n if (Array.isArray(raw.accept)) {\n out.accept = [...raw.accept].map(String).sort();\n }\n if (Array.isArray(raw.options)) {\n out.options = raw.options.map((o: any) => String(o?.value ?? o)).sort();\n }\n return out;\n}\n\nfunction normalizeBlock(raw: any): ExtractedBlock {\n return {\n type: String(raw.type),\n settings: Array.isArray(raw.settings)\n ? raw.settings.map(normalizeField).sort(sortFieldsById)\n : [],\n defaults:\n raw.defaults && typeof raw.defaults === \"object\"\n ? sortedCopy(raw.defaults)\n : {},\n ...(typeof raw.limit === \"number\" ? { limit: raw.limit } : {}),\n ...(typeof raw.min === \"number\" ? { min: raw.min } : {}),\n ...(raw.sortable === true ? { sortable: true } : {}),\n ...(raw.baseType ? { baseType: String(raw.baseType) } : {}),\n };\n}\n\nfunction normalizeTemplate(raw: any): ExtractedTemplate {\n const out: ExtractedTemplate = { id: String(raw.id) };\n if (raw.isDefault === true) out.isDefault = true;\n if (Array.isArray(raw.settings)) {\n out.settings = raw.settings.map(normalizeField).sort(sortFieldsById);\n }\n if (raw.defaults && typeof raw.defaults === \"object\") {\n out.defaults = sortedCopy(raw.defaults);\n }\n return out;\n}\n\nfunction sortFieldsById(a: { id: string }, b: { id: string }): number {\n return a.id.localeCompare(b.id);\n}\n\nfunction sortByType(a: { type: string }, b: { type: string }): number {\n return a.type.localeCompare(b.type);\n}\n\nfunction normalizeSection(raw: any): ExtractedSection {\n return {\n type: String(raw.type),\n settings: Array.isArray(raw.settings)\n ? raw.settings.map(normalizeField).sort(sortFieldsById)\n : [],\n defaults:\n raw.defaults && typeof raw.defaults === \"object\"\n ? sortedCopy(raw.defaults)\n : {},\n blocks: Array.isArray(raw.blocks)\n ? raw.blocks.map(normalizeBlock).sort(sortByType)\n : [],\n templates: Array.isArray(raw.templates)\n ? raw.templates.map(normalizeTemplate).sort(sortFieldsById)\n : [],\n dataRequirements:\n raw.dataRequirements && typeof raw.dataRequirements === \"object\"\n ? (sortedCopy(raw.dataRequirements) as Record<string, boolean>)\n : null,\n ...(raw.global === true ? { global: true } : {}),\n ...(typeof raw.maxBlocks === \"number\" ? { maxBlocks: raw.maxBlocks } : {}),\n };\n}\n\n/**\n * Load every sections/ *.schema.ts file in the theme and return a canonical\n * SchemaManifest. Deterministic — same source input always produces the same\n * JSON bytes.\n */\nexport async function extractSchemas(\n themePath: string\n): Promise<SchemaManifest> {\n const { createJiti } = await import(\"jiti\");\n const jiti = createJiti(import.meta.url);\n\n const schemaFiles = await glob(\"sections/**/*.schema.ts\", { cwd: themePath });\n const sections: Record<string, ExtractedSection> = {};\n\n for (const file of schemaFiles) {\n try {\n const mod = await jiti.import(path.join(themePath, file));\n const exports = mod as Record<string, unknown>;\n\n // Schemas export an object with .type (string) and .settings (array).\n for (const value of Object.values(exports)) {\n if (\n value &&\n typeof value === \"object\" &&\n typeof (value as any).type === \"string\" &&\n Array.isArray((value as any).settings)\n ) {\n const section = normalizeSection(value);\n sections[section.type] = section;\n }\n }\n } catch {\n // Skip unreadable schema files — the publish build step will also\n // surface the error, so we don't double-report here.\n }\n }\n\n const manifest: SchemaManifest = {\n manifestVersion: 1,\n sections: {},\n };\n for (const type of Object.keys(sections).sort()) {\n manifest.sections[type] = sections[type];\n }\n return manifest;\n}\n\n/**\n * Serialize a SchemaManifest to deterministic JSON bytes.\n * Two runs on the same input produce byte-identical output.\n */\nexport function serializeManifest(manifest: SchemaManifest): string {\n return JSON.stringify(sortedCopy(manifest), null, 2);\n}\n","/**\n * Scan dist/theme-assets/ and produce a content-addressable asset list.\n *\n * Each file gets a short SHA256 prefix appended to its name (Vite/Webpack\n * style) so subsequent publishes can dedup unchanged files against the\n * per-theme asset index on the backend.\n *\n * Hashing follows the same SHA256 pattern as compile-theme.ts::contentHashEntry\n * (8-char hex prefix).\n */\n\nimport fs from \"fs-extra\";\nimport path from \"path\";\nimport crypto from \"crypto\";\nimport { glob } from \"glob\";\n\n/** MIME lookup used for both the upload Content-Type and the manifest. */\nconst MIME_MAP: Record<string, string> = {\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".avif\": \"image/avif\",\n \".svg\": \"image/svg+xml\",\n \".ico\": \"image/x-icon\",\n \".bmp\": \"image/bmp\",\n \".woff\": \"font/woff\",\n \".woff2\": \"font/woff2\",\n \".ttf\": \"font/ttf\",\n \".otf\": \"font/otf\",\n \".eot\": \"application/vnd.ms-fontobject\",\n \".mp4\": \"video/mp4\",\n \".webm\": \"video/webm\",\n \".mov\": \"video/quicktime\",\n \".ogg\": \"video/ogg\",\n \".json\": \"application/json\",\n};\n\n/** Length of the hex hash segment appended to filenames. */\nconst HASH_LEN = 8;\n\n/**\n * Video extensions that exceed the 20MB presigned-URL limit and must be\n * uploaded via the multipart video API instead.\n */\nexport const VIDEO_EXTENSIONS = [\n \".mp4\",\n \".webm\",\n \".ogg\",\n \".mov\",\n \".avi\",\n \".mkv\",\n];\n\nexport function isVideoAsset(filePath: string): boolean {\n const lower = filePath.toLowerCase();\n return VIDEO_EXTENSIONS.some((ext) => lower.endsWith(ext));\n}\n\nexport interface HashedAssetEntry {\n /** Original relative path inside theme-assets/, e.g. \"banners/hero.png\" */\n originalPath: string;\n /** Hashed relative path, e.g. \"banners/hero-abc12345.png\" */\n hashedPath: string;\n /** 8-char hex SHA256 prefix of the file content */\n hash: string;\n /** File size in bytes */\n size: number;\n /** MIME type inferred from extension */\n contentType: string;\n /** Local absolute filesystem path — used during upload */\n absPath: string;\n}\n\nfunction mimeFor(filename: string): string {\n const ext = path.extname(filename).toLowerCase();\n return MIME_MAP[ext] || \"application/octet-stream\";\n}\n\nasync function sha256Prefix(absPath: string, len: number): Promise<string> {\n const buf = await fs.readFile(absPath);\n return crypto.createHash(\"sha256\").update(buf).digest(\"hex\").slice(0, len);\n}\n\n/**\n * Given a relative path like \"banners/hero.png\" and a hash \"abc12345\",\n * return \"banners/hero-abc12345.png\".\n */\nfunction insertHashIntoName(relPath: string, hash: string): string {\n const dir = path.posix.dirname(relPath);\n const base = path.posix.basename(relPath);\n const ext = path.posix.extname(base);\n const stem = ext ? base.slice(0, -ext.length) : base;\n const hashed = `${stem}-${hash}${ext}`;\n return dir === \".\" ? hashed : `${dir}/${hashed}`;\n}\n\n/**\n * Walk dist/theme-assets/ and return all asset files with content hashes.\n * Returns [] if the directory does not exist.\n *\n * @param distDir Absolute path to the theme's dist/ directory.\n */\nexport async function scanThemeAssets(\n distDir: string\n): Promise<HashedAssetEntry[]> {\n const assetsDir = path.join(distDir, \"theme-assets\");\n if (!(await fs.pathExists(assetsDir))) return [];\n\n const files = await glob(\"**/*\", {\n cwd: assetsDir,\n nodir: true,\n dot: false,\n });\n\n const results: HashedAssetEntry[] = [];\n for (const rel of files) {\n const absPath = path.join(assetsDir, rel);\n const stat = await fs.stat(absPath);\n if (!stat.isFile()) continue;\n\n // Normalize to forward slashes for S3 keys\n const originalPath = rel.split(path.sep).join(\"/\");\n const hash = await sha256Prefix(absPath, HASH_LEN);\n const hashedPath = insertHashIntoName(originalPath, hash);\n const contentType = mimeFor(rel);\n\n results.push({\n originalPath,\n hashedPath,\n hash,\n size: stat.size,\n contentType,\n absPath,\n });\n }\n\n // Deterministic order for stable diffs and logging\n results.sort((a, b) => a.originalPath.localeCompare(b.originalPath));\n return results;\n}\n\n/**\n * Build the asset-map.json content that ships inside bundle.zip.\n * Maps original theme-relative paths to hashed filenames the editor /\n * storefront can resolve against the shared S3 asset folder.\n */\nexport function buildAssetMap(\n entries: HashedAssetEntry[]\n): Record<string, string> {\n const map: Record<string, string> = {};\n for (const e of entries) {\n map[e.originalPath] = e.hashedPath;\n }\n return map;\n}\n","/**\n * Standalone Theme Compiler\n *\n * Compiles standalone theme source code to ESM bundles using esbuild.\n * Adapted from scripts/compile-theme.ts for use in the CLI.\n *\n * Key differences from the monorepo version:\n * - Core global plugin reads from node_modules/@onexapis/core/dist/ (not packages/core/dist/)\n * - Process shim is inlined (no external file dependency)\n * - Output goes to ./dist/ in the theme directory\n */\n\nimport * as esbuild from \"esbuild\";\nimport type { Plugin } from \"esbuild\";\nimport path from \"path\";\nimport fs from \"fs/promises\";\nimport crypto from \"crypto\";\nimport { glob } from \"glob\";\nimport { createRequire } from \"node:module\";\nimport { logger } from \"./logger\";\nimport { extractSchemas, serializeManifest } from \"./extract-schemas\";\nimport { scanThemeAssets } from \"./scan-theme-assets\";\n\n/**\n * Generate Tailwind CSS bundle for the theme.\n * Scans theme section/component TSX files to compile all used utility classes.\n * Output: dist/bundle.css — loaded by the editor iframe as a CSS asset.\n */\nasync function generateThemeCSS(\n themePath: string,\n outDir: string\n): Promise<void> {\n try {\n // Dynamic imports so tailwindcss/postcss don't break if missing\n const postcss = (await import(\"postcss\")).default;\n const tailwindcss = (await import(\"tailwindcss\")).default;\n\n const tailwindConfig = {\n content: [\n path.join(themePath, \"sections/**/*.{ts,tsx}\"),\n path.join(themePath, \"components/**/*.{ts,tsx}\"),\n ],\n theme: { extend: {} },\n plugins: [] as any[],\n };\n\n const inputCSS =\n \"@tailwind base;\\n@tailwind components;\\n@tailwind utilities;\";\n const result = await postcss([tailwindcss(tailwindConfig)]).process(\n inputCSS,\n { from: undefined }\n );\n\n await fs.writeFile(path.join(outDir, \"bundle.css\"), result.css);\n logger.info(\"Generated bundle.css\");\n } catch (err) {\n logger.warning(\n `CSS generation skipped: ${err instanceof Error ? err.message : String(err)}`\n );\n }\n}\n\n/**\n * Inline process shim for browser environments.\n * Equivalent to scripts/process-shim.js but embedded as a string.\n */\nconst PROCESS_SHIM = `\nif (typeof process === \"undefined\") {\n globalThis.process = {\n env: {},\n browser: true,\n };\n}\n`;\n\n/**\n * Plugin to externalize React as window globals.\n * React/ReactDOM are shared via globalThis to prevent duplication.\n */\nconst reactGlobalPlugin: Plugin = {\n name: \"react-global\",\n setup(build) {\n build.onResolve({ filter: /^react$/ }, () => ({\n path: \"react-external\",\n namespace: \"react-global\",\n }));\n\n build.onResolve({ filter: /^react-dom$/ }, () => ({\n path: \"react-dom-external\",\n namespace: \"react-global\",\n }));\n\n build.onResolve({ filter: /^react\\/jsx-runtime$/ }, () => ({\n path: \"react-jsx-runtime-external\",\n namespace: \"react-global\",\n }));\n\n build.onLoad({ filter: /.*/, namespace: \"react-global\" }, (args) => {\n if (args.path === \"react-external\") {\n return {\n contents: `\nif (!globalThis.__ONEX_REACT__) {\n throw new Error('[Theme Bundle] React not initialized. Ensure globalThis.__ONEX_REACT__ is set before loading theme.');\n}\n\nconst React = globalThis.__ONEX_REACT__;\nexport default React;\n\nexport const {\n useState,\n useEffect,\n useContext,\n useReducer,\n useCallback,\n useMemo,\n useRef,\n useImperativeHandle,\n useLayoutEffect,\n useDebugValue,\n useDeferredValue,\n useTransition,\n useId,\n useSyncExternalStore,\n useInsertionEffect,\n createContext,\n forwardRef,\n lazy,\n memo,\n startTransition,\n createElement,\n cloneElement,\n isValidElement,\n Children,\n Fragment,\n Profiler,\n StrictMode,\n Suspense,\n Component,\n PureComponent,\n useActionState,\n use,\n} = React;\n `.trim(),\n loader: \"js\",\n };\n }\n\n if (args.path === \"react-dom-external\") {\n return {\n contents: `\nif (!globalThis.__ONEX_REACT_DOM__) {\n throw new Error('[Theme Bundle] ReactDOM not initialized. Ensure globalThis.__ONEX_REACT_DOM__ is set before loading theme.');\n}\n\nconst ReactDOM = globalThis.__ONEX_REACT_DOM__;\nexport default ReactDOM;\n\nexport const {\n createRoot,\n hydrateRoot,\n flushSync,\n createPortal,\n findDOMNode,\n render,\n hydrate,\n unmountComponentAtNode,\n} = ReactDOM;\n `.trim(),\n loader: \"js\",\n };\n }\n\n if (args.path === \"react-jsx-runtime-external\") {\n return {\n contents: `\nif (!globalThis.__ONEX_JSX_RUNTIME__) {\n throw new Error('[Theme Bundle] React JSX runtime not initialized. Ensure globalThis.__ONEX_JSX_RUNTIME__ is set before loading theme.');\n}\nconst _jsxRuntime = globalThis.__ONEX_JSX_RUNTIME__;\nexport const jsx = _jsxRuntime.jsx;\nexport const jsxs = _jsxRuntime.jsxs;\nexport const Fragment = _jsxRuntime.Fragment;\n `.trim(),\n loader: \"js\",\n };\n }\n\n return null;\n });\n },\n};\n\n/**\n * Plugin to externalize @tanstack/react-query as a window global.\n * Prevents the theme bundle from shipping its own copy of react-query,\n * which would create a second QueryClient instance separate from the host's.\n */\nconst reactQueryGlobalPlugin: Plugin = {\n name: \"react-query-global\",\n setup(build) {\n build.onResolve({ filter: /^@tanstack\\/react-query$/ }, () => ({\n path: \"react-query-external\",\n namespace: \"react-query-global\",\n }));\n\n build.onLoad({ filter: /.*/, namespace: \"react-query-global\" }, () => ({\n contents: `\nif (!globalThis.__REACT_QUERY__) {\n throw new Error('[Theme Bundle] @tanstack/react-query not initialized. Ensure globalThis.__REACT_QUERY__ is set before loading theme.');\n}\nconst _rq = globalThis.__REACT_QUERY__;\nexport default _rq;\nexport const {\n useQuery,\n useMutation,\n useQueryClient,\n useInfiniteQuery,\n QueryClient,\n QueryClientProvider,\n useIsFetching,\n useIsMutating,\n usePrefetchQuery,\n usePrefetchInfiniteQuery,\n} = _rq;\n `.trim(),\n loader: \"js\",\n }));\n },\n};\n\n/**\n * Resolve a file inside node_modules, searching up the directory tree.\n * Handles monorepo hoisting where deps are in a parent node_modules.\n */\nasync function resolveNodeModulesFile(\n startDir: string,\n relativePath: string\n): Promise<string | null> {\n let dir = startDir;\n while (true) {\n const candidate = path.join(dir, \"node_modules\", relativePath);\n try {\n await fs.access(candidate);\n return candidate;\n } catch {\n const parent = path.dirname(dir);\n if (parent === dir) break; // reached filesystem root\n dir = parent;\n }\n }\n return null;\n}\n\n/**\n * Scan source files in `sourceDir` for named imports/exports from `packageName`.\n * Returns a map of subpath → Set of imported names.\n * e.g. for `@onexapis/core/internal` → key \"internal\", names {\"useCart\", \"Button\"}\n * for `@onexapis/core` → key \"\" (empty string)\n */\nasync function scanImportsFromPackage(\n sourceDir: string,\n packageName: string\n): Promise<Record<string, Set<string>>> {\n const result: Record<string, Set<string>> = {};\n const escapedPkg = packageName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n // Match named imports: import { useCart, useAuth } from \"@onexapis/core/hooks\"\n const importRegex = new RegExp(\n `(?:import|export)\\\\s+(?:type\\\\s+)?\\\\{([^}]+)\\\\}\\\\s+from\\\\s+[\"']${escapedPkg}(/[\\\\w./-]+)?[\"']`,\n \"g\"\n );\n // Match namespace imports: import * as H from \"@onexapis/core/hooks\"\n const namespaceImportRegex = new RegExp(\n `import\\\\s+\\\\*\\\\s+as\\\\s+\\\\w+\\\\s+from\\\\s+[\"']${escapedPkg}(/[\\\\w./-]+)?[\"']`,\n \"g\"\n );\n\n const sourceFiles = await glob(\"**/*.{ts,tsx}\", {\n cwd: sourceDir,\n ignore: [\"node_modules/**\", \"dist/**\"],\n });\n\n for (const file of sourceFiles) {\n try {\n const content = await fs.readFile(path.join(sourceDir, file), \"utf-8\");\n // Check namespace imports first — marks subpath for full export reading\n for (const match of content.matchAll(namespaceImportRegex)) {\n const subpath = match[1] ? match[1].slice(1) : \"\";\n if (!result[subpath]) result[subpath] = new Set();\n result[subpath].add(\"*\"); // Flag: needs ALL exports from dist\n }\n // Check named imports\n for (const match of content.matchAll(importRegex)) {\n const subpath = match[2] ? match[2].slice(1) : \"\";\n if (!result[subpath]) result[subpath] = new Set();\n for (const name of match[1].split(\",\")) {\n let original = name\n .trim()\n .split(/\\s+as\\s+/)[0]\n .trim();\n if (original.startsWith(\"type \")) continue;\n if (original) result[subpath].add(original);\n }\n }\n } catch {\n // skip unreadable files\n }\n }\n\n return result;\n}\n\n/**\n * Plugin to externalize @onexapis/core as window global.\n * Scans theme source to discover imports; falls back to reading dist files.\n */\nfunction createCoreGlobalPlugin(themePath: string): Plugin {\n const exportsBySubpath: Record<string, string[]> = {};\n let scanPromise: Promise<void> | null = null;\n\n return {\n name: \"core-global\",\n setup(build) {\n build.onResolve({ filter: /^@onexapis\\/core(\\/.*)?$/ }, (args) => ({\n path: args.path,\n namespace: \"core-global\",\n }));\n\n build.onLoad({ filter: /.*/, namespace: \"core-global\" }, async (args) => {\n // On first load, scan theme source files to discover all @onexapis/core imports\n // Use a shared promise to avoid race conditions with concurrent onLoad calls\n if (!scanPromise) {\n scanPromise = scanImportsFromPackage(themePath, \"@onexapis/core\")\n .then((scanned) => {\n for (const [subpath, names] of Object.entries(scanned)) {\n const cacheKey = subpath || \"__root__\";\n exportsBySubpath[cacheKey] = [...names];\n }\n })\n .catch(() => {\n // Source scan failed, will fall back to dist-file reading\n });\n }\n await scanPromise;\n\n const match = args.path.match(/^@onexapis\\/core(\\/(.+))?$/);\n const subpath = match?.[2] || \"\";\n const moduleAccess = subpath ? `['${subpath}']` : \"\";\n\n let namedExports: string[] = [];\n const cacheKey = subpath || \"__root__\";\n const cached = exportsBySubpath[cacheKey];\n const needsAllExports = cached?.includes(\"*\");\n if (cached && cached.length > 0 && !needsAllExports) {\n // Deduplicate (multiple sections may import same hook)\n namedExports = [...new Set(cached)];\n } else {\n // Fallback: read dist files when source scan found nothing for this subpath\n const distFileName = subpath ? `${subpath}.mjs` : \"index.mjs\";\n let distPath = await resolveNodeModulesFile(\n themePath,\n path.join(\"@onexapis\", \"core\", \"dist\", distFileName)\n );\n if (!distPath) {\n distPath = await resolveNodeModulesFile(\n __dirname,\n path.join(\"@onexapis\", \"core\", \"dist\", distFileName)\n );\n }\n try {\n if (!distPath) throw new Error(\"not found\");\n const distContent = await fs.readFile(distPath, \"utf-8\");\n const exportMatches = distContent.matchAll(/export\\s*\\{([^}]+)\\}/g);\n for (const m of exportMatches) {\n const names = m[1]\n .split(\",\")\n .map((n) => {\n const parts = n.trim().split(/\\s+as\\s+/);\n return (parts[1] || parts[0]).trim();\n })\n .filter((n) => n.length > 0);\n namedExports.push(...names);\n }\n // Merge with any named imports from source scan (remove \"*\" flag)\n if (cached && cached.length > 0) {\n for (const n of cached) {\n if (n !== \"*\") namedExports.push(n);\n }\n }\n namedExports = [...new Set(namedExports)];\n } catch {\n // dist file not found - fall back to default-only export\n }\n exportsBySubpath[cacheKey] = namedExports;\n }\n\n const namedExportLines =\n namedExports.length > 0\n ? `\\nexport const {\\n ${namedExports.join(\",\\n \")}\\n} = _module;\\n`\n : \"\";\n\n return {\n contents: `\nif (!globalThis.__ONEX_CORE__) {\n throw new Error('[Theme Bundle] @onexapis/core not initialized. Ensure globalThis.__ONEX_CORE__ is set before loading theme.');\n}\n\nconst _module = globalThis.__ONEX_CORE__${moduleAccess};\nif (!_module) {\n const subpath = ${subpath ? `'${subpath}'` : \"null\"};\n const modulePath = subpath ? '/' + subpath : '';\n const moduleKey = subpath ? '[\"' + subpath + '\"]' : '';\n throw new Error('[Theme Bundle] @onexapis/core' + modulePath + ' not available in globalThis.__ONEX_CORE__' + moduleKey);\n}\n\nexport default _module;\n${namedExportLines}\n `.trim(),\n loader: \"js\",\n };\n });\n },\n };\n}\n\n/**\n * Plugin to stub common theme dependencies (next/*, framer-motion, lucide-react, etc.)\n * for standalone theme compilation. Tries to resolve from node_modules first;\n * only stubs if the package is not installed.\n */\nfunction createThemeDepsStubPlugin(themePath: string): Plugin {\n return {\n name: \"theme-deps-stub\",\n setup(build) {\n // Helper: try resolve, stub if missing\n const tryResolveOrStub = (filter: RegExp, namespace: string) => {\n build.onResolve({ filter }, async (args) => {\n if (args.pluginData?.skipStub) return undefined;\n // Try resolving from theme directory\n try {\n const result = await build.resolve(args.path, {\n kind: args.kind,\n resolveDir: args.resolveDir || themePath,\n importer: args.importer,\n namespace: \"file\",\n pluginData: { skipStub: true },\n });\n if (!result.errors.length) return result;\n } catch {}\n // Try resolving via CLI's node_modules (monorepo)\n try {\n const req = createRequire(import.meta.url || __filename);\n const resolved = req.resolve(args.path);\n if (resolved) return { path: resolved, namespace: \"file\" };\n } catch {}\n return { path: args.path, namespace };\n });\n };\n\n // --- Next.js ---\n tryResolveOrStub(/^next\\//, \"next-stub\");\n build.onLoad({ filter: /.*/, namespace: \"next-stub\" }, (args) => {\n const stubs: Record<string, string> = {\n \"next/image\": `\nimport React from 'react';\nconst Image = React.forwardRef((props, ref) => {\n const { src, alt, width, height, fill, priority, sizes, quality, placeholder, blurDataURL, onLoad, onError, style, className, ...rest } = props;\n const imgSrc = typeof src === 'object' ? src.src : src;\n const fillStyle = fill ? { position: 'absolute', inset: 0, width: '100%', height: '100%', objectFit: style?.objectFit || 'cover', display: 'block' } : {};\n const mergedStyle = { ...fillStyle, ...style };\n return React.createElement('img', {\n ref, src: imgSrc, alt,\n width: fill ? undefined : width, height: fill ? undefined : height,\n loading: priority ? 'eager' : 'lazy',\n style: Object.keys(mergedStyle).length > 0 ? mergedStyle : undefined,\n className, onLoad, onError, ...rest,\n });\n});\nexport default Image;\n `,\n \"next/link\": `\nimport React from 'react';\nconst Link = ({ href, children, ...rest }) => React.createElement('a', { href, ...rest }, children);\nexport default Link;\n `,\n \"next/navigation\": `\nexport function useRouter() { return { push(u){window.location.href=u}, replace(u){window.location.href=u}, back(){window.history.back()}, forward(){window.history.forward()}, refresh(){window.location.reload()}, prefetch(){} }; }\nexport function usePathname() { return window.location.pathname; }\nexport function useSearchParams() { return new URLSearchParams(window.location.search); }\nexport function useParams() { return {}; }\nexport function redirect(url) { window.location.href = url; }\nexport function notFound() { throw new Error('Not Found'); }\n `,\n \"next/headers\": `\nexport function cookies() { return { get(){}, getAll(){ return []; }, set(){}, delete(){}, has(){ return false; } }; }\nexport function headers() { return new Headers(); }\n `,\n };\n return {\n contents: stubs[args.path] || \"export default {};\",\n loader: \"jsx\",\n resolveDir: themePath,\n };\n });\n\n // --- lucide-react ---\n // Collect all imported icon names from the theme source at resolve time,\n // then generate a stub that exports every one of them.\n const lucideImports = new Set<string>();\n let lucideThemeScanned = false;\n tryResolveOrStub(/^lucide-react/, \"lucide-stub\");\n build.onLoad({ filter: /.*/, namespace: \"lucide-stub\" }, async () => {\n // Scan theme source files for lucide-react imports to discover all icon names\n if (!lucideThemeScanned) {\n lucideThemeScanned = true;\n try {\n const scanned = await scanImportsFromPackage(\n themePath,\n \"lucide-react\"\n );\n for (const names of Object.values(scanned)) {\n for (const name of names) lucideImports.add(name);\n }\n } catch {}\n }\n const iconNames = [...lucideImports];\n const exports = iconNames.map((n) => `icon as ${n}`).join(\", \");\n return {\n contents: `\nconst icon = (props) => null;\nexport { ${exports} };\nexport default new Proxy({}, { get: (_, name) => name === '__esModule' ? true : icon });\n `.trim(),\n loader: \"jsx\",\n };\n });\n\n // --- framer-motion ---\n tryResolveOrStub(/^framer-motion/, \"motion-stub\");\n build.onLoad({ filter: /.*/, namespace: \"motion-stub\" }, () => ({\n contents: `\nimport React from 'react';\nconst handler = { get: (_, name) => {\n if (name === '__esModule') return true;\n return React.forwardRef((props, ref) => React.createElement(name, { ...props, ref }));\n}};\nexport const motion = new Proxy({}, handler);\nexport const AnimatePresence = ({ children }) => children || null;\nexport function useInView() { return true; }\nexport default { motion, AnimatePresence, useInView };\n `.trim(),\n loader: \"jsx\",\n resolveDir: themePath,\n }));\n\n // --- sonner ---\n tryResolveOrStub(/^sonner$/, \"sonner-stub\");\n build.onLoad({ filter: /.*/, namespace: \"sonner-stub\" }, () => ({\n contents: `\nexport const toast = new Proxy(() => {}, { get: () => () => {} });\nexport const Toaster = () => null;\nexport default { toast, Toaster };\n `.trim(),\n loader: \"jsx\",\n }));\n\n // --- react-hook-form ---\n tryResolveOrStub(/^react-hook-form$/, \"rhf-stub\");\n build.onLoad({ filter: /.*/, namespace: \"rhf-stub\" }, () => ({\n contents: `\nexport function useForm() {\n return {\n register: () => ({}),\n handleSubmit: (fn) => (e) => { e?.preventDefault?.(); fn({}); },\n formState: { errors: {}, isSubmitting: false, isValid: true },\n watch: () => undefined,\n setValue: () => {},\n reset: () => {},\n control: {},\n };\n}\nexport function useController() { return { field: {}, fieldState: {} }; }\nexport function useFormContext() { return useForm(); }\n `.trim(),\n loader: \"js\",\n }));\n\n // --- @hookform/resolvers ---\n tryResolveOrStub(/^@hookform\\/resolvers/, \"hookform-resolvers-stub\");\n build.onLoad(\n { filter: /.*/, namespace: \"hookform-resolvers-stub\" },\n () => ({\n contents: `export function zodResolver() { return () => ({ values: {}, errors: {} }); }`,\n loader: \"js\",\n })\n );\n\n // --- next-intl ---\n tryResolveOrStub(/^next-intl$/, \"next-intl-stub\");\n build.onLoad({ filter: /.*/, namespace: \"next-intl-stub\" }, () => ({\n contents: `\nexport function useTranslations(ns) {\n return (key) => ns ? ns + '.' + key : key;\n}\nexport function useLocale() { return 'en'; }\nexport function useMessages() { return {}; }\n `.trim(),\n loader: \"js\",\n }));\n\n // --- zod (often used with hookform) ---\n tryResolveOrStub(/^zod$/, \"zod-stub\");\n build.onLoad({ filter: /.*/, namespace: \"zod-stub\" }, () => ({\n contents: `\nconst schema = () => ({ parse: (v) => v, safeParse: (v) => ({ success: true, data: v }), optional: schema, min: schema, max: schema, email: schema, url: schema, regex: schema, refine: schema, transform: schema });\nexport const z = { string: schema, number: schema, boolean: schema, object: (s) => ({ ...schema(), shape: s }), array: schema, enum: schema, union: schema, literal: schema, infer: undefined };\nexport default z;\n `.trim(),\n loader: \"js\",\n }));\n },\n };\n}\n\n/**\n * Generate theme-data.json from theme source files using jiti.\n * This provides a server-side fallback for themes without API data.\n */\nasync function generateThemeData(\n themePath: string,\n outputDir: string,\n themeId: string\n): Promise<void> {\n const { createJiti } = await import(\"jiti\");\n const jiti = createJiti(import.meta.url);\n\n let themeConfig: any = null;\n let layoutConfig: any = null;\n const pages: Record<string, any> = {};\n\n // Load theme config\n for (const ext of [\".ts\", \".js\"]) {\n try {\n const mod = await jiti.import(path.join(themePath, `theme.config${ext}`));\n themeConfig = (mod as any).default || mod;\n break;\n } catch {}\n }\n\n // Load layout\n for (const ext of [\".ts\", \".js\"]) {\n try {\n const mod = await jiti.import(path.join(themePath, `theme.layout${ext}`));\n layoutConfig = (mod as any).default || mod;\n break;\n } catch {}\n }\n\n // Load schemas (to merge defaults into page sections)\n const schemas: Record<string, any> = {};\n const sectionsDir = path.join(themePath, \"sections\");\n try {\n const sectionDirs = await fs.readdir(sectionsDir);\n for (const dir of sectionDirs) {\n const schemaFile = path.join(sectionsDir, dir, `${dir}.schema.ts`);\n try {\n await fs.access(schemaFile);\n const mod = await jiti.import(schemaFile);\n // Find the schema export (ends with \"Schema\")\n for (const [key, value] of Object.entries(mod as Record<string, any>)) {\n if (\n key.endsWith(\"Schema\") &&\n value &&\n typeof value === \"object\" &&\n (value as any).type\n ) {\n schemas[(value as any).type] = value;\n }\n }\n } catch {}\n }\n } catch {}\n\n // Load pages\n const pagesDir = path.join(themePath, \"pages\");\n try {\n const files = await fs.readdir(pagesDir);\n for (const file of files) {\n if (!file.match(/\\.(ts|js)$/)) continue;\n const name = file.replace(/\\.(ts|js)$/, \"\");\n try {\n const mod = await jiti.import(path.join(pagesDir, file));\n const config = (mod as any).default || mod;\n\n // Merge schema defaults (components/blocks) into sections\n const sections = (config.sections || []).map((section: any) => {\n const schema = schemas[section.type];\n if (!schema?.defaults) return section;\n return {\n ...section,\n components:\n section.components?.length > 0\n ? section.components\n : schema.defaults.components || [],\n blocks:\n section.blocks?.length > 0\n ? section.blocks\n : schema.defaults.blocks || [],\n settings: {\n ...(schema.defaults.settings || {}),\n ...section.settings,\n },\n };\n });\n\n pages[name] = {\n id: name,\n name: config.title || name,\n path: config.path || `/${name}`,\n config: { id: name, ...config, sections },\n sections,\n seo: config.seo,\n };\n } catch {}\n }\n } catch {}\n\n await fs.writeFile(\n path.join(outputDir, \"theme-data.json\"),\n JSON.stringify(\n {\n themeId,\n theme: {\n id: themeId,\n name: themeConfig?.name || themeId,\n config: themeConfig,\n layout: {\n header: layoutConfig?.headerSections || [],\n footer: layoutConfig?.footerSections || [],\n },\n pages: Object.keys(pages),\n },\n pages,\n },\n null,\n 2\n )\n );\n logger.info(`Generated theme-data.json (${Object.keys(pages).length} pages)`);\n}\n\n/**\n * Content-hash the bundle entry point for cache busting.\n * Renames bundle-entry.js -> bundle-entry-{hash}.js\n */\nasync function contentHashEntry(outputDir: string): Promise<void> {\n const entryPath = path.join(outputDir, \"bundle-entry.js\");\n const mapPath = path.join(outputDir, \"bundle-entry.js.map\");\n\n // Read the entry file BEFORE cleaning old hashed files.\n // bundle-entry.js may be a symlink pointing at the previous hashed file —\n // deleting that target first would leave a broken symlink and make the\n // subsequent readFile fail with ENOENT.\n let entryContent: string;\n try {\n entryContent = await fs.readFile(entryPath, \"utf-8\");\n } catch {\n // bundle-entry.js not found, try index.js\n const indexPath = path.join(outputDir, \"index.js\");\n try {\n entryContent = await fs.readFile(indexPath, \"utf-8\");\n } catch {\n logger.warning(\"No entry file found in output, skipping content hash\");\n return;\n }\n // For index.ts entry, rename index.js -> bundle-entry-{hash}.js\n const hash = crypto\n .createHash(\"sha256\")\n .update(entryContent)\n .digest(\"hex\")\n .slice(0, 8);\n\n const hashedName = `bundle-entry-${hash}.js`;\n const indexMapPath = path.join(outputDir, \"index.js.map\");\n const hashedMapName = `bundle-entry-${hash}.js.map`;\n\n entryContent = entryContent.replace(\n /\\/\\/# sourceMappingURL=index\\.js\\.map/,\n `//# sourceMappingURL=${hashedMapName}`\n );\n\n // Clean old hashed files now that we have the content safely in memory\n const oldFiles = await glob(\"bundle-entry-*.js*\", { cwd: outputDir });\n for (const f of oldFiles) {\n await fs.unlink(path.join(outputDir, f));\n }\n\n await fs.writeFile(path.join(outputDir, hashedName), entryContent);\n await fs.unlink(indexPath);\n // Remove existing file/symlink then write a real copy so archiver\n // includes actual JS content in the zip (symlinks store only the target path).\n try {\n await fs.unlink(entryPath);\n } catch {\n /* may not exist */\n }\n await fs.writeFile(entryPath, entryContent);\n\n try {\n await fs.access(indexMapPath);\n await fs.rename(indexMapPath, path.join(outputDir, hashedMapName));\n } catch {\n // No source map\n }\n\n logger.info(`Entry hashed: ${hashedName}`);\n return;\n }\n\n const hash = crypto\n .createHash(\"sha256\")\n .update(entryContent)\n .digest(\"hex\")\n .slice(0, 8);\n\n const hashedName = `bundle-entry-${hash}.js`;\n const hashedMapName = `bundle-entry-${hash}.js.map`;\n\n entryContent = entryContent.replace(\n /\\/\\/# sourceMappingURL=bundle-entry\\.js\\.map/,\n `//# sourceMappingURL=${hashedMapName}`\n );\n\n // Clean old hashed files now that content is safely in memory\n const oldFiles = await glob(\"bundle-entry-*.js*\", { cwd: outputDir });\n for (const f of oldFiles) {\n await fs.unlink(path.join(outputDir, f));\n }\n\n await fs.writeFile(path.join(outputDir, hashedName), entryContent);\n // Remove existing file/symlink then write a real copy so archiver\n // includes actual JS content in the zip (symlinks store only the target path).\n try {\n await fs.unlink(entryPath);\n } catch {\n /* may not exist */\n }\n await fs.writeFile(entryPath, entryContent);\n\n try {\n await fs.access(mapPath);\n await fs.rename(mapPath, path.join(outputDir, hashedMapName));\n } catch {\n // No source map\n }\n\n logger.info(`Entry hashed: ${hashedName}`);\n}\n\n/**\n * Extract dataRequirements from section schema files using jiti.\n * Same pattern as generateThemeData() — jiti handles TypeScript natively.\n * Returns a map of sectionType → dataRequirements object.\n */\nasync function extractDataRequirements(\n themePath: string\n): Promise<Record<string, Record<string, boolean>>> {\n const { createJiti } = await import(\"jiti\");\n const jiti = createJiti(import.meta.url);\n\n const schemaFiles = await glob(\"sections/**/*.schema.ts\", { cwd: themePath });\n const requirements: Record<string, Record<string, boolean>> = {};\n\n for (const file of schemaFiles) {\n try {\n const mod = await jiti.import(path.join(themePath, file));\n const exports = mod as Record<string, any>;\n\n // Find schema exports: look for objects with .type (string) + .dataRequirements\n for (const value of Object.values(exports)) {\n if (\n value &&\n typeof value === \"object\" &&\n typeof value.type === \"string\" &&\n value.dataRequirements &&\n typeof value.dataRequirements === \"object\"\n ) {\n requirements[value.type] = value.dataRequirements;\n }\n }\n } catch (err) {\n logger.warning(\n `Could not load schema ${file}: ${err instanceof Error ? err.message : String(err)}`\n );\n }\n }\n\n return requirements;\n}\n\n/**\n * Write schemas.json and asset-manifest.json into dist/ for the publish gate.\n * See SCHEMA_DIFF_GATE_PLAN.md for the diff/classifier that consumes these.\n */\nasync function writeGateManifests(\n themePath: string,\n outputDir: string\n): Promise<void> {\n try {\n const schemas = await extractSchemas(themePath);\n await fs.writeFile(\n path.join(outputDir, \"schemas.json\"),\n serializeManifest(schemas)\n );\n logger.info(\n `Generated schemas.json (${Object.keys(schemas.sections).length} sections)`\n );\n } catch (err) {\n logger.warning(\n `schemas.json not written: ${err instanceof Error ? err.message : String(err)}`\n );\n }\n\n try {\n const entries = await scanThemeAssets(outputDir);\n const assets = entries.map((e) => ({\n path: e.originalPath,\n hash: e.hash,\n size: e.size,\n contentType: e.contentType,\n }));\n await fs.writeFile(\n path.join(outputDir, \"asset-manifest.json\"),\n JSON.stringify({ manifestVersion: 1, assets }, null, 2)\n );\n logger.info(`Generated asset-manifest.json (${assets.length} assets)`);\n } catch (err) {\n logger.warning(\n `asset-manifest.json not written: ${err instanceof Error ? err.message : String(err)}`\n );\n }\n}\n\n/**\n * Generate manifest.json with theme metadata.\n */\nexport async function generateManifest(\n themeName: string,\n themePath: string,\n outputDir: string\n): Promise<void> {\n // Read version and themeId from package.json\n let version = \"1.0.0\";\n let themeId = themeName;\n try {\n const pkgContent = await fs.readFile(\n path.join(themePath, \"package.json\"),\n \"utf-8\"\n );\n const pkg = JSON.parse(pkgContent);\n version = pkg.version || version;\n // Derive themeId from package name: \"@onex-themes/simple\" → \"simple\"\n if (pkg.name) {\n themeId = pkg.name.replace(/^@onex-themes\\//, \"\");\n }\n } catch {\n // Use defaults\n }\n\n const [sectionFiles, blockFiles, schemaFiles] = await Promise.all([\n glob(\"sections/**/index.ts\", { cwd: themePath }),\n glob(\"blocks/**/index.ts\", { cwd: themePath }),\n glob(\"**/*.schema.ts\", { cwd: themePath }),\n ]);\n\n // Extract dataRequirements declared in section schemas\n const dataRequirements = await extractDataRequirements(themePath);\n\n let hasThemeConfig = false;\n try {\n await fs.access(path.join(themePath, \"theme.config.ts\"));\n hasThemeConfig = true;\n } catch {\n // No theme config\n }\n\n const allFiles = await glob(\"**/*\", { cwd: outputDir, nodir: true });\n const jsFiles = allFiles.filter((f) => f.endsWith(\".js\"));\n const cssFiles = allFiles.filter((f) => f.endsWith(\".css\"));\n\n const entryFile =\n jsFiles.find((f) => f.includes(\"bundle-entry\")) || \"bundle-entry.js\";\n\n const manifest = {\n themeId,\n version,\n name: themeId.charAt(0).toUpperCase() + themeId.slice(1),\n compiledAt: new Date().toISOString(),\n format: \"esm\",\n platform: \"browser\",\n target: \"es2020\",\n\n counts: {\n sections: sectionFiles.length,\n blocks: blockFiles.length,\n schemas: schemaFiles.length,\n },\n\n output: {\n entry: entryFile,\n chunks: jsFiles.filter((f) => f !== entryFile && !f.endsWith(\".map\")),\n assets: allFiles.filter((f) =>\n [\".png\", \".jpg\", \".jpeg\", \".svg\", \".gif\", \".webp\"].some((ext) =>\n f.endsWith(ext)\n )\n ),\n stylesheets: cssFiles,\n },\n\n external: [\"react\", \"react-dom\", \"@onexapis/core\"],\n\n source: {\n sections: sectionFiles,\n blocks: blockFiles,\n schemas: schemaFiles,\n hasThemeConfig,\n },\n\n // Section data requirements for server-side prefetching (keyed by section type)\n dataRequirements,\n };\n\n await fs.writeFile(\n path.join(outputDir, \"manifest.json\"),\n JSON.stringify(manifest, null, 2)\n );\n}\n\n/**\n * Compile a standalone theme using esbuild.\n * Produces ESM bundles with React/core externalized to globals.\n *\n * @returns true if build succeeded\n */\nexport async function compileStandaloneTheme(\n themePath: string,\n themeName: string\n): Promise<boolean> {\n const outputDir = path.join(themePath, \"dist\");\n\n // Detect entry point: bundle-entry.ts preferred, fallback to index.ts\n const bundleEntry = path.join(themePath, \"bundle-entry.ts\");\n const indexEntry = path.join(themePath, \"index.ts\");\n\n let entryPoint = indexEntry;\n try {\n await fs.access(bundleEntry);\n entryPoint = bundleEntry;\n } catch {\n // Use index.ts\n }\n\n // Write process shim to a temp file (esbuild inject requires a file path)\n const shimPath = path.join(outputDir, \".process-shim.js\");\n await fs.mkdir(outputDir, { recursive: true });\n await fs.writeFile(shimPath, PROCESS_SHIM);\n\n const buildOptions: esbuild.BuildOptions = {\n entryPoints: [entryPoint],\n bundle: true,\n platform: \"browser\",\n format: \"esm\",\n outdir: outputDir,\n splitting: false,\n chunkNames: \"[name]-[hash]\",\n banner: {\n js: '\"use client\";',\n },\n\n plugins: [\n reactGlobalPlugin,\n reactQueryGlobalPlugin,\n createCoreGlobalPlugin(themePath),\n createThemeDepsStubPlugin(themePath),\n ],\n\n external: [],\n\n alias: {\n events: \"events/\",\n buffer: \"buffer/\",\n },\n\n inject: [shimPath],\n\n define: {\n \"process.env.NODE_ENV\": JSON.stringify(\"production\"),\n global: \"globalThis\",\n },\n\n minify: true,\n sourcemap: true,\n logLevel: \"warning\",\n target: \"es2020\",\n jsx: \"automatic\",\n jsxImportSource: \"react\",\n\n loader: {\n \".tsx\": \"tsx\",\n \".ts\": \"ts\",\n \".jpg\": \"file\",\n \".jpeg\": \"file\",\n \".png\": \"file\",\n \".gif\": \"file\",\n \".svg\": \"file\",\n \".webp\": \"file\",\n },\n\n assetNames: \"assets/[name]-[hash]\",\n publicPath: \"./\",\n metafile: true,\n };\n\n try {\n const result = await esbuild.build(buildOptions);\n\n // Clean up temp shim file\n try {\n await fs.unlink(shimPath);\n } catch {\n // Ignore\n }\n\n // Content-hash the entry point\n await contentHashEntry(outputDir);\n\n // Copy static assets (logos, banners, etc.) into dist/theme-assets/\n // so they are included in the published bundle zip.\n // Theme settings reference these as /assets/<themeId>/path.\n const themeAssetsDir = path.join(themePath, \"assets\");\n const distThemeAssets = path.join(outputDir, \"theme-assets\");\n try {\n await fs.access(themeAssetsDir);\n await fs.cp(themeAssetsDir, distThemeAssets, { recursive: true });\n logger.info(\"Copied static assets to dist/theme-assets/\");\n } catch {\n // No assets directory — skip\n }\n\n // Generate manifest\n await generateManifest(themeName, themePath, outputDir);\n\n // Generate schemas.json + asset-manifest.json for the publish-time diff gate.\n // Both ship inside bundle.zip so the next publish can fetch them to detect\n // breaking changes, renames, and defaults-only drift against this version.\n await writeGateManifests(themePath, outputDir);\n\n // Generate theme-data.json for server-side fallback\n await generateThemeData(themePath, outputDir, themeName);\n\n // Generate bundle.css with all Tailwind classes used by the theme\n // This is injected into the editor preview iframe so it matches the storefront\n await generateThemeCSS(themePath, outputDir);\n\n // Log bundle analysis\n if (result.metafile) {\n const outputs = result.metafile.outputs;\n let totalSize = 0;\n for (const output of Object.values(outputs)) {\n totalSize += output.bytes;\n }\n const totalKB = (totalSize / 1024).toFixed(2);\n logger.info(`Bundle size: ${totalKB} KB`);\n }\n\n return true;\n } catch (error) {\n // Clean up temp shim file on failure\n try {\n await fs.unlink(shimPath);\n } catch {\n // Ignore\n }\n\n logger.error(`esbuild compilation failed: ${error}`);\n return false;\n }\n}\n\n/**\n * Compile standalone theme in dev mode with incremental rebuilds.\n * Differences from production compileStandaloneTheme:\n * - Uses esbuild.context() for incremental rebuilds\n * - No minification, no content-hash (stable bundle-entry.js filename)\n * - Returns the build context for subsequent rebuilds\n */\nexport async function compileStandaloneThemeDev(\n themePath: string,\n themeName: string\n): Promise<{ context: esbuild.BuildContext; outputDir: string }> {\n const outputDir = path.join(themePath, \"dist\");\n\n // Detect entry point (same as production build)\n const bundleEntry = path.join(themePath, \"bundle-entry.ts\");\n const indexEntry = path.join(themePath, \"index.ts\");\n let entryPoint = indexEntry;\n try {\n await fs.access(bundleEntry);\n entryPoint = bundleEntry;\n } catch {\n // Use index.ts\n }\n\n // Write process shim\n const shimPath = path.join(outputDir, \".process-shim.js\");\n await fs.mkdir(outputDir, { recursive: true });\n await fs.writeFile(shimPath, PROCESS_SHIM);\n\n const buildOptions: esbuild.BuildOptions = {\n entryPoints: [entryPoint],\n bundle: true,\n platform: \"browser\",\n format: \"esm\",\n outdir: outputDir,\n splitting: false,\n banner: {\n js: '\"use client\";',\n },\n\n plugins: [\n reactGlobalPlugin,\n reactQueryGlobalPlugin,\n createCoreGlobalPlugin(themePath),\n createThemeDepsStubPlugin(themePath),\n ],\n external: [],\n\n alias: {\n events: \"events/\",\n buffer: \"buffer/\",\n },\n\n inject: [shimPath],\n\n define: {\n \"process.env.NODE_ENV\": JSON.stringify(\"development\"),\n global: \"globalThis\",\n },\n\n minify: false,\n sourcemap: true,\n logLevel: \"warning\",\n target: \"es2020\",\n jsx: \"automatic\",\n jsxImportSource: \"react\",\n\n loader: {\n \".tsx\": \"tsx\",\n \".ts\": \"ts\",\n \".jpg\": \"file\",\n \".jpeg\": \"file\",\n \".png\": \"file\",\n \".gif\": \"file\",\n \".svg\": \"file\",\n \".webp\": \"file\",\n },\n\n assetNames: \"assets/[name]-[hash]\",\n publicPath: \"./\",\n metafile: true,\n };\n\n const context = await esbuild.context(buildOptions);\n\n // Initial build\n await context.rebuild();\n\n // NOTE: Do NOT delete shimPath here — incremental rebuilds need it.\n // It will be cleaned up when context.dispose() is called.\n\n // Generate manifest (no content-hash step for dev)\n await generateManifest(themeName, themePath, outputDir);\n\n // Generate theme-data.json for server-side fallback\n await generateThemeData(themePath, outputDir, themeName);\n\n return { context, outputDir };\n}\n\n/**\n * Compile the preview runtime (React + @onexapis/core bundled in).\n * One-time compilation on dev server startup.\n * React and core are bundled INTO the output (not externalized) because\n * the preview runtime IS the host that provides these globals.\n */\nexport async function compilePreviewRuntime(\n themePath: string\n): Promise<string> {\n const outputDir = path.join(themePath, \"dist\");\n await fs.mkdir(outputDir, { recursive: true });\n\n const outputPath = path.join(outputDir, \"preview-runtime.js\");\n\n // Resolve the preview-app.tsx source from CLI package\n // In dev: src/preview/preview-app.tsx\n // In dist: preview/preview-app.tsx (copied by tsup config)\n const locations = [\n path.join(__dirname, \"..\", \"preview\", \"preview-app.tsx\"),\n path.join(__dirname, \"preview\", \"preview-app.tsx\"),\n path.join(__dirname, \"..\", \"..\", \"src\", \"preview\", \"preview-app.tsx\"),\n ];\n\n let previewEntryPath: string | null = null;\n for (const loc of locations) {\n try {\n await fs.access(loc);\n previewEntryPath = loc;\n break;\n } catch {\n // Try next location\n }\n }\n\n if (!previewEntryPath) {\n throw new Error(\n `Preview app source not found. Searched:\\n${locations.join(\"\\n\")}`\n );\n }\n\n // NOTE: Do NOT redirect @onexapis/core resolution to the theme's node_modules here.\n // Doing so would cause @onexapis/core's internal React imports to resolve from\n // dai-phuoc-land/node_modules/react (a separate install) while preview-app.tsx\n // resolves React from core-web-merging/node_modules/react — two React instances →\n // \"Invalid hook call\" error. The correct approach is to keep @onexapis/core\n // resolution in the CLI's node_modules, which is kept in sync via `pnpm install`.\n\n // Plugin to stub out server-only packages that leak from @onexapis/core chunks\n const serverStubPlugin: Plugin = {\n name: \"server-stub\",\n setup(build) {\n // Stub server-only marker package\n build.onResolve({ filter: /^server-only$/ }, () => ({\n path: \"server-only\",\n namespace: \"server-stub\",\n }));\n build.onLoad({ filter: /.*/, namespace: \"server-stub\" }, () => ({\n contents: \"// server-only stub for browser\",\n loader: \"js\",\n }));\n\n // Stub Node.js built-ins that leak from server chunks\n const nodeBuiltins = [\n \"fs\",\n \"fs/promises\",\n \"path\",\n \"os\",\n \"crypto\",\n \"stream\",\n \"url\",\n \"http\",\n \"https\",\n \"net\",\n \"tls\",\n \"child_process\",\n \"util\",\n \"events\",\n \"buffer\",\n \"querystring\",\n \"zlib\",\n ];\n for (const mod of nodeBuiltins) {\n build.onResolve(\n { filter: new RegExp(`^${mod.replace(\"/\", \"\\\\/\")}$`) },\n () => ({\n path: mod,\n namespace: \"node-stub\",\n })\n );\n }\n build.onLoad({ filter: /.*/, namespace: \"node-stub\" }, (args) => {\n const stubs: Record<string, string> = {\n events:\n \"export class EventEmitter { on(){return this} off(){return this} emit(){return false} addListener(){return this} removeListener(){return this} } export default { EventEmitter };\",\n path: \"export function join(){return ''} export function resolve(){return ''} export function dirname(){return ''} export function basename(){return ''} export function extname(){return ''} export default {};\",\n fs: \"export const promises = {}; export function readFileSync(){return ''} export function existsSync(){return false} export default {};\",\n };\n return {\n contents: stubs[args.path] || \"export default {};\",\n loader: \"js\",\n };\n });\n\n // Stub optional UI dependencies that may not be installed in standalone themes.\n // First try to resolve normally; only stub if the package is missing.\n const lucideIconNames = new Set<string>();\n let lucideScanned = false;\n build.onResolve({ filter: /^lucide-react/ }, async (args) => {\n if (args.pluginData?.skipStub) return undefined;\n try {\n const result = await build.resolve(args.path, {\n kind: args.kind,\n resolveDir: args.resolveDir,\n importer: args.importer,\n namespace: \"file\",\n pluginData: { skipStub: true },\n });\n if (!result.errors.length) return result;\n } catch {}\n return { path: args.path, namespace: \"lucide-stub\" };\n });\n build.onLoad({ filter: /.*/, namespace: \"lucide-stub\" }, async () => {\n // Dynamically scan @onexapis/core source for lucide-react imports\n if (!lucideScanned) {\n lucideScanned = true;\n // Try multiple locations to find @onexapis/core source\n const coreSrcCandidates = [\n path.join(themePath, \"node_modules\", \"@onexapis\", \"core\", \"src\"),\n path.join(themePath, \"..\", \"..\", \"packages\", \"core\", \"src\"), // monorepo sibling\n path.join(\n __dirname,\n \"..\",\n \"..\",\n \"..\",\n \"..\",\n \"packages\",\n \"core\",\n \"src\"\n ), // from CLI src\n ];\n let coreSourceDir: string | null = null;\n for (const candidate of coreSrcCandidates) {\n try {\n await fs.access(candidate);\n coreSourceDir = candidate;\n break;\n } catch {}\n }\n if (coreSourceDir) {\n try {\n const scanned = await scanImportsFromPackage(\n coreSourceDir,\n \"lucide-react\"\n );\n for (const names of Object.values(scanned)) {\n for (const name of names) lucideIconNames.add(name);\n }\n } catch {}\n } else {\n // No source dir found (e.g. global install) — scan core dist .mjs files\n const coreDistCandidates: string[] = [\n path.join(themePath, \"node_modules\", \"@onexapis\", \"core\", \"dist\"),\n ];\n const resolvedDist = await resolveNodeModulesFile(\n __dirname,\n path.join(\"@onexapis\", \"core\", \"dist\")\n );\n if (resolvedDist) coreDistCandidates.push(resolvedDist);\n\n for (const candidate of coreDistCandidates) {\n try {\n await fs.access(candidate);\n const mjsFiles = await glob(\"*.mjs\", { cwd: candidate });\n const importRegex =\n /import\\s*\\{([^}]+)\\}\\s*from\\s*[\"']lucide-react[\"']/g;\n for (const file of mjsFiles) {\n const content = await fs.readFile(\n path.join(candidate, file),\n \"utf-8\"\n );\n for (const match of content.matchAll(importRegex)) {\n for (const name of match[1].split(\",\")) {\n const original = name\n .trim()\n .split(/\\s+as\\s+/)[0]\n .trim();\n if (original && !original.startsWith(\"type \")) {\n lucideIconNames.add(original);\n }\n }\n }\n }\n break; // found and scanned dist dir\n } catch {}\n }\n }\n // Also scan theme source files\n try {\n const scanned = await scanImportsFromPackage(\n themePath,\n \"lucide-react\"\n );\n for (const names of Object.values(scanned)) {\n for (const name of names) lucideIconNames.add(name);\n }\n } catch {}\n }\n\n const iconExports = [...lucideIconNames]\n .map((n) => `icon as ${n}`)\n .join(\", \");\n return {\n contents: `\nconst icon = (props) => null;\nexport { ${iconExports} };\nexport default new Proxy({}, { get: (_, name) => name === '__esModule' ? true : icon });\n `.trim(),\n loader: \"jsx\",\n };\n });\n\n build.onResolve({ filter: /^framer-motion/ }, async (args) => {\n if (args.pluginData?.skipStub) return undefined;\n // Try resolving from theme directory first\n try {\n const result = await build.resolve(args.path, {\n kind: args.kind,\n resolveDir: args.resolveDir,\n importer: args.importer,\n namespace: \"file\",\n pluginData: { skipStub: true },\n });\n if (!result.errors.length) return result;\n } catch {}\n // Try resolving via createRequire (works in bundled CLI / monorepo)\n try {\n const req = createRequire(import.meta.url || __filename);\n const cjsPath = req.resolve(\"framer-motion\");\n // Navigate to package root and use ESM entry for browser bundling\n const pkgDir = cjsPath.replace(/[/\\\\]dist[/\\\\].*$/, \"\");\n const esmEntry = path.join(pkgDir, \"dist\", \"es\", \"index.mjs\");\n const { existsSync } = await import(\"fs\");\n if (existsSync(esmEntry)) {\n return { path: esmEntry, namespace: \"file\" };\n }\n // Fallback: use the resolved path as-is\n return { path: cjsPath, namespace: \"file\" };\n } catch {}\n return { path: args.path, namespace: \"motion-stub\" };\n });\n build.onLoad({ filter: /.*/, namespace: \"motion-stub\" }, () => ({\n contents: `\nimport React from 'react';\nconst MotionComponent = React.forwardRef((props, ref) => {\n const { initial, animate, exit, variants, transition, whileInView, whileHover, whileTap, viewport, onAnimationComplete, layout, layoutId, style, className, ...rest } = props;\n return React.createElement(rest.as || 'div', { ref, style, className, ...rest }, rest.children);\n});\nconst handler = { get: (_, name) => {\n if (name === '__esModule') return true;\n if (name === 'create') return () => new Proxy({}, handler);\n return MotionComponent;\n}};\nexport const motion = new Proxy({}, handler);\nexport const AnimatePresence = (props) => props.children || null;\nexport const useInView = () => true;\nexport const useAnimation = () => ({ start: () => {}, stop: () => {}, set: () => {} });\nexport const useMotionValue = (v) => ({ get: () => v, set: () => {}, onChange: () => () => {} });\nexport const useTransform = (v) => v;\nexport const useScroll = () => ({ scrollY: { get: () => 0, onChange: () => () => {} }, scrollYProgress: { get: () => 0, onChange: () => () => {} } });\nexport default { motion, AnimatePresence };\n `.trim(),\n loader: \"jsx\",\n }));\n\n // Stub Next.js modules (not installed in standalone themes)\n build.onResolve({ filter: /^next\\// }, async (args) => {\n if (args.pluginData?.skipStub) return undefined;\n try {\n const result = await build.resolve(args.path, {\n kind: args.kind,\n resolveDir: args.resolveDir,\n importer: args.importer,\n namespace: \"file\",\n pluginData: { skipStub: true },\n });\n if (!result.errors.length) return result;\n } catch {}\n return { path: args.path, namespace: \"next-stub\" };\n });\n build.onLoad({ filter: /.*/, namespace: \"next-stub\" }, (args) => {\n const stubs: Record<string, string> = {\n \"next/image\": `\nimport React from 'react';\nconst Image = React.forwardRef((props, ref) => {\n const { src, alt, width, height, fill, priority, sizes, quality, placeholder, blurDataURL, onLoad, onError, style, className, ...rest } = props;\n const imgSrc = typeof src === 'object' ? src.src : src;\n const fillStyle = fill ? { position: 'absolute', inset: 0, width: '100%', height: '100%', objectFit: style?.objectFit || 'cover', display: 'block' } : {};\n const mergedStyle = { ...fillStyle, ...style };\n return React.createElement('img', {\n ref,\n src: imgSrc,\n alt,\n width: fill ? undefined : width,\n height: fill ? undefined : height,\n loading: priority ? 'eager' : 'lazy',\n style: Object.keys(mergedStyle).length > 0 ? mergedStyle : undefined,\n className,\n onLoad,\n onError,\n ...rest,\n });\n});\nexport default Image;\n `,\n \"next/link\": `\nconst Link = ({ href, children, ...rest }) => React.createElement('a', { href, ...rest }, children);\nimport React from 'react';\nexport default Link;\n `,\n \"next/navigation\": `\nexport function useRouter() { return { push(u){window.location.href=u}, replace(u){window.location.href=u}, back(){window.history.back()}, forward(){window.history.forward()}, refresh(){window.location.reload()}, prefetch(){} }; }\nexport function usePathname() { return window.location.pathname; }\nexport function useSearchParams() { return new URLSearchParams(window.location.search); }\nexport function useParams() { return {}; }\nexport function redirect(url) { window.location.href = url; }\nexport function notFound() { throw new Error('Not Found'); }\n `,\n \"next/headers\": `\nexport function cookies() { return { get(){}, getAll(){ return []; }, set(){}, delete(){}, has(){ return false; } }; }\nexport function headers() { return new Headers(); }\n `,\n };\n return {\n contents: stubs[args.path] || \"export default {};\",\n loader: \"jsx\",\n resolveDir: themePath,\n };\n });\n },\n };\n\n // Write process shim for preview runtime (CJS code paths may reference `process`)\n const shimPath = path.join(outputDir, \".process-shim-preview.js\");\n await fs.writeFile(shimPath, PROCESS_SHIM);\n\n await esbuild.build({\n entryPoints: [previewEntryPath],\n bundle: true,\n platform: \"browser\",\n format: \"esm\",\n outfile: outputPath,\n // Bundle React + core INTO the output (NOT externalized)\n external: [],\n plugins: [serverStubPlugin],\n inject: [shimPath],\n minify: false,\n sourcemap: true,\n target: \"es2020\",\n jsx: \"automatic\",\n jsxImportSource: \"react\",\n define: {\n \"process.env.NODE_ENV\": JSON.stringify(\"development\"),\n \"process.env.NEXT_PUBLIC_API_URL\": JSON.stringify(\n process.env.NEXT_PUBLIC_API_URL || \"\"\n ),\n \"process.env.NEXT_PUBLIC_COMPANY_ID\": JSON.stringify(\n process.env.NEXT_PUBLIC_COMPANY_ID || \"\"\n ),\n global: \"globalThis\",\n },\n loader: { \".tsx\": \"tsx\", \".ts\": \"ts\" },\n // Force CJS resolution to avoid sideEffects:false dropping ESM chunk imports\n conditions: [\"require\", \"default\"],\n mainFields: [\"main\"],\n logOverride: {\n \"ignored-bare-import\": \"silent\",\n },\n });\n\n // Clean up temp shim file\n try {\n await fs.unlink(shimPath);\n } catch {\n // Ignore\n }\n\n return outputPath;\n}\n","import http from \"node:http\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { WebSocketServer, WebSocket } from \"ws\";\n\ninterface DevServerOptions {\n port: number;\n distDir: string;\n previewRuntimePath: string;\n themeName: string;\n themePath: string;\n}\n\nconst MIME_TYPES: Record<string, string> = {\n \".js\": \"application/javascript\",\n \".mjs\": \"application/javascript\",\n \".css\": \"text/css\",\n \".json\": \"application/json\",\n \".html\": \"text/html\",\n \".svg\": \"image/svg+xml\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".webp\": \"image/webp\",\n \".gif\": \"image/gif\",\n \".map\": \"application/json\",\n};\n\nexport function createDevServer(options: DevServerOptions) {\n const clients = new Set<WebSocket>();\n const themeDataPath = path.join(options.distDir, \"theme-data.json\");\n\n const server = http.createServer((req, res) => {\n // CORS + no-cache headers on ALL responses\n res.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n res.setHeader(\"Access-Control-Allow-Methods\", \"GET, OPTIONS\");\n res.setHeader(\"Cache-Control\", \"no-store, no-cache, must-revalidate\");\n\n if (req.method === \"OPTIONS\") {\n res.writeHead(200);\n res.end();\n return;\n }\n\n const url = new URL(req.url || \"/\", `http://localhost:${options.port}`);\n const pathname = url.pathname;\n\n // Route: GET / → preview HTML page\n if (pathname === \"/\" || pathname === \"/index.html\") {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n generatePreviewHTML(options.themeName, options.port, themeDataPath)\n );\n return;\n }\n\n // Route: GET /preview-runtime.js → compiled preview runtime\n if (pathname === \"/preview-runtime.js\") {\n serveFile(res, options.previewRuntimePath);\n return;\n }\n\n // Route: GET /_assets/* → serve theme assets\n if (pathname.startsWith(\"/_assets/\")) {\n // Strip /_assets/<themeName>/ prefix → resolve from themePath/assets/\n const parts = pathname.replace(/^\\/_assets\\//, \"\").split(\"/\");\n // First segment is the theme name — skip it\n const assetSubpath = parts.slice(1).join(\"/\");\n const assetPath = path.join(options.themePath, \"assets\", assetSubpath);\n // Security: prevent path traversal\n if (!assetPath.startsWith(path.join(options.themePath, \"assets\"))) {\n res.writeHead(403);\n res.end(\"Forbidden\");\n return;\n }\n serveFile(res, assetPath);\n return;\n }\n\n // Route: GET /themes/<themeName>/assets/* → serve theme assets (legacy path pattern)\n if (pathname.startsWith(\"/themes/\")) {\n const match = pathname.match(/^\\/themes\\/[^/]+\\/assets\\/(.+)/);\n if (match) {\n const assetPath = path.join(options.themePath, \"assets\", match[1]);\n // Security: prevent path traversal\n if (!assetPath.startsWith(path.join(options.themePath, \"assets\"))) {\n res.writeHead(403);\n res.end(\"Forbidden\");\n return;\n }\n serveFile(res, assetPath);\n return;\n }\n }\n\n // Route: GET /assets/* → serve theme assets (bare path pattern)\n // Handles both /assets/<subpath> and /assets/<themeName>/<subpath>\n // Falls through to dist catch-all if not found (for esbuild content-hashed assets)\n if (pathname.startsWith(\"/assets/\")) {\n const subpath = pathname.replace(/^\\/assets\\//, \"\");\n const segments = subpath.split(\"/\");\n const assetsBase = path.join(options.themePath, \"assets\");\n let assetPath: string;\n if (\n segments[0] === options.themeName ||\n segments[0] === options.themeName.replace(/^my-/, \"\")\n ) {\n assetPath = path.join(assetsBase, segments.slice(1).join(\"/\"));\n } else {\n assetPath = path.join(assetsBase, subpath);\n }\n if (assetPath.startsWith(assetsBase) && fs.existsSync(assetPath)) {\n serveFile(res, assetPath);\n return;\n }\n // Fallback: the first segment may be a theme config ID that differs from\n // the directory name (e.g. \"tinan\" vs \"tin-an\"). Try stripping it.\n if (segments.length > 1) {\n const fallbackPath = path.join(assetsBase, segments.slice(1).join(\"/\"));\n if (\n fallbackPath.startsWith(assetsBase) &&\n fs.existsSync(fallbackPath)\n ) {\n serveFile(res, fallbackPath);\n return;\n }\n }\n // Fall through to dist catch-all for hashed assets\n }\n\n // Route: GET /* → serve from dist/ directory (with SPA fallback)\n const filePath = path.join(options.distDir, pathname);\n // Security: prevent path traversal\n if (!filePath.startsWith(options.distDir)) {\n res.writeHead(403);\n res.end(\"Forbidden\");\n return;\n }\n\n // If the file exists in dist/, serve it; otherwise SPA fallback to preview HTML\n if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {\n serveFile(res, filePath);\n } else {\n // SPA fallback: serve preview HTML for client-side routing (e.g. /showcase, /about)\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n generatePreviewHTML(options.themeName, options.port, themeDataPath)\n );\n }\n });\n\n // WebSocket server on same HTTP server\n const wss = new WebSocketServer({ server });\n wss.on(\"connection\", (ws) => {\n clients.add(ws);\n ws.on(\"close\", () => clients.delete(ws));\n });\n\n server.listen(options.port);\n\n return {\n broadcast(message: object) {\n const data = JSON.stringify(message);\n for (const client of clients) {\n if (client.readyState === WebSocket.OPEN) {\n client.send(data);\n }\n }\n },\n close() {\n wss.close();\n server.close();\n },\n };\n}\n\nfunction serveFile(res: http.ServerResponse, filePath: string) {\n try {\n if (!fs.existsSync(filePath)) {\n res.writeHead(404);\n res.end(\"Not Found\");\n return;\n }\n\n const ext = path.extname(filePath);\n const contentType = MIME_TYPES[ext] || \"application/octet-stream\";\n const content = fs.readFileSync(filePath);\n\n res.writeHead(200, { \"Content-Type\": contentType });\n res.end(content);\n } catch {\n res.writeHead(500);\n res.end(\"Internal Server Error\");\n }\n}\n\nfunction generatePreviewHTML(\n themeName: string,\n port: number,\n themeDataPath?: string\n): string {\n // Try to read theme-data.json for font information\n let fontLinks = \"\";\n let fontVarsCSS = \"\";\n if (themeDataPath) {\n try {\n const themeData = JSON.parse(fs.readFileSync(themeDataPath, \"utf-8\"));\n const typography = (themeData?.themeConfig || themeData?.theme?.config)\n ?.typography?.fontFamily;\n if (typography) {\n // Extract font family names for Google Fonts\n const fontFamilies = new Set<string>();\n for (const value of Object.values(typography) as string[]) {\n // Take the first font in the list (before the comma)\n const primary = value.split(\",\")[0].trim();\n if (\n primary &&\n ![\n \"serif\",\n \"sans-serif\",\n \"monospace\",\n \"system-ui\",\n \"Georgia\",\n \"Inter\",\n \"Consolas\",\n ].includes(primary)\n ) {\n fontFamilies.add(primary);\n }\n }\n if (fontFamilies.size > 0) {\n const families = Array.from(fontFamilies)\n .map(\n (f) =>\n `family=${f.replace(/\\s+/g, \"+\")}:wght@300;400;500;600;700;800;900`\n )\n .join(\"&\");\n fontLinks = `<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n <link href=\"https://fonts.googleapis.com/css2?${families}&display=swap\" rel=\"stylesheet\">`;\n }\n // Set font-family CSS vars for Tailwind\n const heading = typography.heading || typography.body || \"system-ui\";\n const body = typography.body || \"system-ui\";\n fontVarsCSS = `\n :root {\n --font-heading: ${heading};\n --font-body: ${body};\n }\n body { font-family: var(--font-body); }\n h1, h2, h3, h4, h5, h6 { font-family: var(--font-heading); }`;\n }\n } catch {\n // theme-data.json not available — skip font injection\n }\n }\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>OneX Dev — ${themeName}</title>\n ${fontLinks}\n <!-- Tailwind CSS Play CDN — JIT compilation in browser for dev preview -->\n <script src=\"https://cdn.tailwindcss.com\"></script>\n <script>\n tailwind.config = {\n theme: {\n extend: {\n aspectRatio: {\n '2/1': '2 / 1',\n '3/2': '3 / 2',\n '4/3': '4 / 3',\n '3/4': '3 / 4',\n '5/4': '5 / 4',\n '16/9': '16 / 9',\n '21/9': '21 / 9',\n },\n fontFamily: {\n playfair: ['Playfair Display', 'Georgia', 'serif'],\n roboto: ['Roboto', 'system-ui', 'sans-serif'],\n },\n },\n },\n }\n </script>\n <style>\n #onex-preview-root { margin-top: 0; }${fontVarsCSS}\n </style>\n</head>\n<body>\n <div id=\"onex-preview-root\"></div>\n <script type=\"module\" src=\"/preview-runtime.js\"></script>\n</body>\n</html>`;\n}\n","import fs from \"fs-extra\";\nimport path from \"path\";\nimport ejs from \"ejs\";\nimport { execSync } from \"child_process\";\nimport { logger } from \"./logger\";\n\n/**\n * Render a template file with EJS\n */\nexport async function renderTemplate(\n templatePath: string,\n data: Record<string, unknown>\n): Promise<string> {\n const template = await fs.readFile(templatePath, \"utf-8\");\n return ejs.render(template, data);\n}\n\n/**\n * Write a file with directory creation\n */\nexport async function writeFile(\n filePath: string,\n content: string\n): Promise<void> {\n await fs.ensureDir(path.dirname(filePath));\n await fs.writeFile(filePath, content, \"utf-8\");\n}\n\n/**\n * Get the templates directory\n * Works in both development and production (bundled) environments\n */\nexport function getTemplatesDir(): string {\n // Try common locations\n const locations = [\n path.join(__dirname, \"../../templates\"), // Development\n path.join(__dirname, \"../templates\"), // Production (dist/)\n path.join(process.cwd(), \"templates\"), // Fallback\n path.join(process.cwd(), \"packages/cli/templates\"), // Monorepo\n ];\n\n for (const location of locations) {\n if (fs.existsSync(location)) {\n return location;\n }\n }\n\n throw new Error(\"Templates directory not found\");\n}\n\n/**\n * Copy template directory\n */\nexport async function copyTemplate(\n templateName: string,\n targetDir: string,\n data: Record<string, unknown>\n): Promise<void> {\n // Get template directory from CLI package\n const templatesDir = getTemplatesDir();\n const templateDir = path.join(templatesDir, templateName);\n\n if (!fs.existsSync(templateDir)) {\n throw new Error(\n `Template \"${templateName}\" not found at ${templateDir}. Available templates: ${fs.readdirSync(templatesDir).join(\", \")}`\n );\n }\n\n await fs.ensureDir(targetDir);\n\n const files = await fs.readdir(templateDir);\n\n for (const file of files) {\n const templatePath = path.join(templateDir, file);\n const targetPath = path.join(targetDir, file);\n\n const stat = await fs.stat(templatePath);\n\n if (stat.isDirectory()) {\n // Recursively copy directories\n await copyTemplateDir(templatePath, targetPath, data);\n } else if (file.endsWith(\".ejs\")) {\n // Render EJS template\n const content = await renderTemplate(templatePath, data);\n const outputPath = targetPath.replace(/\\.ejs$/, \"\");\n await writeFile(outputPath, content);\n } else {\n // Copy file as-is\n await fs.copy(templatePath, targetPath);\n }\n }\n}\n\n/**\n * Internal helper to copy a template directory recursively\n */\nasync function copyTemplateDir(\n templateDir: string,\n targetDir: string,\n data: Record<string, unknown>\n): Promise<void> {\n await fs.ensureDir(targetDir);\n\n const files = await fs.readdir(templateDir);\n\n for (const file of files) {\n const templatePath = path.join(templateDir, file);\n const targetPath = path.join(targetDir, file);\n\n const stat = await fs.stat(templatePath);\n\n if (stat.isDirectory()) {\n await copyTemplateDir(templatePath, targetPath, data);\n } else if (file.endsWith(\".ejs\")) {\n // Render EJS template\n const content = await renderTemplate(templatePath, data);\n const outputPath = targetPath.replace(/\\.ejs$/, \"\");\n await writeFile(outputPath, content);\n } else {\n // Copy file as-is\n await fs.copy(templatePath, targetPath);\n }\n }\n}\n\n/**\n * Get project root directory\n */\nexport function getProjectRoot(): string {\n let currentDir = process.cwd();\n\n // Look for package.json with workspace config or themes directory\n while (currentDir !== path.parse(currentDir).root) {\n const packageJsonPath = path.join(currentDir, \"package.json\");\n\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = fs.readJsonSync(packageJsonPath);\n\n // Check if this is the root (has workspaces, src/themes, or themes)\n if (\n packageJson.workspaces ||\n fs.existsSync(path.join(currentDir, \"src/themes\")) ||\n fs.existsSync(path.join(currentDir, \"themes\"))\n ) {\n return currentDir;\n }\n }\n\n currentDir = path.dirname(currentDir);\n }\n\n return process.cwd();\n}\n\n/**\n * Get themes directory\n */\nexport function getThemesDir(): string {\n const root = getProjectRoot();\n if (fs.existsSync(path.join(root, \"themes\")))\n return path.join(root, \"themes\");\n if (fs.existsSync(path.join(root, \"src/themes\")))\n return path.join(root, \"src/themes\");\n // Standalone theme: parent dir acts as themes dir\n return path.dirname(root);\n}\n\n/**\n * Get features directory\n */\nexport function getFeaturesDir(): string {\n return path.join(getProjectRoot(), \"src/features\");\n}\n\n/**\n * Check if running in OneX project\n */\nexport function isOneXProject(): boolean {\n const root = getProjectRoot();\n return (\n fs.existsSync(path.join(root, \"themes\")) ||\n fs.existsSync(path.join(root, \"src/themes\")) ||\n fs.existsSync(path.join(root, \"theme.config.ts\")) ||\n fs.existsSync(path.join(root, \"bundle-entry.ts\"))\n );\n}\n\n/**\n * Ensure running in OneX project\n */\nexport function ensureOneXProject(): void {\n if (!isOneXProject()) {\n logger.error(\n \"Not in a OneX project. Please run this command from a OneX project root.\"\n );\n process.exit(1);\n }\n}\n\n/**\n * List available themes\n */\nexport function listThemes(): string[] {\n const themesDir = getThemesDir();\n\n if (!fs.existsSync(themesDir)) {\n return [];\n }\n\n return fs.readdirSync(themesDir).filter((name) => {\n const themePath = path.join(themesDir, name);\n return (\n fs.statSync(themePath).isDirectory() &&\n (fs.existsSync(path.join(themePath, \"theme.config.ts\")) ||\n fs.existsSync(path.join(themePath, \"bundle-entry.ts\")) ||\n fs.existsSync(path.join(themePath, \"manifest.ts\")))\n );\n });\n}\n\n/**\n * Check if theme exists\n */\nexport function themeExists(themeName: string): boolean {\n const themePath = path.join(getThemesDir(), themeName);\n return (\n fs.existsSync(themePath) &&\n (fs.existsSync(path.join(themePath, \"theme.config.ts\")) ||\n fs.existsSync(path.join(themePath, \"bundle-entry.ts\")) ||\n fs.existsSync(path.join(themePath, \"manifest.ts\")))\n );\n}\n\n/**\n * Detect package manager (npm, yarn, pnpm, bun)\n */\nexport function detectPackageManager(): \"npm\" | \"yarn\" | \"pnpm\" | \"bun\" {\n // Check if running with specific package manager\n const userAgent = process.env.npm_config_user_agent || \"\";\n\n if (userAgent.includes(\"pnpm\")) return \"pnpm\";\n if (userAgent.includes(\"yarn\")) return \"yarn\";\n if (userAgent.includes(\"bun\")) return \"bun\";\n\n // Check for lock files in cwd\n const cwd = process.cwd();\n if (fs.existsSync(path.join(cwd, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (fs.existsSync(path.join(cwd, \"yarn.lock\"))) return \"yarn\";\n if (fs.existsSync(path.join(cwd, \"bun.lockb\"))) return \"bun\";\n\n // Default to npm\n return \"npm\";\n}\n\n/**\n * Install dependencies in a directory\n */\nexport async function installDependencies(\n projectPath: string,\n packageManager: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\" = \"npm\"\n): Promise<void> {\n return new Promise((resolve, reject) => {\n try {\n const installCmd =\n packageManager === \"yarn\" ? \"yarn\" : `${packageManager} install`;\n\n execSync(installCmd, {\n cwd: projectPath,\n stdio: \"inherit\",\n });\n\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n}\n","import path from \"path\";\nimport fs from \"fs\";\nimport { execSync } from \"child_process\";\nimport inquirer from \"inquirer\";\nimport { logger } from \"../utils/logger\";\nimport {\n validateThemeName,\n toKebabCase,\n toPascalCase,\n} from \"../utils/validators\";\nimport {\n writeFile,\n copyTemplate,\n detectPackageManager,\n installDependencies,\n} from \"../utils/file-helpers\";\nimport { getApiUrl, type Env } from \"../utils/cli-auth\";\n\ninterface InitOptions {\n template?: string;\n noInstall?: boolean;\n git?: boolean;\n yes?: boolean;\n env?: Env;\n}\n\nexport async function initCommand(\n projectName?: string,\n options: InitOptions = {}\n): Promise<void> {\n logger.header(\"Create New OneX Theme Project\");\n\n // Validate project name or prompt for it\n let name: string;\n\n if (!projectName) {\n const { inputName } = await inquirer.prompt([\n {\n type: \"input\",\n name: \"inputName\",\n message: \"Project name (kebab-case):\",\n validate: (input: string) => {\n if (!input) return \"Project name is required\";\n const kebabName = toKebabCase(input);\n if (!validateThemeName(kebabName)) {\n return \"Invalid project name. Use lowercase letters, numbers, and hyphens only.\";\n }\n if (fs.existsSync(path.join(process.cwd(), kebabName))) {\n return `Directory \"${kebabName}\" already exists`;\n }\n return true;\n },\n },\n ]);\n name = toKebabCase(inputName);\n } else {\n name = toKebabCase(projectName);\n }\n\n // Check if directory already exists\n const projectPath = path.join(process.cwd(), name);\n if (fs.existsSync(projectPath)) {\n logger.error(`Directory \"${name}\" already exists.`);\n process.exit(1);\n }\n\n // Check if theme ID is already registered (non-blocking — works offline)\n if (!options.yes) {\n try {\n const apiUrl = getApiUrl(options.env ?? \"dev\");\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 3000);\n const response = await fetch(\n `${apiUrl}/website-api/themes/${encodeURIComponent(name)}/exists`,\n { signal: controller.signal }\n );\n clearTimeout(timeout);\n if (response.ok) {\n const data = await response.json();\n const body = data.statusCode ? data.body : data;\n if (body.exists && body.owner === \"other\") {\n logger.warning(\n `Theme ID \"${name}\" is already registered by another developer.\\n` +\n ` You can still create this locally, but publishing will fail.\\n` +\n ` Consider using a different name.`\n );\n const { proceed } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"proceed\",\n message: \"Continue anyway?\",\n default: false,\n },\n ]);\n if (!proceed) {\n process.exit(0);\n }\n }\n }\n } catch {\n // Offline or API unreachable — skip check silently\n }\n }\n\n // Skip prompts if --yes flag is provided\n let displayName: string;\n let description: string;\n let author: string;\n let template: string;\n\n if (options.yes) {\n displayName = toPascalCase(name)\n .replace(/([A-Z])/g, \" $1\")\n .trim();\n description = \"A custom OneX theme\";\n author = \"\";\n template = options.template || \"default\";\n } else {\n const answers = await inquirer.prompt([\n {\n type: \"input\",\n name: \"displayName\",\n message: \"Display name:\",\n default: toPascalCase(name)\n .replace(/([A-Z])/g, \" $1\")\n .trim(),\n },\n {\n type: \"input\",\n name: \"description\",\n message: \"Theme description:\",\n default: \"A custom OneX theme\",\n },\n {\n type: \"input\",\n name: \"author\",\n message: \"Author name:\",\n default: \"\",\n },\n {\n type: \"list\",\n name: \"template\",\n message: \"Template to use:\",\n choices: [\n { name: \"Default (basic theme structure)\", value: \"default\" },\n { name: \"Minimal (bare minimum)\", value: \"minimal\" },\n ],\n default: options.template || \"default\",\n },\n ]);\n\n displayName = answers.displayName;\n description = answers.description;\n author = answers.author;\n template = answers.template;\n }\n\n const data = {\n projectName: name,\n themeName: name,\n themeNamePascal: toPascalCase(name),\n displayName,\n description,\n author,\n template,\n };\n\n // Prompt for Figma API key (optional, skip if --yes)\n let figmaApiKey = \"\";\n if (!options.yes) {\n const figmaAnswer = await inquirer.prompt([\n {\n type: \"password\",\n name: \"figmaApiKey\",\n message:\n \"Figma API Key (optional, for Figma-to-code MCP — press Enter to skip):\",\n },\n ]);\n figmaApiKey = figmaAnswer.figmaApiKey || \"\";\n }\n\n logger.startSpinner(\"Creating project structure...\");\n\n try {\n // Create project directory\n fs.mkdirSync(projectPath, { recursive: true });\n\n // Copy template files (real theme source — no EJS)\n await copyTemplate(template, projectPath, data);\n\n // Rename theme ID/name in copied files\n await renameThemeInFiles(\n projectPath,\n name,\n displayName,\n description,\n author\n );\n\n // Patch .mcp.json with Figma API key (or remove figma server if no key)\n const mcpJsonPath = path.join(projectPath, \".mcp.json\");\n if (fs.existsSync(mcpJsonPath)) {\n let mcpContent = fs.readFileSync(mcpJsonPath, \"utf-8\");\n if (figmaApiKey) {\n mcpContent = mcpContent.replace(\"__FIGMA_API_KEY__\", figmaApiKey);\n } else {\n // Remove figma server entry if no key provided\n try {\n const mcpJson = JSON.parse(mcpContent);\n delete mcpJson.mcpServers.figma;\n mcpContent = JSON.stringify(mcpJson, null, 2) + \"\\n\";\n } catch {}\n }\n fs.writeFileSync(mcpJsonPath, mcpContent, \"utf-8\");\n }\n\n logger.stopSpinner(true, \"Project structure created!\");\n\n // Initialize git if requested\n if (options.git) {\n logger.startSpinner(\"Initializing git repository...\");\n try {\n execSync(\"git init\", { cwd: projectPath, stdio: \"ignore\" });\n execSync(\"git add .\", { cwd: projectPath, stdio: \"ignore\" });\n execSync('git commit -m \"Initial commit from onexthm init\"', {\n cwd: projectPath,\n stdio: \"ignore\",\n });\n logger.stopSpinner(true, \"Git repository initialized!\");\n } catch {\n logger.stopSpinner(false, \"Failed to initialize git\");\n }\n }\n\n // Install dependencies\n if (!options.noInstall) {\n logger.newLine();\n const packageManager = detectPackageManager();\n logger.startSpinner(`Installing dependencies with ${packageManager}...`);\n try {\n await installDependencies(projectPath, packageManager);\n logger.stopSpinner(true, \"Dependencies installed!\");\n } catch {\n logger.stopSpinner(false, \"Failed to install dependencies\");\n logger.info(\n \"You can install dependencies manually by running: cd \" +\n name +\n \" && npm install\"\n );\n }\n }\n\n // Print success message and next steps\n logger.newLine();\n logger.section(\"Success! 🎉\");\n logger.newLine();\n logger.info(`Created OneX theme project at: ${projectPath}`);\n logger.newLine();\n logger.section(\"Next steps:\");\n logger.log(` cd ${name}`);\n if (options.noInstall) {\n logger.log(` npm install`);\n }\n logger.log(` npm run build # Build your theme`);\n logger.log(` npm run dev # Start development mode`);\n logger.newLine();\n logger.section(\"Theme structure:\");\n logger.log(\" bundle-entry.ts - Theme manifest and exports\");\n logger.log(\n \" theme.config.ts - Design tokens (colors, typography, etc.)\"\n );\n logger.log(\" theme.layout.ts - Header and footer configuration\");\n logger.log(\" sections/ - Custom sections for your theme\");\n logger.log(\" pages/ - Page configurations\");\n logger.log(\" CLAUDE.md - AI assistant context\");\n logger.newLine();\n logger.success(`Happy theming! 🎨`);\n } catch (error) {\n logger.stopSpinner(false, \"Failed to create project\");\n logger.error(\n error instanceof Error ? error.message : \"Unknown error occurred\"\n );\n // Clean up on failure\n if (fs.existsSync(projectPath)) {\n fs.rmSync(projectPath, { recursive: true, force: true });\n }\n process.exit(1);\n }\n}\n\n/**\n * Rename theme ID/name in copied template files.\n * Replaces \"simple\"/\"My Simple Theme\" with the user's theme name.\n */\nasync function renameThemeInFiles(\n projectPath: string,\n themeName: string,\n displayName: string,\n description: string,\n author: string\n): Promise<void> {\n // Only rename in metadata files — NOT in sections/pages (section type IDs must stay)\n // theme.config.ts — update id, name, description\n const configPath = path.join(projectPath, \"theme.config.ts\");\n if (fs.existsSync(configPath)) {\n let content = fs.readFileSync(configPath, \"utf-8\");\n // Keep id as \"my-simple\" — section types depend on it for prefix stripping\n content = content.replace(\n /name: \"My Simple Theme\"/,\n `name: \"${displayName}\"`\n );\n content = content.replace(\n /description: \".*?\"/,\n `description: \"${description}\"`\n );\n fs.writeFileSync(configPath, content, \"utf-8\");\n }\n\n // package.json — update name, description\n const pkgPath = path.join(projectPath, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n let content = fs.readFileSync(pkgPath, \"utf-8\");\n content = content.replace(\n /@onex-themes\\/my-simple/g,\n `@onex-themes/${themeName}`\n );\n content = content.replace(\n /\"description\": \".*?\"/,\n `\"description\": \"${description}\"`\n );\n fs.writeFileSync(pkgPath, content, \"utf-8\");\n }\n}\n\nfunction toCamelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n}\n\n// Legacy generator functions (kept for backward compat, unused with new template)\nfunction generateManifest(data: {\n themeName: string;\n displayName: string;\n description: string;\n author: string;\n}): string {\n return `import type { ThemeExport } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} Theme Manifest\n * ${data.description}\n */\nexport const manifest: ThemeExport = {\n id: \"${data.themeName}\",\n name: \"${data.displayName}\",\n description: \"${data.description}\",\n version: \"1.0.0\",\n author: \"${data.author}\",\n\n // Theme configuration\n config: () => import(\"./config\").then((m) => m.themeConfig),\n\n // Theme layout (header/footer sections)\n layout: () => import(\"./layout\").then((m) => m.themeLayout),\n\n // Available sections in this theme\n sections: {\n // Example: hero: () => import(\"./sections/hero\").then((m) => m.heroSchema),\n },\n\n // Available blocks in this theme\n blocks: {\n // Example: productCard: () => import(\"./blocks/product-card\").then((m) => m.productCardDefinition),\n },\n\n // Default pages\n pages: {\n home: () => import(\"./pages/home\").then((m) => m.homePageConfig),\n },\n\n // Supported page types\n supportedPageTypes: [\"home\", \"about\", \"contact\", \"custom\"],\n\n // Preview image (optional)\n preview: undefined,\n\n // Tags for categorization (optional)\n tags: [\"custom\"],\n};\n\nexport default manifest;\n`;\n}\n\nfunction generateThemeConfig(data: {\n themeName: string;\n displayName: string;\n}): string {\n return `import type { ThemeConfig } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} Theme Configuration\n * Design tokens: colors, typography, spacing, etc.\n */\nexport const themeConfig: ThemeConfig = {\n // Color palette\n colors: {\n primary: {\n 50: \"#eff6ff\",\n 100: \"#dbeafe\",\n 200: \"#bfdbfe\",\n 300: \"#93c5fd\",\n 400: \"#60a5fa\",\n 500: \"#3b82f6\",\n 600: \"#2563eb\",\n 700: \"#1d4ed8\",\n 800: \"#1e40af\",\n 900: \"#1e3a8a\",\n },\n secondary: {\n 50: \"#f8fafc\",\n 100: \"#f1f5f9\",\n 200: \"#e2e8f0\",\n 300: \"#cbd5e1\",\n 400: \"#94a3b8\",\n 500: \"#64748b\",\n 600: \"#475569\",\n 700: \"#334155\",\n 800: \"#1e293b\",\n 900: \"#0f172a\",\n },\n accent: {\n 50: \"#fdf4ff\",\n 100: \"#fae8ff\",\n 200: \"#f5d0fe\",\n 300: \"#f0abfc\",\n 400: \"#e879f9\",\n 500: \"#d946ef\",\n 600: \"#c026d3\",\n 700: \"#a21caf\",\n 800: \"#86198f\",\n 900: \"#701a75\",\n },\n },\n\n // Typography\n typography: {\n fontFamily: {\n sans: [\"Inter\", \"system-ui\", \"sans-serif\"],\n serif: [\"Georgia\", \"serif\"],\n mono: [\"Monaco\", \"monospace\"],\n },\n fontSize: {\n xs: \"0.75rem\",\n sm: \"0.875rem\",\n base: \"1rem\",\n lg: \"1.125rem\",\n xl: \"1.25rem\",\n \"2xl\": \"1.5rem\",\n \"3xl\": \"1.875rem\",\n \"4xl\": \"2.25rem\",\n \"5xl\": \"3rem\",\n },\n },\n\n // Spacing\n spacing: {\n xs: \"0.5rem\",\n sm: \"1rem\",\n md: \"1.5rem\",\n lg: \"2rem\",\n xl: \"3rem\",\n \"2xl\": \"4rem\",\n \"3xl\": \"6rem\",\n \"4xl\": \"8rem\",\n },\n\n // Border radius\n borderRadius: {\n none: \"0\",\n sm: \"0.125rem\",\n md: \"0.375rem\",\n lg: \"0.5rem\",\n xl: \"0.75rem\",\n full: \"9999px\",\n },\n\n // Breakpoints\n breakpoints: {\n sm: \"640px\",\n md: \"768px\",\n lg: \"1024px\",\n xl: \"1280px\",\n \"2xl\": \"1536px\",\n },\n};\n`;\n}\n\nfunction generateThemeLayout(data: { themeName: string }): string {\n return `import type { ThemeLayoutConfig } from \"@onexapis/core\";\n\n/**\n * ${data.themeName} Theme Layout\n * Define header and footer sections\n */\nexport const themeLayout: ThemeLayoutConfig = {\n // Header section configuration\n header: undefined,\n // Example:\n // header: {\n // type: \"header\",\n // template: \"default\",\n // enabled: true,\n // settings: {},\n // },\n\n // Footer section configuration\n footer: undefined,\n // Example:\n // footer: {\n // type: \"footer\",\n // template: \"default\",\n // enabled: true,\n // settings: {},\n // },\n};\n`;\n}\n\nfunction generateThemeIndex(data: {\n themeName: string;\n themeNamePascal: string;\n}): string {\n return `/**\n * ${data.themeNamePascal} Theme\n */\n\nexport { manifest as ${data.themeNamePascal}Manifest } from \"./manifest\";\nexport { themeConfig as ${data.themeNamePascal}Config } from \"./config\";\nexport { themeLayout as ${data.themeNamePascal}Layout } from \"./layout\";\n`;\n}\n\nfunction generateHomePage(data: { displayName: string }): string {\n return `import type { PageConfig } from \"@onexapis/core\";\n\n/**\n * Home Page Configuration\n */\nexport const homePageConfig: PageConfig = {\n type: \"home\",\n title: \"${data.displayName}\",\n description: \"Welcome to ${data.displayName}\",\n\n // SEO metadata\n seo: {\n title: \"${data.displayName} - Home\",\n description: \"Welcome to ${data.displayName}\",\n keywords: [],\n ogImage: undefined,\n },\n\n // Page sections\n sections: [\n // Add your sections here\n // Example:\n // {\n // id: \"hero-1\",\n // type: \"hero\",\n // template: \"default\",\n // order: 0,\n // enabled: true,\n // settings: {},\n // components: [],\n // blocks: [],\n // },\n ],\n};\n`;\n}\n","/**\n * Validation utilities for CLI inputs\n */\n\n/**\n * Validate component/section/block name\n * Must be kebab-case and alphanumeric\n */\nexport function validateName(name: string): boolean {\n return /^[a-z0-9]+(-[a-z0-9]+)*$/.test(name);\n}\n\n/**\n * Convert string to kebab-case\n */\nexport function toKebabCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .replace(/[\\s_]+/g, \"-\")\n .toLowerCase();\n}\n\n/**\n * Convert string to PascalCase\n */\nexport function toPascalCase(str: string): string {\n return str\n .split(/[-_\\s]+/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(\"\");\n}\n\n/**\n * Convert string to camelCase\n */\nexport function toCamelCase(str: string): string {\n const pascal = toPascalCase(str);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\n/**\n * Validate theme name\n */\nexport function validateThemeName(name: string): boolean {\n return /^[a-z][a-z0-9-]*$/.test(name);\n}\n\n/**\n * Check if path exists\n */\nexport function pathExists(filePath: string): boolean {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const fs = require(\"fs-extra\");\n return fs.existsSync(filePath);\n}\n\n/**\n * Validate section category\n */\nexport function validateCategory(category: string): boolean {\n const validCategories = [\n \"headers\",\n \"heroes\",\n \"content\",\n \"features\",\n \"testimonials\",\n \"galleries\",\n \"cta\",\n \"footers\",\n \"ecommerce\",\n \"blog\",\n \"contact\",\n ];\n return validCategories.includes(category);\n}\n\n/**\n * Get valid categories\n */\nexport function getValidCategories(): string[] {\n return [\n \"headers\",\n \"heroes\",\n \"content\",\n \"features\",\n \"testimonials\",\n \"galleries\",\n \"cta\",\n \"footers\",\n \"ecommerce\",\n \"blog\",\n \"contact\",\n ];\n}\n","/**\n * CLI Auth Utilities\n * Token storage, refresh, and API authentication for onexthm CLI.\n */\n\nimport fs from \"fs-extra\";\nimport path from \"path\";\nimport os from \"os\";\nimport crypto from \"crypto\";\n\nconst AUTH_DIR = path.join(os.homedir(), \".onexthm\");\n\n/** Supported target environments. */\nexport type Env = \"dev\" | \"staging\" | \"prod\";\n\n/** API base URLs per environment. */\nconst ENV_URLS: Record<Env, string> = {\n dev: \"https://platform-dev.onexeos.com\",\n staging: \"https://platform-staging.onexeos.com\",\n prod: \"https://platform-apis.onexeos.com\",\n};\n\n/**\n * Resolve the auth file path for a given environment.\n * Handles one-time migration: if the old auth.json exists and auth-dev.json\n * does not, the old file is renamed so existing dev sessions keep working.\n */\nfunction getAuthFile(env: Env = \"dev\"): string {\n const newFile = path.join(AUTH_DIR, `auth-${env}.json`);\n\n // Migrate legacy auth.json → auth-dev.json (runs once per machine)\n if (env === \"dev\") {\n const legacyFile = path.join(AUTH_DIR, \"auth.json\");\n if (fs.existsSync(legacyFile) && !fs.existsSync(newFile)) {\n try {\n fs.moveSync(legacyFile, newFile);\n } catch {\n // If move fails (e.g. cross-device), fall back to copy + delete\n try {\n fs.copySync(legacyFile, newFile);\n fs.removeSync(legacyFile);\n } catch {\n // Leave both files; new file will take precedence going forward\n }\n }\n }\n }\n\n return newFile;\n}\n\nexport interface AuthTokens {\n accessToken: string;\n idToken: string;\n refreshToken: string;\n expiresAt: number; // Unix timestamp (seconds)\n user: {\n email: string;\n name?: string;\n companyId?: string;\n userId?: string;\n };\n}\n\n/**\n * Get the Platform API base URL for a given environment.\n * ONEXTHM_API_URL always overrides — useful for local dev / custom staging.\n * Only ONEXTHM_API_URL is honoured — NEXT_PUBLIC_API_URL is a theme-facing\n * variable (storefront / preview) and must never bleed into CLI platform calls.\n */\nexport function getApiUrl(env: Env = \"dev\"): string {\n return process.env.ONEXTHM_API_URL || ENV_URLS[env];\n}\n\n/**\n * Save auth tokens to disk for the given environment.\n */\nexport async function saveAuthTokens(\n tokens: AuthTokens,\n env: Env = \"dev\"\n): Promise<void> {\n await fs.ensureDir(AUTH_DIR);\n\n const key = getMachineKey();\n const data = JSON.stringify(tokens);\n const encrypted = encrypt(data, key);\n\n await fs.writeFile(getAuthFile(env), encrypted, \"utf-8\");\n}\n\n/**\n * Load auth tokens from disk for the given environment.\n * Returns null if not logged in or file is unreadable.\n */\nexport function loadAuthTokens(env: Env = \"dev\"): AuthTokens | null {\n try {\n const file = getAuthFile(env);\n if (!fs.existsSync(file)) return null;\n\n const encrypted = fs.readFileSync(file, \"utf-8\");\n const key = getMachineKey();\n const data = decrypt(encrypted, key);\n\n return JSON.parse(data) as AuthTokens;\n } catch {\n return null;\n }\n}\n\n/**\n * Clear stored auth tokens for the given environment.\n */\nexport async function clearAuthTokens(env: Env = \"dev\"): Promise<void> {\n try {\n await fs.remove(getAuthFile(env));\n } catch {\n // Ignore if file doesn't exist\n }\n}\n\n/**\n * Check if tokens are expired (with 5-minute buffer so long operations\n * like large uploads don't race to the expiry boundary).\n */\nexport function isTokenExpired(tokens: AuthTokens): boolean {\n return Date.now() / 1000 > tokens.expiresAt - 300;\n}\n\n/**\n * Get valid tokens for the given environment — auto-refreshes if expired.\n */\nexport async function getValidTokens(\n env: Env = \"dev\"\n): Promise<AuthTokens | null> {\n const tokens = loadAuthTokens(env);\n if (!tokens) return null;\n\n if (!isTokenExpired(tokens)) return tokens;\n\n // Try to refresh\n try {\n const apiUrl = getApiUrl(env);\n const response = await fetch(`${apiUrl}/auth/refresh`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ refresh_token: tokens.refreshToken }),\n });\n\n if (!response.ok) {\n await clearAuthTokens(env);\n return null;\n }\n\n const data = await response.json();\n const body = data.statusCode ? data.body : data;\n\n if (!body.IdToken) {\n await clearAuthTokens(env);\n return null;\n }\n\n const refreshed: AuthTokens = {\n ...tokens,\n accessToken: body.AccessToken || tokens.accessToken,\n idToken: body.IdToken,\n expiresAt: Math.floor(Date.now() / 1000) + (body.ExpiresIn || 3600),\n };\n\n await saveAuthTokens(refreshed, env);\n return refreshed;\n } catch {\n await clearAuthTokens(env);\n return null;\n }\n}\n\n/**\n * Make an authenticated API request for the given environment.\n */\nexport async function authenticatedFetch(\n url: string,\n init?: RequestInit,\n env: Env = \"dev\"\n): Promise<Response> {\n const tokens = await getValidTokens(env);\n if (!tokens) {\n throw new Error(\n `Not logged in to ${env} environment. Run: onexthm login --env ${env}`\n );\n }\n\n const headers = new Headers(init?.headers);\n headers.set(\"Authorization\", `Bearer ${tokens.idToken}`);\n headers.set(\"Content-Type\", \"application/json\");\n\n return fetch(url, { ...init, headers });\n}\n\n// ─── Machine-specific encryption ─────────────────────────────────\n\nfunction getMachineKey(): Buffer {\n let seed: string;\n\n if (process.platform === \"darwin\") {\n seed = `onexthm:${os.hostname()}:${os.userInfo().username}`;\n } else if (process.platform === \"linux\") {\n try {\n seed = `onexthm:${fs.readFileSync(\"/etc/machine-id\", \"utf-8\").trim()}`;\n } catch {\n seed = `onexthm:${os.hostname()}:${os.userInfo().username}`;\n }\n } else {\n seed = `onexthm:${os.hostname()}:${os.userInfo().username}`;\n }\n\n return crypto.createHash(\"sha256\").update(seed).digest();\n}\n\nfunction encrypt(text: string, key: Buffer): string {\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv(\"aes-256-gcm\", key, iv);\n let encrypted = cipher.update(text, \"utf-8\", \"hex\");\n encrypted += cipher.final(\"hex\");\n const tag = cipher.getAuthTag();\n return `${iv.toString(\"hex\")}:${tag.toString(\"hex\")}:${encrypted}`;\n}\n\nfunction decrypt(text: string, key: Buffer): string {\n const [ivHex, tagHex, encrypted] = text.split(\":\");\n const iv = Buffer.from(ivHex, \"hex\");\n const tag = Buffer.from(tagHex, \"hex\");\n const decipher = crypto.createDecipheriv(\"aes-256-gcm\", key, iv);\n decipher.setAuthTag(tag);\n let decrypted = decipher.update(encrypted, \"hex\", \"utf-8\");\n decrypted += decipher.final(\"utf-8\");\n return decrypted;\n}\n\n/**\n * Parse JWT claims from an IdToken.\n */\nexport function parseJwtClaims(idToken: string): Record<string, unknown> {\n try {\n const payload = idToken.split(\".\")[1];\n const decoded = Buffer.from(payload, \"base64url\").toString(\"utf-8\");\n return JSON.parse(decoded);\n } catch {\n return {};\n }\n}\n","import path from \"path\";\nimport inquirer from \"inquirer\";\nimport { logger } from \"../utils/logger\";\nimport {\n validateName,\n toKebabCase,\n toPascalCase,\n getValidCategories,\n} from \"../utils/validators\";\nimport fs from \"fs-extra\";\nimport {\n ensureOneXProject,\n getThemesDir,\n listThemes,\n themeExists,\n writeFile,\n} from \"../utils/file-helpers\";\n\ninterface CreateSectionOptions {\n theme?: string;\n category?: string;\n template?: string;\n}\n\nexport async function createSectionCommand(\n name: string,\n options: CreateSectionOptions\n): Promise<void> {\n logger.header(\"Create New Section\");\n\n // Ensure we're in a OneX project\n ensureOneXProject();\n\n // Auto-detect theme in standalone theme directory\n if (!options.theme) {\n const isStandaloneTheme = [\"theme.config.ts\", \"bundle-entry.ts\"].some((f) =>\n fs.existsSync(path.join(process.cwd(), f))\n );\n if (isStandaloneTheme) {\n options.theme = path.basename(process.cwd());\n }\n }\n\n // Validate and normalize name\n const sectionName = toKebabCase(name);\n if (!validateName(sectionName)) {\n logger.error(\n `Invalid section name: ${sectionName}. Use kebab-case (e.g., hero, featured-products)`\n );\n process.exit(1);\n }\n\n // Prompt for missing options\n const answers = await inquirer.prompt([\n {\n type: \"list\",\n name: \"theme\",\n message: \"Which theme should this section belong to?\",\n choices: listThemes(),\n when: !options.theme,\n },\n {\n type: \"list\",\n name: \"category\",\n message: \"What category is this section?\",\n choices: getValidCategories(),\n when: !options.category,\n },\n {\n type: \"input\",\n name: \"displayName\",\n message: \"Display name for this section:\",\n default: toPascalCase(sectionName)\n .replace(/([A-Z])/g, \" $1\")\n .trim(),\n },\n {\n type: \"input\",\n name: \"description\",\n message: \"Section description:\",\n default: `${toPascalCase(sectionName)} section`,\n },\n {\n type: \"confirm\",\n name: \"createTemplate\",\n message: \"Create a default template variant?\",\n default: true,\n },\n ]);\n\n const themeName = options.theme || answers.theme;\n const category = options.category || answers.category;\n const displayName = answers.displayName;\n const description = answers.description;\n const createTemplate = answers.createTemplate;\n\n // Validate theme exists\n if (!themeExists(themeName)) {\n logger.error(`Theme \"${themeName}\" does not exist.`);\n process.exit(1);\n }\n\n // Prepare data for templates\n const data = {\n sectionName,\n sectionNamePascal: toPascalCase(sectionName),\n themeName,\n category,\n displayName,\n description,\n };\n\n logger.startSpinner(\"Creating section files...\");\n\n try {\n const themePath = path.join(getThemesDir(), themeName);\n const sectionPath = path.join(themePath, \"sections\", sectionName);\n\n // Create section schema file\n const schemaContent = generateSectionSchema(data);\n await writeFile(\n path.join(sectionPath, `${sectionName}.schema.ts`),\n schemaContent\n );\n\n // Create default template if requested\n if (createTemplate) {\n const templateContent = generateSectionTemplate(data);\n await writeFile(\n path.join(sectionPath, `${sectionName}-default.tsx`),\n templateContent\n );\n }\n\n // Create index file\n const indexContent = generateSectionIndex(data, createTemplate);\n await writeFile(path.join(sectionPath, \"index.ts\"), indexContent);\n\n logger.stopSpinner(true, \"Section files created successfully!\");\n\n // Print next steps\n logger.newLine();\n logger.section(\"Next steps:\");\n logger.log(\n ` 1. Edit schema: ${path.relative(process.cwd(), path.join(sectionPath, `${sectionName}.schema.ts`))}`\n );\n if (createTemplate) {\n logger.log(\n ` 2. Edit template: ${path.relative(process.cwd(), path.join(sectionPath, `${sectionName}-default.tsx`))}`\n );\n }\n logger.log(\n ` 3. Add to theme manifest: ${path.relative(process.cwd(), path.join(themePath, \"manifest.ts\"))}`\n );\n logger.newLine();\n logger.success(\"Section created successfully!\");\n } catch (error) {\n logger.stopSpinner(false, \"Failed to create section\");\n logger.error(\n error instanceof Error ? error.message : \"Unknown error occurred\"\n );\n process.exit(1);\n }\n}\n\nfunction generateSectionSchema(data: {\n sectionName: string;\n sectionNamePascal: string;\n category: string;\n displayName: string;\n description: string;\n}): string {\n return `import type { SectionSchema } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} Section Schema\n * ${data.description}\n */\nexport const ${data.sectionName}Schema: SectionSchema = {\n type: \"${data.sectionName}\",\n name: \"${data.displayName}\",\n description: \"${data.description}\",\n category: \"${data.category}\",\n icon: \"layout\",\n\n // Available template variants\n templates: [\n {\n id: \"default\",\n name: \"Default\",\n description: \"Default ${data.sectionName} layout\",\n isDefault: true,\n },\n ],\n\n // Section-level settings\n settings: [\n {\n id: \"backgroundColor\",\n type: \"color\",\n label: \"Background Color\",\n category: \"style\",\n },\n {\n id: \"padding\",\n type: \"select\",\n label: \"Padding\",\n category: \"style\",\n options: [\n { label: \"None\", value: \"none\" },\n { label: \"Small\", value: \"sm\" },\n { label: \"Medium\", value: \"md\" },\n { label: \"Large\", value: \"lg\" },\n ],\n defaultValue: \"md\",\n },\n ],\n\n // Default settings values\n defaults: {\n backgroundColor: \"#ffffff\",\n padding: \"md\",\n },\n\n // Allowed blocks (optional)\n allowedBlocks: [],\n\n // Maximum number of instances on a page (optional)\n maxInstances: undefined,\n};\n`;\n}\n\nfunction generateSectionTemplate(data: {\n sectionName: string;\n sectionNamePascal: string;\n displayName: string;\n}): string {\n return `import React from \"react\";\nimport type { SectionComponentProps } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} - Default Template\n */\nexport function ${data.sectionNamePascal}Default({\n section,\n isEditing = false,\n}: SectionComponentProps) {\n const { settings = {} } = section;\n const backgroundColor = settings.backgroundColor as string || \"#ffffff\";\n const padding = settings.padding as string || \"md\";\n\n // Map padding values to Tailwind classes\n const paddingClasses = {\n none: \"\",\n sm: \"py-8\",\n md: \"py-16\",\n lg: \"py-24\",\n };\n\n return (\n <section\n className={\\`${data.sectionName}-section \\${paddingClasses[padding as keyof typeof paddingClasses] || paddingClasses.md}\\`}\n style={{ backgroundColor }}\n data-section-id={section.id}\n data-section-type={section.type}\n >\n <div className=\"container mx-auto px-4\">\n {/* TODO: Implement section content */}\n <div className=\"text-center\">\n <h2 className=\"text-3xl font-bold\">${data.displayName}</h2>\n <p className=\"mt-4 text-gray-600\">\n Start building your section here\n </p>\n </div>\n\n {/* Render blocks if any */}\n {section.blocks && section.blocks.length > 0 && (\n <div className=\"mt-8\">\n {/* TODO: Render blocks */}\n </div>\n )}\n\n {/* Render components if any */}\n {section.components && section.components.length > 0 && (\n <div className=\"mt-8\">\n {/* TODO: Render components */}\n </div>\n )}\n </div>\n </section>\n );\n}\n`;\n}\n\nfunction generateSectionIndex(\n data: { sectionName: string; sectionNamePascal: string },\n hasTemplate: boolean\n): string {\n return `/**\n * ${data.sectionNamePascal} Section\n */\n\nexport { ${data.sectionName}Schema } from \"./${data.sectionName}.schema\";\n${hasTemplate ? `export { ${data.sectionNamePascal}Default } from \"./${data.sectionName}-default\";` : \"\"}\n`;\n}\n","import path from \"path\";\nimport fs from \"fs-extra\";\nimport inquirer from \"inquirer\";\nimport { logger } from \"../utils/logger\";\nimport { validateName, toKebabCase, toPascalCase } from \"../utils/validators\";\nimport {\n ensureOneXProject,\n getFeaturesDir,\n getThemesDir,\n listThemes,\n themeExists,\n writeFile,\n} from \"../utils/file-helpers\";\n\ninterface CreateBlockOptions {\n theme?: string;\n}\n\nexport async function createBlockCommand(\n name: string,\n options: CreateBlockOptions\n): Promise<void> {\n logger.header(\"Create New Block\");\n\n // Ensure we're in a OneX project\n ensureOneXProject();\n\n // Auto-detect theme in standalone theme directory\n if (!options.theme) {\n const isStandaloneTheme = [\"theme.config.ts\", \"bundle-entry.ts\"].some((f) =>\n fs.existsSync(path.join(process.cwd(), f))\n );\n if (isStandaloneTheme) {\n options.theme = path.basename(process.cwd());\n }\n }\n\n // Validate and normalize name\n const blockName = toKebabCase(name);\n if (!validateName(blockName)) {\n logger.error(\n `Invalid block name: ${blockName}. Use kebab-case (e.g., product-card, testimonial-item)`\n );\n process.exit(1);\n }\n\n // Prompt for options\n const answers = await inquirer.prompt([\n {\n type: \"list\",\n name: \"scope\",\n message: \"Block scope:\",\n choices: [\n { name: \"Shared (available to all themes)\", value: \"shared\" },\n { name: \"Theme-specific\", value: \"theme\" },\n ],\n default: \"shared\",\n },\n {\n type: \"list\",\n name: \"theme\",\n message: \"Which theme?\",\n choices: listThemes(),\n when: (answers) => answers.scope === \"theme\" && !options.theme,\n },\n {\n type: \"input\",\n name: \"displayName\",\n message: \"Display name for this block:\",\n default: toPascalCase(blockName)\n .replace(/([A-Z])/g, \" $1\")\n .trim(),\n },\n {\n type: \"input\",\n name: \"description\",\n message: \"Block description:\",\n default: `${toPascalCase(blockName)} block`,\n },\n {\n type: \"confirm\",\n name: \"hasComponents\",\n message: \"Does this block contain components?\",\n default: true,\n },\n {\n type: \"confirm\",\n name: \"hasNestedBlocks\",\n message: \"Does this block support nested blocks?\",\n default: false,\n },\n ]);\n\n const scope = answers.scope;\n const themeName = options.theme || answers.theme;\n const displayName = answers.displayName;\n const description = answers.description;\n const hasComponents = answers.hasComponents;\n const hasNestedBlocks = answers.hasNestedBlocks;\n\n // Validate theme if theme-specific\n if (scope === \"theme\" && !themeExists(themeName)) {\n logger.error(`Theme \"${themeName}\" does not exist.`);\n process.exit(1);\n }\n\n // Prepare data for templates\n const data = {\n blockName,\n blockNamePascal: toPascalCase(blockName),\n displayName,\n description,\n hasComponents,\n hasNestedBlocks,\n scope,\n themeName,\n };\n\n logger.startSpinner(\"Creating block files...\");\n\n try {\n const blockPath =\n scope === \"shared\"\n ? path.join(getFeaturesDir(), \"blocks\", blockName)\n : path.join(getThemesDir(), themeName, \"blocks\", blockName);\n\n // Create block schema file\n const schemaContent = generateBlockSchema(data);\n await writeFile(\n path.join(blockPath, `${blockName}.schema.ts`),\n schemaContent\n );\n\n // Create block component file\n const componentContent = generateBlockComponent(data);\n await writeFile(path.join(blockPath, `${blockName}.tsx`), componentContent);\n\n // Create index file\n const indexContent = generateBlockIndex(data);\n await writeFile(path.join(blockPath, \"index.ts\"), indexContent);\n\n logger.stopSpinner(true, \"Block files created successfully!\");\n\n // Print next steps\n logger.newLine();\n logger.section(\"Next steps:\");\n logger.log(\n ` 1. Edit schema: ${path.relative(process.cwd(), path.join(blockPath, `${blockName}.schema.ts`))}`\n );\n logger.log(\n ` 2. Edit component: ${path.relative(process.cwd(), path.join(blockPath, `${blockName}.tsx`))}`\n );\n logger.log(\n ` 3. Register in block registry: src/lib/registry/block-registry.ts`\n );\n logger.newLine();\n logger.success(\"Block created successfully!\");\n } catch (error) {\n logger.stopSpinner(false, \"Failed to create block\");\n logger.error(\n error instanceof Error ? error.message : \"Unknown error occurred\"\n );\n process.exit(1);\n }\n}\n\nfunction generateBlockSchema(data: {\n blockName: string;\n blockNamePascal: string;\n displayName: string;\n description: string;\n hasComponents: boolean;\n hasNestedBlocks: boolean;\n}): string {\n return `import type { BlockDefinition } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} Block Schema\n * ${data.description}\n */\nexport const ${data.blockName}Definition: BlockDefinition = {\n type: \"${data.blockName}\",\n name: \"${data.displayName}\",\n description: \"${data.description}\",\n icon: \"square\",\n\n // Block settings\n settings: [\n {\n id: \"title\",\n type: \"text\",\n label: \"Title\",\n category: \"content\",\n },\n {\n id: \"alignment\",\n type: \"select\",\n label: \"Alignment\",\n category: \"style\",\n options: [\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n { label: \"Right\", value: \"right\" },\n ],\n defaultValue: \"left\",\n },\n ],\n\n // Default settings values\n defaults: {\n title: \"${data.displayName}\",\n alignment: \"left\",\n },\n\n ${data.hasComponents ? `// This block can contain components\\n allowsComponents: true,` : \"\"}\n ${data.hasNestedBlocks ? `// This block can contain nested blocks\\n allowsNestedBlocks: true,` : \"\"}\n};\n`;\n}\n\nfunction generateBlockComponent(data: {\n blockName: string;\n blockNamePascal: string;\n displayName: string;\n hasComponents: boolean;\n hasNestedBlocks: boolean;\n}): string {\n return `import React from \"react\";\nimport type { BlockComponentProps } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} Block Component\n */\nexport function ${data.blockNamePascal}({\n block,\n isEditing = false,\n}: BlockComponentProps) {\n const { settings = {} } = block;\n const title = settings.title as string || \"${data.displayName}\";\n const alignment = settings.alignment as string || \"left\";\n\n const alignmentClasses = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n };\n\n return (\n <div\n className={\\`${data.blockName}-block \\${alignmentClasses[alignment as keyof typeof alignmentClasses]}\\`}\n data-block-id={block.id}\n data-block-type={block.type}\n >\n {title && <h3 className=\"text-xl font-semibold mb-4\">{title}</h3>}\n\n {/* TODO: Implement block content */}\n <div className=\"block-content\">\n <p className=\"text-gray-600\">Block content goes here</p>\n </div>\n\n ${\n data.hasComponents\n ? `{/* Render components if any */}\n {block.components && block.components.length > 0 && (\n <div className=\"block-components mt-4\">\n {/* TODO: Render components using ComponentRenderer */}\n </div>\n )}`\n : \"\"\n }\n\n ${\n data.hasNestedBlocks\n ? `{/* Render nested blocks if any */}\n {block.blocks && block.blocks.length > 0 && (\n <div className=\"nested-blocks mt-4\">\n {/* TODO: Render nested blocks using BlockRenderer */}\n </div>\n )}`\n : \"\"\n }\n </div>\n );\n}\n`;\n}\n\nfunction generateBlockIndex(data: {\n blockName: string;\n blockNamePascal: string;\n}): string {\n return `/**\n * ${data.blockNamePascal} Block\n */\n\nexport { ${data.blockName}Definition } from \"./${data.blockName}.schema\";\nexport { ${data.blockNamePascal} } from \"./${data.blockName}\";\n`;\n}\n","import path from \"path\";\nimport inquirer from \"inquirer\";\nimport { logger } from \"../utils/logger\";\nimport { validateName, toKebabCase, toPascalCase } from \"../utils/validators\";\nimport {\n ensureOneXProject,\n getFeaturesDir,\n writeFile,\n} from \"../utils/file-helpers\";\n\ninterface CreateComponentOptions {\n type?: string;\n}\n\nexport async function createComponentCommand(\n name: string,\n options: CreateComponentOptions\n): Promise<void> {\n logger.header(\"Create New Component\");\n\n // Ensure we're in a OneX project\n ensureOneXProject();\n\n // Validate and normalize name\n const componentName = toKebabCase(name);\n if (!validateName(componentName)) {\n logger.error(\n `Invalid component name: ${componentName}. Use kebab-case (e.g., button, icon-badge)`\n );\n process.exit(1);\n }\n\n // Prompt for options\n const answers = await inquirer.prompt([\n {\n type: \"list\",\n name: \"componentType\",\n message: \"Component type:\",\n choices: [\n { name: \"UI Component (button, badge, etc.)\", value: \"ui\" },\n { name: \"Form Component (input, select, etc.)\", value: \"form\" },\n { name: \"Layout Component (container, grid, etc.)\", value: \"layout\" },\n {\n name: \"Content Component (heading, paragraph, etc.)\",\n value: \"content\",\n },\n ],\n when: !options.type,\n },\n {\n type: \"input\",\n name: \"displayName\",\n message: \"Display name for this component:\",\n default: toPascalCase(componentName)\n .replace(/([A-Z])/g, \" $1\")\n .trim(),\n },\n {\n type: \"input\",\n name: \"description\",\n message: \"Component description:\",\n default: `${toPascalCase(componentName)} component`,\n },\n ]);\n\n const componentType = options.type || answers.componentType;\n const displayName = answers.displayName;\n const description = answers.description;\n\n // Prepare data for templates\n const data = {\n componentName,\n componentNamePascal: toPascalCase(componentName),\n componentType,\n displayName,\n description,\n };\n\n logger.startSpinner(\"Creating component files...\");\n\n try {\n const componentPath = path.join(\n getFeaturesDir(),\n \"components\",\n componentName\n );\n\n // Create component schema file\n const schemaContent = generateComponentSchema(data);\n await writeFile(\n path.join(componentPath, `${componentName}.schema.ts`),\n schemaContent\n );\n\n // Create component file\n const componentContent = generateComponent(data);\n await writeFile(\n path.join(componentPath, `${componentName}.tsx`),\n componentContent\n );\n\n // Create index file\n const indexContent = generateComponentIndex(data);\n await writeFile(path.join(componentPath, \"index.ts\"), indexContent);\n\n logger.stopSpinner(true, \"Component files created successfully!\");\n\n // Print next steps\n logger.newLine();\n logger.section(\"Next steps:\");\n logger.log(\n ` 1. Edit schema: ${path.relative(process.cwd(), path.join(componentPath, `${componentName}.schema.ts`))}`\n );\n logger.log(\n ` 2. Edit component: ${path.relative(process.cwd(), path.join(componentPath, `${componentName}.tsx`))}`\n );\n logger.log(\n ` 3. Register in component registry: src/lib/registry/component-registry.ts`\n );\n logger.newLine();\n logger.success(\"Component created successfully!\");\n } catch (error) {\n logger.stopSpinner(false, \"Failed to create component\");\n logger.error(\n error instanceof Error ? error.message : \"Unknown error occurred\"\n );\n process.exit(1);\n }\n}\n\nfunction generateComponentSchema(data: {\n componentName: string;\n displayName: string;\n description: string;\n componentType: string;\n}): string {\n return `import type { ComponentDefinition } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} Component Schema\n * ${data.description}\n */\nexport const ${data.componentName}Definition: ComponentDefinition = {\n type: \"${data.componentName}\",\n name: \"${data.displayName}\",\n description: \"${data.description}\",\n category: \"${data.componentType}\",\n icon: \"square\",\n\n // Content fields (what the component displays)\n contentFields: [\n {\n id: \"text\",\n type: \"text\",\n label: \"Text\",\n defaultValue: \"${data.displayName}\",\n },\n ],\n\n // Style fields (how the component looks)\n styleFields: [\n {\n id: \"variant\",\n type: \"select\",\n label: \"Variant\",\n options: [\n { label: \"Default\", value: \"default\" },\n { label: \"Primary\", value: \"primary\" },\n { label: \"Secondary\", value: \"secondary\" },\n ],\n defaultValue: \"default\",\n },\n {\n id: \"size\",\n type: \"select\",\n label: \"Size\",\n options: [\n { label: \"Small\", value: \"sm\" },\n { label: \"Medium\", value: \"md\" },\n { label: \"Large\", value: \"lg\" },\n ],\n defaultValue: \"md\",\n },\n ],\n\n // Default content values\n defaultContent: {\n text: \"${data.displayName}\",\n },\n\n // Default style values\n defaultStyle: {\n variant: \"default\",\n size: \"md\",\n },\n};\n`;\n}\n\nfunction generateComponent(data: {\n componentName: string;\n componentNamePascal: string;\n displayName: string;\n}): string {\n return `import React from \"react\";\nimport type { ComponentProps } from \"@onexapis/core\";\n\n/**\n * ${data.displayName} Component\n */\nexport function ${data.componentNamePascal}({\n component,\n isEditing = false,\n}: ComponentProps) {\n const { content = {}, style = {} } = component;\n const text = content.text as string || \"${data.displayName}\";\n const variant = style.variant as string || \"default\";\n const size = style.size as string || \"md\";\n\n // Variant classes\n const variantClasses = {\n default: \"bg-gray-100 text-gray-900\",\n primary: \"bg-blue-600 text-white\",\n secondary: \"bg-gray-600 text-white\",\n };\n\n // Size classes\n const sizeClasses = {\n sm: \"text-sm px-3 py-1\",\n md: \"text-base px-4 py-2\",\n lg: \"text-lg px-6 py-3\",\n };\n\n return (\n <div\n className={\\`${data.componentName} \\${variantClasses[variant as keyof typeof variantClasses]} \\${sizeClasses[size as keyof typeof sizeClasses]} inline-block rounded\\`}\n data-component-id={component.id}\n data-component-type={component.type}\n >\n {text}\n </div>\n );\n}\n`;\n}\n\nfunction generateComponentIndex(data: {\n componentName: string;\n componentNamePascal: string;\n}): string {\n return `/**\n * ${data.componentNamePascal} Component\n */\n\nexport { ${data.componentName}Definition } from \"./${data.componentName}.schema\";\nexport { ${data.componentNamePascal} } from \"./${data.componentName}\";\n`;\n}\n","import fs from \"fs-extra\";\nimport path from \"path\";\nimport chalk from \"chalk\";\nimport { logger } from \"../utils/logger\";\nimport {\n ensureOneXProject,\n getThemesDir,\n getFeaturesDir,\n listThemes,\n} from \"../utils/file-helpers\";\n\ninterface ListOptions {\n sections?: boolean;\n blocks?: boolean;\n components?: boolean;\n theme?: string;\n}\n\nexport async function listCommand(options: ListOptions): Promise<void> {\n logger.header(\"OneX Project Inventory\");\n\n // Ensure we're in a OneX project\n ensureOneXProject();\n\n const showAll = !options.sections && !options.blocks && !options.components;\n\n if (showAll || options.sections) {\n await listSections(options.theme);\n }\n\n if (showAll || options.blocks) {\n await listBlocks(options.theme);\n }\n\n if (showAll || options.components) {\n await listComponents();\n }\n\n if (showAll) {\n await listThemesInfo();\n }\n}\n\nasync function listSections(themeFilter?: string): Promise<void> {\n logger.section(\"📄 Sections\");\n\n const themes = themeFilter ? [themeFilter] : listThemes();\n\n if (themes.length === 0) {\n logger.warning(\"No themes found\");\n return;\n }\n\n for (const theme of themes) {\n const sectionsDir = path.join(getThemesDir(), theme, \"sections\");\n\n if (!fs.existsSync(sectionsDir)) {\n continue;\n }\n\n const sections = fs.readdirSync(sectionsDir).filter((name) => {\n const sectionPath = path.join(sectionsDir, name);\n return (\n fs.statSync(sectionPath).isDirectory() &&\n fs.existsSync(path.join(sectionPath, \"index.ts\"))\n );\n });\n\n if (sections.length > 0) {\n logger.log(chalk.cyan(`\\n ${theme}:`));\n sections.forEach((section) => {\n logger.log(` • ${section}`);\n });\n }\n }\n\n logger.newLine();\n}\n\nasync function listBlocks(themeFilter?: string): Promise<void> {\n logger.section(\"🧱 Blocks\");\n\n // List shared blocks\n const sharedBlocksDir = path.join(getFeaturesDir(), \"blocks\");\n if (fs.existsSync(sharedBlocksDir)) {\n const sharedBlocks = fs.readdirSync(sharedBlocksDir).filter((name) => {\n const blockPath = path.join(sharedBlocksDir, name);\n return (\n fs.statSync(blockPath).isDirectory() &&\n fs.existsSync(path.join(blockPath, \"index.ts\"))\n );\n });\n\n if (sharedBlocks.length > 0) {\n logger.log(chalk.cyan(\"\\n Shared:\"));\n sharedBlocks.forEach((block) => {\n logger.log(` • ${block}`);\n });\n }\n }\n\n // List theme-specific blocks\n const themes = themeFilter ? [themeFilter] : listThemes();\n\n for (const theme of themes) {\n const blocksDir = path.join(getThemesDir(), theme, \"blocks\");\n\n if (!fs.existsSync(blocksDir)) {\n continue;\n }\n\n const blocks = fs.readdirSync(blocksDir).filter((name) => {\n const blockPath = path.join(blocksDir, name);\n return (\n fs.statSync(blockPath).isDirectory() &&\n fs.existsSync(path.join(blockPath, \"index.ts\"))\n );\n });\n\n if (blocks.length > 0) {\n logger.log(chalk.cyan(`\\n ${theme}:`));\n blocks.forEach((block) => {\n logger.log(` • ${block}`);\n });\n }\n }\n\n logger.newLine();\n}\n\nasync function listComponents(): Promise<void> {\n logger.section(\"⚙️ Components\");\n\n const componentsDir = path.join(getFeaturesDir(), \"components\");\n\n if (!fs.existsSync(componentsDir)) {\n logger.warning(\"No components directory found\");\n return;\n }\n\n const components = fs.readdirSync(componentsDir).filter((name) => {\n const componentPath = path.join(componentsDir, name);\n return (\n fs.statSync(componentPath).isDirectory() &&\n fs.existsSync(path.join(componentPath, \"index.ts\"))\n );\n });\n\n if (components.length === 0) {\n logger.warning(\"No components found\");\n return;\n }\n\n logger.log(\"\");\n components.forEach((component) => {\n logger.log(` • ${component}`);\n });\n\n logger.newLine();\n}\n\nasync function listThemesInfo(): Promise<void> {\n logger.section(\"🎨 Themes\");\n\n const themes = listThemes();\n\n if (themes.length === 0) {\n logger.warning(\"No themes found\");\n return;\n }\n\n logger.log(\"\");\n\n for (const theme of themes) {\n const themeDir = path.join(getThemesDir(), theme);\n const candidates = [\"theme.config.ts\", \"bundle-entry.ts\", \"manifest.ts\"];\n let manifestContent = \"\";\n for (const candidate of candidates) {\n const candidatePath = path.join(themeDir, candidate);\n if (fs.existsSync(candidatePath)) {\n manifestContent = fs.readFileSync(candidatePath, \"utf-8\");\n break;\n }\n }\n\n // Try to extract theme info from manifest\n const nameMatch = manifestContent.match(/name:\\s*[\"'](.+)[\"']/);\n const versionMatch = manifestContent.match(/version:\\s*[\"'](.+)[\"']/);\n const descMatch = manifestContent.match(/description:\\s*[\"'](.+)[\"']/);\n\n const displayName = nameMatch ? nameMatch[1] : theme;\n const version = versionMatch ? versionMatch[1] : \"unknown\";\n const description = descMatch ? descMatch[1] : \"\";\n\n logger.log(chalk.cyan(` ${displayName}`) + chalk.gray(` (v${version})`));\n if (description) {\n logger.log(chalk.gray(` ${description}`));\n }\n }\n\n logger.newLine();\n}\n","import path from \"path\";\nimport fs from \"fs-extra\";\nimport { logger } from \"../utils/logger\";\nimport {\n ensureOneXProject,\n getThemesDir,\n themeExists,\n} from \"../utils/file-helpers\";\n\ninterface ValidateOptions {\n theme?: string;\n fix?: boolean;\n}\n\ninterface ValidationIssue {\n type: \"error\" | \"warning\";\n file: string;\n message: string;\n}\n\nexport async function validateCommand(options: ValidateOptions): Promise<void> {\n logger.header(\"Validate Theme\");\n\n // Ensure we're in a OneX project\n ensureOneXProject();\n\n const issues: ValidationIssue[] = [];\n let themeToValidate: string | undefined;\n\n // If theme specified, validate that theme\n if (options.theme) {\n if (!themeExists(options.theme)) {\n logger.error(`Theme \"${options.theme}\" not found.`);\n process.exit(1);\n }\n themeToValidate = options.theme;\n } else {\n // Check if we're in a theme directory\n const isThemeDir = [\n \"theme.config.ts\",\n \"bundle-entry.ts\",\n \"manifest.ts\",\n ].some((f) => fs.existsSync(path.join(process.cwd(), f)));\n if (isThemeDir) {\n // We're in a theme directory\n themeToValidate = path.basename(process.cwd());\n logger.info(`Validating current theme: ${themeToValidate}`);\n } else {\n logger.error(\n \"Not in a theme directory and no --theme specified. Run from theme root or use --theme flag.\"\n );\n process.exit(1);\n }\n }\n\n const themePath = path.join(getThemesDir(), themeToValidate);\n\n logger.startSpinner(\"Running validation checks...\");\n\n // Check 1: Theme entry file exists (manifest.ts, theme.config.ts, or bundle-entry.ts)\n const entryFiles = [\"manifest.ts\", \"theme.config.ts\", \"bundle-entry.ts\"];\n const foundEntry = entryFiles.find((f) =>\n fs.existsSync(path.join(themePath, f))\n );\n if (!foundEntry) {\n issues.push({\n type: \"error\",\n file: \"manifest.ts / theme.config.ts / bundle-entry.ts\",\n message:\n \"No theme entry file found (need at least one of: manifest.ts, theme.config.ts, bundle-entry.ts)\",\n });\n } else if (foundEntry === \"manifest.ts\") {\n // Check manifest structure - just verify it has some exports\n const manifestContent = fs.readFileSync(\n path.join(themePath, foundEntry),\n \"utf-8\"\n );\n if (\n !manifestContent.includes(\"export const\") &&\n !manifestContent.includes(\"export default\") &&\n !manifestContent.includes(\"export interface\")\n ) {\n issues.push({\n type: \"error\",\n file: \"manifest.ts\",\n message: \"Must have at least one export\",\n });\n }\n }\n\n // Check 2: Theme config exists\n const configPath = path.join(themePath, \"theme.config.ts\");\n if (!fs.existsSync(configPath)) {\n issues.push({\n type: \"warning\",\n file: \"theme.config.ts\",\n message: \"Theme config file not found (recommended)\",\n });\n }\n\n // Check 3: Index file exists\n const indexPath = path.join(themePath, \"index.ts\");\n if (!fs.existsSync(indexPath)) {\n issues.push({\n type: \"warning\",\n file: \"index.ts\",\n message: \"Index file not found (recommended)\",\n });\n }\n\n // Check 4: Sections directory + file structure\n const sectionsDir = path.join(themePath, \"sections\");\n if (!fs.existsSync(sectionsDir)) {\n issues.push({\n type: \"warning\",\n file: \"sections/\",\n message: \"Sections directory not found\",\n });\n } else {\n // Validate each section\n const sections = fs\n .readdirSync(sectionsDir)\n .filter((name) =>\n fs.statSync(path.join(sectionsDir, name)).isDirectory()\n );\n\n for (const sectionName of sections) {\n const sectionPath = path.join(sectionsDir, sectionName);\n\n // Check for required files\n const schemaFile = path.join(sectionPath, `${sectionName}.schema.ts`);\n const defaultTemplate = path.join(\n sectionPath,\n `${sectionName}-default.tsx`\n );\n const indexFile = path.join(sectionPath, \"index.ts\");\n\n if (!fs.existsSync(schemaFile)) {\n issues.push({\n type: \"error\",\n file: `sections/${sectionName}/${sectionName}.schema.ts`,\n message: \"Section schema file missing\",\n });\n }\n\n if (!fs.existsSync(indexFile)) {\n issues.push({\n type: \"error\",\n file: `sections/${sectionName}/index.ts`,\n message: \"Section index file missing\",\n });\n }\n\n if (!fs.existsSync(defaultTemplate)) {\n issues.push({\n type: \"warning\",\n file: `sections/${sectionName}/${sectionName}-default.tsx`,\n message: \"Default template not found (recommended)\",\n });\n }\n }\n }\n\n // Check 5: Blocks directory\n const blocksDir = path.join(themePath, \"blocks\");\n if (fs.existsSync(blocksDir)) {\n const blocks = fs\n .readdirSync(blocksDir)\n .filter((name) => fs.statSync(path.join(blocksDir, name)).isDirectory());\n\n for (const blockName of blocks) {\n const blockPath = path.join(blocksDir, blockName);\n\n // Check for required files\n const schemaFile = path.join(blockPath, `${blockName}.schema.ts`);\n const componentFile = path.join(blockPath, `${blockName}.tsx`);\n const indexFile = path.join(blockPath, \"index.ts\");\n\n if (!fs.existsSync(schemaFile)) {\n issues.push({\n type: \"error\",\n file: `blocks/${blockName}/${blockName}.schema.ts`,\n message: \"Block schema file missing\",\n });\n }\n\n if (!fs.existsSync(componentFile)) {\n issues.push({\n type: \"error\",\n file: `blocks/${blockName}/${blockName}.tsx`,\n message: \"Block component file missing\",\n });\n }\n\n if (!fs.existsSync(indexFile)) {\n issues.push({\n type: \"error\",\n file: `blocks/${blockName}/index.ts`,\n message: \"Block index file missing\",\n });\n }\n }\n }\n\n // Check 6: Section code quality\n if (fs.existsSync(sectionsDir)) {\n const sections = fs\n .readdirSync(sectionsDir)\n .filter((name) =>\n fs.statSync(path.join(sectionsDir, name)).isDirectory()\n );\n\n for (const sectionName of sections) {\n const sectionPath = path.join(sectionsDir, sectionName);\n const tsxFiles = fs\n .readdirSync(sectionPath)\n .filter((f) => f.endsWith(\".tsx\") && !f.endsWith(\".schema.ts\"));\n\n for (const tsxFile of tsxFiles) {\n const filePath = path.join(sectionPath, tsxFile);\n const content = fs.readFileSync(filePath, \"utf-8\");\n const relPath = `sections/${sectionName}/${tsxFile}`;\n\n // Must have \"use client\"\n if (\n !content.includes('\"use client\"') &&\n !content.includes(\"'use client'\")\n ) {\n issues.push({\n type: \"error\",\n file: relPath,\n message: 'Missing \"use client\" directive at top of file',\n });\n }\n\n // Must use ComponentRenderer or BlockRenderer\n if (\n !content.includes(\"ComponentRenderer\") &&\n !content.includes(\"BlockRenderer\")\n ) {\n issues.push({\n type: \"warning\",\n file: relPath,\n message:\n \"No ComponentRenderer or BlockRenderer found — sections should use core renderers for content\",\n });\n }\n\n // Must have data-section-id\n if (!content.includes(\"data-section-id\")) {\n issues.push({\n type: \"error\",\n file: relPath,\n message:\n \"Missing data-section-id attribute — editor cannot select this section\",\n });\n }\n\n // Security: check for blocked patterns\n if (/\\beval\\s*\\(/.test(content)) {\n issues.push({\n type: \"error\",\n file: relPath,\n message: \"eval() detected — arbitrary code execution risk\",\n });\n }\n if (content.includes(\"document.cookie\")) {\n issues.push({\n type: \"error\",\n file: relPath,\n message: \"document.cookie access — session hijacking risk\",\n });\n }\n if (/\\brequire\\s*\\(/.test(content)) {\n issues.push({\n type: \"warning\",\n file: relPath,\n message: \"require() detected — themes should use ES module imports\",\n });\n }\n }\n }\n }\n\n // Check 7: Sections registered in registry (ERROR, not warning)\n const registryPath = path.join(themePath, \"sections-registry.ts\");\n const bundleEntryPath = path.join(themePath, \"bundle-entry.ts\");\n const registryContent = fs.existsSync(registryPath)\n ? fs.readFileSync(registryPath, \"utf-8\")\n : fs.existsSync(bundleEntryPath)\n ? fs.readFileSync(bundleEntryPath, \"utf-8\")\n : \"\";\n\n if (fs.existsSync(sectionsDir) && registryContent) {\n const sections = fs\n .readdirSync(sectionsDir)\n .filter((name) =>\n fs.statSync(path.join(sectionsDir, name)).isDirectory()\n );\n\n for (const sectionName of sections) {\n if (\n !registryContent.includes(`sections/${sectionName}`) &&\n !registryContent.includes(`\"${sectionName}\"`)\n ) {\n issues.push({\n type: \"error\",\n file: `sections/${sectionName}/`,\n message:\n \"Section not exported in sections-registry.ts or bundle-entry.ts — will not be included in build\",\n });\n }\n }\n }\n\n // Check 8: Schema type must match folder name\n if (fs.existsSync(sectionsDir)) {\n const schemaTypes = await loadSchemaTypes(themePath, sectionsDir);\n for (const { folderName, schemaType } of schemaTypes) {\n if (schemaType && schemaType !== folderName) {\n issues.push({\n type: \"error\",\n file: `sections/${folderName}/${folderName}.schema.ts`,\n message:\n `Schema type \"${schemaType}\" doesn't match folder name \"${folderName}\". ` +\n `Rename folder to \"${schemaType}/\" or change schema type to \"${folderName}\".`,\n });\n }\n }\n\n // Check 9: Page section types must have matching sections\n const pagesDir = path.join(themePath, \"pages\");\n if (fs.existsSync(pagesDir)) {\n const allSchemaTypeSet = new Set(\n schemaTypes.map((s) => s.schemaType || s.folderName)\n );\n const pageIssues = await validatePageSectionTypes(\n pagesDir,\n allSchemaTypeSet\n );\n issues.push(...pageIssues);\n }\n }\n\n logger.stopSpinner(true, \"Validation complete\");\n\n // Report results\n const errors = issues.filter((i) => i.type === \"error\");\n const warnings = issues.filter((i) => i.type === \"warning\");\n\n logger.newLine();\n\n if (errors.length === 0 && warnings.length === 0) {\n logger.success(\"✓ Theme is valid!\");\n logger.newLine();\n logger.info(`Theme: ${themeToValidate}`);\n logger.log(\" No issues found\");\n } else {\n if (errors.length > 0) {\n logger.error(`✗ Found ${errors.length} error(s):`);\n logger.newLine();\n errors.forEach((issue) => {\n logger.log(` ${issue.file}`);\n logger.log(` ${issue.message}`);\n });\n logger.newLine();\n }\n\n if (warnings.length > 0) {\n logger.warning(`⚠ Found ${warnings.length} warning(s):`);\n logger.newLine();\n warnings.forEach((issue) => {\n logger.log(` ${issue.file}`);\n logger.log(` ${issue.message}`);\n });\n logger.newLine();\n }\n\n if (errors.length > 0) {\n logger.error(\"Validation failed. Please fix the errors above.\");\n process.exit(1);\n } else {\n logger.warning(\n \"Validation passed with warnings. Consider addressing them.\"\n );\n }\n }\n}\n\n/**\n * Load schema types from all section schema files using regex.\n * Returns [{folderName, schemaType}] pairs.\n */\nasync function loadSchemaTypes(\n themePath: string,\n sectionsDir: string\n): Promise<Array<{ folderName: string; schemaType: string | null }>> {\n const results: Array<{ folderName: string; schemaType: string | null }> = [];\n const sections = fs\n .readdirSync(sectionsDir)\n .filter((name) => fs.statSync(path.join(sectionsDir, name)).isDirectory());\n\n for (const sectionName of sections) {\n const schemaFile = path.join(\n sectionsDir,\n sectionName,\n `${sectionName}.schema.ts`\n );\n if (!fs.existsSync(schemaFile)) {\n results.push({ folderName: sectionName, schemaType: null });\n continue;\n }\n\n const content = fs.readFileSync(schemaFile, \"utf-8\");\n // Match the schema type — look for `type:` that follows a SectionSchema assignment\n // or `export const`. This avoids matching field definition `type: \"text\"` etc.\n // Strategy: find all type: \"...\" matches and pick the one that is NOT a known field type.\n let schemaType: string | null = null;\n // Primary strategy: find type: after SectionSchema assignment.\n // Use [\\s\\S]*? to match across nested braces in the schema object.\n const schemaExportMatch = content.match(\n /:\\s*SectionSchema\\s*=\\s*\\{[\\s\\S]*?\\btype:\\s*[\"']([^\"']+)[\"']/\n );\n if (schemaExportMatch) {\n schemaType = schemaExportMatch[1];\n } else {\n // Fallback: find first type: value that is NOT a known field type\n const allTypeMatches = [\n ...content.matchAll(/\\btype:\\s*[\"']([^\"']+)[\"']/g),\n ];\n for (const m of allTypeMatches) {\n if (!FIELD_TYPES.has(m[1])) {\n schemaType = m[1];\n break;\n }\n }\n }\n results.push({\n folderName: sectionName,\n schemaType,\n });\n }\n\n return results;\n}\n\n/**\n * Check that all section types used in page configs exist in the theme's sections.\n * Only scans `type:` values inside the `sections: [...]` array block,\n * so page-level `type: \"home\"` etc. are naturally excluded.\n */\nasync function validatePageSectionTypes(\n pagesDir: string,\n validTypes: Set<string>\n): Promise<ValidationIssue[]> {\n const issues: ValidationIssue[] = [];\n const files = fs.readdirSync(pagesDir).filter((f) => f.match(/\\.(ts|js)$/));\n\n for (const file of files) {\n const content = fs.readFileSync(path.join(pagesDir, file), \"utf-8\");\n const pageName = file.replace(/\\.(ts|js)$/, \"\");\n\n // Extract only the sections array block to avoid matching page-level type\n const sectionsMatch = content.match(/\\bsections:\\s*\\[/);\n if (!sectionsMatch || sectionsMatch.index === undefined) continue;\n\n // Find the matching closing bracket for the sections array\n const startIdx = sectionsMatch.index + sectionsMatch[0].length;\n let depth = 1;\n let endIdx = startIdx;\n for (let i = startIdx; i < content.length && depth > 0; i++) {\n if (content[i] === \"[\") depth++;\n else if (content[i] === \"]\") depth--;\n endIdx = i;\n }\n const sectionsBlock = content.slice(startIdx, endIdx);\n\n // Match only top-level section type references (not component/block types nested inside).\n // We extract type values that appear at the section level (after id/template/order)\n // by checking they're NOT inside a components[] or blocks[] sub-array.\n // Simple approach: only match `type:` that follows `id:` at the same nesting depth.\n const sectionTypeMatches = sectionsBlock.matchAll(\n /\\bid:\\s*[\"'][^\"']*[\"'],\\s*\\n?\\s*type:\\s*[\"']([^\"']+)[\"']/g\n );\n for (const match of sectionTypeMatches) {\n const sectionType = match[1];\n // Skip component types (heading, paragraph, button, image, link, etc.)\n if (COMPONENT_TYPES.has(sectionType)) continue;\n // Skip block types defined in schemas (they share the sections block)\n if (BLOCK_TYPES.has(sectionType)) continue;\n if (!validTypes.has(sectionType)) {\n issues.push({\n type: \"error\",\n file: `pages/${file}`,\n message: `Page \"${pageName}\" uses section type \"${sectionType}\" which doesn't exist in sections/`,\n });\n }\n }\n }\n\n return issues;\n}\n\n/** Field types that are not section types */\nconst FIELD_TYPES = new Set([\n \"text\",\n \"textarea\",\n \"richtext\",\n \"number\",\n \"range\",\n \"toggle\",\n \"switch\",\n \"select\",\n \"radio\",\n \"checkbox\",\n \"color\",\n \"image\",\n \"video\",\n \"url\",\n \"link\",\n \"icon\",\n \"date\",\n \"datetime\",\n \"collection\",\n \"product\",\n \"blog\",\n \"page\",\n \"html\",\n \"code\",\n \"json\",\n \"array\",\n \"object\",\n \"group\",\n \"section\",\n \"boolean\",\n \"color_token\",\n \"color_background\",\n \"image_picker\",\n \"video_url\",\n \"font\",\n \"font_picker\",\n \"text_alignment\",\n \"inline_richtext\",\n \"repeater\",\n]);\n\n/** Component types used inside sections — NOT section types */\nconst COMPONENT_TYPES = new Set([\n \"heading\",\n \"paragraph\",\n \"button\",\n \"image\",\n \"link\",\n \"icon\",\n \"badge\",\n \"divider\",\n \"spacer\",\n \"container\",\n \"grid\",\n \"columns\",\n \"card\",\n \"quote\",\n \"input\",\n \"textarea\",\n \"checkbox\",\n \"select\",\n \"video\",\n \"gallery\",\n \"alert\",\n \"progress\",\n \"rating\",\n \"timer\",\n \"list\",\n \"table\",\n \"accordion\",\n \"tabs\",\n \"code\",\n \"map\",\n \"product-card\",\n \"blog-card\",\n \"social-links\",\n \"hotline-contacts\",\n \"company-info\",\n \"torn-separator\",\n]);\n\n/** Block types used inside sections — NOT section types */\nconst BLOCK_TYPES = new Set([\n \"brand-feature\",\n \"collection-item\",\n \"crafting-step\",\n \"testimonial-item\",\n \"stat-item\",\n \"footer-link\",\n \"navigation-links-block\",\n \"policy-section\",\n \"core-value-card\",\n \"faq-item\",\n \"feature-item\",\n \"gallery-item\",\n \"logo-item\",\n \"pricing-tier\",\n \"service-item\",\n \"stat-card\",\n \"team-member\",\n \"hero-content\",\n]);\n","import { spawn } from \"child_process\";\nimport path from \"path\";\nimport fs from \"fs-extra\";\nimport { logger } from \"../utils/logger\";\nimport { getThemesDir } from \"../utils/file-helpers\";\n\ninterface BuildOptions {\n theme?: string;\n production?: boolean;\n watch?: boolean;\n}\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n logger.header(\"Build Theme\");\n\n let themePath: string;\n let themeName: string;\n\n // Determine theme to build\n if (options.theme) {\n themeName = options.theme;\n // Try to find theme in workspace first, otherwise use current directory\n try {\n const workspaceThemePath = path.join(getThemesDir(), themeName);\n if (fs.existsSync(workspaceThemePath)) {\n themePath = workspaceThemePath;\n } else {\n themePath = path.join(process.cwd(), themeName);\n }\n } catch {\n // Not in a workspace, use current directory\n themePath = path.join(process.cwd(), themeName);\n }\n\n if (!fs.existsSync(themePath)) {\n logger.error(`Theme \"${themeName}\" not found.`);\n process.exit(1);\n }\n } else {\n // Check if we're in a theme directory\n const isThemeDir = [\n \"theme.config.ts\",\n \"bundle-entry.ts\",\n \"manifest.ts\",\n ].some((f) => fs.existsSync(path.join(process.cwd(), f)));\n if (isThemeDir) {\n themePath = process.cwd();\n themeName = path.basename(themePath);\n logger.info(`Building current theme: ${themeName}`);\n } else {\n logger.error(\n \"Not in a theme directory and no --theme specified. Run from theme root or use --theme flag.\"\n );\n process.exit(1);\n }\n }\n\n const packageJsonPath = path.join(themePath, \"package.json\");\n const hasPkgJson = fs.existsSync(packageJsonPath);\n\n if (!hasPkgJson) {\n logger.warning(\n \"No package.json found in theme. Skipping build (themes in monorepo are built via turbo).\"\n );\n logger.newLine();\n logger.info(\"To build all packages, run:\");\n logger.log(\" pnpm turbo build\");\n logger.newLine();\n logger.info(\"To build specific theme components:\");\n logger.log(\" pnpm turbo build --filter=./src/themes/*\");\n return;\n }\n\n // Run build steps\n logger.newLine();\n logger.section(\"Build Steps\");\n\n // Step 1: Type Check\n logger.startSpinner(\"Running type check...\");\n const typeCheckSuccess = await runCommand(\"pnpm\", [\"type-check\"], themePath);\n\n if (!typeCheckSuccess) {\n logger.stopSpinner(false, \"Type check failed\");\n logger.error(\"Fix type errors before building.\");\n process.exit(1);\n }\n logger.stopSpinner(true, \"Type check passed\");\n\n // Step 2: Lint\n logger.startSpinner(\"Running linter...\");\n const lintSuccess = await runCommand(\"pnpm\", [\"lint\"], themePath);\n\n if (!lintSuccess) {\n logger.stopSpinner(false, \"Lint failed\");\n logger.error(\"Fix lint errors before building.\");\n process.exit(1);\n }\n logger.stopSpinner(true, \"Lint passed\");\n\n // Step 3: Build\n // Detect if theme's build script would cause recursion (e.g., \"onexthm build\")\n const pkgJson = fs.readJsonSync(packageJsonPath);\n const buildScript = pkgJson.scripts?.build || \"\";\n const isRecursive =\n buildScript.includes(\"onexthm build\") ||\n buildScript.includes(\"onex build\") ||\n buildScript.includes(\"onex-cli build\");\n\n logger.startSpinner(\n options.watch ? \"Building (watch mode)...\" : \"Building...\"\n );\n\n let buildSuccess: boolean;\n\n if (isRecursive) {\n // Standalone theme: use embedded esbuild compilation\n const { compileStandaloneTheme } = await import(\"../utils/compile-theme\");\n buildSuccess = await compileStandaloneTheme(themePath, themeName);\n } else {\n // Monorepo: use existing pnpm build\n const buildArgs = options.watch ? [\"build\", \"--watch\"] : [\"build\"];\n buildSuccess = await runCommand(\"pnpm\", buildArgs, themePath);\n }\n\n if (!buildSuccess && !options.watch) {\n logger.stopSpinner(false, \"Build failed\");\n process.exit(1);\n }\n\n if (!options.watch) {\n logger.stopSpinner(true, \"Build complete\");\n\n // Show output location\n logger.newLine();\n logger.success(\"✓ Theme built successfully!\");\n logger.newLine();\n logger.info(`Theme: ${themeName}`);\n\n const distPath = path.join(themePath, \"dist\");\n if (fs.existsSync(distPath)) {\n logger.log(`Output: ${path.relative(process.cwd(), distPath)}`);\n\n // Show build stats\n const files = fs.readdirSync(distPath);\n logger.log(`Files: ${files.length}`);\n }\n }\n}\n\n/**\n * Run a command and return success status\n */\nfunction runCommand(\n command: string,\n args: string[],\n cwd: string\n): Promise<boolean> {\n return new Promise((resolve) => {\n const proc = spawn(command, args, {\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n shell: true,\n });\n\n let stdout = \"\";\n let stderr = \"\";\n\n proc.stdout.on(\"data\", (data) => {\n stdout += data.toString();\n });\n proc.stderr.on(\"data\", (data) => {\n stderr += data.toString();\n });\n\n proc.on(\"close\", (code) => {\n if (code !== 0) {\n // Show actual errors to the developer\n const output = (stderr + stdout).trim();\n if (output) {\n logger.newLine();\n for (const line of output.split(\"\\n\")) {\n const t = line.trim();\n if (!t) continue;\n if (\n t.includes(\"error\") ||\n t.includes(\"Error\") ||\n t.includes(\"TS\")\n ) {\n logger.log(` ❌ ${t}`);\n } else if (t.includes(\"warning\") || t.includes(\"Warning\")) {\n logger.log(` ⚠️ ${t}`);\n } else {\n logger.log(` ${t}`);\n }\n }\n }\n }\n resolve(code === 0);\n });\n\n proc.on(\"error\", () => {\n resolve(false);\n });\n });\n}\n","import { spawn } from \"child_process\";\nimport path from \"path\";\nimport fs from \"fs-extra\";\nimport archiver from \"archiver\";\nimport { logger } from \"../utils/logger\";\nimport { ensureOneXProject, getThemesDir } from \"../utils/file-helpers\";\n\ninterface PackageOptions {\n theme?: string;\n output?: string;\n name?: string;\n minify?: boolean;\n skipBuild?: boolean;\n}\n\nexport async function packageCommand(options: PackageOptions): Promise<void> {\n logger.header(\"Package Theme\");\n\n // Ensure we're in a OneX project\n ensureOneXProject();\n\n let themePath: string;\n let themeName: string;\n\n // Determine theme to package\n if (options.theme) {\n themeName = options.theme;\n themePath = path.join(getThemesDir(), themeName);\n\n if (!fs.existsSync(themePath)) {\n logger.error(`Theme \"${themeName}\" not found.`);\n process.exit(1);\n }\n } else {\n // Check if we're in a theme directory\n const isThemeDir = [\n \"theme.config.ts\",\n \"bundle-entry.ts\",\n \"manifest.ts\",\n ].some((f) => fs.existsSync(path.join(process.cwd(), f)));\n if (isThemeDir) {\n themePath = process.cwd();\n themeName = path.basename(themePath);\n logger.info(`Packaging current theme: ${themeName}`);\n } else {\n logger.error(\n \"Not in a theme directory and no --theme specified. Run from theme root or use --theme flag.\"\n );\n process.exit(1);\n }\n }\n\n // Read version from package.json\n const packageJsonPath = path.join(themePath, \"package.json\");\n let version = \"1.0.0\";\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = await fs.readJson(packageJsonPath);\n version = packageJson.version || \"1.0.0\";\n }\n\n logger.newLine();\n logger.info(`Theme: ${themeName}`);\n logger.info(`Version: ${version}`);\n logger.newLine();\n\n // Step 1: Build/compile theme (unless skipped)\n const compiledThemePath = path.join(\n process.cwd(),\n \"themes\",\n themeName,\n \"dist\"\n );\n\n if (!options.skipBuild) {\n logger.section(\"Step 1: Compile Theme\");\n logger.startSpinner(\"Compiling theme with esbuild...\");\n\n const compileArgs = [\"tsx\", \"scripts/compile-theme.ts\", themeName];\n if (options.minify) {\n compileArgs.push(\"--minify\");\n }\n\n const compileSuccess = await runCommand(\n compileArgs[0],\n compileArgs.slice(1)\n );\n\n if (!compileSuccess) {\n logger.stopSpinner(false, \"Compilation failed\");\n logger.error(\"Fix compilation errors before packaging.\");\n process.exit(1);\n }\n logger.stopSpinner(true, \"Theme compiled\");\n } else {\n logger.info(\"Skipping build (--skip-build flag)\");\n }\n\n // Check if compiled theme exists\n if (!fs.existsSync(compiledThemePath)) {\n logger.error(`Compiled theme not found at: ${compiledThemePath}`);\n logger.info(\"Run without --skip-build to compile first.\");\n process.exit(1);\n }\n\n // Step 2: Package compiled theme\n logger.newLine();\n logger.section(\"Step 2: Create Package\");\n\n // Determine output file name and path\n const packageName = options.name || `${themeName}-${version}`;\n const outputDir = options.output || path.join(process.cwd(), \"dist\");\n const outputPath = path.join(outputDir, `${packageName}.zip`);\n\n // Ensure output directory exists\n await fs.ensureDir(outputDir);\n\n // Create zip archive\n logger.startSpinner(\"Creating zip archive...\");\n\n try {\n await createZipArchive(compiledThemePath, outputPath);\n\n logger.stopSpinner(true, \"Package created\");\n\n // Get file size\n const stats = await fs.stat(outputPath);\n const sizeMB = (stats.size / 1024 / 1024).toFixed(2);\n\n // Show package info\n logger.newLine();\n logger.success(\"✓ Theme packaged successfully!\");\n logger.newLine();\n logger.info(`Package: ${packageName}.zip`);\n logger.log(`Size: ${sizeMB} MB`);\n logger.log(`Location: ${path.relative(process.cwd(), outputPath)}`);\n\n logger.newLine();\n logger.section(\"Next steps:\");\n logger.log(\n ` onexthm deploy --package ${path.relative(process.cwd(), outputPath)}`\n );\n } catch (error) {\n logger.stopSpinner(false, \"Failed to create package\");\n logger.error(\n error instanceof Error ? error.message : \"Unknown error occurred\"\n );\n process.exit(1);\n }\n}\n\n/**\n * Run a command and return success status\n */\nfunction runCommand(command: string, args: string[]): Promise<boolean> {\n return new Promise((resolve) => {\n const proc = spawn(command, args, {\n cwd: process.cwd(),\n stdio: \"pipe\",\n shell: true,\n });\n\n let hasError = false;\n\n proc.stderr.on(\"data\", (data) => {\n const message = data.toString();\n if (\n message.includes(\"error\") ||\n message.includes(\"Error\") ||\n message.includes(\"ERROR\")\n ) {\n hasError = true;\n }\n });\n\n proc.on(\"close\", (code) => {\n resolve(code === 0 && !hasError);\n });\n\n proc.on(\"error\", () => {\n resolve(false);\n });\n });\n}\n\n/**\n * Create a zip archive of the compiled theme\n */\nasync function createZipArchive(\n compiledThemePath: string,\n outputPath: string\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const output = fs.createWriteStream(outputPath);\n const archive = archiver(\"zip\", {\n zlib: { level: 9 }, // Maximum compression\n });\n\n output.on(\"close\", () => {\n resolve();\n });\n\n archive.on(\"error\", (err) => {\n reject(err);\n });\n\n archive.pipe(output);\n\n // Add all files from the compiled theme directory\n // This includes: bundle.js, chunks/, assets/, manifest.json, bundle-analysis.json\n archive.directory(compiledThemePath, false);\n\n archive.finalize();\n });\n}\n","import path from \"path\";\nimport fs from \"fs-extra\";\nimport FormData from \"form-data\";\nimport fetch from \"node-fetch\";\nimport { logger } from \"../utils/logger\";\nimport { ensureOneXProject } from \"../utils/file-helpers\";\n\ninterface DeployOptions {\n theme?: string;\n package?: string;\n apiUrl?: string;\n apiKey?: string;\n environment?: \"production\" | \"staging\" | \"development\";\n}\n\nexport async function deployCommand(options: DeployOptions): Promise<void> {\n logger.header(\"Deploy Theme\");\n\n // Ensure we're in a OneX project\n ensureOneXProject();\n\n // Determine package file to upload\n let packagePath: string;\n\n if (options.package) {\n // Use specified package file\n packagePath = path.resolve(options.package);\n } else if (options.theme) {\n // Look for package in dist/\n const distDir = path.join(process.cwd(), \"dist\");\n\n if (!fs.existsSync(distDir)) {\n logger.error(\"No dist/ directory found. Run 'onexthm package' first.\");\n process.exit(1);\n }\n\n const files = fs.readdirSync(distDir);\n const packageFiles = files.filter(\n (f) => f.startsWith(options.theme!) && f.endsWith(\".zip\")\n );\n\n if (packageFiles.length === 0) {\n logger.error(`No package found for theme \"${options.theme}\".`);\n logger.info(\"Run: onexthm package --theme \" + options.theme);\n process.exit(1);\n }\n\n // Use most recent package\n packageFiles.sort().reverse();\n packagePath = path.join(distDir, packageFiles[0]);\n } else {\n logger.error(\"Either --package or --theme must be specified.\");\n logger.info(\"Examples:\");\n logger.log(\" onexthm deploy --package dist/tinan-1.0.0.zip\");\n logger.log(\" onexthm deploy --theme tinan\");\n process.exit(1);\n }\n\n // Verify package exists\n if (!fs.existsSync(packagePath)) {\n logger.error(`Package not found: ${packagePath}`);\n process.exit(1);\n }\n\n // Get package info\n const stats = await fs.stat(packagePath);\n const sizeMB = (stats.size / 1024 / 1024).toFixed(2);\n const fileName = path.basename(packagePath);\n\n logger.newLine();\n logger.info(`Package: ${fileName}`);\n logger.log(`Size: ${sizeMB} MB`);\n logger.log(`Path: ${path.relative(process.cwd(), packagePath)}`);\n logger.newLine();\n\n // Determine API URL\n const apiUrl =\n options.apiUrl || process.env.ONEX_API_URL || \"http://localhost:3001\";\n\n const uploadEndpoint = `${apiUrl}/website-api/themes/upload`;\n\n logger.section(\"Uploading to API Server\");\n logger.info(`Endpoint: ${uploadEndpoint}`);\n logger.newLine();\n\n // Upload package\n logger.startSpinner(\"Uploading theme package...\");\n\n try {\n const formData = new FormData();\n formData.append(\"theme\", fs.createReadStream(packagePath), {\n filename: fileName,\n contentType: \"application/zip\",\n });\n\n // Add metadata\n if (options.apiKey) {\n formData.append(\"apiKey\", options.apiKey);\n }\n if (options.environment) {\n formData.append(\"environment\", options.environment);\n }\n\n const response = await fetch(uploadEndpoint, {\n method: \"POST\",\n body: formData,\n headers: formData.getHeaders(),\n });\n\n const result = (await response.json()) as {\n error?: string;\n message?: string;\n packageId?: string;\n themeId?: string;\n version?: string;\n url?: string;\n };\n\n if (!response.ok) {\n logger.stopSpinner(false, \"Upload failed\");\n logger.error(\n `Server returned ${response.status}: ${response.statusText}`\n );\n if (result.error) {\n logger.log(`Error: ${result.error}`);\n }\n process.exit(1);\n }\n\n logger.stopSpinner(true, \"Upload complete\");\n\n // Show deployment info\n logger.newLine();\n logger.success(\"✓ Theme deployed successfully!\");\n logger.newLine();\n\n if (result.themeId) {\n logger.info(`Theme ID: ${result.themeId}`);\n }\n if (result.version) {\n logger.info(`Version: ${result.version}`);\n }\n if (result.url) {\n logger.info(`Preview URL: ${result.url}`);\n }\n\n logger.newLine();\n logger.log(\"Theme is now available on the API server!\");\n } catch (error) {\n logger.stopSpinner(false, \"Upload failed\");\n logger.error(\n `Failed to upload: ${error instanceof Error ? error.message : String(error)}`\n );\n logger.newLine();\n logger.info(\"Make sure the API server is running:\");\n logger.log(\" cd apps/api-server && pnpm dev\");\n process.exit(1);\n }\n}\n","/**\n * `onexthm upload` is deprecated.\n *\n * It used to push bundle.zip / source.zip / latest.json directly to S3 via\n * the AWS SDK. The platform no longer exposes themes via direct S3 access,\n * so this path is broken by construction. The canonical replacement is\n * `onexthm publish`, which:\n *\n * 1. Authenticates against the platform (`onexthm login`)\n * 2. Registers the theme + version through the API\n * 3. Receives presigned PUT URLs for bundle.zip, source.zip, and any\n * content-hashed assets\n * 4. Uploads everything via HTTP and confirms the publish\n *\n * This file is kept (rather than deleted) so existing CI scripts that call\n * `onexthm upload` get a clear migration message instead of \"command not\n * found\". After all consumers migrate, the command can be removed from\n * cli.ts entirely.\n */\n\nimport chalk from \"chalk\";\nimport { logger } from \"../utils/logger\";\n\ninterface UploadOptions {\n theme?: string;\n bucket?: string;\n version?: string;\n environment?: \"staging\" | \"production\";\n dryRun?: boolean;\n skipSource?: boolean;\n sourceDir?: string;\n}\n\nexport async function uploadCommand(_options: UploadOptions): Promise<void> {\n logger.header(\"Upload Theme to S3 — DEPRECATED\");\n console.log();\n console.log(\n chalk.yellow.bold(\n \"`onexthm upload` is deprecated and no longer functional.\"\n )\n );\n console.log();\n console.log(\n \"The platform no longer exposes themes via direct S3 access, so this\"\n );\n console.log(\n \"command can no longer reach the bucket. Use `onexthm publish` instead:\"\n );\n console.log();\n console.log(chalk.cyan(\" cd themes/your-theme\"));\n console.log(chalk.cyan(\" onexthm login # one-time, refreshes JWT\"));\n console.log(\n chalk.cyan(\" onexthm publish # builds + uploads + confirms\")\n );\n console.log();\n console.log(\n \"`publish` does everything this command did (build, version bump,\"\n );\n console.log(\n \"bundle + source upload) plus content-hashed asset upload, security\"\n );\n console.log(\"scanning, and atomic version registration in one step.\");\n console.log();\n process.exit(1);\n}\n","import path from \"path\";\nimport fs from \"fs-extra\";\nimport ora from \"ora\";\nimport chalk from \"chalk\";\nimport AdmZip from \"adm-zip\";\nimport { logger } from \"../utils/logger\";\nimport { getApiUrl, type Env } from \"../utils/cli-auth\";\n\ninterface DownloadOptions {\n themeId?: string;\n version?: string;\n output?: string;\n env?: Env;\n /** @deprecated kept for backwards-compat with older scripts; ignored. */\n bucket?: string;\n}\n\ninterface ThemeManifest {\n themeId: string;\n version: string;\n compiledAt: string;\n counts: {\n sections: number;\n blocks: number;\n schemas: number;\n };\n output: {\n entry: string;\n chunks: string[];\n assets: string[];\n };\n [key: string]: any;\n}\n\n/**\n * Unwrap an API Gateway envelope `{ statusCode, body }` into the inner body.\n * Returns the input unchanged if it's not an envelope.\n */\nfunction unwrapEnvelope<T = any>(raw: any): T {\n if (raw && typeof raw === \"object\" && \"statusCode\" in raw && \"body\" in raw) {\n return raw.body as T;\n }\n return raw as T;\n}\n\n/**\n * Resolve the latest version for a theme by calling the public website-api\n * `/versions` Lambda.\n */\nasync function resolveLatestVersion(\n apiUrl: string,\n themeId: string\n): Promise<string> {\n const url = `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/versions`;\n let response: Response;\n try {\n response = await fetch(url, { cache: \"no-store\" });\n } catch (err) {\n throw new Error(\n `Network error contacting ${url}: ${err instanceof Error ? err.message : \"unknown\"}`\n );\n }\n if (!response.ok) {\n throw new Error(\n `Version lookup failed for \"${themeId}\" (HTTP ${response.status})`\n );\n }\n const raw = await response.json();\n const data = unwrapEnvelope<{ latest_version?: string }>(raw);\n const latest = data?.latest_version;\n if (typeof latest !== \"string\" || latest.length === 0) {\n throw new Error(\n `Theme \"${themeId}\" has no published versions yet (no latest_version in response)`\n );\n }\n return latest;\n}\n\n/**\n * Download bundle.zip via the public website-api `/download` Lambda.\n */\nasync function downloadBundleZip(\n apiUrl: string,\n themeId: string,\n version: string\n): Promise<Buffer> {\n const url = `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/${encodeURIComponent(version)}/download`;\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(\n `Bundle download failed for \"${themeId}@${version}\" (HTTP ${response.status})`\n );\n }\n\n const contentType = response.headers.get(\"content-type\") || \"\";\n\n if (contentType.includes(\"application/json\")) {\n const raw = await response.json();\n const envelope =\n raw && typeof raw === \"object\" && \"statusCode\" in raw\n ? raw\n : { body: raw };\n const body = envelope.body;\n if (typeof body !== \"string\") {\n throw new Error(\n \"Unexpected /download response shape: expected base64 string in body\"\n );\n }\n return Buffer.from(body, \"base64\");\n }\n\n const arrayBuffer = await response.arrayBuffer();\n return Buffer.from(arrayBuffer);\n}\n\n/**\n * Create compatibility files for module resolution.\n */\nasync function createCompatibilityFiles(\n outputDir: string,\n manifest: ThemeManifest\n): Promise<void> {\n const entryFile = manifest.output?.entry || \"bundle-entry.js\";\n\n if (\n entryFile !== \"bundle-entry.js\" &&\n entryFile.startsWith(\"bundle-entry-\")\n ) {\n const hashedPath = path.join(outputDir, entryFile);\n const stablePath = path.join(outputDir, \"bundle-entry.js\");\n if (await fs.pathExists(hashedPath)) {\n await fs.copy(hashedPath, stablePath);\n const mapPath = hashedPath + \".map\";\n if (await fs.pathExists(mapPath)) {\n await fs.copy(mapPath, stablePath + \".map\");\n }\n }\n }\n\n const sectionsRegistryPath = path.join(outputDir, \"sections-registry.js\");\n const content = `// Re-export all sections from bundle-entry\\n// This file exists to maintain compatibility with the import path\\nexport * from './bundle-entry.js';\\n`;\n await fs.writeFile(sectionsRegistryPath, content, \"utf-8\");\n\n const pkgJsonPath = path.join(outputDir, \"package.json\");\n await fs.writeFile(pkgJsonPath, '{\\n \"type\": \"module\"\\n}\\n', \"utf-8\");\n}\n\n/**\n * Show helpful error message when the download fails.\n */\nfunction showDownloadFailureHelp(themeId: string, apiUrl: string): void {\n console.log();\n logger.error(chalk.red.bold(\"Theme download failed\"));\n console.log();\n console.log(chalk.yellow(\"Possible reasons:\"));\n console.log(\n chalk.gray(\" 1. Theme has not been published yet (run `onexthm publish`)\")\n );\n console.log(\n chalk.gray(\n \" 2. Theme ID is wrong (typo in --theme-id or THEME_ID env var)\"\n )\n );\n console.log(\n chalk.gray(\" 3. API base URL is wrong or the website-api is unreachable\")\n );\n console.log();\n console.log(chalk.cyan.bold(\"To fix this:\"));\n console.log();\n console.log(chalk.white(\"1. Verify the theme is published:\"));\n console.log(\n chalk.gray(\n ` curl -s ${apiUrl}/website-api/themes/${themeId}/versions | jq .latest_version`\n )\n );\n console.log();\n console.log(chalk.white(\"2. Check API URL configuration:\"));\n console.log(chalk.gray(` Current API URL: ${apiUrl}`));\n console.log(chalk.gray(\" Override with ONEXTHM_API_URL env var if needed\"));\n console.log();\n console.log(chalk.white(\"3. Pin a specific version (CI/production):\"));\n console.log(\n chalk.gray(` THEME_VERSION=1.2.3 onexthm download --theme-id ${themeId}`)\n );\n console.log();\n}\n\n/**\n * Download a published theme via the website-api Lambda endpoints.\n */\nexport async function downloadCommand(options: DownloadOptions): Promise<void> {\n logger.header(\"Download Theme\");\n\n const env: Env = options.env ?? \"dev\";\n const apiUrl = getApiUrl(env);\n\n logger.info(`Environment: ${env} (${apiUrl})`);\n\n const spinner = ora(\"Initializing download...\").start();\n\n if (options.bucket) {\n spinner.stop();\n logger.warning(\n \"--bucket is deprecated and ignored. Themes are now served via HTTP from the website-api Lambda.\"\n );\n spinner.start();\n }\n\n try {\n const themeId =\n options.themeId ||\n process.env.NEXT_PUBLIC_THEME_ID ||\n process.env.THEME_ID;\n const requestedVersion =\n options.version || process.env.THEME_VERSION || \"latest\";\n const outputDir = options.output || \"./active-theme\";\n\n if (!themeId) {\n spinner.fail(\n chalk.red(\n \"Theme ID not specified. Use --theme-id or set NEXT_PUBLIC_THEME_ID environment variable.\"\n )\n );\n process.exit(1);\n }\n\n spinner.text = `Resolving ${themeId}@${requestedVersion}...`;\n\n let resolvedVersion = requestedVersion;\n if (requestedVersion === \"latest\") {\n resolvedVersion = await resolveLatestVersion(apiUrl, themeId);\n spinner.succeed(\n `Resolved latest version: ${chalk.cyan(resolvedVersion)}`\n );\n\n const isCI = !!(\n process.env.CI ||\n process.env.GITHUB_ACTIONS ||\n process.env.VERCEL\n );\n if (isCI) {\n console.log(\n chalk.yellow(\n `\\n Warning: Resolved \"latest\" to ${resolvedVersion} in CI environment.\\n` +\n ` For reproducible builds, pin to a specific version:\\n` +\n ` THEME_VERSION=${resolvedVersion}\\n`\n )\n );\n }\n } else {\n spinner.succeed(`Using version: ${chalk.cyan(resolvedVersion)}`);\n }\n\n spinner.start(\n `Downloading bundle.zip for ${themeId}@${resolvedVersion}...`\n );\n const zipBuffer = await downloadBundleZip(apiUrl, themeId, resolvedVersion);\n const sizeMB = (zipBuffer.length / 1024 / 1024).toFixed(2);\n spinner.succeed(`Downloaded bundle.zip (${sizeMB} MB)`);\n\n spinner.start(\"Extracting bundle...\");\n await fs.remove(outputDir);\n await fs.ensureDir(outputDir);\n\n const zip = new AdmZip(zipBuffer);\n zip.extractAllTo(outputDir, true);\n\n const entries = zip.getEntries().filter((e) => !e.isDirectory);\n spinner.succeed(`Extracted ${entries.length} files to ${outputDir}`);\n\n const manifestPath = path.join(outputDir, \"manifest.json\");\n const manifest: ThemeManifest = await fs.readJson(manifestPath);\n await createCompatibilityFiles(outputDir, manifest);\n\n console.log();\n logger.success(chalk.green.bold(\"Theme downloaded successfully!\"));\n console.log();\n console.log(\n chalk.cyan(\" Theme: \") + chalk.white(`${themeId}@${resolvedVersion}`)\n );\n console.log(chalk.cyan(\" Env: \") + chalk.white(env));\n console.log(chalk.cyan(\" Source: \") + chalk.white(apiUrl));\n console.log(chalk.cyan(\" Output: \") + chalk.white(outputDir));\n console.log(chalk.cyan(\" Files: \") + chalk.white(entries.length));\n if (manifest.counts) {\n console.log(\n chalk.cyan(\" Sections:\") + chalk.white(` ${manifest.counts.sections}`)\n );\n }\n console.log();\n } catch (error: any) {\n spinner.fail(chalk.red(\"Download failed\"));\n logger.error(error.message);\n\n const themeId =\n options.themeId ||\n process.env.NEXT_PUBLIC_THEME_ID ||\n process.env.THEME_ID ||\n \"unknown\";\n\n showDownloadFailureHelp(themeId, apiUrl);\n process.exit(1);\n }\n}\n","import path from \"path\";\nimport fs from \"fs-extra\";\nimport ora from \"ora\";\nimport chalk from \"chalk\";\nimport { spawn } from \"child_process\";\nimport AdmZip from \"adm-zip\";\nimport { logger } from \"../utils/logger\";\nimport { glob } from \"glob\";\nimport {\n getApiUrl,\n getValidTokens,\n authenticatedFetch,\n type Env,\n} from \"../utils/cli-auth\";\n\ninterface CloneOptions {\n version?: string;\n output?: string;\n env?: Env;\n /** @deprecated kept for backwards-compat with older scripts; ignored. */\n bucket?: string;\n install?: boolean;\n name?: string;\n}\n\n/**\n * Unwrap an API Gateway envelope `{ statusCode, body }` into the inner body.\n */\nfunction unwrapEnvelope<T = any>(raw: any): T {\n if (raw && typeof raw === \"object\" && \"statusCode\" in raw && \"body\" in raw) {\n return raw.body as T;\n }\n return raw as T;\n}\n\n/**\n * Resolve the latest version of a theme via the public website-api `/versions` Lambda.\n */\nasync function resolveLatestVersion(\n apiUrl: string,\n themeId: string\n): Promise<string> {\n const url = `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/versions`;\n const response = await fetch(url, { cache: \"no-store\" });\n if (!response.ok) {\n throw new Error(\n `Version lookup failed for \"${themeId}\" (HTTP ${response.status})`\n );\n }\n const raw = await response.json();\n const data = unwrapEnvelope<{ latest_version?: string }>(raw);\n const latest = data?.latest_version;\n if (typeof latest !== \"string\" || latest.length === 0) {\n throw new Error(`Theme \"${themeId}\" has no published versions yet`);\n }\n return latest;\n}\n\n/**\n * Fetch source.zip via the authenticated `/source` Lambda.\n */\nasync function fetchSourceZip(\n apiUrl: string,\n themeId: string,\n version: string,\n env: Env\n): Promise<Buffer> {\n const url = `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/source?version=${encodeURIComponent(version)}`;\n const response = await authenticatedFetch(url, { method: \"GET\" }, env);\n if (!response.ok) {\n if (response.status === 404) {\n throw new Error(\n `Source not found for ${themeId}@${version}. The theme may not have been published with source upload enabled.`\n );\n }\n if (response.status === 401 || response.status === 403) {\n throw new Error(\n `Not authorized to download source for \"${themeId}\". Run \\`onexthm login --env ${env}\\` first.`\n );\n }\n throw new Error(\n `Source URL request failed for \"${themeId}@${version}\" (HTTP ${response.status})`\n );\n }\n const raw = await response.json();\n const data = unwrapEnvelope<{ download_url?: string }>(raw);\n const presignedUrl = data?.download_url;\n if (typeof presignedUrl !== \"string\" || presignedUrl.length === 0) {\n throw new Error(\"Unexpected /source response shape: missing download_url\");\n }\n\n const zipResponse = await fetch(presignedUrl);\n if (!zipResponse.ok) {\n throw new Error(\n `Presigned source download failed (HTTP ${zipResponse.status})`\n );\n }\n const arrayBuffer = await zipResponse.arrayBuffer();\n return Buffer.from(arrayBuffer);\n}\n\n/**\n * Run pnpm install in a directory\n */\nfunction runInstall(cwd: string): Promise<boolean> {\n return new Promise((resolve) => {\n const proc = spawn(\"pnpm\", [\"install\"], {\n cwd,\n stdio: \"inherit\",\n shell: true,\n });\n proc.on(\"close\", (code) => resolve(code === 0));\n proc.on(\"error\", () => resolve(false));\n });\n}\n\n/**\n * Prompt user for new theme name using inquirer\n */\nasync function promptThemeName(originalName: string): Promise<string> {\n const { default: inquirer } = await import(\"inquirer\");\n const { themeName } = await inquirer.prompt([\n {\n type: \"input\",\n name: \"themeName\",\n message: \"New theme name (kebab-case):\",\n default: `my-${originalName}`,\n validate: (input: string) => {\n if (!/^[a-z][a-z0-9-]*$/.test(input)) {\n return \"Theme name must be kebab-case (lowercase letters, numbers, hyphens)\";\n }\n if (input === originalName) {\n return `Name must differ from the original theme \"${originalName}\"`;\n }\n return true;\n },\n },\n ]);\n return themeName;\n}\n\n/**\n * Rename all theme references in the cloned source.\n */\nasync function renameTheme(\n themeDir: string,\n oldName: string,\n newName: string\n): Promise<void> {\n const oldPrefix = `${oldName}-`;\n const newPrefix = `${newName}-`;\n const newDisplayName = newName\n .split(\"-\")\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(\" \");\n\n const pkgPath = path.join(themeDir, \"package.json\");\n if (await fs.pathExists(pkgPath)) {\n const pkg = await fs.readJson(pkgPath);\n pkg.name = `@onex-themes/${newName}`;\n if (pkg.description) {\n pkg.description = pkg.description.replace(\n new RegExp(oldName, \"gi\"),\n newDisplayName\n );\n }\n pkg.version = \"1.0.0\";\n\n if (pkg.devDependencies?.[\"@onexapis/cli\"]) {\n delete pkg.devDependencies[\"@onexapis/cli\"];\n }\n\n await fs.writeJson(pkgPath, pkg, { spaces: 2 });\n }\n\n const configPath = path.join(themeDir, \"theme.config.ts\");\n if (await fs.pathExists(configPath)) {\n let content = await fs.readFile(configPath, \"utf-8\");\n content = content.replace(/id:\\s*\"[^\"]*\"/, `id: \"${newName}\"`);\n content = content.replace(\n /name:\\s*\"[^\"]*Theme\"/,\n `name: \"${newDisplayName} Theme\"`\n );\n await fs.writeFile(configPath, content);\n }\n\n const layoutPath = path.join(themeDir, \"theme.layout.ts\");\n if (await fs.pathExists(layoutPath)) {\n let content = await fs.readFile(layoutPath, \"utf-8\");\n content = content.replace(/id:\\s*\"[^\"]*\"/, `id: \"${newName}\"`);\n content = content.replace(\n /name:\\s*\"[^\"]*Theme\"/,\n `name: \"${newDisplayName} Theme\"`\n );\n await fs.writeFile(layoutPath, content);\n }\n\n const oldDisplayName = oldName\n .split(\"-\")\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(\" \");\n\n const tsFiles = await glob(\"**/*.ts\", { cwd: themeDir, nodir: true });\n for (const file of tsFiles) {\n const filePath = path.join(themeDir, file);\n let content = await fs.readFile(filePath, \"utf-8\");\n const original = content;\n\n content = content.replace(\n new RegExp(`\"${oldPrefix}`, \"g\"),\n `\"${newPrefix}`\n );\n content = content.replace(\n new RegExp(`themeId:\\\\s*\"${oldName}\"`, \"g\"),\n `themeId: \"${newName}\"`\n );\n content = content.replace(\n new RegExp(`${oldDisplayName} Theme`, \"g\"),\n `${newDisplayName} Theme`\n );\n\n if (content !== original) {\n await fs.writeFile(filePath, content);\n }\n }\n}\n\n/**\n * Clone theme source code via the website-api.\n */\nexport async function cloneCommand(\n themeName: string,\n options: CloneOptions\n): Promise<void> {\n logger.header(\"Clone Theme Source\");\n\n const env: Env = options.env ?? \"dev\";\n const apiUrl = getApiUrl(env);\n\n logger.info(`Environment: ${env} (${apiUrl})`);\n\n if (options.bucket) {\n logger.warning(\n \"--bucket is deprecated and ignored. Source is now fetched via HTTP from the website-api Lambda.\"\n );\n }\n\n const tokens = await getValidTokens(env);\n if (!tokens) {\n logger.error(\n `Not logged in to ${env} environment. Run: onexthm login --env ${env}`\n );\n process.exit(1);\n }\n\n let newName = options.name;\n if (!newName) {\n newName = await promptThemeName(themeName);\n }\n\n const spinner = ora(\"Initializing clone...\").start();\n\n try {\n const outputDir = options.output || path.resolve(process.cwd(), newName);\n\n if (await fs.pathExists(outputDir)) {\n spinner.fail(chalk.red(`Directory already exists: ${outputDir}`));\n logger.info(\n chalk.gray(\n \"Use -o to specify a different output directory, or remove the existing directory.\"\n )\n );\n process.exit(1);\n }\n\n let version = options.version || \"latest\";\n if (version === \"latest\") {\n spinner.text = \"Resolving latest version...\";\n version = await resolveLatestVersion(apiUrl, themeName);\n spinner.succeed(`Resolved latest version: ${chalk.cyan(version)}`);\n }\n\n spinner.start(`Downloading source.zip for ${themeName}@${version}...`);\n let zipBuffer: Buffer;\n try {\n zipBuffer = await fetchSourceZip(apiUrl, themeName, version, env);\n } catch (error: any) {\n spinner.fail(chalk.red(error.message));\n console.log();\n console.log(\n chalk.gray(\n `Verify the theme is published: curl -s ${apiUrl}/website-api/themes/${themeName}/versions`\n )\n );\n console.log();\n process.exit(1);\n }\n\n const sizeMB = (zipBuffer.length / 1024 / 1024).toFixed(2);\n spinner.succeed(`Downloaded source.zip (${sizeMB} MB)`);\n\n spinner.start(`Extracting to ${outputDir}...`);\n await fs.ensureDir(outputDir);\n\n const zip = new AdmZip(zipBuffer);\n zip.extractAllTo(outputDir, true);\n\n const entries = zip.getEntries().filter((e) => !e.isDirectory);\n spinner.succeed(`Extracted ${entries.length} files`);\n\n spinner.start(\n `Renaming theme: ${chalk.gray(themeName)} → ${chalk.cyan(newName)}...`\n );\n await renameTheme(outputDir, themeName, newName);\n spinner.succeed(\n `Renamed theme: ${chalk.gray(themeName)} → ${chalk.cyan(newName)}`\n );\n\n const envExamplePath = path.join(outputDir, \".env.example\");\n if (!(await fs.pathExists(envExamplePath))) {\n await fs.writeFile(\n envExamplePath,\n [\n \"# API Configuration (enables real data in preview)\",\n \"# Get your Company ID from the OneX dashboard\",\n `NEXT_PUBLIC_API_URL=${apiUrl}`,\n \"NEXT_PUBLIC_COMPANY_ID=\",\n \"\",\n ].join(\"\\n\")\n );\n }\n\n const mcpJsonPath = path.join(outputDir, \".mcp.json\");\n if (await fs.pathExists(mcpJsonPath)) {\n const { default: inquirerMod } = await import(\"inquirer\");\n const { figmaApiKey } = await inquirerMod.prompt([\n {\n type: \"password\",\n name: \"figmaApiKey\",\n message:\n \"Figma API Key (optional, for Figma-to-code MCP — press Enter to skip):\",\n },\n ]);\n let mcpContent = await fs.readFile(mcpJsonPath, \"utf-8\");\n if (figmaApiKey) {\n mcpContent = mcpContent.replace(\"__FIGMA_API_KEY__\", figmaApiKey);\n } else {\n try {\n const mcpJson = JSON.parse(mcpContent);\n delete mcpJson.mcpServers?.figma;\n mcpContent = JSON.stringify(mcpJson, null, 2) + \"\\n\";\n } catch {}\n }\n await fs.writeFile(mcpJsonPath, mcpContent, \"utf-8\");\n }\n\n if (options.install !== false) {\n const hasPkgJson = await fs.pathExists(\n path.join(outputDir, \"package.json\")\n );\n if (hasPkgJson) {\n spinner.start(\"Installing dependencies...\");\n const success = await runInstall(outputDir);\n if (success) {\n spinner.succeed(\"Dependencies installed\");\n } else {\n spinner.warn(\n chalk.yellow(\n \"Failed to install dependencies — run 'pnpm install' manually\"\n )\n );\n }\n }\n }\n\n console.log();\n logger.success(chalk.green.bold(\"Theme cloned successfully!\"));\n console.log();\n console.log(\n chalk.cyan(\" Source: \") + chalk.gray(`${themeName}@${version}`)\n );\n console.log(chalk.cyan(\" Env: \") + chalk.white(env));\n console.log(chalk.cyan(\" Theme: \") + chalk.white(newName));\n console.log(chalk.cyan(\" Location: \") + chalk.white(outputDir));\n console.log(chalk.cyan(\" Files: \") + chalk.white(entries.length));\n console.log();\n console.log(chalk.cyan(\"Next steps:\"));\n console.log(chalk.gray(` cd ${path.relative(process.cwd(), outputDir)}`));\n console.log(\n chalk.gray(\" cp .env.example .env # then add your Company ID\")\n );\n if (options.install === false) {\n console.log(chalk.gray(\" pnpm install\"));\n }\n console.log(chalk.gray(\" onexthm build\"));\n console.log();\n } catch (error: any) {\n spinner.fail(chalk.red(`Clone failed: ${error.message}`));\n logger.error(error.stack || error.message);\n process.exit(1);\n }\n}\n","import path from \"path\";\nimport fsNode from \"fs/promises\";\nimport fs from \"fs-extra\";\nimport chokidar from \"chokidar\";\nimport { logger } from \"../utils/logger\";\nimport { getThemesDir } from \"../utils/file-helpers\";\nimport {\n compileStandaloneThemeDev,\n compilePreviewRuntime,\n generateManifest,\n} from \"../utils/compile-theme\";\nimport { createDevServer } from \"../utils/dev-server\";\n\ninterface DevOptions {\n theme?: string;\n port?: string;\n open?: boolean;\n}\n\nexport async function devCommand(options: DevOptions): Promise<void> {\n logger.header(\"OneX Dev Server\");\n\n // 1. Resolve theme path (same pattern as build.ts)\n let themePath: string;\n let themeName: string;\n\n if (options.theme) {\n themeName = options.theme;\n try {\n const workspaceThemePath = path.join(getThemesDir(), themeName);\n if (fs.existsSync(workspaceThemePath)) {\n themePath = workspaceThemePath;\n } else {\n themePath = path.join(process.cwd(), themeName);\n }\n } catch {\n themePath = path.join(process.cwd(), themeName);\n }\n\n if (!fs.existsSync(themePath)) {\n logger.error(`Theme \"${themeName}\" not found.`);\n process.exit(1);\n }\n } else {\n const isThemeDir = [\n \"theme.config.ts\",\n \"bundle-entry.ts\",\n \"manifest.ts\",\n ].some((f) => fs.existsSync(path.join(process.cwd(), f)));\n if (isThemeDir) {\n themePath = process.cwd();\n themeName = path.basename(themePath);\n } else {\n logger.error(\n \"Not in a theme directory and no --theme specified. Run from theme root or use --theme flag.\"\n );\n process.exit(1);\n }\n }\n\n // 2. Compile preview runtime (one-time)\n logger.startSpinner(\"Compiling preview runtime...\");\n const previewRuntimePath = await compilePreviewRuntime(themePath);\n logger.stopSpinner(true, \"Preview runtime compiled\");\n\n // 3. Initial theme compile (incremental context)\n logger.startSpinner(\"Compiling theme...\");\n const { context, outputDir } = await compileStandaloneThemeDev(\n themePath,\n themeName\n );\n logger.stopSpinner(true, \"Theme compiled\");\n\n // 4. Start dev server\n const port = Number(options.port) || 3456;\n const server = createDevServer({\n port,\n distDir: outputDir,\n previewRuntimePath,\n themeName,\n themePath,\n });\n\n // 5. Start file watcher\n const watcher = chokidar.watch(\n [\n \"sections\",\n \"blocks\",\n \"components\",\n \"pages\",\n \"theme.config.ts\",\n \"theme.layout.ts\",\n \"bundle-entry.ts\",\n \"sections-registry.ts\",\n ],\n { cwd: themePath, ignoreInitial: true }\n );\n\n let debounceTimer: ReturnType<typeof setTimeout> | undefined;\n\n watcher.on(\"all\", (_event, filePath) => {\n clearTimeout(debounceTimer);\n debounceTimer = setTimeout(async () => {\n logger.info(`File changed: ${filePath}`);\n try {\n await context.rebuild();\n await generateManifest(themeName, themePath, outputDir);\n server.broadcast({ type: \"reload\", timestamp: Date.now() });\n logger.success(\"Rebuilt successfully\");\n } catch (error) {\n server.broadcast({ type: \"error\", message: String(error) });\n logger.error(`Rebuild failed: ${error}`);\n }\n }, 150);\n });\n\n // 6. Print URLs\n logger.newLine();\n logger.success(`Theme compiled: ${themeName}`);\n logger.info(`Preview: http://localhost:${port}`);\n logger.info(\"Watching for changes...\");\n logger.newLine();\n\n // 7. Open browser\n if (options.open !== false) {\n const open = await import(\"open\");\n open.default(`http://localhost:${port}`);\n }\n\n // 8. Keep alive until Ctrl+C\n process.on(\"SIGINT\", async () => {\n logger.newLine();\n logger.info(\"Shutting down...\");\n watcher.close();\n await context.dispose();\n server.close();\n // Clean up process shim left for incremental rebuilds\n const shimPath = path.join(outputDir, \".process-shim.js\");\n try {\n await fsNode.unlink(shimPath);\n } catch {}\n process.exit(0);\n });\n}\n","import path from \"path\";\nimport os from \"os\";\nimport fs from \"fs-extra\";\nimport inquirer from \"inquirer\";\nimport { logger } from \"../utils/logger\";\n\nconst CONFIG_DIR = path.join(os.homedir(), \".onexthm\");\nconst CONFIG_FILE = path.join(CONFIG_DIR, \".env\");\n\ninterface ConfigEntry {\n key: string;\n label: string;\n required: boolean;\n secret?: boolean;\n defaultValue?: string;\n}\n\nconst CONFIG_ENTRIES: ConfigEntry[] = [\n {\n key: \"AWS_ACCESS_KEY_ID\",\n label: \"AWS Access Key ID\",\n required: true,\n },\n {\n key: \"AWS_SECRET_ACCESS_KEY\",\n label: \"AWS Secret Access Key\",\n required: true,\n secret: true,\n },\n {\n key: \"AWS_REGION\",\n label: \"AWS Region\",\n required: false,\n defaultValue: \"ap-southeast-1\",\n },\n {\n key: \"BUCKET_NAME\",\n label: \"S3 Bucket Name\",\n required: false,\n defaultValue: \"theme-s3-bucket\",\n },\n {\n key: \"NEXT_PUBLIC_API_URL\",\n label: \"API URL\",\n required: false,\n defaultValue: \"https://platform-dev.onexeos.com\",\n },\n {\n key: \"NEXT_PUBLIC_COMPANY_ID\",\n label: \"Company ID\",\n required: false,\n },\n];\n\n/**\n * Parse existing .env file into a key-value map.\n */\nfunction parseEnvFile(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const line of content.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n const eqIndex = trimmed.indexOf(\"=\");\n if (eqIndex === -1) continue;\n const key = trimmed.slice(0, eqIndex).trim();\n const value = trimmed.slice(eqIndex + 1).trim();\n result[key] = value;\n }\n return result;\n}\n\n/**\n * Serialize key-value map back to .env format.\n */\nfunction serializeEnv(values: Record<string, string>): string {\n const lines: string[] = [\n \"# OneX CLI Configuration\",\n \"# Generated by: onexthm config\",\n \"\",\n ];\n\n // Group: AWS\n lines.push(\"# AWS / S3 Configuration\");\n for (const key of [\n \"AWS_ACCESS_KEY_ID\",\n \"AWS_SECRET_ACCESS_KEY\",\n \"AWS_REGION\",\n \"BUCKET_NAME\",\n ]) {\n if (values[key]) lines.push(`${key}=${values[key]}`);\n }\n\n lines.push(\"\");\n\n // Group: API\n lines.push(\"# API Configuration\");\n for (const key of [\"NEXT_PUBLIC_API_URL\", \"NEXT_PUBLIC_COMPANY_ID\"]) {\n if (values[key]) lines.push(`${key}=${values[key]}`);\n }\n\n // Preserve any extra keys not in our schema\n const knownKeys = new Set(CONFIG_ENTRIES.map((e) => e.key));\n const extraKeys = Object.keys(values).filter((k) => !knownKeys.has(k));\n if (extraKeys.length > 0) {\n lines.push(\"\");\n lines.push(\"# Other\");\n for (const key of extraKeys) {\n lines.push(`${key}=${values[key]}`);\n }\n }\n\n lines.push(\"\");\n return lines.join(\"\\n\");\n}\n\nexport async function configCommand(): Promise<void> {\n logger.header(\"OneX CLI Configuration\");\n\n // Load existing config\n let existing: Record<string, string> = {};\n try {\n const content = await fs.readFile(CONFIG_FILE, \"utf-8\");\n existing = parseEnvFile(content);\n logger.info(`Existing config found at: ${CONFIG_FILE}`);\n logger.newLine();\n } catch {\n logger.info(\"No existing config found. Let's set one up.\");\n logger.newLine();\n }\n\n // Prompt for each entry\n const answers: Record<string, string> = {};\n\n for (const entry of CONFIG_ENTRIES) {\n const currentValue = existing[entry.key] || \"\";\n const defaultVal = currentValue || entry.defaultValue || \"\";\n\n const displayDefault =\n entry.secret && currentValue\n ? currentValue.slice(0, 4) + \"****\" + currentValue.slice(-4)\n : defaultVal;\n\n const { value } = await inquirer.prompt([\n {\n type: entry.secret ? \"password\" : \"input\",\n name: \"value\",\n message: `${entry.label}${entry.required ? \" (required)\" : \"\"}:`,\n default: entry.secret ? undefined : defaultVal,\n ...(entry.secret && currentValue\n ? {\n suffix: ` (current: ${displayDefault}, press Enter to keep)`,\n }\n : {}),\n validate: (input: string) => {\n if (entry.required && !input && !currentValue) {\n return `${entry.label} is required`;\n }\n return true;\n },\n },\n ]);\n\n // Keep existing value if user pressed Enter on a secret field\n answers[entry.key] = value || currentValue;\n }\n\n // Merge with existing (preserving unknown keys)\n const merged = { ...existing, ...answers };\n\n // Remove empty values\n for (const key of Object.keys(merged)) {\n if (!merged[key]) delete merged[key];\n }\n\n // Write config\n await fs.ensureDir(CONFIG_DIR);\n await fs.writeFile(CONFIG_FILE, serializeEnv(merged));\n\n logger.newLine();\n logger.success(`Config saved to: ${CONFIG_FILE}`);\n logger.newLine();\n logger.section(\"Configured values:\");\n for (const entry of CONFIG_ENTRIES) {\n const val = merged[entry.key];\n if (!val) continue;\n const display = entry.secret\n ? val.slice(0, 4) + \"****\" + val.slice(-4)\n : val;\n logger.log(` ${entry.label}: ${display}`);\n }\n logger.newLine();\n logger.info(\n \"These credentials are stored globally and used by clone, upload, and download commands.\"\n );\n}\n","import inquirer from \"inquirer\";\nimport { logger } from \"../utils/logger\";\nimport {\n saveAuthTokens,\n loadAuthTokens,\n getApiUrl,\n parseJwtClaims,\n type AuthTokens,\n type Env,\n} from \"../utils/cli-auth\";\n\ninterface LoginOptions {\n env?: Env;\n}\n\nexport async function loginCommand(options: LoginOptions = {}): Promise<void> {\n const env: Env = options.env ?? \"dev\";\n const apiUrl = getApiUrl(env);\n\n logger.header(\"OneX Theme Developer Login\");\n logger.info(`Environment: ${env} (${apiUrl})`);\n logger.newLine();\n\n // Check if already logged in to this env\n const existing = loadAuthTokens(env);\n if (existing) {\n logger.info(`Already logged in as: ${existing.user.email}`);\n const { relogin } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"relogin\",\n message: \"Re-login with different account?\",\n default: false,\n },\n ]);\n if (!relogin) return;\n }\n\n // Prompt for credentials\n const { email, password } = await inquirer.prompt([\n {\n type: \"input\",\n name: \"email\",\n message: \"Email:\",\n validate: (input: string) =>\n input.includes(\"@\") ? true : \"Enter a valid email\",\n },\n {\n type: \"password\",\n name: \"password\",\n message: \"Password:\",\n validate: (input: string) =>\n input.length >= 6 ? true : \"Password too short\",\n },\n ]);\n\n logger.startSpinner(\"Logging in...\");\n\n try {\n const response = await fetch(`${apiUrl}/auth/login`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ username: email, password }),\n });\n\n const raw = await response.json();\n const data = raw.statusCode ? raw.body : raw;\n\n if (!response.ok || data.error) {\n logger.stopSpinner(false, \"Login failed\");\n logger.error(data.message || data.error || \"Invalid credentials\");\n process.exit(1);\n }\n\n const idToken = data.IdToken;\n const accessToken = data.AccessToken;\n const refreshToken = data.RefreshToken;\n const expiresIn = data.ExpiresIn || 3600;\n\n if (!idToken) {\n logger.stopSpinner(false, \"Login failed\");\n logger.error(\"No token received from server\");\n process.exit(1);\n }\n\n const claims = parseJwtClaims(idToken);\n\n const tokens: AuthTokens = {\n accessToken,\n idToken,\n refreshToken,\n expiresAt: Math.floor(Date.now() / 1000) + expiresIn,\n user: {\n email: (claims.email as string) || email,\n name: claims.name as string,\n companyId: claims[\"custom:company_id\"] as string,\n userId: claims.sub as string,\n },\n };\n\n await saveAuthTokens(tokens, env);\n\n logger.stopSpinner(true, \"Logged in!\");\n logger.newLine();\n logger.info(` Environment: ${env}`);\n logger.info(` Email: ${tokens.user.email}`);\n if (tokens.user.name) logger.info(` Name: ${tokens.user.name}`);\n if (tokens.user.companyId)\n logger.info(` Company: ${tokens.user.companyId}`);\n logger.newLine();\n logger.success(\n `Token stored securely in ~/.onexthm/auth-${env}.json (encrypted)`\n );\n } catch (error) {\n logger.stopSpinner(false, \"Login failed\");\n logger.error(error instanceof Error ? error.message : \"Connection failed\");\n process.exit(1);\n }\n}\n","import { logger } from \"../utils/logger\";\nimport { clearAuthTokens, loadAuthTokens, type Env } from \"../utils/cli-auth\";\n\ninterface LogoutOptions {\n env?: Env;\n}\n\nexport async function logoutCommand(\n options: LogoutOptions = {}\n): Promise<void> {\n const env: Env = options.env ?? \"dev\";\n const tokens = loadAuthTokens(env);\n\n if (!tokens) {\n logger.info(`Not logged in to ${env} environment.`);\n return;\n }\n\n await clearAuthTokens(env);\n logger.success(`Logged out of ${env} (was: ${tokens.user.email})`);\n}\n","import { logger } from \"../utils/logger\";\nimport {\n loadAuthTokens,\n isTokenExpired,\n getApiUrl,\n type Env,\n} from \"../utils/cli-auth\";\n\ninterface WhoamiOptions {\n env?: Env;\n}\n\nexport async function whoamiCommand(\n options: WhoamiOptions = {}\n): Promise<void> {\n const env: Env = options.env ?? \"dev\";\n const tokens = loadAuthTokens(env);\n\n if (!tokens) {\n logger.error(\n `Not logged in to ${env} environment. Run: onexthm login --env ${env}`\n );\n process.exit(1);\n }\n\n const expired = isTokenExpired(tokens);\n\n logger.header(\"OneX Theme Developer\");\n logger.info(` Environment: ${env} (${getApiUrl(env)})`);\n logger.info(` Email: ${tokens.user.email}`);\n if (tokens.user.name) logger.info(` Name: ${tokens.user.name}`);\n if (tokens.user.companyId)\n logger.info(` Company: ${tokens.user.companyId}`);\n logger.info(\n ` Status: ${expired ? \"⚠ Token expired (will auto-refresh)\" : \"✓ Active\"}`\n );\n}\n","import fs from \"fs-extra\";\nimport path from \"path\";\nimport semver from \"semver\";\nimport { logger } from \"../utils/logger\";\nimport {\n getValidTokens,\n authenticatedFetch,\n getApiUrl,\n type Env,\n} from \"../utils/cli-auth\";\nimport {\n scanThemeAssets,\n buildAssetMap,\n isVideoAsset,\n type HashedAssetEntry,\n} from \"../utils/scan-theme-assets\";\nimport { fetchPriorGateManifests } from \"../utils/fetch-prior-schemas\";\nimport {\n diffManifests,\n classify,\n type Change,\n type Classification,\n} from \"../utils/schema-diff\";\n\ninterface PublishOptions {\n theme?: string;\n bump?: \"patch\" | \"minor\" | \"major\";\n env?: Env;\n dryRun?: boolean;\n confirmDefaults?: boolean;\n force?: boolean;\n}\n\nexport async function publishCommand(options: PublishOptions): Promise<void> {\n const env: Env = options.env ?? \"dev\";\n\n logger.header(\"OneX Theme Publish\");\n logger.info(`Environment: ${env} (${getApiUrl(env)})`);\n logger.newLine();\n\n // 1. Check authentication\n const tokens = await getValidTokens(env);\n if (!tokens) {\n logger.error(\n `Not logged in to ${env} environment. Run: onexthm login --env ${env}`\n );\n process.exit(1);\n }\n logger.info(`Logged in as: ${tokens.user.email}`);\n\n // 2. Resolve theme directory\n let themePath: string;\n if (options.theme) {\n themePath = path.resolve(options.theme);\n } else {\n const isThemeDir = [\n \"theme.config.ts\",\n \"bundle-entry.ts\",\n \"manifest.ts\",\n ].some((f) => fs.existsSync(path.join(process.cwd(), f)));\n if (isThemeDir) {\n themePath = process.cwd();\n } else {\n logger.error(\n \"Not in a theme directory. Run from theme root or use --theme flag.\"\n );\n process.exit(1);\n }\n }\n\n // 3. Read theme metadata\n const pkgPath = path.join(themePath, \"package.json\");\n if (!fs.existsSync(pkgPath)) {\n logger.error(\"No package.json found in theme directory\");\n process.exit(1);\n }\n\n const pkg = fs.readJsonSync(pkgPath);\n const themeId =\n pkg.name?.replace(\"@onex-themes/\", \"\") || path.basename(themePath);\n\n // Auto-bump version if --bump flag provided\n if (options.bump) {\n const currentVersion = pkg.version || \"1.0.0\";\n const newVersion = semver.inc(currentVersion, options.bump);\n if (!newVersion) {\n logger.error(`Failed to bump version from ${currentVersion}`);\n process.exit(1);\n }\n pkg.version = newVersion;\n fs.writeJsonSync(pkgPath, pkg, { spaces: 2 });\n logger.info(`Bumped version: ${currentVersion} -> ${newVersion}`);\n }\n\n const version = pkg.version || \"1.0.0\";\n\n // Validate semver format\n if (!semver.valid(version)) {\n logger.error(\n `Invalid version \"${version}\" in package.json. Must be valid semver (e.g., 1.0.0)`\n );\n process.exit(1);\n }\n\n logger.newLine();\n logger.info(`Theme: ${themeId}`);\n logger.info(`Version: ${version}`);\n logger.newLine();\n\n const apiUrl = getApiUrl(env);\n\n // 4. Register theme (idempotent — safe to call multiple times)\n // Skipped on --dry-run since registration has server-side side effects.\n if (!options.dryRun) {\n logger.startSpinner(\"Registering theme...\");\n try {\n const regResponse = await authenticatedFetch(\n `${apiUrl}/website-api/themes/register`,\n {\n method: \"POST\",\n body: JSON.stringify({\n themeId,\n name: pkg.displayName || themeId,\n description: pkg.description || \"\",\n email: tokens.user.email,\n author:\n typeof pkg.author === \"string\"\n ? pkg.author\n : pkg.author?.name || tokens.user.name || \"\",\n category: pkg.onex?.category || \"MINIMAL\",\n tags: pkg.keywords || [],\n thumbnail_url: pkg.onex?.thumbnail || \"\",\n }),\n },\n env\n );\n\n const regData = await regResponse.json();\n const regBody = regData.statusCode ? regData.body : regData;\n\n if (!regResponse.ok) {\n const errMsg =\n regBody.error || regBody.message || \"Registration failed\";\n if (!errMsg.includes(\"already registered\")) {\n logger.stopSpinner(false, \"Registration failed\");\n logger.error(errMsg);\n process.exit(1);\n }\n }\n\n logger.stopSpinner(true, regBody.message || \"Theme registered\");\n } catch (error) {\n logger.stopSpinner(false, \"Registration failed\");\n logger.error(\n error instanceof Error ? error.message : \"Connection failed\"\n );\n process.exit(1);\n }\n }\n\n // 4.5 Check if version already exists (immutability check)\n // Skipped on --dry-run — gate is the focus, not the existence check.\n if (!options.dryRun) {\n logger.startSpinner(\"Checking version availability...\");\n try {\n const checkResponse = await authenticatedFetch(\n `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/versions/${encodeURIComponent(version)}/exists`,\n { method: \"GET\" },\n env\n );\n const checkData = await checkResponse.json();\n const checkBody = checkData.statusCode ? checkData.body : checkData;\n\n if (checkBody.exists) {\n logger.stopSpinner(false, \"Version already published\");\n const patchVer = semver.inc(version, \"patch\") || \"?\";\n const minorVer = semver.inc(version, \"minor\") || \"?\";\n const majorVer = semver.inc(version, \"major\") || \"?\";\n logger.error(\n `\\nVersion ${version} of \"${themeId}\" is already published and cannot be overwritten.\\n\\n` +\n `To publish a new version:\\n` +\n ` 1. Bump version in package.json (e.g., ${version} -> ${patchVer})\\n` +\n ` 2. Run: onexthm publish\\n\\n` +\n `Or use the --bump flag:\\n` +\n ` onexthm publish --bump patch (${version} -> ${patchVer})\\n` +\n ` onexthm publish --bump minor (${version} -> ${minorVer})\\n` +\n ` onexthm publish --bump major (${version} -> ${majorVer})`\n );\n process.exit(1);\n }\n logger.stopSpinner(true, `Version ${version} is available`);\n } catch (error) {\n // Non-blocking: if the check endpoint doesn't exist yet, continue with publish\n // The backend will also reject duplicates at the presigned URL step\n logger.stopSpinner(\n true,\n \"Version check skipped (endpoint not available)\"\n );\n }\n }\n\n // 5. Build theme using the standalone compiler\n logger.startSpinner(\"Building theme...\");\n try {\n const { compileStandaloneTheme } = await import(\"../utils/compile-theme\");\n const buildSuccess = await compileStandaloneTheme(themePath, themeId);\n if (!buildSuccess) {\n logger.stopSpinner(false, \"Build failed\");\n logger.error(\"Run 'onexthm build' to see build errors\");\n process.exit(1);\n }\n logger.stopSpinner(true, \"Theme compiled\");\n } catch (error) {\n logger.stopSpinner(false, \"Build failed\");\n logger.error(error instanceof Error ? error.message : \"Build error\");\n process.exit(1);\n }\n\n const distDir = path.join(themePath, \"dist\");\n\n // 5.2 Schema-diff gate — fetches the prior version's schemas.json +\n // asset-manifest.json and classifies the changes. See\n // SCHEMA_DIFF_GATE_PLAN.md for the full taxonomy and enforcement rules.\n const classification = await runSchemaDiffGate(\n themeId,\n distDir,\n env,\n options\n );\n\n if (options.dryRun) {\n const exitCode =\n classification?.highest === \"breaking\" ||\n classification?.highest === \"breaking-severe\" ||\n classification?.highest === \"breaking-asset\"\n ? 2\n : 0;\n logger.newLine();\n logger.info(`Dry run complete (exit ${exitCode}). No files uploaded.`);\n process.exit(exitCode);\n }\n\n // 5.5. Scan theme-assets/ and compute content hashes\n let assetEntries: HashedAssetEntry[] = [];\n try {\n assetEntries = await scanThemeAssets(distDir);\n if (assetEntries.length > 0) {\n logger.info(`Found ${assetEntries.length} theme asset file(s)`);\n }\n } catch (error) {\n logger.error(\n `Asset scan failed: ${error instanceof Error ? error.message : \"unknown\"}`\n );\n process.exit(1);\n }\n\n // 5.6. Split assets: videos go through the multipart video API (up to\n // 3GB each), everything else uses the presigned-URL flow (20MB cap).\n const videoAssets = assetEntries.filter((a) => isVideoAsset(a.originalPath));\n const regularAssets = assetEntries.filter(\n (a) => !isVideoAsset(a.originalPath)\n );\n\n // 5.7. Upload videos via media service multipart API.\n // Video URLs replace the hashed-path value in asset-map.json so the\n // manifest endpoint passes them through as-is (see theme_bundles.py).\n const videoUrls: Record<string, string> = {};\n if (videoAssets.length > 0) {\n logger.startSpinner(`Uploading ${videoAssets.length} video(s)...`);\n try {\n for (const video of videoAssets) {\n const url = await uploadVideoMultipart(apiUrl, themeId, video, env);\n videoUrls[video.originalPath] = url;\n }\n logger.stopSpinner(true, `Uploaded ${videoAssets.length} video(s)`);\n } catch (error) {\n logger.stopSpinner(false, \"Video upload failed\");\n logger.error(error instanceof Error ? error.message : \"Upload error\");\n process.exit(1);\n }\n }\n\n // 5.8. Write asset-map.json into dist/ so it ships inside bundle.zip.\n // Editor reads this at load time to resolve original paths -> hashed names.\n // For videos, the value is the full media-service URL (http(s)://...),\n // which the manifest endpoint detects and returns verbatim.\n try {\n const assetMap = buildAssetMap(regularAssets);\n for (const [originalPath, url] of Object.entries(videoUrls)) {\n assetMap[originalPath] = url;\n }\n const assetMapPath = path.join(distDir, \"asset-map.json\");\n await fs.writeFile(assetMapPath, JSON.stringify(assetMap, null, 2));\n } catch (error) {\n logger.error(\n `Failed to write asset-map.json: ${error instanceof Error ? error.message : \"unknown\"}`\n );\n process.exit(1);\n }\n\n // 6. Get presigned upload URLs (now includes asset presigned URLs)\n logger.startSpinner(\"Getting upload URLs...\");\n let bundleUploadUrl: string;\n let sourceUploadUrl: string;\n let assetUploads: Array<{\n path: string;\n upload_url: string;\n s3_key: string;\n }> = [];\n let alreadyUploaded: string[] = [];\n\n try {\n const pubResponse = await authenticatedFetch(\n `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/versions`,\n {\n method: \"POST\",\n body: JSON.stringify({\n version,\n assets: regularAssets.map((a) => ({\n path: a.hashedPath,\n hash: a.hash,\n size: a.size,\n content_type: a.contentType,\n })),\n }),\n },\n env\n );\n\n const pubData = await pubResponse.json();\n const pubBody = pubData.statusCode ? pubData.body : pubData;\n\n if (!pubResponse.ok || !pubBody.bundleUploadUrl) {\n logger.stopSpinner(false, \"Failed to get upload URLs\");\n logger.error(pubBody.error || \"Server error\");\n logger.error(`Status: ${pubResponse.status} ${pubResponse.statusText}`);\n logger.error(`Response: ${JSON.stringify(pubBody).slice(0, 500)}`);\n process.exit(1);\n }\n\n bundleUploadUrl = pubBody.bundleUploadUrl;\n sourceUploadUrl = pubBody.sourceUploadUrl;\n assetUploads = pubBody.assetUploads || [];\n alreadyUploaded = pubBody.alreadyUploaded || [];\n logger.stopSpinner(\n true,\n `Upload URLs obtained (${assetUploads.length} new, ${alreadyUploaded.length} reused)`\n );\n } catch (error) {\n logger.stopSpinner(false, \"Failed\");\n logger.error(error instanceof Error ? error.message : \"Connection failed\");\n process.exit(1);\n }\n\n // 6.5. Upload new assets to S3 in parallel (dedup'd by content hash)\n if (assetUploads.length > 0) {\n logger.startSpinner(`Uploading ${assetUploads.length} asset(s) to S3...`);\n\n // Log a sample presigned URL so we can diagnose routing issues\n if (assetUploads[0]) {\n logger.log(\n ` [debug] sample presigned PUT URL: ${assetUploads[0].upload_url}`\n );\n logger.log(` [debug] sample s3_key: ${assetUploads[0].s3_key}`);\n }\n\n const CONCURRENCY = 8;\n const byHashedPath = new Map(regularAssets.map((a) => [a.hashedPath, a]));\n const queue = [...assetUploads];\n let uploaded = 0;\n let failed = 0;\n\n async function worker(): Promise<void> {\n while (queue.length > 0) {\n const item = queue.shift();\n if (!item) break;\n const entry = byHashedPath.get(item.path);\n if (!entry) {\n failed++;\n logger.error(` ✗ ${item.path}: no local file found`);\n continue;\n }\n try {\n const buf = await fs.promises.readFile(entry.absPath);\n const res = await fetch(item.upload_url, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": entry.contentType,\n \"x-amz-acl\": \"public-read\",\n },\n body: buf,\n });\n if (!res.ok) {\n // On first failure log the full response body for diagnosis\n if (failed === 0) {\n const errBody = await res.text().catch(() => \"(unreadable)\");\n logger.log(` [debug] PUT ${item.upload_url}`);\n logger.log(\n ` [debug] response ${res.status} ${res.statusText}: ${errBody.slice(0, 500)}`\n );\n }\n throw new Error(`HTTP ${res.status}`);\n }\n uploaded++;\n } catch (e) {\n failed++;\n logger.error(\n ` ✗ ${item.path}: ${e instanceof Error ? e.message : \"failed\"}`\n );\n }\n }\n }\n\n await Promise.all(\n Array.from({ length: Math.min(CONCURRENCY, assetUploads.length) }, () =>\n worker()\n )\n );\n\n if (failed > 0) {\n logger.stopSpinner(false, `${failed} asset(s) failed`);\n process.exit(1);\n }\n logger.stopSpinner(true, `Uploaded ${uploaded} asset(s)`);\n }\n\n // 7. Create and upload bundle.zip\n // theme-assets/ is EXCLUDED because assets now live at\n // themes/{themeId}/assets/<hashed> in S3 (shared across versions).\n // The bundle ships asset-map.json instead, which the editor uses to\n // resolve original paths to hashed S3 filenames.\n logger.startSpinner(\"Uploading bundle...\");\n try {\n if (!fs.existsSync(distDir)) {\n logger.stopSpinner(false, \"No dist/ directory\");\n logger.error(\"Build the theme first: onexthm build\");\n process.exit(1);\n }\n\n const bundleZipPath = path.join(themePath, \"dist\", \"bundle.zip\");\n await createZip(distDir, bundleZipPath, [\n \"bundle.zip\",\n \"source.zip\",\n \"preview-runtime.js\",\n \"preview-runtime.js.map\",\n \"theme-assets\",\n \"theme-assets/**\",\n ]);\n\n const bundleBuffer = fs.readFileSync(bundleZipPath);\n const bundleRes = await fetch(bundleUploadUrl, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/zip\" },\n body: bundleBuffer,\n });\n\n if (!bundleRes.ok) {\n throw new Error(`Upload failed: ${bundleRes.status}`);\n }\n\n const sizeMB = (bundleBuffer.length / 1024 / 1024).toFixed(2);\n logger.stopSpinner(true, `Bundle uploaded (${sizeMB} MB)`);\n } catch (error) {\n logger.stopSpinner(false, \"Upload failed\");\n logger.error(error instanceof Error ? error.message : \"Upload error\");\n process.exit(1);\n }\n\n // 8. Create and upload source.zip\n logger.startSpinner(\"Uploading source...\");\n try {\n const sourceZipPath = path.join(themePath, \"dist\", \"source.zip\");\n await createZip(themePath, sourceZipPath, [\n \"node_modules\",\n \"dist\",\n \".git\",\n \".env\",\n \".env.local\",\n ]);\n\n const sourceBuffer = fs.readFileSync(sourceZipPath);\n const sourceRes = await fetch(sourceUploadUrl, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/zip\" },\n body: sourceBuffer,\n });\n\n if (!sourceRes.ok) {\n throw new Error(`Source upload failed: ${sourceRes.status}`);\n }\n\n const sizeMB = (sourceBuffer.length / 1024 / 1024).toFixed(2);\n logger.stopSpinner(true, `Source uploaded (${sizeMB} MB)`);\n } catch (error) {\n logger.stopSpinner(false, \"Source upload failed\");\n // Not fatal — source upload is optional\n logger.info(\"Source upload skipped (bundle was uploaded successfully)\");\n }\n\n // 9. Confirm upload (triggers security scan)\n logger.startSpinner(\"Scanning and publishing...\");\n try {\n const confirmResponse = await authenticatedFetch(\n `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/versions/${encodeURIComponent(version)}/confirm`,\n { method: \"POST\" },\n env\n );\n\n const confirmData = await confirmResponse.json();\n const confirmBody = confirmData.statusCode ? confirmData.body : confirmData;\n\n if (!confirmResponse.ok || !confirmBody.success) {\n logger.stopSpinner(false, \"Publishing failed\");\n\n const violations = confirmBody.violations || confirmData.violations;\n if (violations && violations.length > 0) {\n logger.error(\"Theme rejected — security violations found:\");\n for (const v of violations) {\n logger.log(\n ` ❌ ${v.file || v.path || \"?\"}: ${v.violation || v.message || JSON.stringify(v)}`\n );\n }\n } else {\n logger.error(confirmBody.error || \"Unknown error\");\n logger.error(confirmBody.message || \"\");\n logger.error(\n `Status: ${confirmResponse.status} ${confirmResponse.statusText}`\n );\n logger.error(`Response: ${JSON.stringify(confirmBody).slice(0, 2000)}`);\n }\n\n if (confirmBody.warnings?.length) {\n logger.newLine();\n logger.info(\"Warnings:\");\n for (const w of confirmBody.warnings) {\n logger.log(` ⚠️ ${w.file}: ${w.warning}`);\n }\n }\n\n process.exit(1);\n }\n\n logger.stopSpinner(true, confirmBody.message || \"Published!\");\n\n if (confirmBody.warnings?.length) {\n logger.newLine();\n logger.info(\"Warnings (non-blocking):\");\n for (const w of confirmBody.warnings) {\n logger.log(` ⚠️ ${w.file}: ${w.warning}`);\n }\n }\n } catch (error) {\n logger.stopSpinner(false, \"Publishing failed\");\n logger.error(error instanceof Error ? error.message : \"Connection failed\");\n process.exit(1);\n }\n\n logger.newLine();\n logger.success(`✓ Theme \"${themeId}\" v${version} published!`);\n\n // 10. Upload thumbnail (local file takes priority, fallback to auto-screenshot)\n await uploadThumbnail(apiUrl, themeId, themePath, distDir, env);\n}\n\nasync function uploadThumbnail(\n apiUrl: string,\n themeId: string,\n themePath: string,\n distDir: string,\n env: Env = \"dev\"\n): Promise<void> {\n const THUMBNAIL_CANDIDATES = [\n { file: \"thumbnail.png\", mime: \"image/png\" },\n { file: \"thumbnail.jpg\", mime: \"image/jpeg\" },\n { file: \"thumbnail.jpeg\", mime: \"image/jpeg\" },\n { file: \"thumbnail.webp\", mime: \"image/webp\" },\n ];\n\n let imageBase64: string | null = null;\n let mimeType = \"image/png\";\n\n // Priority 1: local thumbnail file in theme root\n for (const { file, mime } of THUMBNAIL_CANDIDATES) {\n const candidate = path.join(themePath, file);\n if (fs.existsSync(candidate)) {\n const buf = fs.readFileSync(candidate);\n imageBase64 = `data:${mime};base64,${buf.toString(\"base64\")}`;\n mimeType = mime;\n logger.info(`Using local thumbnail: ${file}`);\n break;\n }\n }\n\n // Priority 2: auto-screenshot the home page\n if (!imageBase64) {\n logger.startSpinner(\"Taking screenshot for thumbnail...\");\n try {\n const buf = await screenshotHomePage(themePath, distDir);\n imageBase64 = `data:image/png;base64,${buf.toString(\"base64\")}`;\n mimeType = \"image/png\";\n logger.stopSpinner(true, \"Screenshot captured\");\n } catch (err) {\n logger.stopSpinner(false, \"Screenshot failed — skipping thumbnail\");\n logger.info(\n \"Tip: add thumbnail.png to your theme root to set a custom thumbnail\"\n );\n return;\n }\n }\n\n logger.startSpinner(\"Uploading thumbnail...\");\n const imageUploadUrl = `${apiUrl}/media/images/upload`;\n const imageRequestBody = {\n prefix: `themes/${themeId}`,\n image: imageBase64\n ? `${imageBase64.slice(0, 60)}... [${Math.round((imageBase64.length * 3) / 4 / 1024)} KB]`\n : null,\n name: \"thumbnail.png\",\n };\n logger.log(` → POST ${imageUploadUrl}`);\n logger.log(\n ` → body: ${JSON.stringify({ ...imageRequestBody, image: imageBase64 ? `<base64 ${mimeType} truncated>` : null })}`\n );\n\n try {\n const uploadRes = await authenticatedFetch(\n imageUploadUrl,\n {\n method: \"POST\",\n body: JSON.stringify({\n prefix: `themes/${themeId}`,\n image: imageBase64,\n name: \"thumbnail.png\",\n }),\n },\n env\n );\n\n logger.log(` ← HTTP ${uploadRes.status} ${uploadRes.statusText}`);\n\n const uploadRawText = await uploadRes.text();\n logger.log(` ← raw response: ${uploadRawText.slice(0, 500)}`);\n\n let uploadData: any;\n try {\n uploadData = JSON.parse(uploadRawText);\n } catch {\n throw new Error(\n `Image upload returned non-JSON (HTTP ${uploadRes.status}): ${uploadRawText.slice(0, 200)}`\n );\n }\n const uploadBody = uploadData.statusCode ? uploadData.body : uploadData;\n\n if (!uploadRes.ok || !uploadBody.url) {\n throw new Error(\n `Image upload failed — HTTP ${uploadRes.status}: ${uploadBody.error || uploadBody.message || JSON.stringify(uploadBody).slice(0, 300)}`\n );\n }\n\n // Set thumbnail_url on theme via generic update endpoint\n const patchUrl = `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}`;\n logger.log(` → PATCH ${patchUrl}`);\n const patchRes = await authenticatedFetch(\n patchUrl,\n {\n method: \"PATCH\",\n body: JSON.stringify({ thumbnail_url: uploadBody.url }),\n },\n env\n );\n\n logger.log(` ← HTTP ${patchRes.status} ${patchRes.statusText}`);\n\n if (!patchRes.ok) {\n const patchRawText = await patchRes.text();\n logger.log(` ← raw response: ${patchRawText.slice(0, 500)}`);\n let patchBody: any = {};\n try {\n patchBody = JSON.parse(patchRawText);\n } catch {}\n patchBody = patchBody.statusCode ? patchBody.body : patchBody;\n throw new Error(\n `Thumbnail patch failed — HTTP ${patchRes.status}: ${patchBody.error || patchBody.message || patchRawText.slice(0, 200)}`\n );\n }\n\n logger.stopSpinner(true, \"Thumbnail set\");\n } catch (err) {\n logger.stopSpinner(false, \"Thumbnail upload failed\");\n logger.error(err instanceof Error ? err.message : String(err));\n logger.info(\n \"Theme published successfully. Thumbnail can be updated later.\"\n );\n }\n}\n\nasync function screenshotHomePage(\n themePath: string,\n distDir: string\n): Promise<Buffer> {\n const { compilePreviewRuntime } = await import(\"../utils/compile-theme\");\n const { createDevServer } = await import(\"../utils/dev-server\");\n\n const previewRuntimePath = await compilePreviewRuntime(themePath);\n const themeName = path.basename(themePath);\n const port = await findFreePort(4500);\n\n const server = createDevServer({\n port,\n distDir,\n previewRuntimePath,\n themeName,\n themePath,\n });\n\n // Give HTTP server a moment to bind\n await new Promise((resolve) => setTimeout(resolve, 300));\n\n const puppeteer = await import(\"puppeteer\");\n const browser = await puppeteer.default.launch({\n headless: true,\n args: [\"--no-sandbox\", \"--disable-setuid-sandbox\"],\n });\n\n try {\n const page = await browser.newPage();\n // Normal viewport height so 100vh sections render at natural size\n await page.setViewport({ width: 1440, height: 900 });\n await page.goto(`http://localhost:${port}`, {\n waitUntil: \"networkidle0\",\n timeout: 30_000,\n });\n\n // Wait for the preview root to render at least one child\n await page.waitForSelector(\"#onex-preview-root > *\", { timeout: 15_000 });\n\n // Scroll through the full page so lazy-loaded sections paint before capture\n await page.evaluate(async () => {\n await new Promise<void>((resolve) => {\n const distance = 400;\n const delay = 120;\n const timer = setInterval(() => {\n window.scrollBy(0, distance);\n if (\n window.scrollY + window.innerHeight >=\n document.body.scrollHeight\n ) {\n clearInterval(timer);\n window.scrollTo(0, 0);\n resolve();\n }\n }, delay);\n });\n });\n\n // Give animations and lazy-loaded images 5 seconds to settle\n await new Promise((resolve) => setTimeout(resolve, 5_000));\n\n const screenshot = await page.screenshot({ fullPage: true, type: \"png\" });\n return Buffer.from(screenshot);\n } finally {\n await browser.close();\n server.close();\n }\n}\n\nasync function findFreePort(start: number): Promise<number> {\n const net = await import(\"net\");\n return new Promise((resolve) => {\n const srv = net.createServer();\n srv.listen(start, () => {\n const addr = srv.address() as { port: number };\n srv.close(() => resolve(addr.port));\n });\n srv.on(\"error\", () => resolve(findFreePort(start + 1)));\n });\n}\n\n/**\n * Upload a single video file to S3 via the media service multipart API.\n * Returns the public URL the video lives at after completion.\n */\nasync function uploadVideoMultipart(\n apiUrl: string,\n themeId: string,\n video: HashedAssetEntry,\n env: Env = \"dev\"\n): Promise<string> {\n const fileName = path.basename(video.originalPath);\n const videoInitUrl = `${apiUrl}/media/videos/multipart/init`;\n const videoInitBody = {\n file_name: fileName,\n content_type: video.contentType,\n file_size: video.size,\n prefix: `themes/${themeId}/assets`,\n };\n\n logger.log(` → POST ${videoInitUrl}`);\n logger.log(` → body: ${JSON.stringify(videoInitBody)}`);\n\n const initRes = await authenticatedFetch(\n videoInitUrl,\n {\n method: \"POST\",\n body: JSON.stringify(videoInitBody),\n },\n env\n );\n\n logger.log(` ← HTTP ${initRes.status} ${initRes.statusText}`);\n\n const initRawText = await initRes.text();\n logger.log(` ← raw response: ${initRawText.slice(0, 500)}`);\n\n let initData: any;\n try {\n initData = JSON.parse(initRawText);\n } catch {\n throw new Error(\n `Video init returned non-JSON (HTTP ${initRes.status}): ${initRawText.slice(0, 200)}`\n );\n }\n const initBody = initData.statusCode ? initData.body : initData;\n if (!initRes.ok || !initBody.upload_id) {\n throw new Error(\n `Init multipart failed for ${fileName} — HTTP ${initRes.status}: ${initBody.error || initBody.message || JSON.stringify(initBody).slice(0, 300)}`\n );\n }\n\n const { upload_id, file_key, chunk_size, chunk_urls } = initBody as {\n upload_id: string;\n file_key: string;\n chunk_size: number;\n chunk_urls: Array<{ part_number: number; upload_url: string }>;\n };\n\n const fileBuffer = await fs.promises.readFile(video.absPath);\n\n const CHUNK_CONCURRENCY = 4;\n const queue = [...chunk_urls];\n const parts: Array<{ part_number: number; etag: string }> = [];\n\n async function chunkWorker(): Promise<void> {\n while (queue.length > 0) {\n const chunk = queue.shift();\n if (!chunk) break;\n const start = (chunk.part_number - 1) * chunk_size;\n const end = Math.min(start + chunk_size, fileBuffer.length);\n const body = fileBuffer.subarray(start, end);\n const res = await fetch(chunk.upload_url, { method: \"PUT\", body });\n if (!res.ok) {\n throw new Error(\n `Chunk ${chunk.part_number} upload failed: HTTP ${res.status}`\n );\n }\n const etag = res.headers.get(\"etag\") || res.headers.get(\"ETag\");\n if (!etag) {\n throw new Error(`Chunk ${chunk.part_number}: missing ETag header`);\n }\n parts.push({ part_number: chunk.part_number, etag });\n }\n }\n\n await Promise.all(\n Array.from({ length: Math.min(CHUNK_CONCURRENCY, chunk_urls.length) }, () =>\n chunkWorker()\n )\n );\n\n parts.sort((a, b) => a.part_number - b.part_number);\n\n const videoCompleteUrl = `${apiUrl}/media/videos/multipart/complete`;\n logger.log(` → POST ${videoCompleteUrl}`);\n logger.log(\n ` → body: ${JSON.stringify({ upload_id, file_key, parts: `[${parts.length} parts]` })}`\n );\n\n const completeRes = await authenticatedFetch(\n videoCompleteUrl,\n {\n method: \"POST\",\n body: JSON.stringify({ upload_id, file_key, parts }),\n },\n env\n );\n\n logger.log(` ← HTTP ${completeRes.status} ${completeRes.statusText}`);\n\n const completeRawText = await completeRes.text();\n logger.log(` ← raw response: ${completeRawText.slice(0, 500)}`);\n\n let completeData: any;\n try {\n completeData = JSON.parse(completeRawText);\n } catch {\n throw new Error(\n `Video complete returned non-JSON (HTTP ${completeRes.status}): ${completeRawText.slice(0, 200)}`\n );\n }\n const completeBody = completeData.statusCode\n ? completeData.body\n : completeData;\n if (!completeRes.ok || !completeBody.url) {\n // Best-effort cleanup on failure\n try {\n const abortUrl = `${apiUrl}/media/videos/multipart/abort`;\n logger.log(` → POST ${abortUrl} (cleanup)`);\n await authenticatedFetch(\n abortUrl,\n {\n method: \"POST\",\n body: JSON.stringify({ upload_id, file_key }),\n },\n env\n );\n } catch {}\n throw new Error(\n `Complete multipart failed for ${fileName} — HTTP ${completeRes.status}: ${completeBody.error || completeBody.message || JSON.stringify(completeBody).slice(0, 300)}`\n );\n }\n\n return completeBody.url as string;\n}\n\n/**\n * Create a zip file from a directory, excluding certain paths.\n */\nasync function createZip(\n sourceDir: string,\n outputPath: string,\n exclude: string[]\n): Promise<void> {\n const archiver = (await import(\"archiver\")).default;\n const { createWriteStream } = await import(\"fs\");\n\n return new Promise((resolve, reject) => {\n const output = createWriteStream(outputPath);\n const archive = archiver(\"zip\", { zlib: { level: 9 } });\n\n output.on(\"close\", resolve);\n archive.on(\"error\", reject);\n\n archive.pipe(output);\n archive.glob(\"**/*\", {\n cwd: sourceDir,\n ignore: exclude.flatMap((e) => [e, `${e}/**`]),\n dot: false,\n });\n archive.finalize();\n });\n}\n\n/**\n * Run the publish-time schema diff gate:\n * 1. Fetch the last published version's schemas.json + asset-manifest.json\n * 2. Read the same files from the local dist/ (written by compile-theme)\n * 3. Diff + classify, print the report\n * 4. Enforce gate rules (block breaking without --force, block defaults-only\n * without --confirm-defaults)\n *\n * Returns the classification (or null if no prior version / gate skipped).\n * Calls process.exit(1) on enforcement failure.\n */\nasync function runSchemaDiffGate(\n themeId: string,\n distDir: string,\n env: Env,\n options: PublishOptions\n): Promise<Classification | null> {\n logger.startSpinner(\"Fetching prior version for diff...\");\n const { result: prior, reason } = await fetchPriorGateManifests(themeId, env);\n\n if (!prior) {\n if (reason === \"no-prior\") {\n logger.stopSpinner(true, \"First publish — no prior version to diff\");\n } else {\n logger.stopSpinner(true, `Gate skipped (${reason})`);\n }\n return null;\n }\n logger.stopSpinner(true, `Fetched prior version ${prior.version}`);\n\n // Read the local manifests that compile-theme just wrote.\n let currentSchemas: any;\n let currentAssets: any;\n try {\n currentSchemas = JSON.parse(\n await fs.readFile(path.join(distDir, \"schemas.json\"), \"utf-8\")\n );\n } catch (err) {\n logger.warning(\n `Gate skipped: dist/schemas.json missing or unreadable (${err instanceof Error ? err.message : \"unknown\"})`\n );\n return null;\n }\n try {\n currentAssets = JSON.parse(\n await fs.readFile(path.join(distDir, \"asset-manifest.json\"), \"utf-8\")\n );\n } catch {\n // Empty asset manifest is valid — theme has no theme-assets/ files.\n currentAssets = { manifestVersion: 1, assets: [] };\n }\n\n const changes = diffManifests(\n { schemas: prior.schemas, assets: prior.assets },\n { schemas: currentSchemas, assets: currentAssets }\n );\n const classification = classify(changes);\n\n printGateReport(prior.version, classification);\n\n // Enforcement (skipped on --dry-run — caller exits before acting)\n if (options.dryRun) return classification;\n\n const isBreaking =\n classification.highest === \"breaking\" ||\n classification.highest === \"breaking-severe\" ||\n classification.highest === \"breaking-asset\";\n\n if (isBreaking && !options.force) {\n logger.error(\n \"\\nPublish blocked: breaking changes detected.\\n\" +\n \" • Bump major version and ship migration notes, OR\\n\" +\n \" • Re-run with --force to override (logged in the audit trail).\"\n );\n process.exit(1);\n }\n\n if (classification.highest === \"defaults-only\" && !options.confirmDefaults) {\n logger.error(\n \"\\nPublish blocked: default values changed.\\n\" +\n \"These defaults will propagate to every customer site that hasn't overridden\\n\" +\n \"the field. Re-run with --confirm-defaults to acknowledge the change, or\\n\" +\n \"revert the default if it wasn't intentional.\"\n );\n process.exit(1);\n }\n\n return classification;\n}\n\nfunction printGateReport(\n priorVersion: string,\n classification: Classification\n): void {\n logger.newLine();\n logger.info(`Schema diff vs. v${priorVersion}:`);\n if (classification.changes.length === 0) {\n logger.log(\" ✓ Safe — no schema changes detected\");\n return;\n }\n for (const change of classification.changes) {\n const icon = iconFor(change.kind);\n logger.log(` ${icon} [${change.kind}] ${change.path} — ${change.detail}`);\n }\n logger.log(\n `\\n → Classification: ${classification.highest}. Suggested bump: ${classification.bump}.`\n );\n}\n\nfunction iconFor(kind: Change[\"kind\"]): string {\n switch (kind) {\n case \"safe\":\n case \"safe-rename\":\n return \"✓\";\n case \"additive\":\n return \"+\";\n case \"defaults-only\":\n return \"⚠\";\n case \"breaking\":\n case \"breaking-asset\":\n return \"✗\";\n case \"breaking-severe\":\n return \"✗✗\";\n }\n}\n","/**\n * Fetch the last published version's gate manifests (schemas.json +\n * asset-manifest.json) so the CLI can diff the working tree against them.\n *\n * Backend contract (required for the gate to run):\n * GET /website-api/themes/{themeId}/gate-manifests/latest\n * 200 → { version, schemas, assets }\n * 404 → theme has never been published (first publish — no prior)\n *\n * If the endpoint doesn't exist yet (e.g. backend hasn't shipped it), we\n * degrade gracefully: print a warning and return null so publish proceeds\n * without classification. The gate is advisory in phase 1, not load-bearing.\n */\n\nimport { authenticatedFetch, getApiUrl, type Env } from \"./cli-auth\";\nimport type { SchemaManifest } from \"./extract-schemas\";\n\nexport interface AssetManifestEntry {\n path: string;\n hash: string;\n size: number;\n contentType: string;\n}\n\nexport interface AssetManifest {\n manifestVersion: 1;\n assets: AssetManifestEntry[];\n}\n\nexport interface PriorGateManifests {\n version: string;\n schemas: SchemaManifest;\n assets: AssetManifest;\n}\n\n/**\n * Fetch the most recently published version's gate manifests. Returns null\n * when there is no prior version, or when the endpoint is unavailable.\n */\nexport async function fetchPriorGateManifests(\n themeId: string,\n env: Env\n): Promise<{ result: PriorGateManifests | null; reason: string | null }> {\n const apiUrl = getApiUrl(env);\n const url = `${apiUrl}/website-api/themes/${encodeURIComponent(themeId)}/gate-manifests/latest`;\n\n let res: Response;\n try {\n res = await authenticatedFetch(url, { method: \"GET\" }, env);\n } catch (err) {\n return {\n result: null,\n reason: `network error: ${err instanceof Error ? err.message : \"unknown\"}`,\n };\n }\n\n if (res.status === 404) {\n // Could be \"no prior version\" (first publish) or \"endpoint not deployed\".\n // Body shape — if present — disambiguates. Treat both as \"no prior\" and\n // the caller decides whether to warn.\n return { result: null, reason: \"no-prior\" };\n }\n\n if (!res.ok) {\n return {\n result: null,\n reason: `server returned ${res.status} ${res.statusText}`,\n };\n }\n\n let data: any;\n try {\n data = await res.json();\n } catch {\n return { result: null, reason: \"non-JSON response from server\" };\n }\n\n // API gateway wrapper — unwrap if the server returned Lambda-style shape.\n const body = data.statusCode ? data.body : data;\n\n if (\n !body ||\n typeof body.version !== \"string\" ||\n !body.schemas ||\n !body.assets\n ) {\n return { result: null, reason: \"malformed response (missing fields)\" };\n }\n\n return {\n result: {\n version: body.version,\n schemas: body.schemas as SchemaManifest,\n assets: body.assets as AssetManifest,\n },\n reason: null,\n };\n}\n","/**\n * Schema diff + classifier — the publish-time gate.\n *\n * Compares a prior published schemas.json/asset-manifest.json against the\n * working tree and classifies each change into a bucket that decides the\n * recommended semver bump and whether auto-promote (phase 2) should be\n * offered to existing installations.\n *\n * See SCHEMA_DIFF_GATE_PLAN.md for the full taxonomy this enforces.\n *\n * Pure functions — no I/O, no network. Testable in isolation.\n */\n\nimport type {\n ExtractedBlock,\n ExtractedField,\n ExtractedSection,\n SchemaManifest,\n} from \"./extract-schemas\";\nimport type { AssetManifest } from \"./fetch-prior-schemas\";\n\nexport type ChangeKind =\n | \"safe\"\n | \"additive\"\n | \"defaults-only\"\n | \"safe-rename\"\n | \"breaking\"\n | \"breaking-severe\"\n | \"breaking-asset\";\n\nexport type BumpLevel = \"patch\" | \"minor\" | \"major\";\n\nexport interface Change {\n kind: ChangeKind;\n path: string;\n detail: string;\n}\n\nexport interface Classification {\n bump: BumpLevel;\n highest: ChangeKind;\n changes: Change[];\n}\n\nconst SEVERITY: Record<ChangeKind, number> = {\n safe: 0,\n \"safe-rename\": 1,\n \"defaults-only\": 2,\n additive: 3,\n breaking: 4,\n \"breaking-asset\": 5,\n \"breaking-severe\": 6,\n};\n\nconst BUMP_FOR: Record<ChangeKind, BumpLevel> = {\n safe: \"patch\",\n \"safe-rename\": \"patch\",\n \"defaults-only\": \"patch\",\n additive: \"minor\",\n breaking: \"major\",\n \"breaking-asset\": \"major\",\n \"breaking-severe\": \"major\",\n};\n\nfunction bumpFor(kind: ChangeKind): BumpLevel {\n return BUMP_FOR[kind];\n}\n\nfunction maxSeverity(a: ChangeKind, b: ChangeKind): ChangeKind {\n return SEVERITY[a] >= SEVERITY[b] ? a : b;\n}\n\n/** Classify a list of changes into the overall publish decision. */\nexport function classify(changes: Change[]): Classification {\n let highest: ChangeKind = \"safe\";\n for (const c of changes) {\n highest = maxSeverity(highest, c.kind);\n }\n return { bump: bumpFor(highest), highest, changes };\n}\n\n/**\n * Diff prior manifests against current manifests and return all detected\n * changes. Order is stable: sections sorted alphabetically, fields within a\n * section sorted by id.\n */\nexport function diffManifests(\n prior: { schemas: SchemaManifest; assets: AssetManifest },\n current: { schemas: SchemaManifest; assets: AssetManifest }\n): Change[] {\n const changes: Change[] = [];\n\n const priorSections = prior.schemas.sections;\n const currentSections = current.schemas.sections;\n const sectionTypes = new Set([\n ...Object.keys(priorSections),\n ...Object.keys(currentSections),\n ]);\n\n for (const type of [...sectionTypes].sort()) {\n const p = priorSections[type];\n const c = currentSections[type];\n if (p && !c) {\n changes.push({\n kind: \"breaking-severe\",\n path: `sections.${type}`,\n detail: `Section type \"${type}\" removed. Pages using this section will render empty.`,\n });\n continue;\n }\n if (!p && c) {\n changes.push({\n kind: \"additive\",\n path: `sections.${type}`,\n detail: `Section type \"${type}\" added.`,\n });\n continue;\n }\n if (p && c) diffSection(p, c, changes);\n }\n\n diffAssets(prior.assets, current.assets, changes);\n return changes;\n}\n\nfunction diffSection(\n prior: ExtractedSection,\n current: ExtractedSection,\n out: Change[]\n): void {\n const type = current.type;\n\n // dataRequirements — any change is breaking because the server uses them\n // to decide what to prefetch for SSR.\n if (\n JSON.stringify(prior.dataRequirements) !==\n JSON.stringify(current.dataRequirements)\n ) {\n out.push({\n kind: \"breaking\",\n path: `sections.${type}.dataRequirements`,\n detail: \"dataRequirements changed.\",\n });\n }\n\n diffFieldList(\n prior.settings,\n current.settings,\n `sections.${type}.settings`,\n out\n );\n\n diffDefaults(\n prior.defaults,\n current.defaults,\n `sections.${type}.defaults`,\n out\n );\n\n diffBlocks(prior.blocks, current.blocks, `sections.${type}.blocks`, out);\n}\n\nfunction diffBlocks(\n prior: ExtractedBlock[],\n current: ExtractedBlock[],\n pathPrefix: string,\n out: Change[]\n): void {\n const priorByType = new Map(prior.map((b) => [b.type, b]));\n const currentByType = new Map(current.map((b) => [b.type, b]));\n\n for (const type of new Set([\n ...priorByType.keys(),\n ...currentByType.keys(),\n ])) {\n const p = priorByType.get(type);\n const c = currentByType.get(type);\n if (p && !c) {\n out.push({\n kind: \"breaking\",\n path: `${pathPrefix}.${type}`,\n detail: `Block type \"${type}\" removed.`,\n });\n continue;\n }\n if (!p && c) {\n out.push({\n kind: \"additive\",\n path: `${pathPrefix}.${type}`,\n detail: `Block type \"${type}\" added.`,\n });\n continue;\n }\n if (p && c) {\n diffFieldList(\n p.settings,\n c.settings,\n `${pathPrefix}.${type}.settings`,\n out\n );\n diffDefaults(\n p.defaults,\n c.defaults,\n `${pathPrefix}.${type}.defaults`,\n out\n );\n }\n }\n}\n\n/**\n * Diff two field lists. Renames are detected via the `aliases` field on the\n * new definition: if a field disappeared and a new field lists the old id as\n * an alias, it's a safe-rename (assuming types match).\n */\nfunction diffFieldList(\n prior: ExtractedField[],\n current: ExtractedField[],\n pathPrefix: string,\n out: Change[]\n): void {\n const priorById = new Map(prior.map((f) => [f.id, f]));\n const currentById = new Map(current.map((f) => [f.id, f]));\n\n // Build alias → current-field map for rename detection\n const aliasToCurrent = new Map<string, ExtractedField>();\n for (const f of current) {\n if (f.aliases) {\n for (const alias of f.aliases) {\n aliasToCurrent.set(alias, f);\n }\n }\n }\n\n // Fields that existed before\n for (const [id, p] of priorById) {\n const c = currentById.get(id);\n if (c) {\n diffFieldPair(p, c, `${pathPrefix}.${id}`, out);\n continue;\n }\n // Field with this id no longer exists — check for a rename via aliases.\n const renamed = aliasToCurrent.get(id);\n if (renamed) {\n if (renamed.type === p.type) {\n out.push({\n kind: \"safe-rename\",\n path: `${pathPrefix}.${id}`,\n detail: `Field \"${id}\" renamed to \"${renamed.id}\" (alias preserved).`,\n });\n } else {\n out.push({\n kind: \"breaking\",\n path: `${pathPrefix}.${id}`,\n detail: `Field \"${id}\" renamed to \"${renamed.id}\" but type changed (${p.type} → ${renamed.type}).`,\n });\n }\n } else {\n out.push({\n kind: \"breaking\",\n path: `${pathPrefix}.${id}`,\n detail: `Field \"${id}\" removed. Consider adding aliases: [\"${id}\"] to the replacement field if this was a rename.`,\n });\n }\n }\n\n // Fields that exist only in current (net-new, not renamed)\n for (const [id, c] of currentById) {\n if (priorById.has(id)) continue;\n // If this field was reached via an alias, we already logged a safe-rename.\n const coveredByAlias = c.aliases?.some((a) => priorById.has(a)) ?? false;\n if (coveredByAlias) continue;\n\n if (c.required && c.default === undefined) {\n out.push({\n kind: \"breaking\",\n path: `${pathPrefix}.${id}`,\n detail: `Required field \"${id}\" added with no default. Existing instances cannot satisfy it.`,\n });\n } else {\n out.push({\n kind: \"additive\",\n path: `${pathPrefix}.${id}`,\n detail: `Field \"${id}\" added.`,\n });\n }\n }\n}\n\nfunction diffFieldPair(\n p: ExtractedField,\n c: ExtractedField,\n path: string,\n out: Change[]\n): void {\n if (p.type !== c.type) {\n out.push({\n kind: \"breaking\",\n path,\n detail: `Type changed (${p.type} → ${c.type}). Saved values may misrender.`,\n });\n return;\n }\n\n if (p.required !== true && c.required === true) {\n out.push({\n kind: \"breaking\",\n path,\n detail: \"Field became required. Existing empty instances now invalid.\",\n });\n }\n\n // Tightened numeric constraints — old data may violate\n if (typeof p.maxLength === \"number\" || typeof c.maxLength === \"number\") {\n if ((c.maxLength ?? Infinity) < (p.maxLength ?? Infinity)) {\n out.push({\n kind: \"breaking\",\n path,\n detail: `maxLength tightened (${p.maxLength ?? \"∞\"} → ${c.maxLength}).`,\n });\n }\n }\n if (typeof p.min === \"number\" || typeof c.min === \"number\") {\n if ((c.min ?? -Infinity) > (p.min ?? -Infinity)) {\n out.push({\n kind: \"breaking\",\n path,\n detail: `min raised (${p.min ?? \"-∞\"} → ${c.min}).`,\n });\n }\n }\n if (typeof p.max === \"number\" || typeof c.max === \"number\") {\n if ((c.max ?? Infinity) < (p.max ?? Infinity)) {\n out.push({\n kind: \"breaking\",\n path,\n detail: `max lowered (${p.max ?? \"∞\"} → ${c.max}).`,\n });\n }\n }\n\n // Enum / option diff\n if (p.options || c.options) {\n const priorOpts = new Set(p.options ?? []);\n const currentOpts = new Set(c.options ?? []);\n const removed = [...priorOpts].filter((o) => !currentOpts.has(o));\n const added = [...currentOpts].filter((o) => !priorOpts.has(o));\n if (removed.length > 0) {\n out.push({\n kind: \"breaking\",\n path,\n detail: `Option(s) removed: ${removed.join(\", \")}. Existing saved values may be orphaned.`,\n });\n }\n if (added.length > 0) {\n out.push({\n kind: \"additive\",\n path,\n detail: `Option(s) added: ${added.join(\", \")}.`,\n });\n }\n }\n\n // Default change — classified last so it doesn't mask anything above.\n if (!deepEqual(p.default, c.default)) {\n out.push({\n kind: \"defaults-only\",\n path,\n detail: `Default changed: ${JSON.stringify(p.default)} → ${JSON.stringify(c.default)}.`,\n });\n }\n}\n\nfunction diffDefaults(\n prior: Record<string, unknown>,\n current: Record<string, unknown>,\n pathPrefix: string,\n out: Change[]\n): void {\n const keys = new Set([...Object.keys(prior), ...Object.keys(current)]);\n for (const key of [...keys].sort()) {\n if (!(key in prior) || !(key in current)) continue; // added/removed defaults\n // follow structural default changes only (e.g. defaults.settings.title changed)\n if (!deepEqual(prior[key], current[key])) {\n out.push({\n kind: \"defaults-only\",\n path: `${pathPrefix}.${key}`,\n detail: `Default value changed.`,\n });\n }\n }\n}\n\nfunction diffAssets(\n prior: AssetManifest,\n current: AssetManifest,\n out: Change[]\n): void {\n const currentPaths = new Set(current.assets.map((a) => a.path));\n for (const a of prior.assets) {\n if (!currentPaths.has(a.path)) {\n out.push({\n kind: \"breaking-asset\",\n path: `theme-assets/${a.path}`,\n detail: `Asset \"${a.path}\" was present in the prior version and is now missing. Code that references it hardcoded will break.`,\n });\n }\n }\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a === null || b === null) return false;\n if (typeof a !== typeof b) return false;\n if (typeof a !== \"object\") return false;\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n const ak = Object.keys(a as object);\n const bk = Object.keys(b as object);\n if (ak.length !== bk.length) return false;\n for (const k of ak) {\n if (\n !deepEqual(\n (a as Record<string, unknown>)[k],\n (b as Record<string, unknown>)[k]\n )\n )\n return false;\n }\n return true;\n}\n","/**\n * `onexthm mcp` — manage AI-context files in an existing theme.\n *\n * Subcommands:\n * setup Install .mcp.json + CLAUDE.md + AGENTS.md + .cursorrules + THEME_REFERENCE.md\n * into the current directory if missing.\n * upgrade Overwrite the AI-context files with the latest from the bundled\n * template (asks before overwriting). Use this on themes that were\n * scaffolded with an older CLI version.\n * doctor Report whether the MCP server is registered, whether the AI\n * context files exist, and what version of the CLI shipped them.\n *\n * Why this exists: themes scaffolded by `onexthm init` ship with `.mcp.json`\n * and `CLAUDE.md` automatically. But themes created before those files were\n * added (or themes that have drifted from the template) need a way to refresh\n * them without re-running init. This is that way.\n */\n\nimport path from \"path\";\nimport fs from \"fs-extra\";\nimport inquirer from \"inquirer\";\nimport { logger } from \"../utils/logger\";\nimport { getTemplatesDir } from \"../utils/file-helpers\";\n\n/** Files we manage. Each is copied verbatim from the default template. */\nconst AI_CONTEXT_FILES = [\n \"CLAUDE.md\",\n \"AGENTS.md\",\n \".cursorrules\",\n \"THEME_REFERENCE.md\",\n \".mcp.json\",\n] as const;\n\ninterface McpOptions {\n yes?: boolean;\n /** Where to install the files. Defaults to process.cwd(). */\n cwd?: string;\n}\n\nfunction resolveTargetDir(opts: McpOptions): string {\n return path.resolve(opts.cwd ?? process.cwd());\n}\n\nfunction resolveDefaultTemplateDir(): string {\n return path.join(getTemplatesDir(), \"default\");\n}\n\n/**\n * Quick sanity check that we're in a theme directory.\n * Looks for theme.config.ts (the canonical marker).\n */\nfunction isThemeDir(dir: string): boolean {\n return (\n fs.existsSync(path.join(dir, \"theme.config.ts\")) ||\n fs.existsSync(path.join(dir, \"theme.config.js\"))\n );\n}\n\ninterface FileStatus {\n name: string;\n templatePath: string;\n targetPath: string;\n exists: boolean;\n identical: boolean;\n}\n\nfunction inspectFiles(templateDir: string, targetDir: string): FileStatus[] {\n return AI_CONTEXT_FILES.map((name) => {\n const templatePath = path.join(templateDir, name);\n const targetPath = path.join(targetDir, name);\n const exists = fs.existsSync(targetPath);\n let identical = false;\n if (exists && fs.existsSync(templatePath)) {\n try {\n const a = fs.readFileSync(templatePath, \"utf-8\");\n const b = fs.readFileSync(targetPath, \"utf-8\");\n // Normalize line endings before comparing so a CRLF/LF mismatch\n // doesn't show as \"different\".\n identical = a.replace(/\\r\\n/g, \"\\n\") === b.replace(/\\r\\n/g, \"\\n\");\n } catch {\n identical = false;\n }\n }\n return { name, templatePath, targetPath, exists, identical };\n });\n}\n\n// ─── setup ──────────────────────────────────────────────────────────────\n\nexport async function mcpSetupCommand(options: McpOptions = {}): Promise<void> {\n const targetDir = resolveTargetDir(options);\n const templateDir = resolveDefaultTemplateDir();\n\n logger.header(\"Install OneX MCP context files\");\n logger.log(`Target: ${targetDir}`);\n logger.log(\"\");\n\n if (!isThemeDir(targetDir)) {\n logger.error(\n `${targetDir} does not look like an OneX theme (no theme.config.ts found).`\n );\n logger.log(\"Run this command from the root of your theme project.\");\n process.exitCode = 1;\n return;\n }\n\n const statuses = inspectFiles(templateDir, targetDir);\n const missing = statuses.filter((s) => !s.exists);\n\n if (missing.length === 0) {\n logger.success(\"All AI context files are already present.\");\n logger.log(\n \"Run `onexthm mcp upgrade` to refresh them to the latest version.\"\n );\n return;\n }\n\n logger.log(`Will install ${missing.length} file(s):`);\n for (const s of missing) logger.log(` + ${s.name}`);\n logger.log(\"\");\n\n if (!options.yes) {\n const { confirm } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"confirm\",\n message: \"Proceed?\",\n default: true,\n },\n ]);\n if (!confirm) {\n logger.log(\"Cancelled.\");\n return;\n }\n }\n\n for (const s of missing) {\n if (!fs.existsSync(s.templatePath)) {\n logger.warning(` ! ${s.name} not in template — skipped`);\n continue;\n }\n await fs.copy(s.templatePath, s.targetPath);\n logger.success(` ✓ ${s.name}`);\n }\n\n logger.log(\"\");\n logger.success(\"Done. Restart your AI client to pick up the new MCP server.\");\n logger.log(\"\");\n logger.log(\"Tip: if your theme uses the Figma MCP, edit .mcp.json and\");\n logger.log(\n \"replace __FIGMA_API_KEY__ with your Figma personal access token.\"\n );\n}\n\n// ─── upgrade ────────────────────────────────────────────────────────────\n\nexport async function mcpUpgradeCommand(\n options: McpOptions = {}\n): Promise<void> {\n const targetDir = resolveTargetDir(options);\n const templateDir = resolveDefaultTemplateDir();\n\n logger.header(\"Upgrade OneX MCP context files\");\n logger.log(`Target: ${targetDir}`);\n logger.log(\"\");\n\n if (!isThemeDir(targetDir)) {\n logger.error(\n `${targetDir} does not look like an OneX theme (no theme.config.ts found).`\n );\n process.exitCode = 1;\n return;\n }\n\n const statuses = inspectFiles(templateDir, targetDir);\n\n // .mcp.json is excluded from upgrade by default. Once installed, the user\n // owns it — it may register additional servers, hold a real Figma API key,\n // or use a custom MCP command. Use `mcp setup` if you want it written\n // fresh into a brand-new theme that doesn't have one yet.\n const toUpgrade = statuses.filter(\n (s) => !s.identical && s.name !== \".mcp.json\"\n );\n\n // But still warn if .mcp.json is missing entirely or doesn't register onexthm.\n const mcpJsonStatus = statuses.find((s) => s.name === \".mcp.json\");\n if (mcpJsonStatus && !mcpJsonStatus.exists) {\n logger.warning(\n \".mcp.json is missing. Run `onexthm mcp setup` to install it.\"\n );\n }\n\n if (toUpgrade.length === 0) {\n logger.success(\"All AI context files are already up to date.\");\n return;\n }\n\n logger.log(\"Files to update:\");\n for (const s of toUpgrade) {\n const tag = !s.exists ? \"+ new\" : \"~ changed\";\n logger.log(` ${tag} ${s.name}`);\n }\n logger.log(\"\");\n logger.log(\"(.mcp.json is never auto-upgraded — edit by hand if needed.)\");\n logger.log(\"\");\n\n if (!options.yes) {\n const { confirm } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"confirm\",\n message: \"Overwrite the file(s) above?\",\n default: true,\n },\n ]);\n if (!confirm) {\n logger.log(\"Cancelled.\");\n return;\n }\n }\n\n for (const s of toUpgrade) {\n if (!fs.existsSync(s.templatePath)) {\n logger.warning(` ! ${s.name} not in template — skipped`);\n continue;\n }\n await fs.copy(s.templatePath, s.targetPath, { overwrite: true });\n logger.success(` ✓ ${s.name}`);\n }\n\n logger.log(\"\");\n logger.success(\"Done. Restart your AI client to pick up the new context.\");\n}\n\n// ─── doctor ─────────────────────────────────────────────────────────────\n\nexport async function mcpDoctorCommand(\n options: McpOptions = {}\n): Promise<void> {\n const targetDir = resolveTargetDir(options);\n const templateDir = resolveDefaultTemplateDir();\n\n logger.header(\"OneX MCP doctor\");\n logger.log(`Target: ${targetDir}`);\n logger.log(\"\");\n\n // Check 1: theme dir\n if (!isThemeDir(targetDir)) {\n logger.error(\"Not an OneX theme directory (no theme.config.ts).\");\n process.exitCode = 1;\n return;\n }\n logger.success(\"theme.config.ts present\");\n\n // Check 2: .mcp.json registers onexthm\n const mcpJsonPath = path.join(targetDir, \".mcp.json\");\n if (!fs.existsSync(mcpJsonPath)) {\n logger.error(\".mcp.json missing — run `onexthm mcp setup`\");\n } else {\n try {\n const mcpJson = JSON.parse(fs.readFileSync(mcpJsonPath, \"utf-8\"));\n const servers = mcpJson?.mcpServers ?? {};\n if (servers.onexthm) {\n logger.success(\".mcp.json registers `onexthm`\");\n } else {\n logger.error(\".mcp.json does not register `onexthm`\");\n }\n if (servers.figma) {\n const arg = (servers.figma.args ?? []).join(\" \");\n if (arg.includes(\"__FIGMA_API_KEY__\")) {\n logger.warning(\n \"figma server uses placeholder API key — replace __FIGMA_API_KEY__\"\n );\n } else {\n logger.success(\".mcp.json registers `figma`\");\n }\n }\n } catch (err) {\n logger.error(`.mcp.json could not be parsed: ${(err as Error).message}`);\n }\n }\n\n // Check 3: AI context files. Skip .mcp.json byte-comparison — that file is\n // user-owned and the functional \"registers onexthm\" check above is the\n // real test. Comparing bytes against the template would always show false\n // positives for any user with a custom MCP config.\n const statuses = inspectFiles(templateDir, targetDir).filter(\n (s) => s.name !== \".mcp.json\"\n );\n for (const s of statuses) {\n if (!s.exists) {\n logger.warning(`${s.name} missing`);\n } else if (!s.identical) {\n logger.warning(`${s.name} is out of date — run \\`onexthm mcp upgrade\\``);\n } else {\n logger.success(`${s.name} up to date`);\n }\n }\n\n // Check 4: sections-registry.ts (the file the MCP tools patch)\n const registryPath = path.join(targetDir, \"sections-registry.ts\");\n if (fs.existsSync(registryPath)) {\n logger.success(\"sections-registry.ts present\");\n } else {\n logger.warning(\n \"sections-registry.ts missing — section tools won't auto-register\"\n );\n }\n}\n","#!/usr/bin/env node\n\nimport path from \"path\";\nimport os from \"os\";\nimport dotenv from \"dotenv\";\nimport { getProjectRoot } from \"./utils/file-helpers\";\n\n// Load .env files: cwd first, then project root, then global fallback (~/.onexthm/.env)\n// CWD-level (theme directory) takes priority\ndotenv.config({\n path: path.join(process.cwd(), \".env.local\"),\n override: true,\n} as any);\ndotenv.config({ path: path.join(process.cwd(), \".env\") } as any);\ntry {\n const projectRoot = getProjectRoot();\n // Only load project root if different from cwd (avoid double-loading)\n if (path.resolve(projectRoot) !== path.resolve(process.cwd())) {\n dotenv.config({\n path: path.join(projectRoot, \".env.local\"),\n } as any);\n dotenv.config({ path: path.join(projectRoot, \".env\") } as any);\n }\n} catch {\n // Not in a valid project directory — skip project-level .env\n}\ndotenv.config({\n path: path.join(os.homedir(), \".onexthm\", \".env\"),\n quiet: true,\n} as any);\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { createRequire } from \"module\";\nimport { initCommand } from \"./commands/init\";\nimport { createSectionCommand } from \"./commands/create-section\";\nimport { createBlockCommand } from \"./commands/create-block\";\nimport { createComponentCommand } from \"./commands/create-component\";\nimport { listCommand } from \"./commands/list\";\nimport { validateCommand } from \"./commands/validate\";\nimport { buildCommand } from \"./commands/build\";\nimport { packageCommand } from \"./commands/package\";\nimport { deployCommand } from \"./commands/deploy\";\nimport { uploadCommand } from \"./commands/upload\";\nimport { downloadCommand } from \"./commands/download\";\nimport { cloneCommand } from \"./commands/clone\";\nimport { devCommand } from \"./commands/dev\";\nimport { configCommand } from \"./commands/config\";\nimport { loginCommand } from \"./commands/login\";\nimport { logoutCommand } from \"./commands/logout\";\nimport { whoamiCommand } from \"./commands/whoami\";\nimport { publishCommand } from \"./commands/publish\";\nimport {\n mcpSetupCommand,\n mcpUpgradeCommand,\n mcpDoctorCommand,\n} from \"./commands/mcp\";\n\nconst require = createRequire(import.meta.url);\nconst { version } = require(\"../package.json\");\n\nconst program = new Command();\n\nprogram\n .name(\"onexthm\")\n .description(\"CLI tool for OneX theme development\")\n .version(version);\n\n// Init command\nprogram\n .command(\"init\")\n .description(\"Create a new OneX theme project\")\n .argument(\"[project-name]\", \"Name of the project\")\n .option(\n \"-t, --template <template>\",\n \"Template to use (default, minimal)\",\n \"default\"\n )\n .option(\"--no-install\", \"Skip installing dependencies\")\n .option(\"--git\", \"Initialize git repository\")\n .option(\"-y, --yes\", \"Skip prompts and use defaults\")\n .option(\n \"--env <env>\",\n \"Target environment: dev, staging, or prod (default: dev)\",\n \"dev\"\n )\n .action(initCommand);\n\n// Create section command\nprogram\n .command(\"create:section\")\n .alias(\"cs\")\n .description(\"Create a new section\")\n .argument(\"<name>\", \"Name of the section (e.g., hero, features)\")\n .option(\"-t, --theme <theme>\", \"Theme to create section in\")\n .option(\n \"-c, --category <category>\",\n \"Section category (headers, content, footers)\"\n )\n .option(\n \"--template <template>\",\n \"Initial template variant (default, minimal)\"\n )\n .action(createSectionCommand);\n\n// Create block command\nprogram\n .command(\"create:block\")\n .alias(\"cb\")\n .description(\"Create a new block\")\n .argument(\n \"<name>\",\n \"Name of the block (e.g., product-card, testimonial-item)\"\n )\n .option(\"-t, --theme <theme>\", \"Theme to create block in (optional)\")\n .action(createBlockCommand);\n\n// Create component command\nprogram\n .command(\"create:component\")\n .alias(\"cc\")\n .description(\"Create a new component\")\n .argument(\"<name>\", \"Name of the component (e.g., button, badge)\")\n .option(\"-t, --type <type>\", \"Component type (ui, layout, form)\")\n .action(createComponentCommand);\n\n// List command\nprogram\n .command(\"list\")\n .description(\"List available themes, sections, blocks, and components\")\n .option(\"-s, --sections\", \"List sections only\")\n .option(\"-b, --blocks\", \"List blocks only\")\n .option(\"-c, --components\", \"List components only\")\n .option(\"-t, --theme <theme>\", \"Filter by theme\")\n .action(listCommand);\n\n// Validate command\nprogram\n .command(\"validate\")\n .description(\"Validate theme structure and files\")\n .option(\"-t, --theme <theme>\", \"Theme to validate\")\n .option(\"-f, --fix\", \"Auto-fix issues if possible (not implemented yet)\")\n .action(validateCommand);\n\n// Dev command\nprogram\n .command(\"dev\")\n .description(\"Start dev server with live preview and hot reload\")\n .option(\"-t, --theme <theme>\", \"Theme to develop\")\n .option(\"-p, --port <port>\", \"Dev server port\", \"3456\")\n .option(\"--no-open\", \"Don't open browser automatically\")\n .action(devCommand);\n\n// Build command\nprogram\n .command(\"build\")\n .description(\"Build theme for production\")\n .option(\"-t, --theme <theme>\", \"Theme to build\")\n .option(\"-p, --production\", \"Production build with optimizations\")\n .option(\"-w, --watch\", \"Watch mode for development\")\n .action(buildCommand);\n\n// Package command\nprogram\n .command(\"package\")\n .description(\"Compile and package theme as distributable zip file\")\n .option(\"-t, --theme <theme>\", \"Theme to package\")\n .option(\"-o, --output <dir>\", \"Output directory for package\")\n .option(\"-n, --name <name>\", \"Custom package name\")\n .option(\"-m, --minify\", \"Minify compiled output\")\n .option(\"--skip-build\", \"Skip compilation step (use existing compiled theme)\")\n .action(packageCommand);\n\n// Deploy command\nprogram\n .command(\"deploy\")\n .description(\"Upload theme package to API server\")\n .option(\"-t, --theme <theme>\", \"Theme to deploy (finds latest package)\")\n .option(\"-p, --package <file>\", \"Specific package file to upload\")\n .option(\"--api-url <url>\", \"API server URL (default: http://localhost:3001)\")\n .option(\"-k, --api-key <key>\", \"API key for authentication\")\n .option(\n \"-e, --environment <env>\",\n \"Environment (production, staging, development)\"\n )\n .action(deployCommand);\n\n// Upload command — DEPRECATED. Use `publish` instead.\n// Kept registered so existing CI scripts get a clear migration message.\nprogram\n .command(\"upload\")\n .description(\"[deprecated] use `onexthm publish` instead\")\n .option(\"-t, --theme <theme>\", \"[deprecated] ignored\")\n .option(\"-b, --bucket <name>\", \"[deprecated] ignored\")\n .option(\"-v, --version <version>\", \"[deprecated] ignored\")\n .option(\"-e, --environment <env>\", \"[deprecated] ignored\")\n .option(\"--dry-run\", \"[deprecated] ignored\")\n .option(\"--skip-source\", \"[deprecated] ignored\")\n .option(\"--source-dir <dir>\", \"[deprecated] ignored\")\n .action(uploadCommand);\n\n// Download command\nprogram\n .command(\"download\")\n .description(\"Download a published theme via the website-api\")\n .option(\"-t, --theme-id <id>\", \"Theme ID to download\")\n .option(\n \"-v, --version <version>\",\n \"Theme version (default: latest)\",\n \"latest\"\n )\n .option(\n \"--env <env>\",\n \"Target environment: dev, staging, or prod (default: dev)\",\n \"dev\"\n )\n // --bucket is deprecated. Themes are now served via HTTP from the website-api Lambda.\n .option(\"-b, --bucket <name>\", \"[deprecated] ignored\")\n .option(\"-o, --output <dir>\", \"Output directory\", \"./active-theme\")\n .action(downloadCommand);\n\n// Clone command\nprogram\n .command(\"clone\")\n .description(\"Clone theme source code via the website-api\")\n .argument(\"<theme-name>\", \"Theme to clone\")\n .option(\n \"-v, --version <version>\",\n \"Theme version (default: latest)\",\n \"latest\"\n )\n .option(\"-n, --name <name>\", \"New theme name (skips interactive prompt)\")\n .option(\"-o, --output <dir>\", \"Output directory\")\n .option(\n \"--env <env>\",\n \"Target environment: dev, staging, or prod (default: dev)\",\n \"dev\"\n )\n // --bucket is deprecated. Source is now fetched via authenticated HTTP, not direct S3.\n .option(\"-b, --bucket <name>\", \"[deprecated] ignored\")\n .option(\"--no-install\", \"Skip running pnpm install after clone\")\n .action(cloneCommand);\n\n// Config command\nprogram\n .command(\"config\")\n .description(\"Configure OneX CLI credentials (AWS, API keys)\")\n .action(configCommand);\n\n// Auth commands\nprogram\n .command(\"login\")\n .description(\"Login to OneX platform\")\n .option(\n \"--env <env>\",\n \"Target environment: dev, staging, or prod (default: dev)\",\n \"dev\"\n )\n .action(loginCommand);\n\nprogram\n .command(\"logout\")\n .description(\"Logout from OneX platform\")\n .option(\n \"--env <env>\",\n \"Target environment: dev, staging, or prod (default: dev)\",\n \"dev\"\n )\n .action(logoutCommand);\n\nprogram\n .command(\"whoami\")\n .description(\"Show current logged-in developer\")\n .option(\n \"--env <env>\",\n \"Target environment: dev, staging, or prod (default: dev)\",\n \"dev\"\n )\n .action(whoamiCommand);\n\n// MCP / AI-context management\nconst mcpCmd = program\n .command(\"mcp\")\n .description(\"Manage MCP server registration and AI-context files\");\n\nmcpCmd\n .command(\"setup\")\n .description(\n \"Install .mcp.json + CLAUDE.md + AGENTS.md + .cursorrules into the current theme\"\n )\n .option(\"-y, --yes\", \"Skip confirmation prompts\")\n .action(mcpSetupCommand);\n\nmcpCmd\n .command(\"upgrade\")\n .description(\n \"Refresh AI-context files to the latest version from the bundled template\"\n )\n .option(\"-y, --yes\", \"Skip confirmation prompts\")\n .action(mcpUpgradeCommand);\n\nmcpCmd\n .command(\"doctor\")\n .description(\"Diagnose MCP setup in the current theme directory\")\n .action(mcpDoctorCommand);\n\n// Publish command (secure theme publishing)\nprogram\n .command(\"publish\")\n .description(\"Build, scan, and publish theme to marketplace (requires login)\")\n .option(\"-t, --theme <path>\", \"Theme directory path\")\n .option(\n \"--bump <type>\",\n \"Auto-bump version before publish (patch|minor|major)\"\n )\n .option(\n \"--env <env>\",\n \"Target environment: dev, staging, or prod (default: dev)\",\n \"dev\"\n )\n .option(\n \"--dry-run\",\n \"Build locally and print the schema-diff classification without publishing\"\n )\n .option(\n \"--confirm-defaults\",\n \"Confirm that changed section/block defaults should propagate to live sites\"\n )\n .option(\n \"--force\",\n \"Publish even when the diff gate detects a breaking change\"\n )\n .action(publishCommand);\n\n// Error handling\nprogram.configureOutput({\n writeErr: (str) => process.stderr.write(chalk.red(str)),\n});\n\nprogram.parse();\n"]}