@sudajs/cli 0.15.0 → 0.16.0

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/format.ts","../src/auth.ts","../src/index.ts"],"names":["path","packageRoot","protocolForHost","error","esbuild","info","starter","html","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};\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 fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { error, info, style, success, warning } from \"./format\";\n\ninterface 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}\n\nfunction getConfigPath() {\n return path.join(os.homedir(), \".config\", \"suda\", \"config.json\");\n}\n\nexport async function readAuthConfig(): Promise<AuthConfig | null> {\n try {\n const configPath = getConfigPath();\n const content = await fs.readFile(configPath, \"utf-8\");\n return JSON.parse(content) as AuthConfig;\n } catch {\n return null;\n }\n}\n\nexport async function writeAuthConfig(config: AuthConfig): Promise<void> {\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(config, null, 2), { mode: 0o600 });\n}\n\nexport async function clearAuthConfig(): Promise<void> {\n const configPath = getConfigPath();\n try {\n await fs.unlink(configPath);\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\nfunction protocolForHost(host: string): \"http\" | \"https\" {\n return host.includes(\"localhost\") || host.includes(\"127.0.0.1\") ? \"http\" : \"https\";\n}\n\n/**\n * Thrown by {@link cliAuthFetch} when the workspace API rejects the stored\n * CLI token. Carries the structured `error` code returned by the server (see\n * `apps/workspace/server/lib/api-auth.ts`) so callers can distinguish\n * \"expired\" from \"revoked\" without parsing strings.\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\n/**\n * Wrapper around `fetch` that automatically attaches the stored CLI token,\n * detects expired/revoked sessions, clears the local config and surfaces a\n * friendly error message — matching the UX of `gh` / `shopify` CLIs where\n * a stale token says \"please run `gh auth login`\" instead of bubbling a\n * raw `Unauthorized`.\n */\nexport async function cliAuthFetch(\n pathname: string,\n init: RequestInit = {},\n): Promise<Response> {\n const config = await readAuthConfig();\n if (!config) {\n throw new CliAuthExpiredError(\n \"unauthorized\",\n \"Not logged in. Run `suda auth login` to authenticate first.\",\n );\n }\n const baseUrl = `${protocolForHost(config.host)}://${config.host}`;\n const headers = new Headers(init.headers);\n headers.set(\"Authorization\", `Bearer ${config.sessionToken}`);\n\n const res = await fetch(`${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 // Wipe the local config so the next command immediately tells the user\n // to log in instead of pretending we still hold a session.\n await clearAuthConfig();\n throw new CliAuthExpiredError(\n code,\n body.message ??\n \"Authentication is no longer valid. Run `suda auth login` to authenticate again.\",\n );\n }\n return res;\n}\n\nexport async function login(host: string = \"app.sudayun.cn\") {\n const baseUrl = `${protocolForHost(host)}://${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 to open browser\n try {\n const open = (await import(\"open\")).default;\n await open(authUrl);\n } catch {\n // ignore\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 writeAuthConfig({ sessionToken: data.token, host });\n console.log(success(\"Successfully authorized!\"));\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() {\n const config = await readAuthConfig();\n if (!config) {\n console.log(warning(\"Not logged in. Run `suda auth login` to authenticate.\"));\n return;\n }\n\n let res: Response;\n try {\n res = await cliAuthFetch(\"/api/cli-auth/whoami\");\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 // `cliAuthFetch` already handled 401. Anything else here is unexpected\n // (5xx, etc.) — surface a generic message rather than silently dropping\n // the local credentials.\n console.error(\n error(`Failed to verify session (${res.status} ${res.statusText}). Try again later.`),\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() {\n const config = await readAuthConfig();\n if (!config) {\n console.log(warning(\"Not logged in.\"));\n return;\n }\n\n // Best-effort server-side revocation. We always clear the local config\n // afterwards so that even if the server is unreachable (offline, DNS issues,\n // self-hosted instance turned off) the user is genuinely \"logged out\" on\n // this machine. Mirrors `gh auth logout`'s behaviour: tell the server, then\n // wipe the credential.\n try {\n await cliAuthFetch(\"/api/cli-auth/revoke\", { method: \"POST\" });\n } catch (err) {\n if (err instanceof CliAuthExpiredError) {\n // Token was already invalid — `cliAuthFetch` already wiped the local\n // config in that case. Tell the user once and return.\n console.log(warning(\"Logged out (token was already invalid).\"));\n return;\n }\n console.warn(\n warning(\n `Could not contact ${config.host} to revoke token. The token will be cleared locally only.`,\n ),\n );\n }\n\n await clearAuthConfig();\n console.log(success(\"Logged out successfully.\"));\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 { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport type {\n AgentComponentOutput,\n ThemeAgentManifest,\n ThemeModule,\n ThemeStarterPage,\n} from \"@sudajs/theme-engine\";\nimport {\n agentComponentOutputSchema,\n agentPageSchemaOutputSchema,\n agentValidationResultSchema,\n checkThemeModule,\n createSudaPageAgentRuntime,\n createThemeAgentManifest,\n formatThemeCheckResult,\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 ThemePreviewLocaleMessages,\n} from \"@sudajs/theme-engine/server\";\nimport { Command } from \"commander\";\nimport { build as esbuild, type Plugin } from \"esbuild\";\nimport type { createElement as createElementFn } from \"react\";\nimport type { renderToString as renderToStringFn } from \"react-dom/server\";\nimport { z } from \"zod\";\n\nimport { login, status, logout, readAuthConfig } from \"./auth\";\nimport { error as formatError, 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 bucket?: string;\n force?: boolean;\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 maxFields: z.number(),\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 SudaLucideIcon,\n isSudaLucideIconName,\n normalizeSudaLucideIconName,\n colorSchemeField,\n createColorSchemeDefault,\n createThemeCssVariables,\n designSystemField,\n resolveColorSchemeTokens,\n SUDA_COLOR_TOKEN_KEYS,\n createThemeDesignCssVariables,\n createThemeDesignDefault,\n resolveThemeDesignTokens,\n SUDA_CUSTOM_DESIGN_PRESET_ID,\n SUDA_DESIGN_COLOR_KEYS,\n SUDA_DESIGN_RADIUS_KEYS,\n compileSudaBlockSlots,\n isSudaLocalBlockComponent,\n SUDA_LOCAL_BLOCK_CATEGORY,\n SUDA_LOCAL_BLOCK_TYPE_PREFIX,\n cmsPaginationUrl,\n getIcpRecord,\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 SudaLucideIcon,\n isSudaLucideIconName,\n normalizeSudaLucideIconName,\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\nfunction protocolForHost(host: string): \"http\" | \"https\" {\n return host.includes(\"localhost\") || host.includes(\"127.0.0.1\") ? \"http\" : \"https\";\n}\n\nasync function requireCliBaseUrl(): Promise<{ baseUrl: string; token: string }> {\n const config = await readAuthConfig();\n if (!config) {\n throw new Error(\"Not logged in. Run `suda auth login` to authenticate first.\");\n }\n return {\n baseUrl: `${protocolForHost(config.host)}://${config.host}`,\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\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 [\n '\"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 \"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 createThemeProjectRequire,\n createRemotePageDraft,\n findAnchorTagByHref,\n formatMissingSharpWarning,\n loadThemeScopedRenderer,\n normalizePlaywrightModule,\n normalizeSharpModule,\n initThemeWithKey,\n performActivateTheme,\n performConfirmedPageOperation,\n performUpdateContactForm,\n performUpdateThemeSettings,\n getRemoteThemeSettings,\n renderDevStarterPageHtml,\n resolveDevStarterSlug,\n resolveScreenshotOptions,\n slugifyThemeName,\n validateThemeKey,\n validateThemeName,\n validateThemeTailwindContract,\n validateThemeLocales,\n validateThemePreviewLocales,\n resolveThemePreviewLocale,\n withSerializedVitePreviewLocaleLoad,\n toViteModuleUrl,\n updateRemotePageDraft,\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\nasync function startViteDevPreviewServer(\n root: string,\n port: number,\n): Promise<PreviewServerHandle> {\n const viteConfig = await findViteConfig(root);\n const vite = await loadThemeVite(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\", \"vite-cache\"),\n appType: \"custom\",\n server: { host, port },\n plugins: [createSudaPreviewVitePlugin(root)],\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 close: () => server.close(),\n };\n}\n\nfunction createSudaPreviewVitePlugin(root: string): {\n name: string;\n configureServer: (server: ViteDevServer) => void;\n} {\n return {\n name: \"suda-theme-preview\",\n configureServer(server) {\n server.middlewares.use((request, response, next) => {\n void (async () => {\n const url = new URL(request.url ?? \"/\", \"http://localhost\");\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 slug = resolveDevStarterSlug(url.pathname);\n if (slug === undefined) {\n next();\n return;\n }\n\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 { theme, locale } = await loadLocalizedViteDevTheme(\n root,\n server,\n explicitLang,\n acceptLanguage,\n );\n const renderer = await loadThemeScopedRenderer(root);\n\n if (slug === null) {\n const homeSlug = pickStarterSlug(theme);\n if (!homeSlug) {\n response.writeHead(404, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(\"No starter pages declared by this theme.\");\n return;\n }\n const starter = findStarterPage(theme, homeSlug);\n if (!starter) {\n response.writeHead(404, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(`Unknown starter page: ${homeSlug}`);\n return;\n }\n const html = await server.transformIndexHtml(\n url.pathname,\n renderDevStarterPageHtml(\n theme,\n starter,\n renderer,\n locale,\n canonicalLocale(explicitLang) !== null,\n ),\n );\n response.writeHead(200, { \"Content-Type\": \"text/html; charset=utf-8\" });\n response.end(html);\n return;\n }\n\n const starter = findStarterPage(theme, slug);\n if (!starter) {\n response.writeHead(404, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(`Unknown starter page: ${slug}`);\n return;\n }\n const html = await server.transformIndexHtml(\n url.pathname,\n renderDevStarterPageHtml(\n theme,\n starter,\n renderer,\n locale,\n canonicalLocale(explicitLang) !== null,\n ),\n );\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<{ theme: ValidatedTheme; locale: string }> {\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 if (!baseTheme.module.manifest.previewLocales) {\n return { theme: baseTheme, locale };\n }\n\n const messages = await readDevPreviewLocaleMessages(root, locale);\n server.moduleGraph.invalidateAll();\n const theme = await runWithThemePreviewLocale(messages, () =>\n loadViteDevTheme(root, server),\n );\n return { theme, locale };\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 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\nfunction resolveDevStarterSlug(pathname: string): string | null | undefined {\n if (pathname === \"/\") {\n return null;\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\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\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): string {\n const chrome = renderer.extractLayoutChrome(theme.module.defaultLayout);\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: theme.module.defaultLayout,\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 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 customHead,\n \"</head>\",\n `<body${cssVarStyle ? ` style=\"${cssVarStyle}\"` : \"\"}>`,\n body,\n customBody,\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\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 ResolvedScreenshotOptions {\n targets: ScreenshotTarget[];\n port: number;\n fullPage: boolean;\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\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 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);\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\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\nfunction mcpStructured<T extends Record<string, unknown>>(summary: string, value: T) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: summary,\n },\n ],\n structuredContent: value,\n };\n}\n\nasync function startMcpServer(): Promise<void> {\n const server = new McpServer({\n name: \"suda\",\n version: \"0.1.0\",\n });\n\n server.registerTool(\n \"list_projects\",\n {\n description:\n \"List Suda projects the current CLI user can access. ALWAYS call this first when the user asks to generate or edit a website. Flow: (1) If `projects` is empty, do NOT call this tool again; instead skip directly to gathering inputs and calling create_project (see its description). (2) If `projects` has one or more entries, you MUST ask the user which project to use before any further action — even if there is only a single project, present it and ask the user to confirm or pick a different one. Never auto-pick a project on the user's behalf.\",\n inputSchema: {},\n outputSchema: listProjectsOutputSchema.shape,\n },\n async () => {\n const structuredContent = listProjectsOutputSchema.parse({\n projects: await listAgentProjects(),\n });\n return mcpStructured(\"Suda projects accessible to the current user.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"create_project\",\n {\n description:\n \"Create a new Suda project for the current user. Only call this after list_projects returned an empty list. Conversation flow before calling: (1) Ask the user for the website / brand name in one turn and capture it as `name`. (2) Ask the user for a business introduction; the user is allowed (and expected) to answer over multiple turns — keep asking follow-up questions and accumulating their answers until they confirm they are done, then concatenate the accumulated text into a single `siteDescription` (trimmed). Do not invent details the user did not provide. Do not call this tool until both fields are confirmed by the user. The project is created with the default theme, starter pages, and a default project contact form. After creation, if the business context suggests better contact fields, call get_contact_form_settings, propose the contact form plan to the user, and only call update_contact_form_settings with confirm:true after they agree. No in-app AI site generation is triggered — drive page content afterwards via create_page_draft using the returned projectId.\",\n inputSchema: {\n name: createProjectInputSchema.shape.name.describe(\n \"Website or brand name confirmed by the user in a dedicated turn. Used as the project name and site title.\",\n ),\n siteDescription: createProjectInputSchema.shape.siteDescription.describe(\n \"Business introduction the user provided, possibly across multiple turns, then concatenated and trimmed. Captures what the site is about and who it serves. Used to seed default site metadata.\",\n ),\n },\n outputSchema: createProjectOutputSchema.shape,\n },\n async ({ name, siteDescription }) => {\n const result = await createAgentProject({ name, siteDescription });\n const structuredContent = createProjectOutputSchema.parse({\n projectId: result.projectId,\n name: result.name,\n defaultDomain: result.defaultDomain,\n dashboardUrl: result.dashboardUrl,\n });\n return mcpStructured(\"Created Suda project.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"list_themes\",\n {\n description: \"List themes visible to the current Suda CLI user.\",\n inputSchema: {\n projectId: z.string().optional(),\n themeRoot: z.string().optional(),\n },\n outputSchema: {\n themes: z.array(\n z.object({\n key: z.string(),\n name: z.string(),\n version: z.string(),\n description: z.string().nullable().optional(),\n categories: z.array(z.string()).optional(),\n preview: z.string().optional(),\n active: z.boolean().optional(),\n }),\n ),\n },\n },\n async ({ projectId, themeRoot }) => {\n const structuredContent = { themes: await listAgentThemes({ projectId, themeRoot }) };\n return mcpStructured(\"Available Suda themes.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"describe_theme\",\n {\n description: \"Return the raw Suda agent manifest for a theme.\",\n inputSchema: {\n theme: z.string(),\n version: z.string().optional(),\n projectId: z.string().optional(),\n themeRoot: z.string().optional(),\n },\n outputSchema: {\n agentManifest: z.unknown(),\n },\n },\n async ({ theme, version, projectId, themeRoot }) => {\n const structuredContent = {\n agentManifest: await fetchAgentManifest(theme, { version, projectId, themeRoot }),\n };\n return mcpStructured(\"Raw Suda theme agent manifest.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"get_page_schema\",\n {\n description:\n \"Return the schema for configuring existing Suda theme sections as page content. Use only the returned section types, fields, defaultProps, and slot allowedComponents; never create theme source code or new component types. If the theme has a contact section, generate only the section placement/content props; public form fields and delivery integrations are project contact form settings exposed to themes as metadata.contactForm. Use get_contact_form_settings and update_contact_form_settings for user-approved contact form changes.\",\n inputSchema: {\n theme: z.string(),\n version: z.string().optional(),\n projectId: z.string().optional(),\n themeRoot: z.string().optional(),\n includeExample: z.boolean().optional(),\n },\n outputSchema: agentPageSchemaOutputSchema.shape,\n },\n async ({ theme, version, projectId, themeRoot, includeExample }) => {\n const manifest = await fetchAgentManifest(theme, { version, projectId, themeRoot });\n const structuredContent = createSudaPageAgentRuntime(manifest).getPageSchemaOutput({\n includeExample: includeExample === true,\n });\n return mcpStructured(\"Suda page content configuration schema.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"get_section_schema\",\n {\n description:\n \"Return the schema for configuring one existing section in a theme. Use the returned fields, defaultProps, and slot allowedComponents to set props; do not design or add theme components. For contact sections, use the schema for presentation props only and do not hardcode form field metadata, notification channels, webhook URLs, or recipients into page content. Use contact form tools for project-level contact settings.\",\n inputSchema: {\n theme: z.string(),\n section: z.string(),\n version: z.string().optional(),\n projectId: z.string().optional(),\n themeRoot: z.string().optional(),\n },\n outputSchema: agentComponentOutputSchema.shape,\n },\n async ({ theme, section, version, projectId, themeRoot }) => {\n const manifest = await fetchAgentManifest(theme, { version, projectId, themeRoot });\n const structuredContent = createSectionSchema(manifest, section);\n return mcpStructured(\"Suda section configuration schema.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"validate_page_config\",\n {\n description: \"Validate Suda page content JSON against an existing theme schema.\",\n inputSchema: {\n theme: z.string(),\n data: z.unknown(),\n version: z.string().optional(),\n projectId: z.string().optional(),\n themeRoot: z.string().optional(),\n },\n outputSchema: agentValidationResultSchema.shape,\n },\n async ({ theme, data, version, projectId, themeRoot }) => {\n const manifest = await fetchAgentManifest(theme, { version, projectId, themeRoot });\n const structuredContent = agentValidationResultSchema.parse(\n createSudaPageAgentRuntime(manifest).validatePageContent(data),\n );\n return mcpStructured(\"Suda page content validation result.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"get_contact_form_settings\",\n {\n description:\n \"Read project contact form settings. Use this before planning contact form changes. The result includes editable field metadata, masked notification/webhook URLs, and plan features/limits. Secrets are never returned.\",\n inputSchema: {\n projectId: z.string(),\n },\n outputSchema: contactFormOutputSchema.shape,\n },\n async ({ projectId }) => {\n const auth = await requireCliBaseUrl();\n const structuredContent = contactFormOutputSchema.parse({\n contactForm: await getRemoteContactForm(auth, projectId),\n });\n return mcpStructured(\"Suda contact form settings.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"update_contact_form_settings\",\n {\n description:\n \"Plan or update project contact form settings. Use this when the user asks to change contact form fields, labels, validation, notification channels, or webhooks. Supported field types are text, textarea, checkbox, radio, and select. Conversation flow: first call get_contact_form_settings, then propose the exact draft to the user. Call this tool without confirm or with confirm:false to return the impact summary; only call again with confirm:true after the user explicitly agrees. Do not invent webhook URLs, notification recipients, or external delivery secrets. When updating an existing webhook, omit url to keep the stored secret; new webhooks need a user-provided url.\",\n inputSchema: updateContactFormInputSchema.shape,\n outputSchema: {\n status: z.enum([\"needs_confirmation\", \"updated\"]),\n projectId: z.string(),\n impact: z.string().optional(),\n draft: updateContactFormInputSchema.omit({ confirm: true }).optional(),\n contactForm: contactFormViewSchema.optional(),\n },\n },\n async (input) => {\n const parsed = updateContactFormInputSchema.parse(input);\n const auth = await requireCliBaseUrl();\n const structuredContent = updateContactFormOutputSchema.parse(\n await performUpdateContactForm(auth, parsed),\n );\n return mcpStructured(\n structuredContent.status === \"needs_confirmation\"\n ? \"Updating this contact form requires explicit confirmation.\"\n : \"Updated Suda contact form settings.\",\n structuredContent,\n );\n },\n );\n\n server.registerTool(\n \"get_theme_settings\",\n {\n description:\n \"Read project theme layout root settings. Use this before planning theme style changes. The result includes manifest.designSystem presets, current rootProps, and the layout root schema. To use a preset, set rootProps.designSystem to { presetId }. To fully customize colors/radius, set rootProps.designSystem to { presetId: \\\"custom\\\", tokens: { colors, radius } } using every token from designSystem.\",\n inputSchema: {\n projectId: z.string(),\n },\n outputSchema: themeSettingsOutputSchema.shape,\n },\n async ({ projectId }) => {\n const auth = await requireCliBaseUrl();\n const structuredContent = themeSettingsOutputSchema.parse({\n themeSettings: await getRemoteThemeSettings(auth, projectId),\n });\n return mcpStructured(\"Suda theme settings.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"update_theme_settings\",\n {\n description:\n \"Plan or update project theme layout root settings. Use this for choosing a designSystem preset or saving custom design tokens for colors and radius. Conversation flow: first call get_theme_settings, then propose the exact rootProps changes to the user. Call this tool without confirm or with confirm:false to return the impact summary; only call again with confirm:true after the user explicitly agrees. Do not create theme source code or introduce a second token system.\",\n inputSchema: updateThemeSettingsInputSchema.shape,\n outputSchema: {\n status: z.enum([\"needs_confirmation\", \"updated\"]),\n projectId: z.string(),\n impact: z.string().optional(),\n draft: updateThemeSettingsInputSchema.omit({ confirm: true }).optional(),\n themeSettings: themeSettingsViewSchema.optional(),\n },\n },\n async (input) => {\n const parsed = updateThemeSettingsInputSchema.parse(input);\n const auth = await requireCliBaseUrl();\n const structuredContent = updateThemeSettingsOutputSchema.parse(\n await performUpdateThemeSettings(auth, parsed),\n );\n return mcpStructured(\n structuredContent.status === \"needs_confirmation\"\n ? \"Updating these theme settings requires explicit confirmation.\"\n : \"Updated Suda theme settings.\",\n structuredContent,\n );\n },\n );\n\n server.registerTool(\n \"create_page_draft\",\n {\n description:\n \"Create a new workspace page draft from Suda page content JSON that configures existing theme sections. When creating a complete website, mark exactly one primary landing page with isHome: true so it becomes the public homepage at `/`. After this tool succeeds, tell the user the page is only a draft, explain that they can review it in the SudaCloud workspace by navigating to Pages, opening the created page, previewing it, then clicking Publish, and ask whether they want you to publish it now. Do not call publish_page until the user explicitly confirms.\",\n inputSchema: {\n projectId: z.string(),\n title: z.string(),\n slug: z.string(),\n isHome: z\n .boolean()\n .optional()\n .describe(\"Set true for exactly one page that should serve as the public homepage at `/`.\"),\n theme: z.string(),\n data: z.unknown(),\n version: z.string().optional(),\n },\n outputSchema: createPageDraftOutputSchema,\n },\n async ({ projectId, title, slug, isHome, theme, data, version }) => {\n const manifest = await fetchAgentManifest(theme, { version, projectId });\n const prepared = createSudaPageAgentRuntime(manifest).preparePageData(data);\n if (!prepared.validation.valid) {\n return mcpStructured(\n \"Suda page content validation failed. Fix issues before creating a draft.\",\n createPageDraftOutputSchema.parse({\n status: \"invalid\",\n valid: false,\n issues: prepared.validation.issues,\n }),\n );\n }\n const auth = await requireCliBaseUrl();\n const response = await createRemotePageDraft(auth, {\n projectId,\n title,\n slug,\n isHome,\n themeKey: manifest.manifest.key,\n themeVersion: manifest.manifest.version,\n data,\n });\n return mcpStructured(\n \"Created Suda page draft. Tell the user they can review it in the SudaCloud workspace under Pages by opening the created page, previewing it, then clicking Publish. Ask whether they want you to publish it now before calling publish_page.\",\n createPageDraftOutputSchema.parse({ status: \"created\", ...response }),\n );\n },\n );\n\n server.registerTool(\n \"update_page_draft\",\n {\n description: \"Update an existing workspace page draft by slug from Suda page content JSON that configures existing theme sections.\",\n inputSchema: {\n projectId: z.string(),\n slug: z.string(),\n theme: z.string(),\n data: z.unknown(),\n version: z.string().optional(),\n },\n outputSchema: updatePageDraftOutputSchema,\n },\n async ({ projectId, slug, theme, data, version }) => {\n const manifest = await fetchAgentManifest(theme, { version, projectId });\n const prepared = createSudaPageAgentRuntime(manifest).preparePageData(data);\n if (!prepared.validation.valid) {\n return mcpStructured(\n \"Suda page content validation failed. Fix issues before updating a draft.\",\n updatePageDraftOutputSchema.parse({\n status: \"invalid\",\n valid: false,\n issues: prepared.validation.issues,\n }),\n );\n }\n const auth = await requireCliBaseUrl();\n const response = await updateRemotePageDraft(auth, {\n projectId,\n slug,\n themeKey: manifest.manifest.key,\n themeVersion: manifest.manifest.version,\n data,\n });\n return mcpStructured(\n \"Updated Suda page draft.\",\n updatePageDraftOutputSchema.parse({ status: \"updated\", ...response }),\n );\n },\n );\n\n server.registerTool(\n \"delete_page\",\n {\n description:\n \"Delete a Suda page by slug. This is destructive: first call without confirm to get the exact project, slug, and impact; only call again with confirm: true after the user explicitly agrees.\",\n inputSchema: {\n projectId: z.string(),\n slug: z.string(),\n confirm: z.boolean().optional(),\n },\n outputSchema: destructivePageOperationOutputSchema,\n },\n async ({ projectId, slug, confirm }) => {\n const auth = await requireCliBaseUrl();\n const structuredContent = destructivePageOperationOutputSchema.parse(\n await performConfirmedPageOperation(auth, {\n operation: \"delete\",\n projectId,\n slug,\n confirm,\n }),\n );\n return mcpStructured(\n structuredContent.status === \"needs_confirmation\"\n ? \"Deleting this Suda page requires explicit confirmation.\"\n : \"Deleted Suda page.\",\n structuredContent,\n );\n },\n );\n\n server.registerTool(\n \"publish_page\",\n {\n description:\n \"Publish the current saved draft for a Suda page by slug. This affects the public site: first call without confirm to get the exact project, slug, and impact; only call again with confirm: true after the user explicitly agrees. If the user wants to review manually first, tell them to open the SudaCloud workspace, navigate to Pages, open the created page, preview it, then click Publish.\",\n inputSchema: {\n projectId: z.string(),\n slug: z.string(),\n confirm: z.boolean().optional(),\n },\n outputSchema: destructivePageOperationOutputSchema,\n },\n async ({ projectId, slug, confirm }) => {\n const auth = await requireCliBaseUrl();\n const structuredContent = destructivePageOperationOutputSchema.parse(\n await performConfirmedPageOperation(auth, {\n operation: \"publish\",\n projectId,\n slug,\n confirm,\n }),\n );\n return mcpStructured(\n structuredContent.status === \"needs_confirmation\"\n ? \"Publishing this Suda page requires explicit confirmation.\"\n : \"Published Suda page.\",\n structuredContent,\n );\n },\n );\n\n server.registerTool(\n \"activate_theme\",\n {\n description:\n \"Activate a theme for a Suda project. This affects how public pages render and may seed starter content on first activation: first call without confirm to get the exact project, theme, and impact; only call again with confirm: true after the user explicitly agrees.\",\n inputSchema: {\n projectId: z.string(),\n themeKey: z.string(),\n themeVersion: z.string().optional(),\n confirm: z.boolean().optional(),\n },\n outputSchema: activateThemeOutputSchema,\n },\n async ({ projectId, themeKey, themeVersion, confirm }) => {\n const auth = await requireCliBaseUrl();\n const structuredContent = activateThemeOutputSchema.parse(\n await performActivateTheme(auth, {\n projectId,\n themeKey,\n themeVersion,\n confirm,\n }),\n );\n return mcpStructured(\n structuredContent.status === \"needs_confirmation\"\n ? \"Activating this Suda theme requires explicit confirmation.\"\n : \"Activated Suda theme.\",\n structuredContent,\n );\n },\n );\n\n await server.connect(new StdioServerTransport());\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): 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 readAuthConfig();\n if (!config) {\n throw new Error(\"Not logged in. Run `suda auth login` to authenticate first.\");\n }\n\n const baseUrl = `${protocolForHost(config.host)}://${config.host}`;\n const { key, version } = theme.module.manifest;\n const digest = await checksum(files);\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)}`));\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(\"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(\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 );\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 program\n .command(\"mcp\")\n .description(\"Run the Suda local MCP server over stdio.\")\n .action(async () => {\n await startMcpServer();\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 \"app.sudayun.cn\",\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 .action(async () => {\n await status();\n });\n\n authCmd\n .command(\"logout\")\n .description(\"Clear local authentication configuration.\")\n .action(async () => {\n await logout();\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","starter","html","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 { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport type {\n AgentComponentOutput,\n ThemeAgentManifest,\n ThemeModule,\n ThemeStarterPage,\n} from \"@sudajs/theme-engine\";\nimport {\n agentComponentOutputSchema,\n agentPageSchemaOutputSchema,\n agentValidationResultSchema,\n checkThemeModule,\n createSudaPageAgentRuntime,\n createThemeAgentManifest,\n formatThemeCheckResult,\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 ThemePreviewLocaleMessages,\n} from \"@sudajs/theme-engine/server\";\nimport { Command } from \"commander\";\nimport { build as esbuild, type Plugin } from \"esbuild\";\nimport type { createElement as createElementFn } from \"react\";\nimport type { renderToString as renderToStringFn } 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 maxFields: z.number(),\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 SudaLucideIcon,\n isSudaLucideIconName,\n normalizeSudaLucideIconName,\n colorSchemeField,\n createColorSchemeDefault,\n createThemeCssVariables,\n designSystemField,\n resolveColorSchemeTokens,\n SUDA_COLOR_TOKEN_KEYS,\n createThemeDesignCssVariables,\n createThemeDesignDefault,\n resolveThemeDesignTokens,\n SUDA_CUSTOM_DESIGN_PRESET_ID,\n SUDA_DESIGN_COLOR_KEYS,\n SUDA_DESIGN_RADIUS_KEYS,\n compileSudaBlockSlots,\n isSudaLocalBlockComponent,\n SUDA_LOCAL_BLOCK_CATEGORY,\n SUDA_LOCAL_BLOCK_TYPE_PREFIX,\n cmsPaginationUrl,\n getIcpRecord,\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 SudaLucideIcon,\n isSudaLucideIconName,\n normalizeSudaLucideIconName,\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\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 [\n '\"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 \"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 createThemeProjectRequire,\n createRemotePageDraft,\n findAnchorTagByHref,\n formatMissingSharpWarning,\n loadThemeScopedRenderer,\n normalizePlaywrightModule,\n normalizeSharpModule,\n initThemeWithKey,\n performActivateTheme,\n performConfirmedPageOperation,\n performUpdateContactForm,\n performUpdateThemeSettings,\n getRemoteThemeSettings,\n renderDevStarterPageHtml,\n resolveDevStarterSlug,\n resolveScreenshotOptions,\n slugifyThemeName,\n validateThemeKey,\n validateThemeName,\n validateThemeTailwindContract,\n validateThemeLocales,\n validateThemePreviewLocales,\n resolveThemePreviewLocale,\n withSerializedVitePreviewLocaleLoad,\n toViteModuleUrl,\n updateRemotePageDraft,\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\nasync function startViteDevPreviewServer(\n root: string,\n port: number,\n): Promise<PreviewServerHandle> {\n const viteConfig = await findViteConfig(root);\n const vite = await loadThemeVite(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\", \"vite-cache\"),\n appType: \"custom\",\n server: { host, port },\n plugins: [createSudaPreviewVitePlugin(root)],\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 close: () => server.close(),\n };\n}\n\nfunction createSudaPreviewVitePlugin(root: string): {\n name: string;\n configureServer: (server: ViteDevServer) => void;\n} {\n return {\n name: \"suda-theme-preview\",\n configureServer(server) {\n server.middlewares.use((request, response, next) => {\n void (async () => {\n const url = new URL(request.url ?? \"/\", \"http://localhost\");\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 slug = resolveDevStarterSlug(url.pathname);\n if (slug === undefined) {\n next();\n return;\n }\n\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 { theme, locale } = await loadLocalizedViteDevTheme(\n root,\n server,\n explicitLang,\n acceptLanguage,\n );\n const renderer = await loadThemeScopedRenderer(root);\n\n if (slug === null) {\n const homeSlug = pickStarterSlug(theme);\n if (!homeSlug) {\n response.writeHead(404, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(\"No starter pages declared by this theme.\");\n return;\n }\n const starter = findStarterPage(theme, homeSlug);\n if (!starter) {\n response.writeHead(404, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(`Unknown starter page: ${homeSlug}`);\n return;\n }\n const html = await server.transformIndexHtml(\n url.pathname,\n renderDevStarterPageHtml(\n theme,\n starter,\n renderer,\n locale,\n canonicalLocale(explicitLang) !== null,\n ),\n );\n response.writeHead(200, { \"Content-Type\": \"text/html; charset=utf-8\" });\n response.end(html);\n return;\n }\n\n const starter = findStarterPage(theme, slug);\n if (!starter) {\n response.writeHead(404, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(`Unknown starter page: ${slug}`);\n return;\n }\n const html = await server.transformIndexHtml(\n url.pathname,\n renderDevStarterPageHtml(\n theme,\n starter,\n renderer,\n locale,\n canonicalLocale(explicitLang) !== null,\n ),\n );\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<{ theme: ValidatedTheme; locale: string }> {\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 if (!baseTheme.module.manifest.previewLocales) {\n return { theme: baseTheme, locale };\n }\n\n const messages = await readDevPreviewLocaleMessages(root, locale);\n server.moduleGraph.invalidateAll();\n const theme = await runWithThemePreviewLocale(messages, () =>\n loadViteDevTheme(root, server),\n );\n return { theme, locale };\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 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\nfunction resolveDevStarterSlug(pathname: string): string | null | undefined {\n if (pathname === \"/\") {\n return null;\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\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\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): string {\n const chrome = renderer.extractLayoutChrome(theme.module.defaultLayout);\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: theme.module.defaultLayout,\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 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 customHead,\n \"</head>\",\n `<body${cssVarStyle ? ` style=\"${cssVarStyle}\"` : \"\"}>`,\n body,\n customBody,\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\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 ResolvedScreenshotOptions {\n targets: ScreenshotTarget[];\n port: number;\n fullPage: boolean;\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\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 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);\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\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\nfunction mcpStructured<T extends Record<string, unknown>>(summary: string, value: T) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: summary,\n },\n ],\n structuredContent: value,\n };\n}\n\nasync function startMcpServer(): Promise<void> {\n const server = new McpServer({\n name: \"suda\",\n version: \"0.1.0\",\n });\n\n server.registerTool(\n \"list_projects\",\n {\n description:\n \"List Suda projects the current CLI user can access. ALWAYS call this first when the user asks to generate or edit a website. Flow: (1) If `projects` is empty, do NOT call this tool again; instead skip directly to gathering inputs and calling create_project (see its description). (2) If `projects` has one or more entries, you MUST ask the user which project to use before any further action — even if there is only a single project, present it and ask the user to confirm or pick a different one. Never auto-pick a project on the user's behalf.\",\n inputSchema: {},\n outputSchema: listProjectsOutputSchema.shape,\n },\n async () => {\n const structuredContent = listProjectsOutputSchema.parse({\n projects: await listAgentProjects(),\n });\n return mcpStructured(\"Suda projects accessible to the current user.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"create_project\",\n {\n description:\n \"Create a new Suda project for the current user. Only call this after list_projects returned an empty list. Conversation flow before calling: (1) Ask the user for the website / brand name in one turn and capture it as `name`. (2) Ask the user for a business introduction; the user is allowed (and expected) to answer over multiple turns — keep asking follow-up questions and accumulating their answers until they confirm they are done, then concatenate the accumulated text into a single `siteDescription` (trimmed). Do not invent details the user did not provide. Do not call this tool until both fields are confirmed by the user. The project is created with the default theme, starter pages, and a default project contact form. After creation, if the business context suggests better contact fields, call get_contact_form_settings, propose the contact form plan to the user, and only call update_contact_form_settings with confirm:true after they agree. No in-app AI site generation is triggered — drive page content afterwards via create_page_draft using the returned projectId.\",\n inputSchema: {\n name: createProjectInputSchema.shape.name.describe(\n \"Website or brand name confirmed by the user in a dedicated turn. Used as the project name and site title.\",\n ),\n siteDescription: createProjectInputSchema.shape.siteDescription.describe(\n \"Business introduction the user provided, possibly across multiple turns, then concatenated and trimmed. Captures what the site is about and who it serves. Used to seed default site metadata.\",\n ),\n },\n outputSchema: createProjectOutputSchema.shape,\n },\n async ({ name, siteDescription }) => {\n const result = await createAgentProject({ name, siteDescription });\n const structuredContent = createProjectOutputSchema.parse({\n projectId: result.projectId,\n name: result.name,\n defaultDomain: result.defaultDomain,\n dashboardUrl: result.dashboardUrl,\n });\n return mcpStructured(\"Created Suda project.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"list_themes\",\n {\n description: \"List themes visible to the current Suda CLI user.\",\n inputSchema: {\n projectId: z.string().optional(),\n themeRoot: z.string().optional(),\n },\n outputSchema: {\n themes: z.array(\n z.object({\n key: z.string(),\n name: z.string(),\n version: z.string(),\n description: z.string().nullable().optional(),\n categories: z.array(z.string()).optional(),\n preview: z.string().optional(),\n active: z.boolean().optional(),\n }),\n ),\n },\n },\n async ({ projectId, themeRoot }) => {\n const structuredContent = { themes: await listAgentThemes({ projectId, themeRoot }) };\n return mcpStructured(\"Available Suda themes.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"describe_theme\",\n {\n description: \"Return the raw Suda agent manifest for a theme.\",\n inputSchema: {\n theme: z.string(),\n version: z.string().optional(),\n projectId: z.string().optional(),\n themeRoot: z.string().optional(),\n },\n outputSchema: {\n agentManifest: z.unknown(),\n },\n },\n async ({ theme, version, projectId, themeRoot }) => {\n const structuredContent = {\n agentManifest: await fetchAgentManifest(theme, { version, projectId, themeRoot }),\n };\n return mcpStructured(\"Raw Suda theme agent manifest.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"get_page_schema\",\n {\n description:\n \"Return the schema for configuring existing Suda theme sections as page content. Use only the returned section types, fields, defaultProps, and slot allowedComponents; never create theme source code or new component types. If the theme has a contact section, generate only the section placement/content props; public form fields and delivery integrations are project contact form settings exposed to themes as metadata.contactForm. Use get_contact_form_settings and update_contact_form_settings for user-approved contact form changes.\",\n inputSchema: {\n theme: z.string(),\n version: z.string().optional(),\n projectId: z.string().optional(),\n themeRoot: z.string().optional(),\n includeExample: z.boolean().optional(),\n },\n outputSchema: agentPageSchemaOutputSchema.shape,\n },\n async ({ theme, version, projectId, themeRoot, includeExample }) => {\n const manifest = await fetchAgentManifest(theme, { version, projectId, themeRoot });\n const structuredContent = createSudaPageAgentRuntime(manifest).getPageSchemaOutput({\n includeExample: includeExample === true,\n });\n return mcpStructured(\"Suda page content configuration schema.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"get_section_schema\",\n {\n description:\n \"Return the schema for configuring one existing section in a theme. Use the returned fields, defaultProps, and slot allowedComponents to set props; do not design or add theme components. For contact sections, use the schema for presentation props only and do not hardcode form field metadata, notification channels, webhook URLs, or recipients into page content. Use contact form tools for project-level contact settings.\",\n inputSchema: {\n theme: z.string(),\n section: z.string(),\n version: z.string().optional(),\n projectId: z.string().optional(),\n themeRoot: z.string().optional(),\n },\n outputSchema: agentComponentOutputSchema.shape,\n },\n async ({ theme, section, version, projectId, themeRoot }) => {\n const manifest = await fetchAgentManifest(theme, { version, projectId, themeRoot });\n const structuredContent = createSectionSchema(manifest, section);\n return mcpStructured(\"Suda section configuration schema.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"validate_page_config\",\n {\n description: \"Validate Suda page content JSON against an existing theme schema.\",\n inputSchema: {\n theme: z.string(),\n data: z.unknown(),\n version: z.string().optional(),\n projectId: z.string().optional(),\n themeRoot: z.string().optional(),\n },\n outputSchema: agentValidationResultSchema.shape,\n },\n async ({ theme, data, version, projectId, themeRoot }) => {\n const manifest = await fetchAgentManifest(theme, { version, projectId, themeRoot });\n const structuredContent = agentValidationResultSchema.parse(\n createSudaPageAgentRuntime(manifest).validatePageContent(data),\n );\n return mcpStructured(\"Suda page content validation result.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"get_contact_form_settings\",\n {\n description:\n \"Read project contact form settings. Use this before planning contact form changes. The result includes editable field metadata, masked notification/webhook URLs, and plan features/limits. Secrets are never returned.\",\n inputSchema: {\n projectId: z.string(),\n },\n outputSchema: contactFormOutputSchema.shape,\n },\n async ({ projectId }) => {\n const auth = await requireCliBaseUrl();\n const structuredContent = contactFormOutputSchema.parse({\n contactForm: await getRemoteContactForm(auth, projectId),\n });\n return mcpStructured(\"Suda contact form settings.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"update_contact_form_settings\",\n {\n description:\n \"Plan or update project contact form settings. Use this when the user asks to change contact form fields, labels, validation, notification channels, or webhooks. Supported field types are text, textarea, checkbox, radio, and select. Conversation flow: first call get_contact_form_settings, then propose the exact draft to the user. Call this tool without confirm or with confirm:false to return the impact summary; only call again with confirm:true after the user explicitly agrees. Do not invent webhook URLs, notification recipients, or external delivery secrets. When updating an existing webhook, omit url to keep the stored secret; new webhooks need a user-provided url.\",\n inputSchema: updateContactFormInputSchema.shape,\n outputSchema: {\n status: z.enum([\"needs_confirmation\", \"updated\"]),\n projectId: z.string(),\n impact: z.string().optional(),\n draft: updateContactFormInputSchema.omit({ confirm: true }).optional(),\n contactForm: contactFormViewSchema.optional(),\n },\n },\n async (input) => {\n const parsed = updateContactFormInputSchema.parse(input);\n const auth = await requireCliBaseUrl();\n const structuredContent = updateContactFormOutputSchema.parse(\n await performUpdateContactForm(auth, parsed),\n );\n return mcpStructured(\n structuredContent.status === \"needs_confirmation\"\n ? \"Updating this contact form requires explicit confirmation.\"\n : \"Updated Suda contact form settings.\",\n structuredContent,\n );\n },\n );\n\n server.registerTool(\n \"get_theme_settings\",\n {\n description:\n \"Read project theme layout root settings. Use this before planning theme style changes. The result includes manifest.designSystem presets, current rootProps, and the layout root schema. To use a preset, set rootProps.designSystem to { presetId }. To fully customize colors/radius, set rootProps.designSystem to { presetId: \\\"custom\\\", tokens: { colors, radius } } using every token from designSystem.\",\n inputSchema: {\n projectId: z.string(),\n },\n outputSchema: themeSettingsOutputSchema.shape,\n },\n async ({ projectId }) => {\n const auth = await requireCliBaseUrl();\n const structuredContent = themeSettingsOutputSchema.parse({\n themeSettings: await getRemoteThemeSettings(auth, projectId),\n });\n return mcpStructured(\"Suda theme settings.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"update_theme_settings\",\n {\n description:\n \"Plan or update project theme layout root settings. Use this for choosing a designSystem preset or saving custom design tokens for colors and radius. Conversation flow: first call get_theme_settings, then propose the exact rootProps changes to the user. Call this tool without confirm or with confirm:false to return the impact summary; only call again with confirm:true after the user explicitly agrees. Do not create theme source code or introduce a second token system.\",\n inputSchema: updateThemeSettingsInputSchema.shape,\n outputSchema: {\n status: z.enum([\"needs_confirmation\", \"updated\"]),\n projectId: z.string(),\n impact: z.string().optional(),\n draft: updateThemeSettingsInputSchema.omit({ confirm: true }).optional(),\n themeSettings: themeSettingsViewSchema.optional(),\n },\n },\n async (input) => {\n const parsed = updateThemeSettingsInputSchema.parse(input);\n const auth = await requireCliBaseUrl();\n const structuredContent = updateThemeSettingsOutputSchema.parse(\n await performUpdateThemeSettings(auth, parsed),\n );\n return mcpStructured(\n structuredContent.status === \"needs_confirmation\"\n ? \"Updating these theme settings requires explicit confirmation.\"\n : \"Updated Suda theme settings.\",\n structuredContent,\n );\n },\n );\n\n server.registerTool(\n \"create_page_draft\",\n {\n description:\n \"Create a new workspace page draft from Suda page content JSON that configures existing theme sections. When creating a complete website, mark exactly one primary landing page with isHome: true so it becomes the public homepage at `/`. After this tool succeeds, tell the user the page is only a draft, explain that they can review it in the SudaCloud workspace by navigating to Pages, opening the created page, previewing it, then clicking Publish, and ask whether they want you to publish it now. Do not call publish_page until the user explicitly confirms.\",\n inputSchema: {\n projectId: z.string(),\n title: z.string(),\n slug: z.string(),\n isHome: z\n .boolean()\n .optional()\n .describe(\"Set true for exactly one page that should serve as the public homepage at `/`.\"),\n theme: z.string(),\n data: z.unknown(),\n version: z.string().optional(),\n },\n outputSchema: createPageDraftOutputSchema,\n },\n async ({ projectId, title, slug, isHome, theme, data, version }) => {\n const manifest = await fetchAgentManifest(theme, { version, projectId });\n const prepared = createSudaPageAgentRuntime(manifest).preparePageData(data);\n if (!prepared.validation.valid) {\n return mcpStructured(\n \"Suda page content validation failed. Fix issues before creating a draft.\",\n createPageDraftOutputSchema.parse({\n status: \"invalid\",\n valid: false,\n issues: prepared.validation.issues,\n }),\n );\n }\n const auth = await requireCliBaseUrl();\n const response = await createRemotePageDraft(auth, {\n projectId,\n title,\n slug,\n isHome,\n themeKey: manifest.manifest.key,\n themeVersion: manifest.manifest.version,\n data,\n });\n return mcpStructured(\n \"Created Suda page draft. Tell the user they can review it in the SudaCloud workspace under Pages by opening the created page, previewing it, then clicking Publish. Ask whether they want you to publish it now before calling publish_page.\",\n createPageDraftOutputSchema.parse({ status: \"created\", ...response }),\n );\n },\n );\n\n server.registerTool(\n \"update_page_draft\",\n {\n description: \"Update an existing workspace page draft by slug from Suda page content JSON that configures existing theme sections.\",\n inputSchema: {\n projectId: z.string(),\n slug: z.string(),\n theme: z.string(),\n data: z.unknown(),\n version: z.string().optional(),\n },\n outputSchema: updatePageDraftOutputSchema,\n },\n async ({ projectId, slug, theme, data, version }) => {\n const manifest = await fetchAgentManifest(theme, { version, projectId });\n const prepared = createSudaPageAgentRuntime(manifest).preparePageData(data);\n if (!prepared.validation.valid) {\n return mcpStructured(\n \"Suda page content validation failed. Fix issues before updating a draft.\",\n updatePageDraftOutputSchema.parse({\n status: \"invalid\",\n valid: false,\n issues: prepared.validation.issues,\n }),\n );\n }\n const auth = await requireCliBaseUrl();\n const response = await updateRemotePageDraft(auth, {\n projectId,\n slug,\n themeKey: manifest.manifest.key,\n themeVersion: manifest.manifest.version,\n data,\n });\n return mcpStructured(\n \"Updated Suda page draft.\",\n updatePageDraftOutputSchema.parse({ status: \"updated\", ...response }),\n );\n },\n );\n\n server.registerTool(\n \"delete_page\",\n {\n description:\n \"Delete a Suda page by slug. This is destructive: first call without confirm to get the exact project, slug, and impact; only call again with confirm: true after the user explicitly agrees.\",\n inputSchema: {\n projectId: z.string(),\n slug: z.string(),\n confirm: z.boolean().optional(),\n },\n outputSchema: destructivePageOperationOutputSchema,\n },\n async ({ projectId, slug, confirm }) => {\n const auth = await requireCliBaseUrl();\n const structuredContent = destructivePageOperationOutputSchema.parse(\n await performConfirmedPageOperation(auth, {\n operation: \"delete\",\n projectId,\n slug,\n confirm,\n }),\n );\n return mcpStructured(\n structuredContent.status === \"needs_confirmation\"\n ? \"Deleting this Suda page requires explicit confirmation.\"\n : \"Deleted Suda page.\",\n structuredContent,\n );\n },\n );\n\n server.registerTool(\n \"publish_page\",\n {\n description:\n \"Publish the current saved draft for a Suda page by slug. This affects the public site: first call without confirm to get the exact project, slug, and impact; only call again with confirm: true after the user explicitly agrees. If the user wants to review manually first, tell them to open the SudaCloud workspace, navigate to Pages, open the created page, preview it, then click Publish.\",\n inputSchema: {\n projectId: z.string(),\n slug: z.string(),\n confirm: z.boolean().optional(),\n },\n outputSchema: destructivePageOperationOutputSchema,\n },\n async ({ projectId, slug, confirm }) => {\n const auth = await requireCliBaseUrl();\n const structuredContent = destructivePageOperationOutputSchema.parse(\n await performConfirmedPageOperation(auth, {\n operation: \"publish\",\n projectId,\n slug,\n confirm,\n }),\n );\n return mcpStructured(\n structuredContent.status === \"needs_confirmation\"\n ? \"Publishing this Suda page requires explicit confirmation.\"\n : \"Published Suda page.\",\n structuredContent,\n );\n },\n );\n\n server.registerTool(\n \"activate_theme\",\n {\n description:\n \"Activate a theme for a Suda project. This affects how public pages render and may seed starter content on first activation: first call without confirm to get the exact project, theme, and impact; only call again with confirm: true after the user explicitly agrees.\",\n inputSchema: {\n projectId: z.string(),\n themeKey: z.string(),\n themeVersion: z.string().optional(),\n confirm: z.boolean().optional(),\n },\n outputSchema: activateThemeOutputSchema,\n },\n async ({ projectId, themeKey, themeVersion, confirm }) => {\n const auth = await requireCliBaseUrl();\n const structuredContent = activateThemeOutputSchema.parse(\n await performActivateTheme(auth, {\n projectId,\n themeKey,\n themeVersion,\n confirm,\n }),\n );\n return mcpStructured(\n structuredContent.status === \"needs_confirmation\"\n ? \"Activating this Suda theme requires explicit confirmation.\"\n : \"Activated Suda theme.\",\n structuredContent,\n );\n },\n );\n\n await server.connect(new StdioServerTransport());\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(\"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 program\n .command(\"mcp\")\n .description(\"Run the Suda local MCP server over stdio.\")\n .action(async () => {\n await startMcpServer();\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"]}