@sudajs/cli 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/suda.js +8 -1
- package/dist/index.js +107 -16
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/bin/suda.js
CHANGED
|
@@ -12,11 +12,18 @@ const devRunner = path.resolve(scriptDir, "suda-dev.js");
|
|
|
12
12
|
const distEntry = path.resolve(scriptDir, "../dist/index.js");
|
|
13
13
|
|
|
14
14
|
if (existsSync(sourceEntry)) {
|
|
15
|
+
// Run the CLI from its TypeScript sources via tsx, but DO NOT pass
|
|
16
|
+
// `--conditions=development` here. That flag is process-wide and would also
|
|
17
|
+
// affect how the CLI resolves third-party packages (e.g. `@sudajs/theme-engine`)
|
|
18
|
+
// when invoked against an *external* theme project, causing Node to try to
|
|
19
|
+
// import the engine's `src/*.ts` (which does not exist in published packages)
|
|
20
|
+
// instead of its built `dist/*.js`. We only want tsx to transpile the CLI's
|
|
21
|
+
// own TypeScript sources; package resolution must use normal exports.
|
|
15
22
|
const require = createRequire(import.meta.url);
|
|
16
23
|
const tsxLoader = require.resolve("tsx");
|
|
17
24
|
const result = spawnSync(
|
|
18
25
|
process.execPath,
|
|
19
|
-
["--
|
|
26
|
+
["--import", tsxLoader, devRunner, ...process.argv.slice(2)],
|
|
20
27
|
{
|
|
21
28
|
stdio: "inherit",
|
|
22
29
|
},
|
package/dist/index.js
CHANGED
|
@@ -61,14 +61,15 @@ Please open the following URL in your browser to authorize Suda CLI:
|
|
|
61
61
|
`);
|
|
62
62
|
console.log(`Your confirmation code is: ${userCode}
|
|
63
63
|
`);
|
|
64
|
-
console.log("Waiting for authorization...");
|
|
65
64
|
try {
|
|
66
65
|
const open = (await import('open')).default;
|
|
67
66
|
await open(authUrl);
|
|
68
67
|
} catch {
|
|
69
68
|
}
|
|
70
69
|
const pollInterval = (interval || 5) * 1e3;
|
|
71
|
-
const
|
|
70
|
+
const timeoutSeconds = expiresIn || 300;
|
|
71
|
+
const deadline = Date.now() + timeoutSeconds * 1e3;
|
|
72
|
+
console.log("Waiting for authorization...");
|
|
72
73
|
while (Date.now() < deadline) {
|
|
73
74
|
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
74
75
|
const pollRes = await fetch(`${baseUrl}/api/cli-auth/poll`, {
|
|
@@ -79,7 +80,7 @@ Please open the following URL in your browser to authorize Suda CLI:
|
|
|
79
80
|
const data = await pollRes.json();
|
|
80
81
|
if (pollRes.ok && data.status === "approved" && data.token) {
|
|
81
82
|
await writeAuthConfig({ sessionToken: data.token, host });
|
|
82
|
-
console.log("
|
|
83
|
+
console.log("Successfully authorized!");
|
|
83
84
|
return;
|
|
84
85
|
}
|
|
85
86
|
if (data.error === "authorization_pending") {
|
|
@@ -489,6 +490,7 @@ async function watchTheme(root, skipThemeBuild) {
|
|
|
489
490
|
const entryPoint = await findClientEntry(root);
|
|
490
491
|
await mkdir(path2.join(root, "dist"), { recursive: true });
|
|
491
492
|
const hostReactShimPlugin = createHostReactShimPlugin();
|
|
493
|
+
const watchLogPlugin = createWatchLogPlugin("runtime.client.js");
|
|
492
494
|
const context$1 = await context({
|
|
493
495
|
bundle: true,
|
|
494
496
|
entryPoints: [entryPoint],
|
|
@@ -497,7 +499,7 @@ async function watchTheme(root, skipThemeBuild) {
|
|
|
497
499
|
minify: false,
|
|
498
500
|
outfile: path2.join(root, "dist", "runtime.client.js"),
|
|
499
501
|
platform: "browser",
|
|
500
|
-
plugins: [hostReactShimPlugin],
|
|
502
|
+
plugins: [hostReactShimPlugin, watchLogPlugin],
|
|
501
503
|
sourcemap: true,
|
|
502
504
|
target: "es2022",
|
|
503
505
|
treeShaking: true
|
|
@@ -506,6 +508,27 @@ async function watchTheme(root, skipThemeBuild) {
|
|
|
506
508
|
console.log("watching theme runtime; press Ctrl+C to stop");
|
|
507
509
|
await new Promise(() => void 0);
|
|
508
510
|
}
|
|
511
|
+
function createWatchLogPlugin(label) {
|
|
512
|
+
return {
|
|
513
|
+
name: "suda-theme-watch-log",
|
|
514
|
+
setup(build) {
|
|
515
|
+
let firstBuild = true;
|
|
516
|
+
build.onEnd((result) => {
|
|
517
|
+
if (firstBuild) {
|
|
518
|
+
firstBuild = false;
|
|
519
|
+
return;
|
|
520
|
+
}
|
|
521
|
+
const errorCount = result.errors.length;
|
|
522
|
+
if (errorCount > 0) {
|
|
523
|
+
console.log(`rebuild failed (${errorCount} error${errorCount === 1 ? "" : "s"}): ${label}`);
|
|
524
|
+
return;
|
|
525
|
+
}
|
|
526
|
+
const stamp = (/* @__PURE__ */ new Date()).toLocaleTimeString();
|
|
527
|
+
console.log(`[${stamp}] rebuilt ${label}`);
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
};
|
|
531
|
+
}
|
|
509
532
|
function pickStarterPage(theme) {
|
|
510
533
|
const pages = theme.module.starterPages;
|
|
511
534
|
if (pages.length === 0) {
|
|
@@ -1133,14 +1156,35 @@ async function initTheme(target) {
|
|
|
1133
1156
|
name: `@suda-themes/${key}`,
|
|
1134
1157
|
version: "0.1.0",
|
|
1135
1158
|
private: true,
|
|
1159
|
+
packageManager: "pnpm@11.6.0",
|
|
1136
1160
|
type: "module",
|
|
1137
1161
|
main: "./dist/index.js",
|
|
1138
1162
|
types: "./dist/index.d.ts",
|
|
1139
1163
|
scripts: {
|
|
1140
|
-
build:
|
|
1141
|
-
|
|
1164
|
+
// `build:src` compiles TypeScript sources to dist/. `build` then runs
|
|
1165
|
+
// `suda theme build --skip-theme-build` so the CLI does not recurse
|
|
1166
|
+
// back into this script (it would otherwise see scripts.build and
|
|
1167
|
+
// call `pnpm run build` again, causing infinite recursion).
|
|
1168
|
+
"build:src": "tsc -p tsconfig.json",
|
|
1169
|
+
build: "pnpm run build:src && suda theme build --theme-root . --skip-theme-build",
|
|
1170
|
+
dev: "suda theme dev --theme-root . --skip-theme-build",
|
|
1171
|
+
typecheck: "tsc -p tsconfig.json --noEmit",
|
|
1172
|
+
validate: "suda theme validate --theme-root .",
|
|
1173
|
+
preview: "suda theme preview --theme-root ."
|
|
1174
|
+
},
|
|
1175
|
+
dependencies: {
|
|
1176
|
+
"@sudajs/theme-engine": "^0.1.1"
|
|
1177
|
+
},
|
|
1178
|
+
devDependencies: {
|
|
1179
|
+
"@puckeditor/core": "^0.21.2",
|
|
1180
|
+
"@sudajs/cli": "^0.1.0",
|
|
1181
|
+
"@types/node": "^22.0.0",
|
|
1182
|
+
"@types/react": "^19.0.0",
|
|
1183
|
+
"@types/react-dom": "^19.0.0",
|
|
1184
|
+
react: "^19.0.0",
|
|
1185
|
+
"react-dom": "^19.0.0",
|
|
1186
|
+
typescript: "^5.6.0"
|
|
1142
1187
|
},
|
|
1143
|
-
dependencies: { "@sudajs/theme-engine": "workspace:*" },
|
|
1144
1188
|
peerDependencies: {
|
|
1145
1189
|
"@puckeditor/core": "^0.21.2",
|
|
1146
1190
|
react: "^19.0.0",
|
|
@@ -1150,11 +1194,45 @@ async function initTheme(target) {
|
|
|
1150
1194
|
null,
|
|
1151
1195
|
2
|
|
1152
1196
|
)}
|
|
1197
|
+
`
|
|
1198
|
+
);
|
|
1199
|
+
await writeFile(
|
|
1200
|
+
path2.join(target, "pnpm-workspace.yaml"),
|
|
1201
|
+
`# Single-package workspace so pnpm 11 can apply per-project settings.
|
|
1202
|
+
# allowBuilds replaces the pre-v11 onlyBuiltDependencies list.
|
|
1203
|
+
allowBuilds:
|
|
1204
|
+
esbuild: true
|
|
1153
1205
|
`
|
|
1154
1206
|
);
|
|
1155
1207
|
await writeFile(
|
|
1156
1208
|
path2.join(target, "tsconfig.json"),
|
|
1157
|
-
|
|
1209
|
+
`${JSON.stringify(
|
|
1210
|
+
{
|
|
1211
|
+
compilerOptions: {
|
|
1212
|
+
target: "ES2022",
|
|
1213
|
+
lib: ["DOM", "DOM.Iterable", "ES2022"],
|
|
1214
|
+
module: "NodeNext",
|
|
1215
|
+
moduleResolution: "NodeNext",
|
|
1216
|
+
jsx: "react-jsx",
|
|
1217
|
+
rootDir: "src",
|
|
1218
|
+
outDir: "dist",
|
|
1219
|
+
declaration: true,
|
|
1220
|
+
declarationMap: true,
|
|
1221
|
+
sourceMap: true,
|
|
1222
|
+
strict: true,
|
|
1223
|
+
noUncheckedIndexedAccess: true,
|
|
1224
|
+
esModuleInterop: true,
|
|
1225
|
+
skipLibCheck: true,
|
|
1226
|
+
forceConsistentCasingInFileNames: true,
|
|
1227
|
+
resolveJsonModule: true,
|
|
1228
|
+
types: ["node"]
|
|
1229
|
+
},
|
|
1230
|
+
include: ["src"]
|
|
1231
|
+
},
|
|
1232
|
+
null,
|
|
1233
|
+
2
|
|
1234
|
+
)}
|
|
1235
|
+
`
|
|
1158
1236
|
);
|
|
1159
1237
|
await writeFile(
|
|
1160
1238
|
path2.join(target, "src", "manifest.ts"),
|
|
@@ -1515,6 +1593,7 @@ export { manifest, pageConfig, layoutConfig, defaultLayout, starterPages };
|
|
|
1515
1593
|
`# Suda Theme Agent Guide
|
|
1516
1594
|
|
|
1517
1595
|
This directory is a Suda theme source project generated by \`suda theme init\`.
|
|
1596
|
+
It is a **standalone** npm package \u2014 it does not depend on the SudaCloud monorepo.
|
|
1518
1597
|
|
|
1519
1598
|
## What to edit
|
|
1520
1599
|
|
|
@@ -1522,6 +1601,7 @@ This directory is a Suda theme source project generated by \`suda theme init\`.
|
|
|
1522
1601
|
- Add starter pages in \`src/templates.ts\` to show realistic section combinations.
|
|
1523
1602
|
- Keep shared site chrome in \`src/layout.tsx\`; \`PageOutlet\` is where page content renders.
|
|
1524
1603
|
- Keep \`src/index.tsx\` exporting the source \`ThemeModule\`. The final artifact is produced by \`suda theme build\`.
|
|
1604
|
+
- All relative imports under \`src/\` MUST include the \`.js\` extension (NodeNext ESM resolution).
|
|
1525
1605
|
|
|
1526
1606
|
## Page content rules
|
|
1527
1607
|
|
|
@@ -1534,9 +1614,11 @@ This directory is a Suda theme source project generated by \`suda theme init\`.
|
|
|
1534
1614
|
## Useful commands
|
|
1535
1615
|
|
|
1536
1616
|
\`\`\`bash
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
suda theme
|
|
1617
|
+
pnpm install
|
|
1618
|
+
pnpm typecheck
|
|
1619
|
+
pnpm build # tsc + suda theme build --skip-theme-build
|
|
1620
|
+
pnpm validate
|
|
1621
|
+
pnpm preview
|
|
1540
1622
|
suda agent theme describe local --theme-root .
|
|
1541
1623
|
suda agent section schema --theme local --section Hero --theme-root .
|
|
1542
1624
|
suda agent page validate --theme local --input ./page.json --theme-root .
|
|
@@ -1554,14 +1636,23 @@ Read \`AGENTS.md\` first. It is the canonical guide for this Suda theme project.
|
|
|
1554
1636
|
path2.join(target, "README.md"),
|
|
1555
1637
|
`# ${key}
|
|
1556
1638
|
|
|
1557
|
-
A Suda theme scaffolded with \`suda theme init\`.
|
|
1639
|
+
A Suda theme scaffolded with \`suda theme init\`. This is a standalone
|
|
1640
|
+
package; it does not need to live inside the SudaCloud monorepo.
|
|
1641
|
+
|
|
1642
|
+
## Setup
|
|
1643
|
+
|
|
1644
|
+
\`\`\`bash
|
|
1645
|
+
pnpm install
|
|
1646
|
+
\`\`\`
|
|
1558
1647
|
|
|
1559
1648
|
## Develop
|
|
1560
1649
|
|
|
1561
1650
|
\`\`\`bash
|
|
1562
|
-
|
|
1563
|
-
suda theme
|
|
1564
|
-
|
|
1651
|
+
pnpm typecheck # type-check sources
|
|
1652
|
+
pnpm build # tsc + suda theme build (server bundle + client runtime + manifest)
|
|
1653
|
+
pnpm dev # watch the browser runtime
|
|
1654
|
+
pnpm preview # build and preview the home starter page
|
|
1655
|
+
pnpm validate # validate the dist artifact
|
|
1565
1656
|
\`\`\`
|
|
1566
1657
|
|
|
1567
1658
|
## Agent tooling
|
|
@@ -1575,7 +1666,7 @@ suda agent section schema --theme local --section Hero --theme-root .
|
|
|
1575
1666
|
## Publish
|
|
1576
1667
|
|
|
1577
1668
|
\`\`\`bash
|
|
1578
|
-
|
|
1669
|
+
pnpm build
|
|
1579
1670
|
suda theme screenshot # optional: capture dist/preview/desktop.png
|
|
1580
1671
|
suda theme publish
|
|
1581
1672
|
\`\`\`
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/auth.ts","../src/index.ts"],"names":["path","esbuild","context","esbuildContext"],"mappings":"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","file":"index.js","sourcesContent":["import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\ninterface AuthConfig {\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\nexport async function login(host: string = \"app.sudayun.cn\") {\n const protocol = host.includes(\"localhost\") || host.includes(\"127.0.0.1\") ? \"http\" : \"https\";\n const baseUrl = `${protocol}://${host}`;\n\n console.log(`Requesting device authorization from ${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(` ${authUrl}\\n`);\n console.log(`Your confirmation code is: ${userCode}\\n`);\n console.log(\"Waiting for authorization...\");\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 deadline = Date.now() + (expiresIn || 900) * 1000;\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(\"✅ 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(\"Not logged in. Run `suda auth login` to authenticate.\");\n return;\n }\n\n const protocol = config.host.includes(\"localhost\") || config.host.includes(\"127.0.0.1\") ? \"http\" : \"https\";\n \n try {\n const res = await fetch(`${protocol}://${config.host}/api/auth/get-session`, {\n headers: {\n Authorization: `Bearer ${config.sessionToken}`,\n },\n });\n\n if (res.ok) {\n const session = (await res.json()) as { user: { email?: string; name?: string } };\n console.log(`Logged in as ${session.user.email || session.user.name} on ${config.host}`);\n } else {\n console.log(\"Session expired or invalid. Please run `suda auth login` again.\");\n await clearAuthConfig();\n }\n } catch {\n console.error(`Failed to connect to ${config.host}.`);\n }\n}\n\nexport async function logout() {\n const config = await readAuthConfig();\n if (!config) {\n console.log(\"Not logged in.\");\n return;\n }\n \n await clearAuthConfig();\n console.log(\"Logged out successfully.\");\n}\n","#!/usr/bin/env node\n\nimport { createHash } from \"node:crypto\";\nimport { mkdir, readFile, readdir, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { 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 createAgentComponentSchemaOutput,\n createAgentPageSchemaOutput,\n createPageDataFromAgentContent,\n createThemeAgentManifest,\n findAgentSection,\n validateAgentPageContentWithManifest,\n} from \"@sudajs/theme-engine\";\nimport { ThemeRender, extractLayoutChrome } from \"@sudajs/theme-engine/server\";\nimport { Command } from \"commander\";\nimport { build as esbuild, context as esbuildContext, type Plugin } from \"esbuild\";\nimport { createElement } from \"react\";\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport { z } from \"zod\";\n\ninterface ValidatedTheme {\n root: string;\n module: ThemeModule;\n serverEntryPath: string;\n clientEntryPath: string | null;\n stylesheetPath: string | null;\n}\n\ninterface UploadFile {\n absolutePath: string;\n relativePath: string;\n contentType: string;\n}\n\ninterface ThemeRootOptions {\n themeRoot?: string | undefined;\n}\n\ninterface BuildOptions extends ThemeRootOptions {\n skipThemeBuild?: boolean;\n}\n\ninterface PublishOptions extends ThemeRootOptions {\n skipBuild?: boolean;\n bucket?: string;\n}\n\ninterface PreviewOptions extends ThemeRootOptions {\n port?: string;\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}\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\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\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 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\nimport { login, status, logout, readAuthConfig } from \"./auth\";\n\nfunction resolveThemeRoot(options: ThemeRootOptions): string {\n return path.resolve(options.themeRoot ?? process.cwd());\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 { error?: string; message?: string };\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(process.env.XDG_CACHE_HOME ?? path.join(process.env.HOME ?? \".\", \".cache\"), \"suda\", \"agent\");\n}\n\nfunction cachedThemeManifestPath(themeKey: string, version: string): string {\n return path.join(agentCacheDir(), \"themes\", safeObjectKeyPart(themeKey), safeObjectKeyPart(version), \"agent-manifest.json\");\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 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 !== \"dist/index.js\") {\n throw new Error('manifest.entry must be artifact-local: \"dist/index.js\".');\n }\n if (\n module.manifest.clientEntry !== undefined &&\n module.manifest.clientEntry !== \"dist/runtime.client.js\"\n ) {\n throw new Error(\n 'manifest.clientEntry must be artifact-local: \"dist/runtime.client.js\" when provided.',\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}\n\nasync 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, \"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\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\nasync function runCommand(command: string, args: string[], cwd: string): Promise<void> {\n const { spawn } = await import(\"node:child_process\");\n await new Promise<void>((resolve, reject) => {\n const child = spawn(command, args, { cwd, stdio: \"inherit\" });\n child.on(\"error\", reject);\n child.on(\"exit\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`${command} ${args.join(\" \")} exited with ${code ?? \"unknown\"}.`));\n }\n });\n });\n}\n\nasync function runThemePackageBuild(root: string): Promise<void> {\n const packageJson = await readJson<{ scripts?: Record<string, string> }>(\n path.join(root, \"package.json\"),\n );\n const buildScript = packageJson.scripts?.build;\n if (!buildScript || buildScript.includes(\"suda theme\") || buildScript.includes(\"suda-theme\")) {\n return;\n }\n await runCommand(\"pnpm\", [\"--dir\", root, \"run\", \"build\"], process.cwd());\n}\n\nasync function findClientEntry(root: string): Promise<string> {\n const candidates = [\n path.join(root, \"src\", \"runtime.client.tsx\"),\n path.join(root, \"src\", \"runtime.client.ts\"),\n ];\n for (const candidate of candidates) {\n if (await pathExists(candidate)) {\n return candidate;\n }\n }\n throw new Error(`Missing runtime entry. Add src/runtime.client.ts(x) in ${root}.`);\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\nasync function buildServerBundle(root: string): Promise<void> {\n const entryPoint = await findServerEntry(root);\n\n await esbuild({\n bundle: true,\n entryPoints: [entryPoint],\n external: [\n \"react\",\n \"react/jsx-runtime\",\n \"react-dom\",\n \"react-dom/*\",\n \"@puckeditor/core\",\n \"@puckeditor/core/*\",\n \"@sudajs/theme-engine\",\n \"@sudajs/theme-engine/*\",\n ],\n format: \"esm\",\n jsx: \"automatic\",\n minify: false,\n outfile: path.join(root, \"dist\", \"index.js\"),\n platform: \"node\",\n sourcemap: false,\n target: \"es2022\",\n treeShaking: true,\n });\n}\n\nasync function buildTheme(root: string, skipThemeBuild: boolean): Promise<ValidatedTheme> {\n if (!skipThemeBuild) {\n await runThemePackageBuild(root);\n }\n\n await buildServerBundle(root);\n\n const entryPoint = await findClientEntry(root);\n if (!(await pathExists(entryPoint))) {\n throw new Error(`Missing client entry: ${entryPoint}`);\n }\n\n await mkdir(path.join(root, \"dist\"), { recursive: true });\n const hostReactShimPlugin = createHostReactShimPlugin();\n await esbuild({\n bundle: true,\n entryPoints: [entryPoint],\n format: \"esm\",\n jsx: \"automatic\",\n minify: true,\n outfile: path.join(root, \"dist\", \"runtime.client.js\"),\n platform: \"browser\",\n plugins: [hostReactShimPlugin],\n sourcemap: false,\n target: \"es2022\",\n treeShaking: true,\n });\n\n const validated = await validateTheme(root);\n await writeThemeArtifacts(validated);\n return validateTheme(root);\n}\n\nasync function watchTheme(root: string, skipThemeBuild: boolean): Promise<void> {\n if (!skipThemeBuild) {\n await runThemePackageBuild(root);\n }\n\n await buildServerBundle(root);\n\n const entryPoint = await findClientEntry(root);\n await mkdir(path.join(root, \"dist\"), { recursive: true });\n const hostReactShimPlugin = createHostReactShimPlugin();\n\n const context = await esbuildContext({\n bundle: true,\n entryPoints: [entryPoint],\n format: \"esm\",\n jsx: \"automatic\",\n minify: false,\n outfile: path.join(root, \"dist\", \"runtime.client.js\"),\n platform: \"browser\",\n plugins: [hostReactShimPlugin],\n sourcemap: true,\n target: \"es2022\",\n treeShaking: true,\n });\n await context.watch();\n console.log(\"watching theme runtime; press Ctrl+C to stop\");\n await new Promise(() => undefined);\n}\n\ninterface PreviewServerHandle {\n url: string;\n port: number;\n close: () => Promise<void>;\n}\n\nfunction pickStarterPage(theme: ValidatedTheme): ThemeStarterPage | 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] ?? null;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction renderStarterPageHtml(theme: ValidatedTheme, page: ThemeStarterPage): string {\n const chrome = extractLayoutChrome(theme.module.defaultLayout);\n const body = renderToStaticMarkup(\n createElement(ThemeRender, {\n theme: theme.module,\n pageData: page.data,\n layoutData: theme.module.defaultLayout,\n }),\n );\n const cssVarStyle = Object.entries(chrome.cssVariables)\n .map(([key, value]) => `${key}: ${value};`)\n .join(\" \");\n const stylesheetTag = theme.stylesheetPath\n ? '<link rel=\"stylesheet\" href=\"/styles.css\" />'\n : \"\";\n const customHead = chrome.customHeadCode ?? \"\";\n const customBody = chrome.customBodyCode ?? \"\";\n return [\n \"<!doctype html>\",\n '<html lang=\"en\">',\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 stylesheetTag,\n customHead,\n \"</head>\",\n `<body${cssVarStyle ? ` style=\"${cssVarStyle}\"` : \"\"}>`,\n body,\n customBody,\n \"</body>\",\n \"</html>\",\n ].join(\"\");\n}\n\nasync function startPreviewServer(\n theme: ValidatedTheme,\n port: number,\n): Promise<PreviewServerHandle> {\n const { createServer } = await import(\"node:http\");\n const starterPage = pickStarterPage(theme);\n const server = createServer((request, response) => {\n void (async () => {\n const url = new URL(request.url ?? \"/\", `http://localhost:${port}`);\n const pathname = url.pathname;\n\n if (pathname === \"/\" || pathname === \"/index.html\") {\n if (!starterPage) {\n response.writeHead(404, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(\"No starter page available for preview.\");\n return;\n }\n response.writeHead(200, { \"Content-Type\": \"text/html; charset=utf-8\" });\n response.end(renderStarterPageHtml(theme, starterPage));\n return;\n }\n\n if (pathname === \"/styles.css\" && theme.stylesheetPath) {\n response.writeHead(200, { \"Content-Type\": \"text/css; charset=utf-8\" });\n response.end(await readFile(theme.stylesheetPath));\n return;\n }\n\n const relativePath = pathname.replace(/^\\/+/, \"\");\n const filePath = path.resolve(theme.root, relativePath);\n const normalizedRoot = path.resolve(theme.root) + path.sep;\n if (!filePath.startsWith(normalizedRoot) || !(await pathExists(filePath))) {\n response.writeHead(404, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(\"Not found\");\n return;\n }\n response.writeHead(200, { \"Content-Type\": contentTypeFor(relativePath) });\n response.end(await readFile(filePath));\n })().catch((error) => {\n response.writeHead(500, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(error instanceof Error ? error.message : \"Internal error\");\n });\n });\n\n await new Promise<void>((resolve, reject) => {\n const onError = (err: Error): void => {\n reject(err);\n };\n server.once(\"error\", onError);\n server.listen(port, () => {\n server.off(\"error\", onError);\n resolve();\n });\n });\n\n return {\n url: `http://localhost:${port}`,\n port,\n close: () =>\n new Promise<void>((resolve) => {\n server.close(() => {\n resolve();\n });\n }),\n };\n}\n\nasync function previewTheme(root: string, port: number): Promise<void> {\n const theme = await buildTheme(root, false);\n const handle = await startPreviewServer(theme, port);\n console.log(\n `previewing ${theme.module.manifest.key}@${theme.module.manifest.version} at ${handle.url}`,\n );\n await new Promise(() => undefined);\n}\n\ninterface ScreenshotOptions extends ThemeRootOptions {\n output?: string;\n width?: string;\n height?: string;\n port?: string;\n skipBuild?: boolean;\n}\n\ninterface ResolvedScreenshotOptions {\n outputPath: string;\n viewport: { width: number; height: number };\n port: number;\n skipBuild: boolean;\n}\n\nconst DEFAULT_SCREENSHOT_RELATIVE = path.join(\"dist\", \"preview\", \"desktop.png\");\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 return {\n outputPath: path.resolve(root, options.output ?? DEFAULT_SCREENSHOT_RELATIVE),\n viewport: {\n width: parsePositiveInt(options.width, 1280),\n height: parsePositiveInt(options.height, 800),\n },\n port: parsePositiveInt(options.port, 4178),\n skipBuild: options.skipBuild === 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\nasync function loadPlaywright(): 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 candidates = [\"playwright\", \"@playwright/test\"];\n for (const id of candidates) {\n try {\n const mod: unknown = await import(/* @vite-ignore */ id);\n return mod as PlaywrightModule;\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\nasync function captureScreenshot(\n theme: ValidatedTheme,\n options: ResolvedScreenshotOptions,\n): Promise<void> {\n const playwright = await loadPlaywright();\n const handle = await startPreviewServer(theme, options.port);\n try {\n await mkdir(path.dirname(options.outputPath), { recursive: true });\n const browser = await playwright.chromium.launch({ headless: true });\n try {\n const context = await browser.newContext({\n viewport: options.viewport,\n deviceScaleFactor: 1,\n });\n const page = await context.newPage();\n await page.goto(handle.url, { waitUntil: \"networkidle\" });\n await page.screenshot({ path: options.outputPath, fullPage: false });\n await context.close();\n } finally {\n await browser.close();\n }\n } finally {\n await handle.close();\n }\n console.log(`captured ${path.relative(theme.root, options.outputPath)}`);\n}\n\nasync function screenshotTheme(root: string, options: ScreenshotOptions): Promise<void> {\n const resolved = resolveScreenshotOptions(root, options);\n const theme = resolved.skipBuild ? await validateTheme(root) : await buildTheme(root, false);\n await captureScreenshot(theme, resolved);\n}\n\nasync function loadLocalAgentManifest(root: string): Promise<ThemeAgentManifest> {\n const built = await readJsonIfExists<ThemeAgentManifest>(path.join(root, \"dist\", \"agent-manifest.json\"));\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(path.join(agentCacheDir(), \"catalog.json\"), `${JSON.stringify(catalog, null, 2)}\\n`);\n return catalog.themes;\n}\n\nasync function fetchAgentManifest(\n themeKey: string,\n options: AgentThemeOptions,\n): Promise<ThemeAgentManifest> {\n if (options.themeRoot) {\n return loadLocalAgentManifest(resolveThemeRoot(options));\n }\n\n const auth = await requireCliBaseUrl();\n const version = options.version ?? \"latest\";\n const cachePath = cachedThemeManifestPath(themeKey, version);\n const cached = version === \"latest\" ? null : await readJsonIfExists<ThemeAgentManifest>(cachePath);\n if (cached) {\n return cached;\n }\n\n const url = new URL(`/api/cli/agent/themes/${encodeURIComponent(themeKey)}/${encodeURIComponent(version)}/schema`, auth.baseUrl);\n if (options.projectId) {\n url.searchParams.set(\"projectId\", options.projectId);\n }\n const result = await fetchJson<{ agentManifest: ThemeAgentManifest }>(url.href, { token: auth.token });\n const realVersion = result.agentManifest.manifest.version;\n const realCachePath = cachedThemeManifestPath(themeKey, 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\nfunction printJson(value: unknown): void {\n console.log(JSON.stringify(value, null, 2));\n}\n\nfunction createSectionSchema(manifest: ThemeAgentManifest, sectionType: string): AgentComponentOutput {\n const section = findAgentSection(manifest, sectionType);\n if (!section) {\n throw new Error(`Unknown section type \"${sectionType}\".`);\n }\n return createAgentComponentSchemaOutput(section, \"section\");\n}\n\nasync function validateAgentPage(themeKey: string, input: string, options: AgentThemeOptions): Promise<void> {\n const manifest = await fetchAgentManifest(themeKey, options);\n const pageContent = await readJson<unknown>(path.resolve(input));\n const result = validateAgentPageContentWithManifest(pageContent, manifest);\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 validation = validateAgentPageContentWithManifest(pageContent, manifest);\n if (!validation.valid) {\n printJson(agentValidationResultSchema.parse(validation));\n process.exitCode = 1;\n return;\n }\n const pageData = createPageDataFromAgentContent(pageContent);\n\n const auth = await requireCliBaseUrl();\n const response = await fetchJson<{ pageId: string }>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(options.projectId)}/pages`,\n {\n method: \"POST\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n title: options.title,\n slug: options.slug,\n themeKey: manifest.manifest.key,\n themeVersion: manifest.manifest.version,\n data: pageData,\n }),\n },\n );\n printJson({ success: true, ...response });\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_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 AI-first output schema for generating Suda page content, including all section schemas.\",\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 = createAgentPageSchemaOutput(manifest, {\n includeExample: includeExample === true,\n });\n return mcpStructured(\"AI-first Suda page content output schema.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"get_section_schema\",\n {\n description: \"Return the AI-first output schema for one section component in a theme.\",\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(\"AI-first Suda section output schema.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"validate_page_config\",\n {\n description: \"Validate AI-generated Suda page content against a theme.\",\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 validateAgentPageContentWithManifest(data, manifest),\n );\n return mcpStructured(\"Suda page content validation result.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"create_page_draft\",\n {\n description: \"Create a workspace page draft from AI-generated Suda page content.\",\n inputSchema: {\n projectId: z.string(),\n title: z.string(),\n slug: z.string(),\n theme: z.string(),\n data: z.unknown(),\n version: z.string().optional(),\n },\n outputSchema: createPageDraftOutputSchema,\n },\n async ({ projectId, title, slug, theme, data, version }) => {\n const manifest = await fetchAgentManifest(theme, { version, projectId });\n const validation = validateAgentPageContentWithManifest(data, manifest);\n if (!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: validation.issues,\n }),\n );\n }\n const auth = await requireCliBaseUrl();\n const response = await fetchJson<{ pageId: string }>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(projectId)}/pages`,\n {\n method: \"POST\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n title,\n slug,\n themeKey: manifest.manifest.key,\n themeVersion: manifest.manifest.version,\n data: createPageDataFromAgentContent(data),\n }),\n },\n );\n return mcpStructured(\n \"Created Suda page draft.\",\n createPageDraftOutputSchema.parse({ status: \"created\", ...response }),\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 await writeFile(\n path.join(dist, \"manifest.json\"),\n `${JSON.stringify(theme.module.manifest, null, 2)}\\n`,\n );\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, \"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\")) {\n return \"application/javascript; 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 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 files.push({\n absolutePath,\n relativePath,\n contentType: contentTypeFor(relativePath),\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 if (theme.stylesheetPath) {\n files.push({\n absolutePath: theme.stylesheetPath,\n relativePath: \"styles.css\",\n contentType: \"text/css; charset=utf-8\",\n });\n }\n return files;\n}\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\nasync function publishTheme(\n root: string,\n skipBuild: boolean,\n): Promise<void> {\n const theme = skipBuild ? await validateTheme(root) : await buildTheme(root, false);\n const files = await collectThemeArtifactFiles(theme);\n if (!theme.clientEntryPath) {\n throw new Error(\"Missing dist/runtime.client.js. Run `suda theme build` first.\");\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\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 files: files.map((f) => ({ relativePath: f.relativePath, contentType: f.contentType })),\n }),\n });\n\n if (!intentRes.ok) {\n const errorData = (await intentRes.json().catch(() => ({}))) as { error?: string };\n throw new Error(`Failed to get publish intent: ${errorData.error || intentRes.statusText}`);\n }\n\n const { urls } = (await intentRes.json()) as { urls: Array<{ relativePath: string; url: string }> };\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 putRes = await fetch(urlObj.url, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": file.contentType,\n },\n body,\n });\n\n if (!putRes.ok) {\n throw new Error(`Failed to upload ${file.relativePath}: ${putRes.statusText}`);\n }\n console.log(`uploaded ${createThemeObjectKey(key, version, file.relativePath)}`);\n }\n\n const digest = await checksum(files);\n const bundleArtifactRelative = \"dist/index.js\";\n const bundleArtifactExists = files.some((f) => f.relativePath === bundleArtifactRelative);\n if (!bundleArtifactExists) {\n throw new Error(`Missing ${bundleArtifactRelative} in theme artifacts.`);\n }\n\n const previewArtifactRelative = \"dist/preview/desktop.png\";\n const previewArtifactExists = await pathExists(path.join(theme.root, previewArtifactRelative));\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: previewArtifactExists ? previewArtifactRelative : undefined,\n }),\n });\n\n if (!completeRes.ok) {\n const errorData = (await completeRes.json().catch(() => ({}))) as { error?: string };\n throw new Error(`Failed to complete publish: ${errorData.error || completeRes.statusText}`);\n }\n\n console.log(`published ${key}@${version}`);\n}\n\nasync function initTheme(target: string): Promise<void> {\n const key = path\n .basename(target)\n .replace(/[^a-zA-Z0-9._-]/g, \"-\")\n .toLowerCase();\n await mkdir(path.join(target, \"src\"), { recursive: true });\n await writeFile(\n path.join(target, \"package.json\"),\n `${JSON.stringify(\n {\n name: `@suda-themes/${key}`,\n version: \"0.1.0\",\n private: true,\n type: \"module\",\n main: \"./dist/index.js\",\n types: \"./dist/index.d.ts\",\n scripts: {\n build: \"tsc -p tsconfig.json\",\n typecheck: \"tsc -p tsconfig.json --noEmit\",\n },\n dependencies: { \"@sudajs/theme-engine\": \"workspace:*\" },\n peerDependencies: {\n \"@puckeditor/core\": \"^0.21.2\",\n react: \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n },\n },\n null,\n 2,\n )}\\n`,\n );\n await writeFile(\n path.join(target, \"tsconfig.json\"),\n '{\\n \"extends\": \"@suda/tsconfig/node.json\",\\n \"compilerOptions\": { \"lib\": [\"DOM\", \"DOM.Iterable\", \"ES2022\"], \"jsx\": \"react-jsx\", \"rootDir\": \"src\", \"outDir\": \"dist\" },\\n \"include\": [\"src\"]\\n}\\n',\n );\n await writeFile(\n path.join(target, \"src\", \"manifest.ts\"),\n `import type { ThemeManifest } from \"@sudajs/theme-engine\";\\n\\nexport const manifest: ThemeManifest = {\\n key: \"${key}\",\\n name: \"${key}\",\\n version: \"0.1.0\",\\n categories: [\"other\"],\\n minEngineVersion: \"0.0.0\",\\n entry: \"dist/index.js\",\\n clientEntry: \"dist/runtime.client.js\",\\n};\\n`,\n );\n await writeFile(\n path.join(target, \"src\", \"sections.tsx\"),\n `import type { ComponentConfig } from \"@puckeditor/core\";\\n\\nexport const Hero: ComponentConfig = {\\n label: \"Hero\",\\n fields: {\\n eyebrow: { type: \"text\", label: \"Eyebrow\" },\\n title: { type: \"text\", label: \"Title\" },\\n description: { type: \"textarea\", label: \"Description\" },\\n primaryLabel: { type: \"text\", label: \"Primary button label\" },\\n primaryHref: { type: \"text\", label: \"Primary button link\" },\\n },\\n defaultProps: {\\n eyebrow: \"New theme\",\\n title: \"Build with SudaCloud\",\\n description: \"Edit this starter section in the visual editor.\",\\n primaryLabel: \"Get started\",\\n primaryHref: \"#contact\",\\n },\\n render: ({ eyebrow, title, description, primaryLabel, primaryHref }) => (\\n <section className=\"${key}-section ${key}-hero\">\\n <p className=\"${key}-eyebrow\">{eyebrow}</p>\\n <h1>{title}</h1>\\n <p>{description}</p>\\n <a className=\"${key}-button\" href={primaryHref}>{primaryLabel}</a>\\n </section>\\n ),\\n};\\n\\nexport const FeatureGrid: ComponentConfig = {\\n label: \"Feature grid\",\\n fields: {\\n title: { type: \"text\", label: \"Title\" },\\n description: { type: \"textarea\", label: \"Description\" },\\n features: {\\n type: \"array\",\\n label: \"Features\",\\n arrayFields: {\\n title: { type: \"text\", label: \"Title\" },\\n description: { type: \"textarea\", label: \"Description\" },\\n },\\n },\\n },\\n defaultProps: {\\n title: \"Everything you need to launch\",\\n description: \"Use this section to explain the core value of the project.\",\\n features: [\\n { title: \"Fast setup\", description: \"Start from a clean theme contract.\" },\\n { title: \"Visual editing\", description: \"Expose content fields through Puck.\" },\\n { title: \"Publish ready\", description: \"Build and publish with the Suda CLI.\" },\\n ],\\n },\\n render: ({ title, description, features = [] }) => (\\n <section className=\"${key}-section\">\\n <h2>{title}</h2>\\n <p>{description}</p>\\n <div className=\"${key}-grid\">\\n {features.map((feature: { title?: string; description?: string }, index: number) => (\\n <article className=\"${key}-card\" key={index}>\\n <h3>{feature.title}</h3>\\n <p>{feature.description}</p>\\n </article>\\n ))}\\n </div>\\n </section>\\n ),\\n};\\n\\nexport const Testimonial: ComponentConfig = {\\n label: \"Testimonial\",\\n fields: {\\n quote: { type: \"textarea\", label: \"Quote\" },\\n author: { type: \"text\", label: \"Author\" },\\n role: { type: \"text\", label: \"Role\" },\\n },\\n defaultProps: {\\n quote: \"SudaCloud gives our team a practical editing workflow without giving up theme control.\",\\n author: \"Alex Chen\",\\n role: \"Founder\",\\n },\\n render: ({ quote, author, role }) => (\\n <section className=\"${key}-section ${key}-quote\">\\n <blockquote>{quote}</blockquote>\\n <p>{author} · {role}</p>\\n </section>\\n ),\\n};\\n\\nexport const CallToAction: ComponentConfig = {\\n label: \"Call to action\",\\n fields: {\\n title: { type: \"text\", label: \"Title\" },\\n description: { type: \"textarea\", label: \"Description\" },\\n buttonLabel: { type: \"text\", label: \"Button label\" },\\n buttonHref: { type: \"text\", label: \"Button link\" },\\n },\\n defaultProps: {\\n title: \"Ready to build your next page?\",\\n description: \"Use this section as the final conversion block.\",\\n buttonLabel: \"Contact us\",\\n buttonHref: \"#contact\",\\n },\\n render: ({ title, description, buttonLabel, buttonHref }) => (\\n <section className=\"${key}-section ${key}-cta\" id=\"contact\">\\n <h2>{title}</h2>\\n <p>{description}</p>\\n <a className=\"${key}-button\" href={buttonHref}>{buttonLabel}</a>\\n </section>\\n ),\\n};\\n\\nexport const SECTION_COMPONENTS = { Hero, FeatureGrid, Testimonial, CallToAction };\\n`,\n );\n await writeFile(\n path.join(target, \"src\", \"layout.tsx\"),\n `import { getPageSlot } from \"@sudajs/theme-engine/runtime\";\\nimport type { ComponentConfig, Config } from \"@puckeditor/core\";\\nimport type { ReactElement, ReactNode } from \"react\";\\n\\ntype PuckExtras = { puck?: { metadata?: Record<string, unknown> } };\\n\\nexport const rootConfig: NonNullable<Config[\"root\"]> = {\\n fields: {\\n siteName: { type: \"text\", label: \"Site name\" },\\n },\\n defaultProps: { siteName: \"${key}\" },\\n render: ({ children, siteName }: { children?: ReactNode; siteName?: string }) => (\\n <div className=\"${key}-root\" data-site-name={siteName}>{children}</div>\\n ),\\n};\\n\\nexport const Header: ComponentConfig = {\\n label: \"Header\",\\n fields: { siteName: { type: \"text\", label: \"Site name\" } },\\n defaultProps: { siteName: \"${key}\" },\\n render: ({ siteName }) => <header className=\"${key}-header\">{siteName}</header>,\\n};\\n\\nexport const PageOutlet: ComponentConfig = {\\n label: \"Page outlet\",\\n fields: {},\\n defaultProps: {},\\n render: (props: PuckExtras): ReactElement => <>{getPageSlot(props.puck?.metadata)}</>,\\n};\\n\\nexport const Footer: ComponentConfig = {\\n label: \"Footer\",\\n fields: { text: { type: \"text\", label: \"Text\" } },\\n defaultProps: { text: \"© ${key}\" },\\n render: ({ text }) => <footer className=\"${key}-footer\">{text}</footer>,\\n};\\n\\nexport const LAYOUT_COMPONENTS = { Header, PageOutlet, Footer };\\n`,\n );\n await writeFile(\n path.join(target, \"src\", \"config.ts\"),\n `import type { Config, Data } from \"@puckeditor/core\";\\n\\nimport { LAYOUT_COMPONENTS, rootConfig } from \"./layout.js\";\\nimport { SECTION_COMPONENTS } from \"./sections.js\";\\n\\nexport const pageConfig: Config = {\\n components: SECTION_COMPONENTS,\\n};\\n\\nexport const layoutConfig: Config = {\\n root: rootConfig,\\n components: LAYOUT_COMPONENTS,\\n};\\n\\nexport const defaultLayout: Data = {\\n root: { props: { siteName: \"${key}\" } },\\n content: [\\n { type: \"Header\", props: { id: \"Header-1\", siteName: \"${key}\" } },\\n { type: \"PageOutlet\", props: { id: \"PageOutlet-1\" } },\\n { type: \"Footer\", props: { id: \"Footer-1\", text: \"© ${key}\" } },\\n ],\\n};\\n`,\n );\n await writeFile(\n path.join(target, \"src\", \"templates.ts\"),\n `import type { ThemeStarterPage } from \"@sudajs/theme-engine\";\\n\\nexport const starterPages: ThemeStarterPage[] = [\\n {\\n slug: \"home\",\\n title: \"Home\",\\n isHome: true,\\n data: {\\n root: { props: {} },\\n content: [\\n {\\n type: \"Hero\",\\n props: {\\n id: \"Hero-1\",\\n eyebrow: \"Starter page\",\\n title: \"Welcome to ${key}\",\\n description: \"This page was generated by suda theme init.\",\\n primaryLabel: \"Explore features\",\\n primaryHref: \"#features\",\\n },\\n },\\n {\\n type: \"FeatureGrid\",\\n props: {\\n id: \"FeatureGrid-1\",\\n title: \"Designed for editable sites\",\\n description: \"Starter sections show agents and editors how this theme is structured.\",\\n features: [\\n { title: \"Typed fields\", description: \"Each section exposes a clear field schema.\" },\\n { title: \"Starter pages\", description: \"Templates show realistic section composition.\" },\\n { title: \"CLI workflow\", description: \"Build, validate, preview, and publish from one tool.\" },\\n ],\\n },\\n },\\n {\\n type: \"CallToAction\",\\n props: {\\n id: \"CallToAction-1\",\\n title: \"Launch your first page\",\\n description: \"Customize this starter template or let an agent generate a new draft.\",\\n buttonLabel: \"Get in touch\",\\n buttonHref: \"/contact\",\\n },\\n },\\n ],\\n },\\n },\\n {\\n slug: \"about\",\\n title: \"About\",\\n data: {\\n root: { props: {} },\\n content: [\\n {\\n type: \"Hero\",\\n props: {\\n id: \"Hero-About\",\\n eyebrow: \"About\",\\n title: \"A clean starting point for your story\",\\n description: \"Use this page to introduce the project, audience, and promise.\",\\n primaryLabel: \"Contact us\",\\n primaryHref: \"/contact\",\\n },\\n },\\n {\\n type: \"Testimonial\",\\n props: {\\n id: \"Testimonial-About\",\\n quote: \"This starter theme keeps the editable surface focused and predictable.\",\\n author: \"SudaCloud\",\\n role: \"Theme team\",\\n },\\n },\\n ],\\n },\\n },\\n {\\n slug: \"contact\",\\n title: \"Contact\",\\n data: {\\n root: { props: {} },\\n content: [\\n {\\n type: \"Hero\",\\n props: {\\n id: \"Hero-Contact\",\\n eyebrow: \"Contact\",\\n title: \"Let's talk\",\\n description: \"Tell visitors how to reach you and what happens next.\",\\n primaryLabel: \"Email us\",\\n primaryHref: \"mailto:hello@example.com\",\\n },\\n },\\n {\\n type: \"CallToAction\",\\n props: {\\n id: \"CallToAction-Contact\",\\n title: \"Start the conversation\",\\n description: \"Replace this copy with your preferred contact details or form link.\",\\n buttonLabel: \"Send an email\",\\n buttonHref: \"mailto:hello@example.com\",\\n },\\n },\\n ],\\n },\\n },\\n];\\n`,\n );\n await writeFile(\n path.join(target, \"src\", \"index.tsx\"),\n `import type { ThemeModule } from \"@sudajs/theme-engine\";\\n\\nimport { defaultLayout, layoutConfig, pageConfig } from \"./config.js\";\\nimport { manifest } from \"./manifest.js\";\\nimport { starterPages } from \"./templates.js\";\\n\\nconst theme: ThemeModule = {\\n manifest,\\n pageConfig,\\n layoutConfig,\\n defaultLayout,\\n starterPages,\\n};\\n\\nexport default theme;\\nexport { manifest, pageConfig, layoutConfig, defaultLayout, starterPages };\\n`,\n );\n await writeFile(\n path.join(target, \"src\", \"runtime.client.ts\"),\n '\"use client\";\\n\\nimport theme from \"./index.js\";\\n\\nexport default theme;\\n',\n );\n await writeFile(\n path.join(target, \"styles.css\"),\n `.${key}-root { font-family: Inter, ui-sans-serif, system-ui, sans-serif; color: #111827; background: #ffffff; }\\n.${key}-header, .${key}-footer { padding: 20px clamp(20px, 5vw, 64px); border-bottom: 1px solid #e5e7eb; }\\n.${key}-footer { border-top: 1px solid #e5e7eb; border-bottom: 0; color: #6b7280; }\\n.${key}-section { padding: 64px clamp(20px, 5vw, 64px); }\\n.${key}-hero { background: #f8fafc; }\\n.${key}-eyebrow { text-transform: uppercase; letter-spacing: 0.08em; font-size: 12px; color: #2563eb; font-weight: 700; }\\n.${key}-section h1 { max-width: 780px; font-size: clamp(40px, 7vw, 72px); line-height: 0.95; margin: 0 0 20px; }\\n.${key}-section h2 { max-width: 720px; font-size: 36px; line-height: 1.05; margin: 0 0 16px; }\\n.${key}-section p { max-width: 680px; line-height: 1.7; color: #4b5563; }\\n.${key}-button { display: inline-flex; align-items: center; min-height: 42px; padding: 0 18px; border-radius: 8px; background: #111827; color: #ffffff; text-decoration: none; font-weight: 700; }\\n.${key}-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; margin-top: 28px; }\\n.${key}-card { border: 1px solid #e5e7eb; border-radius: 8px; padding: 20px; }\\n.${key}-quote blockquote { max-width: 780px; font-size: 28px; line-height: 1.25; margin: 0 0 16px; }\\n.${key}-cta { background: #111827; color: #ffffff; }\\n.${key}-cta p { color: #d1d5db; }\\n.${key}-cta .${key}-button { background: #ffffff; color: #111827; }\\n`,\n );\n await writeFile(path.join(target, \".gitignore\"), \"node_modules\\ndist\\n*.tsbuildinfo\\n\");\n await writeFile(\n path.join(target, \"AGENTS.md\"),\n `# Suda Theme Agent Guide\\n\\nThis directory is a Suda theme source project generated by \\`suda theme init\\`.\\n\\n## What to edit\\n\\n- Add page sections in \\`src/sections.tsx\\` and register them in \\`SECTION_COMPONENTS\\`.\\n- Add starter pages in \\`src/templates.ts\\` to show realistic section combinations.\\n- Keep shared site chrome in \\`src/layout.tsx\\`; \\`PageOutlet\\` is where page content renders.\\n- Keep \\`src/index.tsx\\` exporting the source \\`ThemeModule\\`. The final artifact is produced by \\`suda theme build\\`.\\n\\n## Page content rules\\n\\n- Agent page files passed to \\`suda agent page validate/create\\` contain \\`content\\` and optional \\`zones\\` only.\n- Every \\`content[]\\` item must use a section type from \\`SECTION_COMPONENTS\\`.\\n- Every \\`content[]\\` item must include \\`props.id\\`.\\n- Prefer editing section props over changing render code when generating pages.\\n- Do not edit files under \\`dist/\\`; they are generated.\\n\\n## Useful commands\\n\\n\\`\\`\\`bash\\nsuda theme build\\nsuda theme validate\\nsuda theme preview\\nsuda agent theme describe local --theme-root .\\nsuda agent section schema --theme local --section Hero --theme-root .\\nsuda agent page validate --theme local --input ./page.json --theme-root .\\n\\`\\`\\`\\n`,\n );\n await writeFile(\n path.join(target, \"CLAUDE.md\"),\n `# Claude Code\\n\\nRead \\`AGENTS.md\\` first. It is the canonical guide for this Suda theme project.\\n`,\n );\n await writeFile(\n path.join(target, \"README.md\"),\n `# ${key}\\n\\nA Suda theme scaffolded with \\`suda theme init\\`.\\n\\n## Develop\\n\\n\\`\\`\\`bash\\nsuda theme build\\nsuda theme dev # rebuild the browser runtime on change\\nsuda theme preview # build and preview the home starter page\\n\\`\\`\\`\\n\\n## Agent tooling\\n\\n\\`\\`\\`bash\\nsuda agent theme describe local --theme-root .\\nsuda agent page schema local --theme-root .\\nsuda agent section schema --theme local --section Hero --theme-root .\\n\\`\\`\\`\\n\\n## Publish\\n\\n\\`\\`\\`bash\\nsuda theme build\\nsuda theme screenshot # optional: capture dist/preview/desktop.png\\nsuda theme publish\\n\\`\\`\\`\\n`,\n );\n console.log(`created theme scaffold at ${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(\"[dir]\", \"Theme directory to create.\", \"./theme\")\n .action(async (dir: string) => {\n await initTheme(path.resolve(dir));\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(`valid ${result.module.manifest.key}@${result.module.manifest.version}`);\n if (!result.clientEntryPath) {\n console.warn(\n \"warning: dist/runtime.client.js is missing; editor runtime will not load until `suda theme build` runs.\",\n );\n }\n });\n\n theme\n .command(\"build\")\n .description(\"Build server dist (via package script) and browser runtime.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\"--skip-theme-build\", \"Skip the theme package build script.\")\n .action(async (options: BuildOptions) => {\n const result = await buildTheme(resolveThemeRoot(options), options.skipThemeBuild === true);\n console.log(`built ${result.module.manifest.key}@${result.module.manifest.version}`);\n });\n\n theme\n .command(\"dev\")\n .description(\"Watch and rebuild the browser runtime.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\"--skip-theme-build\", \"Skip the theme package build script.\")\n .action(async (options: BuildOptions) => {\n await watchTheme(resolveThemeRoot(options), options.skipThemeBuild === true);\n });\n\n theme\n .command(\"preview\")\n .description(\"Build and serve the local theme artifact files.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\"--port <port>\", \"Preview server port.\", \"4177\")\n .action(async (options: PreviewOptions) => {\n const port = Number(options.port ?? \"4177\");\n await previewTheme(resolveThemeRoot(options), Number.isFinite(port) ? port : 4177);\n });\n\n theme\n .command(\"screenshot\")\n .description(\n \"Capture a desktop preview screenshot of the home starter page using Playwright.\",\n )\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\"--output <path>\", \"Output PNG path relative to theme root.\")\n .option(\"--width <px>\", \"Viewport width in pixels.\", \"1280\")\n .option(\"--height <px>\", \"Viewport height in pixels.\", \"800\")\n .option(\"--port <port>\", \"Preview server port used during capture.\", \"4178\")\n .option(\"--skip-build\", \"Skip rebuilding the theme before capturing.\")\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 .action(async (options: PublishOptions) => {\n await publishTheme(resolveThemeRoot(options), options.skipBuild === true);\n });\n\n const agent = program.command(\"agent\").description(\"Agent-friendly theme and page tooling.\");\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 AI-first page 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(createAgentPageSchemaOutput(manifest, { includeExample: options.example === true }));\n });\n\n const agentPage = agent.command(\"page\").description(\"AI-first page content tooling.\");\n\n agentPage\n .command(\"schema\")\n .description(\"Print the AI-first page content output 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(createAgentPageSchemaOutput(manifest, { includeExample: options.example === true }));\n });\n\n agentPage\n .command(\"validate\")\n .description(\"Validate an AI-generated 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(\"Create a workspace page draft from AI-generated Suda page content JSON.\")\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 .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 AI-first section output 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(\"--host <host>\", \"The SudaCloud workspace host to authenticate against.\", \"app.sudayun.cn\")\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/auth.ts","../src/index.ts"],"names":["path","esbuild","context","esbuildContext"],"mappings":"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","file":"index.js","sourcesContent":["import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\ninterface AuthConfig {\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\nexport async function login(host: string = \"app.sudayun.cn\") {\n const protocol = host.includes(\"localhost\") || host.includes(\"127.0.0.1\") ? \"http\" : \"https\";\n const baseUrl = `${protocol}://${host}`;\n\n console.log(`Requesting device authorization from ${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(` ${authUrl}\\n`);\n console.log(`Your confirmation code is: ${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(\"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(\"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(\"Not logged in. Run `suda auth login` to authenticate.\");\n return;\n }\n\n const protocol = config.host.includes(\"localhost\") || config.host.includes(\"127.0.0.1\") ? \"http\" : \"https\";\n \n try {\n const res = await fetch(`${protocol}://${config.host}/api/auth/get-session`, {\n headers: {\n Authorization: `Bearer ${config.sessionToken}`,\n },\n });\n\n if (res.ok) {\n const session = (await res.json()) as { user: { email?: string; name?: string } };\n console.log(`Logged in as ${session.user.email || session.user.name} on ${config.host}`);\n } else {\n console.log(\"Session expired or invalid. Please run `suda auth login` again.\");\n await clearAuthConfig();\n }\n } catch {\n console.error(`Failed to connect to ${config.host}.`);\n }\n}\n\nexport async function logout() {\n const config = await readAuthConfig();\n if (!config) {\n console.log(\"Not logged in.\");\n return;\n }\n \n await clearAuthConfig();\n console.log(\"Logged out successfully.\");\n}\n","#!/usr/bin/env node\n\nimport { createHash } from \"node:crypto\";\nimport { mkdir, readFile, readdir, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { 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 createAgentComponentSchemaOutput,\n createAgentPageSchemaOutput,\n createPageDataFromAgentContent,\n createThemeAgentManifest,\n findAgentSection,\n validateAgentPageContentWithManifest,\n} from \"@sudajs/theme-engine\";\nimport { ThemeRender, extractLayoutChrome } from \"@sudajs/theme-engine/server\";\nimport { Command } from \"commander\";\nimport { build as esbuild, context as esbuildContext, type Plugin } from \"esbuild\";\nimport { createElement } from \"react\";\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport { z } from \"zod\";\n\ninterface ValidatedTheme {\n root: string;\n module: ThemeModule;\n serverEntryPath: string;\n clientEntryPath: string | null;\n stylesheetPath: string | null;\n}\n\ninterface UploadFile {\n absolutePath: string;\n relativePath: string;\n contentType: string;\n}\n\ninterface ThemeRootOptions {\n themeRoot?: string | undefined;\n}\n\ninterface BuildOptions extends ThemeRootOptions {\n skipThemeBuild?: boolean;\n}\n\ninterface PublishOptions extends ThemeRootOptions {\n skipBuild?: boolean;\n bucket?: string;\n}\n\ninterface PreviewOptions extends ThemeRootOptions {\n port?: string;\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}\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\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\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 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\nimport { login, status, logout, readAuthConfig } from \"./auth\";\n\nfunction resolveThemeRoot(options: ThemeRootOptions): string {\n return path.resolve(options.themeRoot ?? process.cwd());\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 { error?: string; message?: string };\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(process.env.XDG_CACHE_HOME ?? path.join(process.env.HOME ?? \".\", \".cache\"), \"suda\", \"agent\");\n}\n\nfunction cachedThemeManifestPath(themeKey: string, version: string): string {\n return path.join(agentCacheDir(), \"themes\", safeObjectKeyPart(themeKey), safeObjectKeyPart(version), \"agent-manifest.json\");\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 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 !== \"dist/index.js\") {\n throw new Error('manifest.entry must be artifact-local: \"dist/index.js\".');\n }\n if (\n module.manifest.clientEntry !== undefined &&\n module.manifest.clientEntry !== \"dist/runtime.client.js\"\n ) {\n throw new Error(\n 'manifest.clientEntry must be artifact-local: \"dist/runtime.client.js\" when provided.',\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}\n\nasync 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, \"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\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\nasync function runCommand(command: string, args: string[], cwd: string): Promise<void> {\n const { spawn } = await import(\"node:child_process\");\n await new Promise<void>((resolve, reject) => {\n const child = spawn(command, args, { cwd, stdio: \"inherit\" });\n child.on(\"error\", reject);\n child.on(\"exit\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`${command} ${args.join(\" \")} exited with ${code ?? \"unknown\"}.`));\n }\n });\n });\n}\n\nasync function runThemePackageBuild(root: string): Promise<void> {\n const packageJson = await readJson<{ scripts?: Record<string, string> }>(\n path.join(root, \"package.json\"),\n );\n const buildScript = packageJson.scripts?.build;\n if (!buildScript || buildScript.includes(\"suda theme\") || buildScript.includes(\"suda-theme\")) {\n return;\n }\n await runCommand(\"pnpm\", [\"--dir\", root, \"run\", \"build\"], process.cwd());\n}\n\nasync function findClientEntry(root: string): Promise<string> {\n const candidates = [\n path.join(root, \"src\", \"runtime.client.tsx\"),\n path.join(root, \"src\", \"runtime.client.ts\"),\n ];\n for (const candidate of candidates) {\n if (await pathExists(candidate)) {\n return candidate;\n }\n }\n throw new Error(`Missing runtime entry. Add src/runtime.client.ts(x) in ${root}.`);\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\nasync function buildServerBundle(root: string): Promise<void> {\n const entryPoint = await findServerEntry(root);\n\n await esbuild({\n bundle: true,\n entryPoints: [entryPoint],\n external: [\n \"react\",\n \"react/jsx-runtime\",\n \"react-dom\",\n \"react-dom/*\",\n \"@puckeditor/core\",\n \"@puckeditor/core/*\",\n \"@sudajs/theme-engine\",\n \"@sudajs/theme-engine/*\",\n ],\n format: \"esm\",\n jsx: \"automatic\",\n minify: false,\n outfile: path.join(root, \"dist\", \"index.js\"),\n platform: \"node\",\n sourcemap: false,\n target: \"es2022\",\n treeShaking: true,\n });\n}\n\nasync function buildTheme(root: string, skipThemeBuild: boolean): Promise<ValidatedTheme> {\n if (!skipThemeBuild) {\n await runThemePackageBuild(root);\n }\n\n await buildServerBundle(root);\n\n const entryPoint = await findClientEntry(root);\n if (!(await pathExists(entryPoint))) {\n throw new Error(`Missing client entry: ${entryPoint}`);\n }\n\n await mkdir(path.join(root, \"dist\"), { recursive: true });\n const hostReactShimPlugin = createHostReactShimPlugin();\n await esbuild({\n bundle: true,\n entryPoints: [entryPoint],\n format: \"esm\",\n jsx: \"automatic\",\n minify: true,\n outfile: path.join(root, \"dist\", \"runtime.client.js\"),\n platform: \"browser\",\n plugins: [hostReactShimPlugin],\n sourcemap: false,\n target: \"es2022\",\n treeShaking: true,\n });\n\n const validated = await validateTheme(root);\n await writeThemeArtifacts(validated);\n return validateTheme(root);\n}\n\nasync function watchTheme(root: string, skipThemeBuild: boolean): Promise<void> {\n if (!skipThemeBuild) {\n await runThemePackageBuild(root);\n }\n\n await buildServerBundle(root);\n\n const entryPoint = await findClientEntry(root);\n await mkdir(path.join(root, \"dist\"), { recursive: true });\n const hostReactShimPlugin = createHostReactShimPlugin();\n const watchLogPlugin = createWatchLogPlugin(\"runtime.client.js\");\n\n const context = await esbuildContext({\n bundle: true,\n entryPoints: [entryPoint],\n format: \"esm\",\n jsx: \"automatic\",\n minify: false,\n outfile: path.join(root, \"dist\", \"runtime.client.js\"),\n platform: \"browser\",\n plugins: [hostReactShimPlugin, watchLogPlugin],\n sourcemap: true,\n target: \"es2022\",\n treeShaking: true,\n });\n await context.watch();\n console.log(\"watching theme runtime; press Ctrl+C to stop\");\n await new Promise(() => undefined);\n}\n\n/**\n * Logs a single line whenever esbuild finishes a (re)build in watch mode.\n * Without this, `suda theme dev` runs silently after the initial bundle and\n * developers can only confirm rebuilds by checking dist/ mtimes.\n */\nfunction createWatchLogPlugin(label: string): Plugin {\n return {\n name: \"suda-theme-watch-log\",\n setup(build) {\n let firstBuild = true;\n build.onEnd((result) => {\n if (firstBuild) {\n firstBuild = false;\n return;\n }\n const errorCount = result.errors.length;\n if (errorCount > 0) {\n console.log(`rebuild failed (${errorCount} error${errorCount === 1 ? \"\" : \"s\"}): ${label}`);\n return;\n }\n const stamp = new Date().toLocaleTimeString();\n console.log(`[${stamp}] rebuilt ${label}`);\n });\n },\n };\n}\n\ninterface PreviewServerHandle {\n url: string;\n port: number;\n close: () => Promise<void>;\n}\n\nfunction pickStarterPage(theme: ValidatedTheme): ThemeStarterPage | 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] ?? null;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction renderStarterPageHtml(theme: ValidatedTheme, page: ThemeStarterPage): string {\n const chrome = extractLayoutChrome(theme.module.defaultLayout);\n const body = renderToStaticMarkup(\n createElement(ThemeRender, {\n theme: theme.module,\n pageData: page.data,\n layoutData: theme.module.defaultLayout,\n }),\n );\n const cssVarStyle = Object.entries(chrome.cssVariables)\n .map(([key, value]) => `${key}: ${value};`)\n .join(\" \");\n const stylesheetTag = theme.stylesheetPath\n ? '<link rel=\"stylesheet\" href=\"/styles.css\" />'\n : \"\";\n const customHead = chrome.customHeadCode ?? \"\";\n const customBody = chrome.customBodyCode ?? \"\";\n return [\n \"<!doctype html>\",\n '<html lang=\"en\">',\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 stylesheetTag,\n customHead,\n \"</head>\",\n `<body${cssVarStyle ? ` style=\"${cssVarStyle}\"` : \"\"}>`,\n body,\n customBody,\n \"</body>\",\n \"</html>\",\n ].join(\"\");\n}\n\nasync function startPreviewServer(\n theme: ValidatedTheme,\n port: number,\n): Promise<PreviewServerHandle> {\n const { createServer } = await import(\"node:http\");\n const starterPage = pickStarterPage(theme);\n const server = createServer((request, response) => {\n void (async () => {\n const url = new URL(request.url ?? \"/\", `http://localhost:${port}`);\n const pathname = url.pathname;\n\n if (pathname === \"/\" || pathname === \"/index.html\") {\n if (!starterPage) {\n response.writeHead(404, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(\"No starter page available for preview.\");\n return;\n }\n response.writeHead(200, { \"Content-Type\": \"text/html; charset=utf-8\" });\n response.end(renderStarterPageHtml(theme, starterPage));\n return;\n }\n\n if (pathname === \"/styles.css\" && theme.stylesheetPath) {\n response.writeHead(200, { \"Content-Type\": \"text/css; charset=utf-8\" });\n response.end(await readFile(theme.stylesheetPath));\n return;\n }\n\n const relativePath = pathname.replace(/^\\/+/, \"\");\n const filePath = path.resolve(theme.root, relativePath);\n const normalizedRoot = path.resolve(theme.root) + path.sep;\n if (!filePath.startsWith(normalizedRoot) || !(await pathExists(filePath))) {\n response.writeHead(404, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(\"Not found\");\n return;\n }\n response.writeHead(200, { \"Content-Type\": contentTypeFor(relativePath) });\n response.end(await readFile(filePath));\n })().catch((error) => {\n response.writeHead(500, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n response.end(error instanceof Error ? error.message : \"Internal error\");\n });\n });\n\n await new Promise<void>((resolve, reject) => {\n const onError = (err: Error): void => {\n reject(err);\n };\n server.once(\"error\", onError);\n server.listen(port, () => {\n server.off(\"error\", onError);\n resolve();\n });\n });\n\n return {\n url: `http://localhost:${port}`,\n port,\n close: () =>\n new Promise<void>((resolve) => {\n server.close(() => {\n resolve();\n });\n }),\n };\n}\n\nasync function previewTheme(root: string, port: number): Promise<void> {\n const theme = await buildTheme(root, false);\n const handle = await startPreviewServer(theme, port);\n console.log(\n `previewing ${theme.module.manifest.key}@${theme.module.manifest.version} at ${handle.url}`,\n );\n await new Promise(() => undefined);\n}\n\ninterface ScreenshotOptions extends ThemeRootOptions {\n output?: string;\n width?: string;\n height?: string;\n port?: string;\n skipBuild?: boolean;\n}\n\ninterface ResolvedScreenshotOptions {\n outputPath: string;\n viewport: { width: number; height: number };\n port: number;\n skipBuild: boolean;\n}\n\nconst DEFAULT_SCREENSHOT_RELATIVE = path.join(\"dist\", \"preview\", \"desktop.png\");\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 return {\n outputPath: path.resolve(root, options.output ?? DEFAULT_SCREENSHOT_RELATIVE),\n viewport: {\n width: parsePositiveInt(options.width, 1280),\n height: parsePositiveInt(options.height, 800),\n },\n port: parsePositiveInt(options.port, 4178),\n skipBuild: options.skipBuild === 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\nasync function loadPlaywright(): 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 candidates = [\"playwright\", \"@playwright/test\"];\n for (const id of candidates) {\n try {\n const mod: unknown = await import(/* @vite-ignore */ id);\n return mod as PlaywrightModule;\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\nasync function captureScreenshot(\n theme: ValidatedTheme,\n options: ResolvedScreenshotOptions,\n): Promise<void> {\n const playwright = await loadPlaywright();\n const handle = await startPreviewServer(theme, options.port);\n try {\n await mkdir(path.dirname(options.outputPath), { recursive: true });\n const browser = await playwright.chromium.launch({ headless: true });\n try {\n const context = await browser.newContext({\n viewport: options.viewport,\n deviceScaleFactor: 1,\n });\n const page = await context.newPage();\n await page.goto(handle.url, { waitUntil: \"networkidle\" });\n await page.screenshot({ path: options.outputPath, fullPage: false });\n await context.close();\n } finally {\n await browser.close();\n }\n } finally {\n await handle.close();\n }\n console.log(`captured ${path.relative(theme.root, options.outputPath)}`);\n}\n\nasync function screenshotTheme(root: string, options: ScreenshotOptions): Promise<void> {\n const resolved = resolveScreenshotOptions(root, options);\n const theme = resolved.skipBuild ? await validateTheme(root) : await buildTheme(root, false);\n await captureScreenshot(theme, resolved);\n}\n\nasync function loadLocalAgentManifest(root: string): Promise<ThemeAgentManifest> {\n const built = await readJsonIfExists<ThemeAgentManifest>(path.join(root, \"dist\", \"agent-manifest.json\"));\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(path.join(agentCacheDir(), \"catalog.json\"), `${JSON.stringify(catalog, null, 2)}\\n`);\n return catalog.themes;\n}\n\nasync function fetchAgentManifest(\n themeKey: string,\n options: AgentThemeOptions,\n): Promise<ThemeAgentManifest> {\n if (options.themeRoot) {\n return loadLocalAgentManifest(resolveThemeRoot(options));\n }\n\n const auth = await requireCliBaseUrl();\n const version = options.version ?? \"latest\";\n const cachePath = cachedThemeManifestPath(themeKey, version);\n const cached = version === \"latest\" ? null : await readJsonIfExists<ThemeAgentManifest>(cachePath);\n if (cached) {\n return cached;\n }\n\n const url = new URL(`/api/cli/agent/themes/${encodeURIComponent(themeKey)}/${encodeURIComponent(version)}/schema`, auth.baseUrl);\n if (options.projectId) {\n url.searchParams.set(\"projectId\", options.projectId);\n }\n const result = await fetchJson<{ agentManifest: ThemeAgentManifest }>(url.href, { token: auth.token });\n const realVersion = result.agentManifest.manifest.version;\n const realCachePath = cachedThemeManifestPath(themeKey, 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\nfunction printJson(value: unknown): void {\n console.log(JSON.stringify(value, null, 2));\n}\n\nfunction createSectionSchema(manifest: ThemeAgentManifest, sectionType: string): AgentComponentOutput {\n const section = findAgentSection(manifest, sectionType);\n if (!section) {\n throw new Error(`Unknown section type \"${sectionType}\".`);\n }\n return createAgentComponentSchemaOutput(section, \"section\");\n}\n\nasync function validateAgentPage(themeKey: string, input: string, options: AgentThemeOptions): Promise<void> {\n const manifest = await fetchAgentManifest(themeKey, options);\n const pageContent = await readJson<unknown>(path.resolve(input));\n const result = validateAgentPageContentWithManifest(pageContent, manifest);\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 validation = validateAgentPageContentWithManifest(pageContent, manifest);\n if (!validation.valid) {\n printJson(agentValidationResultSchema.parse(validation));\n process.exitCode = 1;\n return;\n }\n const pageData = createPageDataFromAgentContent(pageContent);\n\n const auth = await requireCliBaseUrl();\n const response = await fetchJson<{ pageId: string }>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(options.projectId)}/pages`,\n {\n method: \"POST\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n title: options.title,\n slug: options.slug,\n themeKey: manifest.manifest.key,\n themeVersion: manifest.manifest.version,\n data: pageData,\n }),\n },\n );\n printJson({ success: true, ...response });\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_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 AI-first output schema for generating Suda page content, including all section schemas.\",\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 = createAgentPageSchemaOutput(manifest, {\n includeExample: includeExample === true,\n });\n return mcpStructured(\"AI-first Suda page content output schema.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"get_section_schema\",\n {\n description: \"Return the AI-first output schema for one section component in a theme.\",\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(\"AI-first Suda section output schema.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"validate_page_config\",\n {\n description: \"Validate AI-generated Suda page content against a theme.\",\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 validateAgentPageContentWithManifest(data, manifest),\n );\n return mcpStructured(\"Suda page content validation result.\", structuredContent);\n },\n );\n\n server.registerTool(\n \"create_page_draft\",\n {\n description: \"Create a workspace page draft from AI-generated Suda page content.\",\n inputSchema: {\n projectId: z.string(),\n title: z.string(),\n slug: z.string(),\n theme: z.string(),\n data: z.unknown(),\n version: z.string().optional(),\n },\n outputSchema: createPageDraftOutputSchema,\n },\n async ({ projectId, title, slug, theme, data, version }) => {\n const manifest = await fetchAgentManifest(theme, { version, projectId });\n const validation = validateAgentPageContentWithManifest(data, manifest);\n if (!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: validation.issues,\n }),\n );\n }\n const auth = await requireCliBaseUrl();\n const response = await fetchJson<{ pageId: string }>(\n `${auth.baseUrl}/api/cli/agent/projects/${encodeURIComponent(projectId)}/pages`,\n {\n method: \"POST\",\n token: auth.token,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n title,\n slug,\n themeKey: manifest.manifest.key,\n themeVersion: manifest.manifest.version,\n data: createPageDataFromAgentContent(data),\n }),\n },\n );\n return mcpStructured(\n \"Created Suda page draft.\",\n createPageDraftOutputSchema.parse({ status: \"created\", ...response }),\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 await writeFile(\n path.join(dist, \"manifest.json\"),\n `${JSON.stringify(theme.module.manifest, null, 2)}\\n`,\n );\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, \"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\")) {\n return \"application/javascript; 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 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 files.push({\n absolutePath,\n relativePath,\n contentType: contentTypeFor(relativePath),\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 if (theme.stylesheetPath) {\n files.push({\n absolutePath: theme.stylesheetPath,\n relativePath: \"styles.css\",\n contentType: \"text/css; charset=utf-8\",\n });\n }\n return files;\n}\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\nasync function publishTheme(\n root: string,\n skipBuild: boolean,\n): Promise<void> {\n const theme = skipBuild ? await validateTheme(root) : await buildTheme(root, false);\n const files = await collectThemeArtifactFiles(theme);\n if (!theme.clientEntryPath) {\n throw new Error(\"Missing dist/runtime.client.js. Run `suda theme build` first.\");\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\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 files: files.map((f) => ({ relativePath: f.relativePath, contentType: f.contentType })),\n }),\n });\n\n if (!intentRes.ok) {\n const errorData = (await intentRes.json().catch(() => ({}))) as { error?: string };\n throw new Error(`Failed to get publish intent: ${errorData.error || intentRes.statusText}`);\n }\n\n const { urls } = (await intentRes.json()) as { urls: Array<{ relativePath: string; url: string }> };\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 putRes = await fetch(urlObj.url, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": file.contentType,\n },\n body,\n });\n\n if (!putRes.ok) {\n throw new Error(`Failed to upload ${file.relativePath}: ${putRes.statusText}`);\n }\n console.log(`uploaded ${createThemeObjectKey(key, version, file.relativePath)}`);\n }\n\n const digest = await checksum(files);\n const bundleArtifactRelative = \"dist/index.js\";\n const bundleArtifactExists = files.some((f) => f.relativePath === bundleArtifactRelative);\n if (!bundleArtifactExists) {\n throw new Error(`Missing ${bundleArtifactRelative} in theme artifacts.`);\n }\n\n const previewArtifactRelative = \"dist/preview/desktop.png\";\n const previewArtifactExists = await pathExists(path.join(theme.root, previewArtifactRelative));\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: previewArtifactExists ? previewArtifactRelative : undefined,\n }),\n });\n\n if (!completeRes.ok) {\n const errorData = (await completeRes.json().catch(() => ({}))) as { error?: string };\n throw new Error(`Failed to complete publish: ${errorData.error || completeRes.statusText}`);\n }\n\n console.log(`published ${key}@${version}`);\n}\n\nasync function initTheme(target: string): Promise<void> {\n const key = path\n .basename(target)\n .replace(/[^a-zA-Z0-9._-]/g, \"-\")\n .toLowerCase();\n await mkdir(path.join(target, \"src\"), { recursive: true });\n await writeFile(\n path.join(target, \"package.json\"),\n `${JSON.stringify(\n {\n name: `@suda-themes/${key}`,\n version: \"0.1.0\",\n private: true,\n packageManager: \"pnpm@11.6.0\",\n type: \"module\",\n main: \"./dist/index.js\",\n types: \"./dist/index.d.ts\",\n scripts: {\n // `build:src` compiles TypeScript sources to dist/. `build` then runs\n // `suda theme build --skip-theme-build` so the CLI does not recurse\n // back into this script (it would otherwise see scripts.build and\n // call `pnpm run build` again, causing infinite recursion).\n \"build:src\": \"tsc -p tsconfig.json\",\n build: \"pnpm run build:src && suda theme build --theme-root . --skip-theme-build\",\n dev: \"suda theme dev --theme-root . --skip-theme-build\",\n typecheck: \"tsc -p tsconfig.json --noEmit\",\n validate: \"suda theme validate --theme-root .\",\n preview: \"suda theme preview --theme-root .\",\n },\n dependencies: {\n \"@sudajs/theme-engine\": \"^0.1.1\",\n },\n devDependencies: {\n \"@puckeditor/core\": \"^0.21.2\",\n \"@sudajs/cli\": \"^0.1.0\",\n \"@types/node\": \"^22.0.0\",\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.0\",\n react: \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n typescript: \"^5.6.0\",\n },\n peerDependencies: {\n \"@puckeditor/core\": \"^0.21.2\",\n react: \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n },\n },\n null,\n 2,\n )}\\n`,\n );\n // pnpm 11 removed `pnpm.onlyBuiltDependencies` from `package.json` and the\n // `package.json#pnpm` overrides field; everything must live in\n // `pnpm-workspace.yaml`. Even a standalone single-package theme project\n // needs this file to allow esbuild's postinstall to run.\n await writeFile(\n path.join(target, \"pnpm-workspace.yaml\"),\n `# Single-package workspace so pnpm 11 can apply per-project settings.\\n# allowBuilds replaces the pre-v11 onlyBuiltDependencies list.\\nallowBuilds:\\n esbuild: true\\n`,\n );\n await writeFile(\n path.join(target, \"tsconfig.json\"),\n `${JSON.stringify(\n {\n compilerOptions: {\n target: \"ES2022\",\n lib: [\"DOM\", \"DOM.Iterable\", \"ES2022\"],\n module: \"NodeNext\",\n moduleResolution: \"NodeNext\",\n jsx: \"react-jsx\",\n rootDir: \"src\",\n outDir: \"dist\",\n declaration: true,\n declarationMap: true,\n sourceMap: true,\n strict: true,\n noUncheckedIndexedAccess: true,\n esModuleInterop: true,\n skipLibCheck: true,\n forceConsistentCasingInFileNames: true,\n resolveJsonModule: true,\n types: [\"node\"],\n },\n include: [\"src\"],\n },\n null,\n 2,\n )}\\n`,\n );\n await writeFile(\n path.join(target, \"src\", \"manifest.ts\"),\n `import type { ThemeManifest } from \"@sudajs/theme-engine\";\\n\\nexport const manifest: ThemeManifest = {\\n key: \"${key}\",\\n name: \"${key}\",\\n version: \"0.1.0\",\\n categories: [\"other\"],\\n minEngineVersion: \"0.0.0\",\\n entry: \"dist/index.js\",\\n clientEntry: \"dist/runtime.client.js\",\\n};\\n`,\n );\n await writeFile(\n path.join(target, \"src\", \"sections.tsx\"),\n `import type { ComponentConfig } from \"@puckeditor/core\";\\n\\nexport const Hero: ComponentConfig = {\\n label: \"Hero\",\\n fields: {\\n eyebrow: { type: \"text\", label: \"Eyebrow\" },\\n title: { type: \"text\", label: \"Title\" },\\n description: { type: \"textarea\", label: \"Description\" },\\n primaryLabel: { type: \"text\", label: \"Primary button label\" },\\n primaryHref: { type: \"text\", label: \"Primary button link\" },\\n },\\n defaultProps: {\\n eyebrow: \"New theme\",\\n title: \"Build with SudaCloud\",\\n description: \"Edit this starter section in the visual editor.\",\\n primaryLabel: \"Get started\",\\n primaryHref: \"#contact\",\\n },\\n render: ({ eyebrow, title, description, primaryLabel, primaryHref }) => (\\n <section className=\"${key}-section ${key}-hero\">\\n <p className=\"${key}-eyebrow\">{eyebrow}</p>\\n <h1>{title}</h1>\\n <p>{description}</p>\\n <a className=\"${key}-button\" href={primaryHref}>{primaryLabel}</a>\\n </section>\\n ),\\n};\\n\\nexport const FeatureGrid: ComponentConfig = {\\n label: \"Feature grid\",\\n fields: {\\n title: { type: \"text\", label: \"Title\" },\\n description: { type: \"textarea\", label: \"Description\" },\\n features: {\\n type: \"array\",\\n label: \"Features\",\\n arrayFields: {\\n title: { type: \"text\", label: \"Title\" },\\n description: { type: \"textarea\", label: \"Description\" },\\n },\\n },\\n },\\n defaultProps: {\\n title: \"Everything you need to launch\",\\n description: \"Use this section to explain the core value of the project.\",\\n features: [\\n { title: \"Fast setup\", description: \"Start from a clean theme contract.\" },\\n { title: \"Visual editing\", description: \"Expose content fields through Puck.\" },\\n { title: \"Publish ready\", description: \"Build and publish with the Suda CLI.\" },\\n ],\\n },\\n render: ({ title, description, features = [] }) => (\\n <section className=\"${key}-section\">\\n <h2>{title}</h2>\\n <p>{description}</p>\\n <div className=\"${key}-grid\">\\n {features.map((feature: { title?: string; description?: string }, index: number) => (\\n <article className=\"${key}-card\" key={index}>\\n <h3>{feature.title}</h3>\\n <p>{feature.description}</p>\\n </article>\\n ))}\\n </div>\\n </section>\\n ),\\n};\\n\\nexport const Testimonial: ComponentConfig = {\\n label: \"Testimonial\",\\n fields: {\\n quote: { type: \"textarea\", label: \"Quote\" },\\n author: { type: \"text\", label: \"Author\" },\\n role: { type: \"text\", label: \"Role\" },\\n },\\n defaultProps: {\\n quote: \"SudaCloud gives our team a practical editing workflow without giving up theme control.\",\\n author: \"Alex Chen\",\\n role: \"Founder\",\\n },\\n render: ({ quote, author, role }) => (\\n <section className=\"${key}-section ${key}-quote\">\\n <blockquote>{quote}</blockquote>\\n <p>{author} · {role}</p>\\n </section>\\n ),\\n};\\n\\nexport const CallToAction: ComponentConfig = {\\n label: \"Call to action\",\\n fields: {\\n title: { type: \"text\", label: \"Title\" },\\n description: { type: \"textarea\", label: \"Description\" },\\n buttonLabel: { type: \"text\", label: \"Button label\" },\\n buttonHref: { type: \"text\", label: \"Button link\" },\\n },\\n defaultProps: {\\n title: \"Ready to build your next page?\",\\n description: \"Use this section as the final conversion block.\",\\n buttonLabel: \"Contact us\",\\n buttonHref: \"#contact\",\\n },\\n render: ({ title, description, buttonLabel, buttonHref }) => (\\n <section className=\"${key}-section ${key}-cta\" id=\"contact\">\\n <h2>{title}</h2>\\n <p>{description}</p>\\n <a className=\"${key}-button\" href={buttonHref}>{buttonLabel}</a>\\n </section>\\n ),\\n};\\n\\nexport const SECTION_COMPONENTS = { Hero, FeatureGrid, Testimonial, CallToAction };\\n`,\n );\n await writeFile(\n path.join(target, \"src\", \"layout.tsx\"),\n `import { getPageSlot } from \"@sudajs/theme-engine/runtime\";\\nimport type { ComponentConfig, Config } from \"@puckeditor/core\";\\nimport type { ReactElement, ReactNode } from \"react\";\\n\\ntype PuckExtras = { puck?: { metadata?: Record<string, unknown> } };\\n\\nexport const rootConfig: NonNullable<Config[\"root\"]> = {\\n fields: {\\n siteName: { type: \"text\", label: \"Site name\" },\\n },\\n defaultProps: { siteName: \"${key}\" },\\n render: ({ children, siteName }: { children?: ReactNode; siteName?: string }) => (\\n <div className=\"${key}-root\" data-site-name={siteName}>{children}</div>\\n ),\\n};\\n\\nexport const Header: ComponentConfig = {\\n label: \"Header\",\\n fields: { siteName: { type: \"text\", label: \"Site name\" } },\\n defaultProps: { siteName: \"${key}\" },\\n render: ({ siteName }) => <header className=\"${key}-header\">{siteName}</header>,\\n};\\n\\nexport const PageOutlet: ComponentConfig = {\\n label: \"Page outlet\",\\n fields: {},\\n defaultProps: {},\\n render: (props: PuckExtras): ReactElement => <>{getPageSlot(props.puck?.metadata)}</>,\\n};\\n\\nexport const Footer: ComponentConfig = {\\n label: \"Footer\",\\n fields: { text: { type: \"text\", label: \"Text\" } },\\n defaultProps: { text: \"© ${key}\" },\\n render: ({ text }) => <footer className=\"${key}-footer\">{text}</footer>,\\n};\\n\\nexport const LAYOUT_COMPONENTS = { Header, PageOutlet, Footer };\\n`,\n );\n await writeFile(\n path.join(target, \"src\", \"config.ts\"),\n `import type { Config, Data } from \"@puckeditor/core\";\\n\\nimport { LAYOUT_COMPONENTS, rootConfig } from \"./layout.js\";\\nimport { SECTION_COMPONENTS } from \"./sections.js\";\\n\\nexport const pageConfig: Config = {\\n components: SECTION_COMPONENTS,\\n};\\n\\nexport const layoutConfig: Config = {\\n root: rootConfig,\\n components: LAYOUT_COMPONENTS,\\n};\\n\\nexport const defaultLayout: Data = {\\n root: { props: { siteName: \"${key}\" } },\\n content: [\\n { type: \"Header\", props: { id: \"Header-1\", siteName: \"${key}\" } },\\n { type: \"PageOutlet\", props: { id: \"PageOutlet-1\" } },\\n { type: \"Footer\", props: { id: \"Footer-1\", text: \"© ${key}\" } },\\n ],\\n};\\n`,\n );\n await writeFile(\n path.join(target, \"src\", \"templates.ts\"),\n `import type { ThemeStarterPage } from \"@sudajs/theme-engine\";\\n\\nexport const starterPages: ThemeStarterPage[] = [\\n {\\n slug: \"home\",\\n title: \"Home\",\\n isHome: true,\\n data: {\\n root: { props: {} },\\n content: [\\n {\\n type: \"Hero\",\\n props: {\\n id: \"Hero-1\",\\n eyebrow: \"Starter page\",\\n title: \"Welcome to ${key}\",\\n description: \"This page was generated by suda theme init.\",\\n primaryLabel: \"Explore features\",\\n primaryHref: \"#features\",\\n },\\n },\\n {\\n type: \"FeatureGrid\",\\n props: {\\n id: \"FeatureGrid-1\",\\n title: \"Designed for editable sites\",\\n description: \"Starter sections show agents and editors how this theme is structured.\",\\n features: [\\n { title: \"Typed fields\", description: \"Each section exposes a clear field schema.\" },\\n { title: \"Starter pages\", description: \"Templates show realistic section composition.\" },\\n { title: \"CLI workflow\", description: \"Build, validate, preview, and publish from one tool.\" },\\n ],\\n },\\n },\\n {\\n type: \"CallToAction\",\\n props: {\\n id: \"CallToAction-1\",\\n title: \"Launch your first page\",\\n description: \"Customize this starter template or let an agent generate a new draft.\",\\n buttonLabel: \"Get in touch\",\\n buttonHref: \"/contact\",\\n },\\n },\\n ],\\n },\\n },\\n {\\n slug: \"about\",\\n title: \"About\",\\n data: {\\n root: { props: {} },\\n content: [\\n {\\n type: \"Hero\",\\n props: {\\n id: \"Hero-About\",\\n eyebrow: \"About\",\\n title: \"A clean starting point for your story\",\\n description: \"Use this page to introduce the project, audience, and promise.\",\\n primaryLabel: \"Contact us\",\\n primaryHref: \"/contact\",\\n },\\n },\\n {\\n type: \"Testimonial\",\\n props: {\\n id: \"Testimonial-About\",\\n quote: \"This starter theme keeps the editable surface focused and predictable.\",\\n author: \"SudaCloud\",\\n role: \"Theme team\",\\n },\\n },\\n ],\\n },\\n },\\n {\\n slug: \"contact\",\\n title: \"Contact\",\\n data: {\\n root: { props: {} },\\n content: [\\n {\\n type: \"Hero\",\\n props: {\\n id: \"Hero-Contact\",\\n eyebrow: \"Contact\",\\n title: \"Let's talk\",\\n description: \"Tell visitors how to reach you and what happens next.\",\\n primaryLabel: \"Email us\",\\n primaryHref: \"mailto:hello@example.com\",\\n },\\n },\\n {\\n type: \"CallToAction\",\\n props: {\\n id: \"CallToAction-Contact\",\\n title: \"Start the conversation\",\\n description: \"Replace this copy with your preferred contact details or form link.\",\\n buttonLabel: \"Send an email\",\\n buttonHref: \"mailto:hello@example.com\",\\n },\\n },\\n ],\\n },\\n },\\n];\\n`,\n );\n await writeFile(\n path.join(target, \"src\", \"index.tsx\"),\n `import type { ThemeModule } from \"@sudajs/theme-engine\";\\n\\nimport { defaultLayout, layoutConfig, pageConfig } from \"./config.js\";\\nimport { manifest } from \"./manifest.js\";\\nimport { starterPages } from \"./templates.js\";\\n\\nconst theme: ThemeModule = {\\n manifest,\\n pageConfig,\\n layoutConfig,\\n defaultLayout,\\n starterPages,\\n};\\n\\nexport default theme;\\nexport { manifest, pageConfig, layoutConfig, defaultLayout, starterPages };\\n`,\n );\n await writeFile(\n path.join(target, \"src\", \"runtime.client.ts\"),\n '\"use client\";\\n\\nimport theme from \"./index.js\";\\n\\nexport default theme;\\n',\n );\n await writeFile(\n path.join(target, \"styles.css\"),\n `.${key}-root { font-family: Inter, ui-sans-serif, system-ui, sans-serif; color: #111827; background: #ffffff; }\\n.${key}-header, .${key}-footer { padding: 20px clamp(20px, 5vw, 64px); border-bottom: 1px solid #e5e7eb; }\\n.${key}-footer { border-top: 1px solid #e5e7eb; border-bottom: 0; color: #6b7280; }\\n.${key}-section { padding: 64px clamp(20px, 5vw, 64px); }\\n.${key}-hero { background: #f8fafc; }\\n.${key}-eyebrow { text-transform: uppercase; letter-spacing: 0.08em; font-size: 12px; color: #2563eb; font-weight: 700; }\\n.${key}-section h1 { max-width: 780px; font-size: clamp(40px, 7vw, 72px); line-height: 0.95; margin: 0 0 20px; }\\n.${key}-section h2 { max-width: 720px; font-size: 36px; line-height: 1.05; margin: 0 0 16px; }\\n.${key}-section p { max-width: 680px; line-height: 1.7; color: #4b5563; }\\n.${key}-button { display: inline-flex; align-items: center; min-height: 42px; padding: 0 18px; border-radius: 8px; background: #111827; color: #ffffff; text-decoration: none; font-weight: 700; }\\n.${key}-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; margin-top: 28px; }\\n.${key}-card { border: 1px solid #e5e7eb; border-radius: 8px; padding: 20px; }\\n.${key}-quote blockquote { max-width: 780px; font-size: 28px; line-height: 1.25; margin: 0 0 16px; }\\n.${key}-cta { background: #111827; color: #ffffff; }\\n.${key}-cta p { color: #d1d5db; }\\n.${key}-cta .${key}-button { background: #ffffff; color: #111827; }\\n`,\n );\n await writeFile(path.join(target, \".gitignore\"), \"node_modules\\ndist\\n*.tsbuildinfo\\n\");\n await writeFile(\n path.join(target, \"AGENTS.md\"),\n `# Suda Theme Agent Guide\\n\\nThis directory is a Suda theme source project generated by \\`suda theme init\\`.\\nIt is a **standalone** npm package — it does not depend on the SudaCloud monorepo.\\n\\n## What to edit\\n\\n- Add page sections in \\`src/sections.tsx\\` and register them in \\`SECTION_COMPONENTS\\`.\\n- Add starter pages in \\`src/templates.ts\\` to show realistic section combinations.\\n- Keep shared site chrome in \\`src/layout.tsx\\`; \\`PageOutlet\\` is where page content renders.\\n- Keep \\`src/index.tsx\\` exporting the source \\`ThemeModule\\`. The final artifact is produced by \\`suda theme build\\`.\\n- All relative imports under \\`src/\\` MUST include the \\`.js\\` extension (NodeNext ESM resolution).\\n\\n## Page content rules\\n\\n- Agent page files passed to \\`suda agent page validate/create\\` contain \\`content\\` and optional \\`zones\\` only.\\n- Every \\`content[]\\` item must use a section type from \\`SECTION_COMPONENTS\\`.\\n- Every \\`content[]\\` item must include \\`props.id\\`.\\n- Prefer editing section props over changing render code when generating pages.\\n- Do not edit files under \\`dist/\\`; they are generated.\\n\\n## Useful commands\\n\\n\\`\\`\\`bash\\npnpm install\\npnpm typecheck\\npnpm build # tsc + suda theme build --skip-theme-build\\npnpm validate\\npnpm preview\\nsuda agent theme describe local --theme-root .\\nsuda agent section schema --theme local --section Hero --theme-root .\\nsuda agent page validate --theme local --input ./page.json --theme-root .\\n\\`\\`\\`\\n`,\n );\n await writeFile(\n path.join(target, \"CLAUDE.md\"),\n `# Claude Code\\n\\nRead \\`AGENTS.md\\` first. It is the canonical guide for this Suda theme project.\\n`,\n );\n await writeFile(\n path.join(target, \"README.md\"),\n `# ${key}\\n\\nA Suda theme scaffolded with \\`suda theme init\\`. This is a standalone\\npackage; it does not need to live inside the SudaCloud monorepo.\\n\\n## Setup\\n\\n\\`\\`\\`bash\\npnpm install\\n\\`\\`\\`\\n\\n## Develop\\n\\n\\`\\`\\`bash\\npnpm typecheck # type-check sources\\npnpm build # tsc + suda theme build (server bundle + client runtime + manifest)\\npnpm dev # watch the browser runtime\\npnpm preview # build and preview the home starter page\\npnpm validate # validate the dist artifact\\n\\`\\`\\`\\n\\n## Agent tooling\\n\\n\\`\\`\\`bash\\nsuda agent theme describe local --theme-root .\\nsuda agent page schema local --theme-root .\\nsuda agent section schema --theme local --section Hero --theme-root .\\n\\`\\`\\`\\n\\n## Publish\\n\\n\\`\\`\\`bash\\npnpm build\\nsuda theme screenshot # optional: capture dist/preview/desktop.png\\nsuda theme publish\\n\\`\\`\\`\\n`,\n );\n console.log(`created theme scaffold at ${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(\"[dir]\", \"Theme directory to create.\", \"./theme\")\n .action(async (dir: string) => {\n await initTheme(path.resolve(dir));\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(`valid ${result.module.manifest.key}@${result.module.manifest.version}`);\n if (!result.clientEntryPath) {\n console.warn(\n \"warning: dist/runtime.client.js is missing; editor runtime will not load until `suda theme build` runs.\",\n );\n }\n });\n\n theme\n .command(\"build\")\n .description(\"Build server dist (via package script) and browser runtime.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\"--skip-theme-build\", \"Skip the theme package build script.\")\n .action(async (options: BuildOptions) => {\n const result = await buildTheme(resolveThemeRoot(options), options.skipThemeBuild === true);\n console.log(`built ${result.module.manifest.key}@${result.module.manifest.version}`);\n });\n\n theme\n .command(\"dev\")\n .description(\"Watch and rebuild the browser runtime.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\"--skip-theme-build\", \"Skip the theme package build script.\")\n .action(async (options: BuildOptions) => {\n await watchTheme(resolveThemeRoot(options), options.skipThemeBuild === true);\n });\n\n theme\n .command(\"preview\")\n .description(\"Build and serve the local theme artifact files.\")\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\"--port <port>\", \"Preview server port.\", \"4177\")\n .action(async (options: PreviewOptions) => {\n const port = Number(options.port ?? \"4177\");\n await previewTheme(resolveThemeRoot(options), Number.isFinite(port) ? port : 4177);\n });\n\n theme\n .command(\"screenshot\")\n .description(\n \"Capture a desktop preview screenshot of the home starter page using Playwright.\",\n )\n .option(\"--theme-root <path>\", \"Theme source/artifact root.\")\n .option(\"--output <path>\", \"Output PNG path relative to theme root.\")\n .option(\"--width <px>\", \"Viewport width in pixels.\", \"1280\")\n .option(\"--height <px>\", \"Viewport height in pixels.\", \"800\")\n .option(\"--port <port>\", \"Preview server port used during capture.\", \"4178\")\n .option(\"--skip-build\", \"Skip rebuilding the theme before capturing.\")\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 .action(async (options: PublishOptions) => {\n await publishTheme(resolveThemeRoot(options), options.skipBuild === true);\n });\n\n const agent = program.command(\"agent\").description(\"Agent-friendly theme and page tooling.\");\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 AI-first page 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(createAgentPageSchemaOutput(manifest, { includeExample: options.example === true }));\n });\n\n const agentPage = agent.command(\"page\").description(\"AI-first page content tooling.\");\n\n agentPage\n .command(\"schema\")\n .description(\"Print the AI-first page content output 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(createAgentPageSchemaOutput(manifest, { includeExample: options.example === true }));\n });\n\n agentPage\n .command(\"validate\")\n .description(\"Validate an AI-generated 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(\"Create a workspace page draft from AI-generated Suda page content JSON.\")\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 .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 AI-first section output 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(\"--host <host>\", \"The SudaCloud workspace host to authenticate against.\", \"app.sudayun.cn\")\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sudajs/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"suda": "./bin/suda.js"
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"react": "^19.0.0",
|
|
32
32
|
"react-dom": "^19.0.0",
|
|
33
33
|
"zod": "^3.24.1",
|
|
34
|
-
"@sudajs/theme-engine": "0.1.
|
|
34
|
+
"@sudajs/theme-engine": "0.1.1"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/node": "^22.10.2",
|