@sudajs/cli 0.20.1 → 0.21.1
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/index.d.ts +14 -1
- package/dist/index.js +74 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/templates/theme/AGENTS.md +13 -318
- package/templates/theme/CLAUDE.md +3 -1
- package/templates/theme/README.md +13 -0
- package/templates/theme/docs/agent-guides/component-authoring.md +35 -0
- package/templates/theme-skill/SKILL.md +63 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/format.ts","../src/select.ts","../src/auth.ts","../src/index.ts"],"names":["path","host","z","packageRoot","error","esbuild","info","style","themeRef","require","theme"],"mappings":"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","file":"index.js","sourcesContent":["import pc from \"picocolors\";\n\nexport const style = {\n success: pc.green,\n warning: pc.yellow,\n error: pc.red,\n info: pc.cyan,\n url: pc.cyan,\n code: pc.bold,\n value: pc.bold,\n path: pc.magenta,\n selected: (value: string) => pc.bgCyan(pc.black(value)),\n};\n\nexport function success(message: string): string {\n return style.success(message);\n}\n\nexport function warning(message: string): string {\n return style.warning(message);\n}\n\nexport function error(message: string): string {\n return style.error(message);\n}\n\nexport function info(message: string): string {\n return style.info(message);\n}\n\nexport function themeRef(key: string, version: string): string {\n return style.value(`${key}@${version}`);\n}\n","import readline from \"node:readline\";\n\nimport { style, success } from \"./format\";\n\nexport interface SelectChoice {\n label: string;\n value: string;\n}\n\nexport type SelectPrompt = (\n message: string,\n choices: SelectChoice[],\n defaultValue: string | undefined,\n) => Promise<string>;\n\nexport const selectChoice: SelectPrompt = async (message, choices, defaultValue) => {\n if (choices.length === 0) {\n throw new Error(\"No choices are available.\");\n }\n\n const defaultIndex = Math.max(\n 0,\n choices.findIndex((choice) => choice.value === defaultValue),\n );\n const fallback = choices[defaultIndex]!;\n if (choices.length === 1 || !process.stdin.isTTY || !process.stdout.isTTY) {\n return fallback.value;\n }\n\n const input = process.stdin;\n const output = process.stdout;\n const wasRaw = input.isRaw;\n const wasFlowing = input.readableFlowing;\n let selectedIndex = defaultIndex;\n\n readline.emitKeypressEvents(input);\n input.setRawMode(true);\n input.resume();\n\n const render = (replace: boolean): void => {\n if (replace) {\n readline.moveCursor(output, 0, -(choices.length + 1));\n readline.cursorTo(output, 0);\n readline.clearScreenDown(output);\n }\n\n output.write(`${style.info(\"?\")} ${message}\\n`);\n for (const [index, choice] of choices.entries()) {\n if (index === selectedIndex) {\n output.write(`${style.info(\"❯\")} ${style.selected(` ${choice.label} `)}\\n`);\n } else {\n output.write(` ${choice.label}\\n`);\n }\n }\n };\n\n render(false);\n\n return new Promise<string>((resolve, reject) => {\n const cleanup = (): void => {\n input.off(\"keypress\", onKeypress);\n input.setRawMode(wasRaw);\n if (wasFlowing !== true) {\n input.pause();\n }\n };\n\n const finish = (): void => {\n readline.moveCursor(output, 0, -(choices.length + 1));\n readline.cursorTo(output, 0);\n readline.clearScreenDown(output);\n const selected = choices[selectedIndex]!;\n output.write(`${success(\"✔\")} ${message} ${style.url(selected.value)}\\n`);\n cleanup();\n resolve(selected.value);\n };\n\n const onKeypress = (\n _character: string | undefined,\n key: { ctrl?: boolean; name?: string },\n ): void => {\n if (key.ctrl === true && key.name === \"c\") {\n cleanup();\n reject(new Error(\"Host selection cancelled.\"));\n return;\n }\n if (key.name === \"return\" || key.name === \"enter\") {\n finish();\n return;\n }\n if (key.name === \"up\") {\n selectedIndex = (selectedIndex - 1 + choices.length) % choices.length;\n render(true);\n return;\n }\n if (key.name === \"down\") {\n selectedIndex = (selectedIndex + 1) % choices.length;\n render(true);\n }\n };\n\n input.on(\"keypress\", onKeypress);\n });\n};\n","import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { z } from \"zod\";\n\nimport { error, info, style, success, warning } from \"./format\";\nimport { selectChoice, type SelectChoice, type SelectPrompt } from \"./select\";\n\nexport const DEFAULT_HOST = \"app.sudayun.cn\";\nexport const GLOBAL_HOST = \"app.sudaweb.ai\";\n\nconst officialHostChoices: SelectChoice[] = [\n { label: `国内(${DEFAULT_HOST})`, value: DEFAULT_HOST },\n { label: `海外(${GLOBAL_HOST})`, value: GLOBAL_HOST },\n];\n\nconst credentialSchema = z.object({\n sessionToken: z.string().min(1),\n});\n\nconst authStoreSchema = z.object({\n currentHost: z.string().min(1).optional(),\n hosts: z.record(z.string().min(1), credentialSchema),\n});\n\nconst legacyAuthConfigSchema = z.object({\n sessionToken: z.string().min(1),\n host: z.string().min(1),\n});\n\ntype AuthStore = z.infer<typeof authStoreSchema>;\n\nexport interface AuthConfig {\n /**\n * The `suda_<...>` API-token plaintext issued by `/api/cli-auth/poll` and\n * verified by the workspace `requireApiAuth` helper. The `sessionToken`\n * key name is a historical artefact; the value is the API token itself.\n */\n sessionToken: string;\n host: string;\n baseUrl: string;\n}\n\nfunction getConfigPath(): string {\n return path.join(os.homedir(), \".config\", \"suda\", \"config.json\");\n}\n\nexport function normalizeHost(value: string): string {\n const host = value.trim();\n if (host.length === 0 || host.includes(\"://\") || /[/?#@]/.test(host)) {\n throw new Error(`Invalid host \"${value}\". Use a bare host name such as ${DEFAULT_HOST}.`);\n }\n\n try {\n return new URL(`https://${host}`).host;\n } catch {\n throw new Error(`Invalid host \"${value}\". Use a bare host name such as ${DEFAULT_HOST}.`);\n }\n}\n\nfunction protocolForHost(host: string): \"http\" | \"https\" {\n const hostname = new URL(`https://${host}`).hostname;\n return hostname === \"localhost\" || hostname === \"127.0.0.1\" ? \"http\" : \"https\";\n}\n\nfunction baseUrlForHost(host: string): string {\n return `${protocolForHost(host)}://${host}`;\n}\n\nfunction parseAuthStore(value: unknown): AuthStore {\n const current = authStoreSchema.safeParse(value);\n if (current.success) {\n const hosts: AuthStore[\"hosts\"] = {};\n for (const [host, credential] of Object.entries(current.data.hosts)) {\n hosts[normalizeHost(host)] = credential;\n }\n\n const store: AuthStore = { hosts };\n if (current.data.currentHost !== undefined) {\n store.currentHost = normalizeHost(current.data.currentHost);\n }\n return store;\n }\n\n const legacy = legacyAuthConfigSchema.parse(value);\n const host = normalizeHost(legacy.host);\n return {\n currentHost: host,\n hosts: {\n [host]: { sessionToken: legacy.sessionToken },\n },\n };\n}\n\nasync function readAuthStore(): Promise<AuthStore | null> {\n try {\n const content = await fs.readFile(getConfigPath(), \"utf8\");\n return parseAuthStore(JSON.parse(content) as unknown);\n } catch {\n return null;\n }\n}\n\nasync function writeAuthStore(store: AuthStore): Promise<void> {\n const validated = authStoreSchema.parse(store);\n const configPath = getConfigPath();\n await fs.mkdir(path.dirname(configPath), { recursive: true });\n await fs.chmod(path.dirname(configPath), 0o700).catch(() => undefined);\n await fs.writeFile(configPath, `${JSON.stringify(validated, null, 2)}\\n`, { mode: 0o600 });\n await fs.chmod(configPath, 0o600).catch(() => undefined);\n}\n\nasync function removeConfigFile(): Promise<void> {\n try {\n await fs.unlink(getConfigPath());\n } catch (err: unknown) {\n if (err instanceof Error && \"code\" in err && (err as { code: string }).code !== \"ENOENT\") {\n throw err;\n }\n }\n}\n\nasync function saveCredential(hostValue: string, sessionToken: string): Promise<AuthConfig> {\n const host = normalizeHost(hostValue);\n const store = (await readAuthStore()) ?? { hosts: {} };\n store.hosts[host] = credentialSchema.parse({ sessionToken });\n store.currentHost = host;\n await writeAuthStore(store);\n return { host, sessionToken, baseUrl: baseUrlForHost(host) };\n}\n\nasync function removeCredential(hostValue: string): Promise<void> {\n const host = normalizeHost(hostValue);\n const store = await readAuthStore();\n if (!store?.hosts[host]) {\n return;\n }\n\n delete store.hosts[host];\n if (store.currentHost === host) {\n delete store.currentHost;\n }\n\n if (Object.keys(store.hosts).length === 0) {\n await removeConfigFile();\n return;\n }\n await writeAuthStore(store);\n}\n\nfunction hostLabel(host: string): string {\n if (host === DEFAULT_HOST) {\n return `国内(${host})`;\n }\n if (host === GLOBAL_HOST) {\n return `海外(${host})`;\n }\n return host;\n}\n\nfunction createHostChoices(hosts: string[]): SelectChoice[] {\n return hosts.map((host) => ({ label: hostLabel(host), value: host }));\n}\n\nasync function resolveLoginHost(\n hostValue?: string,\n prompt: SelectPrompt = selectChoice,\n): Promise<string> {\n if (hostValue !== undefined) {\n return normalizeHost(hostValue);\n }\n const store = await readAuthStore();\n const hosts = new Set(officialHostChoices.map((choice) => choice.value));\n for (const host of Object.keys(store?.hosts ?? {})) {\n hosts.add(host);\n }\n const defaultHost = store?.currentHost ?? DEFAULT_HOST;\n return prompt(\"Select a SudaCloud host to log in to:\", createHostChoices([...hosts]), defaultHost);\n}\n\nasync function resolveAuthenticatedHost(\n hostValue: string | undefined,\n message: string,\n prompt: SelectPrompt = selectChoice,\n): Promise<string | undefined> {\n if (hostValue !== undefined) {\n return normalizeHost(hostValue);\n }\n\n const store = await readAuthStore();\n const hosts = Object.keys(store?.hosts ?? {}).sort();\n if (hosts.length === 0) {\n return undefined;\n }\n return prompt(message, createHostChoices(hosts), store?.currentHost ?? hosts[0]);\n}\n\nexport async function readAuthConfig(hostValue?: string): Promise<AuthConfig | null> {\n const store = await readAuthStore();\n if (!store) {\n return null;\n }\n\n const host = hostValue !== undefined ? normalizeHost(hostValue) : store.currentHost;\n if (host === undefined) {\n return null;\n }\n const credential = store.hosts[host];\n if (!credential) {\n return null;\n }\n return {\n host,\n sessionToken: credential.sessionToken,\n baseUrl: baseUrlForHost(host),\n };\n}\n\nexport async function requireAuthConfig(hostValue?: string): Promise<AuthConfig> {\n const config = await readAuthConfig(hostValue);\n if (config) {\n return config;\n }\n\n if (hostValue !== undefined) {\n const host = normalizeHost(hostValue);\n throw new Error(\n `Not logged in to ${host}. Run \\`suda auth login --host ${host}\\` to authenticate first.`,\n );\n }\n throw new Error(\n \"No current authenticated host. Run `suda auth login` or `suda host switch <host>` first.\",\n );\n}\n\nexport async function selectAuthConfig(\n hostValue: string | undefined,\n message: string,\n): Promise<AuthConfig> {\n const host = await resolveAuthenticatedHost(hostValue, message);\n return requireAuthConfig(host);\n}\n\n/**\n * Wrapper around `fetch` that attaches the selected host's CLI token and\n * removes only that credential when the workspace rejects it.\n */\nexport async function cliAuthFetch(\n pathname: string,\n init: RequestInit = {},\n hostValue?: string,\n): Promise<Response> {\n let config: AuthConfig;\n try {\n config = await requireAuthConfig(hostValue);\n } catch (err) {\n throw new CliAuthExpiredError(\n \"unauthorized\",\n err instanceof Error ? err.message : \"Not logged in. Run `suda auth login` first.\",\n );\n }\n\n const headers = new Headers(init.headers);\n headers.set(\"Authorization\", `Bearer ${config.sessionToken}`);\n\n const res = await fetch(`${config.baseUrl}${pathname}`, { ...init, headers });\n if (res.status === 401) {\n const body = (await res.clone().json().catch(() => ({}))) as {\n error?: string;\n message?: string;\n };\n const code = (\n [\"token_invalid\", \"token_revoked\", \"token_expired\"].includes(body.error ?? \"\")\n ? (body.error as \"token_invalid\" | \"token_revoked\" | \"token_expired\")\n : \"unauthorized\"\n );\n await removeCredential(config.host);\n throw new CliAuthExpiredError(\n code,\n body.message ??\n `Authentication for ${config.host} is no longer valid. Run \\`suda auth login --host ${config.host}\\` to authenticate again.`,\n );\n }\n return res;\n}\n\nexport class CliAuthExpiredError extends Error {\n readonly code: \"token_invalid\" | \"token_revoked\" | \"token_expired\" | \"unauthorized\";\n constructor(\n code: CliAuthExpiredError[\"code\"],\n message: string,\n ) {\n super(message);\n this.name = \"CliAuthExpiredError\";\n this.code = code;\n }\n}\n\nexport async function login(hostValue?: string): Promise<void> {\n const host = await resolveLoginHost(hostValue);\n const baseUrl = baseUrlForHost(host);\n\n console.log(`Requesting device authorization from ${style.url(baseUrl)}...`);\n\n const deviceRes = await fetch(`${baseUrl}/api/cli-auth/device`, {\n method: \"POST\",\n });\n\n if (!deviceRes.ok) {\n throw new Error(`Failed to initialize auth: ${deviceRes.statusText}`);\n }\n\n const { deviceCode, userCode, verificationUri, interval, expiresIn } = (await deviceRes.json()) as {\n deviceCode: string;\n userCode: string;\n verificationUri: string;\n expiresIn: number;\n interval: number;\n };\n\n const authUrl = `${verificationUri}?code=${userCode}`;\n console.log(\"\\nPlease open the following URL in your browser to authorize Suda CLI:\\n\");\n console.log(` ${style.url(authUrl)}\\n`);\n console.log(`Your confirmation code is: ${style.code(userCode)}\\n`);\n try {\n const open = (await import(\"open\")).default;\n await open(authUrl);\n } catch {\n // Browser opening is best-effort; the URL remains visible in the terminal.\n }\n\n const pollInterval = (interval || 5) * 1000;\n const timeoutSeconds = expiresIn || 300;\n const deadline = Date.now() + timeoutSeconds * 1000;\n\n console.log(info(\"Waiting for authorization...\"));\n\n while (Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n\n const pollRes = await fetch(`${baseUrl}/api/cli-auth/poll`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ deviceCode }),\n });\n\n const data = (await pollRes.json()) as { status?: string; token?: string; error?: string };\n\n if (pollRes.ok && data.status === \"approved\" && data.token) {\n await saveCredential(host, data.token);\n console.log(success(`Successfully authorized ${style.url(host)} and set it as current.`));\n return;\n }\n\n if (data.error === \"authorization_pending\") {\n continue;\n }\n\n throw new Error(`Authorization failed: ${data.error || \"Unknown error\"}`);\n }\n\n throw new Error(\"Authorization timed out.\");\n}\n\nexport async function status(hostValue?: string): Promise<void> {\n let config: AuthConfig;\n try {\n config = await selectAuthConfig(hostValue, \"Select a host to check:\");\n } catch (err) {\n console.log(warning(err instanceof Error ? err.message : \"Not logged in.\"));\n return;\n }\n\n let res: Response;\n try {\n res = await cliAuthFetch(\"/api/cli-auth/whoami\", {}, config.host);\n } catch (err) {\n if (err instanceof CliAuthExpiredError) {\n console.log(warning(err.message));\n return;\n }\n console.error(error(`Failed to connect to ${config.host}.`));\n return;\n }\n\n if (!res.ok) {\n console.error(\n error(\n `Failed to verify session on ${config.host} (${res.status} ${res.statusText}). Try again later.`,\n ),\n );\n return;\n }\n\n const data = (await res.json()) as {\n user?: { email?: string | null; name?: string | null };\n };\n const label = data.user?.email ?? data.user?.name ?? \"your account\";\n console.log(success(`Logged in as ${style.value(label)} on ${style.url(config.host)}`));\n}\n\nexport async function logout(hostValue?: string): Promise<void> {\n let config: AuthConfig;\n try {\n config = await selectAuthConfig(hostValue, \"Select a host to log out from:\");\n } catch (err) {\n console.log(warning(err instanceof Error ? err.message : \"Not logged in.\"));\n return;\n }\n\n try {\n await cliAuthFetch(\"/api/cli-auth/revoke\", { method: \"POST\" }, config.host);\n } catch (err) {\n if (err instanceof CliAuthExpiredError) {\n console.log(warning(`Logged out from ${config.host} (token was already invalid).`));\n return;\n }\n console.warn(\n warning(\n `Could not contact ${config.host} to revoke token. Its credential will be cleared locally only.`,\n ),\n );\n }\n\n await removeCredential(config.host);\n console.log(success(`Logged out from ${style.url(config.host)} successfully.`));\n}\n\nexport async function showCurrentHost(): Promise<void> {\n const store = await readAuthStore();\n if (!store?.currentHost || !store.hosts[store.currentHost]) {\n console.log(\n warning(\"No current authenticated host. Run `suda auth login` or `suda host switch <host>` first.\"),\n );\n return;\n }\n console.log(`Current host: ${style.url(store.currentHost)}`);\n}\n\nexport async function listHosts(): Promise<void> {\n const store = await readAuthStore();\n const hosts = Object.keys(store?.hosts ?? {}).sort();\n if (hosts.length === 0) {\n console.log(warning(\"No authenticated hosts. Run `suda auth login` first.\"));\n return;\n }\n\n console.log(\"Authenticated hosts:\");\n for (const host of hosts) {\n const marker = host === store?.currentHost ? success(\"*\") : \" \";\n const suffix = host === store?.currentHost ? style.value(\" (current)\") : \"\";\n console.log(` ${marker} ${style.url(host)}${suffix}`);\n }\n}\n\nexport async function switchHost(hostValue: string): Promise<void> {\n const host = normalizeHost(hostValue);\n const store = await readAuthStore();\n if (!store?.hosts[host]) {\n throw new Error(\n `Not logged in to ${host}. Run \\`suda auth login --host ${host}\\` to authenticate first.`,\n );\n }\n store.currentHost = host;\n await writeAuthStore(store);\n console.log(success(`Switched current host to ${style.url(host)}.`));\n}\n\nexport const __authTestUtils = {\n readAuthStore,\n removeCredential,\n resolveAuthenticatedHost,\n resolveLoginHost,\n saveCredential,\n writeAuthStore,\n};\n","#!/usr/bin/env node\n\nimport { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { copyFile, mkdir, readFile, readdir, rm, stat, writeFile } from \"node:fs/promises\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nimport type {\n AgentComponentOutput,\n ThemeAgentManifest,\n ThemeModule,\n ThemeStarterPage,\n} from \"@sudajs/theme-engine\";\nimport {\n agentValidationResultSchema,\n checkThemeModule,\n createThemeDesignCssVariables,\n createThemeDesignFontStylesheetUrl,\n createSudaPageAgentRuntime,\n createThemeAgentManifest,\n formatThemeCheckResult,\n findThemeDesignSystemFieldName,\n resolveThemeDesignTokens,\n themeDesignSystemSchema,\n} from \"@sudajs/theme-engine\";\nimport type {\n extractLayoutChrome as extractLayoutChromeFn,\n ResolveAssetPathOptions,\n resolveAssetPath as resolveAssetPathFn,\n ThemeRender as ThemeRenderFn,\n ThemeRenderMetadata,\n} from \"@sudajs/theme-engine/server\";\nimport {\n runWithThemePreviewLocale,\n themeManifestSchema,\n type ThemeLocaleMessages,\n type ThemePreviewLocaleMessages,\n} from \"@sudajs/theme-engine/server\";\nimport { Command } from \"commander\";\nimport { build as esbuild, type Plugin } from \"esbuild\";\nimport { CircleCheck, Pencil } from \"lucide-react\";\nimport { createElement, type createElement as createElementFn } from \"react\";\nimport {\n renderToStaticMarkup,\n type renderToString as renderToStringFn,\n} from \"react-dom/server\";\nimport { z } from \"zod\";\n\nimport {\n listHosts,\n login,\n logout,\n requireAuthConfig,\n selectAuthConfig,\n showCurrentHost,\n status,\n switchHost,\n} from \"./auth\";\nimport { error as formatError, info, style, success, themeRef, warning } from \"./format\";\n\nconst THEME_NAME_PATTERN = /^[A-Za-z0-9_-]+$/;\nconst THEME_KEY_PATTERN = /^[a-z0-9][a-z0-9-]*$/;\n\ninterface ValidatedTheme {\n root: string;\n module: ThemeModule;\n serverEntryPath: string;\n clientEntryPath: string | null;\n stylesheetPath: string | null;\n}\n\ninterface UploadFile {\n absolutePath: string;\n relativePath: string;\n contentType: string;\n}\n\ninterface ThemeRootOptions {\n themeRoot?: string | undefined;\n}\n\ntype BuildOptions = ThemeRootOptions;\n\ninterface CheckOptions extends ThemeRootOptions {\n skipBuild?: boolean;\n}\n\ninterface PublishOptions extends ThemeRootOptions {\n skipBuild?: boolean;\n force?: boolean;\n host?: string;\n}\n\ninterface ViteModule {\n build: (config: Record<string, unknown>) => Promise<unknown>;\n createServer: (config: Record<string, unknown>) => Promise<ViteDevServer>;\n}\n\ninterface ViteDevServer {\n middlewares: {\n use: (\n handler: (\n request: IncomingMessage,\n response: ServerResponse,\n next: () => void,\n ) => void,\n ) => void;\n };\n ssrLoadModule: (url: string) => Promise<{ default?: ThemeModule }>;\n transformIndexHtml: (url: string, html: string) => Promise<string>;\n listen: (port?: number) => Promise<ViteDevServer>;\n close: () => Promise<void>;\n resolvedUrls?: { local: string[]; network: string[] };\n moduleGraph: { invalidateAll: () => void };\n}\n\ninterface AgentThemeOptions extends ThemeRootOptions {\n projectId?: string | undefined;\n version?: string | undefined;\n example?: boolean | undefined;\n}\n\ninterface AgentPageCreateOptions extends AgentThemeOptions {\n title: string;\n slug: string;\n theme: string;\n input: string;\n home?: boolean | undefined;\n}\n\ninterface AgentProjectCreateOptions {\n name: string;\n siteDescription: string;\n}\n\ninterface AgentProjectSummary {\n projectId: string;\n name: string;\n defaultDomain: string | null;\n role: string;\n isOwner: boolean;\n activeThemeKey: string | null;\n activeThemeVersion: string | null;\n}\n\ninterface AgentProjectCreated {\n success: true;\n projectId: string;\n name: string;\n defaultDomain: string | null;\n dashboardUrl: string;\n}\n\ninterface ThemeCatalogItem {\n key: string;\n name: string;\n version: string;\n description?: string | null | undefined;\n categories?: string[] | undefined;\n preview?: string | undefined;\n active?: boolean | undefined;\n}\n\ninterface CliAuthContext {\n baseUrl: string;\n token: string;\n}\n\ntype FetchJsonFn = typeof fetchJson;\n\nconst createPageDraftOutputSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"created\").describe(\"The page draft was created.\"),\n pageId: z.string().describe(\"New page id.\"),\n }),\n z.object({\n status: z.literal(\"invalid\").describe(\"The page content failed validation.\"),\n valid: z.literal(false),\n issues: z.array(\n z.object({\n path: z.string(),\n message: z.string(),\n }),\n ),\n }),\n]);\n\nconst updatePageDraftOutputSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"updated\").describe(\"The page draft was updated.\"),\n pageId: z.string().describe(\"Existing page id.\"),\n }),\n z.object({\n status: z.literal(\"invalid\").describe(\"The page content failed validation.\"),\n valid: z.literal(false),\n issues: z.array(\n z.object({\n path: z.string(),\n message: z.string(),\n }),\n ),\n }),\n]);\n\nconst destructivePageOperationOutputSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"needs_confirmation\"),\n projectId: z.string(),\n slug: z.string(),\n impact: z.string(),\n }),\n z.object({\n status: z.enum([\"deleted\", \"published\"]),\n projectId: z.string(),\n slug: z.string(),\n pageId: z.string(),\n }),\n]);\n\nconst activateThemeOutputSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"needs_confirmation\"),\n projectId: z.string(),\n themeKey: z.string(),\n themeVersion: z.string().nullable(),\n impact: z.string(),\n }),\n z.object({\n status: z.literal(\"activated\"),\n projectId: z.string(),\n themeKey: z.string(),\n themeVersion: z.string().nullable(),\n }),\n]);\n\nconst contactOptionSchema = z.object({ label: z.string().min(1).max(80), value: z.string().min(1).max(80) });\n\nconst contactFieldSchema = z.object({\n id: z\n .string()\n .trim()\n .min(1)\n .max(48)\n .regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/),\n type: z.enum([\"text\", \"textarea\", \"checkbox\", \"radio\", \"select\"]),\n label: z.string().trim().min(1).max(120),\n placeholder: z.string().trim().max(160).optional(),\n required: z.boolean().default(false),\n options: z.array(contactOptionSchema).default([]),\n validation: z\n .object({\n format: z.enum([\"email\"]).optional(),\n maxLength: z.number().int().min(1).max(5000).optional(),\n })\n .default({}),\n});\n\nfunction addUniqueContactIssue<T extends Record<string, unknown>>(\n items: T[],\n collectionName: string,\n key: keyof T,\n ctx: z.RefinementCtx,\n prefix: Array<string | number> = [],\n) {\n const seen = new Set<unknown>();\n for (const [index, item] of items.entries()) {\n const value = item[key];\n if (value === undefined || value === null || value === \"\") continue;\n if (seen.has(value)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate ${String(key)} in ${collectionName}.`,\n path: [...prefix, index, key as string],\n });\n continue;\n }\n seen.add(value);\n }\n}\n\nconst contactFieldsSchema = z.array(contactFieldSchema).superRefine((fields, ctx) => {\n addUniqueContactIssue(fields, \"fields\", \"id\", ctx);\n for (const [index, field] of fields.entries()) {\n if ((field.type === \"radio\" || field.type === \"select\") && field.options.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `${field.type} fields require at least one option.`,\n path: [index, \"options\"],\n });\n }\n addUniqueContactIssue(field.options, \"options\", \"value\", ctx, [index, \"options\"]);\n }\n});\n\nconst contactEmailNotificationUpdateSchema = z.object({\n id: z.string().trim().min(1).max(48),\n type: z.literal(\"email\"),\n enabled: z.boolean().default(true),\n label: z.string().trim().min(1).max(80),\n recipients: z.array(z.string().trim().email()).min(1),\n});\n\nconst contactChatNotificationUpdateSchema = z.object({\n id: z.string().trim().min(1).max(48),\n type: z.enum([\"slack\", \"wecom\", \"feishu\", \"dingtalk\"]),\n enabled: z.boolean().default(true),\n label: z.string().trim().min(1).max(80),\n webhookUrl: z.string().trim().url().optional(),\n});\n\nconst contactNotificationUpdateSchema = z.discriminatedUnion(\"type\", [\n contactEmailNotificationUpdateSchema,\n contactChatNotificationUpdateSchema,\n]);\n\nconst contactWebhookUpdateSchema = z.object({\n id: z.string().trim().min(1).max(48),\n enabled: z.boolean().default(true),\n label: z.string().trim().min(1).max(80),\n event: z.literal(\"contact.submitted\").default(\"contact.submitted\"),\n url: z.string().trim().url().optional(),\n});\n\nconst updateContactFormInputSchema = z.object({\n projectId: z.string().min(1),\n enabled: z.boolean().optional(),\n title: z.string().trim().min(1).max(120).optional(),\n successMessage: z.string().trim().min(1).max(240).optional(),\n submitLabel: z.string().trim().min(1).max(80).optional(),\n fields: contactFieldsSchema.optional(),\n notifications: z.array(contactNotificationUpdateSchema).optional(),\n webhooks: z.array(contactWebhookUpdateSchema).optional(),\n confirm: z.boolean().optional(),\n});\n\nconst contactFormViewSchema = z.object({\n enabled: z.boolean(),\n title: z.string(),\n successMessage: z.string(),\n submitLabel: z.string(),\n fields: z.array(contactFieldSchema),\n notifications: z.array(\n z.discriminatedUnion(\"type\", [\n z.object({\n id: z.string(),\n type: z.literal(\"email\"),\n enabled: z.boolean(),\n label: z.string(),\n recipients: z.array(z.string()),\n }),\n z.object({\n id: z.string(),\n type: z.enum([\"slack\", \"wecom\", \"feishu\", \"dingtalk\"]),\n enabled: z.boolean(),\n label: z.string(),\n webhookUrlMasked: z.string().nullable(),\n }),\n ]),\n ),\n webhooks: z.array(\n z.object({\n id: z.string(),\n enabled: z.boolean(),\n label: z.string(),\n event: z.literal(\"contact.submitted\"),\n urlMasked: z.string().nullable(),\n }),\n ),\n limits: z.object({\n maxNotificationChannels: z.number(),\n maxWebhooks: z.number(),\n }),\n features: z.object({\n contactNotifications: z.boolean(),\n contactWebhooks: z.boolean(),\n }),\n});\n\nconst contactFormOutputSchema = z.object({\n contactForm: contactFormViewSchema,\n});\n\nconst updateContactFormOutputSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"needs_confirmation\"),\n projectId: z.string(),\n impact: z.string(),\n draft: updateContactFormInputSchema.omit({ confirm: true }),\n }),\n z.object({\n status: z.literal(\"updated\"),\n projectId: z.string(),\n contactForm: contactFormViewSchema,\n }),\n]);\n\nconst themeSettingsViewSchema = z.object({\n themeKey: z.string(),\n themeVersion: z.string(),\n designSystem: themeDesignSystemSchema,\n rootProps: z.record(z.unknown()),\n schema: z.unknown(),\n});\n\nconst themeSettingsOutputSchema = z.object({\n themeSettings: themeSettingsViewSchema,\n});\n\nconst updateThemeSettingsInputSchema = z.object({\n projectId: z.string().min(1),\n rootProps: z.record(z.unknown()),\n confirm: z.boolean().optional(),\n});\n\nconst updateThemeSettingsOutputSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"needs_confirmation\"),\n projectId: z.string(),\n impact: z.string(),\n draft: updateThemeSettingsInputSchema.omit({ confirm: true }),\n }),\n z.object({\n status: z.literal(\"updated\"),\n projectId: z.string(),\n themeSettings: themeSettingsViewSchema,\n }),\n]);\n\n// Mirrors apps/workspace/app/onboarding/constants.ts so external AI tools see\n// the same input bounds as the in-app onboarding form.\nconst PROJECT_NAME_MIN_LENGTH = 1;\nconst PROJECT_NAME_MAX_LENGTH = 80;\nconst PROJECT_DESCRIPTION_MIN_LENGTH = 1;\nconst PROJECT_DESCRIPTION_MAX_LENGTH = 300;\n\n// Single source of truth for the create_project input shape, reused by both\n// the MCP `create_project` tool and the `suda agent project create` command\n// so the two entry points cannot drift on bounds or trim semantics.\nconst createProjectInputSchema = z.object({\n name: z.string().trim().min(PROJECT_NAME_MIN_LENGTH).max(PROJECT_NAME_MAX_LENGTH),\n siteDescription: z\n .string()\n .trim()\n .min(PROJECT_DESCRIPTION_MIN_LENGTH)\n .max(PROJECT_DESCRIPTION_MAX_LENGTH),\n});\n\nconst projectSummarySchema = z.object({\n projectId: z.string(),\n name: z.string(),\n defaultDomain: z.string().nullable(),\n role: z.string(),\n isOwner: z.boolean(),\n activeThemeKey: z.string().nullable(),\n activeThemeVersion: z.string().nullable(),\n});\n\nconst listProjectsOutputSchema = z.object({\n projects: z.array(projectSummarySchema),\n});\n\nconst createProjectOutputSchema = z.object({\n projectId: z.string(),\n name: z.string(),\n defaultDomain: z.string().nullable(),\n dashboardUrl: z.string(),\n});\n\nconst packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"..\");\nconst themeTemplateRoot = path.join(packageRoot, \"templates\", \"theme\");\n\nfunction createHostReactShimPlugin(): Plugin {\n return {\n name: \"suda-host-react-shim\",\n setup(build) {\n build.onResolve({ filter: /^react$/ }, () => ({\n path: \"react-host-shim\",\n namespace: \"suda-shim\",\n }));\n build.onResolve({ filter: /^react\\/jsx-runtime$/ }, () => ({\n path: \"react-jsx-runtime-host-shim\",\n namespace: \"suda-shim\",\n }));\n build.onResolve({ filter: /^react-dom$/ }, () => ({\n path: \"react-dom-host-shim\",\n namespace: \"suda-shim\",\n }));\n build.onResolve({ filter: /^react-dom\\/client$/ }, () => ({\n path: \"react-dom-client-host-shim\",\n namespace: \"suda-shim\",\n }));\n build.onLoad({ filter: /^react-host-shim$/, namespace: \"suda-shim\" }, () => ({\n loader: \"js\",\n contents: `\nconst React = globalThis.__SUDA_REACT__;\nif (!React) {\n throw new Error(\"Missing host React runtime (__SUDA_REACT__).\");\n}\nexport default React;\nexport const {\n Children,\n Component,\n Fragment,\n Profiler,\n PureComponent,\n StrictMode,\n Suspense,\n cloneElement,\n createContext,\n createElement,\n createRef,\n forwardRef,\n isValidElement,\n lazy,\n memo,\n startTransition,\n use,\n useActionState,\n useCallback,\n useContext,\n useDeferredValue,\n useEffect,\n useId,\n useImperativeHandle,\n useInsertionEffect,\n useLayoutEffect,\n useMemo,\n useOptimistic,\n useReducer,\n useRef,\n useState,\n useSyncExternalStore,\n useTransition,\n version,\n} = React;\n`,\n }));\n build.onLoad(\n {\n filter: /^react-jsx-runtime-host-shim$/,\n namespace: \"suda-shim\",\n },\n () => ({\n loader: \"js\",\n contents: `\nconst runtime = globalThis.__SUDA_REACT_JSX_RUNTIME__;\nif (!runtime) {\n throw new Error(\"Missing host React JSX runtime (__SUDA_REACT_JSX_RUNTIME__).\");\n}\nexport const { Fragment, jsx, jsxs, jsxDEV } = runtime;\n`,\n }),\n );\n build.onLoad({ filter: /^react-dom-host-shim$/, namespace: \"suda-shim\" }, () => ({\n loader: \"js\",\n contents: `\nconst ReactDOM = globalThis.__SUDA_REACT_DOM__;\nif (!ReactDOM) {\n throw new Error(\"Missing host React DOM runtime (__SUDA_REACT_DOM__).\");\n}\nexport default ReactDOM;\nexport const {\n createPortal,\n flushSync,\n preconnect,\n prefetchDNS,\n preinit,\n preinitModule,\n preload,\n preloadModule,\n requestFormReset,\n unstable_batchedUpdates,\n useFormState,\n useFormStatus,\n version,\n} = ReactDOM;\n`,\n }));\n build.onLoad({ filter: /^react-dom-client-host-shim$/, namespace: \"suda-shim\" }, () => ({\n loader: \"js\",\n contents: `\nconst ReactDOMClient = globalThis.__SUDA_REACT_DOM_CLIENT__;\nif (!ReactDOMClient) {\n throw new Error(\"Missing host React DOM client runtime (__SUDA_REACT_DOM_CLIENT__).\");\n}\nexport default ReactDOMClient;\nexport const { createRoot, hydrateRoot, version } = ReactDOMClient;\n`,\n }));\n },\n };\n}\n\nfunction createRejectEditorRuntimeDependencyPlugin(): Plugin {\n return {\n name: \"suda-reject-editor-runtime-dependency\",\n setup(build) {\n build.onResolve({ filter: /^@puckeditor\\/(?:core|plugin-ai)(?:\\/.*)?$/ }, (args) => ({\n errors: [\n {\n text: `${args.path} is an editor dependency and cannot be imported by the public theme client runtime.`,\n },\n ],\n }));\n },\n };\n}\n\nfunction createHostThemeRuntimeShimPlugin(): Plugin {\n return {\n name: \"suda-host-theme-runtime-shim\",\n setup(build) {\n build.onResolve({ filter: /^@sudajs\\/theme-engine\\/runtime$/ }, () => ({\n path: \"theme-runtime-host-shim\",\n namespace: \"suda-shim\",\n }));\n build.onLoad({ filter: /^theme-runtime-host-shim$/, namespace: \"suda-shim\" }, () => ({\n loader: \"js\",\n contents: `\nconst ThemeRuntime = globalThis.__SUDA_THEME_RUNTIME__;\nif (!ThemeRuntime) {\n throw new Error(\"Missing host theme runtime (__SUDA_THEME_RUNTIME__).\");\n}\nexport const {\n SudaIcon,\n SudaLucideIcon,\n getSudaSimpleIconSlug,\n isSudaSimpleIconName,\n normalizeSudaIconName,\n isSudaLucideIconName,\n normalizeSudaLucideIconName,\n toSudaSimpleIconName,\n colorSchemeField,\n createColorSchemeDefault,\n createThemeCssVariables,\n designSystemField,\n resolveColorSchemeTokens,\n SUDA_COLOR_TOKEN_KEYS,\n createThemeDesignCssVariables,\n createThemeDesignDefault,\n createThemeDesignFontStylesheetUrl,\n resolveThemeDesignTokens,\n SUDA_CUSTOM_DESIGN_PRESET_ID,\n SUDA_DESIGN_COLOR_KEYS,\n SUDA_DESIGN_RADIUS_KEYS,\n SUDA_DESIGN_TYPOGRAPHY_KEYS,\n SUDA_THEME_FONT_FAMILIES,\n compileSudaBlockSlots,\n isSudaLocalBlockComponent,\n SUDA_LOCAL_BLOCK_CATEGORY,\n SUDA_LOCAL_BLOCK_TYPE_PREFIX,\n cmsPaginationUrl,\n getIcpRecord,\n getPublicSecurityRecord,\n getCmsContent,\n getContactForm,\n getPostResource,\n getWhiteLabel,\n resolveAsset,\n postResourceKey,\n getPageSlot,\n THEME_PAGE_SLOT,\n createThemeAsset,\n createThemeAssetPath,\n createThemeAssetResolver,\n resolveThemeClientRuntimeUrl,\n resolveThemeRuntimeUrl,\n resolveAssetPath,\n THEME_CLIENT_RUNTIME_ARTIFACT,\n clearThemeLocale,\n createThemeTranslate,\n installThemeLocale,\n clearThemePreviewLocale,\n createThemePreviewTranslate,\n installThemePreviewLocale,\n} = ThemeRuntime;\n`,\n }));\n },\n };\n}\n\nfunction createHostThemeIconsShimPlugin(): Plugin {\n return {\n name: \"suda-host-theme-icons-shim\",\n setup(build) {\n build.onResolve({ filter: /^@sudajs\\/theme-engine\\/icons$/ }, () => {\n return { path: \"theme-icons-host-shim\", namespace: \"suda-shim\" };\n });\n build.onLoad({ filter: /^theme-icons-host-shim$/, namespace: \"suda-shim\" }, () => ({\n loader: \"js\",\n contents: `\nconst ThemeIcons = globalThis.__SUDA_THEME_ICONS__;\nif (!ThemeIcons) {\n throw new Error(\"Missing host theme icon runtime (__SUDA_THEME_ICONS__).\");\n}\nexport const {\n SudaIcon,\n SudaLucideIcon,\n getSudaSimpleIconSlug,\n isSudaSimpleIconName,\n normalizeSudaIconName,\n isSudaLucideIconName,\n normalizeSudaLucideIconName,\n toSudaSimpleIconName,\n} = ThemeIcons;\n`,\n }));\n },\n };\n}\n\nfunction createThemeDependencyResolverPlugin(root: string): Plugin {\n return {\n name: \"suda-theme-dependency-resolver\",\n setup(build) {\n const themeRequire = createRequire(path.join(root, \"package.json\"));\n build.onResolve({ filter: /^lucide-react(?:\\/.*)?$/ }, (args) => {\n if (args.path === \"lucide-react/dynamicIconImports\") {\n const packageRoot = path.dirname(themeRequire.resolve(\"lucide-react/package.json\"));\n return { path: path.join(packageRoot, \"dynamicIconImports.mjs\") };\n }\n return { path: themeRequire.resolve(args.path) };\n });\n },\n };\n}\n\nfunction safeObjectKeyPart(value: string): string {\n return value.replace(/[^a-zA-Z0-9._-]/g, \"-\");\n}\n\nfunction createThemePrefix(themeKey: string, version: string): string {\n return `themes/${safeObjectKeyPart(themeKey)}/${safeObjectKeyPart(version)}`;\n}\n\nfunction createThemeObjectKey(themeKey: string, version: string, relativePath: string): string {\n const safeRelativePath = relativePath\n .replace(/^\\/+/, \"\")\n .split(\"/\")\n .map(safeObjectKeyPart)\n .filter(Boolean)\n .join(\"/\");\n\n return `${createThemePrefix(themeKey, version)}/${safeRelativePath}`;\n}\n\nfunction resolveThemeRoot(options: ThemeRootOptions): string {\n return path.resolve(options.themeRoot ?? process.cwd());\n}\n\nfunction collectOption(value: string, previous: string[]): string[] {\n previous.push(value);\n return previous;\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await stat(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function readJson<T>(filePath: string): Promise<T> {\n const raw = await readFile(filePath, \"utf8\");\n return JSON.parse(raw) as T;\n}\n\nasync function readJsonIfExists<T>(filePath: string): Promise<T | null> {\n if (!(await pathExists(filePath))) {\n return null;\n }\n return readJson<T>(filePath);\n}\n\nasync function requireCliBaseUrl(): Promise<{ baseUrl: string; token: string }> {\n const config = await requireAuthConfig();\n return {\n baseUrl: config.baseUrl,\n token: config.sessionToken,\n };\n}\n\nasync function fetchJson<T>(\n url: string,\n options: RequestInit & { token?: string } = {},\n): Promise<T> {\n const headers = new Headers(options.headers);\n if (options.token) {\n headers.set(\"Authorization\", `Bearer ${options.token}`);\n }\n const response = await fetch(url, { ...options, headers });\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as {\n error?: string;\n message?: string;\n };\n throw new Error(errorData.message || errorData.error || response.statusText);\n }\n return (await response.json()) as T;\n}\n\nfunction agentCacheDir(): string {\n return path.join(\n process.env.XDG_CACHE_HOME ?? path.join(process.env.HOME ?? \".\", \".cache\"),\n \"suda\",\n \"agent\",\n );\n}\n\nfunction cachedThemeManifestPath(themeKey: string, version: string): string {\n return path.join(\n agentCacheDir(),\n \"themes\",\n safeObjectKeyPart(themeKey),\n safeObjectKeyPart(version),\n \"agent-manifest.json\",\n );\n}\n\nasync function loadThemeModule(serverEntryPath: string): Promise<ThemeModule> {\n const imported = (await import(`${pathToFileURL(serverEntryPath).href}?t=${Date.now()}`)) as {\n default?: ThemeModule;\n };\n\n if (!imported.default) {\n throw new Error(`${serverEntryPath} must export a default ThemeModule.`);\n }\n\n return imported.default;\n}\n\nfunction assertRecord(value: unknown, label: string): asserts value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(`${label} must be an object.`);\n }\n}\n\nfunction validateThemeModule(module: ThemeModule): void {\n assertRecord(module.manifest, \"manifest\");\n const parsedManifest = themeManifestSchema.safeParse(module.manifest);\n if (!parsedManifest.success) {\n const issues = parsedManifest.error.issues\n .map((issue) => ` - ${issue.path.join(\".\") || \"<root>\"}: ${issue.message}`)\n .join(\"\\n\");\n throw new Error(`manifest does not satisfy the Suda theme contract:\\n${issues}`);\n }\n if (!module.manifest.key || !module.manifest.version || !module.manifest.name) {\n throw new Error(\"manifest.key, manifest.version and manifest.name are required.\");\n }\n if (module.manifest.entry !== \"index.js\") {\n throw new Error('manifest.entry must be artifact-local: \"index.js\".');\n }\n if (\"clientEntry\" in module.manifest) {\n throw new Error(\n \"manifest.clientEntry is no longer supported. The CLI owns the runtime.client.js artifact.\",\n );\n }\n assertRecord(module.pageConfig?.components, \"pageConfig.components\");\n assertRecord(module.layoutConfig, \"layoutConfig\");\n assertRecord(module.defaultLayout, \"defaultLayout\");\n if (!Array.isArray(module.starterPages)) {\n throw new Error(\"starterPages must be an array.\");\n }\n const result = checkThemeModule(module);\n if (!result.ok) {\n throw new Error(formatThemeCheckResult(result));\n }\n}\n\nfunction hasTailwindV4Dependency(\n dependencies: Record<string, unknown> | undefined,\n name: string,\n): boolean {\n const value = dependencies?.[name];\n return typeof value === \"string\" && /^[~^<>=\\s]*4(?:[.\\s<>=-]|$)/.test(value.trim());\n}\n\nasync function validateThemeTailwindContract(root: string): Promise<void> {\n const packageJsonPath = path.join(root, \"package.json\");\n const packageJson = await readJson<{\n dependencies?: Record<string, unknown>;\n devDependencies?: Record<string, unknown>;\n }>(packageJsonPath);\n const dependencyScopes = [packageJson.dependencies, packageJson.devDependencies];\n const hasTailwind = dependencyScopes.some((dependencies) =>\n hasTailwindV4Dependency(dependencies, \"tailwindcss\"),\n );\n const hasPostcssPlugin = dependencyScopes.some((dependencies) =>\n hasTailwindV4Dependency(dependencies, \"@tailwindcss/postcss\"),\n );\n if (!hasTailwind) {\n throw new Error(\"Suda themes must depend on tailwindcss v4.\");\n }\n if (!hasPostcssPlugin) {\n throw new Error(\"Suda themes must depend on @tailwindcss/postcss v4.\");\n }\n\n const stylesEntry = path.join(root, \"src\", \"styles.css\");\n if (!(await pathExists(stylesEntry))) {\n throw new Error(`Missing ${stylesEntry}. Suda themes must define src/styles.css.`);\n }\n const styles = await readFile(stylesEntry, \"utf8\");\n if (!styles.includes('@import \"tailwindcss\";') && !styles.includes(\"@import 'tailwindcss';\")) {\n throw new Error('src/styles.css must include `@import \"tailwindcss\";`.');\n }\n\n await validateThemeCssTokenContract(root);\n}\n\ninterface CssBlockRange {\n body: string;\n end: number;\n start: number;\n}\n\nasync function collectThemeSourceCssFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n const absolutePath = path.join(directory, entry.name);\n if (entry.isDirectory()) {\n files.push(...(await collectThemeSourceCssFiles(absolutePath)));\n } else if (entry.isFile() && entry.name.endsWith(\".css\")) {\n files.push(absolutePath);\n }\n }\n return files;\n}\n\nfunction findThemeInlineBlocks(styles: string, filePath: string): CssBlockRange[] {\n const blocks: CssBlockRange[] = [];\n const pattern = /@theme\\s+inline\\s*\\{/g;\n for (const match of styles.matchAll(pattern)) {\n const start = match.index;\n let depth = 1;\n let cursor = start + match[0].length;\n while (cursor < styles.length && depth > 0) {\n if (styles[cursor] === \"{\") depth += 1;\n if (styles[cursor] === \"}\") depth -= 1;\n cursor += 1;\n }\n if (depth !== 0) {\n throw new Error(`${filePath} contains an unclosed \\`@theme inline\\` block.`);\n }\n blocks.push({\n body: styles.slice(start + match[0].length, cursor - 1),\n end: cursor,\n start,\n });\n }\n return blocks;\n}\n\nasync function validateThemeCssTokenContract(root: string): Promise<void> {\n const sourceRoot = path.join(root, \"src\");\n const files = await collectThemeSourceCssFiles(sourceRoot);\n const sources = await Promise.all(\n files.map(async (filePath) => {\n const styles = await readFile(filePath, \"utf8\");\n return { blocks: findThemeInlineBlocks(styles, filePath), filePath, styles };\n }),\n );\n const declarations = new Map<string, string>();\n for (const source of sources) {\n for (const block of source.blocks) {\n for (const match of block.body.matchAll(/(--[a-zA-Z0-9_-]+)\\s*:\\s*([^;]+);/g)) {\n const name = match[1];\n const value = match[2];\n if (name !== undefined && value !== undefined) {\n declarations.set(name, value);\n }\n }\n }\n }\n\n const platformTokenPattern =\n /var\\(\\s*--(?:background|foreground|primary(?:-foreground)?|secondary(?:-foreground)?|accent(?:-foreground)?|muted(?:-foreground)?|radius(?:-(?:card|button|input))?)(?:\\s*[,)])/;\n const platformAliases = new Set<string>();\n let changed = true;\n while (changed) {\n changed = false;\n for (const [name, value] of declarations) {\n const dependsOnPlatformToken = platformTokenPattern.test(value);\n const dependsOnAlias = [...platformAliases].some((alias) =>\n new RegExp(`var\\\\(\\\\s*${escapeRegExp(alias)}(?:\\\\s*[,\\\\)])`).test(value),\n );\n if ((dependsOnPlatformToken || dependsOnAlias) && !platformAliases.has(name)) {\n platformAliases.add(name);\n changed = true;\n }\n }\n }\n\n const issues: string[] = [];\n for (const source of sources) {\n const handwrittenStyles = source.styles.split(\"\");\n for (const block of source.blocks) {\n for (let index = block.start; index < block.end; index += 1) {\n if (handwrittenStyles[index] !== \"\\n\") {\n handwrittenStyles[index] = \" \";\n }\n }\n }\n const searchable = handwrittenStyles.join(\"\");\n for (const alias of platformAliases) {\n const reference = new RegExp(`var\\\\(\\\\s*${escapeRegExp(alias)}(?:\\\\s*[,\\\\)])`, \"g\");\n for (const match of searchable.matchAll(reference)) {\n const line = searchable.slice(0, match.index ?? 0).split(\"\\n\").length;\n issues.push(`${path.relative(root, source.filePath)}:${line} uses ${alias}`);\n }\n }\n }\n\n if (issues.length > 0) {\n throw new Error(\n [\n \"Hand-written theme CSS must not consume Suda-backed Tailwind aliases from `@theme inline`.\",\n ...issues.map((issue) => ` - ${issue}`),\n \"Use an unprefixed platform token such as `var(--primary)` directly, or define and consume a theme-prefixed variable on the theme root. Tailwind utilities such as `bg-primary` remain supported.\",\n ].join(\"\\n\"),\n );\n }\n}\n\nexport async function validateTheme(root: string): Promise<ValidatedTheme> {\n const packageJsonPath = path.join(root, \"package.json\");\n const serverEntryPath = path.join(root, \"dist\", \"index.js\");\n const clientEntryPath = path.join(root, \"dist\", \"runtime.client.js\");\n const stylesheetPath = path.join(root, \"dist\", \"styles.css\");\n\n if (!(await pathExists(packageJsonPath))) {\n throw new Error(`Missing package.json in ${root}`);\n }\n if (!(await pathExists(serverEntryPath))) {\n throw new Error(`Missing ${serverEntryPath}. Run the theme package build first.`);\n }\n\n const module = await loadThemeModule(serverEntryPath);\n validateThemeModule(module);\n await validateThemeTailwindContract(root);\n await validateThemeLocales(root);\n await validateThemePreviewLocales(root, module.manifest.previewLocales);\n\n const result: ValidatedTheme = {\n root,\n module,\n serverEntryPath,\n clientEntryPath: null,\n stylesheetPath: null,\n };\n if (await pathExists(clientEntryPath)) {\n result.clientEntryPath = clientEntryPath;\n }\n if (await pathExists(stylesheetPath)) {\n result.stylesheetPath = stylesheetPath;\n }\n return result;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction collectLocaleKeys(\n value: unknown,\n pathSegments: string[] = [],\n keys: string[] = [],\n): string[] {\n if (typeof value === \"string\") {\n keys.push(pathSegments.join(\".\"));\n return keys;\n }\n\n if (!isRecord(value)) {\n throw new Error(\n `Theme locale value at ${pathSegments.join(\".\") || \"<root>\"} must be a string or object.`,\n );\n }\n\n for (const [key, child] of Object.entries(value)) {\n collectLocaleKeys(child, [...pathSegments, key], keys);\n }\n return keys;\n}\n\nasync function readLocaleJson(filePath: string): Promise<unknown> {\n try {\n return JSON.parse(await readFile(filePath, \"utf8\")) as unknown;\n } catch (error) {\n const reason = error instanceof Error ? error.message : \"invalid JSON\";\n throw new Error(`Invalid theme locale JSON at ${filePath}: ${reason}`);\n }\n}\n\nasync function listLocaleFiles(localesDir: string): Promise<string[]> {\n if (!(await pathExists(localesDir))) {\n return [];\n }\n const entries = await readdir(localesDir, { withFileTypes: true });\n return entries\n .filter(\n (entry) =>\n entry.isFile() && entry.name.endsWith(\".json\") && !entry.name.endsWith(\".content.json\"),\n )\n .map((entry) => entry.name)\n .sort((a, b) => a.localeCompare(b));\n}\n\nasync function listPreviewLocaleFiles(localesDir: string): Promise<string[]> {\n if (!(await pathExists(localesDir))) {\n return [];\n }\n const entries = await readdir(localesDir, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".content.json\"))\n .map((entry) => entry.name)\n .sort((a, b) => a.localeCompare(b));\n}\n\nasync function validateThemeLocales(root: string): Promise<void> {\n const localesDir = path.join(root, \"dist\", \"locales\");\n const files = await listLocaleFiles(localesDir);\n if (!files.includes(\"en.json\")) {\n throw new Error(\"Theme locales must include dist/locales/en.json.\");\n }\n\n const referenceFile = \"en.json\";\n const referenceMessages = await readLocaleJson(path.join(localesDir, referenceFile));\n const reference = {\n file: referenceFile,\n keys: new Set(collectLocaleKeys(referenceMessages).sort()),\n };\n for (const file of files) {\n if (file === referenceFile) {\n continue;\n }\n const filePath = path.join(localesDir, file);\n const messages = await readLocaleJson(filePath);\n const keys = new Set(collectLocaleKeys(messages).sort());\n\n const expected = reference;\n const missing = [...expected.keys].filter((key) => !keys.has(key));\n const extra = [...keys].filter((key) => !expected.keys.has(key));\n if (missing.length > 0 || extra.length > 0) {\n const details = [\n ...missing.map((key) => ` - missing ${key}`),\n ...extra.map((key) => ` - extra ${key}`),\n ].join(\"\\n\");\n throw new Error(\n `Theme locale ${file} does not match ${expected.file} key set:\\n${details}`,\n );\n }\n }\n}\n\nasync function validateThemePreviewLocales(\n root: string,\n previewLocales: string[] | undefined,\n): Promise<void> {\n const localesDir = path.join(root, \"dist\", \"locales\");\n const files = await listPreviewLocaleFiles(localesDir);\n const declared = previewLocales ?? [];\n const expectedFiles = new Set(declared.map((locale) => `${locale}.content.json`));\n const undeclared = files.filter((file) => !expectedFiles.has(file));\n const missing = [...expectedFiles].filter((file) => !files.includes(file));\n if (missing.length > 0 || undeclared.length > 0) {\n const details = [\n ...missing.map((file) => ` - missing locales/${file}`),\n ...undeclared.map((file) => ` - undeclared locales/${file}`),\n ].join(\"\\n\");\n throw new Error(`Theme preview locale files do not match manifest.previewLocales:\\n${details}`);\n }\n if (declared.length === 0) {\n return;\n }\n\n const referenceFile = \"en.content.json\";\n const referenceMessages = await readLocaleJson(path.join(localesDir, referenceFile));\n const referenceKeys = new Set(collectLocaleKeys(referenceMessages).sort());\n for (const file of files) {\n if (file === referenceFile) {\n continue;\n }\n const messages = await readLocaleJson(path.join(localesDir, file));\n const keys = new Set(collectLocaleKeys(messages).sort());\n const missingKeys = [...referenceKeys].filter((key) => !keys.has(key));\n const extraKeys = [...keys].filter((key) => !referenceKeys.has(key));\n if (missingKeys.length > 0 || extraKeys.length > 0) {\n const details = [\n ...missingKeys.map((key) => ` - missing ${key}`),\n ...extraKeys.map((key) => ` - extra ${key}`),\n ].join(\"\\n\");\n throw new Error(\n `Theme preview locale ${file} does not match ${referenceFile} key set:\\n${details}`,\n );\n }\n }\n}\n\nconst VITE_CONFIG_FILES = [\n \"vite.config.ts\",\n \"vite.config.mts\",\n \"vite.config.js\",\n \"vite.config.mjs\",\n] as const;\n\nasync function findViteConfig(root: string): Promise<string> {\n for (const file of VITE_CONFIG_FILES) {\n const candidate = path.join(root, file);\n if (await pathExists(candidate)) {\n return candidate;\n }\n }\n throw new Error(\n `Missing vite.config.* in ${root}. Suda theme projects must use the Vite template; run \\`suda theme init\\` or migrate this theme to Vite.`,\n );\n}\n\nasync function loadThemeVite(root: string): Promise<ViteModule> {\n const themeRequire = createRequire(path.join(root, \"package.json\"));\n let viteEntry: string;\n try {\n viteEntry = themeRequire.resolve(\"vite\");\n } catch {\n throw new Error(\n `Vite is required for Suda theme projects. Install it in ${root}: \\`pnpm add -D vite @vitejs/plugin-react tailwindcss @tailwindcss/postcss postcss\\`.`,\n );\n }\n return (await import(pathToFileURL(viteEntry).href)) as ViteModule;\n}\n\nasync function findServerEntry(root: string): Promise<string> {\n const candidates = [path.join(root, \"src\", \"index.tsx\"), path.join(root, \"src\", \"index.ts\")];\n for (const candidate of candidates) {\n if (await pathExists(candidate)) {\n return candidate;\n }\n }\n throw new Error(`Missing server entry. Add src/index.ts(x) in ${root}.`);\n}\n\nfunction toViteModuleUrl(root: string, absolutePath: string): string {\n const relativePath =\n root.includes(\"\\\\\") || absolutePath.includes(\"\\\\\")\n ? path.win32.relative(root, absolutePath)\n : path.relative(root, absolutePath);\n return `/${relativePath.replaceAll(\"\\\\\", \"/\")}`;\n}\n\nfunction isThemeExternal(id: string): boolean {\n return (\n id === \"react\" ||\n id.startsWith(\"react/\") ||\n id === \"react-dom\" ||\n id.startsWith(\"react-dom/\") ||\n id === \"@puckeditor/core\" ||\n id.startsWith(\"@puckeditor/core/\") ||\n id === \"@sudajs/theme-engine\" ||\n id.startsWith(\"@sudajs/theme-engine/\")\n );\n}\n\nfunction viteAssetFileNames(assetInfo: { names?: string[] | undefined }): string {\n const names = assetInfo.names ?? [];\n const isCss = names.some((name) => name.endsWith(\".css\"));\n if (isCss) {\n return \"styles.css\";\n }\n return \"assets/[name]-[hash][extname]\";\n}\n\nasync function buildViteTheme(root: string): Promise<void> {\n const viteConfig = await findViteConfig(root);\n const vite = await loadThemeVite(root);\n const serverEntry = await findServerEntry(root);\n const stylesEntry = path.join(root, \"src\", \"styles.css\");\n if (!(await pathExists(stylesEntry))) {\n throw new Error(`Missing ${stylesEntry}. Vite Suda themes must define src/styles.css.`);\n }\n\n await rm(path.join(root, \"dist\"), { recursive: true, force: true });\n await rm(path.join(root, \".suda-build\"), { recursive: true, force: true });\n\n await vite.build({\n root,\n configFile: viteConfig,\n configLoader: \"runner\",\n cacheDir: path.join(root, \".suda-build\", \"vite-cache\"),\n publicDir: false,\n build: {\n emptyOutDir: false,\n outDir: path.join(root, \"dist\"),\n sourcemap: false,\n assetsInlineLimit: 0,\n ssr: serverEntry,\n rollupOptions: {\n external: isThemeExternal,\n output: {\n entryFileNames: \"index.js\",\n chunkFileNames: \"chunks/[name]-[hash].js\",\n assetFileNames: viteAssetFileNames,\n },\n },\n },\n });\n\n await copyThemeAssets(root);\n await copyThemeLocales(root);\n\n const stylesheetEntry = path.join(root, \".suda-build\", \"styles-entry.ts\");\n await mkdir(path.dirname(stylesheetEntry), { recursive: true });\n await writeFile(stylesheetEntry, 'import \"../src/styles.css\";\\n', \"utf8\");\n\n await vite.build({\n root,\n configFile: viteConfig,\n configLoader: \"runner\",\n cacheDir: path.join(root, \".suda-build\", \"vite-cache\"),\n publicDir: false,\n build: {\n emptyOutDir: false,\n outDir: path.join(root, \"dist\"),\n sourcemap: false,\n assetsInlineLimit: 0,\n cssCodeSplit: false,\n rollupOptions: {\n input: stylesheetEntry,\n output: {\n entryFileNames: \"chunks/theme-styles.js\",\n chunkFileNames: \"chunks/[name]-[hash].js\",\n assetFileNames: viteAssetFileNames,\n },\n },\n },\n });\n\n await rm(path.join(root, \"dist\", \"chunks\", \"theme-styles.js\"), { force: true });\n}\n\nasync function copyThemeAssets(root: string): Promise<void> {\n const sourceAssets = path.join(root, \"assets\");\n if (!(await pathExists(sourceAssets))) {\n return;\n }\n await copyDirectory(sourceAssets, path.join(root, \"dist\", \"assets\"));\n}\n\nasync function copyThemeLocales(root: string): Promise<void> {\n const sourceLocales = path.join(root, \"src\", \"locales\");\n if (!(await pathExists(sourceLocales))) {\n return;\n }\n await copyDirectory(sourceLocales, path.join(root, \"dist\", \"locales\"));\n}\n\nasync function buildClientRuntime(root: string, minify: boolean): Promise<void> {\n const legacyEntries = [\n path.join(root, \"src\", \"runtime.client.ts\"),\n path.join(root, \"src\", \"runtime.client.tsx\"),\n ];\n if (legacyEntries.some((entry) => existsSync(entry))) {\n throw new Error(\n \"Theme-authored src/runtime.client.ts(x) is no longer supported. Move optional browser setup to src/client.ts as clientHooks; the CLI owns runtime.client.js.\",\n );\n }\n const packageJson = JSON.parse(await readFile(path.join(root, \"package.json\"), \"utf8\")) as {\n version?: unknown;\n };\n const themeVersion = typeof packageJson.version === \"string\" ? packageJson.version : \"0.0.0\";\n const clientHooksPath = path.join(root, \"src\", \"client.ts\");\n const generatedEntry = path.join(root, \".suda-build\", \"runtime.client.ts\");\n const clientHooksImport = (await pathExists(clientHooksPath))\n ? 'import { clientHooks } from \"../src/client.js\";'\n : \"const clientHooks = {};\";\n await mkdir(path.dirname(generatedEntry), { recursive: true });\n await writeFile(\n generatedEntry,\n createClientRuntimeSource(clientHooksImport, true),\n \"utf8\",\n );\n\n await mkdir(path.join(root, \"dist\"), { recursive: true });\n const hostReactShimPlugin = createHostReactShimPlugin();\n const rejectEditorRuntimeDependencyPlugin = createRejectEditorRuntimeDependencyPlugin();\n const hostThemeRuntimeShimPlugin = createHostThemeRuntimeShimPlugin();\n const hostThemeIconsShimPlugin = createHostThemeIconsShimPlugin();\n const themeDependencyResolverPlugin = createThemeDependencyResolverPlugin(root);\n await esbuild({\n bundle: true,\n entryPoints: { \"runtime.client\": generatedEntry },\n external: [\"react\", \"react/*\", \"react-dom\", \"react-dom/*\"],\n format: \"esm\",\n jsx: \"automatic\",\n logOverride: { \"import-is-undefined\": \"silent\" },\n minify,\n outdir: path.join(root, \"dist\"),\n platform: \"browser\",\n define: {\n __SUDA_THEME_VERSION__: JSON.stringify(themeVersion),\n },\n plugins: [\n hostReactShimPlugin,\n rejectEditorRuntimeDependencyPlugin,\n hostThemeRuntimeShimPlugin,\n hostThemeIconsShimPlugin,\n themeDependencyResolverPlugin,\n ],\n sourcemap: false,\n splitting: true,\n chunkNames: \"chunks/[name]-[hash]\",\n target: \"es2022\",\n treeShaking: true,\n });\n}\n\nasync function withPreservedNodeEnv<T>(run: () => Promise<T>): Promise<T> {\n const previous = process.env.NODE_ENV;\n try {\n return await run();\n } finally {\n if (previous === undefined) {\n delete process.env.NODE_ENV;\n } else {\n process.env.NODE_ENV = previous;\n }\n }\n}\n\nexport async function buildTheme(root: string): Promise<ValidatedTheme> {\n return withPreservedNodeEnv(async () => {\n await buildViteTheme(root);\n await buildClientRuntime(root, true);\n return finalizeTheme(root);\n });\n}\n\nexport async function finalizeTheme(root: string): Promise<ValidatedTheme> {\n await findViteConfig(root);\n await finalizeStylesheet(root);\n const validated = await validateTheme(root);\n await writeThemeArtifacts(validated);\n return validateTheme(root);\n}\n\nasync function finalizeStylesheet(root: string): Promise<void> {\n const expectedStylesheet = path.join(root, \"dist\", \"styles.css\");\n if (!(await pathExists(expectedStylesheet))) {\n throw new Error(\n `Vite did not emit ${expectedStylesheet} from src/styles.css. Check ${path.join(root, \"vite.config.ts\")} and Tailwind/PostCSS configuration.`,\n );\n }\n}\n\nasync function copyDirectory(source: string, destination: string): Promise<void> {\n const children = await readdir(source, { withFileTypes: true });\n await mkdir(destination, { recursive: true });\n for (const child of children) {\n const sourcePath = path.join(source, child.name);\n const destinationPath = path.join(destination, child.name);\n if (child.isDirectory()) {\n await copyDirectory(sourcePath, destinationPath);\n continue;\n }\n await copyFile(sourcePath, destinationPath);\n }\n}\n\n/**\n * Runs the AI-metadata check on a built theme. Prints a human-readable report\n * via {@link formatThemeCheckResult} and returns whether errors were found, so\n * callers can decide whether to fail the build.\n */\nconst THEME_CHECK_WHITE_LABEL = {\n visible: true,\n text: \"Powered by <strong>速搭云</strong>\",\n href: \"https://www.sudayun.cn\",\n} as const;\n\nconst THEME_CHECK_ICP = {\n text: \"京ICP备12345678号\",\n href: \"https://beian.miit.gov.cn/\",\n} as const;\n\nconst PREVIEW_CONTACT_FORM: NonNullable<ThemeRenderMetadata[\"contactForm\"]> = {\n enabled: true,\n endpoint: \"/api/contact\",\n honeypotField: \"suda_contact_company\",\n title: \"Contact us\",\n successMessage: \"Thanks, we received your message.\",\n submitLabel: \"Submit\",\n fields: [\n {\n id: \"name\",\n type: \"text\",\n label: \"Name\",\n required: true,\n options: [],\n validation: { maxLength: 120 },\n },\n {\n id: \"email\",\n type: \"text\",\n label: \"Email\",\n required: true,\n options: [],\n validation: { format: \"email\", maxLength: 200 },\n },\n {\n id: \"message\",\n type: \"textarea\",\n label: \"Message\",\n required: true,\n options: [],\n validation: { maxLength: 2000 },\n },\n ],\n};\n\nfunction stripHtmlTags(value: string): string {\n return value.replace(/<[^>]+>/g, \"\").replace(/\\s+/g, \" \").trim();\n}\n\nfunction htmlContainsOrderedText(html: string, parts: readonly string[]): boolean {\n const pattern = parts.map((part) => escapeRegExp(part)).join(\"(?:\\\\s|<[^>]+>)*\");\n return new RegExp(pattern, \"i\").test(html);\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction findAnchorTagByHref(html: string, href: string): string | null {\n const pattern = new RegExp(\n `<a\\\\b[^>]*href=(['\"])${escapeRegExp(href)}\\\\1[^>]*>`,\n \"i\",\n );\n return html.match(pattern)?.[0] ?? null;\n}\n\nfunction runFooterContractCheck(theme: ValidatedTheme, renderer: ThemeRenderer): string[] {\n const pageData = theme.module.starterPages[0]?.data ?? { root: { props: {} }, content: [] };\n const metadataWithFooter: ThemeRenderMetadata = {\n resolveAssetUrl: createPreviewAssetResolver(renderer.resolveAssetPath),\n whiteLabel: THEME_CHECK_WHITE_LABEL,\n icp: THEME_CHECK_ICP,\n };\n const metadataWithoutFooter: ThemeRenderMetadata = {\n resolveAssetUrl: createPreviewAssetResolver(renderer.resolveAssetPath),\n };\n const htmlWithFooter = renderer.renderToString(\n renderer.createElement(renderer.ThemeRender, {\n theme: theme.module,\n pageData,\n layoutData: theme.module.defaultLayout,\n metadata: metadataWithFooter,\n }),\n );\n const htmlWithoutFooter = renderer.renderToString(\n renderer.createElement(renderer.ThemeRender, {\n theme: theme.module,\n pageData,\n layoutData: theme.module.defaultLayout,\n metadata: metadataWithoutFooter,\n }),\n );\n const issues: string[] = [];\n const whiteLabelText = stripHtmlTags(THEME_CHECK_WHITE_LABEL.text);\n const whiteLabelVisible = htmlContainsOrderedText(htmlWithFooter, [\"Powered by\", \"速搭云\"]);\n const whiteLabelVisibleWithoutMetadata = htmlContainsOrderedText(htmlWithoutFooter, [\"Powered by\", \"速搭云\"]);\n if (!whiteLabelVisible && !htmlWithFooter.includes(whiteLabelText)) {\n issues.push(\"Footer must render metadata.whiteLabel.text when whiteLabel.visible is true.\");\n }\n if (whiteLabelVisibleWithoutMetadata || htmlWithoutFooter.includes(whiteLabelText)) {\n issues.push(\"Footer whiteLabel content must come from host metadata, not theme defaults.\");\n }\n if (!htmlWithFooter.includes(THEME_CHECK_ICP.text)) {\n issues.push(\"Footer must render metadata.icp.text when ICP metadata is present.\");\n }\n if (htmlWithoutFooter.includes(THEME_CHECK_ICP.text)) {\n issues.push(\"Footer ICP content must come from host metadata, not theme defaults.\");\n }\n for (const href of [THEME_CHECK_WHITE_LABEL.href, THEME_CHECK_ICP.href]) {\n const anchorTag = findAnchorTagByHref(htmlWithFooter, href);\n if (!anchorTag) {\n issues.push(`Footer must render an anchor tag for ${href}.`);\n continue;\n }\n if (!/\\btarget=(['\"])_blank\\1/i.test(anchorTag)) {\n issues.push(`Footer link ${href} must render with target=\"_blank\".`);\n }\n if (findAnchorTagByHref(htmlWithoutFooter, href)) {\n issues.push(`Footer link ${href} must be driven by host metadata, not rendered unconditionally.`);\n }\n }\n return issues;\n}\n\nexport const __testUtils = {\n activateThemeOutputSchema,\n contactFormOutputSchema,\n createPageDraftOutputSchema,\n createProjectOutputSchema,\n createThemeProjectRequire,\n createVisualAuditPage,\n createRemotePageDraft,\n destructivePageOperationOutputSchema,\n findAnchorTagByHref,\n formatMissingSharpWarning,\n loadThemeScopedRenderer,\n normalizePlaywrightModule,\n normalizeSharpModule,\n initThemeWithKey,\n performActivateTheme,\n performConfirmedPageOperation,\n performUpdateContactForm,\n performUpdateThemeSettings,\n getRemoteContactForm,\n getRemoteThemeSettings,\n listProjectsOutputSchema,\n renderDevStarterPageHtml,\n renderDevEditorPageHtml,\n readDevThemeLocaleMessages,\n writeVitePreviewEntries,\n resolveDevEditorSlug,\n resolveDevStarterSlug,\n resolveDevVisualAuditComponent,\n getThemeVisualAuditComponentTypes,\n resolveScreenshotOptions,\n resolveVisualCheckOptions,\n slugifyThemeName,\n validateThemeKey,\n validateThemeName,\n validateThemeCssTokenContract,\n validateThemeTailwindContract,\n validateThemeLocales,\n validateThemePreviewLocales,\n resolveThemePreviewLocale,\n withSerializedVitePreviewLocaleLoad,\n toViteModuleUrl,\n themeSettingsOutputSchema,\n updateContactFormOutputSchema,\n updatePageDraftOutputSchema,\n updateRemotePageDraft,\n updateThemeSettingsOutputSchema,\n};\n\nasync function runThemeCheck(theme: ValidatedTheme): Promise<boolean> {\n const result = checkThemeModule(theme.module);\n const footerIssues = result.ok\n ? runFooterContractCheck(theme, await loadThemeScopedRenderer(theme.root))\n : [];\n const previewIssues = await runPreviewContractCheck(theme);\n const ok = result.ok && footerIssues.length === 0 && previewIssues.length === 0;\n const lines = [formatThemeCheckResult(result)];\n if (footerIssues.length === 0 && result.ok) {\n lines.push(\n success(\"Footer contract check passed: whiteLabel and ICP metadata render correctly.\"),\n );\n } else if (footerIssues.length > 0) {\n for (const issue of footerIssues) {\n lines.push(` ${formatError(\"error\")} layoutConfig.footerContract: ${issue}`);\n }\n lines.push(formatError(`Footer contract check: ${footerIssues.length} error(s).`));\n }\n if (previewIssues.length === 0) {\n lines.push(\n success(\"Preview contract check passed: desktop, tablet, and mobile screenshots exist.\"),\n );\n } else {\n for (const issue of previewIssues) {\n lines.push(` ${formatError(\"error\")} assets.preview: ${issue}`);\n }\n lines.push(formatError(`Preview contract check: ${previewIssues.length} error(s).`));\n }\n const text = lines.join(\"\\n\");\n if (ok) {\n console.log(text);\n } else {\n console.error(text);\n }\n return ok;\n}\n\nasync function runPreviewContractCheck(theme: ValidatedTheme): Promise<string[]> {\n const issues: string[] = [];\n for (const relativePath of REQUIRED_PREVIEW_ARTIFACTS) {\n const filePath = path.join(theme.root, \"dist\", relativePath);\n try {\n const info = await stat(filePath);\n if (info.size <= 0) {\n issues.push(`${relativePath} is empty. Run \\`suda theme capture\\` and rebuild.`);\n }\n } catch {\n issues.push(`Missing ${relativePath}. Run \\`suda theme capture\\`, then \\`suda theme build\\`.`);\n }\n }\n return issues;\n}\n\nexport async function watchTheme(root: string, port: number): Promise<void> {\n const handle = await startViteDevPreviewServer(root, port);\n console.log(`previewing Vite theme at ${style.url(handle.url)}`);\n await new Promise(() => undefined);\n}\n\ninterface ViteDevPreviewOptions {\n showDevTools?: boolean;\n}\n\nasync function startViteDevPreviewServer(\n root: string,\n port: number,\n options: ViteDevPreviewOptions = {},\n): Promise<PreviewServerHandle> {\n const viteConfig = await findViteConfig(root);\n const vite = await loadThemeVite(root);\n await writeVitePreviewEntries(root);\n const host = \"127.0.0.1\";\n const server = await vite.createServer({\n root,\n configFile: viteConfig,\n configLoader: \"runner\",\n cacheDir: path.join(root, \".suda-build\", \"node_modules\", \".vite\"),\n appType: \"custom\",\n optimizeDeps: {\n entries: [\".suda-build/preview-client.ts\", \".suda-build/editor-client.ts\"],\n },\n server: { host, port },\n plugins: [createSudaPreviewVitePlugin(root, options)],\n });\n await server.listen(port);\n const url =\n server.resolvedUrls?.local.find((candidate) => candidate.includes(\"127.0.0.1\")) ??\n server.resolvedUrls?.local[0] ??\n `http://${host}:${port}/`;\n return {\n url: url.replace(/\\/$/, \"\"),\n port,\n server,\n close: () => server.close(),\n };\n}\n\nasync function writeVitePreviewEntries(root: string): Promise<void> {\n const clientHooksPath = path.join(root, \"src\", \"client.ts\");\n const clientHooksImport = existsSync(clientHooksPath)\n ? 'import { clientHooks } from \"../src/client.js\";'\n : \"const clientHooks = {};\";\n const buildDir = path.join(root, \".suda-build\");\n await mkdir(buildDir, { recursive: true });\n await writeFile(\n path.join(buildDir, \"runtime.dev.js\"),\n createClientRuntimeSource(clientHooksImport, false, false),\n \"utf8\",\n );\n await writeFile(\n path.join(buildDir, \"preview-client.ts\"),\n [\n 'import { hydrateThemePage, loadThemeRuntime } from \"@sudajs/theme-engine/client\";',\n 'import { installThemePreviewLocale, resolveAssetPath } from \"@sudajs/theme-engine/site-runtime\";',\n 'const payloadElement=document.querySelector(\"#suda-theme-hydration-data\");',\n 'if(!payloadElement){throw new Error(\"Missing Suda theme hydration payload.\")}',\n \"const payload=JSON.parse(payloadElement.textContent ?? '{}');\",\n \"if(payload.previewLocaleMessages){installThemePreviewLocale(payload.previewLocaleMessages)}\",\n 'const runtime=(await loadThemeRuntime(\"/.suda-build/runtime.dev.js\")).default;',\n 'const metadata={contactForm:payload.contactForm,resolveAssetUrl:(value: string | undefined)=>resolveAssetPath(value,{legacyResolve:(key)=>key.startsWith(\"themes/\")?`/api/themes/${key.slice(\"themes/\".length)}`:undefined})};',\n 'await hydrateThemePage({container:document.querySelector(\"[data-theme-hydration-root]\")!,runtime,pageData:payload.pageData,layoutData:payload.layoutData,metadata,onRecoverableError:(error)=>console.error(\"[theme-dev] theme hydration recovered from an error\",error)});',\n \"\",\n ].join(\"\\n\"),\n \"utf8\",\n );\n await writeFile(\n path.join(buildDir, \"editor-client.ts\"),\n [\n 'import \"@puckeditor/core/puck.css\";',\n 'import { composeUnifiedThemeEditorData, createThemeDesignFontStylesheetUrl, createUnifiedThemeEditorConfig, installThemeLocale, installThemePreviewLocale, resolveAssetPath, resolveThemeDesignTokens, ThemeEditor } from \"@sudajs/theme-engine\";',\n 'import { createElement } from \"react\";',\n 'import { createRoot } from \"react-dom/client\";',\n 'const payloadElement=document.querySelector(\"#suda-theme-editor-data\");',\n 'if(!payloadElement){throw new Error(\"Missing Suda theme editor payload.\")}',\n \"const payload=JSON.parse(payloadElement.textContent ?? '{}');\",\n \"if(payload.themeLocaleMessages){installThemeLocale(payload.themeLocaleMessages)}\",\n \"if(payload.previewLocaleMessages){installThemePreviewLocale(payload.previewLocaleMessages)}\",\n 'const runtime=(await import(\"./runtime.dev\")).default;',\n 'const resolveAssetUrl=(value: string | undefined)=>resolveAssetPath(value,{legacyResolve:(key)=>key.startsWith(\"themes/\")?`/api/themes/${key.slice(\"themes/\".length)}`:undefined});',\n 'const config=createUnifiedThemeEditorConfig(runtime.theme,undefined,{labels:{pageContent:\"Page content\",themeSettings:\"Theme settings\"}});',\n 'const data=composeUnifiedThemeEditorData(payload.layoutData,payload.pageData,{layoutConfig:runtime.theme.layoutConfig,pageConfig:runtime.theme.pageConfig});',\n 'function applyDesignFont(nextData){const fieldName=payload.designSystemFieldName||\"designSystem\";const value=nextData?.root?.props?.[fieldName];const tokens=resolveThemeDesignTokens(payload.designSystem,value);const href=createThemeDesignFontStylesheetUrl(tokens);let link=document.querySelector(\"#suda-theme-fonts\");if(!href){link?.remove();return}if(!link){link=document.createElement(\"link\");link.id=\"suda-theme-fonts\";link.rel=\"stylesheet\";document.head.append(link)}link.href=href}',\n 'applyDesignFont(data);',\n 'const editorContext={assets:[],resolveAssetUrl,currentPageId:payload.currentPageId,backHref:payload.backHref,editorPages:payload.editorPages,editorLocale:payload.locale,chromeMessages:{backToPages:\"Back to preview\",pageMenuLabel:\"Switch starter page\",themeSettings:\"Theme settings\",outline:\"Outline\",blocks:\"Blocks\",switchViewport:\"Switch viewport\"}};',\n 'const metadata={contactForm:payload.contactForm,isEditor:true,resolveAssetUrl};',\n 'createRoot(document.querySelector(\"#suda-theme-dev-editor-root\")!).render(createElement(ThemeEditor,{config,data,editorContext,metadata,iframe:false,height:\"100%\",previewStylesheetUrls:[\"/src/styles.css\"],publishActionVisible:false,onChange:applyDesignFont}));',\n \"\",\n ].join(\"\\n\"),\n \"utf8\",\n );\n}\n\nfunction createClientRuntimeSource(\n clientHooksImport: string,\n useClientDirective: boolean,\n typescript = true,\n): string {\n if (!typescript) {\n return [\n ...(useClientDirective ? ['\"use client\";'] : []),\n 'import * as themeConfig from \"../src/config.js\";',\n clientHooksImport,\n \"const theme = {\",\n \" pageConfig: themeConfig.pageConfig,\",\n \" layoutConfig: themeConfig.layoutConfig,\",\n \"};\",\n 'if (\"rendering\" in themeConfig && themeConfig.rendering !== undefined) {',\n \" theme.rendering = themeConfig.rendering;\",\n \"}\",\n \"const hooks = clientHooks;\",\n \"const runtime = { theme };\",\n \"if (hooks.initialize !== undefined) {\",\n \" runtime.initialize = hooks.initialize;\",\n \"}\",\n \"export default runtime;\",\n \"\",\n ].join(\"\\n\");\n }\n\n return [\n ...(useClientDirective ? ['\"use client\";'] : []),\n 'import type { ThemeClientHooks, ThemeClientRuntime, ThemeRenderModule } from \"@sudajs/theme-engine/runtime\";',\n 'import * as themeConfig from \"../src/config.js\";',\n clientHooksImport,\n \"const theme: ThemeRenderModule = {\",\n \" pageConfig: themeConfig.pageConfig,\",\n \" layoutConfig: themeConfig.layoutConfig,\",\n \"};\",\n 'if (\"rendering\" in themeConfig && themeConfig.rendering !== undefined) {',\n \" theme.rendering = themeConfig.rendering;\",\n \"}\",\n \"const hooks: ThemeClientHooks = clientHooks;\",\n \"const runtime: ThemeClientRuntime = { theme };\",\n \"if (hooks.initialize !== undefined) {\",\n \" runtime.initialize = hooks.initialize;\",\n \"}\",\n \"export default runtime;\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction createSudaPreviewVitePlugin(root: string, options: ViteDevPreviewOptions = {}): {\n name: string;\n resolveId: (source: string, importer?: string) => string | undefined;\n configureServer: (server: ViteDevServer) => void;\n} {\n return {\n name: \"suda-theme-preview\",\n resolveId(source, importer) {\n if (importer === undefined || !source.endsWith(\".js\") || !source.startsWith(\".\")) {\n return undefined;\n }\n const requestedPath = path.resolve(path.dirname(importer), source);\n if (!requestedPath.startsWith(`${root}${path.sep}`)) {\n return undefined;\n }\n for (const extension of [\".ts\", \".tsx\"]) {\n const candidate = `${requestedPath.slice(0, -3)}${extension}`;\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n return undefined;\n },\n configureServer(server) {\n server.middlewares.use((request, response, next) => {\n void (async () => {\n const url = new URL(request.url ?? \"/\", \"http://localhost\");\n if (url.pathname.startsWith(\"/src/\") && url.pathname.endsWith(\".js\")) {\n const sourcePath = path.join(root, url.pathname.slice(1));\n for (const extension of [\".ts\", \".tsx\"]) {\n const candidate = `${sourcePath.slice(0, -3)}${extension}`;\n if (existsSync(candidate)) {\n request.url = `${url.pathname.slice(0, -3)}${extension}${url.search}`;\n break;\n }\n }\n }\n const assetPrefixMatch = url.pathname.match(/^\\/api\\/themes\\/[^/]+\\/[^/]+\\/assets\\/(.+)$/);\n if (assetPrefixMatch?.[1]) {\n request.url = `/assets/${assetPrefixMatch[1]}${url.search}`;\n next();\n return;\n }\n const visualAuditComponent = resolveDevVisualAuditComponent(url.pathname);\n const editorSlug = resolveDevEditorSlug(url.pathname);\n const previewSlug = resolveDevStarterSlug(url.pathname);\n if (\n visualAuditComponent === undefined &&\n editorSlug === undefined &&\n previewSlug === undefined\n ) {\n next();\n return;\n }\n const isEditor = editorSlug !== undefined;\n const slug = isEditor ? editorSlug : previewSlug;\n try {\n const acceptLanguageHeader = request.headers[\"accept-language\"];\n const acceptLanguage = Array.isArray(acceptLanguageHeader)\n ? acceptLanguageHeader.join(\",\")\n : acceptLanguageHeader;\n const explicitLang = url.searchParams.get(\"lang\");\n const localized = await loadLocalizedViteDevTheme(\n root,\n server,\n explicitLang,\n acceptLanguage,\n );\n const renderer = await loadThemeScopedRenderer(root);\n const starterSlug = slug ?? pickStarterSlug(localized.theme);\n const starter = visualAuditComponent\n ? createVisualAuditPage(localized.theme, visualAuditComponent)\n : starterSlug\n ? findStarterPage(localized.theme, starterSlug)\n : null;\n if (!starter) {\n response.writeHead(404, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(\n starterSlug\n ? `Unknown starter page: ${starterSlug}`\n : visualAuditComponent\n ? `Unknown theme page component: ${visualAuditComponent}`\n : \"No starter pages declared by this theme.\",\n );\n return;\n }\n const htmlSource = isEditor\n ? renderDevEditorPageHtml(\n localized.theme,\n starter,\n renderer,\n localized.locale,\n url.searchParams,\n localized.previewLocaleMessages,\n localized.themeLocaleMessages,\n )\n : renderDevStarterPageHtml(\n localized.theme,\n starter,\n renderer,\n localized.locale,\n canonicalLocale(explicitLang) !== null,\n localized.previewLocaleMessages,\n url.searchParams,\n { showDevTools: options.showDevTools !== false },\n );\n const html = await server.transformIndexHtml(url.pathname, htmlSource);\n response.writeHead(200, { \"Content-Type\": \"text/html; charset=utf-8\" });\n response.end(html);\n } catch (error) {\n response.writeHead(500, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(error instanceof Error ? error.stack : String(error));\n }\n })();\n });\n },\n };\n}\n\nasync function loadLocalizedViteDevTheme(\n root: string,\n server: ViteDevServer,\n explicitLang: string | null,\n acceptLanguage: string | undefined,\n): Promise<{\n theme: ValidatedTheme;\n locale: string;\n themeLocaleMessages: ThemeLocaleMessages;\n previewLocaleMessages?: ThemePreviewLocaleMessages;\n}> {\n return withSerializedVitePreviewLocaleLoad(server, async () => {\n const baseTheme = await loadViteDevTheme(root, server);\n const localeParams: Parameters<typeof resolveThemePreviewLocale>[0] = {\n previewLocales: baseTheme.module.manifest.previewLocales,\n explicitLang,\n };\n if (acceptLanguage !== undefined) {\n localeParams.acceptLanguage = acceptLanguage;\n }\n const locale = resolveThemePreviewLocale(localeParams);\n const themeLocaleMessages = await readDevThemeLocaleMessages(root, locale);\n if (!baseTheme.module.manifest.previewLocales) {\n return { theme: baseTheme, locale, themeLocaleMessages };\n }\n const previewLocaleMessages = await readDevPreviewLocaleMessages(root, locale);\n server.moduleGraph.invalidateAll();\n const theme = await runWithThemePreviewLocale(previewLocaleMessages, () =>\n loadViteDevTheme(root, server),\n );\n return { theme, locale, themeLocaleMessages, previewLocaleMessages };\n });\n}\n\nconst vitePreviewLocaleLoadTails = new WeakMap<object, Promise<void>>();\n\nasync function withSerializedVitePreviewLocaleLoad<Result>(\n server: object,\n load: () => Promise<Result>,\n): Promise<Result> {\n const previous = vitePreviewLocaleLoadTails.get(server) ?? Promise.resolve();\n let release!: () => void;\n const gate = new Promise<void>((resolve) => {\n release = resolve;\n });\n const tail = previous.then(() => gate);\n vitePreviewLocaleLoadTails.set(server, tail);\n await previous;\n try {\n return await load();\n } finally {\n release();\n if (vitePreviewLocaleLoadTails.get(server) === tail) {\n vitePreviewLocaleLoadTails.delete(server);\n }\n }\n}\n\nasync function loadViteDevTheme(root: string, server: ViteDevServer): Promise<ValidatedTheme> {\n const serverEntryPath = await findServerEntry(root);\n const imported = await server.ssrLoadModule(toViteModuleUrl(root, serverEntryPath));\n if (!imported.default) {\n throw new Error(`${path.relative(root, serverEntryPath)} must export a default ThemeModule.`);\n }\n validateThemeModule(imported.default);\n return {\n root,\n module: imported.default,\n serverEntryPath,\n clientEntryPath: null,\n stylesheetPath: path.join(root, \"src\", \"styles.css\"),\n };\n}\n\ninterface PreviewServerHandle {\n url: string;\n port: number;\n server: ViteDevServer;\n close: () => Promise<void>;\n}\n\nconst PREVIEW_PUBLIC_BASE_PATH = \"/api/themes\";\n\nfunction pickStarterSlug(theme: ValidatedTheme): string | null {\n const pages = theme.module.starterPages;\n if (pages.length === 0) {\n return null;\n }\n return (pages.find((page) => page.isHome) ?? pages[0])?.slug ?? null;\n}\n\nfunction findStarterPage(theme: ValidatedTheme, slug: string): ThemeStarterPage | null {\n return theme.module.starterPages.find((page) => page.slug === slug) ?? null;\n}\n\nconst DEV_EDITOR_PATH = \"/__suda/editor\";\nconst DEV_VISUAL_AUDIT_PATH = \"/__suda/visual-audit\";\nfunction resolveDevVisualAuditComponent(pathname: string): string | undefined {\n if (!pathname.startsWith(`${DEV_VISUAL_AUDIT_PATH}/`)) {\n return undefined;\n }\n const encodedComponent = pathname.slice(DEV_VISUAL_AUDIT_PATH.length + 1);\n if (!encodedComponent || encodedComponent.includes(\"/\")) {\n return undefined;\n }\n try {\n return decodeURIComponent(encodedComponent);\n } catch {\n return undefined;\n }\n}\n\nfunction getThemeVisualAuditComponentTypes(theme: Pick<ValidatedTheme, \"module\">): string[] {\n return Object.keys(theme.module.pageConfig.components);\n}\n\nfunction createVisualAuditPage(\n theme: ValidatedTheme,\n type: string,\n): ThemeStarterPage | null {\n const themeComponent = theme.module.pageConfig.components[type] as\n | {\n defaultProps?: Record<string, unknown>;\n }\n | undefined;\n if (!themeComponent) {\n return null;\n }\n const props = {\n ...(themeComponent.defaultProps ?? {}),\n id: `suda-visual-audit-${safeObjectKeyPart(type)}`,\n };\n return {\n slug: `visual-audit-${safeObjectKeyPart(type).toLowerCase()}`,\n title: `Visual audit: ${type}`,\n data: {\n root: { props: {} },\n content: [{ type, props }],\n },\n };\n}\n\nfunction resolveDevEditorSlug(pathname: string): string | null | undefined {\n if (pathname === DEV_EDITOR_PATH || pathname === `${DEV_EDITOR_PATH}/`) {\n return null;\n }\n if (!pathname.startsWith(`${DEV_EDITOR_PATH}/`)) {\n return undefined;\n }\n const normalized = pathname.slice(DEV_EDITOR_PATH.length + 1).replace(/\\/+$/, \"\");\n if (!normalized || normalized.includes(\"/\")) {\n return undefined;\n }\n return decodeURIComponent(normalized);\n}\n\nfunction resolveDevStarterSlug(pathname: string): string | null | undefined {\n if (pathname === \"/\") {\n return null;\n }\n if (pathname.startsWith(\"/@\")) {\n return undefined;\n }\n const normalized = pathname.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n if (!normalized || normalized.includes(\"/\")) {\n return undefined;\n }\n return decodeURIComponent(normalized);\n}\n\nfunction canonicalLocale(value: string | null | undefined): string | null {\n const candidate = value?.trim();\n if (!candidate || candidate === \"*\") {\n return null;\n }\n try {\n return Intl.getCanonicalLocales(candidate)[0] ?? null;\n } catch {\n return null;\n }\n}\n\nfunction acceptLanguageLocales(value: string | undefined): string[] {\n if (!value) {\n return [];\n }\n return value\n .split(\",\")\n .map((part, index) => {\n const [rawLocale, ...parameters] = part.trim().split(\";\");\n const locale = canonicalLocale(rawLocale);\n const qualityParameter = parameters.find((parameter) => parameter.trim().startsWith(\"q=\"));\n const parsedQuality = qualityParameter\n ? Number.parseFloat(qualityParameter.trim().slice(2))\n : 1;\n const quality = Number.isFinite(parsedQuality) ? parsedQuality : 0;\n return { locale, quality, index };\n })\n .filter((entry): entry is { locale: string; quality: number; index: number } =>\n Boolean(entry.locale) && entry.quality > 0,\n )\n .sort((left, right) => right.quality - left.quality || left.index - right.index)\n .map((entry) => entry.locale);\n}\n\nfunction localeLookupCandidates(locale: string): string[] {\n const candidates: string[] = [];\n let current = locale;\n while (current) {\n candidates.push(current);\n const separator = current.lastIndexOf(\"-\");\n if (separator < 0) {\n break;\n }\n current = current.slice(0, separator);\n }\n return candidates;\n}\n\nfunction resolveThemePreviewLocale(params: {\n previewLocales: string[] | undefined;\n explicitLang?: string | null;\n acceptLanguage?: string;\n}): string {\n const supported = params.previewLocales ?? [\"en\"];\n const supportedByNormalized = new Map(\n supported.map((locale) => [locale.toLowerCase(), locale]),\n );\n const explicitLocale = canonicalLocale(params.explicitLang);\n const requestedLocales = explicitLocale\n ? [explicitLocale]\n : acceptLanguageLocales(params.acceptLanguage);\n for (const requested of requestedLocales) {\n for (const candidate of localeLookupCandidates(requested)) {\n const supportedLocale = supportedByNormalized.get(candidate.toLowerCase());\n if (supportedLocale) {\n return supportedLocale;\n }\n }\n if (explicitLocale) {\n break;\n }\n }\n return supportedByNormalized.get(\"en\") ?? \"en\";\n}\n\nasync function readDevPreviewLocaleMessages(\n root: string,\n locale: string,\n): Promise<ThemePreviewLocaleMessages> {\n const filePath = path.join(root, \"src\", \"locales\", `${locale}.content.json`);\n const messages = await readLocaleJson(filePath);\n if (!isRecord(messages)) {\n throw new Error(`Theme preview locale ${locale} must be a JSON object.`);\n }\n return messages;\n}\n\nasync function readDevThemeLocaleMessages(\n root: string,\n locale: string,\n): Promise<ThemeLocaleMessages> {\n const localesDir = path.join(root, \"src\", \"locales\");\n const localizedPath = path.join(localesDir, `${locale}.json`);\n const filePath = (await pathExists(localizedPath))\n ? localizedPath\n : path.join(localesDir, \"en.json\");\n const messages = await readLocaleJson(filePath);\n if (!isRecord(messages)) {\n throw new Error(`Theme locale ${locale} must be a JSON object.`);\n }\n return messages;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\n/**\n * Mirrors apps/site `resolveAssetUrl`. Themes reference asset values as\n * either absolute URLs, raw `themes/<key>/<version>/<rel>` paths, or other\n * relative strings. In dev we have no CDN, so theme-bundled paths go through\n * the local proxy and everything else falls back to itself.\n */\nfunction createPreviewAssetResolver(\n resolveAssetPath: (\n value: string | undefined,\n options?: ResolveAssetPathOptions,\n ) => string | undefined,\n): (value: string | undefined) => string | undefined {\n return (value) => {\n return resolveAssetPath(value, {\n legacyResolve: (key) => {\n if (key.startsWith(\"themes/\")) {\n return `${PREVIEW_PUBLIC_BASE_PATH}/${key.slice(\"themes/\".length)}`;\n }\n return undefined;\n },\n });\n };\n}\n\n/**\n * Theme-project-scoped renderer bundle. We deliberately resolve `react`,\n * `react-dom/server` and `@sudajs/theme-engine/server` through the theme\n * project's own `require` graph instead of the CLI's, because the theme's\n * local `dist/index.js` was already loaded against that copy of React. Importing\n * a different React instance from the CLI side would yield two React\n * dispatchers; client components inside the theme would call hooks against\n * the CLI's React (whose dispatcher is `null` outside a render), producing\n * `Cannot read properties of null (reading 'useState')`.\n */\ninterface ThemeRenderer {\n ThemeRender: typeof ThemeRenderFn;\n extractLayoutChrome: typeof extractLayoutChromeFn;\n resolveAssetPath: typeof resolveAssetPathFn;\n createElement: typeof createElementFn;\n renderToString: typeof renderToStringFn;\n}\n\nasync function loadThemeScopedRenderer(themeRoot: string): Promise<ThemeRenderer> {\n // `require.resolve` from the theme's package.json forces Node to walk the\n // theme project's node_modules first. In the typical pnpm dev layout that\n // hoists a single React copy into the workspace, but in a multi-repo dev\n // setup (CLI repo + standalone theme repo) each repo has its own React,\n // so resolving from the theme side picks the same React instance that the\n // theme bundle's local `dist/index.js` was loaded against.\n const themeRequire = createRequire(path.join(themeRoot, \"package.json\"));\n const reactPath = themeRequire.resolve(\"react\");\n const reactDomServerPath = themeRequire.resolve(\"react-dom/server\");\n const themeEngineServerPath = themeRequire.resolve(\"@sudajs/theme-engine/server\");\n\n const [reactModule, reactDomServerModule, themeEngineServerModule] = (await Promise.all([\n import(pathToFileURL(reactPath).href),\n import(pathToFileURL(reactDomServerPath).href),\n import(pathToFileURL(themeEngineServerPath).href),\n ])) as [\n { createElement: typeof createElementFn },\n { renderToString: typeof renderToStringFn },\n {\n ThemeRender: typeof ThemeRenderFn;\n extractLayoutChrome: typeof extractLayoutChromeFn;\n resolveAssetPath: typeof resolveAssetPathFn;\n },\n ];\n\n return {\n ThemeRender: themeEngineServerModule.ThemeRender,\n extractLayoutChrome: themeEngineServerModule.extractLayoutChrome,\n resolveAssetPath: themeEngineServerModule.resolveAssetPath,\n createElement: reactModule.createElement,\n renderToString: reactDomServerModule.renderToString,\n };\n}\n\nfunction renderDevStarterPageHtml(\n theme: ValidatedTheme,\n page: ThemeStarterPage,\n renderer: ThemeRenderer,\n locale = \"en\",\n preserveLang = false,\n previewLocaleMessages?: ThemePreviewLocaleMessages,\n searchParams = new URLSearchParams(),\n options: ViteDevPreviewOptions = {},\n): string {\n const layoutData = createDevPreviewLayout(theme, searchParams);\n const designTokens = resolveDevDesignTokens(theme, layoutData);\n const fontStylesheetUrl = createThemeDesignFontStylesheetUrl(designTokens);\n const chrome = renderer.extractLayoutChrome(layoutData);\n const metadata: ThemeRenderMetadata = {\n resolveAssetUrl: createPreviewAssetResolver(renderer.resolveAssetPath),\n contactForm: PREVIEW_CONTACT_FORM,\n };\n const body = renderer.renderToString(\n renderer.createElement(renderer.ThemeRender, {\n theme: theme.module,\n pageData: page.data,\n layoutData,\n metadata,\n }),\n );\n const cssVarStyle = Object.entries(chrome.cssVariables)\n .map(([key, value]) => `${key}: ${value};`)\n .join(\" \");\n const customHead = chrome.customHeadCode ?? \"\";\n const customBody = chrome.customBodyCode ?? \"\";\n const showDevTools = options.showDevTools !== false;\n const designPalette = showDevTools\n ? renderDevDesignPalette(\n theme.module.manifest.designSystem,\n createDevEditorHref(page.slug, searchParams),\n )\n : null;\n const hydrationPayload = serializeInlineScriptValue({\n pageData: page.data,\n layoutData,\n contactForm: PREVIEW_CONTACT_FORM,\n previewLocaleMessages,\n });\n const hydrationScript = [\n `<script id=\"suda-theme-hydration-data\" type=\"application/json\">${hydrationPayload}</script>`,\n '<script type=\"module\">void import(\"/.suda-build/preview-client.ts\").catch((error)=>console.error(\"[theme-dev] theme client failed to load\",error))</script>',\n ].join(\"\");\n return [\n \"<!doctype html>\",\n `<html lang=\"${escapeHtml(locale)}\">`,\n \"<head>\",\n '<meta charset=\"utf-8\" />',\n '<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />',\n `<title>${escapeHtml(`${theme.module.manifest.name} — ${page.title}`)}</title>`,\n '<link rel=\"stylesheet\" href=\"/src/styles.css\" />',\n ...(fontStylesheetUrl\n ? [`<link id=\"suda-theme-fonts\" rel=\"stylesheet\" href=\"${escapeHtml(fontStylesheetUrl)}\" />`]\n : []),\n customHead,\n designPalette?.style ?? \"\",\n \"</head>\",\n `<body${cssVarStyle ? ` style=\"${cssVarStyle}\"` : \"\"}>`,\n `<div data-theme-hydration-root=\"\" style=\"display:contents\">${body}</div>`,\n designPalette?.html ?? \"\",\n customBody,\n hydrationScript,\n ...(preserveLang\n ? [\n '<script>for(const a of document.querySelectorAll(\"a[href]\")){try{const u=new URL(a.href,location.href);if(u.origin===location.origin){u.searchParams.set(\"lang\",new URL(location.href).searchParams.get(\"lang\"));a.href=u.pathname+u.search+u.hash}}catch{}}</script>',\n ]\n : []),\n \"</body>\",\n \"</html>\",\n ].join(\"\");\n}\n\nfunction copyDevPreviewSearchParams(searchParams: URLSearchParams): URLSearchParams {\n const copied = new URLSearchParams();\n for (const key of [\"lang\", \"designPreset\"]) {\n const value = searchParams.get(key);\n if (value) {\n copied.set(key, value);\n }\n }\n return copied;\n}\n\nfunction createDevEditorHref(slug: string, searchParams: URLSearchParams): string {\n const query = copyDevPreviewSearchParams(searchParams).toString();\n return `${DEV_EDITOR_PATH}/${encodeURIComponent(slug)}${query ? `?${query}` : \"\"}`;\n}\n\nfunction createDevPreviewHref(page: ThemeStarterPage, searchParams: URLSearchParams): string {\n const pathname = page.isHome ? \"/\" : `/${encodeURIComponent(page.slug)}`;\n const query = copyDevPreviewSearchParams(searchParams).toString();\n return `${pathname}${query ? `?${query}` : \"\"}`;\n}\n\nfunction createDevPreviewLayout(\n theme: ValidatedTheme,\n searchParams: URLSearchParams,\n): ThemeModule[\"defaultLayout\"] {\n const requestedPresetId = searchParams.get(\"designPreset\");\n const requestedPreset = requestedPresetId\n ? theme.module.manifest.designSystem.presets.find(\n (preset) => preset.id === requestedPresetId,\n )\n : undefined;\n if (!requestedPreset) {\n return theme.module.defaultLayout;\n }\n\n const designFieldName = findThemeDesignSystemFieldName(theme.module.layoutConfig.root?.fields);\n if (!designFieldName) {\n return theme.module.defaultLayout;\n }\n\n const layoutData = structuredClone(theme.module.defaultLayout);\n layoutData.root = {\n ...(layoutData.root ?? {}),\n props: {\n ...(layoutData.root?.props ?? {}),\n [designFieldName]: { presetId: requestedPreset.id },\n },\n };\n return layoutData;\n}\n\nfunction resolveDevDesignTokens(\n theme: ValidatedTheme,\n layoutData: ThemeModule[\"defaultLayout\"],\n) {\n const designFieldName = findThemeDesignSystemFieldName(theme.module.layoutConfig.root?.fields);\n const rootProps = layoutData.root?.props as Record<string, unknown> | undefined;\n const designValue = designFieldName\n ? (rootProps?.[designFieldName] as { presetId: string } | undefined)\n : undefined;\n return resolveThemeDesignTokens(theme.module.manifest.designSystem, designValue);\n}\n\nfunction renderDevEditorPageHtml(\n theme: ValidatedTheme,\n page: ThemeStarterPage,\n renderer: ThemeRenderer,\n locale = \"en\",\n searchParams = new URLSearchParams(),\n previewLocaleMessages?: ThemePreviewLocaleMessages,\n themeLocaleMessages?: ThemeLocaleMessages,\n): string {\n const layoutData = createDevPreviewLayout(theme, searchParams);\n const designTokens = resolveDevDesignTokens(theme, layoutData);\n const fontStylesheetUrl = createThemeDesignFontStylesheetUrl(designTokens);\n const chrome = renderer.extractLayoutChrome(layoutData);\n const cssVariables = { ...chrome.cssVariables };\n const cssVarStyle = Object.entries(cssVariables)\n .map(([key, value]) => `${key}: ${value};`)\n .join(\" \");\n const editorPages = theme.module.starterPages.map((starterPage) => ({\n id: starterPage.slug,\n handle: starterPage.slug,\n label: starterPage.title,\n group: starterPage.isHome ? \"home\" : \"static\",\n editorHref: createDevEditorHref(starterPage.slug, searchParams),\n }));\n const payload = serializeInlineScriptValue({\n pageData: page.data,\n layoutData,\n contactForm: PREVIEW_CONTACT_FORM,\n previewLocaleMessages,\n designSystem: theme.module.manifest.designSystem,\n designSystemFieldName:\n findThemeDesignSystemFieldName(theme.module.layoutConfig.root?.fields) ?? \"designSystem\",\n themeLocaleMessages,\n locale,\n currentPageId: page.slug,\n backHref: createDevPreviewHref(page, searchParams),\n editorPages,\n });\n\n return [\n \"<!doctype html>\",\n `<html lang=\"${escapeHtml(locale)}\">`,\n \"<head>\",\n '<meta charset=\"utf-8\" />',\n '<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />',\n `<title>${escapeHtml(`Edit ${theme.module.manifest.name} — ${page.title}`)}</title>`,\n '<link rel=\"stylesheet\" href=\"/src/styles.css\" />',\n ...(fontStylesheetUrl\n ? [`<link id=\"suda-theme-fonts\" rel=\"stylesheet\" href=\"${escapeHtml(fontStylesheetUrl)}\" />`]\n : []),\n '<style>html,body,#suda-theme-dev-editor-root{height:100%;margin:0}body{overflow:hidden}</style>',\n \"</head>\",\n `<body${cssVarStyle ? ` style=\"${cssVarStyle}\"` : \"\"}>`,\n '<div id=\"suda-theme-dev-editor-root\"></div>',\n `<script id=\"suda-theme-editor-data\" type=\"application/json\">${payload}</script>`,\n '<script type=\"module\">void import(\"/.suda-build/editor-client.ts\").catch((error)=>console.error(\"[theme-dev] theme editor failed to load\",error))</script>',\n \"</body>\",\n \"</html>\",\n ].join(\"\");\n}\n\nfunction serializeInlineScriptValue(value: unknown): string {\n return JSON.stringify(value)\n .replaceAll(\"<\", \"\\\\u003c\")\n .replaceAll(\"\\u2028\", \"\\\\u2028\")\n .replaceAll(\"\\u2029\", \"\\\\u2029\");\n}\n\nfunction renderDevDesignPalette(\n designSystem: ThemeModule[\"manifest\"][\"designSystem\"],\n editorHref: string,\n): {\n style: string;\n html: string;\n} {\n const primaryColors = new Set(\n designSystem.presets.map((preset) => preset.tokens.colors.primary),\n );\n const hasPresetSwitcher = primaryColors.size >= 2;\n const presets = designSystem.presets.map((preset) => ({\n id: preset.id,\n variables: createThemeDesignCssVariables(preset.tokens),\n fontStylesheetUrl: createThemeDesignFontStylesheetUrl(preset.tokens),\n }));\n const selectedIcon = renderToStaticMarkup(\n createElement(CircleCheck, {\n className: \"suda-dev-preset-selected-icon\",\n width: 32,\n height: 32,\n \"aria-hidden\": true,\n focusable: false,\n }),\n );\n const editIcon = renderToStaticMarkup(\n createElement(Pencil, {\n width: 20,\n height: 20,\n \"aria-hidden\": true,\n focusable: false,\n }),\n );\n const buttons = hasPresetSwitcher\n ? designSystem.presets\n .map(\n (preset) =>\n `<button type=\"button\" data-suda-dev-preset=\"${escapeHtml(preset.id)}\" title=\"${escapeHtml(\n preset.description ? `${preset.label} — ${preset.description}` : preset.label,\n )}\" aria-label=\"${escapeHtml(preset.label)}\"><span style=\"background:${escapeHtml(\n preset.tokens.colors.primary,\n )}\"></span>${selectedIcon}</button>`,\n )\n .join(\"\")\n : \"\";\n const config = serializeInlineScriptValue({\n defaultPresetId: designSystem.defaultPresetId,\n presets,\n });\n\n return {\n style:\n '<style data-suda-dev-palette-style>\\n' +\n '#suda-dev-palette{all:initial;position:fixed;z-index:2147483000;top:50%;right:16px;width:64px;max-height:calc(100svh - 32px);padding:8px 9px;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;background:#fff;border:1px solid #d1d5db;border-radius:999px;box-shadow:0 8px 24px rgb(15 23 42 / 12%);transform:translateY(-50%);color-scheme:light;scrollbar-width:none;-ms-overflow-style:none}\\n' +\n '#suda-dev-palette::-webkit-scrollbar{display:none}\\n' +\n '#suda-dev-palette button{all:initial;position:relative;display:grid;width:44px;height:44px;box-sizing:border-box;cursor:pointer;border-radius:999px;place-items:center}\\n' +\n '#suda-dev-palette button span{display:block;width:32px;height:32px;border-radius:999px;transition:transform 120ms ease}\\n' +\n '#suda-dev-palette button:hover span{transform:scale(1.08)}\\n' +\n '#suda-dev-palette button[aria-pressed=\"true\"] span{visibility:hidden}\\n' +\n '#suda-dev-palette .suda-dev-preset-selected-icon{position:absolute;display:block;width:32px;height:32px;color:var(--suda-dev-preset-primary);visibility:hidden;opacity:0;transform:scale(.85);transition:opacity 120ms ease,transform 120ms ease}\\n' +\n '#suda-dev-palette button[aria-pressed=\"true\"] .suda-dev-preset-selected-icon{visibility:visible;opacity:1;transform:scale(1)}\\n' +\n '#suda-dev-palette button:focus-visible{outline:2px solid #94a3b8;outline-offset:2px}\\n' +\n '#suda-dev-palette .suda-dev-edit-divider{display:block;width:28px;height:1px;margin:4px auto;background:#e2e8f0}\\n' +\n '#suda-dev-palette .suda-dev-edit-link{all:initial;display:grid;width:44px;height:44px;box-sizing:border-box;color:#334155;cursor:pointer;border-radius:999px;place-items:center;transition:background-color 120ms ease,color 120ms ease}\\n' +\n '#suda-dev-palette .suda-dev-edit-link:hover{color:#0f172a;background:#f1f5f9}\\n' +\n '#suda-dev-palette .suda-dev-edit-link:focus-visible{outline:2px solid #94a3b8;outline-offset:2px}\\n' +\n '@media(max-width:640px){#suda-dev-palette{right:8px;max-height:calc(100svh - 16px)}}\\n' +\n '@media(prefers-reduced-motion:reduce){#suda-dev-palette button span,#suda-dev-palette .suda-dev-preset-selected-icon,#suda-dev-palette .suda-dev-edit-link{transition:none}}\\n' +\n '</style>',\n html:\n `<aside id=\"suda-dev-palette\" aria-label=\"Theme development tools\">${buttons}${hasPresetSwitcher ? '<span class=\"suda-dev-edit-divider\" aria-hidden=\"true\"></span>' : \"\"}<a class=\"suda-dev-edit-link\" data-suda-dev-editor-link=\"\" href=\"${escapeHtml(editorHref)}\" title=\"Edit starter page\" aria-label=\"Edit starter page\">${editIcon}</a></aside>` +\n (hasPresetSwitcher\n ? `<script data-suda-dev-palette-script>(function(){const config=${config};const palette=document.getElementById(\"suda-dev-palette\");if(!palette)return;const byId=new Map(config.presets.map((preset)=>[preset.id,preset]));const params=new URL(location.href).searchParams;const requested=params.get(\"designPreset\");const selected=byId.has(requested)?requested:config.defaultPresetId;function apply(id,updateUrl){const preset=byId.get(id);if(!preset)return;const properties=Object.keys(preset.variables);const targets=[document.documentElement,document.body,...document.querySelectorAll(\"[style]\")].filter((element,index,items)=>items.indexOf(element)===index&&(element===document.documentElement||element===document.body||properties.some((property)=>element.style.getPropertyValue(property)!==\"\")));for(const target of targets){for(const [property,value] of Object.entries(preset.variables))target.style.setProperty(property,value)}let fontLink=document.querySelector(\"#suda-theme-fonts\");if(preset.fontStylesheetUrl){if(!fontLink){fontLink=document.createElement(\"link\");fontLink.id=\"suda-theme-fonts\";fontLink.rel=\"stylesheet\";document.head.append(fontLink)}fontLink.href=preset.fontStylesheetUrl}else fontLink?.remove();for(const button of palette.querySelectorAll(\"[data-suda-dev-preset]\")){const active=button.dataset.sudaDevPreset===id;button.setAttribute(\"aria-pressed\",String(active));button.style.setProperty(\"--suda-dev-preset-primary\",byId.get(button.dataset.sudaDevPreset).variables[\"--primary\"])}const editorLink=palette.querySelector(\"[data-suda-dev-editor-link]\");if(editorLink){const editorUrl=new URL(editorLink.href,location.href);editorUrl.searchParams.set(\"designPreset\",id);editorLink.href=editorUrl.pathname+editorUrl.search+editorUrl.hash}if(updateUrl){const url=new URL(location.href);url.searchParams.set(\"designPreset\",id);history.replaceState(history.state,\"\",url)}}if(requested&&byId.has(requested))apply(selected,false);else for(const button of palette.querySelectorAll(\"[data-suda-dev-preset]\")){button.setAttribute(\"aria-pressed\",String(button.dataset.sudaDevPreset===selected));button.style.setProperty(\"--suda-dev-preset-primary\",byId.get(button.dataset.sudaDevPreset).variables[\"--primary\"])}palette.addEventListener(\"click\",(event)=>{const button=event.target.closest(\"[data-suda-dev-preset]\");if(button)apply(button.dataset.sudaDevPreset,true)})})();</script>`\n : \"\"),\n };\n}\n\ninterface ScreenshotOptions extends ThemeRootOptions {\n device?: string[] | string;\n output?: string;\n width?: string;\n height?: string;\n port?: string;\n fullPage?: boolean;\n}\n\ninterface VisualCheckOptions extends ThemeRootOptions {\n device?: string[] | string;\n output?: string;\n port?: string;\n preset?: string[] | string;\n fullPage?: boolean;\n}\n\ninterface VisualAuditIssue {\n code: string;\n message: string;\n severity: \"error\" | \"warning\";\n}\n\ninterface VisualAuditBrowserResult {\n issues: VisualAuditIssue[];\n}\n\ninterface VisualAuditReport {\n components: string[];\n issues: Array<VisualAuditIssue & { component: string; device: ScreenshotDevice; preset: string }>;\n outputDir: string;\n presets: string[];\n}\n\ninterface ResolvedScreenshotOptions {\n targets: ScreenshotTarget[];\n port: number;\n fullPage: boolean;\n}\n\ninterface ResolvedVisualCheckOptions {\n devices: ScreenshotDevice[];\n fullPage: boolean;\n outputDir: string;\n port: number;\n presetIds: string[];\n}\n\nconst SCREENSHOT_DEVICES = [\"desktop\", \"tablet\", \"mobile\"] as const;\ntype ScreenshotDevice = (typeof SCREENSHOT_DEVICES)[number];\n\ninterface ScreenshotDeviceConfig {\n viewport: { width: number; height: number };\n outputRelativePath: string;\n}\n\ninterface ScreenshotTarget {\n device: ScreenshotDevice;\n outputPath: string;\n viewport: { width: number; height: number };\n}\n\nconst SCREENSHOT_DEVICE_CONFIG: Record<ScreenshotDevice, ScreenshotDeviceConfig> = {\n desktop: {\n viewport: { width: 1440, height: 900 },\n outputRelativePath: path.join(\"assets\", \"preview\", \"desktop.png\"),\n },\n tablet: {\n viewport: { width: 834, height: 1112 },\n outputRelativePath: path.join(\"assets\", \"preview\", \"tablet.png\"),\n },\n mobile: {\n viewport: { width: 390, height: 844 },\n outputRelativePath: path.join(\"assets\", \"preview\", \"mobile.png\"),\n },\n};\n\nconst REQUIRED_PREVIEW_ARTIFACTS = SCREENSHOT_DEVICES.map(\n (device) => `assets/preview/${device}.png`,\n) as [string, string, string];\n\nfunction isScreenshotDevice(value: string): value is ScreenshotDevice {\n return (SCREENSHOT_DEVICES as readonly string[]).includes(value);\n}\n\nfunction parseScreenshotDevices(value: ScreenshotOptions[\"device\"]): ScreenshotDevice[] {\n if (value === undefined) {\n return [...SCREENSHOT_DEVICES];\n }\n const rawValues = Array.isArray(value) ? value : [value];\n const devices: ScreenshotDevice[] = [];\n for (const raw of rawValues) {\n for (const part of raw.split(\",\")) {\n const device = part.trim();\n if (!device) continue;\n if (!isScreenshotDevice(device)) {\n throw new Error(\n `Unknown screenshot device \"${device}\". Use one of: ${SCREENSHOT_DEVICES.join(\", \")}.`,\n );\n }\n if (!devices.includes(device)) {\n devices.push(device);\n }\n }\n }\n return devices.length > 0 ? devices : [...SCREENSHOT_DEVICES];\n}\n\nfunction parsePositiveInt(value: string | undefined, fallback: number): number {\n if (!value) {\n return fallback;\n }\n const parsed = Number.parseInt(value, 10);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;\n}\n\nfunction resolveScreenshotOptions(\n root: string,\n options: ScreenshotOptions,\n): ResolvedScreenshotOptions {\n const devices = parseScreenshotDevices(options.device);\n if (options.output && devices.length !== 1) {\n throw new Error(\"`--output` can only be used when exactly one `--device` is selected.\");\n }\n return {\n targets: devices.map((device) => {\n const config = SCREENSHOT_DEVICE_CONFIG[device];\n const viewport = {\n width: parsePositiveInt(options.width, config.viewport.width),\n height: parsePositiveInt(options.height, config.viewport.height),\n };\n return {\n device,\n outputPath: path.resolve(root, options.output ?? config.outputRelativePath),\n viewport,\n };\n }),\n port: parsePositiveInt(options.port, 4178),\n fullPage: options.fullPage === true,\n };\n}\n\nfunction parseVisualCheckPresetIds(\n theme: ValidatedTheme,\n value: VisualCheckOptions[\"preset\"],\n): string[] {\n const available = theme.module.manifest.designSystem.presets.map((preset) => preset.id);\n if (value === undefined) {\n return available;\n }\n const requested = (Array.isArray(value) ? value : [value])\n .flatMap((item) => item.split(\",\"))\n .map((item) => item.trim())\n .filter(Boolean);\n if (requested.length === 0) {\n return available;\n }\n const unknown = requested.filter((preset) => !available.includes(preset));\n if (unknown.length > 0) {\n throw new Error(\n `Unknown design preset ${unknown.map((preset) => `\"${preset}\"`).join(\", \")}. Available presets: ${available.join(\", \")}.`,\n );\n }\n return Array.from(new Set(requested));\n}\n\nfunction resolveVisualCheckOptions(\n root: string,\n theme: ValidatedTheme,\n options: VisualCheckOptions,\n): ResolvedVisualCheckOptions {\n const outputDir = path.resolve(root, options.output ?? path.join(\".suda-build\", \"visual-check\"));\n return {\n devices: parseScreenshotDevices(options.device),\n fullPage: options.fullPage === true,\n outputDir,\n port: parsePositiveInt(options.port, 4179),\n presetIds: parseVisualCheckPresetIds(theme, options.preset),\n };\n}\n\ninterface PlaywrightModule {\n chromium: {\n launch: (options?: { headless?: boolean }) => Promise<{\n newContext: (options: {\n viewport: { width: number; height: number };\n deviceScaleFactor?: number;\n }) => Promise<{\n newPage: () => Promise<{\n goto: (url: string, options?: { waitUntil?: string }) => Promise<unknown>;\n evaluate: <Result>(pageFunction: () => Result) => Promise<Result>;\n on: (event: \"pageerror\", listener: (error: Error) => void) => void;\n screenshot: (options: { path: string; fullPage?: boolean }) => Promise<unknown>;\n close: () => Promise<void>;\n }>;\n close: () => Promise<void>;\n }>;\n close: () => Promise<void>;\n }>;\n };\n}\n\ninterface SharpModule {\n default?: (input: string) => {\n png: (options?: { compressionLevel?: number; palette?: boolean }) => {\n toBuffer: () => Promise<Buffer>;\n };\n };\n}\n\ntype SharpOptimizer = (input: string) => {\n png: (options?: { compressionLevel?: number; palette?: boolean }) => {\n toBuffer: () => Promise<Buffer>;\n };\n};\n\nfunction createThemeProjectRequire(themeRoot: string) {\n return createRequire(path.join(themeRoot, \"package.json\"));\n}\n\nfunction normalizePlaywrightModule(moduleValue: unknown): PlaywrightModule | null {\n if (typeof moduleValue !== \"object\" || moduleValue === null) {\n return null;\n }\n if (\"chromium\" in moduleValue) {\n const chromium = moduleValue.chromium;\n if (typeof chromium === \"object\" && chromium !== null && \"launch\" in chromium) {\n return moduleValue as PlaywrightModule;\n }\n }\n if (\"default\" in moduleValue) {\n return normalizePlaywrightModule((moduleValue as { default?: unknown }).default);\n }\n return null;\n}\n\nfunction normalizeSharpModule(moduleValue: unknown): SharpOptimizer | null {\n if (typeof moduleValue === \"function\") {\n return moduleValue as SharpOptimizer;\n }\n if (typeof moduleValue !== \"object\" || moduleValue === null) {\n return null;\n }\n if (\"default\" in moduleValue) {\n return normalizeSharpModule((moduleValue as SharpModule).default);\n }\n return null;\n}\n\nasync function loadPlaywright(themeRoot: string): Promise<PlaywrightModule> {\n // Resolve module ids via runtime expressions so the optional dependency is not\n // required at type-check time. Either `playwright` or `@playwright/test` works.\n const themeRequire = createThemeProjectRequire(themeRoot);\n const candidates = [\"playwright\", \"@playwright/test\"];\n for (const id of candidates) {\n try {\n const resolvedId = themeRequire.resolve(id);\n const mod: unknown = await import(pathToFileURL(resolvedId).href);\n const playwright = normalizePlaywrightModule(mod);\n if (playwright) {\n return playwright;\n }\n } catch {\n // try next candidate\n }\n }\n throw new Error(\n \"Playwright is required for screenshot capture. Install it as a dev dependency: `pnpm add -D playwright && pnpm exec playwright install chromium`.\",\n );\n}\n\nfunction formatMissingSharpWarning(): string {\n return (\n \"warning: PNG optimization skipped because optional dependency `sharp` is not installed. \" +\n \"Install it as a dev dependency in the theme project: `pnpm add -D sharp`.\"\n );\n}\n\nlet warnedMissingSharp = false;\nlet warnedSharpOptimizeFailure = false;\n\nasync function loadOptionalSharp(themeRoot: string): Promise<SharpOptimizer | null> {\n const resolvers = [\n createThemeProjectRequire(themeRoot),\n createRequire(path.join(packageRoot, \"package.json\")),\n ];\n for (const resolver of resolvers) {\n try {\n const sharpModulePath = resolver.resolve(\"sharp\");\n const mod: unknown = await import(pathToFileURL(sharpModulePath).href);\n const sharp = normalizeSharpModule(mod);\n if (sharp) {\n return sharp;\n }\n } catch {\n // try next resolver\n }\n }\n return null;\n}\n\nasync function optimizePngIfAvailable(themeRoot: string, filePath: string): Promise<void> {\n const sharp = await loadOptionalSharp(themeRoot);\n if (!sharp) {\n if (!warnedMissingSharp) {\n console.warn(warning(formatMissingSharpWarning()));\n warnedMissingSharp = true;\n }\n return;\n }\n\n try {\n const optimized = await sharp(filePath).png({ compressionLevel: 9, palette: true }).toBuffer();\n await writeFile(filePath, optimized);\n } catch {\n if (!warnedSharpOptimizeFailure) {\n console.warn(\n warning(\"warning: PNG optimization failed. The screenshot was saved uncompressed.\"),\n );\n warnedSharpOptimizeFailure = true;\n }\n }\n}\n\nasync function captureScreenshot(\n root: string,\n options: ResolvedScreenshotOptions,\n): Promise<void> {\n const playwright = await loadPlaywright(root);\n const handle = await startViteDevPreviewServer(root, options.port, { showDevTools: false });\n try {\n const browser = await playwright.chromium.launch({ headless: true });\n try {\n for (const target of options.targets) {\n await mkdir(path.dirname(target.outputPath), { recursive: true });\n const context = await browser.newContext({\n viewport: target.viewport,\n deviceScaleFactor: 1,\n });\n try {\n const page = await context.newPage();\n await page.goto(handle.url, { waitUntil: \"networkidle\" });\n await page.screenshot({ path: target.outputPath, fullPage: options.fullPage });\n } finally {\n await context.close();\n }\n await optimizePngIfAvailable(root, target.outputPath);\n console.log(\n success(`captured ${target.device} ${style.path(path.relative(root, target.outputPath))}`),\n );\n }\n } finally {\n await browser.close();\n }\n } finally {\n await handle.close();\n }\n}\n\nasync function screenshotTheme(root: string, options: ScreenshotOptions): Promise<void> {\n const resolved = resolveScreenshotOptions(root, options);\n await captureScreenshot(root, resolved);\n}\n\nfunction visualAuditUrl(baseUrl: string, component: string, preset: string): string {\n const url = new URL(`${DEV_VISUAL_AUDIT_PATH}/${encodeURIComponent(component)}`, `${baseUrl}/`);\n url.searchParams.set(\"designPreset\", preset);\n return url.href;\n}\n\nasync function runThemeVisualCheck(root: string, options: VisualCheckOptions): Promise<boolean> {\n const playwright = await loadPlaywright(root);\n const handle = await startViteDevPreviewServer(root, parsePositiveInt(options.port, 4179));\n let theme: ValidatedTheme;\n try {\n theme = await loadViteDevTheme(root, handle.server);\n } catch (error) {\n await handle.close();\n throw error;\n }\n const resolved = resolveVisualCheckOptions(root, theme, options);\n const components = getThemeVisualAuditComponentTypes(theme);\n const report: VisualAuditReport = {\n components,\n issues: [],\n outputDir: resolved.outputDir,\n presets: resolved.presetIds,\n };\n\n try {\n const browser = await playwright.chromium.launch({ headless: true });\n try {\n for (const preset of resolved.presetIds) {\n for (const device of resolved.devices) {\n const viewport = SCREENSHOT_DEVICE_CONFIG[device].viewport;\n const context = await browser.newContext({ viewport, deviceScaleFactor: 1 });\n try {\n for (const component of components) {\n const page = await context.newPage();\n const pageErrors: string[] = [];\n page.on(\"pageerror\", (error) => pageErrors.push(error.message));\n try {\n await page.goto(visualAuditUrl(handle.url, component, preset), {\n waitUntil: \"networkidle\",\n });\n const audit = await page.evaluate<VisualAuditBrowserResult>(() => {\n const issues: VisualAuditIssue[] = [];\n const section = document.querySelector<HTMLElement>(\"[data-section]\");\n if (!section) {\n return {\n issues: [\n {\n code: \"section-missing\",\n message: \"The visual audit page did not render the theme component.\",\n severity: \"error\",\n },\n ],\n };\n }\n\n const colorForToken = (token: string): string => {\n const probe = document.createElement(\"span\");\n probe.style.color = `var(${token})`;\n probe.style.display = \"none\";\n section.append(probe);\n const color = getComputedStyle(probe).color;\n probe.remove();\n return color;\n };\n const contrastRatio = (first: string, second: string): number | null => {\n const channels = (value: string): [number, number, number] | null => {\n const match = value.match(/^rgba?\\\\(([^)]+)\\\\)$/);\n if (!match?.[1]) return null;\n const parsed = match[1]\n .split(\",\")\n .slice(0, 3)\n .map((channel) => Number.parseFloat(channel.trim()));\n if (parsed.length !== 3 || !parsed.every(Number.isFinite)) return null;\n const [red, green, blue] = parsed;\n if (red === undefined || green === undefined || blue === undefined) return null;\n return [red, green, blue];\n };\n const firstRgb = channels(first);\n const secondRgb = channels(second);\n if (!firstRgb || !secondRgb) return null;\n const luminance = (values: [number, number, number]): number => {\n const [red, green, blue] = values.map((channel) => {\n const normalized = channel / 255;\n return normalized <= 0.04045\n ? normalized / 12.92\n : ((normalized + 0.055) / 1.055) ** 2.4;\n }) as [number, number, number];\n return 0.2126 * red + 0.7152 * green + 0.0722 * blue;\n };\n const firstLuminance = luminance(firstRgb);\n const secondLuminance = luminance(secondRgb);\n return (\n (Math.max(firstLuminance, secondLuminance) + 0.05) /\n (Math.min(firstLuminance, secondLuminance) + 0.05)\n );\n };\n const tokenPairs: Array<[string, string]> = [\n [\"--background\", \"--foreground\"],\n [\"--primary\", \"--primary-foreground\"],\n [\"--secondary\", \"--secondary-foreground\"],\n [\"--accent\", \"--accent-foreground\"],\n [\"--muted\", \"--muted-foreground\"],\n ];\n for (const [surfaceToken, foregroundToken] of tokenPairs) {\n const ratio = contrastRatio(colorForToken(surfaceToken), colorForToken(foregroundToken));\n if (ratio === null) {\n issues.push({\n code: \"token-color-unresolved\",\n message: `${surfaceToken} or ${foregroundToken} did not resolve to a CSS color.`,\n severity: \"error\",\n });\n } else if (ratio < 4.5) {\n issues.push({\n code: \"token-contrast\",\n message: `${surfaceToken} and ${foregroundToken} have ${ratio.toFixed(2)}:1 contrast; 4.5:1 is required.`,\n severity: \"error\",\n });\n }\n }\n\n const semanticTokenPairs: Array<[string, string]> = [\n [\"--background\", \"--foreground\"],\n [\"--primary\", \"--primary-foreground\"],\n [\"--secondary\", \"--secondary-foreground\"],\n [\"--accent\", \"--accent-foreground\"],\n [\"--muted\", \"--muted-foreground\"],\n ];\n const semanticSurfaces = semanticTokenPairs.map(([surface, foreground]) => ({\n foreground,\n foregroundColor: colorForToken(foreground),\n surface,\n surfaceColor: colorForToken(surface),\n }));\n const semanticSurfacesByElement = new Map<HTMLElement, (typeof semanticSurfaces)[number]>();\n for (const element of [section, ...section.querySelectorAll<HTMLElement>(\"*\")]) {\n const backgroundColor = getComputedStyle(element).backgroundColor;\n const surface = semanticSurfaces.find(\n (candidate) => candidate.surfaceColor === backgroundColor,\n );\n if (surface) semanticSurfacesByElement.set(element, surface);\n }\n const visible = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n const rect = element.getBoundingClientRect();\n return (\n style.display !== \"none\" &&\n style.visibility !== \"hidden\" &&\n Number.parseFloat(style.opacity) > 0 &&\n rect.width > 0 &&\n rect.height > 0\n );\n };\n const closestSurface = (element: HTMLElement) => {\n let current: HTMLElement | null = element;\n while (current && section.contains(current)) {\n const match = semanticSurfacesByElement.get(current);\n if (match) return match;\n current = current.parentElement;\n }\n return null;\n };\n const reportedTextChecks = new Set<string>();\n const textWalker = document.createTreeWalker(section, NodeFilter.SHOW_TEXT);\n let textNode = textWalker.nextNode();\n while (textNode) {\n if (!textNode.textContent?.trim()) {\n textNode = textWalker.nextNode();\n continue;\n }\n const parent = textNode.parentElement;\n if (!parent || !visible(parent)) {\n textNode = textWalker.nextNode();\n continue;\n }\n const surface = closestSurface(parent);\n if (surface) {\n const actualForeground = getComputedStyle(parent).color;\n const ratio = contrastRatio(surface.surfaceColor, actualForeground);\n const key = `${surface.surface}/${actualForeground}`;\n if (ratio !== null && ratio < 4.5 && !reportedTextChecks.has(`contrast/${key}`)) {\n issues.push({\n code: \"surface-text-contrast\",\n message: `Text on ${surface.surface} has ${ratio.toFixed(2)}:1 contrast; 4.5:1 is required.`,\n severity: \"error\",\n });\n reportedTextChecks.add(`contrast/${key}`);\n }\n if (\n actualForeground !== surface.foregroundColor &&\n !reportedTextChecks.has(`foreground/${key}`)\n ) {\n issues.push({\n code: \"surface-foreground-token-mismatch\",\n message: `Text on ${surface.surface} uses ${actualForeground} instead of ${surface.foreground}; verify the custom foreground remains readable.`,\n severity: \"warning\",\n });\n reportedTextChecks.add(`foreground/${key}`);\n }\n }\n textNode = textWalker.nextNode();\n }\n\n const sectionRect = section.getBoundingClientRect();\n if (\n document.documentElement.scrollWidth > window.innerWidth + 1 ||\n sectionRect.left < -1 ||\n sectionRect.right > window.innerWidth + 1\n ) {\n issues.push({\n code: \"horizontal-overflow\",\n message: \"The page or audited section overflows the viewport horizontally.\",\n severity: \"error\",\n });\n }\n const firstText = section.querySelector<HTMLElement>(\"h1, h2, h3, p\");\n if (firstText) {\n const textRect = firstText.getBoundingClientRect();\n const overlays = Array.from(document.querySelectorAll<HTMLElement>(\"body *\")).filter(\n (element) => {\n if (element === section || section.contains(element)) return false;\n const style = getComputedStyle(element);\n if (style.position !== \"fixed\" || style.visibility === \"hidden\") return false;\n const rect = element.getBoundingClientRect();\n return (\n rect.bottom > textRect.top &&\n rect.top < textRect.bottom &&\n rect.right > textRect.left &&\n rect.left < textRect.right\n );\n },\n );\n if (overlays.length > 0) {\n issues.push({\n code: \"layout-overlay\",\n message: \"A fixed layout element overlaps the first section text. Add spacing in the theme layout if this is unintended.\",\n severity: \"warning\",\n });\n }\n }\n return { issues };\n });\n for (const issue of audit.issues) {\n report.issues.push({ ...issue, component, device, preset });\n }\n for (const message of pageErrors) {\n report.issues.push({\n component,\n code: \"page-error\",\n device,\n message,\n preset,\n severity: \"error\",\n });\n }\n const outputPath = path.join(\n resolved.outputDir,\n safeObjectKeyPart(preset),\n device,\n `${safeObjectKeyPart(component)}.png`,\n );\n await mkdir(path.dirname(outputPath), { recursive: true });\n await page.screenshot({ path: outputPath, fullPage: resolved.fullPage });\n await optimizePngIfAvailable(root, outputPath);\n } finally {\n await page.close();\n }\n }\n } finally {\n await context.close();\n }\n }\n }\n } finally {\n await browser.close();\n }\n } finally {\n await handle.close();\n }\n\n await mkdir(resolved.outputDir, { recursive: true });\n await writeFile(\n path.join(resolved.outputDir, \"report.json\"),\n `${JSON.stringify(report, null, 2)}\\n`,\n );\n const errors = report.issues.filter((issue) => issue.severity === \"error\");\n const warnings = report.issues.filter((issue) => issue.severity === \"warning\");\n if (errors.length === 0) {\n console.log(success(`visual check passed; screenshots: ${style.path(report.outputDir)}`));\n } else {\n console.error(formatError(`visual check failed with ${errors.length} error(s).`));\n }\n for (const issue of report.issues) {\n const formatter = issue.severity === \"error\" ? formatError : warning;\n console.log(\n ` ${formatter(issue.severity)} ${issue.preset}/${issue.device}/${issue.component}: ${issue.message}`,\n );\n }\n if (warnings.length > 0) {\n console.log(warning(`visual check completed with ${warnings.length} warning(s).`));\n }\n return errors.length === 0;\n}\n\nasync function loadLocalAgentManifest(root: string): Promise<ThemeAgentManifest> {\n const built = await readJsonIfExists<ThemeAgentManifest>(\n path.join(root, \"dist\", \"agent-manifest.json\"),\n );\n if (built) {\n return built;\n }\n throw new Error(\n `No agent manifest found at ${path.join(root, \"dist\", \"agent-manifest.json\")}. Run \"suda theme build\" first.`,\n );\n}\n\nasync function listAgentThemes(options: AgentThemeOptions): Promise<ThemeCatalogItem[]> {\n if (options.themeRoot) {\n const manifest = await loadLocalAgentManifest(resolveThemeRoot(options));\n return [\n {\n key: manifest.manifest.key,\n name: manifest.manifest.name,\n version: manifest.manifest.version,\n description: manifest.manifest.description ?? null,\n categories: manifest.manifest.categories,\n preview: manifest.manifest.preview,\n },\n ];\n }\n\n const auth = await requireCliBaseUrl();\n const url = new URL(\"/api/cli/agent/themes\", auth.baseUrl);\n if (options.projectId) {\n url.searchParams.set(\"projectId\", options.projectId);\n }\n const catalog = await fetchJson<{ themes: ThemeCatalogItem[] }>(url.href, { token: auth.token });\n await mkdir(agentCacheDir(), { recursive: true });\n await writeFile(\n path.join(agentCacheDir(), \"catalog.json\"),\n `${JSON.stringify(catalog, null, 2)}\\n`,\n );\n return catalog.themes;\n}\n\nasync function fetchAgentManifest(\n themeKey: string,\n options: AgentThemeOptions,\n): Promise<ThemeAgentManifest> {\n // 兼容用户输入 `--theme immgway@1.0.2` 的人机交互格式:\n // 在统一入口拆成内部使用的 themeKey + version,避免每个 action 重复解析。\n // 与 `--version` 同时使用且不一致时报冲突。\n const { key: parsedKey, version: parsedVersion } = parseThemeRef(themeKey);\n if (parsedVersion && options.version && parsedVersion !== options.version) {\n throw new Error(\n `Conflicting versions: --theme specifies \"${parsedVersion}\" but --version specifies \"${options.version}\". Pass only one.`,\n );\n }\n const resolvedKey = parsedKey;\n const resolvedOptions: AgentThemeOptions = parsedVersion\n ? { ...options, version: parsedVersion }\n : options;\n\n if (resolvedOptions.themeRoot) {\n return loadLocalAgentManifest(resolveThemeRoot(resolvedOptions));\n }\n\n const auth = await requireCliBaseUrl();\n const version = resolvedOptions.version ?? \"latest\";\n const cachePath = cachedThemeManifestPath(resolvedKey, version);\n const cached =\n version === \"latest\" ? null : await readJsonIfExists<ThemeAgentManifest>(cachePath);\n if (cached) {\n return cached;\n }\n\n const url = new URL(\n `/api/cli/agent/themes/${encodeURIComponent(resolvedKey)}/${encodeURIComponent(version)}/schema`,\n auth.baseUrl,\n );\n if (resolvedOptions.projectId) {\n url.searchParams.set(\"projectId\", resolvedOptions.projectId);\n }\n const result = await fetchJson<{ agentManifest: ThemeAgentManifest }>(url.href, {\n token: auth.token,\n });\n // 远程在主题或 schema 缺失时可能返回 `{ agentManifest: null }`(见\n // apps/workspace 的 cli/agent/_lib.ts)。直接把 null 传给后续 zod\n // 校验链会触发 `_zod` 这类底层异常,掩盖真实根因;这里抢先抛出可读错误。\n if (!result.agentManifest || !Array.isArray(result.agentManifest.sections)) {\n throw new Error(\n `Theme schema is not available for \"${resolvedKey}@${version}\". The theme may not be published, not active for the project, or its agent manifest is missing. Republish the theme or activate it before retrying.`,\n );\n }\n const realVersion = result.agentManifest.manifest.version;\n const realCachePath = cachedThemeManifestPath(resolvedKey, realVersion);\n await mkdir(path.dirname(realCachePath), { recursive: true });\n await writeFile(realCachePath, `${JSON.stringify(result.agentManifest, null, 2)}\\n`);\n return result.agentManifest;\n}\n\n/**\n * 解析人机交互的 `key@version` 格式。允许仅 `key`,也允许带 version。\n * 注意:theme key 现行约束不含 `@`,所以从右侧第一个 `@` 之后视为 version。\n *\n * Exported for unit-testing; not part of the CLI public surface.\n */\nexport function parseThemeRef(value: string): { key: string; version?: string } {\n const idx = value.lastIndexOf(\"@\");\n if (idx <= 0) {\n return { key: value };\n }\n const key = value.slice(0, idx);\n const version = value.slice(idx + 1);\n if (!version) {\n return { key };\n }\n return { key, version };\n}\n\nfunction printJson(value: unknown): void {\n console.log(JSON.stringify(value, null, 2));\n}\n\nfunction createSectionSchema(\n manifest: ThemeAgentManifest,\n sectionType: string,\n): AgentComponentOutput {\n const section = createSudaPageAgentRuntime(manifest).getSectionSchemaOutput(sectionType);\n if (section === null) {\n throw new Error(`Unknown section type \"${sectionType}\".`);\n }\n return section;\n}\n\nasync function validateAgentPage(\n themeKey: string,\n input: string,\n options: AgentThemeOptions,\n): Promise<void> {\n const manifest = await fetchAgentManifest(themeKey, options);\n const pageContent = await readJson<unknown>(path.resolve(input));\n const result = createSudaPageAgentRuntime(manifest).validatePageContent(pageContent);\n printJson(agentValidationResultSchema.parse(result));\n if (!result.valid) {\n process.exitCode = 1;\n }\n}\n\nasync function createAgentPage(options: AgentPageCreateOptions): Promise<void> {\n if (!options.projectId) {\n throw new Error(\"--project-id is required.\");\n }\n const pageContent = await readJson<unknown>(path.resolve(options.input));\n const manifest = await fetchAgentManifest(options.theme, options);\n const prepared = createSudaPageAgentRuntime(manifest).preparePageData(pageContent);\n if (!prepared.validation.valid) {\n printJson(agentValidationResultSchema.parse(prepared.validation));\n process.exitCode = 1;\n return;\n }\n\n const auth = await requireCliBaseUrl();\n const request: Parameters<typeof createRemotePageDraft>[1] = {\n projectId: options.projectId,\n title: options.title,\n slug: options.slug,\n themeKey: manifest.manifest.key,\n themeVersion: manifest.manifest.version,\n data: pageContent,\n };\n if (options.home === true) {\n request.isHome = true;\n }\n const response = await createRemotePageDraft(auth, request, fetchJson);\n printJson({ success: true, ...response });\n}\n\nasync function createRemotePageDraft(\n auth: CliAuthContext,\n input: {\n projectId: string;\n title: string;\n slug: string;\n isHome?: boolean | undefined;\n themeKey: string;\n themeVersion: string;\n data: unknown;\n },\n fetcher: FetchJsonFn = fetchJson,\n): Promise<{ pageId: string }> {\n const body: {\n title: string;\n slug: string;\n isHome?: boolean | undefined;\n themeKey: string;\n themeVersion: string;\n data: unknown;\n } = {\n title: input.title,\n slug: input.slug,\n themeKey: input.themeKey,\n themeVersion: input.themeVersion,\n data: input.data,\n };\n if (input.isHome !== undefined) {\n body.isHome = input.isHome;\n }\n\n return fetcher<{ pageId: string }>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(input.projectId)}/pages`,\n {\n method: \"POST\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n },\n );\n}\n\nasync function updateRemotePageDraft(\n auth: CliAuthContext,\n input: {\n projectId: string;\n slug: string;\n themeKey: string;\n themeVersion: string;\n data: unknown;\n },\n fetcher: FetchJsonFn = fetchJson,\n): Promise<{ pageId: string }> {\n return fetcher<{ pageId: string }>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(input.projectId)}/pages`,\n {\n method: \"PATCH\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n slug: input.slug,\n themeKey: input.themeKey,\n themeVersion: input.themeVersion,\n data: input.data,\n }),\n },\n );\n}\n\nasync function performConfirmedPageOperation(\n auth: CliAuthContext,\n input: {\n operation: \"delete\" | \"publish\";\n projectId: string;\n slug: string;\n confirm?: boolean | undefined;\n },\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof destructivePageOperationOutputSchema>> {\n const impact =\n input.operation === \"delete\"\n ? `This will delete page \"${input.slug}\" from project \"${input.projectId}\". Deleted pages are removed from the workspace and public site.`\n : `This will publish the current saved draft for page \"${input.slug}\" in project \"${input.projectId}\" and make it visible on the public site.`;\n if (input.confirm !== true) {\n return {\n status: \"needs_confirmation\",\n projectId: input.projectId,\n slug: input.slug,\n impact,\n };\n }\n\n const endpoint =\n input.operation === \"delete\"\n ? `/api/cli/agent/projects/${encodeURIComponent(input.projectId)}/pages`\n : `/api/cli/agent/projects/${encodeURIComponent(input.projectId)}/pages/publish`;\n const response = await fetcher<{ pageId: string; slug?: string }>(`${auth.baseUrl}${endpoint}`, {\n method: input.operation === \"delete\" ? \"DELETE\" : \"POST\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n slug: input.slug,\n confirm: true,\n }),\n });\n\n return {\n status: input.operation === \"delete\" ? \"deleted\" : \"published\",\n projectId: input.projectId,\n slug: response.slug ?? input.slug,\n pageId: response.pageId,\n };\n}\n\nasync function performActivateTheme(\n auth: CliAuthContext,\n input: {\n projectId: string;\n themeKey: string;\n themeVersion?: string | undefined;\n confirm?: boolean | undefined;\n },\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof activateThemeOutputSchema>> {\n const themeRef = input.themeVersion ? `${input.themeKey}@${input.themeVersion}` : input.themeKey;\n const impact = `This will activate theme \"${themeRef}\" for project \"${input.projectId}\". Public pages will render with this theme after activation.`;\n if (input.confirm !== true) {\n return {\n status: \"needs_confirmation\",\n projectId: input.projectId,\n themeKey: input.themeKey,\n themeVersion: input.themeVersion ?? null,\n impact,\n };\n }\n\n const body: {\n themeKey: string;\n themeVersion?: string;\n confirm: true;\n } = {\n themeKey: input.themeKey,\n confirm: true,\n };\n if (input.themeVersion !== undefined) {\n body.themeVersion = input.themeVersion;\n }\n const response = await fetcher<{\n projectId: string;\n themeKey: string;\n themeVersion: string | null;\n }>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(input.projectId)}/theme/activate`,\n {\n method: \"POST\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n },\n );\n\n return activateThemeOutputSchema.parse({\n status: \"activated\",\n projectId: response.projectId,\n themeKey: response.themeKey,\n themeVersion: response.themeVersion,\n });\n}\n\nasync function getRemoteContactForm(\n auth: CliAuthContext,\n projectId: string,\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof contactFormViewSchema>> {\n const response = await fetcher<z.infer<typeof contactFormOutputSchema>>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(projectId)}/contact-form`,\n { token: auth.token },\n );\n return contactFormViewSchema.parse(response.contactForm);\n}\n\nasync function updateRemoteContactForm(\n auth: CliAuthContext,\n input: z.infer<typeof updateContactFormInputSchema>,\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof contactFormViewSchema>> {\n const body: Record<string, unknown> = {};\n if (input.enabled !== undefined) body.enabled = input.enabled;\n if (input.title !== undefined) body.title = input.title;\n if (input.successMessage !== undefined) body.successMessage = input.successMessage;\n if (input.submitLabel !== undefined) body.submitLabel = input.submitLabel;\n if (input.fields !== undefined) body.fields = input.fields;\n if (input.notifications !== undefined) body.notifications = input.notifications;\n if (input.webhooks !== undefined) body.webhooks = input.webhooks;\n\n const response = await fetcher<z.infer<typeof contactFormOutputSchema>>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(input.projectId)}/contact-form`,\n {\n method: \"PATCH\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n },\n );\n return contactFormViewSchema.parse(response.contactForm);\n}\n\nasync function performUpdateContactForm(\n auth: CliAuthContext,\n input: z.infer<typeof updateContactFormInputSchema>,\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof updateContactFormOutputSchema>> {\n const draft = updateContactFormInputSchema.omit({ confirm: true }).parse(input);\n const changes = [\n input.enabled !== undefined ? \"enabled state\" : null,\n input.title !== undefined || input.successMessage !== undefined || input.submitLabel !== undefined\n ? \"form copy\"\n : null,\n input.fields !== undefined ? `${input.fields.length} field(s)` : null,\n input.notifications !== undefined ? `${input.notifications.length} notification channel(s)` : null,\n input.webhooks !== undefined ? `${input.webhooks.length} webhook(s)` : null,\n ].filter((item): item is string => typeof item === \"string\");\n const impact = `This will update the project contact form settings for \"${input.projectId}\": ${changes.join(\", \") || \"no explicit changes\"}. Contact form fields affect what visitors submit publicly; notifications and webhooks may send future submissions to external systems and are subject to plan features and limits.`;\n if (input.confirm !== true) {\n return {\n status: \"needs_confirmation\",\n projectId: input.projectId,\n impact,\n draft,\n };\n }\n const contactForm = await updateRemoteContactForm(auth, input, fetcher);\n return {\n status: \"updated\",\n projectId: input.projectId,\n contactForm,\n };\n}\n\nasync function getRemoteThemeSettings(\n auth: CliAuthContext,\n projectId: string,\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof themeSettingsViewSchema>> {\n const response = await fetcher<z.infer<typeof themeSettingsViewSchema>>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(projectId)}/theme/settings`,\n { token: auth.token },\n );\n return themeSettingsViewSchema.parse(response);\n}\n\nasync function updateRemoteThemeSettings(\n auth: CliAuthContext,\n input: z.infer<typeof updateThemeSettingsInputSchema>,\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof themeSettingsViewSchema>> {\n const response = await fetcher<z.infer<typeof themeSettingsViewSchema>>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(input.projectId)}/theme/settings`,\n {\n method: \"PATCH\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ rootProps: input.rootProps }),\n },\n );\n return themeSettingsViewSchema.parse(response);\n}\n\nfunction describeThemeSettingsUpdate(\n rootProps: Record<string, unknown>,\n): string {\n const keys = Object.keys(rootProps);\n const parts = keys.map((key) => {\n if (key !== \"designSystem\") {\n return key;\n }\n const value = rootProps.designSystem;\n if (\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n typeof (value as { presetId?: unknown }).presetId === \"string\"\n ) {\n const presetId = (value as { presetId: string }).presetId;\n return `designSystem preset \"${presetId}\"`;\n }\n return \"designSystem\";\n });\n return parts.join(\", \") || \"no explicit root prop changes\";\n}\n\nasync function performUpdateThemeSettings(\n auth: CliAuthContext,\n input: z.infer<typeof updateThemeSettingsInputSchema>,\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof updateThemeSettingsOutputSchema>> {\n const draft = updateThemeSettingsInputSchema.omit({ confirm: true }).parse(input);\n const impact = `This will update theme layout root settings for project \"${input.projectId}\": ${describeThemeSettingsUpdate(input.rootProps)}. Theme settings affect the public site rendering after they are saved.`;\n if (input.confirm !== true) {\n return {\n status: \"needs_confirmation\",\n projectId: input.projectId,\n impact,\n draft,\n };\n }\n\n const themeSettings = await updateRemoteThemeSettings(auth, input, fetcher);\n return {\n status: \"updated\",\n projectId: input.projectId,\n themeSettings,\n };\n}\n\nasync function listAgentProjects(): Promise<AgentProjectSummary[]> {\n const auth = await requireCliBaseUrl();\n const result = await fetchJson<{ projects: AgentProjectSummary[] }>(\n `${auth.baseUrl}/api/cli/agent/projects`,\n { token: auth.token },\n );\n return result.projects;\n}\n\nasync function createAgentProject(\n options: AgentProjectCreateOptions,\n): Promise<AgentProjectCreated> {\n const auth = await requireCliBaseUrl();\n return fetchJson<AgentProjectCreated>(`${auth.baseUrl}/api/cli/agent/projects`, {\n method: \"POST\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n name: options.name,\n siteDescription: options.siteDescription,\n }),\n });\n}\n\nasync function writeThemeArtifacts(theme: ValidatedTheme): Promise<void> {\n const dist = path.join(theme.root, \"dist\");\n const agentManifest = createThemeAgentManifest(theme.module);\n const manifestJson = `${JSON.stringify(theme.module.manifest, null, 2)}\\n`;\n await writeFile(path.join(dist, \"manifest.json\"), manifestJson);\n await writeFile(\n path.join(dist, \"starter-pages.json\"),\n `${JSON.stringify(theme.module.starterPages, null, 2)}\\n`,\n );\n await writeFile(\n path.join(dist, \"cms-templates.json\"),\n `${JSON.stringify(theme.module.cmsTemplates, null, 2)}\\n`,\n );\n await writeFile(\n path.join(dist, \"default-layout.json\"),\n `${JSON.stringify(theme.module.defaultLayout, null, 2)}\\n`,\n );\n await writeFile(\n path.join(dist, \"agent-manifest.json\"),\n `${JSON.stringify(agentManifest, null, 2)}\\n`,\n );\n}\n\nfunction contentTypeFor(relativePath: string): string {\n if (relativePath.endsWith(\".css\")) {\n return \"text/css; charset=utf-8\";\n }\n if (relativePath.endsWith(\".js\") || relativePath.endsWith(\".mjs\")) {\n return \"application/javascript; charset=utf-8\";\n }\n if (relativePath.endsWith(\".map\")) {\n return \"application/json; charset=utf-8\";\n }\n if (relativePath.endsWith(\".json\")) {\n return \"application/json; charset=utf-8\";\n }\n if (relativePath.endsWith(\".svg\")) {\n return \"image/svg+xml\";\n }\n if (relativePath.endsWith(\".png\")) {\n return \"image/png\";\n }\n if (relativePath.endsWith(\".jpg\") || relativePath.endsWith(\".jpeg\")) {\n return \"image/jpeg\";\n }\n if (relativePath.endsWith(\".webp\")) {\n return \"image/webp\";\n }\n if (relativePath.endsWith(\".avif\")) {\n return \"image/avif\";\n }\n if (relativePath.endsWith(\".gif\")) {\n return \"image/gif\";\n }\n if (relativePath.endsWith(\".ico\")) {\n return \"image/x-icon\";\n }\n if (relativePath.endsWith(\".woff2\")) {\n return \"font/woff2\";\n }\n if (relativePath.endsWith(\".woff\")) {\n return \"font/woff\";\n }\n if (relativePath.endsWith(\".ttf\")) {\n return \"font/ttf\";\n }\n if (relativePath.endsWith(\".otf\")) {\n return \"font/otf\";\n }\n if (relativePath.endsWith(\".mp4\")) {\n return \"video/mp4\";\n }\n if (relativePath.endsWith(\".webm\")) {\n return \"video/webm\";\n }\n if (relativePath.endsWith(\".txt\")) {\n return \"text/plain; charset=utf-8\";\n }\n if (relativePath.endsWith(\".xml\")) {\n return \"application/xml; charset=utf-8\";\n }\n return \"application/octet-stream\";\n}\n\nasync function collectFiles(root: string, directory: string): Promise<UploadFile[]> {\n const files: UploadFile[] = [];\n if (!(await pathExists(directory))) {\n return files;\n }\n\n const children = await readdir(directory, { withFileTypes: true });\n for (const child of children) {\n const absolutePath = path.join(directory, child.name);\n if (child.isDirectory()) {\n files.push(...(await collectFiles(root, absolutePath)));\n continue;\n }\n const relativePath = path.relative(root, absolutePath).replaceAll(path.sep, \"/\");\n const publishRelativePath = relativePath.startsWith(\"dist/\")\n ? relativePath.slice(\"dist/\".length)\n : relativePath;\n files.push({\n absolutePath,\n relativePath: publishRelativePath,\n contentType: contentTypeFor(publishRelativePath),\n });\n }\n return files;\n}\n\nasync function collectThemeArtifactFiles(theme: ValidatedTheme): Promise<UploadFile[]> {\n const files = await collectFiles(theme.root, path.join(theme.root, \"dist\"));\n return files;\n}\n\n/**\n * Files that must exist on the published artifact for SudaCloud's SSR runtime\n * to load a theme. Mirrored on the server in\n * `apps/workspace/server/services/theme-publish-service.ts` as\n * `SSR_REQUIRED_ARTIFACTS`. Keep both lists in sync.\n */\nconst SSR_REQUIRED_ARTIFACTS = [\n \"index.js\",\n \"runtime.client.js\",\n \"manifest.json\",\n \"styles.css\",\n \"agent-manifest.json\",\n ...REQUIRED_PREVIEW_ARTIFACTS,\n] as const;\n\nasync function checksum(files: UploadFile[]): Promise<string> {\n const hash = createHash(\"sha256\");\n for (const file of files.sort((a, b) => a.relativePath.localeCompare(b.relativePath))) {\n hash.update(file.relativePath);\n hash.update(await readFile(file.absolutePath));\n }\n return hash.digest(\"hex\");\n}\n\n/**\n * Format an unsuccessful HTTP response from the publish API into a single\n * human-readable string. The server returns `{ error, issues? }` where\n * `issues` is the raw `ZodError.issues` array (path + message) for 422\n * validation failures. Surfacing those keeps `Invalid request` from being\n * the only thing the user sees when the request body fails schema checks.\n */\nasync function formatHttpErrorBody(res: Response): Promise<string> {\n const fallback = `${res.status} ${res.statusText}`;\n const body = (await res.json().catch(() => null)) as {\n error?: string;\n issues?: Array<{ path?: Array<string | number>; message?: string }>;\n } | null;\n if (!body) {\n return fallback;\n }\n const message = body.error ?? fallback;\n if (Array.isArray(body.issues) && body.issues.length > 0) {\n const lines = body.issues.map((issue) => {\n const pathSegments = Array.isArray(issue.path) ? issue.path : [];\n const where = pathSegments.length > 0 ? pathSegments.join(\".\") : \"<root>\";\n return ` - ${where}: ${issue.message ?? \"invalid\"}`;\n });\n return `${message}\\n${lines.join(\"\\n\")}`;\n }\n return message;\n}\n\nasync function publishTheme(\n root: string,\n skipBuild: boolean,\n force: boolean,\n host?: string,\n): Promise<void> {\n const theme = skipBuild ? await finalizeTheme(root) : await buildTheme(root);\n const ok = await runThemeCheck(theme);\n if (!ok) {\n throw new Error(\"AI metadata check failed. Fix the errors above.\");\n }\n const files = await collectThemeArtifactFiles(theme);\n if (!theme.clientEntryPath) {\n throw new Error(\"Missing runtime.client.js. Run `suda theme build` first.\");\n }\n // Assert the SSR contract before talking to the workspace API: the server\n // independently re-checks the same set with `HeadObject`, but failing\n // locally produces a clearer error and avoids burning a publish-intent.\n const collectedPaths = new Set(files.map((f) => f.relativePath));\n for (const required of SSR_REQUIRED_ARTIFACTS) {\n if (!collectedPaths.has(required)) {\n throw new Error(\n `Missing required theme artifact: ${required}. Run \\`suda theme build\\` and ensure \\`${required}\\` is generated.`,\n );\n }\n }\n\n const config = await selectAuthConfig(host, \"Select a host to publish to:\");\n const baseUrl = config.baseUrl;\n const { key, version } = theme.module.manifest;\n const digest = await checksum(files);\n\n console.log(info(`publishing ${themeRef(key, version)} to ${style.url(baseUrl)}`));\n\n // `--force` is a development-only recovery path: tear down the previous\n // `themes/<key>/<version>/` prefix and DB row before going through the\n // normal publish-intent → upload → publish-complete flow. The CLI does\n // not hold S3 credentials; the workspace endpoint owns the cleanup.\n if (force) {\n const forceRes = await fetch(`${baseUrl}/api/cli/themes/publish-force`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.sessionToken}`,\n },\n body: JSON.stringify({ key, version }),\n });\n if (!forceRes.ok && forceRes.status !== 404) {\n throw new Error(`Failed to force-clear ${key}@${version}: ${await formatHttpErrorBody(forceRes)}`);\n }\n if (forceRes.ok) {\n const { deletedObjects } = (await forceRes.json()) as { deletedObjects?: number };\n console.log(\n warning(\n `force-cleared ${themeRef(key, version)} (${deletedObjects ?? 0} objects removed). Republishing...`,\n ),\n );\n }\n }\n\n const intentRes = await fetch(`${baseUrl}/api/cli/themes/publish-intent`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.sessionToken}`,\n },\n body: JSON.stringify({\n key,\n version,\n checksum: digest,\n files: files.map((f) => ({ relativePath: f.relativePath, contentType: f.contentType })),\n }),\n });\n\n if (!intentRes.ok) {\n throw new Error(`Failed to get publish intent: ${await formatHttpErrorBody(intentRes)}`);\n }\n\n const { urls } = (await intentRes.json()) as {\n urls: Array<{ relativePath: string; url: string; headers?: Record<string, string> }>;\n };\n\n // Upload to S3 using presigned URLs\n for (const file of files) {\n const urlObj = urls.find((u) => u.relativePath === file.relativePath);\n if (!urlObj) {\n throw new Error(`Missing presigned URL for ${file.relativePath}`);\n }\n\n const body = await readFile(file.absolutePath);\n const uploadHeaders: Record<string, string> = { \"Content-Type\": file.contentType };\n if (urlObj.headers) {\n Object.assign(uploadHeaders, urlObj.headers);\n }\n const putRes = await fetch(urlObj.url, {\n method: \"PUT\",\n headers: uploadHeaders,\n body,\n });\n\n if (!putRes.ok) {\n throw new Error(`Failed to upload ${file.relativePath}: ${putRes.statusText}`);\n }\n console.log(\n success(`uploaded ${style.path(createThemeObjectKey(key, version, file.relativePath))}`),\n );\n }\n\n const bundleArtifactRelative = \"index.js\";\n // `bundleArtifactRelative` presence is already enforced above through\n // `SSR_REQUIRED_ARTIFACTS`; we still pass the literal string to the server\n // so it can read the bundle key without re-deriving it.\n\n const previewArtifactRelative = \"assets/preview/desktop.png\";\n const agentManifest = createThemeAgentManifest(theme.module);\n\n const completeRes = await fetch(`${baseUrl}/api/cli/themes/publish-complete`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.sessionToken}`,\n },\n body: JSON.stringify({\n key,\n version,\n checksum: digest,\n manifest: theme.module.manifest,\n agentManifest,\n bundleArtifactRelative,\n previewArtifactRelative,\n }),\n });\n\n if (!completeRes.ok) {\n throw new Error(`Failed to complete publish: ${await formatHttpErrorBody(completeRes)}`);\n }\n\n console.log(success(`published ${themeRef(key, version)} to ${style.url(baseUrl)}`));\n}\n\ninterface CliPackageVersions {\n /** Caret-prefixed semver range to install for `@sudajs/theme-engine`. */\n themeEngine: string;\n /** Caret-prefixed semver range to install for `@sudajs/cli`. */\n cli: string;\n}\n\nlet cachedCliPackageVersions: CliPackageVersions | undefined;\n\n/**\n * Reads the CLI's own `package.json` so scaffolded themes declare a caret\n * range for `@sudajs/theme-engine` whose types match the CLI invoking\n * `theme init`.\n *\n * Scaffolded themes list `@sudajs/theme-engine` under `peerDependencies` (so\n * hosts decide the runtime version) AND `devDependencies` (so local dev /\n * typecheck / build still works). Both entries reuse this same range.\n *\n * In the published CLI, `dependencies[\"@sudajs/theme-engine\"]` is already a\n * real semver range (changesets resolves `workspace:*` at publish time), so\n * we forward it verbatim. In the monorepo (`workspace:*`) we instead read\n * the live `@sudajs/theme-engine/package.json` so the scaffolded starter\n * pins to the version under development, which can diverge from the CLI's\n * own version after this release decoupled the two majors.\n */\nasync function readCliPackageVersions(): Promise<CliPackageVersions> {\n if (cachedCliPackageVersions) {\n return cachedCliPackageVersions;\n }\n const here = fileURLToPath(import.meta.url);\n // dist/index.js or src/index.ts → ../package.json\n const cliPkgPath = path.resolve(path.dirname(here), \"..\", \"package.json\");\n let cliRaw: string;\n try {\n cliRaw = await readFile(cliPkgPath, \"utf8\");\n } catch {\n // Should not happen in a real install, but stay resilient in tests.\n cachedCliPackageVersions = { themeEngine: \"*\", cli: \"*\" };\n return cachedCliPackageVersions;\n }\n const cliPkg = JSON.parse(cliRaw) as {\n version?: string;\n dependencies?: Record<string, string>;\n };\n const cliVersion = typeof cliPkg.version === \"string\" ? cliPkg.version : \"0.0.0\";\n const declaredEngine = cliPkg.dependencies?.[\"@sudajs/theme-engine\"];\n let themeEngine: string;\n if (declaredEngine && !declaredEngine.startsWith(\"workspace:\")) {\n // Published CLI tarball: changesets has already replaced workspace:* with\n // a real semver range, which is exactly what we want to forward.\n themeEngine = declaredEngine;\n } else {\n // Monorepo / development: resolve the engine's actual version from its\n // own package.json. The CLI version is NOT a safe fallback here — the\n // engine and CLI ship independent majors via separate changesets, so\n // `^${cliVersion}` could pin scaffolded themes to a non-existent or\n // incompatible engine release. We instead error out loudly so a broken\n // dev environment is fixed before generating a starter.\n let resolved: string | undefined;\n try {\n const require = createRequire(import.meta.url);\n const enginePkgPath = require.resolve(\"@sudajs/theme-engine/package.json\");\n const engineRaw = await readFile(enginePkgPath, \"utf8\");\n const engineVersion = (JSON.parse(engineRaw) as { version?: string }).version;\n if (typeof engineVersion === \"string\" && engineVersion.length > 0) {\n resolved = `^${engineVersion}`;\n }\n } catch {\n const monorepoEnginePkgPath = path.resolve(path.dirname(here), \"..\", \"..\", \"theme-engine\", \"package.json\");\n const engineRaw = await readFile(monorepoEnginePkgPath, \"utf8\").catch(() => null);\n if (engineRaw) {\n const engineVersion = (JSON.parse(engineRaw) as { version?: string }).version;\n if (typeof engineVersion === \"string\" && engineVersion.length > 0) {\n resolved = `^${engineVersion}`;\n }\n }\n }\n if (!resolved) {\n throw new Error(\n \"suda theme init: cannot determine the @sudajs/theme-engine version to scaffold. \" +\n \"The CLI's package.json declares it as `workspace:*` (monorepo dev mode) but \" +\n \"`@sudajs/theme-engine/package.json` could not be resolved from the CLI's runtime. \" +\n \"Run `pnpm install` and re-run from the monorepo root, or install a published \" +\n \"@sudajs/cli tarball (which pins a real semver range).\",\n );\n }\n themeEngine = resolved;\n }\n cachedCliPackageVersions = {\n themeEngine,\n cli: `^${cliVersion}`,\n };\n return cachedCliPackageVersions;\n}\n\nasync function replaceTemplateTokens(filePath: string, replacements: Record<string, string>): Promise<void> {\n let contents = await readFile(filePath, \"utf8\");\n for (const [token, value] of Object.entries(replacements)) {\n contents = contents.split(token).join(value);\n }\n await writeFile(filePath, contents);\n}\n\nasync function loadThemeTemplateFile(relativePath: string): Promise<string> {\n return readFile(path.join(themeTemplateRoot, relativePath), \"utf8\");\n}\n\nfunction validateThemeName(name: string): string | null {\n if (name.length === 0) {\n return \"Theme name is required.\";\n }\n if (!THEME_NAME_PATTERN.test(name)) {\n return \"Theme name may only contain English letters, numbers, hyphens, and underscores.\";\n }\n return null;\n}\n\nfunction validateThemeKey(key: string): string | null {\n if (key.length === 0) {\n return \"Theme key is required.\";\n }\n if (!THEME_KEY_PATTERN.test(key)) {\n return \"Theme key must be kebab-case: lowercase letters, numbers, and hyphens, starting with a letter or number.\";\n }\n return null;\n}\n\nfunction slugifyThemeName(name: string): string {\n return name.replaceAll(\"_\", \"-\").toLowerCase();\n}\n\nfunction createThemeInitPrompt(nameProvided: boolean): ReturnType<typeof createInterface> {\n if (!process.stdin.isTTY) {\n throw new Error(\n nameProvided\n ? \"Theme key confirmation is required. Re-run `suda theme init <name>` in an interactive terminal.\"\n : \"Theme name is required. Usage: suda theme init <name>\",\n );\n }\n\n return createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n}\n\nasync function promptThemeName(rl: ReturnType<typeof createInterface>): Promise<string> {\n while (true) {\n const answer = (await rl.question(\"Theme name: \")).trim();\n const error = validateThemeName(answer);\n if (error === null) {\n return answer;\n }\n console.error(formatError(error));\n }\n}\n\nasync function promptThemeKey(\n rl: ReturnType<typeof createInterface>,\n defaultKey: string,\n): Promise<string> {\n while (true) {\n const answer = (await rl.question(`Theme key (${defaultKey}): `)).trim();\n const key = answer.length > 0 ? answer : defaultKey;\n const error = validateThemeKey(key);\n if (error === null) {\n return key;\n }\n console.error(formatError(error));\n }\n}\n\nasync function resolveThemeInitInput(name: string | undefined): Promise<{ name: string; key: string }> {\n const providedName = name?.trim();\n if (providedName !== undefined) {\n const nameError = validateThemeName(providedName);\n if (nameError !== null) {\n throw new Error(nameError);\n }\n }\n\n const rl = createThemeInitPrompt(providedName !== undefined);\n try {\n const themeName = providedName ?? (await promptThemeName(rl));\n const defaultKey = slugifyThemeName(themeName);\n return {\n name: themeName,\n key: await promptThemeKey(rl, defaultKey),\n };\n } finally {\n rl.close();\n }\n}\n\nexport async function initTheme(target: string): Promise<void> {\n await initThemeWithKey(target, slugifyThemeName(path.basename(target)));\n}\n\nasync function initThemeWithKey(target: string, key: string): Promise<void> {\n const themeName = path.basename(target);\n const nameError = validateThemeName(themeName);\n if (nameError !== null) {\n throw new Error(nameError);\n }\n const keyError = validateThemeKey(key);\n if (keyError !== null) {\n throw new Error(keyError);\n }\n // Pin scaffolded themes to the CLI's own dependency declarations so\n // `suda theme init` never produces a project that pulls in an older\n // `@sudajs/theme-engine` whose `SudaComponentConfig` type is out of sync\n // with the CLI's `theme check` requirements.\n const cliPackageVersions = await readCliPackageVersions();\n\n await copyDirectory(themeTemplateRoot, target);\n\n const packageJson = JSON.parse(await loadThemeTemplateFile(\"package.json\")) as {\n name: string;\n devDependencies: Record<string, string>;\n peerDependencies: Record<string, string>;\n };\n packageJson.name = `@suda-themes/${key}`;\n packageJson.devDependencies[\"@sudajs/cli\"] = cliPackageVersions.cli;\n packageJson.devDependencies[\"@sudajs/theme-engine\"] = cliPackageVersions.themeEngine;\n packageJson.peerDependencies[\"@sudajs/theme-engine\"] = cliPackageVersions.themeEngine;\n await writeFile(path.join(target, \"package.json\"), `${JSON.stringify(packageJson, null, 2)}\\n`);\n\n const replacements = {\n \"__SUDA_THEME_KEY__\": key,\n };\n const filesToReplace = [\n \"README.md\",\n \"src/manifest.ts\",\n \"src/theme-asset.ts\",\n \"src/sections.tsx\",\n \"src/layout.tsx\",\n \"src/config.ts\",\n \"src/templates.ts\",\n \"src/styles.css\",\n ];\n for (const relativePath of filesToReplace) {\n await replaceTemplateTokens(path.join(target, relativePath), replacements);\n }\n\n console.log(success(`created theme scaffold at ${style.path(target)}`));\n}\n\nexport function buildProgram(): Command {\n const program = new Command();\n\n program\n .name(\"suda\")\n .description(\"Suda CLI for managing themes, sites, posts and AI tooling.\")\n .version(\"0.0.0\");\n\n const theme = program.command(\"theme\").description(\"Manage Suda theme artifacts.\");\n\n theme\n .command(\"init\")\n .description(\"Scaffold a new theme source directory.\")\n .argument(\"[name]\", \"Theme name and directory to create. Use English letters, numbers, hyphens, or underscores.\")\n .action(async (name: string | undefined) => {\n const input = await resolveThemeInitInput(name);\n await initThemeWithKey(path.resolve(input.name), input.key);\n });\n\n theme\n .command(\"validate\")\n .description(\"Validate a built theme artifact.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .action(async (options: ThemeRootOptions) => {\n const result = await validateTheme(resolveThemeRoot(options));\n console.log(\n success(`valid ${themeRef(result.module.manifest.key, result.module.manifest.version)}`),\n );\n if (!result.clientEntryPath) {\n console.warn(\n warning(\n \"warning: runtime.client.js is missing; editor runtime will not load until `suda theme build` runs.\",\n ),\n );\n }\n });\n\n theme\n .command(\"build\")\n .description(\"Build a Vite Suda theme artifact.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .action(async (options: BuildOptions) => {\n const result = await buildTheme(resolveThemeRoot(options));\n console.log(\n success(`built ${themeRef(result.module.manifest.key, result.module.manifest.version)}`),\n );\n\n const ok = await runThemeCheck(result);\n if (!ok) {\n throw new Error(\"AI metadata check failed. Fix the errors above.\");\n }\n });\n\n theme\n .command(\"finalize\")\n .description(\"Finalize an existing Vite build into the Suda theme artifact contract.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .action(async (options: ThemeRootOptions) => {\n const result = await finalizeTheme(resolveThemeRoot(options));\n console.log(\n success(\n `finalized ${themeRef(result.module.manifest.key, result.module.manifest.version)}`,\n ),\n );\n });\n\n theme\n .command(\"check\")\n .description(\n \"Run AI metadata checks on a built theme without rebuilding. Reports missing component-level ai.instructions as errors and weak content as warnings.\",\n )\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .action(async (options: CheckOptions) => {\n const theme = await validateTheme(resolveThemeRoot(options));\n const ok = await runThemeCheck(theme);\n if (!ok) {\n process.exitCode = 1;\n }\n });\n\n theme\n .command(\"dev\")\n .description(\"Start the Vite-powered local theme preview.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\"--port <port>\", \"Preview server port.\", \"4177\")\n .action(async (options: BuildOptions & { port?: string }) => {\n const port = Number(options.port ?? \"4177\");\n await watchTheme(resolveThemeRoot(options), Number.isFinite(port) ? port : 4177);\n });\n\n theme\n .command(\"screenshot\")\n .alias(\"capture\")\n .description(\"Capture preview screenshots of the home starter page using Playwright.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\n \"--device <device>\",\n \"Device to capture: desktop, tablet, mobile. Repeat or use comma-separated values.\",\n collectOption,\n [],\n )\n .option(\"--output <path>\", \"Output PNG path relative to theme root. Requires exactly one device.\")\n .option(\"--width <px>\", \"Override viewport width in pixels.\")\n .option(\"--height <px>\", \"Override viewport height in pixels.\")\n .option(\"--full-page\", \"Capture the full page instead of the viewport.\")\n .option(\"--port <port>\", \"Preview server port used during capture.\", \"4178\")\n .action(async (options: ScreenshotOptions) => {\n await screenshotTheme(resolveThemeRoot(options), options);\n });\n\n theme\n .command(\"visual-check\")\n .description(\n \"Render every theme page component across presets and viewports, then report token contrast, semantic surface colors, overflow, and layout overlays.\",\n )\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\n \"--device <device>\",\n \"Device to audit: desktop, tablet, mobile. Repeat or use comma-separated values.\",\n collectOption,\n [],\n )\n .option(\n \"--preset <id>\",\n \"Design preset to audit. Repeat or use comma-separated values; defaults to every theme preset.\",\n collectOption,\n [],\n )\n .option(\"--output <path>\", \"Output directory relative to theme root.\")\n .option(\"--full-page\", \"Capture full-page screenshots instead of viewport screenshots.\")\n .option(\"--port <port>\", \"Preview server port used during visual checking.\", \"4179\")\n .action(async (options: VisualCheckOptions) => {\n const ok = await runThemeVisualCheck(resolveThemeRoot(options), options);\n if (!ok) {\n process.exitCode = 1;\n }\n });\n\n theme\n .command(\"publish\")\n .description(\"Upload artifact to S3 and upsert ThemePackage/ThemeVersion.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\"--skip-build\", \"Publish existing dist files without rebuilding.\")\n .option(\"--host <host>\", \"Publish to this authenticated SudaCloud workspace host.\")\n .option(\n \"--force\",\n \"Development recovery only: clear the existing themes/<key>/<version>/ prefix and ThemeVersion row before republishing. Re-published clients pinned to this version are unavailable until the new publish completes.\",\n )\n .action(async (options: PublishOptions) => {\n await publishTheme(\n resolveThemeRoot(options),\n options.skipBuild === true,\n options.force === true,\n options.host,\n );\n });\n\n const agent = program.command(\"agent\").description(\"Agent-friendly theme and page tooling.\");\n\n const agentProject = agent.command(\"project\").description(\"Manage Suda projects from the CLI.\");\n\n agentProject\n .command(\"list\")\n .description(\"List Suda projects the current CLI user can access.\")\n .action(async () => {\n const projects = await listAgentProjects();\n printJson({ projects });\n });\n\n agentProject\n .command(\"create\")\n .description(\n \"Create a new Suda project (mirrors onboarding). External AI should ask the user for a website name and short business description before calling this.\",\n )\n .requiredOption(\"--name <name>\", \"Website or brand name.\")\n .requiredOption(\n \"--site-description <description>\",\n \"Short business introduction used to seed default site metadata.\",\n )\n .action(async (options: { name: string; siteDescription: string }) => {\n // Reuse the shared zod schema so CLI flag validation matches the MCP\n // tool input bounds and the server-side `/api/cli/agent/projects` route.\n const parsed = createProjectInputSchema.safeParse({\n name: options.name,\n siteDescription: options.siteDescription,\n });\n if (!parsed.success) {\n const issue = parsed.error.issues[0];\n const field = issue?.path[0] === \"siteDescription\" ? \"--site-description\" : \"--name\";\n throw new Error(`${field}: ${issue?.message ?? \"invalid value\"}`);\n }\n\n const result = await createAgentProject(parsed.data);\n printJson(result);\n });\n\n const agentThemes = agent.command(\"themes\").description(\"Manage agent-visible themes.\");\n\n agentThemes\n .command(\"list\")\n .description(\"List themes visible to the current CLI user.\")\n .option(\"--project-id <projectId>\", \"Scope results to a project.\")\n .option(\"--theme-root <path>\", \"Describe a local theme instead of the remote catalog.\")\n .action(async (options: AgentThemeOptions) => {\n const themes = await listAgentThemes(options);\n printJson({ themes });\n });\n\n const agentTheme = agent.command(\"theme\").description(\"Inspect a single theme.\");\n\n agentTheme\n .command(\"describe\")\n .description(\"Describe a theme's page content configuration schema.\")\n .argument(\"<theme>\", \"Theme key.\")\n .option(\"--version <version>\", \"Theme version.\")\n .option(\"--project-id <projectId>\", \"Project scope.\")\n .option(\"--theme-root <path>\", \"Read a local theme.\")\n .option(\"--example\", \"Include example page content.\")\n .action(async (themeKey: string, options: AgentThemeOptions) => {\n const manifest = await fetchAgentManifest(themeKey, options);\n printJson(\n createSudaPageAgentRuntime(manifest).getPageSchemaOutput({\n includeExample: options.example === true,\n }),\n );\n });\n\n const agentPage = agent.command(\"page\").description(\"Page content configuration tooling.\");\n\n agentPage\n .command(\"schema\")\n .description(\"Print the page content configuration schema for a theme.\")\n .argument(\"<theme>\", \"Theme key.\")\n .option(\"--version <version>\", \"Theme version.\")\n .option(\"--project-id <projectId>\", \"Project scope.\")\n .option(\"--theme-root <path>\", \"Read a local theme.\")\n .option(\"--example\", \"Include example page content.\")\n .action(async (themeKey: string, options: AgentThemeOptions) => {\n const manifest = await fetchAgentManifest(themeKey, options);\n printJson(\n createSudaPageAgentRuntime(manifest).getPageSchemaOutput({\n includeExample: options.example === true,\n }),\n );\n });\n\n agentPage\n .command(\"validate\")\n .description(\"Validate a Suda page content JSON document.\")\n .requiredOption(\"--theme <theme>\", \"Theme key.\")\n .requiredOption(\"--input <file>\", \"JSON file containing Suda page content.\")\n .option(\"--version <version>\", \"Theme version.\")\n .option(\"--project-id <projectId>\", \"Project scope.\")\n .option(\"--theme-root <path>\", \"Read a local theme.\")\n .action(async (options: AgentThemeOptions & { theme: string; input: string }) => {\n await validateAgentPage(options.theme, options.input, options);\n });\n\n agentPage\n .command(\"create\")\n .description(\n \"Create a workspace page draft from AI-generated Suda page content JSON. Review it in Pages, then preview and publish from the workspace.\",\n )\n .requiredOption(\"--project-id <projectId>\", \"Project id.\")\n .requiredOption(\"--title <title>\", \"Page title.\")\n .requiredOption(\"--slug <slug>\", \"Page slug.\")\n .requiredOption(\"--theme <theme>\", \"Theme key.\")\n .requiredOption(\"--input <file>\", \"JSON file containing Suda page content.\")\n .option(\"--version <version>\", \"Theme version.\")\n .option(\"--home\", \"Mark this page draft as the project's homepage.\")\n .action(async (options: AgentPageCreateOptions) => {\n await createAgentPage(options);\n });\n\n const agentSection = agent.command(\"section\").description(\"Inspect a single section.\");\n\n agentSection\n .command(\"schema\")\n .description(\"Print one section configuration schema for a theme.\")\n .requiredOption(\"--theme <theme>\", \"Theme key.\")\n .requiredOption(\"--section <section>\", \"Section type.\")\n .option(\"--version <version>\", \"Theme version.\")\n .option(\"--project-id <projectId>\", \"Project scope.\")\n .option(\"--theme-root <path>\", \"Read a local theme.\")\n .action(async (options: AgentThemeOptions & { theme: string; section: string }) => {\n const manifest = await fetchAgentManifest(options.theme, options);\n printJson(createSectionSchema(manifest, options.section));\n });\n\n const hostCmd = program.command(\"host\").description(\"Manage the current SudaCloud workspace host.\");\n\n hostCmd\n .command(\"current\")\n .description(\"Show the current authenticated workspace host.\")\n .action(async () => {\n await showCurrentHost();\n });\n\n hostCmd\n .command(\"list\")\n .description(\"List authenticated workspace hosts.\")\n .action(async () => {\n await listHosts();\n });\n\n hostCmd\n .command(\"switch\")\n .description(\"Switch the current workspace host.\")\n .argument(\"<host>\", \"An existing authenticated SudaCloud workspace host.\")\n .action(async (host: string) => {\n await switchHost(host);\n });\n\n const authCmd = program.command(\"auth\").description(\"Manage Suda authentication.\");\n\n authCmd\n .command(\"login\")\n .description(\"Authenticate Suda CLI with a SudaCloud workspace.\")\n .option(\n \"--host <host>\",\n \"The SudaCloud workspace host to authenticate against.\",\n )\n .action(async (options: { host?: string }) => {\n await login(options.host);\n });\n\n authCmd\n .command(\"status\")\n .description(\"Check current authentication status.\")\n .option(\"--host <host>\", \"Check authentication for this workspace host.\")\n .action(async (options: { host?: string }) => {\n await status(options.host);\n });\n\n authCmd\n .command(\"logout\")\n .description(\"Revoke and remove a workspace host credential.\")\n .option(\"--host <host>\", \"Log out from this workspace host.\")\n .action(async (options: { host?: string }) => {\n await logout(options.host);\n });\n\n program.showHelpAfterError();\n\n return program;\n}\n\nexport async function main(): Promise<void> {\n const program = buildProgram();\n const argv = process.argv.filter((arg, index) => index < 2 || arg !== \"--\");\n await program.parseAsync(argv);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/format.ts","../src/select.ts","../src/auth.ts","../src/index.ts"],"names":["path","host","z","packageRoot","error","esbuild","info","style","themeRef","require","theme"],"mappings":"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","file":"index.js","sourcesContent":["import pc from \"picocolors\";\n\nexport const style = {\n success: pc.green,\n warning: pc.yellow,\n error: pc.red,\n info: pc.cyan,\n url: pc.cyan,\n code: pc.bold,\n value: pc.bold,\n path: pc.magenta,\n selected: (value: string) => pc.bgCyan(pc.black(value)),\n};\n\nexport function success(message: string): string {\n return style.success(message);\n}\n\nexport function warning(message: string): string {\n return style.warning(message);\n}\n\nexport function error(message: string): string {\n return style.error(message);\n}\n\nexport function info(message: string): string {\n return style.info(message);\n}\n\nexport function themeRef(key: string, version: string): string {\n return style.value(`${key}@${version}`);\n}\n","import readline from \"node:readline\";\n\nimport { style, success } from \"./format\";\n\nexport interface SelectChoice {\n label: string;\n value: string;\n}\n\nexport type SelectPrompt = (\n message: string,\n choices: SelectChoice[],\n defaultValue: string | undefined,\n) => Promise<string>;\n\nexport const selectChoice: SelectPrompt = async (message, choices, defaultValue) => {\n if (choices.length === 0) {\n throw new Error(\"No choices are available.\");\n }\n\n const defaultIndex = Math.max(\n 0,\n choices.findIndex((choice) => choice.value === defaultValue),\n );\n const fallback = choices[defaultIndex]!;\n if (choices.length === 1 || !process.stdin.isTTY || !process.stdout.isTTY) {\n return fallback.value;\n }\n\n const input = process.stdin;\n const output = process.stdout;\n const wasRaw = input.isRaw;\n const wasFlowing = input.readableFlowing;\n let selectedIndex = defaultIndex;\n\n readline.emitKeypressEvents(input);\n input.setRawMode(true);\n input.resume();\n\n const render = (replace: boolean): void => {\n if (replace) {\n readline.moveCursor(output, 0, -(choices.length + 1));\n readline.cursorTo(output, 0);\n readline.clearScreenDown(output);\n }\n\n output.write(`${style.info(\"?\")} ${message}\\n`);\n for (const [index, choice] of choices.entries()) {\n if (index === selectedIndex) {\n output.write(`${style.info(\"❯\")} ${style.selected(` ${choice.label} `)}\\n`);\n } else {\n output.write(` ${choice.label}\\n`);\n }\n }\n };\n\n render(false);\n\n return new Promise<string>((resolve, reject) => {\n const cleanup = (): void => {\n input.off(\"keypress\", onKeypress);\n input.setRawMode(wasRaw);\n if (wasFlowing !== true) {\n input.pause();\n }\n };\n\n const finish = (): void => {\n readline.moveCursor(output, 0, -(choices.length + 1));\n readline.cursorTo(output, 0);\n readline.clearScreenDown(output);\n const selected = choices[selectedIndex]!;\n output.write(`${success(\"✔\")} ${message} ${style.url(selected.value)}\\n`);\n cleanup();\n resolve(selected.value);\n };\n\n const onKeypress = (\n _character: string | undefined,\n key: { ctrl?: boolean; name?: string },\n ): void => {\n if (key.ctrl === true && key.name === \"c\") {\n cleanup();\n reject(new Error(\"Host selection cancelled.\"));\n return;\n }\n if (key.name === \"return\" || key.name === \"enter\") {\n finish();\n return;\n }\n if (key.name === \"up\") {\n selectedIndex = (selectedIndex - 1 + choices.length) % choices.length;\n render(true);\n return;\n }\n if (key.name === \"down\") {\n selectedIndex = (selectedIndex + 1) % choices.length;\n render(true);\n }\n };\n\n input.on(\"keypress\", onKeypress);\n });\n};\n","import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { z } from \"zod\";\n\nimport { error, info, style, success, warning } from \"./format\";\nimport { selectChoice, type SelectChoice, type SelectPrompt } from \"./select\";\n\nexport const DEFAULT_HOST = \"app.sudayun.cn\";\nexport const GLOBAL_HOST = \"app.sudaweb.ai\";\n\nconst officialHostChoices: SelectChoice[] = [\n { label: `国内(${DEFAULT_HOST})`, value: DEFAULT_HOST },\n { label: `海外(${GLOBAL_HOST})`, value: GLOBAL_HOST },\n];\n\nconst credentialSchema = z.object({\n sessionToken: z.string().min(1),\n});\n\nconst authStoreSchema = z.object({\n currentHost: z.string().min(1).optional(),\n hosts: z.record(z.string().min(1), credentialSchema),\n});\n\nconst legacyAuthConfigSchema = z.object({\n sessionToken: z.string().min(1),\n host: z.string().min(1),\n});\n\ntype AuthStore = z.infer<typeof authStoreSchema>;\n\nexport interface AuthConfig {\n /**\n * The `suda_<...>` API-token plaintext issued by `/api/cli-auth/poll` and\n * verified by the workspace `requireApiAuth` helper. The `sessionToken`\n * key name is a historical artefact; the value is the API token itself.\n */\n sessionToken: string;\n host: string;\n baseUrl: string;\n}\n\nfunction getConfigPath(): string {\n return path.join(os.homedir(), \".config\", \"suda\", \"config.json\");\n}\n\nexport function normalizeHost(value: string): string {\n const host = value.trim();\n if (host.length === 0 || host.includes(\"://\") || /[/?#@]/.test(host)) {\n throw new Error(`Invalid host \"${value}\". Use a bare host name such as ${DEFAULT_HOST}.`);\n }\n\n try {\n return new URL(`https://${host}`).host;\n } catch {\n throw new Error(`Invalid host \"${value}\". Use a bare host name such as ${DEFAULT_HOST}.`);\n }\n}\n\nfunction protocolForHost(host: string): \"http\" | \"https\" {\n const hostname = new URL(`https://${host}`).hostname;\n return hostname === \"localhost\" || hostname === \"127.0.0.1\" ? \"http\" : \"https\";\n}\n\nfunction baseUrlForHost(host: string): string {\n return `${protocolForHost(host)}://${host}`;\n}\n\nfunction parseAuthStore(value: unknown): AuthStore {\n const current = authStoreSchema.safeParse(value);\n if (current.success) {\n const hosts: AuthStore[\"hosts\"] = {};\n for (const [host, credential] of Object.entries(current.data.hosts)) {\n hosts[normalizeHost(host)] = credential;\n }\n\n const store: AuthStore = { hosts };\n if (current.data.currentHost !== undefined) {\n store.currentHost = normalizeHost(current.data.currentHost);\n }\n return store;\n }\n\n const legacy = legacyAuthConfigSchema.parse(value);\n const host = normalizeHost(legacy.host);\n return {\n currentHost: host,\n hosts: {\n [host]: { sessionToken: legacy.sessionToken },\n },\n };\n}\n\nasync function readAuthStore(): Promise<AuthStore | null> {\n try {\n const content = await fs.readFile(getConfigPath(), \"utf8\");\n return parseAuthStore(JSON.parse(content) as unknown);\n } catch {\n return null;\n }\n}\n\nasync function writeAuthStore(store: AuthStore): Promise<void> {\n const validated = authStoreSchema.parse(store);\n const configPath = getConfigPath();\n await fs.mkdir(path.dirname(configPath), { recursive: true });\n await fs.chmod(path.dirname(configPath), 0o700).catch(() => undefined);\n await fs.writeFile(configPath, `${JSON.stringify(validated, null, 2)}\\n`, { mode: 0o600 });\n await fs.chmod(configPath, 0o600).catch(() => undefined);\n}\n\nasync function removeConfigFile(): Promise<void> {\n try {\n await fs.unlink(getConfigPath());\n } catch (err: unknown) {\n if (err instanceof Error && \"code\" in err && (err as { code: string }).code !== \"ENOENT\") {\n throw err;\n }\n }\n}\n\nasync function saveCredential(hostValue: string, sessionToken: string): Promise<AuthConfig> {\n const host = normalizeHost(hostValue);\n const store = (await readAuthStore()) ?? { hosts: {} };\n store.hosts[host] = credentialSchema.parse({ sessionToken });\n store.currentHost = host;\n await writeAuthStore(store);\n return { host, sessionToken, baseUrl: baseUrlForHost(host) };\n}\n\nasync function removeCredential(hostValue: string): Promise<void> {\n const host = normalizeHost(hostValue);\n const store = await readAuthStore();\n if (!store?.hosts[host]) {\n return;\n }\n\n delete store.hosts[host];\n if (store.currentHost === host) {\n delete store.currentHost;\n }\n\n if (Object.keys(store.hosts).length === 0) {\n await removeConfigFile();\n return;\n }\n await writeAuthStore(store);\n}\n\nfunction hostLabel(host: string): string {\n if (host === DEFAULT_HOST) {\n return `国内(${host})`;\n }\n if (host === GLOBAL_HOST) {\n return `海外(${host})`;\n }\n return host;\n}\n\nfunction createHostChoices(hosts: string[]): SelectChoice[] {\n return hosts.map((host) => ({ label: hostLabel(host), value: host }));\n}\n\nasync function resolveLoginHost(\n hostValue?: string,\n prompt: SelectPrompt = selectChoice,\n): Promise<string> {\n if (hostValue !== undefined) {\n return normalizeHost(hostValue);\n }\n const store = await readAuthStore();\n const hosts = new Set(officialHostChoices.map((choice) => choice.value));\n for (const host of Object.keys(store?.hosts ?? {})) {\n hosts.add(host);\n }\n const defaultHost = store?.currentHost ?? DEFAULT_HOST;\n return prompt(\"Select a SudaCloud host to log in to:\", createHostChoices([...hosts]), defaultHost);\n}\n\nasync function resolveAuthenticatedHost(\n hostValue: string | undefined,\n message: string,\n prompt: SelectPrompt = selectChoice,\n): Promise<string | undefined> {\n if (hostValue !== undefined) {\n return normalizeHost(hostValue);\n }\n\n const store = await readAuthStore();\n const hosts = Object.keys(store?.hosts ?? {}).sort();\n if (hosts.length === 0) {\n return undefined;\n }\n return prompt(message, createHostChoices(hosts), store?.currentHost ?? hosts[0]);\n}\n\nexport async function readAuthConfig(hostValue?: string): Promise<AuthConfig | null> {\n const store = await readAuthStore();\n if (!store) {\n return null;\n }\n\n const host = hostValue !== undefined ? normalizeHost(hostValue) : store.currentHost;\n if (host === undefined) {\n return null;\n }\n const credential = store.hosts[host];\n if (!credential) {\n return null;\n }\n return {\n host,\n sessionToken: credential.sessionToken,\n baseUrl: baseUrlForHost(host),\n };\n}\n\nexport async function requireAuthConfig(hostValue?: string): Promise<AuthConfig> {\n const config = await readAuthConfig(hostValue);\n if (config) {\n return config;\n }\n\n if (hostValue !== undefined) {\n const host = normalizeHost(hostValue);\n throw new Error(\n `Not logged in to ${host}. Run \\`suda auth login --host ${host}\\` to authenticate first.`,\n );\n }\n throw new Error(\n \"No current authenticated host. Run `suda auth login` or `suda host switch <host>` first.\",\n );\n}\n\nexport async function selectAuthConfig(\n hostValue: string | undefined,\n message: string,\n): Promise<AuthConfig> {\n const host = await resolveAuthenticatedHost(hostValue, message);\n return requireAuthConfig(host);\n}\n\n/**\n * Wrapper around `fetch` that attaches the selected host's CLI token and\n * removes only that credential when the workspace rejects it.\n */\nexport async function cliAuthFetch(\n pathname: string,\n init: RequestInit = {},\n hostValue?: string,\n): Promise<Response> {\n let config: AuthConfig;\n try {\n config = await requireAuthConfig(hostValue);\n } catch (err) {\n throw new CliAuthExpiredError(\n \"unauthorized\",\n err instanceof Error ? err.message : \"Not logged in. Run `suda auth login` first.\",\n );\n }\n\n const headers = new Headers(init.headers);\n headers.set(\"Authorization\", `Bearer ${config.sessionToken}`);\n\n const res = await fetch(`${config.baseUrl}${pathname}`, { ...init, headers });\n if (res.status === 401) {\n const body = (await res.clone().json().catch(() => ({}))) as {\n error?: string;\n message?: string;\n };\n const code = (\n [\"token_invalid\", \"token_revoked\", \"token_expired\"].includes(body.error ?? \"\")\n ? (body.error as \"token_invalid\" | \"token_revoked\" | \"token_expired\")\n : \"unauthorized\"\n );\n await removeCredential(config.host);\n throw new CliAuthExpiredError(\n code,\n body.message ??\n `Authentication for ${config.host} is no longer valid. Run \\`suda auth login --host ${config.host}\\` to authenticate again.`,\n );\n }\n return res;\n}\n\nexport class CliAuthExpiredError extends Error {\n readonly code: \"token_invalid\" | \"token_revoked\" | \"token_expired\" | \"unauthorized\";\n constructor(\n code: CliAuthExpiredError[\"code\"],\n message: string,\n ) {\n super(message);\n this.name = \"CliAuthExpiredError\";\n this.code = code;\n }\n}\n\nexport async function login(hostValue?: string): Promise<void> {\n const host = await resolveLoginHost(hostValue);\n const baseUrl = baseUrlForHost(host);\n\n console.log(`Requesting device authorization from ${style.url(baseUrl)}...`);\n\n const deviceRes = await fetch(`${baseUrl}/api/cli-auth/device`, {\n method: \"POST\",\n });\n\n if (!deviceRes.ok) {\n throw new Error(`Failed to initialize auth: ${deviceRes.statusText}`);\n }\n\n const { deviceCode, userCode, verificationUri, interval, expiresIn } = (await deviceRes.json()) as {\n deviceCode: string;\n userCode: string;\n verificationUri: string;\n expiresIn: number;\n interval: number;\n };\n\n const authUrl = `${verificationUri}?code=${userCode}`;\n console.log(\"\\nPlease open the following URL in your browser to authorize Suda CLI:\\n\");\n console.log(` ${style.url(authUrl)}\\n`);\n console.log(`Your confirmation code is: ${style.code(userCode)}\\n`);\n try {\n const open = (await import(\"open\")).default;\n await open(authUrl);\n } catch {\n // Browser opening is best-effort; the URL remains visible in the terminal.\n }\n\n const pollInterval = (interval || 5) * 1000;\n const timeoutSeconds = expiresIn || 300;\n const deadline = Date.now() + timeoutSeconds * 1000;\n\n console.log(info(\"Waiting for authorization...\"));\n\n while (Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n\n const pollRes = await fetch(`${baseUrl}/api/cli-auth/poll`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ deviceCode }),\n });\n\n const data = (await pollRes.json()) as { status?: string; token?: string; error?: string };\n\n if (pollRes.ok && data.status === \"approved\" && data.token) {\n await saveCredential(host, data.token);\n console.log(success(`Successfully authorized ${style.url(host)} and set it as current.`));\n return;\n }\n\n if (data.error === \"authorization_pending\") {\n continue;\n }\n\n throw new Error(`Authorization failed: ${data.error || \"Unknown error\"}`);\n }\n\n throw new Error(\"Authorization timed out.\");\n}\n\nexport async function status(hostValue?: string): Promise<void> {\n let config: AuthConfig;\n try {\n config = await selectAuthConfig(hostValue, \"Select a host to check:\");\n } catch (err) {\n console.log(warning(err instanceof Error ? err.message : \"Not logged in.\"));\n return;\n }\n\n let res: Response;\n try {\n res = await cliAuthFetch(\"/api/cli-auth/whoami\", {}, config.host);\n } catch (err) {\n if (err instanceof CliAuthExpiredError) {\n console.log(warning(err.message));\n return;\n }\n console.error(error(`Failed to connect to ${config.host}.`));\n return;\n }\n\n if (!res.ok) {\n console.error(\n error(\n `Failed to verify session on ${config.host} (${res.status} ${res.statusText}). Try again later.`,\n ),\n );\n return;\n }\n\n const data = (await res.json()) as {\n user?: { email?: string | null; name?: string | null };\n };\n const label = data.user?.email ?? data.user?.name ?? \"your account\";\n console.log(success(`Logged in as ${style.value(label)} on ${style.url(config.host)}`));\n}\n\nexport async function logout(hostValue?: string): Promise<void> {\n let config: AuthConfig;\n try {\n config = await selectAuthConfig(hostValue, \"Select a host to log out from:\");\n } catch (err) {\n console.log(warning(err instanceof Error ? err.message : \"Not logged in.\"));\n return;\n }\n\n try {\n await cliAuthFetch(\"/api/cli-auth/revoke\", { method: \"POST\" }, config.host);\n } catch (err) {\n if (err instanceof CliAuthExpiredError) {\n console.log(warning(`Logged out from ${config.host} (token was already invalid).`));\n return;\n }\n console.warn(\n warning(\n `Could not contact ${config.host} to revoke token. Its credential will be cleared locally only.`,\n ),\n );\n }\n\n await removeCredential(config.host);\n console.log(success(`Logged out from ${style.url(config.host)} successfully.`));\n}\n\nexport async function showCurrentHost(): Promise<void> {\n const store = await readAuthStore();\n if (!store?.currentHost || !store.hosts[store.currentHost]) {\n console.log(\n warning(\"No current authenticated host. Run `suda auth login` or `suda host switch <host>` first.\"),\n );\n return;\n }\n console.log(`Current host: ${style.url(store.currentHost)}`);\n}\n\nexport async function listHosts(): Promise<void> {\n const store = await readAuthStore();\n const hosts = Object.keys(store?.hosts ?? {}).sort();\n if (hosts.length === 0) {\n console.log(warning(\"No authenticated hosts. Run `suda auth login` first.\"));\n return;\n }\n\n console.log(\"Authenticated hosts:\");\n for (const host of hosts) {\n const marker = host === store?.currentHost ? success(\"*\") : \" \";\n const suffix = host === store?.currentHost ? style.value(\" (current)\") : \"\";\n console.log(` ${marker} ${style.url(host)}${suffix}`);\n }\n}\n\nexport async function switchHost(hostValue: string): Promise<void> {\n const host = normalizeHost(hostValue);\n const store = await readAuthStore();\n if (!store?.hosts[host]) {\n throw new Error(\n `Not logged in to ${host}. Run \\`suda auth login --host ${host}\\` to authenticate first.`,\n );\n }\n store.currentHost = host;\n await writeAuthStore(store);\n console.log(success(`Switched current host to ${style.url(host)}.`));\n}\n\nexport const __authTestUtils = {\n readAuthStore,\n removeCredential,\n resolveAuthenticatedHost,\n resolveLoginHost,\n saveCredential,\n writeAuthStore,\n};\n","#!/usr/bin/env node\n\nimport { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { copyFile, mkdir, readFile, readdir, rm, stat, writeFile } from \"node:fs/promises\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nimport type {\n AgentComponentOutput,\n ThemeAgentManifest,\n ThemeModule,\n ThemeStarterPage,\n} from \"@sudajs/theme-engine\";\nimport {\n agentValidationResultSchema,\n checkThemeModule,\n createThemeDesignCssVariables,\n createThemeDesignFontStylesheetUrl,\n createSudaPageAgentRuntime,\n createThemeAgentManifest,\n formatThemeCheckResult,\n findThemeDesignSystemFieldName,\n resolveThemeDesignTokens,\n themeDesignSystemSchema,\n} from \"@sudajs/theme-engine\";\nimport type {\n extractLayoutChrome as extractLayoutChromeFn,\n ResolveAssetPathOptions,\n resolveAssetPath as resolveAssetPathFn,\n ThemeRender as ThemeRenderFn,\n ThemeRenderMetadata,\n} from \"@sudajs/theme-engine/server\";\nimport {\n runWithThemePreviewLocale,\n themeManifestSchema,\n type ThemeLocaleMessages,\n type ThemePreviewLocaleMessages,\n} from \"@sudajs/theme-engine/server\";\nimport { Command } from \"commander\";\nimport { build as esbuild, type Plugin } from \"esbuild\";\nimport { CircleCheck, Pencil } from \"lucide-react\";\nimport { createElement, type createElement as createElementFn } from \"react\";\nimport {\n renderToStaticMarkup,\n type renderToString as renderToStringFn,\n} from \"react-dom/server\";\nimport { z } from \"zod\";\n\nimport {\n listHosts,\n login,\n logout,\n requireAuthConfig,\n selectAuthConfig,\n showCurrentHost,\n status,\n switchHost,\n} from \"./auth\";\nimport { error as formatError, info, style, success, themeRef, warning } from \"./format\";\n\nconst THEME_NAME_PATTERN = /^[A-Za-z0-9_-]+$/;\nconst THEME_KEY_PATTERN = /^[a-z0-9][a-z0-9-]*$/;\n\ninterface ValidatedTheme {\n root: string;\n module: ThemeModule;\n serverEntryPath: string;\n clientEntryPath: string | null;\n stylesheetPath: string | null;\n}\n\ninterface UploadFile {\n absolutePath: string;\n relativePath: string;\n contentType: string;\n}\n\ninterface ThemeRootOptions {\n themeRoot?: string | undefined;\n}\n\ninterface ThemeSkillAddOptions {\n root?: string | undefined;\n dryRun?: boolean | undefined;\n force?: boolean | undefined;\n}\n\ntype ThemeSkillAddStatus = \"installed\" | \"already-installed\" | \"would-install\" | \"would-replace\";\n\ninterface ThemeSkillAddResult {\n destination: string;\n status: ThemeSkillAddStatus;\n}\n\ntype BuildOptions = ThemeRootOptions;\n\ninterface CheckOptions extends ThemeRootOptions {\n skipBuild?: boolean;\n}\n\ninterface PublishOptions extends ThemeRootOptions {\n skipBuild?: boolean;\n force?: boolean;\n host?: string;\n}\n\ninterface ViteModule {\n build: (config: Record<string, unknown>) => Promise<unknown>;\n createServer: (config: Record<string, unknown>) => Promise<ViteDevServer>;\n}\n\ninterface ViteDevServer {\n middlewares: {\n use: (\n handler: (\n request: IncomingMessage,\n response: ServerResponse,\n next: () => void,\n ) => void,\n ) => void;\n };\n ssrLoadModule: (url: string) => Promise<{ default?: ThemeModule }>;\n transformIndexHtml: (url: string, html: string) => Promise<string>;\n listen: (port?: number) => Promise<ViteDevServer>;\n close: () => Promise<void>;\n resolvedUrls?: { local: string[]; network: string[] };\n moduleGraph: { invalidateAll: () => void };\n}\n\ninterface AgentThemeOptions extends ThemeRootOptions {\n projectId?: string | undefined;\n version?: string | undefined;\n example?: boolean | undefined;\n}\n\ninterface AgentPageCreateOptions extends AgentThemeOptions {\n title: string;\n slug: string;\n theme: string;\n input: string;\n home?: boolean | undefined;\n}\n\ninterface AgentProjectCreateOptions {\n name: string;\n siteDescription: string;\n}\n\ninterface AgentProjectSummary {\n projectId: string;\n name: string;\n defaultDomain: string | null;\n role: string;\n isOwner: boolean;\n activeThemeKey: string | null;\n activeThemeVersion: string | null;\n}\n\ninterface AgentProjectCreated {\n success: true;\n projectId: string;\n name: string;\n defaultDomain: string | null;\n dashboardUrl: string;\n}\n\ninterface ThemeCatalogItem {\n key: string;\n name: string;\n version: string;\n description?: string | null | undefined;\n categories?: string[] | undefined;\n preview?: string | undefined;\n active?: boolean | undefined;\n}\n\ninterface CliAuthContext {\n baseUrl: string;\n token: string;\n}\n\ntype FetchJsonFn = typeof fetchJson;\n\nconst createPageDraftOutputSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"created\").describe(\"The page draft was created.\"),\n pageId: z.string().describe(\"New page id.\"),\n }),\n z.object({\n status: z.literal(\"invalid\").describe(\"The page content failed validation.\"),\n valid: z.literal(false),\n issues: z.array(\n z.object({\n path: z.string(),\n message: z.string(),\n }),\n ),\n }),\n]);\n\nconst updatePageDraftOutputSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"updated\").describe(\"The page draft was updated.\"),\n pageId: z.string().describe(\"Existing page id.\"),\n }),\n z.object({\n status: z.literal(\"invalid\").describe(\"The page content failed validation.\"),\n valid: z.literal(false),\n issues: z.array(\n z.object({\n path: z.string(),\n message: z.string(),\n }),\n ),\n }),\n]);\n\nconst destructivePageOperationOutputSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"needs_confirmation\"),\n projectId: z.string(),\n slug: z.string(),\n impact: z.string(),\n }),\n z.object({\n status: z.enum([\"deleted\", \"published\"]),\n projectId: z.string(),\n slug: z.string(),\n pageId: z.string(),\n }),\n]);\n\nconst activateThemeOutputSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"needs_confirmation\"),\n projectId: z.string(),\n themeKey: z.string(),\n themeVersion: z.string().nullable(),\n impact: z.string(),\n }),\n z.object({\n status: z.literal(\"activated\"),\n projectId: z.string(),\n themeKey: z.string(),\n themeVersion: z.string().nullable(),\n }),\n]);\n\nconst contactOptionSchema = z.object({ label: z.string().min(1).max(80), value: z.string().min(1).max(80) });\n\nconst contactFieldSchema = z.object({\n id: z\n .string()\n .trim()\n .min(1)\n .max(48)\n .regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/),\n type: z.enum([\"text\", \"textarea\", \"checkbox\", \"radio\", \"select\"]),\n label: z.string().trim().min(1).max(120),\n placeholder: z.string().trim().max(160).optional(),\n required: z.boolean().default(false),\n options: z.array(contactOptionSchema).default([]),\n validation: z\n .object({\n format: z.enum([\"email\"]).optional(),\n maxLength: z.number().int().min(1).max(5000).optional(),\n })\n .default({}),\n});\n\nfunction addUniqueContactIssue<T extends Record<string, unknown>>(\n items: T[],\n collectionName: string,\n key: keyof T,\n ctx: z.RefinementCtx,\n prefix: Array<string | number> = [],\n) {\n const seen = new Set<unknown>();\n for (const [index, item] of items.entries()) {\n const value = item[key];\n if (value === undefined || value === null || value === \"\") continue;\n if (seen.has(value)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate ${String(key)} in ${collectionName}.`,\n path: [...prefix, index, key as string],\n });\n continue;\n }\n seen.add(value);\n }\n}\n\nconst contactFieldsSchema = z.array(contactFieldSchema).superRefine((fields, ctx) => {\n addUniqueContactIssue(fields, \"fields\", \"id\", ctx);\n for (const [index, field] of fields.entries()) {\n if ((field.type === \"radio\" || field.type === \"select\") && field.options.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `${field.type} fields require at least one option.`,\n path: [index, \"options\"],\n });\n }\n addUniqueContactIssue(field.options, \"options\", \"value\", ctx, [index, \"options\"]);\n }\n});\n\nconst contactEmailNotificationUpdateSchema = z.object({\n id: z.string().trim().min(1).max(48),\n type: z.literal(\"email\"),\n enabled: z.boolean().default(true),\n label: z.string().trim().min(1).max(80),\n recipients: z.array(z.string().trim().email()).min(1),\n});\n\nconst contactChatNotificationUpdateSchema = z.object({\n id: z.string().trim().min(1).max(48),\n type: z.enum([\"slack\", \"wecom\", \"feishu\", \"dingtalk\"]),\n enabled: z.boolean().default(true),\n label: z.string().trim().min(1).max(80),\n webhookUrl: z.string().trim().url().optional(),\n});\n\nconst contactNotificationUpdateSchema = z.discriminatedUnion(\"type\", [\n contactEmailNotificationUpdateSchema,\n contactChatNotificationUpdateSchema,\n]);\n\nconst contactWebhookUpdateSchema = z.object({\n id: z.string().trim().min(1).max(48),\n enabled: z.boolean().default(true),\n label: z.string().trim().min(1).max(80),\n event: z.literal(\"contact.submitted\").default(\"contact.submitted\"),\n url: z.string().trim().url().optional(),\n});\n\nconst updateContactFormInputSchema = z.object({\n projectId: z.string().min(1),\n enabled: z.boolean().optional(),\n title: z.string().trim().min(1).max(120).optional(),\n successMessage: z.string().trim().min(1).max(240).optional(),\n submitLabel: z.string().trim().min(1).max(80).optional(),\n fields: contactFieldsSchema.optional(),\n notifications: z.array(contactNotificationUpdateSchema).optional(),\n webhooks: z.array(contactWebhookUpdateSchema).optional(),\n confirm: z.boolean().optional(),\n});\n\nconst contactFormViewSchema = z.object({\n enabled: z.boolean(),\n title: z.string(),\n successMessage: z.string(),\n submitLabel: z.string(),\n fields: z.array(contactFieldSchema),\n notifications: z.array(\n z.discriminatedUnion(\"type\", [\n z.object({\n id: z.string(),\n type: z.literal(\"email\"),\n enabled: z.boolean(),\n label: z.string(),\n recipients: z.array(z.string()),\n }),\n z.object({\n id: z.string(),\n type: z.enum([\"slack\", \"wecom\", \"feishu\", \"dingtalk\"]),\n enabled: z.boolean(),\n label: z.string(),\n webhookUrlMasked: z.string().nullable(),\n }),\n ]),\n ),\n webhooks: z.array(\n z.object({\n id: z.string(),\n enabled: z.boolean(),\n label: z.string(),\n event: z.literal(\"contact.submitted\"),\n urlMasked: z.string().nullable(),\n }),\n ),\n limits: z.object({\n maxNotificationChannels: z.number(),\n maxWebhooks: z.number(),\n }),\n features: z.object({\n contactNotifications: z.boolean(),\n contactWebhooks: z.boolean(),\n }),\n});\n\nconst contactFormOutputSchema = z.object({\n contactForm: contactFormViewSchema,\n});\n\nconst updateContactFormOutputSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"needs_confirmation\"),\n projectId: z.string(),\n impact: z.string(),\n draft: updateContactFormInputSchema.omit({ confirm: true }),\n }),\n z.object({\n status: z.literal(\"updated\"),\n projectId: z.string(),\n contactForm: contactFormViewSchema,\n }),\n]);\n\nconst themeSettingsViewSchema = z.object({\n themeKey: z.string(),\n themeVersion: z.string(),\n designSystem: themeDesignSystemSchema,\n rootProps: z.record(z.unknown()),\n schema: z.unknown(),\n});\n\nconst themeSettingsOutputSchema = z.object({\n themeSettings: themeSettingsViewSchema,\n});\n\nconst updateThemeSettingsInputSchema = z.object({\n projectId: z.string().min(1),\n rootProps: z.record(z.unknown()),\n confirm: z.boolean().optional(),\n});\n\nconst updateThemeSettingsOutputSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"needs_confirmation\"),\n projectId: z.string(),\n impact: z.string(),\n draft: updateThemeSettingsInputSchema.omit({ confirm: true }),\n }),\n z.object({\n status: z.literal(\"updated\"),\n projectId: z.string(),\n themeSettings: themeSettingsViewSchema,\n }),\n]);\n\n// Mirrors apps/workspace/app/onboarding/constants.ts so external AI tools see\n// the same input bounds as the in-app onboarding form.\nconst PROJECT_NAME_MIN_LENGTH = 1;\nconst PROJECT_NAME_MAX_LENGTH = 80;\nconst PROJECT_DESCRIPTION_MIN_LENGTH = 1;\nconst PROJECT_DESCRIPTION_MAX_LENGTH = 300;\n\n// Single source of truth for the create_project input shape, reused by both\n// the MCP `create_project` tool and the `suda agent project create` command\n// so the two entry points cannot drift on bounds or trim semantics.\nconst createProjectInputSchema = z.object({\n name: z.string().trim().min(PROJECT_NAME_MIN_LENGTH).max(PROJECT_NAME_MAX_LENGTH),\n siteDescription: z\n .string()\n .trim()\n .min(PROJECT_DESCRIPTION_MIN_LENGTH)\n .max(PROJECT_DESCRIPTION_MAX_LENGTH),\n});\n\nconst projectSummarySchema = z.object({\n projectId: z.string(),\n name: z.string(),\n defaultDomain: z.string().nullable(),\n role: z.string(),\n isOwner: z.boolean(),\n activeThemeKey: z.string().nullable(),\n activeThemeVersion: z.string().nullable(),\n});\n\nconst listProjectsOutputSchema = z.object({\n projects: z.array(projectSummarySchema),\n});\n\nconst createProjectOutputSchema = z.object({\n projectId: z.string(),\n name: z.string(),\n defaultDomain: z.string().nullable(),\n dashboardUrl: z.string(),\n});\n\nconst packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"..\");\nconst themeTemplateRoot = path.join(packageRoot, \"templates\", \"theme\");\nconst themeSkillTemplateRoot = path.join(packageRoot, \"templates\", \"theme-skill\");\n\nfunction createHostReactShimPlugin(): Plugin {\n return {\n name: \"suda-host-react-shim\",\n setup(build) {\n build.onResolve({ filter: /^react$/ }, () => ({\n path: \"react-host-shim\",\n namespace: \"suda-shim\",\n }));\n build.onResolve({ filter: /^react\\/jsx-runtime$/ }, () => ({\n path: \"react-jsx-runtime-host-shim\",\n namespace: \"suda-shim\",\n }));\n build.onResolve({ filter: /^react-dom$/ }, () => ({\n path: \"react-dom-host-shim\",\n namespace: \"suda-shim\",\n }));\n build.onResolve({ filter: /^react-dom\\/client$/ }, () => ({\n path: \"react-dom-client-host-shim\",\n namespace: \"suda-shim\",\n }));\n build.onLoad({ filter: /^react-host-shim$/, namespace: \"suda-shim\" }, () => ({\n loader: \"js\",\n contents: `\nconst React = globalThis.__SUDA_REACT__;\nif (!React) {\n throw new Error(\"Missing host React runtime (__SUDA_REACT__).\");\n}\nexport default React;\nexport const {\n Children,\n Component,\n Fragment,\n Profiler,\n PureComponent,\n StrictMode,\n Suspense,\n cloneElement,\n createContext,\n createElement,\n createRef,\n forwardRef,\n isValidElement,\n lazy,\n memo,\n startTransition,\n use,\n useActionState,\n useCallback,\n useContext,\n useDeferredValue,\n useEffect,\n useId,\n useImperativeHandle,\n useInsertionEffect,\n useLayoutEffect,\n useMemo,\n useOptimistic,\n useReducer,\n useRef,\n useState,\n useSyncExternalStore,\n useTransition,\n version,\n} = React;\n`,\n }));\n build.onLoad(\n {\n filter: /^react-jsx-runtime-host-shim$/,\n namespace: \"suda-shim\",\n },\n () => ({\n loader: \"js\",\n contents: `\nconst runtime = globalThis.__SUDA_REACT_JSX_RUNTIME__;\nif (!runtime) {\n throw new Error(\"Missing host React JSX runtime (__SUDA_REACT_JSX_RUNTIME__).\");\n}\nexport const { Fragment, jsx, jsxs, jsxDEV } = runtime;\n`,\n }),\n );\n build.onLoad({ filter: /^react-dom-host-shim$/, namespace: \"suda-shim\" }, () => ({\n loader: \"js\",\n contents: `\nconst ReactDOM = globalThis.__SUDA_REACT_DOM__;\nif (!ReactDOM) {\n throw new Error(\"Missing host React DOM runtime (__SUDA_REACT_DOM__).\");\n}\nexport default ReactDOM;\nexport const {\n createPortal,\n flushSync,\n preconnect,\n prefetchDNS,\n preinit,\n preinitModule,\n preload,\n preloadModule,\n requestFormReset,\n unstable_batchedUpdates,\n useFormState,\n useFormStatus,\n version,\n} = ReactDOM;\n`,\n }));\n build.onLoad({ filter: /^react-dom-client-host-shim$/, namespace: \"suda-shim\" }, () => ({\n loader: \"js\",\n contents: `\nconst ReactDOMClient = globalThis.__SUDA_REACT_DOM_CLIENT__;\nif (!ReactDOMClient) {\n throw new Error(\"Missing host React DOM client runtime (__SUDA_REACT_DOM_CLIENT__).\");\n}\nexport default ReactDOMClient;\nexport const { createRoot, hydrateRoot, version } = ReactDOMClient;\n`,\n }));\n },\n };\n}\n\nfunction createRejectEditorRuntimeDependencyPlugin(): Plugin {\n return {\n name: \"suda-reject-editor-runtime-dependency\",\n setup(build) {\n build.onResolve({ filter: /^@puckeditor\\/(?:core|plugin-ai)(?:\\/.*)?$/ }, (args) => ({\n errors: [\n {\n text: `${args.path} is an editor dependency and cannot be imported by the public theme client runtime.`,\n },\n ],\n }));\n },\n };\n}\n\nfunction createHostThemeRuntimeShimPlugin(): Plugin {\n return {\n name: \"suda-host-theme-runtime-shim\",\n setup(build) {\n build.onResolve({ filter: /^@sudajs\\/theme-engine\\/runtime$/ }, () => ({\n path: \"theme-runtime-host-shim\",\n namespace: \"suda-shim\",\n }));\n build.onLoad({ filter: /^theme-runtime-host-shim$/, namespace: \"suda-shim\" }, () => ({\n loader: \"js\",\n contents: `\nconst ThemeRuntime = globalThis.__SUDA_THEME_RUNTIME__;\nif (!ThemeRuntime) {\n throw new Error(\"Missing host theme runtime (__SUDA_THEME_RUNTIME__).\");\n}\nexport const {\n SudaIcon,\n SudaLucideIcon,\n getSudaSimpleIconSlug,\n isSudaSimpleIconName,\n normalizeSudaIconName,\n isSudaLucideIconName,\n normalizeSudaLucideIconName,\n toSudaSimpleIconName,\n colorSchemeField,\n createColorSchemeDefault,\n createThemeCssVariables,\n designSystemField,\n resolveColorSchemeTokens,\n SUDA_COLOR_TOKEN_KEYS,\n createThemeDesignCssVariables,\n createThemeDesignDefault,\n createThemeDesignFontStylesheetUrl,\n resolveThemeDesignTokens,\n SUDA_CUSTOM_DESIGN_PRESET_ID,\n SUDA_DESIGN_COLOR_KEYS,\n SUDA_DESIGN_RADIUS_KEYS,\n SUDA_DESIGN_TYPOGRAPHY_KEYS,\n SUDA_THEME_FONT_FAMILIES,\n compileSudaBlockSlots,\n isSudaLocalBlockComponent,\n SUDA_LOCAL_BLOCK_CATEGORY,\n SUDA_LOCAL_BLOCK_TYPE_PREFIX,\n cmsPaginationUrl,\n getIcpRecord,\n getPublicSecurityRecord,\n getCmsContent,\n getContactForm,\n getPostResource,\n getWhiteLabel,\n resolveAsset,\n postResourceKey,\n getPageSlot,\n THEME_PAGE_SLOT,\n createThemeAsset,\n createThemeAssetPath,\n createThemeAssetResolver,\n resolveThemeClientRuntimeUrl,\n resolveThemeRuntimeUrl,\n resolveAssetPath,\n THEME_CLIENT_RUNTIME_ARTIFACT,\n clearThemeLocale,\n createThemeTranslate,\n installThemeLocale,\n clearThemePreviewLocale,\n createThemePreviewTranslate,\n installThemePreviewLocale,\n} = ThemeRuntime;\n`,\n }));\n },\n };\n}\n\nfunction createHostThemeIconsShimPlugin(): Plugin {\n return {\n name: \"suda-host-theme-icons-shim\",\n setup(build) {\n build.onResolve({ filter: /^@sudajs\\/theme-engine\\/icons$/ }, () => {\n return { path: \"theme-icons-host-shim\", namespace: \"suda-shim\" };\n });\n build.onLoad({ filter: /^theme-icons-host-shim$/, namespace: \"suda-shim\" }, () => ({\n loader: \"js\",\n contents: `\nconst ThemeIcons = globalThis.__SUDA_THEME_ICONS__;\nif (!ThemeIcons) {\n throw new Error(\"Missing host theme icon runtime (__SUDA_THEME_ICONS__).\");\n}\nexport const {\n SudaIcon,\n SudaLucideIcon,\n getSudaSimpleIconSlug,\n isSudaSimpleIconName,\n normalizeSudaIconName,\n isSudaLucideIconName,\n normalizeSudaLucideIconName,\n toSudaSimpleIconName,\n} = ThemeIcons;\n`,\n }));\n },\n };\n}\n\nfunction createThemeDependencyResolverPlugin(root: string): Plugin {\n return {\n name: \"suda-theme-dependency-resolver\",\n setup(build) {\n const themeRequire = createRequire(path.join(root, \"package.json\"));\n build.onResolve({ filter: /^lucide-react(?:\\/.*)?$/ }, (args) => {\n if (args.path === \"lucide-react/dynamicIconImports\") {\n const packageRoot = path.dirname(themeRequire.resolve(\"lucide-react/package.json\"));\n return { path: path.join(packageRoot, \"dynamicIconImports.mjs\") };\n }\n return { path: themeRequire.resolve(args.path) };\n });\n },\n };\n}\n\nfunction safeObjectKeyPart(value: string): string {\n return value.replace(/[^a-zA-Z0-9._-]/g, \"-\");\n}\n\nfunction createThemePrefix(themeKey: string, version: string): string {\n return `themes/${safeObjectKeyPart(themeKey)}/${safeObjectKeyPart(version)}`;\n}\n\nfunction createThemeObjectKey(themeKey: string, version: string, relativePath: string): string {\n const safeRelativePath = relativePath\n .replace(/^\\/+/, \"\")\n .split(\"/\")\n .map(safeObjectKeyPart)\n .filter(Boolean)\n .join(\"/\");\n\n return `${createThemePrefix(themeKey, version)}/${safeRelativePath}`;\n}\n\nfunction resolveThemeRoot(options: ThemeRootOptions): string {\n return path.resolve(options.themeRoot ?? process.cwd());\n}\n\nfunction collectOption(value: string, previous: string[]): string[] {\n previous.push(value);\n return previous;\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await stat(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function readJson<T>(filePath: string): Promise<T> {\n const raw = await readFile(filePath, \"utf8\");\n return JSON.parse(raw) as T;\n}\n\nasync function readJsonIfExists<T>(filePath: string): Promise<T | null> {\n if (!(await pathExists(filePath))) {\n return null;\n }\n return readJson<T>(filePath);\n}\n\nasync function requireCliBaseUrl(): Promise<{ baseUrl: string; token: string }> {\n const config = await requireAuthConfig();\n return {\n baseUrl: config.baseUrl,\n token: config.sessionToken,\n };\n}\n\nasync function fetchJson<T>(\n url: string,\n options: RequestInit & { token?: string } = {},\n): Promise<T> {\n const headers = new Headers(options.headers);\n if (options.token) {\n headers.set(\"Authorization\", `Bearer ${options.token}`);\n }\n const response = await fetch(url, { ...options, headers });\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as {\n error?: string;\n message?: string;\n };\n throw new Error(errorData.message || errorData.error || response.statusText);\n }\n return (await response.json()) as T;\n}\n\nfunction agentCacheDir(): string {\n return path.join(\n process.env.XDG_CACHE_HOME ?? path.join(process.env.HOME ?? \".\", \".cache\"),\n \"suda\",\n \"agent\",\n );\n}\n\nfunction cachedThemeManifestPath(themeKey: string, version: string): string {\n return path.join(\n agentCacheDir(),\n \"themes\",\n safeObjectKeyPart(themeKey),\n safeObjectKeyPart(version),\n \"agent-manifest.json\",\n );\n}\n\nasync function loadThemeModule(serverEntryPath: string): Promise<ThemeModule> {\n const imported = (await import(`${pathToFileURL(serverEntryPath).href}?t=${Date.now()}`)) as {\n default?: ThemeModule;\n };\n\n if (!imported.default) {\n throw new Error(`${serverEntryPath} must export a default ThemeModule.`);\n }\n\n return imported.default;\n}\n\nfunction assertRecord(value: unknown, label: string): asserts value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(`${label} must be an object.`);\n }\n}\n\nfunction validateThemeModule(module: ThemeModule): void {\n assertRecord(module.manifest, \"manifest\");\n const parsedManifest = themeManifestSchema.safeParse(module.manifest);\n if (!parsedManifest.success) {\n const issues = parsedManifest.error.issues\n .map((issue) => ` - ${issue.path.join(\".\") || \"<root>\"}: ${issue.message}`)\n .join(\"\\n\");\n throw new Error(`manifest does not satisfy the Suda theme contract:\\n${issues}`);\n }\n if (!module.manifest.key || !module.manifest.version || !module.manifest.name) {\n throw new Error(\"manifest.key, manifest.version and manifest.name are required.\");\n }\n if (module.manifest.entry !== \"index.js\") {\n throw new Error('manifest.entry must be artifact-local: \"index.js\".');\n }\n if (\"clientEntry\" in module.manifest) {\n throw new Error(\n \"manifest.clientEntry is no longer supported. The CLI owns the runtime.client.js artifact.\",\n );\n }\n assertRecord(module.pageConfig?.components, \"pageConfig.components\");\n assertRecord(module.layoutConfig, \"layoutConfig\");\n assertRecord(module.defaultLayout, \"defaultLayout\");\n if (!Array.isArray(module.starterPages)) {\n throw new Error(\"starterPages must be an array.\");\n }\n const result = checkThemeModule(module);\n if (!result.ok) {\n throw new Error(formatThemeCheckResult(result));\n }\n}\n\nfunction hasTailwindV4Dependency(\n dependencies: Record<string, unknown> | undefined,\n name: string,\n): boolean {\n const value = dependencies?.[name];\n return typeof value === \"string\" && /^[~^<>=\\s]*4(?:[.\\s<>=-]|$)/.test(value.trim());\n}\n\nasync function validateThemeTailwindContract(root: string): Promise<void> {\n const packageJsonPath = path.join(root, \"package.json\");\n const packageJson = await readJson<{\n dependencies?: Record<string, unknown>;\n devDependencies?: Record<string, unknown>;\n }>(packageJsonPath);\n const dependencyScopes = [packageJson.dependencies, packageJson.devDependencies];\n const hasTailwind = dependencyScopes.some((dependencies) =>\n hasTailwindV4Dependency(dependencies, \"tailwindcss\"),\n );\n const hasPostcssPlugin = dependencyScopes.some((dependencies) =>\n hasTailwindV4Dependency(dependencies, \"@tailwindcss/postcss\"),\n );\n if (!hasTailwind) {\n throw new Error(\"Suda themes must depend on tailwindcss v4.\");\n }\n if (!hasPostcssPlugin) {\n throw new Error(\"Suda themes must depend on @tailwindcss/postcss v4.\");\n }\n\n const stylesEntry = path.join(root, \"src\", \"styles.css\");\n if (!(await pathExists(stylesEntry))) {\n throw new Error(`Missing ${stylesEntry}. Suda themes must define src/styles.css.`);\n }\n const styles = await readFile(stylesEntry, \"utf8\");\n if (!styles.includes('@import \"tailwindcss\";') && !styles.includes(\"@import 'tailwindcss';\")) {\n throw new Error('src/styles.css must include `@import \"tailwindcss\";`.');\n }\n\n await validateThemeCssTokenContract(root);\n}\n\ninterface CssBlockRange {\n body: string;\n end: number;\n start: number;\n}\n\nasync function collectThemeSourceCssFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n const absolutePath = path.join(directory, entry.name);\n if (entry.isDirectory()) {\n files.push(...(await collectThemeSourceCssFiles(absolutePath)));\n } else if (entry.isFile() && entry.name.endsWith(\".css\")) {\n files.push(absolutePath);\n }\n }\n return files;\n}\n\nfunction findThemeInlineBlocks(styles: string, filePath: string): CssBlockRange[] {\n const blocks: CssBlockRange[] = [];\n const pattern = /@theme\\s+inline\\s*\\{/g;\n for (const match of styles.matchAll(pattern)) {\n const start = match.index;\n let depth = 1;\n let cursor = start + match[0].length;\n while (cursor < styles.length && depth > 0) {\n if (styles[cursor] === \"{\") depth += 1;\n if (styles[cursor] === \"}\") depth -= 1;\n cursor += 1;\n }\n if (depth !== 0) {\n throw new Error(`${filePath} contains an unclosed \\`@theme inline\\` block.`);\n }\n blocks.push({\n body: styles.slice(start + match[0].length, cursor - 1),\n end: cursor,\n start,\n });\n }\n return blocks;\n}\n\nasync function validateThemeCssTokenContract(root: string): Promise<void> {\n const sourceRoot = path.join(root, \"src\");\n const files = await collectThemeSourceCssFiles(sourceRoot);\n const sources = await Promise.all(\n files.map(async (filePath) => {\n const styles = await readFile(filePath, \"utf8\");\n return { blocks: findThemeInlineBlocks(styles, filePath), filePath, styles };\n }),\n );\n const declarations = new Map<string, string>();\n for (const source of sources) {\n for (const block of source.blocks) {\n for (const match of block.body.matchAll(/(--[a-zA-Z0-9_-]+)\\s*:\\s*([^;]+);/g)) {\n const name = match[1];\n const value = match[2];\n if (name !== undefined && value !== undefined) {\n declarations.set(name, value);\n }\n }\n }\n }\n\n const platformTokenPattern =\n /var\\(\\s*--(?:background|foreground|primary(?:-foreground)?|secondary(?:-foreground)?|accent(?:-foreground)?|muted(?:-foreground)?|radius(?:-(?:card|button|input))?)(?:\\s*[,)])/;\n const platformAliases = new Set<string>();\n let changed = true;\n while (changed) {\n changed = false;\n for (const [name, value] of declarations) {\n const dependsOnPlatformToken = platformTokenPattern.test(value);\n const dependsOnAlias = [...platformAliases].some((alias) =>\n new RegExp(`var\\\\(\\\\s*${escapeRegExp(alias)}(?:\\\\s*[,\\\\)])`).test(value),\n );\n if ((dependsOnPlatformToken || dependsOnAlias) && !platformAliases.has(name)) {\n platformAliases.add(name);\n changed = true;\n }\n }\n }\n\n const issues: string[] = [];\n for (const source of sources) {\n const handwrittenStyles = source.styles.split(\"\");\n for (const block of source.blocks) {\n for (let index = block.start; index < block.end; index += 1) {\n if (handwrittenStyles[index] !== \"\\n\") {\n handwrittenStyles[index] = \" \";\n }\n }\n }\n const searchable = handwrittenStyles.join(\"\");\n for (const alias of platformAliases) {\n const reference = new RegExp(`var\\\\(\\\\s*${escapeRegExp(alias)}(?:\\\\s*[,\\\\)])`, \"g\");\n for (const match of searchable.matchAll(reference)) {\n const line = searchable.slice(0, match.index ?? 0).split(\"\\n\").length;\n issues.push(`${path.relative(root, source.filePath)}:${line} uses ${alias}`);\n }\n }\n }\n\n if (issues.length > 0) {\n throw new Error(\n [\n \"Hand-written theme CSS must not consume Suda-backed Tailwind aliases from `@theme inline`.\",\n ...issues.map((issue) => ` - ${issue}`),\n \"Use an unprefixed platform token such as `var(--primary)` directly, or define and consume a theme-prefixed variable on the theme root. Tailwind utilities such as `bg-primary` remain supported.\",\n ].join(\"\\n\"),\n );\n }\n}\n\nexport async function validateTheme(root: string): Promise<ValidatedTheme> {\n const packageJsonPath = path.join(root, \"package.json\");\n const serverEntryPath = path.join(root, \"dist\", \"index.js\");\n const clientEntryPath = path.join(root, \"dist\", \"runtime.client.js\");\n const stylesheetPath = path.join(root, \"dist\", \"styles.css\");\n\n if (!(await pathExists(packageJsonPath))) {\n throw new Error(`Missing package.json in ${root}`);\n }\n if (!(await pathExists(serverEntryPath))) {\n throw new Error(`Missing ${serverEntryPath}. Run the theme package build first.`);\n }\n\n const module = await loadThemeModule(serverEntryPath);\n validateThemeModule(module);\n await validateThemeTailwindContract(root);\n await validateThemeLocales(root);\n await validateThemePreviewLocales(root, module.manifest.previewLocales);\n\n const result: ValidatedTheme = {\n root,\n module,\n serverEntryPath,\n clientEntryPath: null,\n stylesheetPath: null,\n };\n if (await pathExists(clientEntryPath)) {\n result.clientEntryPath = clientEntryPath;\n }\n if (await pathExists(stylesheetPath)) {\n result.stylesheetPath = stylesheetPath;\n }\n return result;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction collectLocaleKeys(\n value: unknown,\n pathSegments: string[] = [],\n keys: string[] = [],\n): string[] {\n if (typeof value === \"string\") {\n keys.push(pathSegments.join(\".\"));\n return keys;\n }\n\n if (!isRecord(value)) {\n throw new Error(\n `Theme locale value at ${pathSegments.join(\".\") || \"<root>\"} must be a string or object.`,\n );\n }\n\n for (const [key, child] of Object.entries(value)) {\n collectLocaleKeys(child, [...pathSegments, key], keys);\n }\n return keys;\n}\n\nasync function readLocaleJson(filePath: string): Promise<unknown> {\n try {\n return JSON.parse(await readFile(filePath, \"utf8\")) as unknown;\n } catch (error) {\n const reason = error instanceof Error ? error.message : \"invalid JSON\";\n throw new Error(`Invalid theme locale JSON at ${filePath}: ${reason}`);\n }\n}\n\nasync function listLocaleFiles(localesDir: string): Promise<string[]> {\n if (!(await pathExists(localesDir))) {\n return [];\n }\n const entries = await readdir(localesDir, { withFileTypes: true });\n return entries\n .filter(\n (entry) =>\n entry.isFile() && entry.name.endsWith(\".json\") && !entry.name.endsWith(\".content.json\"),\n )\n .map((entry) => entry.name)\n .sort((a, b) => a.localeCompare(b));\n}\n\nasync function listPreviewLocaleFiles(localesDir: string): Promise<string[]> {\n if (!(await pathExists(localesDir))) {\n return [];\n }\n const entries = await readdir(localesDir, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".content.json\"))\n .map((entry) => entry.name)\n .sort((a, b) => a.localeCompare(b));\n}\n\nasync function validateThemeLocales(root: string): Promise<void> {\n const localesDir = path.join(root, \"dist\", \"locales\");\n const files = await listLocaleFiles(localesDir);\n if (!files.includes(\"en.json\")) {\n throw new Error(\"Theme locales must include dist/locales/en.json.\");\n }\n\n const referenceFile = \"en.json\";\n const referenceMessages = await readLocaleJson(path.join(localesDir, referenceFile));\n const reference = {\n file: referenceFile,\n keys: new Set(collectLocaleKeys(referenceMessages).sort()),\n };\n for (const file of files) {\n if (file === referenceFile) {\n continue;\n }\n const filePath = path.join(localesDir, file);\n const messages = await readLocaleJson(filePath);\n const keys = new Set(collectLocaleKeys(messages).sort());\n\n const expected = reference;\n const missing = [...expected.keys].filter((key) => !keys.has(key));\n const extra = [...keys].filter((key) => !expected.keys.has(key));\n if (missing.length > 0 || extra.length > 0) {\n const details = [\n ...missing.map((key) => ` - missing ${key}`),\n ...extra.map((key) => ` - extra ${key}`),\n ].join(\"\\n\");\n throw new Error(\n `Theme locale ${file} does not match ${expected.file} key set:\\n${details}`,\n );\n }\n }\n}\n\nasync function validateThemePreviewLocales(\n root: string,\n previewLocales: string[] | undefined,\n): Promise<void> {\n const localesDir = path.join(root, \"dist\", \"locales\");\n const files = await listPreviewLocaleFiles(localesDir);\n const declared = previewLocales ?? [];\n const expectedFiles = new Set(declared.map((locale) => `${locale}.content.json`));\n const undeclared = files.filter((file) => !expectedFiles.has(file));\n const missing = [...expectedFiles].filter((file) => !files.includes(file));\n if (missing.length > 0 || undeclared.length > 0) {\n const details = [\n ...missing.map((file) => ` - missing locales/${file}`),\n ...undeclared.map((file) => ` - undeclared locales/${file}`),\n ].join(\"\\n\");\n throw new Error(`Theme preview locale files do not match manifest.previewLocales:\\n${details}`);\n }\n if (declared.length === 0) {\n return;\n }\n\n const referenceFile = \"en.content.json\";\n const referenceMessages = await readLocaleJson(path.join(localesDir, referenceFile));\n const referenceKeys = new Set(collectLocaleKeys(referenceMessages).sort());\n for (const file of files) {\n if (file === referenceFile) {\n continue;\n }\n const messages = await readLocaleJson(path.join(localesDir, file));\n const keys = new Set(collectLocaleKeys(messages).sort());\n const missingKeys = [...referenceKeys].filter((key) => !keys.has(key));\n const extraKeys = [...keys].filter((key) => !referenceKeys.has(key));\n if (missingKeys.length > 0 || extraKeys.length > 0) {\n const details = [\n ...missingKeys.map((key) => ` - missing ${key}`),\n ...extraKeys.map((key) => ` - extra ${key}`),\n ].join(\"\\n\");\n throw new Error(\n `Theme preview locale ${file} does not match ${referenceFile} key set:\\n${details}`,\n );\n }\n }\n}\n\nconst VITE_CONFIG_FILES = [\n \"vite.config.ts\",\n \"vite.config.mts\",\n \"vite.config.js\",\n \"vite.config.mjs\",\n] as const;\n\nasync function findViteConfig(root: string): Promise<string> {\n for (const file of VITE_CONFIG_FILES) {\n const candidate = path.join(root, file);\n if (await pathExists(candidate)) {\n return candidate;\n }\n }\n throw new Error(\n `Missing vite.config.* in ${root}. Suda theme projects must use the Vite template; run \\`suda theme init\\` or migrate this theme to Vite.`,\n );\n}\n\nasync function loadThemeVite(root: string): Promise<ViteModule> {\n const themeRequire = createRequire(path.join(root, \"package.json\"));\n let viteEntry: string;\n try {\n viteEntry = themeRequire.resolve(\"vite\");\n } catch {\n throw new Error(\n `Vite is required for Suda theme projects. Install it in ${root}: \\`pnpm add -D vite @vitejs/plugin-react tailwindcss @tailwindcss/postcss postcss\\`.`,\n );\n }\n return (await import(pathToFileURL(viteEntry).href)) as ViteModule;\n}\n\nasync function findServerEntry(root: string): Promise<string> {\n const candidates = [path.join(root, \"src\", \"index.tsx\"), path.join(root, \"src\", \"index.ts\")];\n for (const candidate of candidates) {\n if (await pathExists(candidate)) {\n return candidate;\n }\n }\n throw new Error(`Missing server entry. Add src/index.ts(x) in ${root}.`);\n}\n\nfunction toViteModuleUrl(root: string, absolutePath: string): string {\n const relativePath =\n root.includes(\"\\\\\") || absolutePath.includes(\"\\\\\")\n ? path.win32.relative(root, absolutePath)\n : path.relative(root, absolutePath);\n return `/${relativePath.replaceAll(\"\\\\\", \"/\")}`;\n}\n\nfunction isThemeExternal(id: string): boolean {\n return (\n id === \"react\" ||\n id.startsWith(\"react/\") ||\n id === \"react-dom\" ||\n id.startsWith(\"react-dom/\") ||\n id === \"@puckeditor/core\" ||\n id.startsWith(\"@puckeditor/core/\") ||\n id === \"@sudajs/theme-engine\" ||\n id.startsWith(\"@sudajs/theme-engine/\")\n );\n}\n\nfunction viteAssetFileNames(assetInfo: { names?: string[] | undefined }): string {\n const names = assetInfo.names ?? [];\n const isCss = names.some((name) => name.endsWith(\".css\"));\n if (isCss) {\n return \"styles.css\";\n }\n return \"assets/[name]-[hash][extname]\";\n}\n\nasync function buildViteTheme(root: string): Promise<void> {\n const viteConfig = await findViteConfig(root);\n const vite = await loadThemeVite(root);\n const serverEntry = await findServerEntry(root);\n const stylesEntry = path.join(root, \"src\", \"styles.css\");\n if (!(await pathExists(stylesEntry))) {\n throw new Error(`Missing ${stylesEntry}. Vite Suda themes must define src/styles.css.`);\n }\n\n await rm(path.join(root, \"dist\"), { recursive: true, force: true });\n await rm(path.join(root, \".suda-build\"), { recursive: true, force: true });\n\n await vite.build({\n root,\n configFile: viteConfig,\n configLoader: \"runner\",\n cacheDir: path.join(root, \".suda-build\", \"vite-cache\"),\n publicDir: false,\n build: {\n emptyOutDir: false,\n outDir: path.join(root, \"dist\"),\n sourcemap: false,\n assetsInlineLimit: 0,\n ssr: serverEntry,\n rollupOptions: {\n external: isThemeExternal,\n output: {\n entryFileNames: \"index.js\",\n chunkFileNames: \"chunks/[name]-[hash].js\",\n assetFileNames: viteAssetFileNames,\n },\n },\n },\n });\n\n await copyThemeAssets(root);\n await copyThemeLocales(root);\n\n const stylesheetEntry = path.join(root, \".suda-build\", \"styles-entry.ts\");\n await mkdir(path.dirname(stylesheetEntry), { recursive: true });\n await writeFile(stylesheetEntry, 'import \"../src/styles.css\";\\n', \"utf8\");\n\n await vite.build({\n root,\n configFile: viteConfig,\n configLoader: \"runner\",\n cacheDir: path.join(root, \".suda-build\", \"vite-cache\"),\n publicDir: false,\n build: {\n emptyOutDir: false,\n outDir: path.join(root, \"dist\"),\n sourcemap: false,\n assetsInlineLimit: 0,\n cssCodeSplit: false,\n rollupOptions: {\n input: stylesheetEntry,\n output: {\n entryFileNames: \"chunks/theme-styles.js\",\n chunkFileNames: \"chunks/[name]-[hash].js\",\n assetFileNames: viteAssetFileNames,\n },\n },\n },\n });\n\n await rm(path.join(root, \"dist\", \"chunks\", \"theme-styles.js\"), { force: true });\n}\n\nasync function copyThemeAssets(root: string): Promise<void> {\n const sourceAssets = path.join(root, \"assets\");\n if (!(await pathExists(sourceAssets))) {\n return;\n }\n await copyDirectory(sourceAssets, path.join(root, \"dist\", \"assets\"));\n}\n\nasync function copyThemeLocales(root: string): Promise<void> {\n const sourceLocales = path.join(root, \"src\", \"locales\");\n if (!(await pathExists(sourceLocales))) {\n return;\n }\n await copyDirectory(sourceLocales, path.join(root, \"dist\", \"locales\"));\n}\n\nasync function buildClientRuntime(root: string, minify: boolean): Promise<void> {\n const legacyEntries = [\n path.join(root, \"src\", \"runtime.client.ts\"),\n path.join(root, \"src\", \"runtime.client.tsx\"),\n ];\n if (legacyEntries.some((entry) => existsSync(entry))) {\n throw new Error(\n \"Theme-authored src/runtime.client.ts(x) is no longer supported. Move optional browser setup to src/client.ts as clientHooks; the CLI owns runtime.client.js.\",\n );\n }\n const packageJson = JSON.parse(await readFile(path.join(root, \"package.json\"), \"utf8\")) as {\n version?: unknown;\n };\n const themeVersion = typeof packageJson.version === \"string\" ? packageJson.version : \"0.0.0\";\n const clientHooksPath = path.join(root, \"src\", \"client.ts\");\n const generatedEntry = path.join(root, \".suda-build\", \"runtime.client.ts\");\n const clientHooksImport = (await pathExists(clientHooksPath))\n ? 'import { clientHooks } from \"../src/client.js\";'\n : \"const clientHooks = {};\";\n await mkdir(path.dirname(generatedEntry), { recursive: true });\n await writeFile(\n generatedEntry,\n createClientRuntimeSource(clientHooksImport, true),\n \"utf8\",\n );\n\n await mkdir(path.join(root, \"dist\"), { recursive: true });\n const hostReactShimPlugin = createHostReactShimPlugin();\n const rejectEditorRuntimeDependencyPlugin = createRejectEditorRuntimeDependencyPlugin();\n const hostThemeRuntimeShimPlugin = createHostThemeRuntimeShimPlugin();\n const hostThemeIconsShimPlugin = createHostThemeIconsShimPlugin();\n const themeDependencyResolverPlugin = createThemeDependencyResolverPlugin(root);\n await esbuild({\n bundle: true,\n entryPoints: { \"runtime.client\": generatedEntry },\n external: [\"react\", \"react/*\", \"react-dom\", \"react-dom/*\"],\n format: \"esm\",\n jsx: \"automatic\",\n logOverride: { \"import-is-undefined\": \"silent\" },\n minify,\n outdir: path.join(root, \"dist\"),\n platform: \"browser\",\n define: {\n __SUDA_THEME_VERSION__: JSON.stringify(themeVersion),\n },\n plugins: [\n hostReactShimPlugin,\n rejectEditorRuntimeDependencyPlugin,\n hostThemeRuntimeShimPlugin,\n hostThemeIconsShimPlugin,\n themeDependencyResolverPlugin,\n ],\n sourcemap: false,\n splitting: true,\n chunkNames: \"chunks/[name]-[hash]\",\n target: \"es2022\",\n treeShaking: true,\n });\n}\n\nasync function withPreservedNodeEnv<T>(run: () => Promise<T>): Promise<T> {\n const previous = process.env.NODE_ENV;\n try {\n return await run();\n } finally {\n if (previous === undefined) {\n delete process.env.NODE_ENV;\n } else {\n process.env.NODE_ENV = previous;\n }\n }\n}\n\nexport async function buildTheme(root: string): Promise<ValidatedTheme> {\n return withPreservedNodeEnv(async () => {\n await buildViteTheme(root);\n await buildClientRuntime(root, true);\n return finalizeTheme(root);\n });\n}\n\nexport async function finalizeTheme(root: string): Promise<ValidatedTheme> {\n await findViteConfig(root);\n await finalizeStylesheet(root);\n const validated = await validateTheme(root);\n await writeThemeArtifacts(validated);\n return validateTheme(root);\n}\n\nasync function finalizeStylesheet(root: string): Promise<void> {\n const expectedStylesheet = path.join(root, \"dist\", \"styles.css\");\n if (!(await pathExists(expectedStylesheet))) {\n throw new Error(\n `Vite did not emit ${expectedStylesheet} from src/styles.css. Check ${path.join(root, \"vite.config.ts\")} and Tailwind/PostCSS configuration.`,\n );\n }\n}\n\nasync function copyDirectory(source: string, destination: string): Promise<void> {\n const children = await readdir(source, { withFileTypes: true });\n await mkdir(destination, { recursive: true });\n for (const child of children) {\n const sourcePath = path.join(source, child.name);\n const destinationPath = path.join(destination, child.name);\n if (child.isDirectory()) {\n await copyDirectory(sourcePath, destinationPath);\n continue;\n }\n await copyFile(sourcePath, destinationPath);\n }\n}\n\nfunction findThemeSkillWorkspaceRoot(startDirectory: string): string {\n let candidate = path.resolve(startDirectory);\n\n while (true) {\n if (existsSync(path.join(candidate, \".git\"))) {\n return candidate;\n }\n const parent = path.dirname(candidate);\n if (parent === candidate) {\n return path.resolve(startDirectory);\n }\n candidate = parent;\n }\n}\n\nfunction resolveThemeSkillWorkspaceRoot(root: string | undefined): string {\n return root === undefined ? findThemeSkillWorkspaceRoot(process.cwd()) : path.resolve(root);\n}\n\nasync function readSkillName(skillDirectory: string): Promise<string | null> {\n const skillPath = path.join(skillDirectory, \"SKILL.md\");\n if (!(await pathExists(skillPath))) {\n return null;\n }\n\n const source = await readFile(skillPath, \"utf8\");\n return /^---\\s*\\nname:\\s*([^\\n]+)\\n/m.exec(source)?.[1]?.trim() ?? null;\n}\n\nexport async function addThemeSkill(options: ThemeSkillAddOptions = {}): Promise<ThemeSkillAddResult> {\n const workspaceRoot = resolveThemeSkillWorkspaceRoot(options.root);\n const destination = path.join(workspaceRoot, \".agents\", \"skills\", \"sudacloud-theme\");\n const exists = await pathExists(destination);\n\n if (exists) {\n const installedSkillName = await readSkillName(destination);\n if (installedSkillName !== \"sudacloud-theme\" && options.force !== true) {\n throw new Error(\n `${destination} already exists and is not a Suda theme skill. Use --force to replace it.`,\n );\n }\n if (installedSkillName === \"sudacloud-theme\" && options.force !== true) {\n return { destination, status: \"already-installed\" };\n }\n if (options.dryRun === true) {\n return { destination, status: \"would-replace\" };\n }\n\n await rm(destination, { recursive: true, force: true });\n } else if (options.dryRun === true) {\n return { destination, status: \"would-install\" };\n }\n\n await copyDirectory(themeSkillTemplateRoot, destination);\n await copyDirectory(\n path.join(themeTemplateRoot, \"docs\", \"agent-guides\"),\n path.join(destination, \"references\"),\n );\n return { destination, status: \"installed\" };\n}\n\n/**\n * Runs the AI-metadata check on a built theme. Prints a human-readable report\n * via {@link formatThemeCheckResult} and returns whether errors were found, so\n * callers can decide whether to fail the build.\n */\nconst THEME_CHECK_WHITE_LABEL = {\n visible: true,\n text: \"Powered by <strong>速搭云</strong>\",\n href: \"https://www.sudayun.cn\",\n} as const;\n\nconst THEME_CHECK_ICP = {\n text: \"京ICP备12345678号\",\n href: \"https://beian.miit.gov.cn/\",\n} as const;\n\nconst PREVIEW_CONTACT_FORM: NonNullable<ThemeRenderMetadata[\"contactForm\"]> = {\n enabled: true,\n endpoint: \"/api/contact\",\n honeypotField: \"suda_contact_company\",\n title: \"Contact us\",\n successMessage: \"Thanks, we received your message.\",\n submitLabel: \"Submit\",\n fields: [\n {\n id: \"name\",\n type: \"text\",\n label: \"Name\",\n required: true,\n options: [],\n validation: { maxLength: 120 },\n },\n {\n id: \"email\",\n type: \"text\",\n label: \"Email\",\n required: true,\n options: [],\n validation: { format: \"email\", maxLength: 200 },\n },\n {\n id: \"message\",\n type: \"textarea\",\n label: \"Message\",\n required: true,\n options: [],\n validation: { maxLength: 2000 },\n },\n ],\n};\n\nfunction stripHtmlTags(value: string): string {\n return value.replace(/<[^>]+>/g, \"\").replace(/\\s+/g, \" \").trim();\n}\n\nfunction htmlContainsOrderedText(html: string, parts: readonly string[]): boolean {\n const pattern = parts.map((part) => escapeRegExp(part)).join(\"(?:\\\\s|<[^>]+>)*\");\n return new RegExp(pattern, \"i\").test(html);\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction findAnchorTagByHref(html: string, href: string): string | null {\n const pattern = new RegExp(\n `<a\\\\b[^>]*href=(['\"])${escapeRegExp(href)}\\\\1[^>]*>`,\n \"i\",\n );\n return html.match(pattern)?.[0] ?? null;\n}\n\nfunction runFooterContractCheck(theme: ValidatedTheme, renderer: ThemeRenderer): string[] {\n const pageData = theme.module.starterPages[0]?.data ?? { root: { props: {} }, content: [] };\n const metadataWithFooter: ThemeRenderMetadata = {\n resolveAssetUrl: createPreviewAssetResolver(renderer.resolveAssetPath),\n whiteLabel: THEME_CHECK_WHITE_LABEL,\n icp: THEME_CHECK_ICP,\n };\n const metadataWithoutFooter: ThemeRenderMetadata = {\n resolveAssetUrl: createPreviewAssetResolver(renderer.resolveAssetPath),\n };\n const htmlWithFooter = renderer.renderToString(\n renderer.createElement(renderer.ThemeRender, {\n theme: theme.module,\n pageData,\n layoutData: theme.module.defaultLayout,\n metadata: metadataWithFooter,\n }),\n );\n const htmlWithoutFooter = renderer.renderToString(\n renderer.createElement(renderer.ThemeRender, {\n theme: theme.module,\n pageData,\n layoutData: theme.module.defaultLayout,\n metadata: metadataWithoutFooter,\n }),\n );\n const issues: string[] = [];\n const whiteLabelText = stripHtmlTags(THEME_CHECK_WHITE_LABEL.text);\n const whiteLabelVisible = htmlContainsOrderedText(htmlWithFooter, [\"Powered by\", \"速搭云\"]);\n const whiteLabelVisibleWithoutMetadata = htmlContainsOrderedText(htmlWithoutFooter, [\"Powered by\", \"速搭云\"]);\n if (!whiteLabelVisible && !htmlWithFooter.includes(whiteLabelText)) {\n issues.push(\"Footer must render metadata.whiteLabel.text when whiteLabel.visible is true.\");\n }\n if (whiteLabelVisibleWithoutMetadata || htmlWithoutFooter.includes(whiteLabelText)) {\n issues.push(\"Footer whiteLabel content must come from host metadata, not theme defaults.\");\n }\n if (!htmlWithFooter.includes(THEME_CHECK_ICP.text)) {\n issues.push(\"Footer must render metadata.icp.text when ICP metadata is present.\");\n }\n if (htmlWithoutFooter.includes(THEME_CHECK_ICP.text)) {\n issues.push(\"Footer ICP content must come from host metadata, not theme defaults.\");\n }\n for (const href of [THEME_CHECK_WHITE_LABEL.href, THEME_CHECK_ICP.href]) {\n const anchorTag = findAnchorTagByHref(htmlWithFooter, href);\n if (!anchorTag) {\n issues.push(`Footer must render an anchor tag for ${href}.`);\n continue;\n }\n if (!/\\btarget=(['\"])_blank\\1/i.test(anchorTag)) {\n issues.push(`Footer link ${href} must render with target=\"_blank\".`);\n }\n if (findAnchorTagByHref(htmlWithoutFooter, href)) {\n issues.push(`Footer link ${href} must be driven by host metadata, not rendered unconditionally.`);\n }\n }\n return issues;\n}\n\nexport const __testUtils = {\n activateThemeOutputSchema,\n contactFormOutputSchema,\n createPageDraftOutputSchema,\n createProjectOutputSchema,\n createThemeProjectRequire,\n createVisualAuditPage,\n createRemotePageDraft,\n destructivePageOperationOutputSchema,\n findAnchorTagByHref,\n formatMissingSharpWarning,\n findThemeSkillWorkspaceRoot,\n loadThemeScopedRenderer,\n normalizePlaywrightModule,\n normalizeSharpModule,\n initThemeWithKey,\n performActivateTheme,\n performConfirmedPageOperation,\n performUpdateContactForm,\n performUpdateThemeSettings,\n getRemoteContactForm,\n getRemoteThemeSettings,\n listProjectsOutputSchema,\n renderDevStarterPageHtml,\n renderDevEditorPageHtml,\n readDevThemeLocaleMessages,\n writeVitePreviewEntries,\n resolveDevEditorSlug,\n resolveDevStarterSlug,\n resolveDevVisualAuditComponent,\n getThemeVisualAuditComponentTypes,\n resolveScreenshotOptions,\n resolveVisualCheckOptions,\n slugifyThemeName,\n validateThemeKey,\n validateThemeName,\n validateThemeCssTokenContract,\n validateThemeTailwindContract,\n validateThemeLocales,\n validateThemePreviewLocales,\n resolveThemePreviewLocale,\n withSerializedVitePreviewLocaleLoad,\n toViteModuleUrl,\n themeSettingsOutputSchema,\n updateContactFormOutputSchema,\n updatePageDraftOutputSchema,\n updateRemotePageDraft,\n updateThemeSettingsOutputSchema,\n};\n\nasync function runThemeCheck(theme: ValidatedTheme): Promise<boolean> {\n const result = checkThemeModule(theme.module);\n const footerIssues = result.ok\n ? runFooterContractCheck(theme, await loadThemeScopedRenderer(theme.root))\n : [];\n const previewIssues = await runPreviewContractCheck(theme);\n const ok = result.ok && footerIssues.length === 0 && previewIssues.length === 0;\n const lines = [formatThemeCheckResult(result)];\n if (footerIssues.length === 0 && result.ok) {\n lines.push(\n success(\"Footer contract check passed: whiteLabel and ICP metadata render correctly.\"),\n );\n } else if (footerIssues.length > 0) {\n for (const issue of footerIssues) {\n lines.push(` ${formatError(\"error\")} layoutConfig.footerContract: ${issue}`);\n }\n lines.push(formatError(`Footer contract check: ${footerIssues.length} error(s).`));\n }\n if (previewIssues.length === 0) {\n lines.push(\n success(\"Preview contract check passed: desktop, tablet, and mobile screenshots exist.\"),\n );\n } else {\n for (const issue of previewIssues) {\n lines.push(` ${formatError(\"error\")} assets.preview: ${issue}`);\n }\n lines.push(formatError(`Preview contract check: ${previewIssues.length} error(s).`));\n }\n const text = lines.join(\"\\n\");\n if (ok) {\n console.log(text);\n } else {\n console.error(text);\n }\n return ok;\n}\n\nasync function runPreviewContractCheck(theme: ValidatedTheme): Promise<string[]> {\n const issues: string[] = [];\n for (const relativePath of REQUIRED_PREVIEW_ARTIFACTS) {\n const filePath = path.join(theme.root, \"dist\", relativePath);\n try {\n const info = await stat(filePath);\n if (info.size <= 0) {\n issues.push(`${relativePath} is empty. Run \\`suda theme capture\\` and rebuild.`);\n }\n } catch {\n issues.push(`Missing ${relativePath}. Run \\`suda theme capture\\`, then \\`suda theme build\\`.`);\n }\n }\n return issues;\n}\n\nexport async function watchTheme(root: string, port: number): Promise<void> {\n const handle = await startViteDevPreviewServer(root, port);\n console.log(`previewing Vite theme at ${style.url(handle.url)}`);\n await new Promise(() => undefined);\n}\n\ninterface ViteDevPreviewOptions {\n showDevTools?: boolean;\n}\n\nasync function startViteDevPreviewServer(\n root: string,\n port: number,\n options: ViteDevPreviewOptions = {},\n): Promise<PreviewServerHandle> {\n const viteConfig = await findViteConfig(root);\n const vite = await loadThemeVite(root);\n await writeVitePreviewEntries(root);\n const host = \"127.0.0.1\";\n const server = await vite.createServer({\n root,\n configFile: viteConfig,\n configLoader: \"runner\",\n cacheDir: path.join(root, \".suda-build\", \"node_modules\", \".vite\"),\n appType: \"custom\",\n optimizeDeps: {\n entries: [\".suda-build/preview-client.ts\", \".suda-build/editor-client.ts\"],\n },\n server: { host, port },\n plugins: [createSudaPreviewVitePlugin(root, options)],\n });\n await server.listen(port);\n const url =\n server.resolvedUrls?.local.find((candidate) => candidate.includes(\"127.0.0.1\")) ??\n server.resolvedUrls?.local[0] ??\n `http://${host}:${port}/`;\n return {\n url: url.replace(/\\/$/, \"\"),\n port,\n server,\n close: () => server.close(),\n };\n}\n\nasync function writeVitePreviewEntries(root: string): Promise<void> {\n const clientHooksPath = path.join(root, \"src\", \"client.ts\");\n const clientHooksImport = existsSync(clientHooksPath)\n ? 'import { clientHooks } from \"../src/client.js\";'\n : \"const clientHooks = {};\";\n const buildDir = path.join(root, \".suda-build\");\n await mkdir(buildDir, { recursive: true });\n await writeFile(\n path.join(buildDir, \"runtime.dev.js\"),\n createClientRuntimeSource(clientHooksImport, false, false),\n \"utf8\",\n );\n await writeFile(\n path.join(buildDir, \"preview-client.ts\"),\n [\n 'import { hydrateThemePage, loadThemeRuntime } from \"@sudajs/theme-engine/client\";',\n 'import { installThemePreviewLocale, resolveAssetPath } from \"@sudajs/theme-engine/site-runtime\";',\n 'const payloadElement=document.querySelector(\"#suda-theme-hydration-data\");',\n 'if(!payloadElement){throw new Error(\"Missing Suda theme hydration payload.\")}',\n \"const payload=JSON.parse(payloadElement.textContent ?? '{}');\",\n \"if(payload.previewLocaleMessages){installThemePreviewLocale(payload.previewLocaleMessages)}\",\n 'const runtime=(await loadThemeRuntime(\"/.suda-build/runtime.dev.js\")).default;',\n 'const metadata={contactForm:payload.contactForm,resolveAssetUrl:(value: string | undefined)=>resolveAssetPath(value,{legacyResolve:(key)=>key.startsWith(\"themes/\")?`/api/themes/${key.slice(\"themes/\".length)}`:undefined})};',\n 'await hydrateThemePage({container:document.querySelector(\"[data-theme-hydration-root]\")!,runtime,pageData:payload.pageData,layoutData:payload.layoutData,metadata,onRecoverableError:(error)=>console.error(\"[theme-dev] theme hydration recovered from an error\",error)});',\n \"\",\n ].join(\"\\n\"),\n \"utf8\",\n );\n await writeFile(\n path.join(buildDir, \"editor-client.ts\"),\n [\n 'import \"@puckeditor/core/puck.css\";',\n 'import { composeUnifiedThemeEditorData, createThemeDesignFontStylesheetUrl, createUnifiedThemeEditorConfig, installThemeLocale, installThemePreviewLocale, resolveAssetPath, resolveThemeDesignTokens, ThemeEditor } from \"@sudajs/theme-engine\";',\n 'import { createElement } from \"react\";',\n 'import { createRoot } from \"react-dom/client\";',\n 'const payloadElement=document.querySelector(\"#suda-theme-editor-data\");',\n 'if(!payloadElement){throw new Error(\"Missing Suda theme editor payload.\")}',\n \"const payload=JSON.parse(payloadElement.textContent ?? '{}');\",\n \"if(payload.themeLocaleMessages){installThemeLocale(payload.themeLocaleMessages)}\",\n \"if(payload.previewLocaleMessages){installThemePreviewLocale(payload.previewLocaleMessages)}\",\n 'const runtime=(await import(\"./runtime.dev\")).default;',\n 'const resolveAssetUrl=(value: string | undefined)=>resolveAssetPath(value,{legacyResolve:(key)=>key.startsWith(\"themes/\")?`/api/themes/${key.slice(\"themes/\".length)}`:undefined});',\n 'const config=createUnifiedThemeEditorConfig(runtime.theme,undefined,{labels:{pageContent:\"Page content\",themeSettings:\"Theme settings\"}});',\n 'const data=composeUnifiedThemeEditorData(payload.layoutData,payload.pageData,{layoutConfig:runtime.theme.layoutConfig,pageConfig:runtime.theme.pageConfig});',\n 'function applyDesignFont(nextData){const fieldName=payload.designSystemFieldName||\"designSystem\";const value=nextData?.root?.props?.[fieldName];const tokens=resolveThemeDesignTokens(payload.designSystem,value);const href=createThemeDesignFontStylesheetUrl(tokens);let link=document.querySelector(\"#suda-theme-fonts\");if(!href){link?.remove();return}if(!link){link=document.createElement(\"link\");link.id=\"suda-theme-fonts\";link.rel=\"stylesheet\";document.head.append(link)}link.href=href}',\n 'applyDesignFont(data);',\n 'const editorContext={assets:[],resolveAssetUrl,currentPageId:payload.currentPageId,backHref:payload.backHref,editorPages:payload.editorPages,editorLocale:payload.locale,chromeMessages:{backToPages:\"Back to preview\",pageMenuLabel:\"Switch starter page\",themeSettings:\"Theme settings\",outline:\"Outline\",blocks:\"Blocks\",switchViewport:\"Switch viewport\"}};',\n 'const metadata={contactForm:payload.contactForm,isEditor:true,resolveAssetUrl};',\n 'createRoot(document.querySelector(\"#suda-theme-dev-editor-root\")!).render(createElement(ThemeEditor,{config,data,editorContext,metadata,iframe:false,height:\"100%\",previewStylesheetUrls:[\"/src/styles.css\"],publishActionVisible:false,onChange:applyDesignFont}));',\n \"\",\n ].join(\"\\n\"),\n \"utf8\",\n );\n}\n\nfunction createClientRuntimeSource(\n clientHooksImport: string,\n useClientDirective: boolean,\n typescript = true,\n): string {\n if (!typescript) {\n return [\n ...(useClientDirective ? ['\"use client\";'] : []),\n 'import * as themeConfig from \"../src/config.js\";',\n clientHooksImport,\n \"const theme = {\",\n \" pageConfig: themeConfig.pageConfig,\",\n \" layoutConfig: themeConfig.layoutConfig,\",\n \"};\",\n 'if (\"rendering\" in themeConfig && themeConfig.rendering !== undefined) {',\n \" theme.rendering = themeConfig.rendering;\",\n \"}\",\n \"const hooks = clientHooks;\",\n \"const runtime = { theme };\",\n \"if (hooks.initialize !== undefined) {\",\n \" runtime.initialize = hooks.initialize;\",\n \"}\",\n \"export default runtime;\",\n \"\",\n ].join(\"\\n\");\n }\n\n return [\n ...(useClientDirective ? ['\"use client\";'] : []),\n 'import type { ThemeClientHooks, ThemeClientRuntime, ThemeRenderModule } from \"@sudajs/theme-engine/runtime\";',\n 'import * as themeConfig from \"../src/config.js\";',\n clientHooksImport,\n \"const theme: ThemeRenderModule = {\",\n \" pageConfig: themeConfig.pageConfig,\",\n \" layoutConfig: themeConfig.layoutConfig,\",\n \"};\",\n 'if (\"rendering\" in themeConfig && themeConfig.rendering !== undefined) {',\n \" theme.rendering = themeConfig.rendering;\",\n \"}\",\n \"const hooks: ThemeClientHooks = clientHooks;\",\n \"const runtime: ThemeClientRuntime = { theme };\",\n \"if (hooks.initialize !== undefined) {\",\n \" runtime.initialize = hooks.initialize;\",\n \"}\",\n \"export default runtime;\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction createSudaPreviewVitePlugin(root: string, options: ViteDevPreviewOptions = {}): {\n name: string;\n resolveId: (source: string, importer?: string) => string | undefined;\n configureServer: (server: ViteDevServer) => void;\n} {\n return {\n name: \"suda-theme-preview\",\n resolveId(source, importer) {\n if (importer === undefined || !source.endsWith(\".js\") || !source.startsWith(\".\")) {\n return undefined;\n }\n const requestedPath = path.resolve(path.dirname(importer), source);\n if (!requestedPath.startsWith(`${root}${path.sep}`)) {\n return undefined;\n }\n for (const extension of [\".ts\", \".tsx\"]) {\n const candidate = `${requestedPath.slice(0, -3)}${extension}`;\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n return undefined;\n },\n configureServer(server) {\n server.middlewares.use((request, response, next) => {\n void (async () => {\n const url = new URL(request.url ?? \"/\", \"http://localhost\");\n if (url.pathname.startsWith(\"/src/\") && url.pathname.endsWith(\".js\")) {\n const sourcePath = path.join(root, url.pathname.slice(1));\n for (const extension of [\".ts\", \".tsx\"]) {\n const candidate = `${sourcePath.slice(0, -3)}${extension}`;\n if (existsSync(candidate)) {\n request.url = `${url.pathname.slice(0, -3)}${extension}${url.search}`;\n break;\n }\n }\n }\n const assetPrefixMatch = url.pathname.match(/^\\/api\\/themes\\/[^/]+\\/[^/]+\\/assets\\/(.+)$/);\n if (assetPrefixMatch?.[1]) {\n request.url = `/assets/${assetPrefixMatch[1]}${url.search}`;\n next();\n return;\n }\n const visualAuditComponent = resolveDevVisualAuditComponent(url.pathname);\n const editorSlug = resolveDevEditorSlug(url.pathname);\n const previewSlug = resolveDevStarterSlug(url.pathname);\n if (\n visualAuditComponent === undefined &&\n editorSlug === undefined &&\n previewSlug === undefined\n ) {\n next();\n return;\n }\n const isEditor = editorSlug !== undefined;\n const slug = isEditor ? editorSlug : previewSlug;\n try {\n const acceptLanguageHeader = request.headers[\"accept-language\"];\n const acceptLanguage = Array.isArray(acceptLanguageHeader)\n ? acceptLanguageHeader.join(\",\")\n : acceptLanguageHeader;\n const explicitLang = url.searchParams.get(\"lang\");\n const localized = await loadLocalizedViteDevTheme(\n root,\n server,\n explicitLang,\n acceptLanguage,\n );\n const renderer = await loadThemeScopedRenderer(root);\n const starterSlug = slug ?? pickStarterSlug(localized.theme);\n const starter = visualAuditComponent\n ? createVisualAuditPage(localized.theme, visualAuditComponent)\n : starterSlug\n ? findStarterPage(localized.theme, starterSlug)\n : null;\n if (!starter) {\n response.writeHead(404, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(\n starterSlug\n ? `Unknown starter page: ${starterSlug}`\n : visualAuditComponent\n ? `Unknown theme page component: ${visualAuditComponent}`\n : \"No starter pages declared by this theme.\",\n );\n return;\n }\n const htmlSource = isEditor\n ? renderDevEditorPageHtml(\n localized.theme,\n starter,\n renderer,\n localized.locale,\n url.searchParams,\n localized.previewLocaleMessages,\n localized.themeLocaleMessages,\n )\n : renderDevStarterPageHtml(\n localized.theme,\n starter,\n renderer,\n localized.locale,\n canonicalLocale(explicitLang) !== null,\n localized.previewLocaleMessages,\n url.searchParams,\n { showDevTools: options.showDevTools !== false },\n );\n const html = await server.transformIndexHtml(url.pathname, htmlSource);\n response.writeHead(200, { \"Content-Type\": \"text/html; charset=utf-8\" });\n response.end(html);\n } catch (error) {\n response.writeHead(500, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(error instanceof Error ? error.stack : String(error));\n }\n })();\n });\n },\n };\n}\n\nasync function loadLocalizedViteDevTheme(\n root: string,\n server: ViteDevServer,\n explicitLang: string | null,\n acceptLanguage: string | undefined,\n): Promise<{\n theme: ValidatedTheme;\n locale: string;\n themeLocaleMessages: ThemeLocaleMessages;\n previewLocaleMessages?: ThemePreviewLocaleMessages;\n}> {\n return withSerializedVitePreviewLocaleLoad(server, async () => {\n const baseTheme = await loadViteDevTheme(root, server);\n const localeParams: Parameters<typeof resolveThemePreviewLocale>[0] = {\n previewLocales: baseTheme.module.manifest.previewLocales,\n explicitLang,\n };\n if (acceptLanguage !== undefined) {\n localeParams.acceptLanguage = acceptLanguage;\n }\n const locale = resolveThemePreviewLocale(localeParams);\n const themeLocaleMessages = await readDevThemeLocaleMessages(root, locale);\n if (!baseTheme.module.manifest.previewLocales) {\n return { theme: baseTheme, locale, themeLocaleMessages };\n }\n const previewLocaleMessages = await readDevPreviewLocaleMessages(root, locale);\n server.moduleGraph.invalidateAll();\n const theme = await runWithThemePreviewLocale(previewLocaleMessages, () =>\n loadViteDevTheme(root, server),\n );\n return { theme, locale, themeLocaleMessages, previewLocaleMessages };\n });\n}\n\nconst vitePreviewLocaleLoadTails = new WeakMap<object, Promise<void>>();\n\nasync function withSerializedVitePreviewLocaleLoad<Result>(\n server: object,\n load: () => Promise<Result>,\n): Promise<Result> {\n const previous = vitePreviewLocaleLoadTails.get(server) ?? Promise.resolve();\n let release!: () => void;\n const gate = new Promise<void>((resolve) => {\n release = resolve;\n });\n const tail = previous.then(() => gate);\n vitePreviewLocaleLoadTails.set(server, tail);\n await previous;\n try {\n return await load();\n } finally {\n release();\n if (vitePreviewLocaleLoadTails.get(server) === tail) {\n vitePreviewLocaleLoadTails.delete(server);\n }\n }\n}\n\nasync function loadViteDevTheme(root: string, server: ViteDevServer): Promise<ValidatedTheme> {\n const serverEntryPath = await findServerEntry(root);\n const imported = await server.ssrLoadModule(toViteModuleUrl(root, serverEntryPath));\n if (!imported.default) {\n throw new Error(`${path.relative(root, serverEntryPath)} must export a default ThemeModule.`);\n }\n validateThemeModule(imported.default);\n return {\n root,\n module: imported.default,\n serverEntryPath,\n clientEntryPath: null,\n stylesheetPath: path.join(root, \"src\", \"styles.css\"),\n };\n}\n\ninterface PreviewServerHandle {\n url: string;\n port: number;\n server: ViteDevServer;\n close: () => Promise<void>;\n}\n\nconst PREVIEW_PUBLIC_BASE_PATH = \"/api/themes\";\n\nfunction pickStarterSlug(theme: ValidatedTheme): string | null {\n const pages = theme.module.starterPages;\n if (pages.length === 0) {\n return null;\n }\n return (pages.find((page) => page.isHome) ?? pages[0])?.slug ?? null;\n}\n\nfunction findStarterPage(theme: ValidatedTheme, slug: string): ThemeStarterPage | null {\n return theme.module.starterPages.find((page) => page.slug === slug) ?? null;\n}\n\nconst DEV_EDITOR_PATH = \"/__suda/editor\";\nconst DEV_VISUAL_AUDIT_PATH = \"/__suda/visual-audit\";\nfunction resolveDevVisualAuditComponent(pathname: string): string | undefined {\n if (!pathname.startsWith(`${DEV_VISUAL_AUDIT_PATH}/`)) {\n return undefined;\n }\n const encodedComponent = pathname.slice(DEV_VISUAL_AUDIT_PATH.length + 1);\n if (!encodedComponent || encodedComponent.includes(\"/\")) {\n return undefined;\n }\n try {\n return decodeURIComponent(encodedComponent);\n } catch {\n return undefined;\n }\n}\n\nfunction getThemeVisualAuditComponentTypes(theme: Pick<ValidatedTheme, \"module\">): string[] {\n return Object.keys(theme.module.pageConfig.components);\n}\n\nfunction createVisualAuditPage(\n theme: ValidatedTheme,\n type: string,\n): ThemeStarterPage | null {\n const themeComponent = theme.module.pageConfig.components[type] as\n | {\n defaultProps?: Record<string, unknown>;\n }\n | undefined;\n if (!themeComponent) {\n return null;\n }\n const props = {\n ...(themeComponent.defaultProps ?? {}),\n id: `suda-visual-audit-${safeObjectKeyPart(type)}`,\n };\n return {\n slug: `visual-audit-${safeObjectKeyPart(type).toLowerCase()}`,\n title: `Visual audit: ${type}`,\n data: {\n root: { props: {} },\n content: [{ type, props }],\n },\n };\n}\n\nfunction resolveDevEditorSlug(pathname: string): string | null | undefined {\n if (pathname === DEV_EDITOR_PATH || pathname === `${DEV_EDITOR_PATH}/`) {\n return null;\n }\n if (!pathname.startsWith(`${DEV_EDITOR_PATH}/`)) {\n return undefined;\n }\n const normalized = pathname.slice(DEV_EDITOR_PATH.length + 1).replace(/\\/+$/, \"\");\n if (!normalized || normalized.includes(\"/\")) {\n return undefined;\n }\n return decodeURIComponent(normalized);\n}\n\nfunction resolveDevStarterSlug(pathname: string): string | null | undefined {\n if (pathname === \"/\") {\n return null;\n }\n if (pathname.startsWith(\"/@\")) {\n return undefined;\n }\n const normalized = pathname.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n if (!normalized || normalized.includes(\"/\")) {\n return undefined;\n }\n return decodeURIComponent(normalized);\n}\n\nfunction canonicalLocale(value: string | null | undefined): string | null {\n const candidate = value?.trim();\n if (!candidate || candidate === \"*\") {\n return null;\n }\n try {\n return Intl.getCanonicalLocales(candidate)[0] ?? null;\n } catch {\n return null;\n }\n}\n\nfunction acceptLanguageLocales(value: string | undefined): string[] {\n if (!value) {\n return [];\n }\n return value\n .split(\",\")\n .map((part, index) => {\n const [rawLocale, ...parameters] = part.trim().split(\";\");\n const locale = canonicalLocale(rawLocale);\n const qualityParameter = parameters.find((parameter) => parameter.trim().startsWith(\"q=\"));\n const parsedQuality = qualityParameter\n ? Number.parseFloat(qualityParameter.trim().slice(2))\n : 1;\n const quality = Number.isFinite(parsedQuality) ? parsedQuality : 0;\n return { locale, quality, index };\n })\n .filter((entry): entry is { locale: string; quality: number; index: number } =>\n Boolean(entry.locale) && entry.quality > 0,\n )\n .sort((left, right) => right.quality - left.quality || left.index - right.index)\n .map((entry) => entry.locale);\n}\n\nfunction localeLookupCandidates(locale: string): string[] {\n const candidates: string[] = [];\n let current = locale;\n while (current) {\n candidates.push(current);\n const separator = current.lastIndexOf(\"-\");\n if (separator < 0) {\n break;\n }\n current = current.slice(0, separator);\n }\n return candidates;\n}\n\nfunction resolveThemePreviewLocale(params: {\n previewLocales: string[] | undefined;\n explicitLang?: string | null;\n acceptLanguage?: string;\n}): string {\n const supported = params.previewLocales ?? [\"en\"];\n const supportedByNormalized = new Map(\n supported.map((locale) => [locale.toLowerCase(), locale]),\n );\n const explicitLocale = canonicalLocale(params.explicitLang);\n const requestedLocales = explicitLocale\n ? [explicitLocale]\n : acceptLanguageLocales(params.acceptLanguage);\n for (const requested of requestedLocales) {\n for (const candidate of localeLookupCandidates(requested)) {\n const supportedLocale = supportedByNormalized.get(candidate.toLowerCase());\n if (supportedLocale) {\n return supportedLocale;\n }\n }\n if (explicitLocale) {\n break;\n }\n }\n return supportedByNormalized.get(\"en\") ?? \"en\";\n}\n\nasync function readDevPreviewLocaleMessages(\n root: string,\n locale: string,\n): Promise<ThemePreviewLocaleMessages> {\n const filePath = path.join(root, \"src\", \"locales\", `${locale}.content.json`);\n const messages = await readLocaleJson(filePath);\n if (!isRecord(messages)) {\n throw new Error(`Theme preview locale ${locale} must be a JSON object.`);\n }\n return messages;\n}\n\nasync function readDevThemeLocaleMessages(\n root: string,\n locale: string,\n): Promise<ThemeLocaleMessages> {\n const localesDir = path.join(root, \"src\", \"locales\");\n const localizedPath = path.join(localesDir, `${locale}.json`);\n const filePath = (await pathExists(localizedPath))\n ? localizedPath\n : path.join(localesDir, \"en.json\");\n const messages = await readLocaleJson(filePath);\n if (!isRecord(messages)) {\n throw new Error(`Theme locale ${locale} must be a JSON object.`);\n }\n return messages;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\n/**\n * Mirrors apps/site `resolveAssetUrl`. Themes reference asset values as\n * either absolute URLs, raw `themes/<key>/<version>/<rel>` paths, or other\n * relative strings. In dev we have no CDN, so theme-bundled paths go through\n * the local proxy and everything else falls back to itself.\n */\nfunction createPreviewAssetResolver(\n resolveAssetPath: (\n value: string | undefined,\n options?: ResolveAssetPathOptions,\n ) => string | undefined,\n): (value: string | undefined) => string | undefined {\n return (value) => {\n return resolveAssetPath(value, {\n legacyResolve: (key) => {\n if (key.startsWith(\"themes/\")) {\n return `${PREVIEW_PUBLIC_BASE_PATH}/${key.slice(\"themes/\".length)}`;\n }\n return undefined;\n },\n });\n };\n}\n\n/**\n * Theme-project-scoped renderer bundle. We deliberately resolve `react`,\n * `react-dom/server` and `@sudajs/theme-engine/server` through the theme\n * project's own `require` graph instead of the CLI's, because the theme's\n * local `dist/index.js` was already loaded against that copy of React. Importing\n * a different React instance from the CLI side would yield two React\n * dispatchers; client components inside the theme would call hooks against\n * the CLI's React (whose dispatcher is `null` outside a render), producing\n * `Cannot read properties of null (reading 'useState')`.\n */\ninterface ThemeRenderer {\n ThemeRender: typeof ThemeRenderFn;\n extractLayoutChrome: typeof extractLayoutChromeFn;\n resolveAssetPath: typeof resolveAssetPathFn;\n createElement: typeof createElementFn;\n renderToString: typeof renderToStringFn;\n}\n\nasync function loadThemeScopedRenderer(themeRoot: string): Promise<ThemeRenderer> {\n // `require.resolve` from the theme's package.json forces Node to walk the\n // theme project's node_modules first. In the typical pnpm dev layout that\n // hoists a single React copy into the workspace, but in a multi-repo dev\n // setup (CLI repo + standalone theme repo) each repo has its own React,\n // so resolving from the theme side picks the same React instance that the\n // theme bundle's local `dist/index.js` was loaded against.\n const themeRequire = createRequire(path.join(themeRoot, \"package.json\"));\n const reactPath = themeRequire.resolve(\"react\");\n const reactDomServerPath = themeRequire.resolve(\"react-dom/server\");\n const themeEngineServerPath = themeRequire.resolve(\"@sudajs/theme-engine/server\");\n\n const [reactModule, reactDomServerModule, themeEngineServerModule] = (await Promise.all([\n import(pathToFileURL(reactPath).href),\n import(pathToFileURL(reactDomServerPath).href),\n import(pathToFileURL(themeEngineServerPath).href),\n ])) as [\n { createElement: typeof createElementFn },\n { renderToString: typeof renderToStringFn },\n {\n ThemeRender: typeof ThemeRenderFn;\n extractLayoutChrome: typeof extractLayoutChromeFn;\n resolveAssetPath: typeof resolveAssetPathFn;\n },\n ];\n\n return {\n ThemeRender: themeEngineServerModule.ThemeRender,\n extractLayoutChrome: themeEngineServerModule.extractLayoutChrome,\n resolveAssetPath: themeEngineServerModule.resolveAssetPath,\n createElement: reactModule.createElement,\n renderToString: reactDomServerModule.renderToString,\n };\n}\n\nfunction renderDevStarterPageHtml(\n theme: ValidatedTheme,\n page: ThemeStarterPage,\n renderer: ThemeRenderer,\n locale = \"en\",\n preserveLang = false,\n previewLocaleMessages?: ThemePreviewLocaleMessages,\n searchParams = new URLSearchParams(),\n options: ViteDevPreviewOptions = {},\n): string {\n const layoutData = createDevPreviewLayout(theme, searchParams);\n const designTokens = resolveDevDesignTokens(theme, layoutData);\n const fontStylesheetUrl = createThemeDesignFontStylesheetUrl(designTokens);\n const chrome = renderer.extractLayoutChrome(layoutData);\n const metadata: ThemeRenderMetadata = {\n resolveAssetUrl: createPreviewAssetResolver(renderer.resolveAssetPath),\n contactForm: PREVIEW_CONTACT_FORM,\n };\n const body = renderer.renderToString(\n renderer.createElement(renderer.ThemeRender, {\n theme: theme.module,\n pageData: page.data,\n layoutData,\n metadata,\n }),\n );\n const cssVarStyle = Object.entries(chrome.cssVariables)\n .map(([key, value]) => `${key}: ${value};`)\n .join(\" \");\n const customHead = chrome.customHeadCode ?? \"\";\n const customBody = chrome.customBodyCode ?? \"\";\n const showDevTools = options.showDevTools !== false;\n const designPalette = showDevTools\n ? renderDevDesignPalette(\n theme.module.manifest.designSystem,\n createDevEditorHref(page.slug, searchParams),\n )\n : null;\n const hydrationPayload = serializeInlineScriptValue({\n pageData: page.data,\n layoutData,\n contactForm: PREVIEW_CONTACT_FORM,\n previewLocaleMessages,\n });\n const hydrationScript = [\n `<script id=\"suda-theme-hydration-data\" type=\"application/json\">${hydrationPayload}</script>`,\n '<script type=\"module\">void import(\"/.suda-build/preview-client.ts\").catch((error)=>console.error(\"[theme-dev] theme client failed to load\",error))</script>',\n ].join(\"\");\n return [\n \"<!doctype html>\",\n `<html lang=\"${escapeHtml(locale)}\">`,\n \"<head>\",\n '<meta charset=\"utf-8\" />',\n '<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />',\n `<title>${escapeHtml(`${theme.module.manifest.name} — ${page.title}`)}</title>`,\n '<link rel=\"stylesheet\" href=\"/src/styles.css\" />',\n ...(fontStylesheetUrl\n ? [`<link id=\"suda-theme-fonts\" rel=\"stylesheet\" href=\"${escapeHtml(fontStylesheetUrl)}\" />`]\n : []),\n customHead,\n designPalette?.style ?? \"\",\n \"</head>\",\n `<body${cssVarStyle ? ` style=\"${cssVarStyle}\"` : \"\"}>`,\n `<div data-theme-hydration-root=\"\" style=\"display:contents\">${body}</div>`,\n designPalette?.html ?? \"\",\n customBody,\n hydrationScript,\n ...(preserveLang\n ? [\n '<script>for(const a of document.querySelectorAll(\"a[href]\")){try{const u=new URL(a.href,location.href);if(u.origin===location.origin){u.searchParams.set(\"lang\",new URL(location.href).searchParams.get(\"lang\"));a.href=u.pathname+u.search+u.hash}}catch{}}</script>',\n ]\n : []),\n \"</body>\",\n \"</html>\",\n ].join(\"\");\n}\n\nfunction copyDevPreviewSearchParams(searchParams: URLSearchParams): URLSearchParams {\n const copied = new URLSearchParams();\n for (const key of [\"lang\", \"designPreset\"]) {\n const value = searchParams.get(key);\n if (value) {\n copied.set(key, value);\n }\n }\n return copied;\n}\n\nfunction createDevEditorHref(slug: string, searchParams: URLSearchParams): string {\n const query = copyDevPreviewSearchParams(searchParams).toString();\n return `${DEV_EDITOR_PATH}/${encodeURIComponent(slug)}${query ? `?${query}` : \"\"}`;\n}\n\nfunction createDevPreviewHref(page: ThemeStarterPage, searchParams: URLSearchParams): string {\n const pathname = page.isHome ? \"/\" : `/${encodeURIComponent(page.slug)}`;\n const query = copyDevPreviewSearchParams(searchParams).toString();\n return `${pathname}${query ? `?${query}` : \"\"}`;\n}\n\nfunction createDevPreviewLayout(\n theme: ValidatedTheme,\n searchParams: URLSearchParams,\n): ThemeModule[\"defaultLayout\"] {\n const requestedPresetId = searchParams.get(\"designPreset\");\n const requestedPreset = requestedPresetId\n ? theme.module.manifest.designSystem.presets.find(\n (preset) => preset.id === requestedPresetId,\n )\n : undefined;\n if (!requestedPreset) {\n return theme.module.defaultLayout;\n }\n\n const designFieldName = findThemeDesignSystemFieldName(theme.module.layoutConfig.root?.fields);\n if (!designFieldName) {\n return theme.module.defaultLayout;\n }\n\n const layoutData = structuredClone(theme.module.defaultLayout);\n layoutData.root = {\n ...(layoutData.root ?? {}),\n props: {\n ...(layoutData.root?.props ?? {}),\n [designFieldName]: { presetId: requestedPreset.id },\n },\n };\n return layoutData;\n}\n\nfunction resolveDevDesignTokens(\n theme: ValidatedTheme,\n layoutData: ThemeModule[\"defaultLayout\"],\n) {\n const designFieldName = findThemeDesignSystemFieldName(theme.module.layoutConfig.root?.fields);\n const rootProps = layoutData.root?.props as Record<string, unknown> | undefined;\n const designValue = designFieldName\n ? (rootProps?.[designFieldName] as { presetId: string } | undefined)\n : undefined;\n return resolveThemeDesignTokens(theme.module.manifest.designSystem, designValue);\n}\n\nfunction renderDevEditorPageHtml(\n theme: ValidatedTheme,\n page: ThemeStarterPage,\n renderer: ThemeRenderer,\n locale = \"en\",\n searchParams = new URLSearchParams(),\n previewLocaleMessages?: ThemePreviewLocaleMessages,\n themeLocaleMessages?: ThemeLocaleMessages,\n): string {\n const layoutData = createDevPreviewLayout(theme, searchParams);\n const designTokens = resolveDevDesignTokens(theme, layoutData);\n const fontStylesheetUrl = createThemeDesignFontStylesheetUrl(designTokens);\n const chrome = renderer.extractLayoutChrome(layoutData);\n const cssVariables = { ...chrome.cssVariables };\n const cssVarStyle = Object.entries(cssVariables)\n .map(([key, value]) => `${key}: ${value};`)\n .join(\" \");\n const editorPages = theme.module.starterPages.map((starterPage) => ({\n id: starterPage.slug,\n handle: starterPage.slug,\n label: starterPage.title,\n group: starterPage.isHome ? \"home\" : \"static\",\n editorHref: createDevEditorHref(starterPage.slug, searchParams),\n }));\n const payload = serializeInlineScriptValue({\n pageData: page.data,\n layoutData,\n contactForm: PREVIEW_CONTACT_FORM,\n previewLocaleMessages,\n designSystem: theme.module.manifest.designSystem,\n designSystemFieldName:\n findThemeDesignSystemFieldName(theme.module.layoutConfig.root?.fields) ?? \"designSystem\",\n themeLocaleMessages,\n locale,\n currentPageId: page.slug,\n backHref: createDevPreviewHref(page, searchParams),\n editorPages,\n });\n\n return [\n \"<!doctype html>\",\n `<html lang=\"${escapeHtml(locale)}\">`,\n \"<head>\",\n '<meta charset=\"utf-8\" />',\n '<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />',\n `<title>${escapeHtml(`Edit ${theme.module.manifest.name} — ${page.title}`)}</title>`,\n '<link rel=\"stylesheet\" href=\"/src/styles.css\" />',\n ...(fontStylesheetUrl\n ? [`<link id=\"suda-theme-fonts\" rel=\"stylesheet\" href=\"${escapeHtml(fontStylesheetUrl)}\" />`]\n : []),\n '<style>html,body,#suda-theme-dev-editor-root{height:100%;margin:0}body{overflow:hidden}</style>',\n \"</head>\",\n `<body${cssVarStyle ? ` style=\"${cssVarStyle}\"` : \"\"}>`,\n '<div id=\"suda-theme-dev-editor-root\"></div>',\n `<script id=\"suda-theme-editor-data\" type=\"application/json\">${payload}</script>`,\n '<script type=\"module\">void import(\"/.suda-build/editor-client.ts\").catch((error)=>console.error(\"[theme-dev] theme editor failed to load\",error))</script>',\n \"</body>\",\n \"</html>\",\n ].join(\"\");\n}\n\nfunction serializeInlineScriptValue(value: unknown): string {\n return JSON.stringify(value)\n .replaceAll(\"<\", \"\\\\u003c\")\n .replaceAll(\"\\u2028\", \"\\\\u2028\")\n .replaceAll(\"\\u2029\", \"\\\\u2029\");\n}\n\nfunction renderDevDesignPalette(\n designSystem: ThemeModule[\"manifest\"][\"designSystem\"],\n editorHref: string,\n): {\n style: string;\n html: string;\n} {\n const primaryColors = new Set(\n designSystem.presets.map((preset) => preset.tokens.colors.primary),\n );\n const hasPresetSwitcher = primaryColors.size >= 2;\n const presets = designSystem.presets.map((preset) => ({\n id: preset.id,\n variables: createThemeDesignCssVariables(preset.tokens),\n fontStylesheetUrl: createThemeDesignFontStylesheetUrl(preset.tokens),\n }));\n const selectedIcon = renderToStaticMarkup(\n createElement(CircleCheck, {\n className: \"suda-dev-preset-selected-icon\",\n width: 32,\n height: 32,\n \"aria-hidden\": true,\n focusable: false,\n }),\n );\n const editIcon = renderToStaticMarkup(\n createElement(Pencil, {\n width: 20,\n height: 20,\n \"aria-hidden\": true,\n focusable: false,\n }),\n );\n const buttons = hasPresetSwitcher\n ? designSystem.presets\n .map(\n (preset) =>\n `<button type=\"button\" data-suda-dev-preset=\"${escapeHtml(preset.id)}\" title=\"${escapeHtml(\n preset.description ? `${preset.label} — ${preset.description}` : preset.label,\n )}\" aria-label=\"${escapeHtml(preset.label)}\"><span style=\"background:${escapeHtml(\n preset.tokens.colors.primary,\n )}\"></span>${selectedIcon}</button>`,\n )\n .join(\"\")\n : \"\";\n const config = serializeInlineScriptValue({\n defaultPresetId: designSystem.defaultPresetId,\n presets,\n });\n\n return {\n style:\n '<style data-suda-dev-palette-style>\\n' +\n '#suda-dev-palette{all:initial;position:fixed;z-index:2147483000;top:50%;right:16px;width:64px;max-height:calc(100svh - 32px);padding:8px 9px;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;background:#fff;border:1px solid #d1d5db;border-radius:999px;box-shadow:0 8px 24px rgb(15 23 42 / 12%);transform:translateY(-50%);color-scheme:light;scrollbar-width:none;-ms-overflow-style:none}\\n' +\n '#suda-dev-palette::-webkit-scrollbar{display:none}\\n' +\n '#suda-dev-palette button{all:initial;position:relative;display:grid;width:44px;height:44px;box-sizing:border-box;cursor:pointer;border-radius:999px;place-items:center}\\n' +\n '#suda-dev-palette button span{display:block;width:32px;height:32px;border-radius:999px;transition:transform 120ms ease}\\n' +\n '#suda-dev-palette button:hover span{transform:scale(1.08)}\\n' +\n '#suda-dev-palette button[aria-pressed=\"true\"] span{visibility:hidden}\\n' +\n '#suda-dev-palette .suda-dev-preset-selected-icon{position:absolute;display:block;width:32px;height:32px;color:var(--suda-dev-preset-primary);visibility:hidden;opacity:0;transform:scale(.85);transition:opacity 120ms ease,transform 120ms ease}\\n' +\n '#suda-dev-palette button[aria-pressed=\"true\"] .suda-dev-preset-selected-icon{visibility:visible;opacity:1;transform:scale(1)}\\n' +\n '#suda-dev-palette button:focus-visible{outline:2px solid #94a3b8;outline-offset:2px}\\n' +\n '#suda-dev-palette .suda-dev-edit-divider{display:block;width:28px;height:1px;margin:4px auto;background:#e2e8f0}\\n' +\n '#suda-dev-palette .suda-dev-edit-link{all:initial;display:grid;width:44px;height:44px;box-sizing:border-box;color:#334155;cursor:pointer;border-radius:999px;place-items:center;transition:background-color 120ms ease,color 120ms ease}\\n' +\n '#suda-dev-palette .suda-dev-edit-link:hover{color:#0f172a;background:#f1f5f9}\\n' +\n '#suda-dev-palette .suda-dev-edit-link:focus-visible{outline:2px solid #94a3b8;outline-offset:2px}\\n' +\n '@media(max-width:640px){#suda-dev-palette{right:8px;max-height:calc(100svh - 16px)}}\\n' +\n '@media(prefers-reduced-motion:reduce){#suda-dev-palette button span,#suda-dev-palette .suda-dev-preset-selected-icon,#suda-dev-palette .suda-dev-edit-link{transition:none}}\\n' +\n '</style>',\n html:\n `<aside id=\"suda-dev-palette\" aria-label=\"Theme development tools\">${buttons}${hasPresetSwitcher ? '<span class=\"suda-dev-edit-divider\" aria-hidden=\"true\"></span>' : \"\"}<a class=\"suda-dev-edit-link\" data-suda-dev-editor-link=\"\" href=\"${escapeHtml(editorHref)}\" title=\"Edit starter page\" aria-label=\"Edit starter page\">${editIcon}</a></aside>` +\n (hasPresetSwitcher\n ? `<script data-suda-dev-palette-script>(function(){const config=${config};const palette=document.getElementById(\"suda-dev-palette\");if(!palette)return;const byId=new Map(config.presets.map((preset)=>[preset.id,preset]));const params=new URL(location.href).searchParams;const requested=params.get(\"designPreset\");const selected=byId.has(requested)?requested:config.defaultPresetId;function apply(id,updateUrl){const preset=byId.get(id);if(!preset)return;const properties=Object.keys(preset.variables);const targets=[document.documentElement,document.body,...document.querySelectorAll(\"[style]\")].filter((element,index,items)=>items.indexOf(element)===index&&(element===document.documentElement||element===document.body||properties.some((property)=>element.style.getPropertyValue(property)!==\"\")));for(const target of targets){for(const [property,value] of Object.entries(preset.variables))target.style.setProperty(property,value)}let fontLink=document.querySelector(\"#suda-theme-fonts\");if(preset.fontStylesheetUrl){if(!fontLink){fontLink=document.createElement(\"link\");fontLink.id=\"suda-theme-fonts\";fontLink.rel=\"stylesheet\";document.head.append(fontLink)}fontLink.href=preset.fontStylesheetUrl}else fontLink?.remove();for(const button of palette.querySelectorAll(\"[data-suda-dev-preset]\")){const active=button.dataset.sudaDevPreset===id;button.setAttribute(\"aria-pressed\",String(active));button.style.setProperty(\"--suda-dev-preset-primary\",byId.get(button.dataset.sudaDevPreset).variables[\"--primary\"])}const editorLink=palette.querySelector(\"[data-suda-dev-editor-link]\");if(editorLink){const editorUrl=new URL(editorLink.href,location.href);editorUrl.searchParams.set(\"designPreset\",id);editorLink.href=editorUrl.pathname+editorUrl.search+editorUrl.hash}if(updateUrl){const url=new URL(location.href);url.searchParams.set(\"designPreset\",id);history.replaceState(history.state,\"\",url)}}if(requested&&byId.has(requested))apply(selected,false);else for(const button of palette.querySelectorAll(\"[data-suda-dev-preset]\")){button.setAttribute(\"aria-pressed\",String(button.dataset.sudaDevPreset===selected));button.style.setProperty(\"--suda-dev-preset-primary\",byId.get(button.dataset.sudaDevPreset).variables[\"--primary\"])}palette.addEventListener(\"click\",(event)=>{const button=event.target.closest(\"[data-suda-dev-preset]\");if(button)apply(button.dataset.sudaDevPreset,true)})})();</script>`\n : \"\"),\n };\n}\n\ninterface ScreenshotOptions extends ThemeRootOptions {\n device?: string[] | string;\n output?: string;\n width?: string;\n height?: string;\n port?: string;\n fullPage?: boolean;\n}\n\ninterface VisualCheckOptions extends ThemeRootOptions {\n device?: string[] | string;\n output?: string;\n port?: string;\n preset?: string[] | string;\n fullPage?: boolean;\n}\n\ninterface VisualAuditIssue {\n code: string;\n message: string;\n severity: \"error\" | \"warning\";\n}\n\ninterface VisualAuditBrowserResult {\n issues: VisualAuditIssue[];\n}\n\ninterface VisualAuditReport {\n components: string[];\n issues: Array<VisualAuditIssue & { component: string; device: ScreenshotDevice; preset: string }>;\n outputDir: string;\n presets: string[];\n}\n\ninterface ResolvedScreenshotOptions {\n targets: ScreenshotTarget[];\n port: number;\n fullPage: boolean;\n}\n\ninterface ResolvedVisualCheckOptions {\n devices: ScreenshotDevice[];\n fullPage: boolean;\n outputDir: string;\n port: number;\n presetIds: string[];\n}\n\nconst SCREENSHOT_DEVICES = [\"desktop\", \"tablet\", \"mobile\"] as const;\ntype ScreenshotDevice = (typeof SCREENSHOT_DEVICES)[number];\n\ninterface ScreenshotDeviceConfig {\n viewport: { width: number; height: number };\n outputRelativePath: string;\n}\n\ninterface ScreenshotTarget {\n device: ScreenshotDevice;\n outputPath: string;\n viewport: { width: number; height: number };\n}\n\nconst SCREENSHOT_DEVICE_CONFIG: Record<ScreenshotDevice, ScreenshotDeviceConfig> = {\n desktop: {\n viewport: { width: 1440, height: 900 },\n outputRelativePath: path.join(\"assets\", \"preview\", \"desktop.png\"),\n },\n tablet: {\n viewport: { width: 834, height: 1112 },\n outputRelativePath: path.join(\"assets\", \"preview\", \"tablet.png\"),\n },\n mobile: {\n viewport: { width: 390, height: 844 },\n outputRelativePath: path.join(\"assets\", \"preview\", \"mobile.png\"),\n },\n};\n\nconst REQUIRED_PREVIEW_ARTIFACTS = SCREENSHOT_DEVICES.map(\n (device) => `assets/preview/${device}.png`,\n) as [string, string, string];\n\nfunction isScreenshotDevice(value: string): value is ScreenshotDevice {\n return (SCREENSHOT_DEVICES as readonly string[]).includes(value);\n}\n\nfunction parseScreenshotDevices(value: ScreenshotOptions[\"device\"]): ScreenshotDevice[] {\n if (value === undefined) {\n return [...SCREENSHOT_DEVICES];\n }\n const rawValues = Array.isArray(value) ? value : [value];\n const devices: ScreenshotDevice[] = [];\n for (const raw of rawValues) {\n for (const part of raw.split(\",\")) {\n const device = part.trim();\n if (!device) continue;\n if (!isScreenshotDevice(device)) {\n throw new Error(\n `Unknown screenshot device \"${device}\". Use one of: ${SCREENSHOT_DEVICES.join(\", \")}.`,\n );\n }\n if (!devices.includes(device)) {\n devices.push(device);\n }\n }\n }\n return devices.length > 0 ? devices : [...SCREENSHOT_DEVICES];\n}\n\nfunction parsePositiveInt(value: string | undefined, fallback: number): number {\n if (!value) {\n return fallback;\n }\n const parsed = Number.parseInt(value, 10);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;\n}\n\nfunction resolveScreenshotOptions(\n root: string,\n options: ScreenshotOptions,\n): ResolvedScreenshotOptions {\n const devices = parseScreenshotDevices(options.device);\n if (options.output && devices.length !== 1) {\n throw new Error(\"`--output` can only be used when exactly one `--device` is selected.\");\n }\n return {\n targets: devices.map((device) => {\n const config = SCREENSHOT_DEVICE_CONFIG[device];\n const viewport = {\n width: parsePositiveInt(options.width, config.viewport.width),\n height: parsePositiveInt(options.height, config.viewport.height),\n };\n return {\n device,\n outputPath: path.resolve(root, options.output ?? config.outputRelativePath),\n viewport,\n };\n }),\n port: parsePositiveInt(options.port, 4178),\n fullPage: options.fullPage === true,\n };\n}\n\nfunction parseVisualCheckPresetIds(\n theme: ValidatedTheme,\n value: VisualCheckOptions[\"preset\"],\n): string[] {\n const available = theme.module.manifest.designSystem.presets.map((preset) => preset.id);\n if (value === undefined) {\n return available;\n }\n const requested = (Array.isArray(value) ? value : [value])\n .flatMap((item) => item.split(\",\"))\n .map((item) => item.trim())\n .filter(Boolean);\n if (requested.length === 0) {\n return available;\n }\n const unknown = requested.filter((preset) => !available.includes(preset));\n if (unknown.length > 0) {\n throw new Error(\n `Unknown design preset ${unknown.map((preset) => `\"${preset}\"`).join(\", \")}. Available presets: ${available.join(\", \")}.`,\n );\n }\n return Array.from(new Set(requested));\n}\n\nfunction resolveVisualCheckOptions(\n root: string,\n theme: ValidatedTheme,\n options: VisualCheckOptions,\n): ResolvedVisualCheckOptions {\n const outputDir = path.resolve(root, options.output ?? path.join(\".suda-build\", \"visual-check\"));\n return {\n devices: parseScreenshotDevices(options.device),\n fullPage: options.fullPage === true,\n outputDir,\n port: parsePositiveInt(options.port, 4179),\n presetIds: parseVisualCheckPresetIds(theme, options.preset),\n };\n}\n\ninterface PlaywrightModule {\n chromium: {\n launch: (options?: { headless?: boolean }) => Promise<{\n newContext: (options: {\n viewport: { width: number; height: number };\n deviceScaleFactor?: number;\n }) => Promise<{\n newPage: () => Promise<{\n goto: (url: string, options?: { waitUntil?: string }) => Promise<unknown>;\n evaluate: <Result>(pageFunction: () => Result) => Promise<Result>;\n on: (event: \"pageerror\", listener: (error: Error) => void) => void;\n screenshot: (options: { path: string; fullPage?: boolean }) => Promise<unknown>;\n close: () => Promise<void>;\n }>;\n close: () => Promise<void>;\n }>;\n close: () => Promise<void>;\n }>;\n };\n}\n\ninterface SharpModule {\n default?: (input: string) => {\n png: (options?: { compressionLevel?: number; palette?: boolean }) => {\n toBuffer: () => Promise<Buffer>;\n };\n };\n}\n\ntype SharpOptimizer = (input: string) => {\n png: (options?: { compressionLevel?: number; palette?: boolean }) => {\n toBuffer: () => Promise<Buffer>;\n };\n};\n\nfunction createThemeProjectRequire(themeRoot: string) {\n return createRequire(path.join(themeRoot, \"package.json\"));\n}\n\nfunction normalizePlaywrightModule(moduleValue: unknown): PlaywrightModule | null {\n if (typeof moduleValue !== \"object\" || moduleValue === null) {\n return null;\n }\n if (\"chromium\" in moduleValue) {\n const chromium = moduleValue.chromium;\n if (typeof chromium === \"object\" && chromium !== null && \"launch\" in chromium) {\n return moduleValue as PlaywrightModule;\n }\n }\n if (\"default\" in moduleValue) {\n return normalizePlaywrightModule((moduleValue as { default?: unknown }).default);\n }\n return null;\n}\n\nfunction normalizeSharpModule(moduleValue: unknown): SharpOptimizer | null {\n if (typeof moduleValue === \"function\") {\n return moduleValue as SharpOptimizer;\n }\n if (typeof moduleValue !== \"object\" || moduleValue === null) {\n return null;\n }\n if (\"default\" in moduleValue) {\n return normalizeSharpModule((moduleValue as SharpModule).default);\n }\n return null;\n}\n\nasync function loadPlaywright(themeRoot: string): Promise<PlaywrightModule> {\n // Resolve module ids via runtime expressions so the optional dependency is not\n // required at type-check time. Either `playwright` or `@playwright/test` works.\n const themeRequire = createThemeProjectRequire(themeRoot);\n const candidates = [\"playwright\", \"@playwright/test\"];\n for (const id of candidates) {\n try {\n const resolvedId = themeRequire.resolve(id);\n const mod: unknown = await import(pathToFileURL(resolvedId).href);\n const playwright = normalizePlaywrightModule(mod);\n if (playwright) {\n return playwright;\n }\n } catch {\n // try next candidate\n }\n }\n throw new Error(\n \"Playwright is required for screenshot capture. Install it as a dev dependency: `pnpm add -D playwright && pnpm exec playwright install chromium`.\",\n );\n}\n\nfunction formatMissingSharpWarning(): string {\n return (\n \"warning: PNG optimization skipped because optional dependency `sharp` is not installed. \" +\n \"Install it as a dev dependency in the theme project: `pnpm add -D sharp`.\"\n );\n}\n\nlet warnedMissingSharp = false;\nlet warnedSharpOptimizeFailure = false;\n\nasync function loadOptionalSharp(themeRoot: string): Promise<SharpOptimizer | null> {\n const resolvers = [\n createThemeProjectRequire(themeRoot),\n createRequire(path.join(packageRoot, \"package.json\")),\n ];\n for (const resolver of resolvers) {\n try {\n const sharpModulePath = resolver.resolve(\"sharp\");\n const mod: unknown = await import(pathToFileURL(sharpModulePath).href);\n const sharp = normalizeSharpModule(mod);\n if (sharp) {\n return sharp;\n }\n } catch {\n // try next resolver\n }\n }\n return null;\n}\n\nasync function optimizePngIfAvailable(themeRoot: string, filePath: string): Promise<void> {\n const sharp = await loadOptionalSharp(themeRoot);\n if (!sharp) {\n if (!warnedMissingSharp) {\n console.warn(warning(formatMissingSharpWarning()));\n warnedMissingSharp = true;\n }\n return;\n }\n\n try {\n const optimized = await sharp(filePath).png({ compressionLevel: 9, palette: true }).toBuffer();\n await writeFile(filePath, optimized);\n } catch {\n if (!warnedSharpOptimizeFailure) {\n console.warn(\n warning(\"warning: PNG optimization failed. The screenshot was saved uncompressed.\"),\n );\n warnedSharpOptimizeFailure = true;\n }\n }\n}\n\nasync function captureScreenshot(\n root: string,\n options: ResolvedScreenshotOptions,\n): Promise<void> {\n const playwright = await loadPlaywright(root);\n const handle = await startViteDevPreviewServer(root, options.port, { showDevTools: false });\n try {\n const browser = await playwright.chromium.launch({ headless: true });\n try {\n for (const target of options.targets) {\n await mkdir(path.dirname(target.outputPath), { recursive: true });\n const context = await browser.newContext({\n viewport: target.viewport,\n deviceScaleFactor: 1,\n });\n try {\n const page = await context.newPage();\n await page.goto(handle.url, { waitUntil: \"networkidle\" });\n await page.screenshot({ path: target.outputPath, fullPage: options.fullPage });\n } finally {\n await context.close();\n }\n await optimizePngIfAvailable(root, target.outputPath);\n console.log(\n success(`captured ${target.device} ${style.path(path.relative(root, target.outputPath))}`),\n );\n }\n } finally {\n await browser.close();\n }\n } finally {\n await handle.close();\n }\n}\n\nasync function screenshotTheme(root: string, options: ScreenshotOptions): Promise<void> {\n const resolved = resolveScreenshotOptions(root, options);\n await captureScreenshot(root, resolved);\n}\n\nfunction visualAuditUrl(baseUrl: string, component: string, preset: string): string {\n const url = new URL(`${DEV_VISUAL_AUDIT_PATH}/${encodeURIComponent(component)}`, `${baseUrl}/`);\n url.searchParams.set(\"designPreset\", preset);\n return url.href;\n}\n\nasync function runThemeVisualCheck(root: string, options: VisualCheckOptions): Promise<boolean> {\n const playwright = await loadPlaywright(root);\n const handle = await startViteDevPreviewServer(root, parsePositiveInt(options.port, 4179));\n let theme: ValidatedTheme;\n try {\n theme = await loadViteDevTheme(root, handle.server);\n } catch (error) {\n await handle.close();\n throw error;\n }\n const resolved = resolveVisualCheckOptions(root, theme, options);\n const components = getThemeVisualAuditComponentTypes(theme);\n const report: VisualAuditReport = {\n components,\n issues: [],\n outputDir: resolved.outputDir,\n presets: resolved.presetIds,\n };\n\n try {\n const browser = await playwright.chromium.launch({ headless: true });\n try {\n for (const preset of resolved.presetIds) {\n for (const device of resolved.devices) {\n const viewport = SCREENSHOT_DEVICE_CONFIG[device].viewport;\n const context = await browser.newContext({ viewport, deviceScaleFactor: 1 });\n try {\n for (const component of components) {\n const page = await context.newPage();\n const pageErrors: string[] = [];\n page.on(\"pageerror\", (error) => pageErrors.push(error.message));\n try {\n await page.goto(visualAuditUrl(handle.url, component, preset), {\n waitUntil: \"networkidle\",\n });\n const audit = await page.evaluate<VisualAuditBrowserResult>(() => {\n const issues: VisualAuditIssue[] = [];\n const section = document.querySelector<HTMLElement>(\"[data-section]\");\n if (!section) {\n return {\n issues: [\n {\n code: \"section-missing\",\n message: \"The visual audit page did not render the theme component.\",\n severity: \"error\",\n },\n ],\n };\n }\n\n const colorForToken = (token: string): string => {\n const probe = document.createElement(\"span\");\n probe.style.color = `var(${token})`;\n probe.style.display = \"none\";\n section.append(probe);\n const color = getComputedStyle(probe).color;\n probe.remove();\n return color;\n };\n const contrastRatio = (first: string, second: string): number | null => {\n const channels = (value: string): [number, number, number] | null => {\n const match = value.match(/^rgba?\\\\(([^)]+)\\\\)$/);\n if (!match?.[1]) return null;\n const parsed = match[1]\n .split(\",\")\n .slice(0, 3)\n .map((channel) => Number.parseFloat(channel.trim()));\n if (parsed.length !== 3 || !parsed.every(Number.isFinite)) return null;\n const [red, green, blue] = parsed;\n if (red === undefined || green === undefined || blue === undefined) return null;\n return [red, green, blue];\n };\n const firstRgb = channels(first);\n const secondRgb = channels(second);\n if (!firstRgb || !secondRgb) return null;\n const luminance = (values: [number, number, number]): number => {\n const [red, green, blue] = values.map((channel) => {\n const normalized = channel / 255;\n return normalized <= 0.04045\n ? normalized / 12.92\n : ((normalized + 0.055) / 1.055) ** 2.4;\n }) as [number, number, number];\n return 0.2126 * red + 0.7152 * green + 0.0722 * blue;\n };\n const firstLuminance = luminance(firstRgb);\n const secondLuminance = luminance(secondRgb);\n return (\n (Math.max(firstLuminance, secondLuminance) + 0.05) /\n (Math.min(firstLuminance, secondLuminance) + 0.05)\n );\n };\n const tokenPairs: Array<[string, string]> = [\n [\"--background\", \"--foreground\"],\n [\"--primary\", \"--primary-foreground\"],\n [\"--secondary\", \"--secondary-foreground\"],\n [\"--accent\", \"--accent-foreground\"],\n [\"--muted\", \"--muted-foreground\"],\n ];\n for (const [surfaceToken, foregroundToken] of tokenPairs) {\n const ratio = contrastRatio(colorForToken(surfaceToken), colorForToken(foregroundToken));\n if (ratio === null) {\n issues.push({\n code: \"token-color-unresolved\",\n message: `${surfaceToken} or ${foregroundToken} did not resolve to a CSS color.`,\n severity: \"error\",\n });\n } else if (ratio < 4.5) {\n issues.push({\n code: \"token-contrast\",\n message: `${surfaceToken} and ${foregroundToken} have ${ratio.toFixed(2)}:1 contrast; 4.5:1 is required.`,\n severity: \"error\",\n });\n }\n }\n\n const semanticTokenPairs: Array<[string, string]> = [\n [\"--background\", \"--foreground\"],\n [\"--primary\", \"--primary-foreground\"],\n [\"--secondary\", \"--secondary-foreground\"],\n [\"--accent\", \"--accent-foreground\"],\n [\"--muted\", \"--muted-foreground\"],\n ];\n const semanticSurfaces = semanticTokenPairs.map(([surface, foreground]) => ({\n foreground,\n foregroundColor: colorForToken(foreground),\n surface,\n surfaceColor: colorForToken(surface),\n }));\n const semanticSurfacesByElement = new Map<HTMLElement, (typeof semanticSurfaces)[number]>();\n for (const element of [section, ...section.querySelectorAll<HTMLElement>(\"*\")]) {\n const backgroundColor = getComputedStyle(element).backgroundColor;\n const surface = semanticSurfaces.find(\n (candidate) => candidate.surfaceColor === backgroundColor,\n );\n if (surface) semanticSurfacesByElement.set(element, surface);\n }\n const visible = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n const rect = element.getBoundingClientRect();\n return (\n style.display !== \"none\" &&\n style.visibility !== \"hidden\" &&\n Number.parseFloat(style.opacity) > 0 &&\n rect.width > 0 &&\n rect.height > 0\n );\n };\n const closestSurface = (element: HTMLElement) => {\n let current: HTMLElement | null = element;\n while (current && section.contains(current)) {\n const match = semanticSurfacesByElement.get(current);\n if (match) return match;\n current = current.parentElement;\n }\n return null;\n };\n const reportedTextChecks = new Set<string>();\n const textWalker = document.createTreeWalker(section, NodeFilter.SHOW_TEXT);\n let textNode = textWalker.nextNode();\n while (textNode) {\n if (!textNode.textContent?.trim()) {\n textNode = textWalker.nextNode();\n continue;\n }\n const parent = textNode.parentElement;\n if (!parent || !visible(parent)) {\n textNode = textWalker.nextNode();\n continue;\n }\n const surface = closestSurface(parent);\n if (surface) {\n const actualForeground = getComputedStyle(parent).color;\n const ratio = contrastRatio(surface.surfaceColor, actualForeground);\n const key = `${surface.surface}/${actualForeground}`;\n if (ratio !== null && ratio < 4.5 && !reportedTextChecks.has(`contrast/${key}`)) {\n issues.push({\n code: \"surface-text-contrast\",\n message: `Text on ${surface.surface} has ${ratio.toFixed(2)}:1 contrast; 4.5:1 is required.`,\n severity: \"error\",\n });\n reportedTextChecks.add(`contrast/${key}`);\n }\n if (\n actualForeground !== surface.foregroundColor &&\n !reportedTextChecks.has(`foreground/${key}`)\n ) {\n issues.push({\n code: \"surface-foreground-token-mismatch\",\n message: `Text on ${surface.surface} uses ${actualForeground} instead of ${surface.foreground}; verify the custom foreground remains readable.`,\n severity: \"warning\",\n });\n reportedTextChecks.add(`foreground/${key}`);\n }\n }\n textNode = textWalker.nextNode();\n }\n\n const sectionRect = section.getBoundingClientRect();\n if (\n document.documentElement.scrollWidth > window.innerWidth + 1 ||\n sectionRect.left < -1 ||\n sectionRect.right > window.innerWidth + 1\n ) {\n issues.push({\n code: \"horizontal-overflow\",\n message: \"The page or audited section overflows the viewport horizontally.\",\n severity: \"error\",\n });\n }\n const firstText = section.querySelector<HTMLElement>(\"h1, h2, h3, p\");\n if (firstText) {\n const textRect = firstText.getBoundingClientRect();\n const overlays = Array.from(document.querySelectorAll<HTMLElement>(\"body *\")).filter(\n (element) => {\n if (element === section || section.contains(element)) return false;\n const style = getComputedStyle(element);\n if (style.position !== \"fixed\" || style.visibility === \"hidden\") return false;\n const rect = element.getBoundingClientRect();\n return (\n rect.bottom > textRect.top &&\n rect.top < textRect.bottom &&\n rect.right > textRect.left &&\n rect.left < textRect.right\n );\n },\n );\n if (overlays.length > 0) {\n issues.push({\n code: \"layout-overlay\",\n message: \"A fixed layout element overlaps the first section text. Add spacing in the theme layout if this is unintended.\",\n severity: \"warning\",\n });\n }\n }\n return { issues };\n });\n for (const issue of audit.issues) {\n report.issues.push({ ...issue, component, device, preset });\n }\n for (const message of pageErrors) {\n report.issues.push({\n component,\n code: \"page-error\",\n device,\n message,\n preset,\n severity: \"error\",\n });\n }\n const outputPath = path.join(\n resolved.outputDir,\n safeObjectKeyPart(preset),\n device,\n `${safeObjectKeyPart(component)}.png`,\n );\n await mkdir(path.dirname(outputPath), { recursive: true });\n await page.screenshot({ path: outputPath, fullPage: resolved.fullPage });\n await optimizePngIfAvailable(root, outputPath);\n } finally {\n await page.close();\n }\n }\n } finally {\n await context.close();\n }\n }\n }\n } finally {\n await browser.close();\n }\n } finally {\n await handle.close();\n }\n\n await mkdir(resolved.outputDir, { recursive: true });\n await writeFile(\n path.join(resolved.outputDir, \"report.json\"),\n `${JSON.stringify(report, null, 2)}\\n`,\n );\n const errors = report.issues.filter((issue) => issue.severity === \"error\");\n const warnings = report.issues.filter((issue) => issue.severity === \"warning\");\n if (errors.length === 0) {\n console.log(success(`visual check passed; screenshots: ${style.path(report.outputDir)}`));\n } else {\n console.error(formatError(`visual check failed with ${errors.length} error(s).`));\n }\n for (const issue of report.issues) {\n const formatter = issue.severity === \"error\" ? formatError : warning;\n console.log(\n ` ${formatter(issue.severity)} ${issue.preset}/${issue.device}/${issue.component}: ${issue.message}`,\n );\n }\n if (warnings.length > 0) {\n console.log(warning(`visual check completed with ${warnings.length} warning(s).`));\n }\n return errors.length === 0;\n}\n\nasync function loadLocalAgentManifest(root: string): Promise<ThemeAgentManifest> {\n const built = await readJsonIfExists<ThemeAgentManifest>(\n path.join(root, \"dist\", \"agent-manifest.json\"),\n );\n if (built) {\n return built;\n }\n throw new Error(\n `No agent manifest found at ${path.join(root, \"dist\", \"agent-manifest.json\")}. Run \"suda theme build\" first.`,\n );\n}\n\nasync function listAgentThemes(options: AgentThemeOptions): Promise<ThemeCatalogItem[]> {\n if (options.themeRoot) {\n const manifest = await loadLocalAgentManifest(resolveThemeRoot(options));\n return [\n {\n key: manifest.manifest.key,\n name: manifest.manifest.name,\n version: manifest.manifest.version,\n description: manifest.manifest.description ?? null,\n categories: manifest.manifest.categories,\n preview: manifest.manifest.preview,\n },\n ];\n }\n\n const auth = await requireCliBaseUrl();\n const url = new URL(\"/api/cli/agent/themes\", auth.baseUrl);\n if (options.projectId) {\n url.searchParams.set(\"projectId\", options.projectId);\n }\n const catalog = await fetchJson<{ themes: ThemeCatalogItem[] }>(url.href, { token: auth.token });\n await mkdir(agentCacheDir(), { recursive: true });\n await writeFile(\n path.join(agentCacheDir(), \"catalog.json\"),\n `${JSON.stringify(catalog, null, 2)}\\n`,\n );\n return catalog.themes;\n}\n\nasync function fetchAgentManifest(\n themeKey: string,\n options: AgentThemeOptions,\n): Promise<ThemeAgentManifest> {\n // 兼容用户输入 `--theme immgway@1.0.2` 的人机交互格式:\n // 在统一入口拆成内部使用的 themeKey + version,避免每个 action 重复解析。\n // 与 `--version` 同时使用且不一致时报冲突。\n const { key: parsedKey, version: parsedVersion } = parseThemeRef(themeKey);\n if (parsedVersion && options.version && parsedVersion !== options.version) {\n throw new Error(\n `Conflicting versions: --theme specifies \"${parsedVersion}\" but --version specifies \"${options.version}\". Pass only one.`,\n );\n }\n const resolvedKey = parsedKey;\n const resolvedOptions: AgentThemeOptions = parsedVersion\n ? { ...options, version: parsedVersion }\n : options;\n\n if (resolvedOptions.themeRoot) {\n return loadLocalAgentManifest(resolveThemeRoot(resolvedOptions));\n }\n\n const auth = await requireCliBaseUrl();\n const version = resolvedOptions.version ?? \"latest\";\n const cachePath = cachedThemeManifestPath(resolvedKey, version);\n const cached =\n version === \"latest\" ? null : await readJsonIfExists<ThemeAgentManifest>(cachePath);\n if (cached) {\n return cached;\n }\n\n const url = new URL(\n `/api/cli/agent/themes/${encodeURIComponent(resolvedKey)}/${encodeURIComponent(version)}/schema`,\n auth.baseUrl,\n );\n if (resolvedOptions.projectId) {\n url.searchParams.set(\"projectId\", resolvedOptions.projectId);\n }\n const result = await fetchJson<{ agentManifest: ThemeAgentManifest }>(url.href, {\n token: auth.token,\n });\n // 远程在主题或 schema 缺失时可能返回 `{ agentManifest: null }`(见\n // apps/workspace 的 cli/agent/_lib.ts)。直接把 null 传给后续 zod\n // 校验链会触发 `_zod` 这类底层异常,掩盖真实根因;这里抢先抛出可读错误。\n if (!result.agentManifest || !Array.isArray(result.agentManifest.sections)) {\n throw new Error(\n `Theme schema is not available for \"${resolvedKey}@${version}\". The theme may not be published, not active for the project, or its agent manifest is missing. Republish the theme or activate it before retrying.`,\n );\n }\n const realVersion = result.agentManifest.manifest.version;\n const realCachePath = cachedThemeManifestPath(resolvedKey, realVersion);\n await mkdir(path.dirname(realCachePath), { recursive: true });\n await writeFile(realCachePath, `${JSON.stringify(result.agentManifest, null, 2)}\\n`);\n return result.agentManifest;\n}\n\n/**\n * 解析人机交互的 `key@version` 格式。允许仅 `key`,也允许带 version。\n * 注意:theme key 现行约束不含 `@`,所以从右侧第一个 `@` 之后视为 version。\n *\n * Exported for unit-testing; not part of the CLI public surface.\n */\nexport function parseThemeRef(value: string): { key: string; version?: string } {\n const idx = value.lastIndexOf(\"@\");\n if (idx <= 0) {\n return { key: value };\n }\n const key = value.slice(0, idx);\n const version = value.slice(idx + 1);\n if (!version) {\n return { key };\n }\n return { key, version };\n}\n\nfunction printJson(value: unknown): void {\n console.log(JSON.stringify(value, null, 2));\n}\n\nfunction createSectionSchema(\n manifest: ThemeAgentManifest,\n sectionType: string,\n): AgentComponentOutput {\n const section = createSudaPageAgentRuntime(manifest).getSectionSchemaOutput(sectionType);\n if (section === null) {\n throw new Error(`Unknown section type \"${sectionType}\".`);\n }\n return section;\n}\n\nasync function validateAgentPage(\n themeKey: string,\n input: string,\n options: AgentThemeOptions,\n): Promise<void> {\n const manifest = await fetchAgentManifest(themeKey, options);\n const pageContent = await readJson<unknown>(path.resolve(input));\n const result = createSudaPageAgentRuntime(manifest).validatePageContent(pageContent);\n printJson(agentValidationResultSchema.parse(result));\n if (!result.valid) {\n process.exitCode = 1;\n }\n}\n\nasync function createAgentPage(options: AgentPageCreateOptions): Promise<void> {\n if (!options.projectId) {\n throw new Error(\"--project-id is required.\");\n }\n const pageContent = await readJson<unknown>(path.resolve(options.input));\n const manifest = await fetchAgentManifest(options.theme, options);\n const prepared = createSudaPageAgentRuntime(manifest).preparePageData(pageContent);\n if (!prepared.validation.valid) {\n printJson(agentValidationResultSchema.parse(prepared.validation));\n process.exitCode = 1;\n return;\n }\n\n const auth = await requireCliBaseUrl();\n const request: Parameters<typeof createRemotePageDraft>[1] = {\n projectId: options.projectId,\n title: options.title,\n slug: options.slug,\n themeKey: manifest.manifest.key,\n themeVersion: manifest.manifest.version,\n data: pageContent,\n };\n if (options.home === true) {\n request.isHome = true;\n }\n const response = await createRemotePageDraft(auth, request, fetchJson);\n printJson({ success: true, ...response });\n}\n\nasync function createRemotePageDraft(\n auth: CliAuthContext,\n input: {\n projectId: string;\n title: string;\n slug: string;\n isHome?: boolean | undefined;\n themeKey: string;\n themeVersion: string;\n data: unknown;\n },\n fetcher: FetchJsonFn = fetchJson,\n): Promise<{ pageId: string }> {\n const body: {\n title: string;\n slug: string;\n isHome?: boolean | undefined;\n themeKey: string;\n themeVersion: string;\n data: unknown;\n } = {\n title: input.title,\n slug: input.slug,\n themeKey: input.themeKey,\n themeVersion: input.themeVersion,\n data: input.data,\n };\n if (input.isHome !== undefined) {\n body.isHome = input.isHome;\n }\n\n return fetcher<{ pageId: string }>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(input.projectId)}/pages`,\n {\n method: \"POST\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n },\n );\n}\n\nasync function updateRemotePageDraft(\n auth: CliAuthContext,\n input: {\n projectId: string;\n slug: string;\n themeKey: string;\n themeVersion: string;\n data: unknown;\n },\n fetcher: FetchJsonFn = fetchJson,\n): Promise<{ pageId: string }> {\n return fetcher<{ pageId: string }>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(input.projectId)}/pages`,\n {\n method: \"PATCH\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n slug: input.slug,\n themeKey: input.themeKey,\n themeVersion: input.themeVersion,\n data: input.data,\n }),\n },\n );\n}\n\nasync function performConfirmedPageOperation(\n auth: CliAuthContext,\n input: {\n operation: \"delete\" | \"publish\";\n projectId: string;\n slug: string;\n confirm?: boolean | undefined;\n },\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof destructivePageOperationOutputSchema>> {\n const impact =\n input.operation === \"delete\"\n ? `This will delete page \"${input.slug}\" from project \"${input.projectId}\". Deleted pages are removed from the workspace and public site.`\n : `This will publish the current saved draft for page \"${input.slug}\" in project \"${input.projectId}\" and make it visible on the public site.`;\n if (input.confirm !== true) {\n return {\n status: \"needs_confirmation\",\n projectId: input.projectId,\n slug: input.slug,\n impact,\n };\n }\n\n const endpoint =\n input.operation === \"delete\"\n ? `/api/cli/agent/projects/${encodeURIComponent(input.projectId)}/pages`\n : `/api/cli/agent/projects/${encodeURIComponent(input.projectId)}/pages/publish`;\n const response = await fetcher<{ pageId: string; slug?: string }>(`${auth.baseUrl}${endpoint}`, {\n method: input.operation === \"delete\" ? \"DELETE\" : \"POST\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n slug: input.slug,\n confirm: true,\n }),\n });\n\n return {\n status: input.operation === \"delete\" ? \"deleted\" : \"published\",\n projectId: input.projectId,\n slug: response.slug ?? input.slug,\n pageId: response.pageId,\n };\n}\n\nasync function performActivateTheme(\n auth: CliAuthContext,\n input: {\n projectId: string;\n themeKey: string;\n themeVersion?: string | undefined;\n confirm?: boolean | undefined;\n },\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof activateThemeOutputSchema>> {\n const themeRef = input.themeVersion ? `${input.themeKey}@${input.themeVersion}` : input.themeKey;\n const impact = `This will activate theme \"${themeRef}\" for project \"${input.projectId}\". Public pages will render with this theme after activation.`;\n if (input.confirm !== true) {\n return {\n status: \"needs_confirmation\",\n projectId: input.projectId,\n themeKey: input.themeKey,\n themeVersion: input.themeVersion ?? null,\n impact,\n };\n }\n\n const body: {\n themeKey: string;\n themeVersion?: string;\n confirm: true;\n } = {\n themeKey: input.themeKey,\n confirm: true,\n };\n if (input.themeVersion !== undefined) {\n body.themeVersion = input.themeVersion;\n }\n const response = await fetcher<{\n projectId: string;\n themeKey: string;\n themeVersion: string | null;\n }>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(input.projectId)}/theme/activate`,\n {\n method: \"POST\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n },\n );\n\n return activateThemeOutputSchema.parse({\n status: \"activated\",\n projectId: response.projectId,\n themeKey: response.themeKey,\n themeVersion: response.themeVersion,\n });\n}\n\nasync function getRemoteContactForm(\n auth: CliAuthContext,\n projectId: string,\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof contactFormViewSchema>> {\n const response = await fetcher<z.infer<typeof contactFormOutputSchema>>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(projectId)}/contact-form`,\n { token: auth.token },\n );\n return contactFormViewSchema.parse(response.contactForm);\n}\n\nasync function updateRemoteContactForm(\n auth: CliAuthContext,\n input: z.infer<typeof updateContactFormInputSchema>,\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof contactFormViewSchema>> {\n const body: Record<string, unknown> = {};\n if (input.enabled !== undefined) body.enabled = input.enabled;\n if (input.title !== undefined) body.title = input.title;\n if (input.successMessage !== undefined) body.successMessage = input.successMessage;\n if (input.submitLabel !== undefined) body.submitLabel = input.submitLabel;\n if (input.fields !== undefined) body.fields = input.fields;\n if (input.notifications !== undefined) body.notifications = input.notifications;\n if (input.webhooks !== undefined) body.webhooks = input.webhooks;\n\n const response = await fetcher<z.infer<typeof contactFormOutputSchema>>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(input.projectId)}/contact-form`,\n {\n method: \"PATCH\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n },\n );\n return contactFormViewSchema.parse(response.contactForm);\n}\n\nasync function performUpdateContactForm(\n auth: CliAuthContext,\n input: z.infer<typeof updateContactFormInputSchema>,\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof updateContactFormOutputSchema>> {\n const draft = updateContactFormInputSchema.omit({ confirm: true }).parse(input);\n const changes = [\n input.enabled !== undefined ? \"enabled state\" : null,\n input.title !== undefined || input.successMessage !== undefined || input.submitLabel !== undefined\n ? \"form copy\"\n : null,\n input.fields !== undefined ? `${input.fields.length} field(s)` : null,\n input.notifications !== undefined ? `${input.notifications.length} notification channel(s)` : null,\n input.webhooks !== undefined ? `${input.webhooks.length} webhook(s)` : null,\n ].filter((item): item is string => typeof item === \"string\");\n const impact = `This will update the project contact form settings for \"${input.projectId}\": ${changes.join(\", \") || \"no explicit changes\"}. Contact form fields affect what visitors submit publicly; notifications and webhooks may send future submissions to external systems and are subject to plan features and limits.`;\n if (input.confirm !== true) {\n return {\n status: \"needs_confirmation\",\n projectId: input.projectId,\n impact,\n draft,\n };\n }\n const contactForm = await updateRemoteContactForm(auth, input, fetcher);\n return {\n status: \"updated\",\n projectId: input.projectId,\n contactForm,\n };\n}\n\nasync function getRemoteThemeSettings(\n auth: CliAuthContext,\n projectId: string,\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof themeSettingsViewSchema>> {\n const response = await fetcher<z.infer<typeof themeSettingsViewSchema>>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(projectId)}/theme/settings`,\n { token: auth.token },\n );\n return themeSettingsViewSchema.parse(response);\n}\n\nasync function updateRemoteThemeSettings(\n auth: CliAuthContext,\n input: z.infer<typeof updateThemeSettingsInputSchema>,\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof themeSettingsViewSchema>> {\n const response = await fetcher<z.infer<typeof themeSettingsViewSchema>>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(input.projectId)}/theme/settings`,\n {\n method: \"PATCH\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ rootProps: input.rootProps }),\n },\n );\n return themeSettingsViewSchema.parse(response);\n}\n\nfunction describeThemeSettingsUpdate(\n rootProps: Record<string, unknown>,\n): string {\n const keys = Object.keys(rootProps);\n const parts = keys.map((key) => {\n if (key !== \"designSystem\") {\n return key;\n }\n const value = rootProps.designSystem;\n if (\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n typeof (value as { presetId?: unknown }).presetId === \"string\"\n ) {\n const presetId = (value as { presetId: string }).presetId;\n return `designSystem preset \"${presetId}\"`;\n }\n return \"designSystem\";\n });\n return parts.join(\", \") || \"no explicit root prop changes\";\n}\n\nasync function performUpdateThemeSettings(\n auth: CliAuthContext,\n input: z.infer<typeof updateThemeSettingsInputSchema>,\n fetcher: FetchJsonFn = fetchJson,\n): Promise<z.infer<typeof updateThemeSettingsOutputSchema>> {\n const draft = updateThemeSettingsInputSchema.omit({ confirm: true }).parse(input);\n const impact = `This will update theme layout root settings for project \"${input.projectId}\": ${describeThemeSettingsUpdate(input.rootProps)}. Theme settings affect the public site rendering after they are saved.`;\n if (input.confirm !== true) {\n return {\n status: \"needs_confirmation\",\n projectId: input.projectId,\n impact,\n draft,\n };\n }\n\n const themeSettings = await updateRemoteThemeSettings(auth, input, fetcher);\n return {\n status: \"updated\",\n projectId: input.projectId,\n themeSettings,\n };\n}\n\nasync function listAgentProjects(): Promise<AgentProjectSummary[]> {\n const auth = await requireCliBaseUrl();\n const result = await fetchJson<{ projects: AgentProjectSummary[] }>(\n `${auth.baseUrl}/api/cli/agent/projects`,\n { token: auth.token },\n );\n return result.projects;\n}\n\nasync function createAgentProject(\n options: AgentProjectCreateOptions,\n): Promise<AgentProjectCreated> {\n const auth = await requireCliBaseUrl();\n return fetchJson<AgentProjectCreated>(`${auth.baseUrl}/api/cli/agent/projects`, {\n method: \"POST\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n name: options.name,\n siteDescription: options.siteDescription,\n }),\n });\n}\n\nasync function writeThemeArtifacts(theme: ValidatedTheme): Promise<void> {\n const dist = path.join(theme.root, \"dist\");\n const agentManifest = createThemeAgentManifest(theme.module);\n const manifestJson = `${JSON.stringify(theme.module.manifest, null, 2)}\\n`;\n await writeFile(path.join(dist, \"manifest.json\"), manifestJson);\n await writeFile(\n path.join(dist, \"starter-pages.json\"),\n `${JSON.stringify(theme.module.starterPages, null, 2)}\\n`,\n );\n await writeFile(\n path.join(dist, \"cms-templates.json\"),\n `${JSON.stringify(theme.module.cmsTemplates, null, 2)}\\n`,\n );\n await writeFile(\n path.join(dist, \"default-layout.json\"),\n `${JSON.stringify(theme.module.defaultLayout, null, 2)}\\n`,\n );\n await writeFile(\n path.join(dist, \"agent-manifest.json\"),\n `${JSON.stringify(agentManifest, null, 2)}\\n`,\n );\n}\n\nfunction contentTypeFor(relativePath: string): string {\n if (relativePath.endsWith(\".css\")) {\n return \"text/css; charset=utf-8\";\n }\n if (relativePath.endsWith(\".js\") || relativePath.endsWith(\".mjs\")) {\n return \"application/javascript; charset=utf-8\";\n }\n if (relativePath.endsWith(\".map\")) {\n return \"application/json; charset=utf-8\";\n }\n if (relativePath.endsWith(\".json\")) {\n return \"application/json; charset=utf-8\";\n }\n if (relativePath.endsWith(\".svg\")) {\n return \"image/svg+xml\";\n }\n if (relativePath.endsWith(\".png\")) {\n return \"image/png\";\n }\n if (relativePath.endsWith(\".jpg\") || relativePath.endsWith(\".jpeg\")) {\n return \"image/jpeg\";\n }\n if (relativePath.endsWith(\".webp\")) {\n return \"image/webp\";\n }\n if (relativePath.endsWith(\".avif\")) {\n return \"image/avif\";\n }\n if (relativePath.endsWith(\".gif\")) {\n return \"image/gif\";\n }\n if (relativePath.endsWith(\".ico\")) {\n return \"image/x-icon\";\n }\n if (relativePath.endsWith(\".woff2\")) {\n return \"font/woff2\";\n }\n if (relativePath.endsWith(\".woff\")) {\n return \"font/woff\";\n }\n if (relativePath.endsWith(\".ttf\")) {\n return \"font/ttf\";\n }\n if (relativePath.endsWith(\".otf\")) {\n return \"font/otf\";\n }\n if (relativePath.endsWith(\".mp4\")) {\n return \"video/mp4\";\n }\n if (relativePath.endsWith(\".webm\")) {\n return \"video/webm\";\n }\n if (relativePath.endsWith(\".txt\")) {\n return \"text/plain; charset=utf-8\";\n }\n if (relativePath.endsWith(\".xml\")) {\n return \"application/xml; charset=utf-8\";\n }\n return \"application/octet-stream\";\n}\n\nasync function collectFiles(root: string, directory: string): Promise<UploadFile[]> {\n const files: UploadFile[] = [];\n if (!(await pathExists(directory))) {\n return files;\n }\n\n const children = await readdir(directory, { withFileTypes: true });\n for (const child of children) {\n const absolutePath = path.join(directory, child.name);\n if (child.isDirectory()) {\n files.push(...(await collectFiles(root, absolutePath)));\n continue;\n }\n const relativePath = path.relative(root, absolutePath).replaceAll(path.sep, \"/\");\n const publishRelativePath = relativePath.startsWith(\"dist/\")\n ? relativePath.slice(\"dist/\".length)\n : relativePath;\n files.push({\n absolutePath,\n relativePath: publishRelativePath,\n contentType: contentTypeFor(publishRelativePath),\n });\n }\n return files;\n}\n\nasync function collectThemeArtifactFiles(theme: ValidatedTheme): Promise<UploadFile[]> {\n const files = await collectFiles(theme.root, path.join(theme.root, \"dist\"));\n return files;\n}\n\n/**\n * Files that must exist on the published artifact for SudaCloud's SSR runtime\n * to load a theme. Mirrored on the server in\n * `apps/workspace/server/services/theme-publish-service.ts` as\n * `SSR_REQUIRED_ARTIFACTS`. Keep both lists in sync.\n */\nconst SSR_REQUIRED_ARTIFACTS = [\n \"index.js\",\n \"runtime.client.js\",\n \"manifest.json\",\n \"styles.css\",\n \"agent-manifest.json\",\n ...REQUIRED_PREVIEW_ARTIFACTS,\n] as const;\n\nasync function checksum(files: UploadFile[]): Promise<string> {\n const hash = createHash(\"sha256\");\n for (const file of files.sort((a, b) => a.relativePath.localeCompare(b.relativePath))) {\n hash.update(file.relativePath);\n hash.update(await readFile(file.absolutePath));\n }\n return hash.digest(\"hex\");\n}\n\n/**\n * Format an unsuccessful HTTP response from the publish API into a single\n * human-readable string. The server returns `{ error, issues? }` where\n * `issues` is the raw `ZodError.issues` array (path + message) for 422\n * validation failures. Surfacing those keeps `Invalid request` from being\n * the only thing the user sees when the request body fails schema checks.\n */\nasync function formatHttpErrorBody(res: Response): Promise<string> {\n const fallback = `${res.status} ${res.statusText}`;\n const body = (await res.json().catch(() => null)) as {\n error?: string;\n issues?: Array<{ path?: Array<string | number>; message?: string }>;\n } | null;\n if (!body) {\n return fallback;\n }\n const message = body.error ?? fallback;\n if (Array.isArray(body.issues) && body.issues.length > 0) {\n const lines = body.issues.map((issue) => {\n const pathSegments = Array.isArray(issue.path) ? issue.path : [];\n const where = pathSegments.length > 0 ? pathSegments.join(\".\") : \"<root>\";\n return ` - ${where}: ${issue.message ?? \"invalid\"}`;\n });\n return `${message}\\n${lines.join(\"\\n\")}`;\n }\n return message;\n}\n\nasync function publishTheme(\n root: string,\n skipBuild: boolean,\n force: boolean,\n host?: string,\n): Promise<void> {\n const theme = skipBuild ? await finalizeTheme(root) : await buildTheme(root);\n const ok = await runThemeCheck(theme);\n if (!ok) {\n throw new Error(\"AI metadata check failed. Fix the errors above.\");\n }\n const files = await collectThemeArtifactFiles(theme);\n if (!theme.clientEntryPath) {\n throw new Error(\"Missing runtime.client.js. Run `suda theme build` first.\");\n }\n // Assert the SSR contract before talking to the workspace API: the server\n // independently re-checks the same set with `HeadObject`, but failing\n // locally produces a clearer error and avoids burning a publish-intent.\n const collectedPaths = new Set(files.map((f) => f.relativePath));\n for (const required of SSR_REQUIRED_ARTIFACTS) {\n if (!collectedPaths.has(required)) {\n throw new Error(\n `Missing required theme artifact: ${required}. Run \\`suda theme build\\` and ensure \\`${required}\\` is generated.`,\n );\n }\n }\n\n const config = await selectAuthConfig(host, \"Select a host to publish to:\");\n const baseUrl = config.baseUrl;\n const { key, version } = theme.module.manifest;\n const digest = await checksum(files);\n\n console.log(info(`publishing ${themeRef(key, version)} to ${style.url(baseUrl)}`));\n\n // `--force` is a development-only recovery path: tear down the previous\n // `themes/<key>/<version>/` prefix and DB row before going through the\n // normal publish-intent → upload → publish-complete flow. The CLI does\n // not hold S3 credentials; the workspace endpoint owns the cleanup.\n if (force) {\n const forceRes = await fetch(`${baseUrl}/api/cli/themes/publish-force`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.sessionToken}`,\n },\n body: JSON.stringify({ key, version }),\n });\n if (!forceRes.ok && forceRes.status !== 404) {\n throw new Error(`Failed to force-clear ${key}@${version}: ${await formatHttpErrorBody(forceRes)}`);\n }\n if (forceRes.ok) {\n const { deletedObjects } = (await forceRes.json()) as { deletedObjects?: number };\n console.log(\n warning(\n `force-cleared ${themeRef(key, version)} (${deletedObjects ?? 0} objects removed). Republishing...`,\n ),\n );\n }\n }\n\n const intentRes = await fetch(`${baseUrl}/api/cli/themes/publish-intent`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.sessionToken}`,\n },\n body: JSON.stringify({\n key,\n version,\n checksum: digest,\n files: files.map((f) => ({ relativePath: f.relativePath, contentType: f.contentType })),\n }),\n });\n\n if (!intentRes.ok) {\n throw new Error(`Failed to get publish intent: ${await formatHttpErrorBody(intentRes)}`);\n }\n\n const { urls } = (await intentRes.json()) as {\n urls: Array<{ relativePath: string; url: string; headers?: Record<string, string> }>;\n };\n\n // Upload to S3 using presigned URLs\n for (const file of files) {\n const urlObj = urls.find((u) => u.relativePath === file.relativePath);\n if (!urlObj) {\n throw new Error(`Missing presigned URL for ${file.relativePath}`);\n }\n\n const body = await readFile(file.absolutePath);\n const uploadHeaders: Record<string, string> = { \"Content-Type\": file.contentType };\n if (urlObj.headers) {\n Object.assign(uploadHeaders, urlObj.headers);\n }\n const putRes = await fetch(urlObj.url, {\n method: \"PUT\",\n headers: uploadHeaders,\n body,\n });\n\n if (!putRes.ok) {\n throw new Error(`Failed to upload ${file.relativePath}: ${putRes.statusText}`);\n }\n console.log(\n success(`uploaded ${style.path(createThemeObjectKey(key, version, file.relativePath))}`),\n );\n }\n\n const bundleArtifactRelative = \"index.js\";\n // `bundleArtifactRelative` presence is already enforced above through\n // `SSR_REQUIRED_ARTIFACTS`; we still pass the literal string to the server\n // so it can read the bundle key without re-deriving it.\n\n const previewArtifactRelative = \"assets/preview/desktop.png\";\n const agentManifest = createThemeAgentManifest(theme.module);\n\n const completeRes = await fetch(`${baseUrl}/api/cli/themes/publish-complete`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.sessionToken}`,\n },\n body: JSON.stringify({\n key,\n version,\n checksum: digest,\n manifest: theme.module.manifest,\n agentManifest,\n bundleArtifactRelative,\n previewArtifactRelative,\n }),\n });\n\n if (!completeRes.ok) {\n throw new Error(`Failed to complete publish: ${await formatHttpErrorBody(completeRes)}`);\n }\n\n console.log(success(`published ${themeRef(key, version)} to ${style.url(baseUrl)}`));\n}\n\ninterface CliPackageVersions {\n /** Caret-prefixed semver range to install for `@sudajs/theme-engine`. */\n themeEngine: string;\n /** Caret-prefixed semver range to install for `@sudajs/cli`. */\n cli: string;\n}\n\nlet cachedCliPackageVersions: CliPackageVersions | undefined;\n\n/**\n * Reads the CLI's own `package.json` so scaffolded themes declare a caret\n * range for `@sudajs/theme-engine` whose types match the CLI invoking\n * `theme init`.\n *\n * Scaffolded themes list `@sudajs/theme-engine` under `peerDependencies` (so\n * hosts decide the runtime version) AND `devDependencies` (so local dev /\n * typecheck / build still works). Both entries reuse this same range.\n *\n * In the published CLI, `dependencies[\"@sudajs/theme-engine\"]` is already a\n * real semver range (changesets resolves `workspace:*` at publish time), so\n * we forward it verbatim. In the monorepo (`workspace:*`) we instead read\n * the live `@sudajs/theme-engine/package.json` so the scaffolded starter\n * pins to the version under development, which can diverge from the CLI's\n * own version after this release decoupled the two majors.\n */\nasync function readCliPackageVersions(): Promise<CliPackageVersions> {\n if (cachedCliPackageVersions) {\n return cachedCliPackageVersions;\n }\n const here = fileURLToPath(import.meta.url);\n // dist/index.js or src/index.ts → ../package.json\n const cliPkgPath = path.resolve(path.dirname(here), \"..\", \"package.json\");\n let cliRaw: string;\n try {\n cliRaw = await readFile(cliPkgPath, \"utf8\");\n } catch {\n // Should not happen in a real install, but stay resilient in tests.\n cachedCliPackageVersions = { themeEngine: \"*\", cli: \"*\" };\n return cachedCliPackageVersions;\n }\n const cliPkg = JSON.parse(cliRaw) as {\n version?: string;\n dependencies?: Record<string, string>;\n };\n const cliVersion = typeof cliPkg.version === \"string\" ? cliPkg.version : \"0.0.0\";\n const declaredEngine = cliPkg.dependencies?.[\"@sudajs/theme-engine\"];\n let themeEngine: string;\n if (declaredEngine && !declaredEngine.startsWith(\"workspace:\")) {\n // Published CLI tarball: changesets has already replaced workspace:* with\n // a real semver range, which is exactly what we want to forward.\n themeEngine = declaredEngine;\n } else {\n // Monorepo / development: resolve the engine's actual version from its\n // own package.json. The CLI version is NOT a safe fallback here — the\n // engine and CLI ship independent majors via separate changesets, so\n // `^${cliVersion}` could pin scaffolded themes to a non-existent or\n // incompatible engine release. We instead error out loudly so a broken\n // dev environment is fixed before generating a starter.\n let resolved: string | undefined;\n try {\n const require = createRequire(import.meta.url);\n const enginePkgPath = require.resolve(\"@sudajs/theme-engine/package.json\");\n const engineRaw = await readFile(enginePkgPath, \"utf8\");\n const engineVersion = (JSON.parse(engineRaw) as { version?: string }).version;\n if (typeof engineVersion === \"string\" && engineVersion.length > 0) {\n resolved = `^${engineVersion}`;\n }\n } catch {\n const monorepoEnginePkgPath = path.resolve(path.dirname(here), \"..\", \"..\", \"theme-engine\", \"package.json\");\n const engineRaw = await readFile(monorepoEnginePkgPath, \"utf8\").catch(() => null);\n if (engineRaw) {\n const engineVersion = (JSON.parse(engineRaw) as { version?: string }).version;\n if (typeof engineVersion === \"string\" && engineVersion.length > 0) {\n resolved = `^${engineVersion}`;\n }\n }\n }\n if (!resolved) {\n throw new Error(\n \"suda theme init: cannot determine the @sudajs/theme-engine version to scaffold. \" +\n \"The CLI's package.json declares it as `workspace:*` (monorepo dev mode) but \" +\n \"`@sudajs/theme-engine/package.json` could not be resolved from the CLI's runtime. \" +\n \"Run `pnpm install` and re-run from the monorepo root, or install a published \" +\n \"@sudajs/cli tarball (which pins a real semver range).\",\n );\n }\n themeEngine = resolved;\n }\n cachedCliPackageVersions = {\n themeEngine,\n cli: `^${cliVersion}`,\n };\n return cachedCliPackageVersions;\n}\n\nasync function replaceTemplateTokens(filePath: string, replacements: Record<string, string>): Promise<void> {\n let contents = await readFile(filePath, \"utf8\");\n for (const [token, value] of Object.entries(replacements)) {\n contents = contents.split(token).join(value);\n }\n await writeFile(filePath, contents);\n}\n\nasync function loadThemeTemplateFile(relativePath: string): Promise<string> {\n return readFile(path.join(themeTemplateRoot, relativePath), \"utf8\");\n}\n\nfunction validateThemeName(name: string): string | null {\n if (name.length === 0) {\n return \"Theme name is required.\";\n }\n if (!THEME_NAME_PATTERN.test(name)) {\n return \"Theme name may only contain English letters, numbers, hyphens, and underscores.\";\n }\n return null;\n}\n\nfunction validateThemeKey(key: string): string | null {\n if (key.length === 0) {\n return \"Theme key is required.\";\n }\n if (!THEME_KEY_PATTERN.test(key)) {\n return \"Theme key must be kebab-case: lowercase letters, numbers, and hyphens, starting with a letter or number.\";\n }\n return null;\n}\n\nfunction slugifyThemeName(name: string): string {\n return name.replaceAll(\"_\", \"-\").toLowerCase();\n}\n\nfunction createThemeInitPrompt(nameProvided: boolean): ReturnType<typeof createInterface> {\n if (!process.stdin.isTTY) {\n throw new Error(\n nameProvided\n ? \"Theme key confirmation is required. Re-run `suda theme init <name>` in an interactive terminal.\"\n : \"Theme name is required. Usage: suda theme init <name>\",\n );\n }\n\n return createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n}\n\nasync function promptThemeName(rl: ReturnType<typeof createInterface>): Promise<string> {\n while (true) {\n const answer = (await rl.question(\"Theme name: \")).trim();\n const error = validateThemeName(answer);\n if (error === null) {\n return answer;\n }\n console.error(formatError(error));\n }\n}\n\nasync function promptThemeKey(\n rl: ReturnType<typeof createInterface>,\n defaultKey: string,\n): Promise<string> {\n while (true) {\n const answer = (await rl.question(`Theme key (${defaultKey}): `)).trim();\n const key = answer.length > 0 ? answer : defaultKey;\n const error = validateThemeKey(key);\n if (error === null) {\n return key;\n }\n console.error(formatError(error));\n }\n}\n\nasync function resolveThemeInitInput(name: string | undefined): Promise<{ name: string; key: string }> {\n const providedName = name?.trim();\n if (providedName !== undefined) {\n const nameError = validateThemeName(providedName);\n if (nameError !== null) {\n throw new Error(nameError);\n }\n }\n\n const rl = createThemeInitPrompt(providedName !== undefined);\n try {\n const themeName = providedName ?? (await promptThemeName(rl));\n const defaultKey = slugifyThemeName(themeName);\n return {\n name: themeName,\n key: await promptThemeKey(rl, defaultKey),\n };\n } finally {\n rl.close();\n }\n}\n\nexport async function initTheme(target: string): Promise<void> {\n await initThemeWithKey(target, slugifyThemeName(path.basename(target)));\n}\n\nasync function initThemeWithKey(target: string, key: string): Promise<void> {\n const themeName = path.basename(target);\n const nameError = validateThemeName(themeName);\n if (nameError !== null) {\n throw new Error(nameError);\n }\n const keyError = validateThemeKey(key);\n if (keyError !== null) {\n throw new Error(keyError);\n }\n // Pin scaffolded themes to the CLI's own dependency declarations so\n // `suda theme init` never produces a project that pulls in an older\n // `@sudajs/theme-engine` whose `SudaComponentConfig` type is out of sync\n // with the CLI's `theme check` requirements.\n const cliPackageVersions = await readCliPackageVersions();\n\n await copyDirectory(themeTemplateRoot, target);\n\n const packageJson = JSON.parse(await loadThemeTemplateFile(\"package.json\")) as {\n name: string;\n devDependencies: Record<string, string>;\n peerDependencies: Record<string, string>;\n };\n packageJson.name = `@suda-themes/${key}`;\n packageJson.devDependencies[\"@sudajs/cli\"] = cliPackageVersions.cli;\n packageJson.devDependencies[\"@sudajs/theme-engine\"] = cliPackageVersions.themeEngine;\n packageJson.peerDependencies[\"@sudajs/theme-engine\"] = cliPackageVersions.themeEngine;\n await writeFile(path.join(target, \"package.json\"), `${JSON.stringify(packageJson, null, 2)}\\n`);\n\n const replacements = {\n \"__SUDA_THEME_KEY__\": key,\n };\n const filesToReplace = [\n \"README.md\",\n \"src/manifest.ts\",\n \"src/theme-asset.ts\",\n \"src/sections.tsx\",\n \"src/layout.tsx\",\n \"src/config.ts\",\n \"src/templates.ts\",\n \"src/styles.css\",\n ];\n for (const relativePath of filesToReplace) {\n await replaceTemplateTokens(path.join(target, relativePath), replacements);\n }\n\n console.log(success(`created theme scaffold at ${style.path(target)}`));\n}\n\nexport function buildProgram(): Command {\n const program = new Command();\n\n program\n .name(\"suda\")\n .description(\"Suda CLI for managing themes, sites, posts and AI tooling.\")\n .version(\"0.0.0\");\n\n const theme = program.command(\"theme\").description(\"Manage Suda theme artifacts.\");\n\n theme\n .command(\"init\")\n .description(\"Scaffold a new theme source directory.\")\n .argument(\"[name]\", \"Theme name and directory to create. Use English letters, numbers, hyphens, or underscores.\")\n .action(async (name: string | undefined) => {\n const input = await resolveThemeInitInput(name);\n await initThemeWithKey(path.resolve(input.name), input.key);\n });\n\n const themeSkill = theme.command(\"skill\").description(\"Install Suda theme development guidance.\");\n\n themeSkill\n .command(\"add\")\n .description(\"Install the Suda theme development skill in a repository.\")\n .option(\"--root <path>\", \"Repository or monorepo root to install into.\")\n .option(\"--dry-run\", \"Print the destination without writing files.\")\n .option(\"--force\", \"Replace an existing skill at the destination.\")\n .action(async (options: ThemeSkillAddOptions) => {\n const result = await addThemeSkill(options);\n const target = style.path(result.destination);\n if (result.status === \"installed\") {\n console.log(success(`installed Suda theme skill in ${target}`));\n return;\n }\n if (result.status === \"already-installed\") {\n console.log(info(`Suda theme skill already installed in ${target}`));\n return;\n }\n if (result.status === \"would-replace\") {\n console.log(info(`would replace Suda theme skill in ${target}`));\n return;\n }\n console.log(info(`would install Suda theme skill in ${target}`));\n });\n\n theme\n .command(\"validate\")\n .description(\"Validate a built theme artifact.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .action(async (options: ThemeRootOptions) => {\n const result = await validateTheme(resolveThemeRoot(options));\n console.log(\n success(`valid ${themeRef(result.module.manifest.key, result.module.manifest.version)}`),\n );\n if (!result.clientEntryPath) {\n console.warn(\n warning(\n \"warning: runtime.client.js is missing; editor runtime will not load until `suda theme build` runs.\",\n ),\n );\n }\n });\n\n theme\n .command(\"build\")\n .description(\"Build a Vite Suda theme artifact.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .action(async (options: BuildOptions) => {\n const result = await buildTheme(resolveThemeRoot(options));\n console.log(\n success(`built ${themeRef(result.module.manifest.key, result.module.manifest.version)}`),\n );\n\n const ok = await runThemeCheck(result);\n if (!ok) {\n throw new Error(\"AI metadata check failed. Fix the errors above.\");\n }\n });\n\n theme\n .command(\"finalize\")\n .description(\"Finalize an existing Vite build into the Suda theme artifact contract.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .action(async (options: ThemeRootOptions) => {\n const result = await finalizeTheme(resolveThemeRoot(options));\n console.log(\n success(\n `finalized ${themeRef(result.module.manifest.key, result.module.manifest.version)}`,\n ),\n );\n });\n\n theme\n .command(\"check\")\n .description(\n \"Run AI metadata checks on a built theme without rebuilding. Reports missing component-level ai.instructions as errors and weak content as warnings.\",\n )\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .action(async (options: CheckOptions) => {\n const theme = await validateTheme(resolveThemeRoot(options));\n const ok = await runThemeCheck(theme);\n if (!ok) {\n process.exitCode = 1;\n }\n });\n\n theme\n .command(\"dev\")\n .description(\"Start the Vite-powered local theme preview.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\"--port <port>\", \"Preview server port.\", \"4177\")\n .action(async (options: BuildOptions & { port?: string }) => {\n const port = Number(options.port ?? \"4177\");\n await watchTheme(resolveThemeRoot(options), Number.isFinite(port) ? port : 4177);\n });\n\n theme\n .command(\"screenshot\")\n .alias(\"capture\")\n .description(\"Capture preview screenshots of the home starter page using Playwright.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\n \"--device <device>\",\n \"Device to capture: desktop, tablet, mobile. Repeat or use comma-separated values.\",\n collectOption,\n [],\n )\n .option(\"--output <path>\", \"Output PNG path relative to theme root. Requires exactly one device.\")\n .option(\"--width <px>\", \"Override viewport width in pixels.\")\n .option(\"--height <px>\", \"Override viewport height in pixels.\")\n .option(\"--full-page\", \"Capture the full page instead of the viewport.\")\n .option(\"--port <port>\", \"Preview server port used during capture.\", \"4178\")\n .action(async (options: ScreenshotOptions) => {\n await screenshotTheme(resolveThemeRoot(options), options);\n });\n\n theme\n .command(\"visual-check\")\n .description(\n \"Render every theme page component across presets and viewports, then report token contrast, semantic surface colors, overflow, and layout overlays.\",\n )\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\n \"--device <device>\",\n \"Device to audit: desktop, tablet, mobile. Repeat or use comma-separated values.\",\n collectOption,\n [],\n )\n .option(\n \"--preset <id>\",\n \"Design preset to audit. Repeat or use comma-separated values; defaults to every theme preset.\",\n collectOption,\n [],\n )\n .option(\"--output <path>\", \"Output directory relative to theme root.\")\n .option(\"--full-page\", \"Capture full-page screenshots instead of viewport screenshots.\")\n .option(\"--port <port>\", \"Preview server port used during visual checking.\", \"4179\")\n .action(async (options: VisualCheckOptions) => {\n const ok = await runThemeVisualCheck(resolveThemeRoot(options), options);\n if (!ok) {\n process.exitCode = 1;\n }\n });\n\n theme\n .command(\"publish\")\n .description(\"Upload artifact to S3 and upsert ThemePackage/ThemeVersion.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\"--skip-build\", \"Publish existing dist files without rebuilding.\")\n .option(\"--host <host>\", \"Publish to this authenticated SudaCloud workspace host.\")\n .option(\n \"--force\",\n \"Development recovery only: clear the existing themes/<key>/<version>/ prefix and ThemeVersion row before republishing. Re-published clients pinned to this version are unavailable until the new publish completes.\",\n )\n .action(async (options: PublishOptions) => {\n await publishTheme(\n resolveThemeRoot(options),\n options.skipBuild === true,\n options.force === true,\n options.host,\n );\n });\n\n const agent = program.command(\"agent\").description(\"Agent-friendly theme and page tooling.\");\n\n const agentProject = agent.command(\"project\").description(\"Manage Suda projects from the CLI.\");\n\n agentProject\n .command(\"list\")\n .description(\"List Suda projects the current CLI user can access.\")\n .action(async () => {\n const projects = await listAgentProjects();\n printJson({ projects });\n });\n\n agentProject\n .command(\"create\")\n .description(\n \"Create a new Suda project (mirrors onboarding). External AI should ask the user for a website name and short business description before calling this.\",\n )\n .requiredOption(\"--name <name>\", \"Website or brand name.\")\n .requiredOption(\n \"--site-description <description>\",\n \"Short business introduction used to seed default site metadata.\",\n )\n .action(async (options: { name: string; siteDescription: string }) => {\n // Reuse the shared zod schema so CLI flag validation matches the MCP\n // tool input bounds and the server-side `/api/cli/agent/projects` route.\n const parsed = createProjectInputSchema.safeParse({\n name: options.name,\n siteDescription: options.siteDescription,\n });\n if (!parsed.success) {\n const issue = parsed.error.issues[0];\n const field = issue?.path[0] === \"siteDescription\" ? \"--site-description\" : \"--name\";\n throw new Error(`${field}: ${issue?.message ?? \"invalid value\"}`);\n }\n\n const result = await createAgentProject(parsed.data);\n printJson(result);\n });\n\n const agentThemes = agent.command(\"themes\").description(\"Manage agent-visible themes.\");\n\n agentThemes\n .command(\"list\")\n .description(\"List themes visible to the current CLI user.\")\n .option(\"--project-id <projectId>\", \"Scope results to a project.\")\n .option(\"--theme-root <path>\", \"Describe a local theme instead of the remote catalog.\")\n .action(async (options: AgentThemeOptions) => {\n const themes = await listAgentThemes(options);\n printJson({ themes });\n });\n\n const agentTheme = agent.command(\"theme\").description(\"Inspect a single theme.\");\n\n agentTheme\n .command(\"describe\")\n .description(\"Describe a theme's page content configuration schema.\")\n .argument(\"<theme>\", \"Theme key.\")\n .option(\"--version <version>\", \"Theme version.\")\n .option(\"--project-id <projectId>\", \"Project scope.\")\n .option(\"--theme-root <path>\", \"Read a local theme.\")\n .option(\"--example\", \"Include example page content.\")\n .action(async (themeKey: string, options: AgentThemeOptions) => {\n const manifest = await fetchAgentManifest(themeKey, options);\n printJson(\n createSudaPageAgentRuntime(manifest).getPageSchemaOutput({\n includeExample: options.example === true,\n }),\n );\n });\n\n const agentPage = agent.command(\"page\").description(\"Page content configuration tooling.\");\n\n agentPage\n .command(\"schema\")\n .description(\"Print the page content configuration schema for a theme.\")\n .argument(\"<theme>\", \"Theme key.\")\n .option(\"--version <version>\", \"Theme version.\")\n .option(\"--project-id <projectId>\", \"Project scope.\")\n .option(\"--theme-root <path>\", \"Read a local theme.\")\n .option(\"--example\", \"Include example page content.\")\n .action(async (themeKey: string, options: AgentThemeOptions) => {\n const manifest = await fetchAgentManifest(themeKey, options);\n printJson(\n createSudaPageAgentRuntime(manifest).getPageSchemaOutput({\n includeExample: options.example === true,\n }),\n );\n });\n\n agentPage\n .command(\"validate\")\n .description(\"Validate a Suda page content JSON document.\")\n .requiredOption(\"--theme <theme>\", \"Theme key.\")\n .requiredOption(\"--input <file>\", \"JSON file containing Suda page content.\")\n .option(\"--version <version>\", \"Theme version.\")\n .option(\"--project-id <projectId>\", \"Project scope.\")\n .option(\"--theme-root <path>\", \"Read a local theme.\")\n .action(async (options: AgentThemeOptions & { theme: string; input: string }) => {\n await validateAgentPage(options.theme, options.input, options);\n });\n\n agentPage\n .command(\"create\")\n .description(\n \"Create a workspace page draft from AI-generated Suda page content JSON. Review it in Pages, then preview and publish from the workspace.\",\n )\n .requiredOption(\"--project-id <projectId>\", \"Project id.\")\n .requiredOption(\"--title <title>\", \"Page title.\")\n .requiredOption(\"--slug <slug>\", \"Page slug.\")\n .requiredOption(\"--theme <theme>\", \"Theme key.\")\n .requiredOption(\"--input <file>\", \"JSON file containing Suda page content.\")\n .option(\"--version <version>\", \"Theme version.\")\n .option(\"--home\", \"Mark this page draft as the project's homepage.\")\n .action(async (options: AgentPageCreateOptions) => {\n await createAgentPage(options);\n });\n\n const agentSection = agent.command(\"section\").description(\"Inspect a single section.\");\n\n agentSection\n .command(\"schema\")\n .description(\"Print one section configuration schema for a theme.\")\n .requiredOption(\"--theme <theme>\", \"Theme key.\")\n .requiredOption(\"--section <section>\", \"Section type.\")\n .option(\"--version <version>\", \"Theme version.\")\n .option(\"--project-id <projectId>\", \"Project scope.\")\n .option(\"--theme-root <path>\", \"Read a local theme.\")\n .action(async (options: AgentThemeOptions & { theme: string; section: string }) => {\n const manifest = await fetchAgentManifest(options.theme, options);\n printJson(createSectionSchema(manifest, options.section));\n });\n\n const hostCmd = program.command(\"host\").description(\"Manage the current SudaCloud workspace host.\");\n\n hostCmd\n .command(\"current\")\n .description(\"Show the current authenticated workspace host.\")\n .action(async () => {\n await showCurrentHost();\n });\n\n hostCmd\n .command(\"list\")\n .description(\"List authenticated workspace hosts.\")\n .action(async () => {\n await listHosts();\n });\n\n hostCmd\n .command(\"switch\")\n .description(\"Switch the current workspace host.\")\n .argument(\"<host>\", \"An existing authenticated SudaCloud workspace host.\")\n .action(async (host: string) => {\n await switchHost(host);\n });\n\n const authCmd = program.command(\"auth\").description(\"Manage Suda authentication.\");\n\n authCmd\n .command(\"login\")\n .description(\"Authenticate Suda CLI with a SudaCloud workspace.\")\n .option(\n \"--host <host>\",\n \"The SudaCloud workspace host to authenticate against.\",\n )\n .action(async (options: { host?: string }) => {\n await login(options.host);\n });\n\n authCmd\n .command(\"status\")\n .description(\"Check current authentication status.\")\n .option(\"--host <host>\", \"Check authentication for this workspace host.\")\n .action(async (options: { host?: string }) => {\n await status(options.host);\n });\n\n authCmd\n .command(\"logout\")\n .description(\"Revoke and remove a workspace host credential.\")\n .option(\"--host <host>\", \"Log out from this workspace host.\")\n .action(async (options: { host?: string }) => {\n await logout(options.host);\n });\n\n program.showHelpAfterError();\n\n return program;\n}\n\nexport async function main(): Promise<void> {\n const program = buildProgram();\n const argv = process.argv.filter((arg, index) => index < 2 || arg !== \"--\");\n await program.parseAsync(argv);\n}\n"]}
|