@primeuicom/mcp 0.1.20 → 0.1.21

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/service.ts","../src/lib/project-link-config.ts","../src/server.ts","../src/instructions.ts","../src/services/health-check-service.ts","../src/services/project-sync-service.ts","../src/lib/fs.ts","../src/services/page-copy-service.ts","../src/lib/import-graph.ts","../src/lib/page-paths.ts","../src/lib/text-diff.ts","../src/services/page-inspect-report.ts","../src/sources/api-provider.ts"],"sourcesContent":["import path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\n\nimport {\n resolvePrimeUiApiKey,\n resolvePrimeUiProjectConfig,\n} from \"./lib/project-link-config.js\";\nimport { createPrimeUiMcpServer } from \"./server.js\";\nimport { runPrimeUiHealthCheck } from \"./services/health-check-service.js\";\nimport { ProjectSyncService } from \"./services/project-sync-service.js\";\nimport { ApiProjectDataProvider } from \"./sources/api-provider.js\";\nimport type { ProjectSyncSource } from \"./sources/project-sync-source.js\";\n\nfunction getProjectConfigFallbackCwds(rootsFallbackCwds: string[] = []): string[] {\n return [\n process.env.CODEX_WORKSPACE_ROOT,\n process.env.VSCODE_CWD,\n ...rootsFallbackCwds,\n process.env.INIT_CWD,\n process.env.PWD,\n ]\n .map((value) => value?.trim())\n .filter((value): value is string => Boolean(value));\n}\n\nasync function createProjectSyncService(\n rootsFallbackCwds: string[],\n): Promise<ProjectSyncService> {\n const fallbackCwds = getProjectConfigFallbackCwds(rootsFallbackCwds);\n console.error(\n \"[primeui-mcp] TOOL_CALL_ENV:\",\n JSON.stringify({\n CODEX_WORKSPACE_ROOT: process.env.CODEX_WORKSPACE_ROOT ?? null,\n VSCODE_CWD: process.env.VSCODE_CWD ?? null,\n INIT_CWD: process.env.INIT_CWD ?? null,\n PWD: process.env.PWD ?? null,\n }),\n );\n const resolvedProjectConfig = await resolvePrimeUiProjectConfig({\n cwd: process.cwd(),\n projectRootFromEnv: process.env.PRIMEUI_PROJECT_ROOT,\n fallbackCwds,\n });\n\n const projectRoot = resolvedProjectConfig.projectRoot;\n const targetProjectRoot = path.resolve(\n projectRoot,\n resolvedProjectConfig.projectConfig.targetProjectPath,\n );\n console.error(\"[primeui-mcp] RESOLVED_PROJECT_ROOT:\", projectRoot);\n console.error(\n \"[primeui-mcp] RESOLVED_PROJECT_CONFIG:\",\n resolvedProjectConfig.projectConfigPath,\n );\n\n const apiKey = await resolvePrimeUiApiKey({\n projectConfig: resolvedProjectConfig.projectConfig,\n apiKeyFromEnv: process.env.PRIMEUI_API_KEY,\n });\n\n const provider = new ApiProjectDataProvider({\n apiKey,\n baseUrl: process.env.PRIMEUI_API_BASE_URL,\n });\n\n return new ProjectSyncService({\n projectRoot,\n targetProjectRoot,\n provider,\n });\n}\n\nclass LazyProjectSyncSource implements ProjectSyncSource {\n constructor(private readonly getRootsFallbackCwds: () => string[]) {}\n\n private async withService<T>(\n operation: (service: ProjectSyncService) => Promise<T>,\n ): Promise<T> {\n const service = await createProjectSyncService(this.getRootsFallbackCwds());\n return operation(service);\n }\n\n async getProjectInfo() {\n return this.withService((service) => service.getProjectInfo());\n }\n\n async listExports() {\n return this.withService((service) => service.listExports());\n }\n\n async createExport() {\n return this.withService((service) => service.createExport());\n }\n\n async downloadExportById(id: string) {\n return this.withService((service) => service.downloadExportById(id));\n }\n\n async inspectPage(slug: string) {\n return this.withService((service) => service.inspectPage(slug));\n }\n\n async copyPage(originPageSlug: string, actualPageSlug?: string) {\n return this.withService((service) =>\n service.copyPage(originPageSlug, actualPageSlug),\n );\n }\n\n async clearTemp() {\n return this.withService((service) => service.clearTemp());\n }\n\n async healthCheck() {\n const rootsFallbackCwds = this.getRootsFallbackCwds();\n const fallbackCwds = getProjectConfigFallbackCwds(rootsFallbackCwds);\n const result = await runPrimeUiHealthCheck({\n cwd: process.cwd(),\n codexWorkspaceRoot: process.env.CODEX_WORKSPACE_ROOT,\n vscodeCwd: process.env.VSCODE_CWD,\n initCwd: process.env.INIT_CWD,\n pwd: process.env.PWD,\n projectRootFromEnv: process.env.PRIMEUI_PROJECT_ROOT,\n apiBaseUrlFromEnv: process.env.PRIMEUI_API_BASE_URL,\n apiKeyFromEnv: process.env.PRIMEUI_API_KEY,\n fallbackCwds,\n rootsListFallbackCwds: rootsFallbackCwds,\n });\n\n if (result.config.found) {\n console.error(\"[primeui-mcp] RESOLVED_PROJECT_ROOT:\", result.config.projectRoot);\n console.error(\n \"[primeui-mcp] RESOLVED_PROJECT_CONFIG:\",\n result.config.projectConfigPath,\n );\n } else {\n console.error(\"[primeui-mcp] RESOLUTION_FAILED:\", result.config.error);\n }\n\n return result;\n }\n}\n\nfunction toFileRootPath(rootUri: string): string | null {\n try {\n const parsed = new URL(rootUri);\n if (parsed.protocol !== \"file:\") {\n return null;\n }\n return fileURLToPath(parsed);\n } catch {\n return null;\n }\n}\n\nasync function loadClientRootFallbackCwds(\n server: ReturnType<typeof createPrimeUiMcpServer>,\n): Promise<string[]> {\n try {\n const response = await server.server.listRoots(undefined, { timeout: 1500 });\n const roots = response.roots.map((root) => root.uri);\n const resolvedRoots = roots\n .map((rootUri) => toFileRootPath(rootUri))\n .filter((rootPath): rootPath is string => Boolean(rootPath));\n\n console.error(\"[primeui-mcp] roots/list supported:\", JSON.stringify(roots));\n console.error(\n \"[primeui-mcp] roots/list file roots:\",\n JSON.stringify(resolvedRoots),\n );\n return resolvedRoots;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(\"[primeui-mcp] roots/list unavailable:\", message);\n return [];\n }\n}\n\nasync function main(): Promise<void> {\n console.error(\"CWD:\", process.cwd());\n console.error(\"CODEX_WORKSPACE_ROOT:\", process.env.CODEX_WORKSPACE_ROOT);\n console.error(\"VSCODE_CWD:\", process.env.VSCODE_CWD);\n console.error(\"INIT_CWD:\", process.env.INIT_CWD);\n console.error(\"PWD:\", process.env.PWD);\n\n let rootsFallbackCwds: string[] = [];\n const server = createPrimeUiMcpServer(\n new LazyProjectSyncSource(() => rootsFallbackCwds),\n );\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n rootsFallbackCwds = await loadClientRootFallbackCwds(server);\n}\n\nmain().catch((error) => {\n console.error(\"[primeui-mcp] failed to start\", error);\n process.exit(1);\n});\n","import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { z } from \"zod\";\n\nconst PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH = \".primeui/project.json\";\n\nconst primeUiProjectConfigSchema = z\n .object({\n projectId: z.string().trim().min(1),\n apiKey: z.string().trim().min(1),\n targetProjectPath: z\n .string()\n .trim()\n .regex(/^\\.\\/.*$/),\n })\n .passthrough();\n\nexport type PrimeUiProjectConfig = z.infer<typeof primeUiProjectConfigSchema>;\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n const fileStats = await stat(filePath);\n return fileStats.isFile();\n } catch {\n return false;\n }\n}\n\nfunction ancestors(startPath: string): string[] {\n const resolvedStartPath = path.resolve(startPath);\n const directories: string[] = [];\n let currentPath = resolvedStartPath;\n\n while (true) {\n directories.push(currentPath);\n const parentPath = path.dirname(currentPath);\n if (parentPath === currentPath) {\n break;\n }\n currentPath = parentPath;\n }\n\n return directories;\n}\n\nexport async function findPrimeUiProjectConfigPath(\n startPath: string,\n): Promise<string | undefined> {\n for (const currentPath of ancestors(startPath)) {\n const candidatePath = path.join(\n currentPath,\n PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH,\n );\n if (await fileExists(candidatePath)) {\n return candidatePath;\n }\n }\n return undefined;\n}\n\nexport async function readPrimeUiProjectConfig(\n projectConfigPath: string,\n): Promise<PrimeUiProjectConfig> {\n let projectConfigRaw: string;\n try {\n projectConfigRaw = await readFile(projectConfigPath, \"utf-8\");\n } catch (error) {\n throw new Error(\n `[primeui-mcp] failed to read ${PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n\n let projectConfigJson: unknown;\n try {\n projectConfigJson = JSON.parse(projectConfigRaw);\n } catch (error) {\n throw new Error(\n `[primeui-mcp] invalid JSON in ${PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n\n const parsedConfig = primeUiProjectConfigSchema.safeParse(projectConfigJson);\n if (!parsedConfig.success) {\n const details = parsedConfig.error.issues\n .map((issue) => `${issue.path.join(\".\") || \"<root>\"}: ${issue.message}`)\n .join(\"; \");\n throw new Error(\n `[primeui-mcp] invalid ${PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH} format: ${details}`,\n );\n }\n\n return parsedConfig.data;\n}\n\ntype ResolvePrimeUiProjectConfigOptions = {\n cwd: string;\n projectRootFromEnv?: string;\n fallbackCwds?: string[];\n};\n\nfunction toUniqueResolvedDirs(directories: Array<string | undefined>): string[] {\n const resolved = new Set<string>();\n\n for (const directory of directories) {\n const trimmed = directory?.trim();\n if (!trimmed) {\n continue;\n }\n resolved.add(path.resolve(trimmed));\n }\n\n return [...resolved];\n}\n\nexport function buildPrimeUiProjectSearchRoots(options: {\n cwd: string;\n fallbackCwds?: string[];\n}): string[] {\n return toUniqueResolvedDirs([...(options.fallbackCwds ?? []), options.cwd]);\n}\n\nexport async function resolvePrimeUiProjectConfig(\n options: ResolvePrimeUiProjectConfigOptions,\n): Promise<{\n projectRoot: string;\n projectConfigPath: string;\n projectConfig: PrimeUiProjectConfig;\n}> {\n const envProjectRoot = options.projectRootFromEnv?.trim();\n let projectConfigPath: string | undefined;\n\n if (envProjectRoot) {\n projectConfigPath = path.join(\n path.resolve(envProjectRoot),\n PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH,\n );\n } else {\n const searchRoots = buildPrimeUiProjectSearchRoots({\n cwd: options.cwd,\n fallbackCwds: options.fallbackCwds,\n });\n\n for (const searchRoot of searchRoots) {\n const foundProjectConfigPath =\n await findPrimeUiProjectConfigPath(searchRoot);\n if (foundProjectConfigPath) {\n projectConfigPath = foundProjectConfigPath;\n break;\n }\n }\n\n if (!projectConfigPath) {\n throw new Error(\n `[primeui-mcp] ${PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH} not found. Searched from: ${searchRoots.join(\", \")}. Set PRIMEUI_PROJECT_ROOT.`,\n );\n }\n }\n\n if (!projectConfigPath) {\n throw new Error(\n `[primeui-mcp] ${PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH} not found. Set PRIMEUI_PROJECT_ROOT.`,\n );\n }\n\n const projectRoot = path.dirname(path.dirname(projectConfigPath));\n const projectConfig = await readPrimeUiProjectConfig(projectConfigPath);\n\n return {\n projectRoot,\n projectConfigPath,\n projectConfig,\n };\n}\n\ntype ResolvePrimeUiApiKeyOptions = {\n projectConfig: PrimeUiProjectConfig;\n apiKeyFromEnv?: string;\n};\n\nexport async function resolvePrimeUiApiKey(\n options: ResolvePrimeUiApiKeyOptions,\n): Promise<string> {\n const envApiKey = options.apiKeyFromEnv?.trim();\n if (envApiKey) {\n return envApiKey;\n }\n\n const projectConfigApiKey = options.projectConfig.apiKey.trim();\n if (!projectConfigApiKey) {\n throw new Error(\n \"[primeui-mcp] PRIMEUI_API_KEY is missing in env and .primeui/project.json\",\n );\n }\n\n return projectConfigApiKey;\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\n\nimport {\n initialInstructions,\n toolClearTemp,\n toolInspectPage,\n toolCopyPage,\n toolCreateExport,\n toolDownloadExport,\n toolGetProjectInfo,\n toolHealthCheck,\n toolListExports,\n} from \"./instructions.js\";\nimport type { ProjectSyncSource } from \"./sources/project-sync-source.js\";\nimport type {\n PrimeUiCreateExportResult,\n PrimeUiCopyPageResult,\n PrimeUiDownloadResult,\n PrimeUiExport,\n PrimeUiHealthCheckResult,\n PrimeUiInspectPageResult,\n PrimeUiProjectInfo,\n} from \"./types.js\";\n\nfunction okResult<T>(title: string, data: T): CallToolResult {\n return {\n content: [{ type: \"text\", text: `${title} completed` }],\n structuredContent: data as Record<string, unknown>,\n };\n}\n\nfunction errorResult(error: unknown): CallToolResult {\n const message = error instanceof Error ? error.message : String(error);\n return {\n isError: true,\n content: [{ type: \"text\", text: `primeui mcp error: ${message}` }],\n };\n}\n\nexport function createPrimeUiMcpServer(source: ProjectSyncSource): McpServer {\n const server = new McpServer(\n {\n name: \"primeui-mcp-server\",\n version: \"0.1.0\",\n },\n {\n instructions: initialInstructions,\n },\n );\n\n server.registerTool(\n \"health_check\",\n toolHealthCheck,\n async (): Promise<CallToolResult> => {\n try {\n const health: PrimeUiHealthCheckResult = await source.healthCheck();\n return okResult(\"health_check\", health);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return okResult(\"health_check\", {\n status: \"degraded\",\n runtime: {\n cwd: process.cwd(),\n codexWorkspaceRoot: process.env.CODEX_WORKSPACE_ROOT?.trim() || null,\n vscodeCwd: process.env.VSCODE_CWD?.trim() || null,\n initCwd: process.env.INIT_CWD?.trim() || null,\n pwd: process.env.PWD?.trim() || null,\n searchRoots: [process.cwd()],\n rootsListFallbackCwds: [],\n },\n config: {\n found: false,\n projectRoot: null,\n projectConfigPath: null,\n targetProjectPath: null,\n targetProjectRoot: null,\n source: \"search\",\n error: `health_check fallback: ${message}`,\n },\n options: [],\n } as PrimeUiHealthCheckResult);\n }\n },\n );\n\n server.registerTool(\n \"get_project_info\",\n toolGetProjectInfo,\n async (): Promise<CallToolResult> => {\n try {\n const info: PrimeUiProjectInfo = await source.getProjectInfo();\n return okResult(\"get_project_info\", info);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"inspect_page\",\n toolInspectPage,\n async ({ pageSlug }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiInspectPageResult =\n await source.inspectPage(pageSlug);\n return okResult(\"inspect_page\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"list_exports\",\n toolListExports,\n async (): Promise<CallToolResult> => {\n try {\n const exportsList: PrimeUiExport[] = await source.listExports();\n return okResult(\"list_exports\", { exports: exportsList });\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"create_export\",\n toolCreateExport,\n async (): Promise<CallToolResult> => {\n try {\n const result: PrimeUiCreateExportResult = await source.createExport();\n return okResult(\"create_export\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"download_export\",\n toolDownloadExport,\n async ({ id }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiDownloadResult =\n await source.downloadExportById(id);\n return okResult(\"download_export\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"clear_temp\",\n toolClearTemp,\n async (): Promise<CallToolResult> => {\n try {\n await source.clearTemp();\n return okResult(\"clear_temp\", { success: true });\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"copy_page\",\n toolCopyPage,\n async ({ originPageSlug, actualPageSlug }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiCopyPageResult = await source.copyPage(\n originPageSlug,\n actualPageSlug,\n );\n return okResult(\"copy_page\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n return server;\n}\n","import { z } from \"zod/v3\";\n\nconst pageSchema = z\n .object({\n id: z\n .string()\n .describe(\n \"Stable PrimeUI page identifier. Use this to match the same page across tool responses.\",\n ),\n title: z\n .string()\n .describe(\n \"Human-readable page title. Show this to the user when confirming which pages to import.\",\n ),\n slug: z\n .string()\n .describe(\n \"PrimeUI route slug, for example '/', '/pricing', '/docs/getting-started'. Use to match user intent.\",\n ),\n pageType: z\n .string()\n .describe(\n \"PrimeUI page type classification (for example landing, docs, pricing, blogIndex, legal).\",\n ),\n isReadyToExport: z\n .boolean()\n .describe(\n \"True when this page has an active export-ready variant. Only ready pages are expected in export output.\",\n ),\n pagePath: z\n .string()\n .describe(\n \"Relative file path to the page source inside downloaded export root. Copy page code from this exact path.\",\n ),\n componentsPath: z\n .string()\n .describe(\n \"Relative directory path inside downloaded export root where page-level components live. Use as dependency copy start.\",\n ),\n })\n .describe(\n \"PrimeUI page descriptor used by project and export tools. Paths are always relative to export project root.\",\n );\n\nconst exportStatusSchema = z\n .enum([\"in_progress\", \"completed\", \"failed\"])\n .describe(\n \"Export lifecycle state. Use 'completed' before calling download_export.\",\n );\n\nconst exportItemSchema = z\n .object({\n id: z\n .string()\n .describe(\n \"Export identifier. Pass this value to download_export input.id.\",\n ),\n status: exportStatusSchema,\n createdAt: z\n .string()\n .describe(\"Export creation timestamp in ISO-8601 UTC format.\"),\n })\n .describe(\"Single export record from PrimeUI export history.\");\n\nconst exportSummarySchema = z.object({\n total: z.number().describe(\"Total pages processed in this export run.\"),\n successful: z.number().describe(\"Number of pages exported successfully.\"),\n failed: z.number().describe(\"Number of pages that failed export.\"),\n});\n\nconst exportComponentSchema = z.object({\n componentKey: z\n .string()\n .describe(\"Global component key from export manifest.\"),\n enabled: z\n .boolean()\n .describe(\"True when this global component was exported.\"),\n files: z\n .array(z.string())\n .describe(\"Files associated with this global component.\"),\n message: z\n .string()\n .describe(\"Export status message for this global component.\"),\n});\n\nconst exportPageManifestSchema = z.object({\n success: z\n .boolean()\n .describe(\"True when page export succeeded in this export run.\"),\n message: z.string().describe(\"Export status message for this page.\"),\n files: z\n .array(z.string())\n .describe(\n \"Authoritative list of page-related files from PrimeUI export manifest, including shared project files required by this page.\",\n ),\n});\n\nconst exportPageSchema = z.object({\n id: z\n .string()\n .describe(\"Stable PrimeUI page identifier for this export entry.\"),\n title: z\n .string()\n .optional()\n .describe(\n \"Optional page title from export manifest. Can be undefined for some legacy records.\",\n ),\n slug: z.string().describe(\"PrimeUI page slug included in this export.\"),\n pageType: z\n .string()\n .describe(\"PrimeUI page type for routing/path resolution.\"),\n isReadyToExport: z\n .literal(true)\n .describe(\"Always true for pages included in export payload.\"),\n pagePath: z\n .string()\n .describe(\"Page source file path relative to export root.\"),\n componentsPath: z\n .string()\n .describe(\"Page components directory path relative to export root.\"),\n manifest: exportPageManifestSchema,\n});\n\nconst fileTransferSchema = z.object({\n sourcePath: z\n .string()\n .describe(\"Relative source file path inside downloaded export root.\"),\n targetPath: z\n .string()\n .describe(\"Relative target file path inside user project root.\"),\n});\n\nconst conflictFileSchema = fileTransferSchema.extend({\n diff: z\n .string()\n .describe(\n \"Unified diff between user file and export file. For binary files the diff contains a plain message.\",\n ),\n isBinary: z\n .boolean()\n .describe(\"True if conflict comparison was treated as binary data.\"),\n});\n\nconst dependencySectionSchema = z.enum([\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n]);\n\nconst dependencyToAddSchema = z.object({\n packageName: z\n .string()\n .describe(\"Dependency package name that was missing in user package.json.\"),\n version: z.string().describe(\"Version from exported project's package.json.\"),\n section: dependencySectionSchema.describe(\n \"package.json section where dependency should be added.\",\n ),\n});\n\nconst dependencyVersionConflictSchema = z.object({\n packageName: z\n .string()\n .describe(\"Dependency package name with version mismatch.\"),\n section: dependencySectionSchema.describe(\n \"Section where export expects this dependency.\",\n ),\n exportVersion: z\n .string()\n .describe(\"Version found in exported project's package.json.\"),\n userVersion: z\n .string()\n .describe(\"Version currently present in user's package.json.\"),\n});\n\nconst pageDetailsSchema = pageSchema.extend({\n pageInstruction: z\n .string()\n .nullable()\n .describe(\n \"Current instruction text for the active page variant. Null when no active variant is set.\",\n ),\n});\n\nconst pageVariantSchema = z\n .object({\n id: z.string().describe(\"Active variant identifier.\"),\n name: z.string().describe(\"Active variant display name.\"),\n })\n .nullable()\n .describe(\n \"Active page variant. Null when page has no active variant and components are unavailable.\",\n );\n\nconst pageComponentSchema = z.object({\n blockId: z\n .string()\n .describe(\"Stable block identifier. Use as primary component instance ID.\"),\n componentId: z\n .string()\n .describe(\"Component key from variant blocks payload (block.key).\"),\n componentGroup: z\n .string()\n .describe(\"Component family/group normalized from component key.\"),\n slot: z\n .string()\n .nullable()\n .describe(\"Optional slot value from block payload.\"),\n props: z\n .record(z.unknown())\n .nullable()\n .describe(\"Raw block props payload from PrimeUI.\"),\n});\n\nconst inspectPageReportRowSchema = z.object({\n number: z.number().describe(\"1-based row number matching report order.\"),\n componentGroup: z.string().describe(\"Component family/group label.\"),\n componentId: z.string().describe(\"Component key (block key).\"),\n blockId: z\n .string()\n .describe(\"Primary component instance identifier for future operations.\"),\n title: z\n .string()\n .nullable()\n .describe(\"Title extracted by MCP from component props.\"),\n description: z\n .string()\n .nullable()\n .describe(\"Description extracted by MCP from component props.\"),\n});\n\nconst healthOptionSchema = z.object({\n key: z.string().describe(\"Environment variable or diagnostic option name.\"),\n description: z\n .string()\n .describe(\"Human-readable explanation of what this option controls.\"),\n currentValue: z\n .string()\n .nullable()\n .describe(\n \"Current effective value for this option. Null when not set or intentionally hidden.\",\n ),\n});\n\nconst healthRuntimeSchema = z.object({\n cwd: z.string().describe(\"process.cwd() observed by the MCP server process.\"),\n codexWorkspaceRoot: z\n .string()\n .nullable()\n .describe(\n \"CODEX_WORKSPACE_ROOT provided by Codex clients (tool-call scoped in some clients).\",\n ),\n vscodeCwd: z\n .string()\n .nullable()\n .describe(\"VSCODE_CWD environment value, if provided by the runtime.\"),\n initCwd: z\n .string()\n .nullable()\n .describe(\"INIT_CWD environment value, if provided by the client runtime.\"),\n pwd: z\n .string()\n .nullable()\n .describe(\"PWD environment value, if provided by the client runtime.\"),\n searchRoots: z\n .array(z.string())\n .describe(\n \"Resolved directories used when searching for .primeui/project.json.\",\n ),\n rootsListFallbackCwds: z\n .array(z.string())\n .describe(\n \"File-system roots derived from MCP roots/list and used as search fallbacks.\",\n ),\n});\n\nconst healthConfigSchema = z.object({\n found: z\n .boolean()\n .describe(\"True when .primeui/project.json was found and parsed successfully.\"),\n projectRoot: z\n .string()\n .nullable()\n .describe(\"Resolved PrimeUI project root directory (parent of .primeui).\"),\n projectConfigPath: z\n .string()\n .nullable()\n .describe(\"Absolute path to .primeui/project.json when found.\"),\n targetProjectPath: z\n .string()\n .nullable()\n .describe(\"targetProjectPath value loaded from project config.\"),\n targetProjectRoot: z\n .string()\n .nullable()\n .describe(\"Absolute target project root derived from targetProjectPath.\"),\n source: z\n .enum([\"env.PRIMEUI_PROJECT_ROOT\", \"search\"])\n .describe(\"How project config lookup was resolved.\"),\n error: z\n .string()\n .nullable()\n .describe(\"Human-readable resolution error when config is not available.\"),\n});\n\n// ============================================================\n// Shared constants\n// ============================================================\n\nconst TRIGGER_PHRASES = [\n \"import page from PrimeUI\",\n \"add page from PrimeUI\",\n \"sync pages\",\n \"pull page\",\n \"transfer page\",\n \"get page from PrimeUI\",\n \"bring page from PrimeUI\",\n \"export from PrimeUI\",\n].join(\", \");\n\nconst WORKFLOW_SUMMARY = `\nWORKFLOW ORDER (always follow this sequence):\n1. clear_temp -> cleanup stale temp files from previous runs before starting new import flow\n2. get_project_info -> discover PrimeUI pages\n3. Reconcile PrimeUI pages with local project pages/routes/paths, then confirm target pages with user\n4. inspect_page -> inspect selected page components and produce a structured comparison table\n5. create_export -> generate export snapshot and local manifest with page file lists + global components\n6. download_export -> download to temp directory\n7. copy_page -> copy one page safely (repeat for each selected page)\n8. Reconcile integration points and resolve reported conflicts, if any\n`.trim();\n\n// ============================================================\n// Server Instructions (initialInstructions)\n// ============================================================\n\nexport const initialInstructions = `\nPrimeUI MCP enables importing pages from PrimeUI Studio into your local project.\n\nTRIGGER EXAMPLES (semantic intent, not exact phrase matching): ${TRIGGER_PHRASES}\n\n${WORKFLOW_SUMMARY}\n\nCRITICAL RULES FOR PAGE IMPORT:\n- Import is PAGE-BY-PAGE only. Never import the entire project at once.\n- Use health_check to inspect runtime path/config resolution when setup issues occur.\n- Always call clear_temp at the very beginning of a new import flow to avoid stale export state.\n- After get_project_info, always compare PrimeUI pages against the user's existing local project pages before proposing imports.\n- Reconciliation report MUST include: page presence match, slug/pagePath/componentsPath path match, and proposed action per page.\n- Decision matrix:\n - PrimeUI + local page exists -> candidate for update/review.\n - PrimeUI exists, local missing -> import candidate.\n - Local exists, PrimeUI missing -> custom local page, no action unless user asks.\n - Both exist but path mismatch -> ambiguous, export + compare before deciding.\n- For targeted component-level analysis on a specific page, call inspect_page before export/copy.\n- After inspect_page returns report table, supplement that table with local project page state:\n mark what already exists, what is missing, and what differs.\n- Before creating export, ask user which pages to add/update (specific pages or all missing pages) and keep that choice in thread context.\n- create_export response includes:\n - page-level manifest files per page ('pages[].manifest.files'),\n - global components list ('export.components').\n Mention both to user after create_export, because this is the source of truth for copy decisions.\n- The downloaded export in .primeui/temp/ contains a full standalone Next.js project.\n Do NOT copy it wholesale.\n- Always call copy_page for each confirmed page instead of manual file copy.\n- copy_page performs safe copy only:\n - new files are copied,\n - identical files are reported,\n - conflicting files are NEVER overwritten and are returned with diff.\n- copy_page reads and validates files only from 'pages[].manifest.files' in local sidecar manifest.\n- copy_page may add only missing dependencies to user's package.json.\n It never upgrades existing dependency versions and never runs dependency installation.\n- After page copy operations, inspect integration points (navigation configs, link menus, route registries, page indexes).\n- If integration pattern is obvious, apply it and explicitly mark it in the report with \"⚠ integration update\".\n- If integration pattern is unclear, ask the user before editing integration files.\n`.trim();\n\n// ============================================================\n// Tool: health_check\n// ============================================================\n\nexport const toolHealthCheck = {\n title: \"PrimeUI Health Check\",\n description: `Diagnostic tool for MCP runtime setup. This tool MUST NOT fail: it always returns structured diagnostics even when project config is missing.\n\nWHEN TO USE:\n- Use this first when PrimeUI MCP tools fail due to project path/config issues.\n- Use this to verify cwd/env/roots behavior in different MCP clients (Codex, Claude Code, Inspector).\n\nRETURNS:\n- Runtime paths (cwd, CODEX_WORKSPACE_ROOT, VSCODE_CWD, INIT_CWD, PWD, search roots),\n- roots/list fallback paths from client (if available),\n- Whether .primeui/project.json was found and parsed,\n- Effective resolved project root/config path (when available),\n- Current option values and fallback guidance.`,\n inputSchema: {},\n outputSchema: {\n status: z\n .enum([\"ok\", \"degraded\"])\n .describe(\"Overall setup health. 'degraded' means config is unresolved.\"),\n runtime: healthRuntimeSchema,\n config: healthConfigSchema,\n options: z\n .array(healthOptionSchema)\n .describe(\"Environment and runtime options relevant for configuration.\"),\n },\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n};\n\n// ============================================================\n// Tool: get_project_info\n// ============================================================\n\nexport const toolGetProjectInfo = {\n title: \"PrimeUI Project Info\",\n description: `ENTRY POINT for all PrimeUI import operations. Always start here. Returns project metadata and the full list of available pages.\n\nWHEN TO USE: Call this FIRST when user wants to import, add, sync, pull, or transfer a page from PrimeUI. Intent examples (semantic intent, not exact phrase matching): ${TRIGGER_PHRASES}.\n\nAFTER CALLING:\n- Scan the user's local project to discover existing pages/routes and related page component folders.\n- Build a reconciliation report between PrimeUI and local project with action labels:\n - Page exists in both PrimeUI and local project.\n - Page exists in PrimeUI but not in local project -> import candidate.\n - Page exists in local project but not in PrimeUI -> custom local page, no action by default.\n - Page exists in both but slug/pagePath/componentsPath mapping does not match -> ambiguous, requires export-based comparison before decision.\n- If user already requested specific pages, first verify those pages exist in PrimeUI and are isReadyToExport: true.\n- If any requested page is not found or not ready, report this immediately and ask for replacement page choices.\n- Ask the user which pages to add or update now (specific page list or all missing pages) and keep this decision in thread context.\n- Import works per page. Multiple pages are allowed, but each page transfer is handled explicitly.\n- Only after user decision is clear, proceed to create_export.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: {},\n outputSchema: {\n projectId: z\n .string()\n .describe(\n \"PrimeUI project identifier associated with the API key and current import session context.\",\n ),\n projectName: z\n .string()\n .describe(\n \"Human-readable PrimeUI project name for confirmations in chat.\",\n ),\n metadata: z\n .record(z.unknown())\n .describe(\n \"Additional project metadata from PrimeUI. May include project-description and other context fields.\",\n ),\n pages: z\n .array(pageSchema)\n .describe(\n \"All pages visible for this project context. Filter by user request and isReadyToExport before creating export.\",\n ),\n },\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: inspect_page\n// ============================================================\n\nexport const toolInspectPage = {\n title: \"PrimeUI Inspect Page\",\n description: `Targeted inspection tool for one PrimeUI page. Returns page details, active variant (if present), raw components payload, and a formatted report table.\n\nWHEN TO USE:\n- Call this after get_project_info when user wants component-level analysis for a specific page.\n- Use this before export/copy when user asks to compare or selectively update page sections.\n\nAFTER CALLING:\n- Use report + reportRows to present the component table:\n Number (1-based), ComponentGroup (ComponentId), Title/Description, blockId.\n- Then supplement this table with the CURRENT local project page state:\n what already exists, what is missing, and what differs.\n- Do not assume componentId is unique. Use blockId as the primary component instance identifier.\n\nIf page has no active variant, components is null (not empty array), and report explains why.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: {\n pageSlug: z\n .string()\n .describe(\n \"PrimeUI page slug to inspect, for example '/', '/pricing', '/docs/getting-started'.\",\n ),\n },\n outputSchema: {\n page: pageDetailsSchema.describe(\n \"Single PrimeUI page details resolved by slug with pageInstruction.\",\n ),\n variant: pageVariantSchema,\n components: z\n .array(pageComponentSchema)\n .nullable()\n .describe(\n \"Raw component instances from active variant. Null when page has no active variant.\",\n ),\n report: z\n .string()\n .describe(\n \"Formatted report table generated by MCP from component payload (includes extracted title/description summary).\",\n ),\n reportRows: z\n .array(inspectPageReportRowSchema)\n .describe(\n \"Structured report rows with 1-based numbering and extracted title/description fields.\",\n ),\n },\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: list_exports\n// ============================================================\n\nexport const toolListExports = {\n title: \"PrimeUI Export List\",\n description: `Auxiliary tool to list previously created exports with their IDs, statuses, and creation dates. This is NOT the starting point for page import - start with get_project_info instead.\n\nWHEN TO USE: This is an OPTIONAL helper tool, NOT part of the main import flow. Use it only when:\n- Something went wrong with an export and you need to check its status.\n- The user explicitly references a previous export by date or context.\n- You need to verify whether an export initiated via PrimeUI Studio UI has completed.\n\nNote: exports can be created both through create_export AND by the user directly in PrimeUI Studio UI. This tool shows all of them.\n\nDo NOT use this tool as a substitute for create_export. Always create a fresh export unless the user explicitly asks to use a previous one.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: {},\n outputSchema: {\n exports: z\n .array(exportItemSchema)\n .describe(\n \"Available exports sorted by API policy. Use item.id to download a specific prior export if user asks.\",\n ),\n },\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: create_export\n// ============================================================\n\nexport const toolCreateExport = {\n title: \"PrimeUI Create Export\",\n description: `Create a new export snapshot from the current PrimeUI project state and wait for completion. Returns strict export manifest payload from API, including page-level file manifests and global components.\n\nWHEN TO USE: Call this AFTER the user has confirmed which pages they want to import via get_project_info. This tool is REQUIRED before download_export, unless the user explicitly and directly asked to download a specific previous export.\n\nAFTER CALLING:\n- Verify that all user-selected pages are present in the export result AND have isReadyToExport: true.\n- If path mismatch pages were flagged during project-info reconciliation, ensure they are included for deeper comparison after download.\n- If any required page is missing or not ready, report and pause for user decision before proceeding.\n- Mention that global components are available in export.components and can be transferred separately if needed.\n- Local sidecar manifest is saved to .primeui/temp/exports/[exportId].manifest.json from this API payload.\n- Use the returned export ID to call download_export.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: {},\n outputSchema: {\n export: z\n .object({\n id: z\n .string()\n .describe(\n \"Freshly created export identifier. Use this as download_export input.id.\",\n ),\n status: exportStatusSchema,\n createdAt: z\n .string()\n .describe(\"Export creation timestamp in ISO-8601 UTC format.\"),\n expiresAt: z\n .string()\n .nullable()\n .describe(\n \"Export expiration timestamp in ISO-8601 UTC format, or null when export has no explicit expiration.\",\n ),\n summary: exportSummarySchema.describe(\n \"Export run summary with total/successful/failed counters.\",\n ),\n components: z\n .array(exportComponentSchema)\n .describe(\n \"Global component export manifest. These components are independent from page-level manifests.\",\n ),\n })\n .describe(\"Created export summary.\"),\n pages: z\n .array(exportPageSchema)\n .describe(\n \"Strict page payload associated with this export, including per-page manifest files list.\",\n ),\n },\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: download_export\n// ============================================================\n\nexport const toolDownloadExport = {\n title: \"PrimeUI Download Export\",\n description: `Download a completed export into .primeui/temp/exports/[exportId]. Downloads and extracts the full export as a standalone Next.js project into the temp directory. This does NOT modify the user's project - files land only in .primeui/temp/.\n\nDo NOT call this as the first step. Requires export ID from create_export. Start with get_project_info instead.\n\nWHEN TO USE: Call this AFTER create_export has returned a completed export. Requires export ID from create_export so MCP can use the matching local sidecar manifest.\n\nNOTE:\n- Download of an export ID without local sidecar manifest will fail.\n- For previous exports, create a fresh export first when possible.\n\nAFTER DOWNLOAD:\n- Use manifestPath from this response as the contract for page slug/path mapping and manifest file lists in copy operations.\n- For each selected page, call copy_page with:\n - originPageSlug (required),\n - actualPageSlug (optional, if route remap is needed).\n- If there are unresolved conflicts in copy report, stop and ask the user.\n- Do not force cleanup at flow end; keep downloaded export files available for validation and follow-up checks.\n\n ${WORKFLOW_SUMMARY}`,\n inputSchema: {\n id: z\n .string()\n .describe(\n \"Export identifier to download. Prefer export.id from create_export; use list_exports only on explicit user request.\",\n ),\n },\n outputSchema: {\n exportId: z\n .string()\n .describe(\n \"Downloaded export identifier. Should match the requested input.id for traceability.\",\n ),\n projectPath: z\n .string()\n .describe(\n \"Absolute local path to extracted export root in .primeui/temp/exports/[exportId]. Read files from here only.\",\n ),\n manifestPath: z\n .string()\n .describe(\n \"Absolute path to sidecar export manifest file (.primeui/temp/exports/[exportId].manifest.json) saved by create_export and required by copy_page.\",\n ),\n pages: z\n .array(exportPageSchema)\n .describe(\n \"Page descriptors loaded from local sidecar export manifest for import decisions.\",\n ),\n },\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: copy_page\n// ============================================================\n\nexport const toolCopyPage = {\n title: \"PrimeUI Copy Page\",\n description: `Safely copy one page from downloaded export into the user's local project. Works only with local files in .primeui/temp/exports and does NOT call PrimeUI API.\n\nWHEN TO USE:\n- Call this AFTER download_export.\n- Call once per selected page.\n- Use actualPageSlug only when user wants to remap route during import.\n\nBEHAVIOR:\n- Reads export sidecar manifest to resolve originPageSlug -> pagePath/componentsPath.\n- Copies and validates files strictly from pages[].manifest.files for the selected page.\n- Never overwrites existing conflicting files.\n- Reports:\n a) copied new files,\n b) identical existing files,\n c) conflicting files with diff,\n d) missing dependencies added to package.json,\n e) dependency version conflicts (report-only, no auto upgrade).\n- Adds only missing dependencies to package.json (dependencies/devDependencies/peerDependencies).\n- Never updates existing dependency versions and never runs install commands.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: {\n originPageSlug: z\n .string()\n .describe(\n \"Source page slug from PrimeUI project pages list, for example '/', '/pricing', '/docs'.\",\n ),\n actualPageSlug: z\n .string()\n .optional()\n .describe(\n \"Optional destination slug in user's project. If omitted, originPageSlug is used.\",\n ),\n },\n outputSchema: {\n exportId: z\n .string()\n .describe(\"Resolved local export identifier used for copy operation.\"),\n exportPath: z\n .string()\n .describe(\"Absolute path to local extracted export project root.\"),\n originPageSlug: z\n .string()\n .describe(\"Normalized source page slug requested for copy.\"),\n actualPageSlug: z\n .string()\n .describe(\"Normalized destination slug used for target route paths.\"),\n sourcePagePath: z\n .string()\n .describe(\"Source page path relative to export root.\"),\n targetPagePath: z\n .string()\n .describe(\"Destination page path relative to user project root.\"),\n sourceComponentsPath: z\n .string()\n .describe(\"Source components directory relative to export root.\"),\n targetComponentsPath: z\n .string()\n .describe(\n \"Destination components directory relative to user project root.\",\n ),\n newFiles: z\n .array(fileTransferSchema)\n .describe(\"New files copied into user project without conflicts.\"),\n identicalFiles: z\n .array(fileTransferSchema)\n .describe(\n \"Existing files in user project that are byte-identical to export files.\",\n ),\n conflictFiles: z\n .array(conflictFileSchema)\n .describe(\n \"Files that already exist and differ from export version. Never overwritten.\",\n ),\n addedDependencies: z\n .array(dependencyToAddSchema)\n .describe(\n \"Dependencies that were missing and have been added to user's package.json.\",\n ),\n dependenciesVersionConflicts: z\n .array(dependencyVersionConflictSchema)\n .describe(\n \"Dependencies with version mismatch between export and user project. Report only.\",\n ),\n summary: z.object({\n totalCandidateFiles: z\n .number()\n .describe(\n \"Total number of candidate files considered for page copy from pages[].manifest.files.\",\n ),\n copiedFiles: z.number().describe(\"Number of files copied as new.\"),\n identicalFiles: z\n .number()\n .describe(\"Number of files detected as identical.\"),\n conflictFiles: z\n .number()\n .describe(\"Number of conflicting files not copied.\"),\n addedDependencies: z\n .number()\n .describe(\"Count of dependencies added to package.json.\"),\n dependenciesVersionConflicts: z\n .number()\n .describe(\"Count of dependency version mismatches reported.\"),\n }),\n },\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n};\n\n// ============================================================\n// Tool: clear_temp\n// ============================================================\n\nexport const toolClearTemp = {\n title: \"PrimeUI Clear Temp\",\n description: `Delete all files in .primeui/temp/ and recreate empty temp structure.\n\nCall this at the START of a new import flow, before get_project_info/create_export, to reset stale temp state from previous runs.\n\nWHEN TO USE: Call once at the beginning of each new import flow. Do not call this between page imports in the same flow.\n\nSafe to call multiple times. Only affects .primeui/temp/ directory - never touches the user's project files.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: {},\n outputSchema: {\n success: z\n .boolean()\n .describe(\n \"True when temp cleanup completed and baseline temp structure was recreated.\",\n ),\n },\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n};\n","import path from \"node:path\";\n\nimport {\n buildPrimeUiProjectSearchRoots,\n resolvePrimeUiProjectConfig,\n} from \"../lib/project-link-config.js\";\nimport type { PrimeUiHealthCheckResult, PrimeUiHealthOption } from \"../types.js\";\n\ntype RunPrimeUiHealthCheckInput = {\n cwd: string;\n codexWorkspaceRoot?: string;\n vscodeCwd?: string;\n initCwd?: string;\n pwd?: string;\n projectRootFromEnv?: string;\n apiBaseUrlFromEnv?: string;\n apiKeyFromEnv?: string;\n fallbackCwds?: string[];\n rootsListFallbackCwds?: string[];\n};\n\nfunction normalizeOptional(value: string | undefined): string | null {\n const trimmed = value?.trim();\n return trimmed ? trimmed : null;\n}\n\nfunction buildHealthOptions(input: {\n projectRootFromEnv: string | null;\n apiBaseUrlFromEnv: string | null;\n apiKeyFromEnv: string | null;\n codexWorkspaceRoot: string | null;\n vscodeCwd: string | null;\n initCwd: string | null;\n pwd: string | null;\n}): PrimeUiHealthOption[] {\n return [\n {\n key: \"CODEX_WORKSPACE_ROOT\",\n description:\n \"Preferred workspace root from Codex clients. May appear only during tool calls.\",\n currentValue: input.codexWorkspaceRoot,\n },\n {\n key: \"VSCODE_CWD\",\n description:\n \"Workspace cwd hint set by some VS Code runtimes. Used as project search fallback.\",\n currentValue: input.vscodeCwd,\n },\n {\n key: \"INIT_CWD\",\n description:\n \"Install/runtime cwd hint. Used as fallback when workspace-specific env is unavailable.\",\n currentValue: input.initCwd,\n },\n {\n key: \"PWD\",\n description:\n \"Shell working directory hint. Used as fallback when workspace-specific env is unavailable.\",\n currentValue: input.pwd,\n },\n {\n key: \"PRIMEUI_PROJECT_ROOT\",\n description:\n \"Optional absolute root containing .primeui/project.json. Use as explicit override.\",\n currentValue: input.projectRootFromEnv,\n },\n {\n key: \"PRIMEUI_API_BASE_URL\",\n description: \"Optional PrimeUI API base URL override.\",\n currentValue: input.apiBaseUrlFromEnv,\n },\n {\n key: \"PRIMEUI_API_KEY\",\n description:\n \"Optional API key override. If missing, MCP uses apiKey from .primeui/project.json.\",\n currentValue: input.apiKeyFromEnv ? \"set\" : null,\n },\n {\n key: \"Fallback search\",\n description:\n \"When PRIMEUI_PROJECT_ROOT is not set, MCP prioritizes CODEX_WORKSPACE_ROOT/VSCODE_CWD, then roots/list file roots, INIT_CWD, PWD, and finally process.cwd().\",\n currentValue: null,\n },\n ];\n}\n\nexport async function runPrimeUiHealthCheck(\n input: RunPrimeUiHealthCheckInput,\n): Promise<PrimeUiHealthCheckResult> {\n const projectRootFromEnv = normalizeOptional(input.projectRootFromEnv);\n const apiBaseUrlFromEnv = normalizeOptional(input.apiBaseUrlFromEnv);\n const apiKeyFromEnv = normalizeOptional(input.apiKeyFromEnv);\n const codexWorkspaceRoot = normalizeOptional(input.codexWorkspaceRoot);\n const vscodeCwd = normalizeOptional(input.vscodeCwd);\n const initCwd = normalizeOptional(input.initCwd);\n const pwd = normalizeOptional(input.pwd);\n\n const rootsListFallbackCwds = (input.rootsListFallbackCwds ?? [])\n .map((value) => value.trim())\n .filter(Boolean)\n .map((value) => path.resolve(value));\n const fallbackCwds = (input.fallbackCwds ?? [])\n .map((value) => value.trim())\n .filter(Boolean);\n\n const searchRoots = buildPrimeUiProjectSearchRoots({\n cwd: input.cwd,\n fallbackCwds,\n });\n\n try {\n const resolvedProjectConfig = await resolvePrimeUiProjectConfig({\n cwd: input.cwd,\n projectRootFromEnv: projectRootFromEnv ?? undefined,\n fallbackCwds,\n });\n const targetProjectPath = resolvedProjectConfig.projectConfig.targetProjectPath;\n\n return {\n status: \"ok\",\n runtime: {\n cwd: path.resolve(input.cwd),\n codexWorkspaceRoot,\n vscodeCwd,\n initCwd,\n pwd,\n searchRoots,\n rootsListFallbackCwds,\n },\n config: {\n found: true,\n projectRoot: resolvedProjectConfig.projectRoot,\n projectConfigPath: resolvedProjectConfig.projectConfigPath,\n targetProjectPath,\n targetProjectRoot: path.resolve(\n resolvedProjectConfig.projectRoot,\n targetProjectPath,\n ),\n source: projectRootFromEnv ? \"env.PRIMEUI_PROJECT_ROOT\" : \"search\",\n error: null,\n },\n options: buildHealthOptions({\n projectRootFromEnv,\n apiBaseUrlFromEnv,\n apiKeyFromEnv,\n codexWorkspaceRoot,\n vscodeCwd,\n initCwd,\n pwd,\n }),\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n status: \"degraded\",\n runtime: {\n cwd: path.resolve(input.cwd),\n codexWorkspaceRoot,\n vscodeCwd,\n initCwd,\n pwd,\n searchRoots,\n rootsListFallbackCwds,\n },\n config: {\n found: false,\n projectRoot: null,\n projectConfigPath: null,\n targetProjectPath: null,\n targetProjectRoot: null,\n source: projectRootFromEnv ? \"env.PRIMEUI_PROJECT_ROOT\" : \"search\",\n error: message,\n },\n options: buildHealthOptions({\n projectRootFromEnv,\n apiBaseUrlFromEnv,\n apiKeyFromEnv,\n codexWorkspaceRoot,\n vscodeCwd,\n initCwd,\n pwd,\n }),\n };\n }\n}\n","import path from \"node:path\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { ensureDir, extractZip, resetDir, writeUtf8 } from \"../lib/fs.js\";\nimport type { ProjectDataProvider } from \"../sources/project-data-provider.js\";\nimport type { ProjectSyncSource } from \"../sources/project-sync-source.js\";\nimport { copyPageFromExport } from \"./page-copy-service.js\";\nimport { buildInspectPageReport } from \"./page-inspect-report.js\";\nimport type {\n PrimeUiCopyPageResult,\n PrimeUiCreateExportResult,\n PrimeUiDownloadResult,\n PrimeUiHealthCheckResult,\n PrimeUiExportManifest,\n PrimeUiExport,\n PrimeUiExportPage,\n PrimeUiExportPageManifest,\n PrimeUiExportSummary,\n PrimeUiExportedComponent,\n PrimeUiInspectPageResult,\n PrimeUiProjectInfo,\n} from \"../types.js\";\n\ntype ProjectSyncServiceOptions = {\n projectRoot: string;\n targetProjectRoot: string;\n provider: ProjectDataProvider;\n};\n\nfunction isExportStatus(value: unknown): value is PrimeUiExport[\"status\"] {\n return value === \"in_progress\" || value === \"completed\" || value === \"failed\";\n}\n\nfunction isExportSummary(value: unknown): value is PrimeUiExportSummary {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const maybe = value as Record<string, unknown>;\n return (\n typeof maybe.total === \"number\" &&\n typeof maybe.successful === \"number\" &&\n typeof maybe.failed === \"number\"\n );\n}\n\nfunction isExportedComponent(\n value: unknown,\n): value is PrimeUiExportedComponent {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const maybe = value as Record<string, unknown>;\n return (\n typeof maybe.componentKey === \"string\" &&\n typeof maybe.enabled === \"boolean\" &&\n Array.isArray(maybe.files) &&\n maybe.files.every((item) => typeof item === \"string\") &&\n typeof maybe.message === \"string\"\n );\n}\n\nfunction isExportPageManifest(\n value: unknown,\n): value is PrimeUiExportPageManifest {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const maybe = value as Record<string, unknown>;\n return (\n typeof maybe.success === \"boolean\" &&\n typeof maybe.message === \"string\" &&\n Array.isArray(maybe.files) &&\n maybe.files.every((item) => typeof item === \"string\")\n );\n}\n\nfunction isExportPage(value: unknown): value is PrimeUiExportPage {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const maybe = value as Record<string, unknown>;\n const title = maybe.title;\n return (\n typeof maybe.id === \"string\" &&\n (typeof title === \"string\" || typeof title === \"undefined\") &&\n typeof maybe.slug === \"string\" &&\n typeof maybe.pageType === \"string\" &&\n maybe.isReadyToExport === true &&\n typeof maybe.pagePath === \"string\" &&\n typeof maybe.componentsPath === \"string\" &&\n isExportPageManifest(maybe.manifest)\n );\n}\n\nfunction buildManifestPath(exportsRoot: string, exportId: string): string {\n return path.join(exportsRoot, `${exportId}.manifest.json`);\n}\n\nfunction parseExportManifest(value: unknown): PrimeUiExportManifest {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"Export manifest is invalid.\");\n }\n\n const maybe = value as Record<string, unknown>;\n const exportPayload = maybe.export;\n if (!exportPayload || typeof exportPayload !== \"object\") {\n throw new Error(\"Export manifest export payload is invalid.\");\n }\n const exportObject = exportPayload as Record<string, unknown>;\n const status = exportObject.status;\n const summary = exportObject.summary;\n const components = exportObject.components;\n if (\n typeof exportObject.id !== \"string\" ||\n !isExportStatus(status) ||\n typeof exportObject.createdAt !== \"string\" ||\n !(\"expiresAt\" in exportObject) ||\n !(\n typeof exportObject.expiresAt === \"string\" ||\n exportObject.expiresAt === null\n ) ||\n !isExportSummary(summary) ||\n !Array.isArray(components) ||\n !components.every(isExportedComponent) ||\n !Array.isArray(maybe.pages)\n ) {\n throw new Error(\"Export manifest does not match expected schema.\");\n }\n\n if (!maybe.pages.every(isExportPage)) {\n throw new Error(\"Export manifest pages payload is invalid.\");\n }\n\n return {\n export: {\n id: exportObject.id,\n status,\n createdAt: exportObject.createdAt,\n expiresAt: exportObject.expiresAt as string | null,\n summary,\n components,\n },\n pages: maybe.pages,\n };\n}\n\nexport class ProjectSyncService implements ProjectSyncSource {\n private readonly provider: ProjectDataProvider;\n private readonly projectRoot: string;\n private readonly targetProjectRoot: string;\n private readonly primeUiRoot: string;\n private readonly tempRoot: string;\n private readonly exportsRoot: string;\n\n constructor(options: ProjectSyncServiceOptions) {\n this.projectRoot = options.projectRoot;\n this.targetProjectRoot = options.targetProjectRoot;\n this.provider = options.provider;\n this.primeUiRoot = path.join(this.projectRoot, \".primeui\");\n this.tempRoot = path.join(this.primeUiRoot, \"temp\");\n this.exportsRoot = path.join(this.tempRoot, \"exports\");\n }\n\n async getProjectInfo(): Promise<PrimeUiProjectInfo> {\n await this.ensureTempLayout();\n return this.provider.getProjectInfo();\n }\n\n async listExports(): Promise<PrimeUiExport[]> {\n await this.ensureTempLayout();\n return this.provider.listExports();\n }\n\n async createExport(): Promise<PrimeUiCreateExportResult> {\n await this.ensureTempLayout();\n const result = await this.provider.createExport();\n const manifestPath = buildManifestPath(this.exportsRoot, result.export.id);\n await writeUtf8(manifestPath, `${JSON.stringify(result, null, 2)}\\n`);\n\n return result;\n }\n\n async downloadExportById(id: string): Promise<PrimeUiDownloadResult> {\n await this.ensureTempLayout();\n\n const exportsList = await this.provider.listExports();\n const selected = exportsList.find((item) => item.id === id);\n\n if (!selected) {\n throw new Error(`Export not found: ${id}`);\n }\n\n const targetZipPath = path.join(this.exportsRoot, `${id}.zip`);\n const targetProjectPath = path.join(this.exportsRoot, id);\n const manifestPath = buildManifestPath(this.exportsRoot, id);\n\n let manifest: PrimeUiExportManifest;\n try {\n manifest = parseExportManifest(\n JSON.parse(await readFile(manifestPath, \"utf-8\")) as unknown,\n );\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Export manifest is required for download id \"${id}\". Run create_export for this export before downloading. Details: ${reason}`,\n );\n }\n\n if (manifest.export.id !== id) {\n throw new Error(\n `Export manifest mismatch for id \"${id}\". Run create_export and retry download.`,\n );\n }\n\n await ensureDir(this.exportsRoot);\n await this.provider.downloadExportArchive(id, targetZipPath);\n\n await resetDir(targetProjectPath);\n await extractZip(targetZipPath, targetProjectPath);\n const pages = manifest.pages;\n\n return {\n exportId: id,\n projectPath: targetProjectPath,\n manifestPath,\n pages,\n };\n }\n\n async inspectPage(slug: string): Promise<PrimeUiInspectPageResult> {\n await this.ensureTempLayout();\n\n const pageDetails = await this.provider.getProjectPageBySlug(slug);\n const reportPayload = buildInspectPageReport(pageDetails);\n\n return {\n ...pageDetails,\n report: reportPayload.report,\n reportRows: reportPayload.reportRows,\n };\n }\n\n async copyPage(\n originPageSlug: string,\n actualPageSlug?: string,\n ): Promise<PrimeUiCopyPageResult> {\n await this.ensureTempLayout();\n\n return copyPageFromExport({\n projectRoot: this.targetProjectRoot,\n exportsRoot: this.exportsRoot,\n originPageSlug,\n actualPageSlug,\n });\n }\n\n async clearTemp(): Promise<void> {\n await resetDir(this.tempRoot);\n await ensureDir(this.exportsRoot);\n }\n\n async healthCheck(): Promise<PrimeUiHealthCheckResult> {\n return {\n status: \"ok\",\n runtime: {\n cwd: process.cwd(),\n codexWorkspaceRoot: process.env.CODEX_WORKSPACE_ROOT?.trim() || null,\n vscodeCwd: process.env.VSCODE_CWD?.trim() || null,\n initCwd: process.env.INIT_CWD?.trim() || null,\n pwd: process.env.PWD?.trim() || null,\n searchRoots: [process.cwd()],\n rootsListFallbackCwds: [],\n },\n config: {\n found: true,\n projectRoot: this.projectRoot,\n projectConfigPath: path.join(this.projectRoot, \".primeui\", \"project.json\"),\n targetProjectPath: path.relative(\n this.projectRoot,\n this.targetProjectRoot,\n ).startsWith(\".\")\n ? \"./\"\n : `./${path.relative(this.projectRoot, this.targetProjectRoot)}`,\n targetProjectRoot: this.targetProjectRoot,\n source: process.env.PRIMEUI_PROJECT_ROOT?.trim()\n ? \"env.PRIMEUI_PROJECT_ROOT\"\n : \"search\",\n error: null,\n },\n options: [\n {\n key: \"CODEX_WORKSPACE_ROOT\",\n description:\n \"Preferred workspace root from Codex clients. May appear only during tool calls.\",\n currentValue: process.env.CODEX_WORKSPACE_ROOT?.trim() || null,\n },\n {\n key: \"VSCODE_CWD\",\n description:\n \"Workspace cwd hint set by some VS Code runtimes. Used as project search fallback.\",\n currentValue: process.env.VSCODE_CWD?.trim() || null,\n },\n {\n key: \"INIT_CWD\",\n description:\n \"Install/runtime cwd hint. Used as fallback when workspace-specific env is unavailable.\",\n currentValue: process.env.INIT_CWD?.trim() || null,\n },\n {\n key: \"PWD\",\n description:\n \"Shell working directory hint. Used as fallback when workspace-specific env is unavailable.\",\n currentValue: process.env.PWD?.trim() || null,\n },\n {\n key: \"PRIMEUI_PROJECT_ROOT\",\n description:\n \"Optional absolute root containing .primeui/project.json. Use as explicit override.\",\n currentValue: process.env.PRIMEUI_PROJECT_ROOT?.trim() || null,\n },\n {\n key: \"PRIMEUI_API_BASE_URL\",\n description: \"Optional PrimeUI API base URL override.\",\n currentValue: process.env.PRIMEUI_API_BASE_URL?.trim() || null,\n },\n {\n key: \"PRIMEUI_API_KEY\",\n description:\n \"Optional API key override. If missing, MCP uses apiKey from .primeui/project.json.\",\n currentValue: process.env.PRIMEUI_API_KEY?.trim() ? \"set\" : null,\n },\n ],\n };\n }\n\n private async ensureTempLayout(): Promise<void> {\n await ensureDir(this.primeUiRoot);\n await ensureDir(this.tempRoot);\n await ensureDir(this.exportsRoot);\n }\n}\n","import { mkdir, rm, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport extractZipArchive from \"extract-zip\";\n\nexport async function ensureDir(dirPath: string): Promise<void> {\n await mkdir(dirPath, { recursive: true });\n}\n\nexport async function resetDir(dirPath: string): Promise<void> {\n await rm(dirPath, { recursive: true, force: true });\n await mkdir(dirPath, { recursive: true });\n}\n\nexport async function writeUtf8(\n filePath: string,\n content: string,\n): Promise<void> {\n await ensureDir(path.dirname(filePath));\n await writeFile(filePath, content, \"utf-8\");\n}\n\nexport async function extractZip(\n zipPath: string,\n targetDir: string,\n): Promise<void> {\n await ensureDir(targetDir);\n\n try {\n await extractZipArchive(zipPath, { dir: targetDir });\n } catch (error) {\n const details = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to extract zip at \"${zipPath}\". ${details}`);\n }\n}\n","import { readFile, readdir, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { ensureDir } from \"../lib/fs.js\";\nimport { buildImportGraph } from \"../lib/import-graph.js\";\nimport { resolvePrimeUiPageExportPaths } from \"../lib/page-paths.js\";\nimport { buildUnifiedDiff } from \"../lib/text-diff.js\";\nimport type {\n PrimeUiCopyPageResult,\n PrimeUiDependencySection,\n PrimeUiDependencyToAdd,\n PrimeUiDependencyVersionConflict,\n PrimeUiExportManifest,\n} from \"../types.js\";\n\nconst DEPENDENCY_SECTIONS: PrimeUiDependencySection[] = [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n];\nconst REWRITABLE_IMPORT_EXTENSIONS = new Set([\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n]);\n\ntype CopyPageServiceInput = {\n projectRoot: string;\n exportsRoot: string;\n originPageSlug: string;\n actualPageSlug?: string;\n};\n\ntype PackageJsonRecord = Record<string, unknown> & {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n};\n\ntype DependencyMatch = {\n section: PrimeUiDependencySection;\n version: string;\n};\n\ntype ImportRewritePlan = {\n sourceAtAliasPrefix: string;\n targetAtAliasPrefix: string;\n sourceRootAliasPrefix: string;\n targetRootAliasPrefix: string;\n};\n\nfunction normalizeSlug(slug: string): string {\n const trimmed = slug.trim();\n if (!trimmed || trimmed === \"/\") {\n return \"/\";\n }\n\n const withLeadingSlash = trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`;\n return withLeadingSlash.replace(/\\/+$/, \"\") || \"/\";\n}\n\nfunction toPosixPath(value: string): string {\n return value.split(path.sep).join(\"/\");\n}\n\nfunction toProjectRelative(rootPath: string, absolutePath: string): string {\n return toPosixPath(path.relative(rootPath, absolutePath));\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction isBinaryBuffer(buffer: Buffer): boolean {\n const limit = Math.min(buffer.length, 8000);\n for (let index = 0; index < limit; index += 1) {\n if (buffer[index] === 0) {\n return true;\n }\n }\n return false;\n}\n\nfunction stripSrcPrefix(relativePath: string): string {\n return relativePath.replace(/^src\\//, \"\");\n}\n\nfunction buildImportRewritePlan(\n sourceComponentsPath: string,\n targetComponentsPath: string,\n): ImportRewritePlan | null {\n const normalizedSource = toPosixPath(sourceComponentsPath);\n const normalizedTarget = toPosixPath(targetComponentsPath);\n\n if (normalizedSource === normalizedTarget) {\n return null;\n }\n\n const sourceAtAliasPrefix = `@/${stripSrcPrefix(normalizedSource)}`;\n const targetAtAliasPrefix = `@/${stripSrcPrefix(normalizedTarget)}`;\n const sourceRootAliasPrefix = `@root/${normalizedSource}`;\n const targetRootAliasPrefix = `@root/${normalizedTarget}`;\n\n return {\n sourceAtAliasPrefix,\n targetAtAliasPrefix,\n sourceRootAliasPrefix,\n targetRootAliasPrefix,\n };\n}\n\nfunction replaceAliasPrefixInImportStrings(\n content: string,\n sourcePrefix: string,\n targetPrefix: string,\n): string {\n const pattern = new RegExp(\n `([\"'\\`])${escapeRegExp(sourcePrefix)}(?=\\\\/|\\\\1)`,\n \"g\",\n );\n return content.replace(pattern, `$1${targetPrefix}`);\n}\n\nfunction rewriteImportsForRemappedSlug(\n content: string,\n plan: ImportRewritePlan,\n): string {\n const afterAtAlias = replaceAliasPrefixInImportStrings(\n content,\n plan.sourceAtAliasPrefix,\n plan.targetAtAliasPrefix,\n );\n\n return replaceAliasPrefixInImportStrings(\n afterAtAlias,\n plan.sourceRootAliasPrefix,\n plan.targetRootAliasPrefix,\n );\n}\n\nfunction buildPlannedSourceBuffer(\n sourceBuffer: Buffer,\n sourceFilePath: string,\n importRewritePlan: ImportRewritePlan | null,\n): Buffer {\n if (!importRewritePlan) {\n return sourceBuffer;\n }\n\n const extension = path.extname(sourceFilePath).toLowerCase();\n if (!REWRITABLE_IMPORT_EXTENSIONS.has(extension)) {\n return sourceBuffer;\n }\n\n if (isBinaryBuffer(sourceBuffer)) {\n return sourceBuffer;\n }\n\n const sourceText = sourceBuffer.toString(\"utf-8\");\n const rewritten = rewriteImportsForRemappedSlug(\n sourceText,\n importRewritePlan,\n );\n if (rewritten === sourceText) {\n return sourceBuffer;\n }\n\n return Buffer.from(rewritten, \"utf-8\");\n}\n\nasync function readJsonFile<T>(filePath: string): Promise<T> {\n const content = await readFile(filePath, \"utf-8\");\n return JSON.parse(content) as T;\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await stat(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isExportPageManifestRecord(value: unknown): boolean {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const maybe = value as Record<string, unknown>;\n return (\n typeof maybe.success === \"boolean\" &&\n typeof maybe.message === \"string\" &&\n Array.isArray(maybe.files) &&\n maybe.files.every((item) => typeof item === \"string\")\n );\n}\n\nfunction isExportStatus(\n value: unknown,\n): value is \"in_progress\" | \"completed\" | \"failed\" {\n return value === \"in_progress\" || value === \"completed\" || value === \"failed\";\n}\n\nfunction isExportSummaryRecord(\n value: unknown,\n): value is { total: number; successful: number; failed: number } {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n const maybe = value as Record<string, unknown>;\n return (\n typeof maybe.total === \"number\" &&\n typeof maybe.successful === \"number\" &&\n typeof maybe.failed === \"number\"\n );\n}\n\nfunction isExportedComponentRecord(value: unknown): value is {\n componentKey: string;\n enabled: boolean;\n files: string[];\n message: string;\n} {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n const maybe = value as Record<string, unknown>;\n return (\n typeof maybe.componentKey === \"string\" &&\n typeof maybe.enabled === \"boolean\" &&\n Array.isArray(maybe.files) &&\n maybe.files.every((item) => typeof item === \"string\") &&\n typeof maybe.message === \"string\"\n );\n}\n\nfunction isExportPageRecord(value: unknown): boolean {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const maybe = value as Record<string, unknown>;\n const title = maybe.title;\n return (\n typeof maybe.id === \"string\" &&\n (typeof title === \"string\" || typeof title === \"undefined\") &&\n typeof maybe.slug === \"string\" &&\n typeof maybe.pageType === \"string\" &&\n maybe.isReadyToExport === true &&\n typeof maybe.pagePath === \"string\" &&\n typeof maybe.componentsPath === \"string\" &&\n isExportPageManifestRecord(maybe.manifest)\n );\n}\n\nfunction parseManifest(value: unknown): PrimeUiExportManifest {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"Invalid export manifest format.\");\n }\n\n const maybe = value as Record<string, unknown>;\n const exportPayload = maybe.export;\n if (!exportPayload || typeof exportPayload !== \"object\") {\n throw new Error(\"Export manifest export payload is invalid.\");\n }\n const exportObject = exportPayload as Record<string, unknown>;\n const status = exportObject.status;\n const summary = exportObject.summary;\n const components = exportObject.components;\n if (\n typeof exportObject.id !== \"string\" ||\n !isExportStatus(status) ||\n typeof exportObject.createdAt !== \"string\" ||\n !(\"expiresAt\" in exportObject) ||\n !(\n typeof exportObject.expiresAt === \"string\" ||\n exportObject.expiresAt === null\n ) ||\n !isExportSummaryRecord(summary) ||\n !Array.isArray(components) ||\n !components.every(isExportedComponentRecord) ||\n !Array.isArray(maybe.pages)\n ) {\n throw new Error(\"Export manifest does not match expected schema.\");\n }\n\n if (!maybe.pages.every(isExportPageRecord)) {\n throw new Error(\"Export manifest pages payload is invalid.\");\n }\n\n return {\n export: {\n id: exportObject.id,\n status,\n createdAt: exportObject.createdAt,\n expiresAt: exportObject.expiresAt as string | null,\n summary,\n components,\n },\n pages: maybe.pages,\n };\n}\n\nasync function resolveManifestCandidateFiles(input: {\n exportPath: string;\n pageSlug: string;\n files: string[];\n}): Promise<string[]> {\n const result = new Set<string>();\n\n for (const rawPath of input.files) {\n const trimmed = rawPath.trim();\n if (!trimmed) {\n throw new Error(\n `Export manifest for page \"${input.pageSlug}\" contains an empty file path.`,\n );\n }\n\n const normalizedRelative = toPosixPath(trimmed).replace(/^\\.\\/+/, \"\");\n const absolutePath = path.resolve(input.exportPath, normalizedRelative);\n const relative = path.relative(input.exportPath, absolutePath);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(\n `Export manifest for page \"${input.pageSlug}\" contains path outside export root: ${trimmed}`,\n );\n }\n\n const stats = await stat(absolutePath).catch(() => null);\n if (!stats?.isFile()) {\n throw new Error(\n `Export manifest file is missing for page \"${input.pageSlug}\": ${normalizedRelative}`,\n );\n }\n\n result.add(absolutePath);\n }\n\n return [...result].sort((a, b) => a.localeCompare(b));\n}\n\nasync function resolveSingleExportDirectory(exportsRoot: string): Promise<{\n exportId: string;\n exportPath: string;\n}> {\n const entries = await readdir(exportsRoot, { withFileTypes: true });\n const exportDirectories = entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n .sort((a, b) => a.localeCompare(b));\n\n if (exportDirectories.length === 0) {\n throw new Error(\n \"No downloaded exports found in .primeui/temp/exports. Run download_export first.\",\n );\n }\n\n if (exportDirectories.length > 1) {\n throw new Error(\n \"Multiple export folders found in .primeui/temp/exports. Clear temp with clear_temp and download one export.\",\n );\n }\n\n const exportId = exportDirectories[0] ?? \"\";\n return {\n exportId,\n exportPath: path.join(exportsRoot, exportId),\n };\n}\n\nfunction ensureSafeTargetPath(projectRoot: string, targetPath: string): void {\n const relative = path.relative(projectRoot, targetPath);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(\n `Refusing to write outside project root. Computed target: ${targetPath}`,\n );\n }\n}\n\nfunction getDependencyVersion(\n packageJson: PackageJsonRecord,\n packageName: string,\n): DependencyMatch | null {\n for (const section of DEPENDENCY_SECTIONS) {\n const sectionData = packageJson[section];\n if (!sectionData || typeof sectionData !== \"object\") {\n continue;\n }\n const value = (sectionData as Record<string, unknown>)[packageName];\n if (typeof value === \"string\") {\n return {\n section,\n version: value,\n };\n }\n }\n\n return null;\n}\n\nfunction getOrCreateDependencySection(\n packageJson: PackageJsonRecord,\n section: PrimeUiDependencySection,\n): Record<string, string> {\n const existing = packageJson[section];\n if (!existing || typeof existing !== \"object\" || Array.isArray(existing)) {\n const created: Record<string, string> = {};\n packageJson[section] = created;\n return created;\n }\n\n return existing as Record<string, string>;\n}\n\nfunction sortDependencySections(packageJson: PackageJsonRecord): void {\n for (const section of DEPENDENCY_SECTIONS) {\n const sectionData = packageJson[section];\n if (\n !sectionData ||\n typeof sectionData !== \"object\" ||\n Array.isArray(sectionData)\n ) {\n continue;\n }\n\n const sorted = Object.fromEntries(\n Object.entries(sectionData as Record<string, string>).sort(([a], [b]) =>\n a.localeCompare(b),\n ),\n );\n packageJson[section] = sorted;\n }\n}\n\nfunction resolveTargetFilePath(input: {\n sourceFilePath: string;\n sourcePagePath: string;\n sourceComponentsPath: string;\n targetPagePath: string;\n targetComponentsPath: string;\n exportRoot: string;\n projectRoot: string;\n}): string {\n const {\n sourceFilePath,\n sourcePagePath,\n sourceComponentsPath,\n targetPagePath,\n targetComponentsPath,\n exportRoot,\n projectRoot,\n } = input;\n\n if (sourceFilePath === sourcePagePath) {\n return targetPagePath;\n }\n\n const componentsPrefix = `${sourceComponentsPath}${path.sep}`;\n if (\n sourceFilePath === sourceComponentsPath ||\n sourceFilePath.startsWith(componentsPrefix)\n ) {\n const relativeToComponents = path.relative(\n sourceComponentsPath,\n sourceFilePath,\n );\n return path.join(targetComponentsPath, relativeToComponents);\n }\n\n const relativeToExport = path.relative(exportRoot, sourceFilePath);\n if (relativeToExport.startsWith(\"..\") || path.isAbsolute(relativeToExport)) {\n throw new Error(`Source file is outside export root: ${sourceFilePath}`);\n }\n\n return path.join(projectRoot, relativeToExport);\n}\n\nexport async function copyPageFromExport(\n input: CopyPageServiceInput,\n): Promise<PrimeUiCopyPageResult> {\n const normalizedOriginSlug = normalizeSlug(input.originPageSlug);\n const normalizedActualSlug = normalizeSlug(\n input.actualPageSlug ?? input.originPageSlug,\n );\n const isSlugRemapped = normalizedActualSlug !== normalizedOriginSlug;\n\n const { exportId, exportPath } = await resolveSingleExportDirectory(\n input.exportsRoot,\n );\n const manifestPath = path.join(\n input.exportsRoot,\n `${exportId}.manifest.json`,\n );\n\n if (!(await fileExists(manifestPath))) {\n throw new Error(\n `Export manifest is missing at ${manifestPath}. Run create_export and download_export to regenerate it.`,\n );\n }\n\n const manifest = parseManifest(await readJsonFile<unknown>(manifestPath));\n if (manifest.export.id !== exportId) {\n throw new Error(\n `Manifest export id mismatch: expected ${exportId}, got ${manifest.export.id}. Re-run create_export and download_export.`,\n );\n }\n\n const page = manifest.pages.find(\n (item) => normalizeSlug(item.slug) === normalizedOriginSlug,\n );\n if (!page) {\n throw new Error(\n `Page not found in manifest for slug: ${normalizedOriginSlug}`,\n );\n }\n\n const sourcePagePath = path.join(exportPath, page.pagePath);\n const sourceComponentsPath = path.join(exportPath, page.componentsPath);\n\n const sourcePageStats = await stat(sourcePagePath).catch(() => null);\n if (!sourcePageStats?.isFile()) {\n throw new Error(`Source page file not found: ${sourcePagePath}`);\n }\n\n const sourceComponentsStats = await stat(sourceComponentsPath).catch(\n () => null,\n );\n if (!sourceComponentsStats?.isDirectory()) {\n throw new Error(\n `Source components folder not found: ${sourceComponentsPath}`,\n );\n }\n\n const targetPaths =\n normalizedActualSlug === normalizedOriginSlug\n ? {\n pagePath: page.pagePath,\n componentsPath: page.componentsPath,\n }\n : resolvePrimeUiPageExportPaths({\n pageType: page.pageType,\n slug: normalizedActualSlug,\n });\n\n const targetPagePath = path.join(input.projectRoot, targetPaths.pagePath);\n const targetComponentsPath = path.join(\n input.projectRoot,\n targetPaths.componentsPath,\n );\n const importRewritePlan = isSlugRemapped\n ? buildImportRewritePlan(page.componentsPath, targetPaths.componentsPath)\n : null;\n\n ensureSafeTargetPath(input.projectRoot, targetPagePath);\n ensureSafeTargetPath(input.projectRoot, targetComponentsPath);\n\n const candidateFiles = await resolveManifestCandidateFiles({\n exportPath,\n pageSlug: normalizedOriginSlug,\n files: page.manifest.files,\n });\n const dependencyGraph = await buildImportGraph({\n projectRoot: exportPath,\n entryFiles: candidateFiles,\n followInternalImports: false,\n });\n\n const newFiles: PrimeUiCopyPageResult[\"newFiles\"] = [];\n const identicalFiles: PrimeUiCopyPageResult[\"identicalFiles\"] = [];\n const conflictFiles: PrimeUiCopyPageResult[\"conflictFiles\"] = [];\n\n for (const sourceFilePath of candidateFiles) {\n const targetFilePath = resolveTargetFilePath({\n sourceFilePath,\n sourcePagePath,\n sourceComponentsPath,\n targetPagePath,\n targetComponentsPath,\n exportRoot: exportPath,\n projectRoot: input.projectRoot,\n });\n ensureSafeTargetPath(input.projectRoot, targetFilePath);\n\n const sourceBuffer = await readFile(sourceFilePath);\n const plannedSourceBuffer = buildPlannedSourceBuffer(\n sourceBuffer,\n sourceFilePath,\n importRewritePlan,\n );\n let targetBuffer: Buffer | null = null;\n try {\n targetBuffer = await readFile(targetFilePath);\n } catch {\n targetBuffer = null;\n }\n\n const sourceRelative = toProjectRelative(exportPath, sourceFilePath);\n const targetRelative = toProjectRelative(input.projectRoot, targetFilePath);\n\n if (!targetBuffer) {\n await ensureDir(path.dirname(targetFilePath));\n await writeFile(targetFilePath, plannedSourceBuffer);\n newFiles.push({\n sourcePath: sourceRelative,\n targetPath: targetRelative,\n });\n continue;\n }\n\n if (plannedSourceBuffer.equals(targetBuffer)) {\n identicalFiles.push({\n sourcePath: sourceRelative,\n targetPath: targetRelative,\n });\n continue;\n }\n\n const isBinary =\n isBinaryBuffer(plannedSourceBuffer) || isBinaryBuffer(targetBuffer);\n const diff = isBinary\n ? \"Binary files differ.\"\n : buildUnifiedDiff({\n oldText: targetBuffer.toString(\"utf-8\"),\n newText: plannedSourceBuffer.toString(\"utf-8\"),\n oldLabel: `user/${targetRelative}`,\n newLabel: `export/${sourceRelative}`,\n });\n\n conflictFiles.push({\n sourcePath: sourceRelative,\n targetPath: targetRelative,\n diff,\n isBinary,\n });\n }\n\n const exportPackageJsonPath = path.join(exportPath, \"package.json\");\n const userPackageJsonPath = path.join(input.projectRoot, \"package.json\");\n if (!(await fileExists(exportPackageJsonPath))) {\n throw new Error(`Export package.json not found: ${exportPackageJsonPath}`);\n }\n if (!(await fileExists(userPackageJsonPath))) {\n throw new Error(`User package.json not found: ${userPackageJsonPath}`);\n }\n\n const exportPackageJson = await readJsonFile<PackageJsonRecord>(\n exportPackageJsonPath,\n );\n const userPackageJson =\n await readJsonFile<PackageJsonRecord>(userPackageJsonPath);\n\n const addedDependencies: PrimeUiDependencyToAdd[] = [];\n const dependenciesVersionConflicts: PrimeUiDependencyVersionConflict[] = [];\n\n for (const packageName of dependencyGraph.externalPackages) {\n const exportDependency = getDependencyVersion(\n exportPackageJson,\n packageName,\n );\n if (!exportDependency) {\n continue;\n }\n\n const userDependency = getDependencyVersion(userPackageJson, packageName);\n if (!userDependency) {\n const sectionData = getOrCreateDependencySection(\n userPackageJson,\n exportDependency.section,\n );\n sectionData[packageName] = exportDependency.version;\n addedDependencies.push({\n packageName,\n version: exportDependency.version,\n section: exportDependency.section,\n });\n continue;\n }\n\n if (userDependency.version !== exportDependency.version) {\n dependenciesVersionConflicts.push({\n packageName,\n section: exportDependency.section,\n exportVersion: exportDependency.version,\n userVersion: userDependency.version,\n });\n }\n }\n\n if (addedDependencies.length > 0) {\n sortDependencySections(userPackageJson);\n await writeFile(\n userPackageJsonPath,\n `${JSON.stringify(userPackageJson, null, 2)}\\n`,\n \"utf-8\",\n );\n }\n\n return {\n exportId,\n exportPath,\n originPageSlug: normalizedOriginSlug,\n actualPageSlug: normalizedActualSlug,\n sourcePagePath: page.pagePath,\n targetPagePath: targetPaths.pagePath,\n sourceComponentsPath: page.componentsPath,\n targetComponentsPath: targetPaths.componentsPath,\n newFiles,\n identicalFiles,\n conflictFiles,\n addedDependencies: addedDependencies.sort((a, b) =>\n a.packageName.localeCompare(b.packageName),\n ),\n dependenciesVersionConflicts: dependenciesVersionConflicts.sort((a, b) =>\n a.packageName.localeCompare(b.packageName),\n ),\n summary: {\n totalCandidateFiles: candidateFiles.length,\n copiedFiles: newFiles.length,\n identicalFiles: identicalFiles.length,\n conflictFiles: conflictFiles.length,\n addedDependencies: addedDependencies.length,\n dependenciesVersionConflicts: dependenciesVersionConflicts.length,\n },\n };\n}\n","import { readFile, stat } from \"node:fs/promises\";\nimport { builtinModules } from \"node:module\";\nimport path from \"node:path\";\n\nconst INTERNAL_EXTENSIONS = [\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \".json\",\n];\n\nconst PARSEABLE_EXTENSIONS = new Set([\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n]);\n\nconst BUILTIN_MODULES = new Set([\n ...builtinModules,\n ...builtinModules.map((item) => `node:${item}`),\n]);\n\nconst STATIC_IMPORT_RE =\n /\\bimport\\s+(?:type\\s+)?(?:[\\s\\S]*?\\sfrom\\s+)?[\"']([^\"']+)[\"']/g;\nconst EXPORT_FROM_RE = /\\bexport\\s+(?:[\\s\\S]*?\\sfrom\\s+)[\"']([^\"']+)[\"']/g;\nconst DYNAMIC_IMPORT_RE = /\\bimport\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g;\nconst REQUIRE_RE = /\\brequire\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g;\n\nexport type ImportGraphResult = {\n internalFiles: string[];\n externalPackages: string[];\n};\n\ntype BuildImportGraphInput = {\n projectRoot: string;\n entryFiles: string[];\n followInternalImports?: boolean;\n};\n\ntype ResolvedImport =\n | {\n kind: \"internal\";\n filePath: string;\n }\n | {\n kind: \"external\";\n packageName: string;\n }\n | {\n kind: \"unknown\";\n };\n\nfunction collectSpecifiers(content: string): string[] {\n const results = new Set<string>();\n let match: RegExpExecArray | null = null;\n\n for (const re of [\n STATIC_IMPORT_RE,\n EXPORT_FROM_RE,\n DYNAMIC_IMPORT_RE,\n REQUIRE_RE,\n ]) {\n re.lastIndex = 0;\n while ((match = re.exec(content)) !== null) {\n const specifier = match[1]?.trim();\n if (specifier) {\n results.add(specifier);\n }\n }\n }\n\n return [...results];\n}\n\nfunction getExternalPackageName(specifier: string): string | null {\n if (!specifier || specifier.startsWith(\".\") || specifier.startsWith(\"/\")) {\n return null;\n }\n\n if (specifier.startsWith(\"node:\")) {\n return null;\n }\n\n if (specifier.startsWith(\"@/\") || specifier.startsWith(\"@root/\")) {\n return null;\n }\n\n const parts = specifier.split(\"/\");\n if (parts.length === 0) {\n return null;\n }\n\n if (specifier.startsWith(\"@\")) {\n if (parts.length < 2) {\n return null;\n }\n return `${parts[0]}/${parts[1]}`;\n }\n\n return parts[0] ?? null;\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 resolveFileCandidate(\n candidateBase: string,\n): Promise<string | null> {\n const ext = path.extname(candidateBase);\n\n if (ext) {\n if (await pathExists(candidateBase)) {\n return candidateBase;\n }\n return null;\n }\n\n for (const extension of INTERNAL_EXTENSIONS) {\n const withExtension = `${candidateBase}${extension}`;\n if (await pathExists(withExtension)) {\n return withExtension;\n }\n }\n\n if (await pathExists(candidateBase)) {\n const stats = await stat(candidateBase);\n if (stats.isFile()) {\n return candidateBase;\n }\n\n if (stats.isDirectory()) {\n for (const extension of INTERNAL_EXTENSIONS) {\n const indexCandidate = path.join(candidateBase, `index${extension}`);\n if (await pathExists(indexCandidate)) {\n return indexCandidate;\n }\n }\n }\n }\n\n return null;\n}\n\nasync function resolveImportToFile(\n projectRoot: string,\n importerFilePath: string,\n specifier: string,\n): Promise<ResolvedImport> {\n const externalPackageName = getExternalPackageName(specifier);\n if (externalPackageName) {\n if (!BUILTIN_MODULES.has(externalPackageName)) {\n return {\n kind: \"external\",\n packageName: externalPackageName,\n };\n }\n return { kind: \"unknown\" };\n }\n\n let candidateBase: string | null = null;\n if (specifier.startsWith(\"@/\")) {\n candidateBase = path.join(projectRoot, \"src\", specifier.slice(2));\n } else if (specifier.startsWith(\"@root/\")) {\n candidateBase = path.join(projectRoot, specifier.slice(6));\n } else if (specifier.startsWith(\".\")) {\n candidateBase = path.resolve(path.dirname(importerFilePath), specifier);\n } else if (specifier.startsWith(\"/\")) {\n candidateBase = path.join(projectRoot, specifier.slice(1));\n } else {\n return { kind: \"unknown\" };\n }\n\n const resolved = await resolveFileCandidate(candidateBase);\n if (!resolved) {\n return { kind: \"unknown\" };\n }\n\n return {\n kind: \"internal\",\n filePath: resolved,\n };\n}\n\nfunction shouldParseFile(filePath: string): boolean {\n return PARSEABLE_EXTENSIONS.has(path.extname(filePath).toLowerCase());\n}\n\nexport async function buildImportGraph(\n input: BuildImportGraphInput,\n): Promise<ImportGraphResult> {\n const shouldFollowInternalImports = input.followInternalImports ?? true;\n const projectRoot = path.resolve(input.projectRoot);\n const queue = input.entryFiles.map((filePath) => path.resolve(filePath));\n const visited = new Set<string>();\n const internalFiles = new Set<string>();\n const externalPackages = new Set<string>();\n\n while (queue.length > 0) {\n const currentFilePath = queue.shift();\n if (!currentFilePath || visited.has(currentFilePath)) {\n continue;\n }\n\n visited.add(currentFilePath);\n internalFiles.add(currentFilePath);\n\n if (!shouldParseFile(currentFilePath)) {\n continue;\n }\n\n let content = \"\";\n try {\n content = await readFile(currentFilePath, \"utf-8\");\n } catch {\n continue;\n }\n\n const specifiers = collectSpecifiers(content);\n for (const specifier of specifiers) {\n const resolved = await resolveImportToFile(\n projectRoot,\n currentFilePath,\n specifier,\n );\n\n if (resolved.kind === \"internal\") {\n if (shouldFollowInternalImports && !visited.has(resolved.filePath)) {\n queue.push(resolved.filePath);\n }\n continue;\n }\n\n if (resolved.kind === \"external\") {\n externalPackages.add(resolved.packageName);\n }\n }\n }\n\n return {\n internalFiles: [...internalFiles].sort(),\n externalPackages: [...externalPackages].sort(),\n };\n}\n","const WEBSITE_APP_ROOT = \"src/app/(website)\";\nconst PAGE_COMPONENTS_ROOT = \"src/components/pages\";\n\ntype ResolvePrimeUiPageExportPathsInput = {\n pageType: string;\n slug: string;\n};\n\nexport type PrimeUiPageExportPaths = {\n pagePath: string;\n componentsPath: string;\n};\n\nconst normalizeSlug = (slug: string): string => {\n const trimmed = slug.trim();\n if (!trimmed || trimmed === \"/\") {\n return \"/\";\n }\n\n const withLeadingSlash = trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`;\n const withoutTrailingSlash = withLeadingSlash.replace(/\\/+$/, \"\");\n return withoutTrailingSlash || \"/\";\n};\n\nconst slugToFolderPath = (normalizedSlug: string): string => {\n if (normalizedSlug === \"/\") {\n return \"\";\n }\n\n return normalizedSlug.slice(1);\n};\n\nconst toPathSegment = (value: string): string => {\n const normalized = value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9/-]+/g, \"-\");\n const compact = normalized.replace(/-+/g, \"-\").replace(/^-|-$/g, \"\");\n return compact || \"page\";\n};\n\nconst buildWebsitePagePath = (normalizedSlug: string): string => {\n if (normalizedSlug === \"/\") {\n return `${WEBSITE_APP_ROOT}/page.tsx`;\n }\n return `${WEBSITE_APP_ROOT}${normalizedSlug}/page.tsx`;\n};\n\nconst buildComponentsPath = (folderPath: string): string =>\n `${PAGE_COMPONENTS_ROOT}/${folderPath}`;\n\nconst resolveBlogSectionRoot = (slugFolderPath: string): string => {\n if (!slugFolderPath) {\n return \"blog\";\n }\n\n const segments = slugFolderPath.split(\"/\").filter(Boolean);\n if (segments.length <= 1) {\n return \"blog\";\n }\n\n return segments.slice(0, -1).join(\"/\");\n};\n\nexport function resolvePrimeUiPageExportPaths({\n pageType,\n slug,\n}: ResolvePrimeUiPageExportPathsInput): PrimeUiPageExportPaths {\n const normalizedSlug = normalizeSlug(slug);\n const slugFolderPath = slugToFolderPath(normalizedSlug);\n\n switch (pageType) {\n case \"landing\": {\n const componentsFolder = slugFolderPath || \"home\";\n return {\n pagePath: buildWebsitePagePath(normalizedSlug),\n componentsPath: buildComponentsPath(componentsFolder),\n };\n }\n case \"pricing\":\n case \"contact-us\": {\n const componentsFolder = slugFolderPath || pageType;\n return {\n pagePath: buildWebsitePagePath(normalizedSlug),\n componentsPath: buildComponentsPath(componentsFolder),\n };\n }\n case \"docs\": {\n const docsFolder = slugFolderPath || \"docs\";\n return {\n pagePath: `${WEBSITE_APP_ROOT}/${docsFolder}/[[...slug]]/page.tsx`,\n componentsPath: buildComponentsPath(\"docs\"),\n };\n }\n case \"blogIndex\": {\n const blogFolder = slugFolderPath || \"blog\";\n return {\n pagePath: `${WEBSITE_APP_ROOT}/${blogFolder}/page.tsx`,\n componentsPath: buildComponentsPath(\"blog\"),\n };\n }\n case \"blogPost\": {\n const blogSectionRoot = resolveBlogSectionRoot(slugFolderPath);\n return {\n pagePath: `${WEBSITE_APP_ROOT}/${blogSectionRoot}/[slug]/page.tsx`,\n componentsPath: buildComponentsPath(\"blog\"),\n };\n }\n case \"legal\":\n return {\n pagePath: buildWebsitePagePath(normalizedSlug),\n componentsPath: buildComponentsPath(\"legal\"),\n };\n default: {\n const fallbackFolder = slugFolderPath || toPathSegment(pageType);\n return {\n pagePath: buildWebsitePagePath(normalizedSlug),\n componentsPath: buildComponentsPath(fallbackFolder),\n };\n }\n }\n}\n","type DiffOp =\n | {\n kind: \"equal\";\n value: string;\n }\n | {\n kind: \"delete\";\n value: string;\n }\n | {\n kind: \"insert\";\n value: string;\n };\n\ntype BuildUnifiedDiffInput = {\n oldText: string;\n newText: string;\n oldLabel: string;\n newLabel: string;\n maxChars?: number;\n};\n\nconst DEFAULT_MAX_DIFF_CHARS = 16_000;\nconst MAX_LCS_CELLS = 2_000_000;\n\nfunction computeOps(oldLines: string[], newLines: string[]): DiffOp[] {\n const oldLength = oldLines.length;\n const newLength = newLines.length;\n const table: number[][] = Array.from({ length: oldLength + 1 }, () =>\n Array<number>(newLength + 1).fill(0),\n );\n\n for (let i = oldLength - 1; i >= 0; i -= 1) {\n for (let j = newLength - 1; j >= 0; j -= 1) {\n if (oldLines[i] === newLines[j]) {\n table[i][j] = table[i + 1][j + 1] + 1;\n } else {\n table[i][j] = Math.max(table[i + 1][j], table[i][j + 1]);\n }\n }\n }\n\n const ops: DiffOp[] = [];\n let i = 0;\n let j = 0;\n\n while (i < oldLength && j < newLength) {\n if (oldLines[i] === newLines[j]) {\n ops.push({ kind: \"equal\", value: oldLines[i] ?? \"\" });\n i += 1;\n j += 1;\n continue;\n }\n\n if (table[i + 1][j] >= table[i][j + 1]) {\n ops.push({ kind: \"delete\", value: oldLines[i] ?? \"\" });\n i += 1;\n continue;\n }\n\n ops.push({ kind: \"insert\", value: newLines[j] ?? \"\" });\n j += 1;\n }\n\n while (i < oldLength) {\n ops.push({ kind: \"delete\", value: oldLines[i] ?? \"\" });\n i += 1;\n }\n\n while (j < newLength) {\n ops.push({ kind: \"insert\", value: newLines[j] ?? \"\" });\n j += 1;\n }\n\n return ops;\n}\n\nexport function buildUnifiedDiff(input: BuildUnifiedDiffInput): string {\n const maxChars = input.maxChars ?? DEFAULT_MAX_DIFF_CHARS;\n if (input.oldText === input.newText) {\n return \"\";\n }\n\n const oldLines = input.oldText.split(/\\r?\\n/);\n const newLines = input.newText.split(/\\r?\\n/);\n const cells = (oldLines.length + 1) * (newLines.length + 1);\n\n if (cells > MAX_LCS_CELLS) {\n return [\n `--- ${input.oldLabel}`,\n `+++ ${input.newLabel}`,\n \"@@ diff omitted @@\",\n \"Diff is too large to render safely.\",\n ].join(\"\\n\");\n }\n\n const ops = computeOps(oldLines, newLines);\n const output: string[] = [\n `--- ${input.oldLabel}`,\n `+++ ${input.newLabel}`,\n `@@ -1,${oldLines.length} +1,${newLines.length} @@`,\n ];\n\n for (const op of ops) {\n if (op.kind === \"equal\") {\n output.push(` ${op.value}`);\n continue;\n }\n if (op.kind === \"delete\") {\n output.push(`-${op.value}`);\n continue;\n }\n output.push(`+${op.value}`);\n }\n\n const diff = output.join(\"\\n\");\n if (diff.length <= maxChars) {\n return diff;\n }\n\n return `${diff.slice(0, maxChars)}\\n... [diff truncated]`;\n}\n","import type {\n PrimeUiInspectPageReportRow,\n PrimeUiProjectPageDetailsResult,\n} from \"../types.js\";\n\nfunction normalizeTextValue(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n\n const trimmed = value.trim();\n return trimmed ? trimmed : null;\n}\n\nfunction extractFirstStringByKey(\n value: unknown,\n key: \"title\" | \"description\",\n seen: Set<unknown>,\n): string | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n if (seen.has(value)) {\n return null;\n }\n seen.add(value);\n\n if (Array.isArray(value)) {\n for (const item of value) {\n const nested = extractFirstStringByKey(item, key, seen);\n if (nested) {\n return nested;\n }\n }\n return null;\n }\n\n const record = value as Record<string, unknown>;\n for (const [recordKey, recordValue] of Object.entries(record)) {\n if (recordKey.toLowerCase() === key) {\n const normalized = normalizeTextValue(recordValue);\n if (normalized) {\n return normalized;\n }\n }\n }\n\n for (const nestedValue of Object.values(record)) {\n const nested = extractFirstStringByKey(nestedValue, key, seen);\n if (nested) {\n return nested;\n }\n }\n\n return null;\n}\n\nfunction extractTitleAndDescription(\n props: Record<string, unknown> | null,\n): Pick<PrimeUiInspectPageReportRow, \"title\" | \"description\"> {\n if (!props) {\n return {\n title: null,\n description: null,\n };\n }\n\n return {\n title: extractFirstStringByKey(props, \"title\", new Set()),\n description: extractFirstStringByKey(props, \"description\", new Set()),\n };\n}\n\nfunction resolveSummaryText(\n row: Pick<PrimeUiInspectPageReportRow, \"title\" | \"description\">,\n): string {\n return row.title ?? row.description ?? \"\";\n}\n\nexport function buildInspectPageReport(\n input: PrimeUiProjectPageDetailsResult,\n): {\n report: string;\n reportRows: PrimeUiInspectPageReportRow[];\n} {\n if (input.components === null) {\n return {\n report:\n \"Components are unavailable for this page because no active variant is set (isReadyToExport=false).\",\n reportRows: [],\n };\n }\n\n if (input.components.length === 0) {\n return {\n report: \"Active variant has no components.\",\n reportRows: [],\n };\n }\n\n const reportRows = input.components.map((component, index) => {\n const titleDescription = extractTitleAndDescription(component.props);\n return {\n number: index + 1,\n componentGroup: component.componentGroup,\n componentId: component.componentId,\n blockId: component.blockId,\n title: titleDescription.title,\n description: titleDescription.description,\n };\n });\n\n const report = reportRows\n .map(\n (row) =>\n `${row.number}. ${row.componentGroup} (${row.componentId}) | ${resolveSummaryText(row)} | ${row.blockId}`,\n )\n .join(\"\\n\");\n\n return {\n report,\n reportRows,\n };\n}\n","import { createWriteStream } from \"node:fs\";\nimport { unlink } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Readable, Transform } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport type { ReadableStream as NodeReadableStream } from \"node:stream/web\";\nimport { z } from \"zod\";\n\nimport { ensureDir } from \"../lib/fs.js\";\nimport type {\n PrimeUiCreateExportResult,\n PrimeUiExport,\n PrimeUiProjectPageComponent,\n PrimeUiProjectPageDetailsResult,\n PrimeUiProjectInfo,\n PrimeUiProjectPage,\n} from \"../types.js\";\nimport type { ProjectDataProvider } from \"./project-data-provider.js\";\n\ntype ApiProjectDataProviderOptions = {\n apiKey?: string;\n baseUrl?: string;\n};\n\nconst DEFAULT_API_BASE_URL = \"https://app.primeui.com/\";\nconst ZIP_CONTENT_TYPES = [\n \"application/zip\",\n \"application/octet-stream\",\n \"application/x-zip-compressed\",\n];\nconst exportStatusSchema = z.enum([\"in_progress\", \"completed\", \"failed\"]);\nconst projectPageObjectSchema = z.object({\n id: z.string(),\n title: z.string(),\n slug: z.string(),\n pageType: z.string(),\n isReadyToExport: z.boolean(),\n pagePath: z.string(),\n componentsPath: z.string(),\n});\nconst projectPageSchema: z.ZodType<PrimeUiProjectPage> =\n projectPageObjectSchema;\nconst exportSummarySchema = z.object({\n total: z.number(),\n successful: z.number(),\n failed: z.number(),\n});\nconst exportedComponentSchema = z.object({\n componentKey: z.string(),\n enabled: z.boolean(),\n files: z.array(z.string()),\n message: z.string(),\n});\nconst exportPageManifestSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n files: z.array(z.string()),\n});\nconst exportPageSchema = z.object({\n id: z.string(),\n title: z.string().optional(),\n slug: z.string(),\n pageType: z.string(),\n isReadyToExport: z.literal(true),\n pagePath: z.string(),\n componentsPath: z.string(),\n manifest: exportPageManifestSchema,\n});\n\n/**\n * Consumer-side runtime contract for GET /api/v1/project.\n * Producer source of truth: apps/studio/src/app/api/v1/project/route.ts\n * Keep this schema synchronized with the producer payload.\n */\nconst projectInfoSchema: z.ZodType<PrimeUiProjectInfo> = z.object({\n projectId: z.string(),\n projectName: z.string(),\n metadata: z.record(z.unknown()),\n pages: z.array(projectPageSchema),\n});\n\nconst projectPageComponentSchema: z.ZodType<PrimeUiProjectPageComponent> =\n z.object({\n blockId: z.string(),\n componentId: z.string(),\n componentGroup: z.string(),\n slot: z.string().nullable(),\n props: z.record(z.unknown()).nullable(),\n });\n\n/**\n * Consumer-side runtime contract for GET /api/v1/project/page?slug=...\n * Producer source of truth: apps/studio/src/app/api/v1/project/page/route.ts\n * Keep this schema synchronized with the producer payload.\n */\nconst projectPageDetailsSchema: z.ZodType<PrimeUiProjectPageDetailsResult> =\n z.object({\n page: projectPageObjectSchema.extend({\n pageInstruction: z.string().nullable(),\n }),\n variant: z\n .object({\n id: z.string(),\n name: z.string(),\n })\n .nullable(),\n components: z.array(projectPageComponentSchema).nullable(),\n });\n\n/**\n * Consumer-side runtime contract for GET /api/v1/project/exports.\n * Producer source of truth: apps/studio/src/app/api/v1/project/exports/route.ts\n * Keep this schema synchronized with the producer payload.\n */\nconst exportsResponseSchema = z.object({\n exports: z.array(\n z.object({\n id: z.string(),\n status: exportStatusSchema,\n createdAt: z.string().datetime({ offset: true }),\n }),\n ),\n});\n\n/**\n * Consumer-side runtime contract for POST /api/v1/project/exports.\n * Producer source of truth: apps/studio/src/app/api/v1/project/exports/route.ts\n * Keep this schema synchronized with the producer payload.\n */\nconst createExportResponseSchema: z.ZodType<PrimeUiCreateExportResult> =\n z.object({\n export: z.object({\n id: z.string(),\n status: exportStatusSchema,\n createdAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }).nullable(),\n summary: exportSummarySchema,\n components: z.array(exportedComponentSchema),\n }),\n pages: z.array(exportPageSchema),\n });\n\nclass PrimeUiApiContractError extends Error {\n constructor(endpoint: string, details: string) {\n super(`PrimeUI API contract mismatch for \"${endpoint}\": ${details}`);\n this.name = \"PrimeUiApiContractError\";\n }\n}\n\nconst normalizeApiRoot = (rawBaseUrl: string): string => {\n const normalizedBase = rawBaseUrl.trim() || DEFAULT_API_BASE_URL;\n const parsed = new URL(normalizedBase);\n const normalizedPath = parsed.pathname.replace(/\\/+$/, \"\");\n\n if (normalizedPath.endsWith(\"/api/v1\")) {\n parsed.pathname = `${normalizedPath}/`;\n return parsed.toString();\n }\n\n parsed.pathname = `${normalizedPath}/api/v1/`.replace(\n \"//api/v1/\",\n \"/api/v1/\",\n );\n return parsed.toString();\n};\n\nconst isJsonContentType = (contentType: string): boolean =>\n contentType.includes(\"application/json\") || contentType.includes(\"+json\");\n\nconst isZipContentType = (contentType: string): boolean =>\n ZIP_CONTENT_TYPES.some((allowedType) => contentType.includes(allowedType));\n\nconst looksLikeZipArchive = (buffer: Buffer): boolean => {\n if (buffer.length < 4) {\n return false;\n }\n\n if (buffer[0] !== 0x50 || buffer[1] !== 0x4b) {\n return false;\n }\n\n const signature = `${buffer[2]}:${buffer[3]}`;\n return signature === \"3:4\" || signature === \"5:6\" || signature === \"7:8\";\n};\n\nconst createZipSignatureGuard = (endpoint: string): Transform => {\n let signature = Buffer.alloc(0);\n let validated = false;\n\n return new Transform({\n transform(chunk, _encoding, callback) {\n const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n\n if (!validated) {\n const requiredBytes = Math.max(0, 4 - signature.length);\n if (requiredBytes > 0) {\n signature = Buffer.concat([\n signature,\n chunkBuffer.subarray(0, requiredBytes),\n ]);\n }\n\n if (signature.length >= 4) {\n if (!looksLikeZipArchive(signature)) {\n callback(\n new PrimeUiApiContractError(\n endpoint,\n \"response body is not a valid zip archive\",\n ),\n );\n return;\n }\n\n validated = true;\n }\n }\n\n callback(null, chunkBuffer);\n },\n flush(callback) {\n if (!validated) {\n callback(\n new PrimeUiApiContractError(\n endpoint,\n \"response body is not a valid zip archive\",\n ),\n );\n return;\n }\n\n callback();\n },\n });\n};\n\nexport class ApiProjectDataProvider implements ProjectDataProvider {\n private readonly apiKey?: string;\n private readonly apiRoot: string;\n\n constructor(options: ApiProjectDataProviderOptions) {\n this.apiKey = options.apiKey;\n this.apiRoot = normalizeApiRoot(options.baseUrl ?? DEFAULT_API_BASE_URL);\n }\n\n async getProjectInfo(): Promise<PrimeUiProjectInfo> {\n return this.requestJson(\"project\", projectInfoSchema);\n }\n\n async getProjectPageBySlug(\n slug: string,\n ): Promise<PrimeUiProjectPageDetailsResult> {\n const encodedSlug = encodeURIComponent(slug);\n return this.requestJson(\n `project/page?slug=${encodedSlug}`,\n projectPageDetailsSchema,\n );\n }\n\n async listExports(): Promise<PrimeUiExport[]> {\n const response = await this.requestJson(\n \"project/exports\",\n exportsResponseSchema,\n );\n return response.exports;\n }\n\n async createExport(): Promise<PrimeUiCreateExportResult> {\n return this.requestJson(\"project/exports\", createExportResponseSchema, {\n method: \"POST\",\n });\n }\n\n /**\n * Consumer-side runtime contract for GET /api/v1/project/exports/:exportId/download.\n * Producer source of truth: apps/studio/src/app/api/v1/project/exports/[exportId]/download/route.ts\n * Keep content-type and archive format checks synchronized with the producer response.\n */\n async downloadExportArchive(\n exportId: string,\n destinationPath: string,\n ): Promise<void> {\n const endpoint = `project/exports/${encodeURIComponent(exportId)}/download`;\n const apiKey = this.requireApiKey();\n const response = await fetch(this.buildUrl(endpoint), {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n },\n });\n\n if (!response.ok) {\n const details = await this.readError(response);\n throw new Error(\n `PrimeUI API request failed (${response.status}) while downloading export \"${exportId}\": ${details}`,\n );\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (!isZipContentType(contentType)) {\n throw new PrimeUiApiContractError(\n endpoint,\n `expected zip content-type but got \"${contentType || \"unknown\"}\"`,\n );\n }\n\n if (!response.body) {\n throw new PrimeUiApiContractError(endpoint, \"response body is empty\");\n }\n\n await ensureDir(path.dirname(destinationPath));\n\n const zipStream = Readable.fromWeb(\n response.body as unknown as NodeReadableStream,\n );\n const signatureGuard = createZipSignatureGuard(endpoint);\n const fileStream = createWriteStream(destinationPath);\n\n try {\n await pipeline(zipStream, signatureGuard, fileStream);\n } catch (error) {\n await unlink(destinationPath).catch(() => undefined);\n throw error;\n }\n }\n\n private buildUrl(endpoint: string): string {\n return new URL(endpoint, this.apiRoot).toString();\n }\n\n private async requestJson<T>(\n endpoint: string,\n schema: z.ZodType<T>,\n requestInit: RequestInit = {},\n ): Promise<T> {\n const apiKey = this.requireApiKey();\n const method = requestInit.method ?? \"GET\";\n const response = await fetch(this.buildUrl(endpoint), {\n ...requestInit,\n method,\n headers: {\n ...(requestInit.headers ?? {}),\n Authorization: `Bearer ${apiKey}`,\n },\n });\n\n if (!response.ok) {\n const details = await this.readError(response);\n throw new Error(\n `PrimeUI API request failed (${response.status}) for \"${endpoint}\": ${details}`,\n );\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (!isJsonContentType(contentType)) {\n throw new PrimeUiApiContractError(\n endpoint,\n `expected JSON content-type but got \"${contentType || \"unknown\"}\"`,\n );\n }\n\n let payload: unknown;\n try {\n payload = await response.json();\n } catch {\n throw new PrimeUiApiContractError(\n endpoint,\n \"response body is not valid JSON\",\n );\n }\n\n const parsed = schema.safeParse(payload);\n if (!parsed.success) {\n const details = parsed.error.issues\n .map((issue) => `${issue.path.join(\".\") || \"<root>\"}: ${issue.message}`)\n .join(\"; \");\n throw new PrimeUiApiContractError(endpoint, details);\n }\n\n return parsed.data;\n }\n\n private async readError(response: Response): Promise<string> {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n\n try {\n if (isJsonContentType(contentType)) {\n const body = (await response.json()) as {\n message?: string;\n code?: string;\n };\n if (body?.message && body?.code) {\n return `${body.code}: ${body.message}`;\n }\n if (body?.message) {\n return body.message;\n }\n } else {\n const bodyText = await response.text();\n if (bodyText.trim()) {\n return bodyText.trim();\n }\n }\n } catch {\n // No-op: fall through to generic status text.\n }\n\n return response.statusText || \"Unknown error\";\n }\n\n private requireApiKey(): string {\n const apiKey = this.apiKey?.trim();\n if (!apiKey) {\n throw new Error(\"PRIMEUI_API_KEY is required to call PrimeUI API tools.\");\n }\n\n return apiKey;\n }\n}\n"],"mappings":"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","names":["path","z","path","path","path","readFile","path","readFile","stat","writeFile","path","readFile","stat","path","i","j","normalizeSlug","path","readFile","fileExists","stat","writeFile","isExportStatus","path","readFile","path","z","exportStatusSchema","z","exportSummarySchema","exportPageManifestSchema","exportPageSchema","path","path"]}
1
+ {"version":3,"sources":["../src/service.ts","../src/runtime.ts","../src/lib/project-link-config.ts","../src/services/project-sync-service.ts","../src/lib/fs.ts","../src/services/page-copy-service.ts","../src/lib/import-graph.ts","../src/lib/page-paths.ts","../src/lib/text-diff.ts","../src/services/page-inspect-report.ts","../src/sources/api-provider.ts","../src/server.ts","../src/instructions.ts"],"sourcesContent":["import { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\n\nimport { LazyProjectSyncSource } from \"./runtime.js\";\nimport { createPrimeUiMcpServer } from \"./server.js\";\n\nasync function main(): Promise<void> {\n const source = new LazyProjectSyncSource();\n const server = createPrimeUiMcpServer(source);\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nmain().catch((error) => {\n console.error(\"[primeui-mcp] failed to start\", error);\n process.exit(1);\n});\n","import path from \"node:path\";\n\nimport {\n resolvePrimeUiApiKey,\n resolvePrimeUiProjectConfig,\n} from \"./lib/project-link-config.js\";\nimport { ProjectSyncService } from \"./services/project-sync-service.js\";\nimport { ApiProjectDataProvider } from \"./sources/api-provider.js\";\nimport type { ProjectDataProvider } from \"./sources/project-data-provider.js\";\nimport type {\n PrimeUiToolContext,\n ProjectSyncSource,\n} from \"./sources/project-sync-source.js\";\n\ntype LazyProjectSyncSourceOptions = {\n env?: NodeJS.ProcessEnv;\n getCwd?: () => string;\n createProvider?: (options: {\n apiKey: string;\n baseUrl?: string;\n }) => ProjectDataProvider;\n};\n\nfunction defaultCreateProvider(options: {\n apiKey: string;\n baseUrl?: string;\n}): ProjectDataProvider {\n return new ApiProjectDataProvider(options);\n}\n\nexport class LazyProjectSyncSource implements ProjectSyncSource {\n private readonly env: NodeJS.ProcessEnv;\n private readonly getCwd: () => string;\n private readonly createProvider: (options: {\n apiKey: string;\n baseUrl?: string;\n }) => ProjectDataProvider;\n\n private stickyProjectRoot?: string;\n\n constructor(options: LazyProjectSyncSourceOptions = {}) {\n this.env = options.env ?? process.env;\n this.getCwd = options.getCwd ?? (() => process.cwd());\n this.createProvider = options.createProvider ?? defaultCreateProvider;\n }\n\n private async withService<T>(\n context: PrimeUiToolContext | undefined,\n operation: (service: ProjectSyncService) => Promise<T>,\n ): Promise<T> {\n const service = await this.createProjectSyncService(context);\n return operation(service);\n }\n\n private async withMutationService<T>(\n context: PrimeUiToolContext | undefined,\n operation: (service: ProjectSyncService) => Promise<T>,\n ): Promise<T> {\n // Mutating tools must always resolve and validate project config first.\n const service = await this.createProjectSyncService(context);\n return operation(service);\n }\n\n private async createProjectSyncService(\n context?: PrimeUiToolContext,\n ): Promise<ProjectSyncService> {\n const resolvedProjectConfig = await resolvePrimeUiProjectConfig({\n cwd: this.getCwd(),\n projectRootFromTool: context?.projectRoot,\n projectRootFromSticky: this.stickyProjectRoot,\n projectRootFromEnv: this.env.PRIMEUI_PROJECT_ROOT,\n });\n\n const projectRoot = resolvedProjectConfig.projectRoot;\n const targetProjectRoot = path.resolve(\n projectRoot,\n resolvedProjectConfig.projectConfig.targetProjectPath,\n );\n\n const apiKey = await resolvePrimeUiApiKey({\n projectConfig: resolvedProjectConfig.projectConfig,\n apiKeyFromEnv: this.env.PRIMEUI_API_KEY,\n });\n\n this.stickyProjectRoot = projectRoot;\n\n const provider = this.createProvider({\n apiKey,\n baseUrl: this.env.PRIMEUI_API_BASE_URL,\n });\n\n return new ProjectSyncService({\n projectRoot,\n targetProjectRoot,\n provider,\n });\n }\n\n async getProjectInfo(context?: PrimeUiToolContext) {\n return this.withService(context, (service) =>\n service.getProjectInfo(context),\n );\n }\n\n async listExports(context?: PrimeUiToolContext) {\n return this.withService(context, (service) => service.listExports(context));\n }\n\n async createExport(context?: PrimeUiToolContext) {\n return this.withService(context, (service) =>\n service.createExport(context),\n );\n }\n\n async downloadExportById(id: string, context?: PrimeUiToolContext) {\n return this.withService(context, (service) =>\n service.downloadExportById(id, context),\n );\n }\n\n async inspectPage(slug: string, context?: PrimeUiToolContext) {\n return this.withService(context, (service) =>\n service.inspectPage(slug, context),\n );\n }\n\n async copyPage(\n originPageSlug: string,\n actualPageSlug?: string,\n context?: PrimeUiToolContext,\n ) {\n return this.withMutationService(context, (service) =>\n service.copyPage(originPageSlug, actualPageSlug, context),\n );\n }\n\n async clearTemp(context?: PrimeUiToolContext) {\n return this.withMutationService(context, (service) =>\n service.clearTemp(context),\n );\n }\n}\n","import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { z } from \"zod\";\n\nconst PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH = \".primeui/project.json\";\n\nexport type PrimeUiProjectConfigErrorCode =\n | \"PROJECT_CONFIG_NOT_FOUND\"\n | \"PROJECT_CONFIG_READ_FAILED\"\n | \"PROJECT_CONFIG_INVALID_JSON\"\n | \"PROJECT_CONFIG_INVALID_FORMAT\"\n | \"PROJECT_API_KEY_MISSING\";\n\ntype PrimeUiProjectConfigErrorOptions = {\n code: PrimeUiProjectConfigErrorCode;\n message: string;\n hint?: string;\n details?: Record<string, unknown>;\n};\n\nexport class PrimeUiProjectConfigError extends Error {\n readonly code: PrimeUiProjectConfigErrorCode;\n readonly hint?: string;\n readonly details: Record<string, unknown>;\n\n constructor(options: PrimeUiProjectConfigErrorOptions) {\n super(options.message);\n this.name = \"PrimeUiProjectConfigError\";\n this.code = options.code;\n this.hint = options.hint;\n this.details = options.details ?? {};\n }\n}\n\nfunction buildProjectRootHint(): string {\n return \"Pass an absolute projectRoot in tool input (for example: /path/to/project) or set PRIMEUI_PROJECT_ROOT.\";\n}\n\nconst primeUiProjectConfigSchema = z\n .object({\n projectId: z.string().trim().min(1),\n apiKey: z.string().trim().min(1),\n targetProjectPath: z\n .string()\n .trim()\n .regex(/^\\.\\/.*$/),\n })\n .passthrough();\n\nexport type PrimeUiProjectConfig = z.infer<typeof primeUiProjectConfigSchema>;\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n const fileStats = await stat(filePath);\n return fileStats.isFile();\n } catch {\n return false;\n }\n}\n\nfunction ancestors(startPath: string): string[] {\n const resolvedStartPath = path.resolve(startPath);\n const directories: string[] = [];\n let currentPath = resolvedStartPath;\n\n while (true) {\n directories.push(currentPath);\n const parentPath = path.dirname(currentPath);\n if (parentPath === currentPath) {\n break;\n }\n currentPath = parentPath;\n }\n\n return directories;\n}\n\nexport async function findPrimeUiProjectConfigPath(\n startPath: string,\n): Promise<string | undefined> {\n for (const currentPath of ancestors(startPath)) {\n const candidatePath = path.join(\n currentPath,\n PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH,\n );\n if (await fileExists(candidatePath)) {\n return candidatePath;\n }\n }\n return undefined;\n}\n\nexport async function readPrimeUiProjectConfig(\n projectConfigPath: string,\n): Promise<PrimeUiProjectConfig> {\n let projectConfigRaw: string;\n try {\n projectConfigRaw = await readFile(projectConfigPath, \"utf-8\");\n } catch (error) {\n throw new PrimeUiProjectConfigError({\n code: \"PROJECT_CONFIG_READ_FAILED\",\n message: `[primeui-mcp] failed to read ${PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n details: {\n projectConfigPath,\n },\n hint: buildProjectRootHint(),\n });\n }\n\n let projectConfigJson: unknown;\n try {\n projectConfigJson = JSON.parse(projectConfigRaw);\n } catch (error) {\n throw new PrimeUiProjectConfigError({\n code: \"PROJECT_CONFIG_INVALID_JSON\",\n message: `[primeui-mcp] invalid JSON in ${PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n details: {\n projectConfigPath,\n },\n hint: buildProjectRootHint(),\n });\n }\n\n const parsedConfig = primeUiProjectConfigSchema.safeParse(projectConfigJson);\n if (!parsedConfig.success) {\n const details = parsedConfig.error.issues\n .map((issue) => `${issue.path.join(\".\") || \"<root>\"}: ${issue.message}`)\n .join(\"; \");\n throw new PrimeUiProjectConfigError({\n code: \"PROJECT_CONFIG_INVALID_FORMAT\",\n message: `[primeui-mcp] invalid ${PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH} format: ${details}`,\n details: {\n projectConfigPath,\n },\n hint: buildProjectRootHint(),\n });\n }\n\n return parsedConfig.data;\n}\n\ntype ResolvePrimeUiProjectConfigOptions = {\n cwd: string;\n projectRootFromTool?: string;\n projectRootFromSticky?: string;\n projectRootFromEnv?: string;\n fallbackCwds?: string[];\n};\n\nfunction toUniqueResolvedDirs(\n directories: Array<string | undefined>,\n): string[] {\n const resolved = new Set<string>();\n\n for (const directory of directories) {\n const trimmed = directory?.trim();\n if (!trimmed) {\n continue;\n }\n resolved.add(path.resolve(trimmed));\n }\n\n return [...resolved];\n}\n\nexport function buildPrimeUiProjectSearchRoots(options: {\n cwd: string;\n fallbackCwds?: string[];\n}): string[] {\n return toUniqueResolvedDirs([...(options.fallbackCwds ?? []), options.cwd]);\n}\n\nexport async function resolvePrimeUiProjectConfig(\n options: ResolvePrimeUiProjectConfigOptions,\n): Promise<{\n projectRoot: string;\n projectConfigPath: string;\n projectConfig: PrimeUiProjectConfig;\n}> {\n const toolProjectRoot = options.projectRootFromTool?.trim();\n if (toolProjectRoot) {\n const resolvedToolRoot = path.resolve(toolProjectRoot);\n const toolProjectConfigPath = path.join(\n resolvedToolRoot,\n PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH,\n );\n if (!(await fileExists(toolProjectConfigPath))) {\n throw new PrimeUiProjectConfigError({\n code: \"PROJECT_CONFIG_NOT_FOUND\",\n message: `[primeui-mcp] ${PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH} not found in provided projectRoot (${resolvedToolRoot}).`,\n details: {\n source: \"tool\",\n projectRoot: resolvedToolRoot,\n expectedConfigPath: toolProjectConfigPath,\n cwd: options.cwd,\n },\n hint: buildProjectRootHint(),\n });\n }\n\n const projectConfig = await readPrimeUiProjectConfig(toolProjectConfigPath);\n return {\n projectRoot: resolvedToolRoot,\n projectConfigPath: toolProjectConfigPath,\n projectConfig,\n };\n }\n\n const stickyProjectRoot = options.projectRootFromSticky?.trim();\n if (stickyProjectRoot) {\n const resolvedStickyRoot = path.resolve(stickyProjectRoot);\n const stickyProjectConfigPath = path.join(\n resolvedStickyRoot,\n PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH,\n );\n if (await fileExists(stickyProjectConfigPath)) {\n const projectConfig = await readPrimeUiProjectConfig(\n stickyProjectConfigPath,\n );\n return {\n projectRoot: resolvedStickyRoot,\n projectConfigPath: stickyProjectConfigPath,\n projectConfig,\n };\n }\n }\n\n const envProjectRoot = options.projectRootFromEnv?.trim();\n if (envProjectRoot) {\n const resolvedEnvRoot = path.resolve(envProjectRoot);\n const envProjectConfigPath = path.join(\n resolvedEnvRoot,\n PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH,\n );\n if (!(await fileExists(envProjectConfigPath))) {\n throw new PrimeUiProjectConfigError({\n code: \"PROJECT_CONFIG_NOT_FOUND\",\n message: `[primeui-mcp] ${PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH} not found in PRIMEUI_PROJECT_ROOT (${resolvedEnvRoot}).`,\n details: {\n source: \"env\",\n envVar: \"PRIMEUI_PROJECT_ROOT\",\n projectRoot: resolvedEnvRoot,\n expectedConfigPath: envProjectConfigPath,\n cwd: options.cwd,\n },\n hint: buildProjectRootHint(),\n });\n }\n\n const projectConfig = await readPrimeUiProjectConfig(envProjectConfigPath);\n return {\n projectRoot: resolvedEnvRoot,\n projectConfigPath: envProjectConfigPath,\n projectConfig,\n };\n }\n\n const searchRoots = buildPrimeUiProjectSearchRoots({\n cwd: options.cwd,\n fallbackCwds: options.fallbackCwds,\n });\n\n let projectConfigPath: string | undefined;\n for (const searchRoot of searchRoots) {\n const foundProjectConfigPath =\n await findPrimeUiProjectConfigPath(searchRoot);\n if (foundProjectConfigPath) {\n projectConfigPath = foundProjectConfigPath;\n break;\n }\n }\n\n if (!projectConfigPath) {\n throw new PrimeUiProjectConfigError({\n code: \"PROJECT_CONFIG_NOT_FOUND\",\n message: `[primeui-mcp] ${PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH} not found. Searched from: ${searchRoots.join(\n \", \",\n )}.`,\n details: {\n source: \"search\",\n cwd: options.cwd,\n searchedRoots: searchRoots,\n },\n hint: buildProjectRootHint(),\n });\n }\n\n const projectRoot = path.dirname(path.dirname(projectConfigPath));\n const projectConfig = await readPrimeUiProjectConfig(projectConfigPath);\n\n return {\n projectRoot,\n projectConfigPath,\n projectConfig,\n };\n}\n\ntype ResolvePrimeUiApiKeyOptions = {\n projectConfig: PrimeUiProjectConfig;\n apiKeyFromEnv?: string;\n};\n\nexport async function resolvePrimeUiApiKey(\n options: ResolvePrimeUiApiKeyOptions,\n): Promise<string> {\n const envApiKey = options.apiKeyFromEnv?.trim();\n if (envApiKey) {\n return envApiKey;\n }\n\n const projectConfigApiKey = options.projectConfig.apiKey.trim();\n if (!projectConfigApiKey) {\n throw new PrimeUiProjectConfigError({\n code: \"PROJECT_API_KEY_MISSING\",\n message:\n \"[primeui-mcp] PRIMEUI_API_KEY is missing in env and .primeui/project.json\",\n hint: \"Set PRIMEUI_API_KEY or ensure apiKey is present in .primeui/project.json.\",\n });\n }\n\n return projectConfigApiKey;\n}\n","import path from \"node:path\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { ensureDir, extractZip, resetDir, writeUtf8 } from \"../lib/fs.js\";\nimport type { ProjectDataProvider } from \"../sources/project-data-provider.js\";\nimport type {\n PrimeUiToolContext,\n ProjectSyncSource,\n} from \"../sources/project-sync-source.js\";\nimport { copyPageFromExport } from \"./page-copy-service.js\";\nimport { buildInspectPageReport } from \"./page-inspect-report.js\";\nimport type {\n PrimeUiCopyPageResult,\n PrimeUiCreateExportResult,\n PrimeUiDownloadResult,\n PrimeUiExportManifest,\n PrimeUiExport,\n PrimeUiExportPage,\n PrimeUiExportPageManifest,\n PrimeUiExportSummary,\n PrimeUiExportedComponent,\n PrimeUiInspectPageResult,\n PrimeUiProjectInfo,\n} from \"../types.js\";\n\ntype ProjectSyncServiceOptions = {\n projectRoot: string;\n targetProjectRoot: string;\n provider: ProjectDataProvider;\n};\n\nfunction isExportStatus(value: unknown): value is PrimeUiExport[\"status\"] {\n return value === \"in_progress\" || value === \"completed\" || value === \"failed\";\n}\n\nfunction isExportSummary(value: unknown): value is PrimeUiExportSummary {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const maybe = value as Record<string, unknown>;\n return (\n typeof maybe.total === \"number\" &&\n typeof maybe.successful === \"number\" &&\n typeof maybe.failed === \"number\"\n );\n}\n\nfunction isExportedComponent(\n value: unknown,\n): value is PrimeUiExportedComponent {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const maybe = value as Record<string, unknown>;\n return (\n typeof maybe.componentKey === \"string\" &&\n typeof maybe.enabled === \"boolean\" &&\n Array.isArray(maybe.files) &&\n maybe.files.every((item) => typeof item === \"string\") &&\n typeof maybe.message === \"string\"\n );\n}\n\nfunction isExportPageManifest(\n value: unknown,\n): value is PrimeUiExportPageManifest {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const maybe = value as Record<string, unknown>;\n return (\n typeof maybe.success === \"boolean\" &&\n typeof maybe.message === \"string\" &&\n Array.isArray(maybe.files) &&\n maybe.files.every((item) => typeof item === \"string\")\n );\n}\n\nfunction isExportPage(value: unknown): value is PrimeUiExportPage {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const maybe = value as Record<string, unknown>;\n const title = maybe.title;\n return (\n typeof maybe.id === \"string\" &&\n (typeof title === \"string\" || typeof title === \"undefined\") &&\n typeof maybe.slug === \"string\" &&\n typeof maybe.pageType === \"string\" &&\n maybe.isReadyToExport === true &&\n typeof maybe.pagePath === \"string\" &&\n typeof maybe.componentsPath === \"string\" &&\n isExportPageManifest(maybe.manifest)\n );\n}\n\nfunction buildManifestPath(exportsRoot: string, exportId: string): string {\n return path.join(exportsRoot, `${exportId}.manifest.json`);\n}\n\nfunction parseExportManifest(value: unknown): PrimeUiExportManifest {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"Export manifest is invalid.\");\n }\n\n const maybe = value as Record<string, unknown>;\n const exportPayload = maybe.export;\n if (!exportPayload || typeof exportPayload !== \"object\") {\n throw new Error(\"Export manifest export payload is invalid.\");\n }\n const exportObject = exportPayload as Record<string, unknown>;\n const status = exportObject.status;\n const summary = exportObject.summary;\n const components = exportObject.components;\n if (\n typeof exportObject.id !== \"string\" ||\n !isExportStatus(status) ||\n typeof exportObject.createdAt !== \"string\" ||\n !(\"expiresAt\" in exportObject) ||\n !(\n typeof exportObject.expiresAt === \"string\" ||\n exportObject.expiresAt === null\n ) ||\n !isExportSummary(summary) ||\n !Array.isArray(components) ||\n !components.every(isExportedComponent) ||\n !Array.isArray(maybe.pages)\n ) {\n throw new Error(\"Export manifest does not match expected schema.\");\n }\n\n if (!maybe.pages.every(isExportPage)) {\n throw new Error(\"Export manifest pages payload is invalid.\");\n }\n\n return {\n export: {\n id: exportObject.id,\n status,\n createdAt: exportObject.createdAt,\n expiresAt: exportObject.expiresAt as string | null,\n summary,\n components,\n },\n pages: maybe.pages,\n };\n}\n\nexport class ProjectSyncService implements ProjectSyncSource {\n private readonly provider: ProjectDataProvider;\n private readonly projectRoot: string;\n private readonly targetProjectRoot: string;\n private readonly primeUiRoot: string;\n private readonly tempRoot: string;\n private readonly exportsRoot: string;\n\n constructor(options: ProjectSyncServiceOptions) {\n this.projectRoot = options.projectRoot;\n this.targetProjectRoot = options.targetProjectRoot;\n this.provider = options.provider;\n this.primeUiRoot = path.join(this.projectRoot, \".primeui\");\n this.tempRoot = path.join(this.primeUiRoot, \"temp\");\n this.exportsRoot = path.join(this.tempRoot, \"exports\");\n }\n\n async getProjectInfo(\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiProjectInfo> {\n await this.ensureTempLayout();\n return this.provider.getProjectInfo();\n }\n\n async listExports(_context?: PrimeUiToolContext): Promise<PrimeUiExport[]> {\n await this.ensureTempLayout();\n return this.provider.listExports();\n }\n\n async createExport(\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiCreateExportResult> {\n await this.ensureTempLayout();\n const result = await this.provider.createExport();\n const manifestPath = buildManifestPath(this.exportsRoot, result.export.id);\n await writeUtf8(manifestPath, `${JSON.stringify(result, null, 2)}\\n`);\n\n return result;\n }\n\n async downloadExportById(\n id: string,\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiDownloadResult> {\n await this.ensureTempLayout();\n\n const exportsList = await this.provider.listExports();\n const selected = exportsList.find((item) => item.id === id);\n\n if (!selected) {\n throw new Error(`Export not found: ${id}`);\n }\n\n const targetZipPath = path.join(this.exportsRoot, `${id}.zip`);\n const targetProjectPath = path.join(this.exportsRoot, id);\n const manifestPath = buildManifestPath(this.exportsRoot, id);\n\n let manifest: PrimeUiExportManifest;\n try {\n manifest = parseExportManifest(\n JSON.parse(await readFile(manifestPath, \"utf-8\")) as unknown,\n );\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Export manifest is required for download id \"${id}\". Run create_export for this export before downloading. Details: ${reason}`,\n );\n }\n\n if (manifest.export.id !== id) {\n throw new Error(\n `Export manifest mismatch for id \"${id}\". Run create_export and retry download.`,\n );\n }\n\n await ensureDir(this.exportsRoot);\n await this.provider.downloadExportArchive(id, targetZipPath);\n\n await resetDir(targetProjectPath);\n await extractZip(targetZipPath, targetProjectPath);\n const pages = manifest.pages;\n\n return {\n exportId: id,\n projectPath: targetProjectPath,\n manifestPath,\n pages,\n };\n }\n\n async inspectPage(\n slug: string,\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiInspectPageResult> {\n await this.ensureTempLayout();\n\n const pageDetails = await this.provider.getProjectPageBySlug(slug);\n const reportPayload = buildInspectPageReport(pageDetails);\n\n return {\n ...pageDetails,\n report: reportPayload.report,\n reportRows: reportPayload.reportRows,\n };\n }\n\n async copyPage(\n originPageSlug: string,\n actualPageSlug?: string,\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiCopyPageResult> {\n await this.ensureTempLayout();\n\n return copyPageFromExport({\n projectRoot: this.targetProjectRoot,\n exportsRoot: this.exportsRoot,\n originPageSlug,\n actualPageSlug,\n });\n }\n\n async clearTemp(_context?: PrimeUiToolContext): Promise<void> {\n await resetDir(this.tempRoot);\n await ensureDir(this.exportsRoot);\n }\n\n private async ensureTempLayout(): Promise<void> {\n await ensureDir(this.primeUiRoot);\n await ensureDir(this.tempRoot);\n await ensureDir(this.exportsRoot);\n }\n}\n","import { mkdir, rm, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport extractZipArchive from \"extract-zip\";\n\nexport async function ensureDir(dirPath: string): Promise<void> {\n await mkdir(dirPath, { recursive: true });\n}\n\nexport async function resetDir(dirPath: string): Promise<void> {\n await rm(dirPath, { recursive: true, force: true });\n await mkdir(dirPath, { recursive: true });\n}\n\nexport async function writeUtf8(\n filePath: string,\n content: string,\n): Promise<void> {\n await ensureDir(path.dirname(filePath));\n await writeFile(filePath, content, \"utf-8\");\n}\n\nexport async function extractZip(\n zipPath: string,\n targetDir: string,\n): Promise<void> {\n await ensureDir(targetDir);\n\n try {\n await extractZipArchive(zipPath, { dir: targetDir });\n } catch (error) {\n const details = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to extract zip at \"${zipPath}\". ${details}`);\n }\n}\n","import { readFile, readdir, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { ensureDir } from \"../lib/fs.js\";\nimport { buildImportGraph } from \"../lib/import-graph.js\";\nimport { resolvePrimeUiPageExportPaths } from \"../lib/page-paths.js\";\nimport { buildUnifiedDiff } from \"../lib/text-diff.js\";\nimport type {\n PrimeUiCopyPageResult,\n PrimeUiDependencySection,\n PrimeUiDependencyToAdd,\n PrimeUiDependencyVersionConflict,\n PrimeUiExportManifest,\n} from \"../types.js\";\n\nconst DEPENDENCY_SECTIONS: PrimeUiDependencySection[] = [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n];\nconst REWRITABLE_IMPORT_EXTENSIONS = new Set([\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n]);\n\ntype CopyPageServiceInput = {\n projectRoot: string;\n exportsRoot: string;\n originPageSlug: string;\n actualPageSlug?: string;\n};\n\ntype PackageJsonRecord = Record<string, unknown> & {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n};\n\ntype DependencyMatch = {\n section: PrimeUiDependencySection;\n version: string;\n};\n\ntype ImportRewritePlan = {\n sourceAtAliasPrefix: string;\n targetAtAliasPrefix: string;\n sourceRootAliasPrefix: string;\n targetRootAliasPrefix: string;\n};\n\nfunction normalizeSlug(slug: string): string {\n const trimmed = slug.trim();\n if (!trimmed || trimmed === \"/\") {\n return \"/\";\n }\n\n const withLeadingSlash = trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`;\n return withLeadingSlash.replace(/\\/+$/, \"\") || \"/\";\n}\n\nfunction toPosixPath(value: string): string {\n return value.split(path.sep).join(\"/\");\n}\n\nfunction toProjectRelative(rootPath: string, absolutePath: string): string {\n return toPosixPath(path.relative(rootPath, absolutePath));\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction isBinaryBuffer(buffer: Buffer): boolean {\n const limit = Math.min(buffer.length, 8000);\n for (let index = 0; index < limit; index += 1) {\n if (buffer[index] === 0) {\n return true;\n }\n }\n return false;\n}\n\nfunction stripSrcPrefix(relativePath: string): string {\n return relativePath.replace(/^src\\//, \"\");\n}\n\nfunction buildImportRewritePlan(\n sourceComponentsPath: string,\n targetComponentsPath: string,\n): ImportRewritePlan | null {\n const normalizedSource = toPosixPath(sourceComponentsPath);\n const normalizedTarget = toPosixPath(targetComponentsPath);\n\n if (normalizedSource === normalizedTarget) {\n return null;\n }\n\n const sourceAtAliasPrefix = `@/${stripSrcPrefix(normalizedSource)}`;\n const targetAtAliasPrefix = `@/${stripSrcPrefix(normalizedTarget)}`;\n const sourceRootAliasPrefix = `@root/${normalizedSource}`;\n const targetRootAliasPrefix = `@root/${normalizedTarget}`;\n\n return {\n sourceAtAliasPrefix,\n targetAtAliasPrefix,\n sourceRootAliasPrefix,\n targetRootAliasPrefix,\n };\n}\n\nfunction replaceAliasPrefixInImportStrings(\n content: string,\n sourcePrefix: string,\n targetPrefix: string,\n): string {\n const pattern = new RegExp(\n `([\"'\\`])${escapeRegExp(sourcePrefix)}(?=\\\\/|\\\\1)`,\n \"g\",\n );\n return content.replace(pattern, `$1${targetPrefix}`);\n}\n\nfunction rewriteImportsForRemappedSlug(\n content: string,\n plan: ImportRewritePlan,\n): string {\n const afterAtAlias = replaceAliasPrefixInImportStrings(\n content,\n plan.sourceAtAliasPrefix,\n plan.targetAtAliasPrefix,\n );\n\n return replaceAliasPrefixInImportStrings(\n afterAtAlias,\n plan.sourceRootAliasPrefix,\n plan.targetRootAliasPrefix,\n );\n}\n\nfunction buildPlannedSourceBuffer(\n sourceBuffer: Buffer,\n sourceFilePath: string,\n importRewritePlan: ImportRewritePlan | null,\n): Buffer {\n if (!importRewritePlan) {\n return sourceBuffer;\n }\n\n const extension = path.extname(sourceFilePath).toLowerCase();\n if (!REWRITABLE_IMPORT_EXTENSIONS.has(extension)) {\n return sourceBuffer;\n }\n\n if (isBinaryBuffer(sourceBuffer)) {\n return sourceBuffer;\n }\n\n const sourceText = sourceBuffer.toString(\"utf-8\");\n const rewritten = rewriteImportsForRemappedSlug(\n sourceText,\n importRewritePlan,\n );\n if (rewritten === sourceText) {\n return sourceBuffer;\n }\n\n return Buffer.from(rewritten, \"utf-8\");\n}\n\nasync function readJsonFile<T>(filePath: string): Promise<T> {\n const content = await readFile(filePath, \"utf-8\");\n return JSON.parse(content) as T;\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await stat(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isExportPageManifestRecord(value: unknown): boolean {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const maybe = value as Record<string, unknown>;\n return (\n typeof maybe.success === \"boolean\" &&\n typeof maybe.message === \"string\" &&\n Array.isArray(maybe.files) &&\n maybe.files.every((item) => typeof item === \"string\")\n );\n}\n\nfunction isExportStatus(\n value: unknown,\n): value is \"in_progress\" | \"completed\" | \"failed\" {\n return value === \"in_progress\" || value === \"completed\" || value === \"failed\";\n}\n\nfunction isExportSummaryRecord(\n value: unknown,\n): value is { total: number; successful: number; failed: number } {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n const maybe = value as Record<string, unknown>;\n return (\n typeof maybe.total === \"number\" &&\n typeof maybe.successful === \"number\" &&\n typeof maybe.failed === \"number\"\n );\n}\n\nfunction isExportedComponentRecord(value: unknown): value is {\n componentKey: string;\n enabled: boolean;\n files: string[];\n message: string;\n} {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n const maybe = value as Record<string, unknown>;\n return (\n typeof maybe.componentKey === \"string\" &&\n typeof maybe.enabled === \"boolean\" &&\n Array.isArray(maybe.files) &&\n maybe.files.every((item) => typeof item === \"string\") &&\n typeof maybe.message === \"string\"\n );\n}\n\nfunction isExportPageRecord(value: unknown): boolean {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const maybe = value as Record<string, unknown>;\n const title = maybe.title;\n return (\n typeof maybe.id === \"string\" &&\n (typeof title === \"string\" || typeof title === \"undefined\") &&\n typeof maybe.slug === \"string\" &&\n typeof maybe.pageType === \"string\" &&\n maybe.isReadyToExport === true &&\n typeof maybe.pagePath === \"string\" &&\n typeof maybe.componentsPath === \"string\" &&\n isExportPageManifestRecord(maybe.manifest)\n );\n}\n\nfunction parseManifest(value: unknown): PrimeUiExportManifest {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"Invalid export manifest format.\");\n }\n\n const maybe = value as Record<string, unknown>;\n const exportPayload = maybe.export;\n if (!exportPayload || typeof exportPayload !== \"object\") {\n throw new Error(\"Export manifest export payload is invalid.\");\n }\n const exportObject = exportPayload as Record<string, unknown>;\n const status = exportObject.status;\n const summary = exportObject.summary;\n const components = exportObject.components;\n if (\n typeof exportObject.id !== \"string\" ||\n !isExportStatus(status) ||\n typeof exportObject.createdAt !== \"string\" ||\n !(\"expiresAt\" in exportObject) ||\n !(\n typeof exportObject.expiresAt === \"string\" ||\n exportObject.expiresAt === null\n ) ||\n !isExportSummaryRecord(summary) ||\n !Array.isArray(components) ||\n !components.every(isExportedComponentRecord) ||\n !Array.isArray(maybe.pages)\n ) {\n throw new Error(\"Export manifest does not match expected schema.\");\n }\n\n if (!maybe.pages.every(isExportPageRecord)) {\n throw new Error(\"Export manifest pages payload is invalid.\");\n }\n\n return {\n export: {\n id: exportObject.id,\n status,\n createdAt: exportObject.createdAt,\n expiresAt: exportObject.expiresAt as string | null,\n summary,\n components,\n },\n pages: maybe.pages,\n };\n}\n\nasync function resolveManifestCandidateFiles(input: {\n exportPath: string;\n pageSlug: string;\n files: string[];\n}): Promise<string[]> {\n const result = new Set<string>();\n\n for (const rawPath of input.files) {\n const trimmed = rawPath.trim();\n if (!trimmed) {\n throw new Error(\n `Export manifest for page \"${input.pageSlug}\" contains an empty file path.`,\n );\n }\n\n const normalizedRelative = toPosixPath(trimmed).replace(/^\\.\\/+/, \"\");\n const absolutePath = path.resolve(input.exportPath, normalizedRelative);\n const relative = path.relative(input.exportPath, absolutePath);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(\n `Export manifest for page \"${input.pageSlug}\" contains path outside export root: ${trimmed}`,\n );\n }\n\n const stats = await stat(absolutePath).catch(() => null);\n if (!stats?.isFile()) {\n throw new Error(\n `Export manifest file is missing for page \"${input.pageSlug}\": ${normalizedRelative}`,\n );\n }\n\n result.add(absolutePath);\n }\n\n return [...result].sort((a, b) => a.localeCompare(b));\n}\n\nasync function resolveSingleExportDirectory(exportsRoot: string): Promise<{\n exportId: string;\n exportPath: string;\n}> {\n const entries = await readdir(exportsRoot, { withFileTypes: true });\n const exportDirectories = entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n .sort((a, b) => a.localeCompare(b));\n\n if (exportDirectories.length === 0) {\n throw new Error(\n \"No downloaded exports found in .primeui/temp/exports. Run download_export first.\",\n );\n }\n\n if (exportDirectories.length > 1) {\n throw new Error(\n \"Multiple export folders found in .primeui/temp/exports. Clear temp with clear_temp and download one export.\",\n );\n }\n\n const exportId = exportDirectories[0] ?? \"\";\n return {\n exportId,\n exportPath: path.join(exportsRoot, exportId),\n };\n}\n\nfunction ensureSafeTargetPath(projectRoot: string, targetPath: string): void {\n const relative = path.relative(projectRoot, targetPath);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(\n `Refusing to write outside project root. Computed target: ${targetPath}`,\n );\n }\n}\n\nfunction getDependencyVersion(\n packageJson: PackageJsonRecord,\n packageName: string,\n): DependencyMatch | null {\n for (const section of DEPENDENCY_SECTIONS) {\n const sectionData = packageJson[section];\n if (!sectionData || typeof sectionData !== \"object\") {\n continue;\n }\n const value = (sectionData as Record<string, unknown>)[packageName];\n if (typeof value === \"string\") {\n return {\n section,\n version: value,\n };\n }\n }\n\n return null;\n}\n\nfunction getOrCreateDependencySection(\n packageJson: PackageJsonRecord,\n section: PrimeUiDependencySection,\n): Record<string, string> {\n const existing = packageJson[section];\n if (!existing || typeof existing !== \"object\" || Array.isArray(existing)) {\n const created: Record<string, string> = {};\n packageJson[section] = created;\n return created;\n }\n\n return existing as Record<string, string>;\n}\n\nfunction sortDependencySections(packageJson: PackageJsonRecord): void {\n for (const section of DEPENDENCY_SECTIONS) {\n const sectionData = packageJson[section];\n if (\n !sectionData ||\n typeof sectionData !== \"object\" ||\n Array.isArray(sectionData)\n ) {\n continue;\n }\n\n const sorted = Object.fromEntries(\n Object.entries(sectionData as Record<string, string>).sort(([a], [b]) =>\n a.localeCompare(b),\n ),\n );\n packageJson[section] = sorted;\n }\n}\n\nfunction resolveTargetFilePath(input: {\n sourceFilePath: string;\n sourcePagePath: string;\n sourceComponentsPath: string;\n targetPagePath: string;\n targetComponentsPath: string;\n exportRoot: string;\n projectRoot: string;\n}): string {\n const {\n sourceFilePath,\n sourcePagePath,\n sourceComponentsPath,\n targetPagePath,\n targetComponentsPath,\n exportRoot,\n projectRoot,\n } = input;\n\n if (sourceFilePath === sourcePagePath) {\n return targetPagePath;\n }\n\n const componentsPrefix = `${sourceComponentsPath}${path.sep}`;\n if (\n sourceFilePath === sourceComponentsPath ||\n sourceFilePath.startsWith(componentsPrefix)\n ) {\n const relativeToComponents = path.relative(\n sourceComponentsPath,\n sourceFilePath,\n );\n return path.join(targetComponentsPath, relativeToComponents);\n }\n\n const relativeToExport = path.relative(exportRoot, sourceFilePath);\n if (relativeToExport.startsWith(\"..\") || path.isAbsolute(relativeToExport)) {\n throw new Error(`Source file is outside export root: ${sourceFilePath}`);\n }\n\n return path.join(projectRoot, relativeToExport);\n}\n\nexport async function copyPageFromExport(\n input: CopyPageServiceInput,\n): Promise<PrimeUiCopyPageResult> {\n const normalizedOriginSlug = normalizeSlug(input.originPageSlug);\n const normalizedActualSlug = normalizeSlug(\n input.actualPageSlug ?? input.originPageSlug,\n );\n const isSlugRemapped = normalizedActualSlug !== normalizedOriginSlug;\n\n const { exportId, exportPath } = await resolveSingleExportDirectory(\n input.exportsRoot,\n );\n const manifestPath = path.join(\n input.exportsRoot,\n `${exportId}.manifest.json`,\n );\n\n if (!(await fileExists(manifestPath))) {\n throw new Error(\n `Export manifest is missing at ${manifestPath}. Run create_export and download_export to regenerate it.`,\n );\n }\n\n const manifest = parseManifest(await readJsonFile<unknown>(manifestPath));\n if (manifest.export.id !== exportId) {\n throw new Error(\n `Manifest export id mismatch: expected ${exportId}, got ${manifest.export.id}. Re-run create_export and download_export.`,\n );\n }\n\n const page = manifest.pages.find(\n (item) => normalizeSlug(item.slug) === normalizedOriginSlug,\n );\n if (!page) {\n throw new Error(\n `Page not found in manifest for slug: ${normalizedOriginSlug}`,\n );\n }\n\n const sourcePagePath = path.join(exportPath, page.pagePath);\n const sourceComponentsPath = path.join(exportPath, page.componentsPath);\n\n const sourcePageStats = await stat(sourcePagePath).catch(() => null);\n if (!sourcePageStats?.isFile()) {\n throw new Error(`Source page file not found: ${sourcePagePath}`);\n }\n\n const sourceComponentsStats = await stat(sourceComponentsPath).catch(\n () => null,\n );\n if (!sourceComponentsStats?.isDirectory()) {\n throw new Error(\n `Source components folder not found: ${sourceComponentsPath}`,\n );\n }\n\n const targetPaths =\n normalizedActualSlug === normalizedOriginSlug\n ? {\n pagePath: page.pagePath,\n componentsPath: page.componentsPath,\n }\n : resolvePrimeUiPageExportPaths({\n pageType: page.pageType,\n slug: normalizedActualSlug,\n });\n\n const targetPagePath = path.join(input.projectRoot, targetPaths.pagePath);\n const targetComponentsPath = path.join(\n input.projectRoot,\n targetPaths.componentsPath,\n );\n const importRewritePlan = isSlugRemapped\n ? buildImportRewritePlan(page.componentsPath, targetPaths.componentsPath)\n : null;\n\n ensureSafeTargetPath(input.projectRoot, targetPagePath);\n ensureSafeTargetPath(input.projectRoot, targetComponentsPath);\n\n const candidateFiles = await resolveManifestCandidateFiles({\n exportPath,\n pageSlug: normalizedOriginSlug,\n files: page.manifest.files,\n });\n const dependencyGraph = await buildImportGraph({\n projectRoot: exportPath,\n entryFiles: candidateFiles,\n followInternalImports: false,\n });\n\n const newFiles: PrimeUiCopyPageResult[\"newFiles\"] = [];\n const identicalFiles: PrimeUiCopyPageResult[\"identicalFiles\"] = [];\n const conflictFiles: PrimeUiCopyPageResult[\"conflictFiles\"] = [];\n\n for (const sourceFilePath of candidateFiles) {\n const targetFilePath = resolveTargetFilePath({\n sourceFilePath,\n sourcePagePath,\n sourceComponentsPath,\n targetPagePath,\n targetComponentsPath,\n exportRoot: exportPath,\n projectRoot: input.projectRoot,\n });\n ensureSafeTargetPath(input.projectRoot, targetFilePath);\n\n const sourceBuffer = await readFile(sourceFilePath);\n const plannedSourceBuffer = buildPlannedSourceBuffer(\n sourceBuffer,\n sourceFilePath,\n importRewritePlan,\n );\n let targetBuffer: Buffer | null = null;\n try {\n targetBuffer = await readFile(targetFilePath);\n } catch {\n targetBuffer = null;\n }\n\n const sourceRelative = toProjectRelative(exportPath, sourceFilePath);\n const targetRelative = toProjectRelative(input.projectRoot, targetFilePath);\n\n if (!targetBuffer) {\n await ensureDir(path.dirname(targetFilePath));\n await writeFile(targetFilePath, plannedSourceBuffer);\n newFiles.push({\n sourcePath: sourceRelative,\n targetPath: targetRelative,\n });\n continue;\n }\n\n if (plannedSourceBuffer.equals(targetBuffer)) {\n identicalFiles.push({\n sourcePath: sourceRelative,\n targetPath: targetRelative,\n });\n continue;\n }\n\n const isBinary =\n isBinaryBuffer(plannedSourceBuffer) || isBinaryBuffer(targetBuffer);\n const diff = isBinary\n ? \"Binary files differ.\"\n : buildUnifiedDiff({\n oldText: targetBuffer.toString(\"utf-8\"),\n newText: plannedSourceBuffer.toString(\"utf-8\"),\n oldLabel: `user/${targetRelative}`,\n newLabel: `export/${sourceRelative}`,\n });\n\n conflictFiles.push({\n sourcePath: sourceRelative,\n targetPath: targetRelative,\n diff,\n isBinary,\n });\n }\n\n const exportPackageJsonPath = path.join(exportPath, \"package.json\");\n const userPackageJsonPath = path.join(input.projectRoot, \"package.json\");\n if (!(await fileExists(exportPackageJsonPath))) {\n throw new Error(`Export package.json not found: ${exportPackageJsonPath}`);\n }\n if (!(await fileExists(userPackageJsonPath))) {\n throw new Error(`User package.json not found: ${userPackageJsonPath}`);\n }\n\n const exportPackageJson = await readJsonFile<PackageJsonRecord>(\n exportPackageJsonPath,\n );\n const userPackageJson =\n await readJsonFile<PackageJsonRecord>(userPackageJsonPath);\n\n const addedDependencies: PrimeUiDependencyToAdd[] = [];\n const dependenciesVersionConflicts: PrimeUiDependencyVersionConflict[] = [];\n\n for (const packageName of dependencyGraph.externalPackages) {\n const exportDependency = getDependencyVersion(\n exportPackageJson,\n packageName,\n );\n if (!exportDependency) {\n continue;\n }\n\n const userDependency = getDependencyVersion(userPackageJson, packageName);\n if (!userDependency) {\n const sectionData = getOrCreateDependencySection(\n userPackageJson,\n exportDependency.section,\n );\n sectionData[packageName] = exportDependency.version;\n addedDependencies.push({\n packageName,\n version: exportDependency.version,\n section: exportDependency.section,\n });\n continue;\n }\n\n if (userDependency.version !== exportDependency.version) {\n dependenciesVersionConflicts.push({\n packageName,\n section: exportDependency.section,\n exportVersion: exportDependency.version,\n userVersion: userDependency.version,\n });\n }\n }\n\n if (addedDependencies.length > 0) {\n sortDependencySections(userPackageJson);\n await writeFile(\n userPackageJsonPath,\n `${JSON.stringify(userPackageJson, null, 2)}\\n`,\n \"utf-8\",\n );\n }\n\n return {\n exportId,\n exportPath,\n originPageSlug: normalizedOriginSlug,\n actualPageSlug: normalizedActualSlug,\n sourcePagePath: page.pagePath,\n targetPagePath: targetPaths.pagePath,\n sourceComponentsPath: page.componentsPath,\n targetComponentsPath: targetPaths.componentsPath,\n newFiles,\n identicalFiles,\n conflictFiles,\n addedDependencies: addedDependencies.sort((a, b) =>\n a.packageName.localeCompare(b.packageName),\n ),\n dependenciesVersionConflicts: dependenciesVersionConflicts.sort((a, b) =>\n a.packageName.localeCompare(b.packageName),\n ),\n summary: {\n totalCandidateFiles: candidateFiles.length,\n copiedFiles: newFiles.length,\n identicalFiles: identicalFiles.length,\n conflictFiles: conflictFiles.length,\n addedDependencies: addedDependencies.length,\n dependenciesVersionConflicts: dependenciesVersionConflicts.length,\n },\n };\n}\n","import { readFile, stat } from \"node:fs/promises\";\nimport { builtinModules } from \"node:module\";\nimport path from \"node:path\";\n\nconst INTERNAL_EXTENSIONS = [\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \".json\",\n];\n\nconst PARSEABLE_EXTENSIONS = new Set([\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n]);\n\nconst BUILTIN_MODULES = new Set([\n ...builtinModules,\n ...builtinModules.map((item) => `node:${item}`),\n]);\n\nconst STATIC_IMPORT_RE =\n /\\bimport\\s+(?:type\\s+)?(?:[\\s\\S]*?\\sfrom\\s+)?[\"']([^\"']+)[\"']/g;\nconst EXPORT_FROM_RE = /\\bexport\\s+(?:[\\s\\S]*?\\sfrom\\s+)[\"']([^\"']+)[\"']/g;\nconst DYNAMIC_IMPORT_RE = /\\bimport\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g;\nconst REQUIRE_RE = /\\brequire\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g;\n\nexport type ImportGraphResult = {\n internalFiles: string[];\n externalPackages: string[];\n};\n\ntype BuildImportGraphInput = {\n projectRoot: string;\n entryFiles: string[];\n followInternalImports?: boolean;\n};\n\ntype ResolvedImport =\n | {\n kind: \"internal\";\n filePath: string;\n }\n | {\n kind: \"external\";\n packageName: string;\n }\n | {\n kind: \"unknown\";\n };\n\nfunction collectSpecifiers(content: string): string[] {\n const results = new Set<string>();\n let match: RegExpExecArray | null = null;\n\n for (const re of [\n STATIC_IMPORT_RE,\n EXPORT_FROM_RE,\n DYNAMIC_IMPORT_RE,\n REQUIRE_RE,\n ]) {\n re.lastIndex = 0;\n while ((match = re.exec(content)) !== null) {\n const specifier = match[1]?.trim();\n if (specifier) {\n results.add(specifier);\n }\n }\n }\n\n return [...results];\n}\n\nfunction getExternalPackageName(specifier: string): string | null {\n if (!specifier || specifier.startsWith(\".\") || specifier.startsWith(\"/\")) {\n return null;\n }\n\n if (specifier.startsWith(\"node:\")) {\n return null;\n }\n\n if (specifier.startsWith(\"@/\") || specifier.startsWith(\"@root/\")) {\n return null;\n }\n\n const parts = specifier.split(\"/\");\n if (parts.length === 0) {\n return null;\n }\n\n if (specifier.startsWith(\"@\")) {\n if (parts.length < 2) {\n return null;\n }\n return `${parts[0]}/${parts[1]}`;\n }\n\n return parts[0] ?? null;\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 resolveFileCandidate(\n candidateBase: string,\n): Promise<string | null> {\n const ext = path.extname(candidateBase);\n\n if (ext) {\n if (await pathExists(candidateBase)) {\n return candidateBase;\n }\n return null;\n }\n\n for (const extension of INTERNAL_EXTENSIONS) {\n const withExtension = `${candidateBase}${extension}`;\n if (await pathExists(withExtension)) {\n return withExtension;\n }\n }\n\n if (await pathExists(candidateBase)) {\n const stats = await stat(candidateBase);\n if (stats.isFile()) {\n return candidateBase;\n }\n\n if (stats.isDirectory()) {\n for (const extension of INTERNAL_EXTENSIONS) {\n const indexCandidate = path.join(candidateBase, `index${extension}`);\n if (await pathExists(indexCandidate)) {\n return indexCandidate;\n }\n }\n }\n }\n\n return null;\n}\n\nasync function resolveImportToFile(\n projectRoot: string,\n importerFilePath: string,\n specifier: string,\n): Promise<ResolvedImport> {\n const externalPackageName = getExternalPackageName(specifier);\n if (externalPackageName) {\n if (!BUILTIN_MODULES.has(externalPackageName)) {\n return {\n kind: \"external\",\n packageName: externalPackageName,\n };\n }\n return { kind: \"unknown\" };\n }\n\n let candidateBase: string | null = null;\n if (specifier.startsWith(\"@/\")) {\n candidateBase = path.join(projectRoot, \"src\", specifier.slice(2));\n } else if (specifier.startsWith(\"@root/\")) {\n candidateBase = path.join(projectRoot, specifier.slice(6));\n } else if (specifier.startsWith(\".\")) {\n candidateBase = path.resolve(path.dirname(importerFilePath), specifier);\n } else if (specifier.startsWith(\"/\")) {\n candidateBase = path.join(projectRoot, specifier.slice(1));\n } else {\n return { kind: \"unknown\" };\n }\n\n const resolved = await resolveFileCandidate(candidateBase);\n if (!resolved) {\n return { kind: \"unknown\" };\n }\n\n return {\n kind: \"internal\",\n filePath: resolved,\n };\n}\n\nfunction shouldParseFile(filePath: string): boolean {\n return PARSEABLE_EXTENSIONS.has(path.extname(filePath).toLowerCase());\n}\n\nexport async function buildImportGraph(\n input: BuildImportGraphInput,\n): Promise<ImportGraphResult> {\n const shouldFollowInternalImports = input.followInternalImports ?? true;\n const projectRoot = path.resolve(input.projectRoot);\n const queue = input.entryFiles.map((filePath) => path.resolve(filePath));\n const visited = new Set<string>();\n const internalFiles = new Set<string>();\n const externalPackages = new Set<string>();\n\n while (queue.length > 0) {\n const currentFilePath = queue.shift();\n if (!currentFilePath || visited.has(currentFilePath)) {\n continue;\n }\n\n visited.add(currentFilePath);\n internalFiles.add(currentFilePath);\n\n if (!shouldParseFile(currentFilePath)) {\n continue;\n }\n\n let content = \"\";\n try {\n content = await readFile(currentFilePath, \"utf-8\");\n } catch {\n continue;\n }\n\n const specifiers = collectSpecifiers(content);\n for (const specifier of specifiers) {\n const resolved = await resolveImportToFile(\n projectRoot,\n currentFilePath,\n specifier,\n );\n\n if (resolved.kind === \"internal\") {\n if (shouldFollowInternalImports && !visited.has(resolved.filePath)) {\n queue.push(resolved.filePath);\n }\n continue;\n }\n\n if (resolved.kind === \"external\") {\n externalPackages.add(resolved.packageName);\n }\n }\n }\n\n return {\n internalFiles: [...internalFiles].sort(),\n externalPackages: [...externalPackages].sort(),\n };\n}\n","const WEBSITE_APP_ROOT = \"src/app/(website)\";\nconst PAGE_COMPONENTS_ROOT = \"src/components/pages\";\n\ntype ResolvePrimeUiPageExportPathsInput = {\n pageType: string;\n slug: string;\n};\n\nexport type PrimeUiPageExportPaths = {\n pagePath: string;\n componentsPath: string;\n};\n\nconst normalizeSlug = (slug: string): string => {\n const trimmed = slug.trim();\n if (!trimmed || trimmed === \"/\") {\n return \"/\";\n }\n\n const withLeadingSlash = trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`;\n const withoutTrailingSlash = withLeadingSlash.replace(/\\/+$/, \"\");\n return withoutTrailingSlash || \"/\";\n};\n\nconst slugToFolderPath = (normalizedSlug: string): string => {\n if (normalizedSlug === \"/\") {\n return \"\";\n }\n\n return normalizedSlug.slice(1);\n};\n\nconst toPathSegment = (value: string): string => {\n const normalized = value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9/-]+/g, \"-\");\n const compact = normalized.replace(/-+/g, \"-\").replace(/^-|-$/g, \"\");\n return compact || \"page\";\n};\n\nconst buildWebsitePagePath = (normalizedSlug: string): string => {\n if (normalizedSlug === \"/\") {\n return `${WEBSITE_APP_ROOT}/page.tsx`;\n }\n return `${WEBSITE_APP_ROOT}${normalizedSlug}/page.tsx`;\n};\n\nconst buildComponentsPath = (folderPath: string): string =>\n `${PAGE_COMPONENTS_ROOT}/${folderPath}`;\n\nconst resolveBlogSectionRoot = (slugFolderPath: string): string => {\n if (!slugFolderPath) {\n return \"blog\";\n }\n\n const segments = slugFolderPath.split(\"/\").filter(Boolean);\n if (segments.length <= 1) {\n return \"blog\";\n }\n\n return segments.slice(0, -1).join(\"/\");\n};\n\nexport function resolvePrimeUiPageExportPaths({\n pageType,\n slug,\n}: ResolvePrimeUiPageExportPathsInput): PrimeUiPageExportPaths {\n const normalizedSlug = normalizeSlug(slug);\n const slugFolderPath = slugToFolderPath(normalizedSlug);\n\n switch (pageType) {\n case \"landing\": {\n const componentsFolder = slugFolderPath || \"home\";\n return {\n pagePath: buildWebsitePagePath(normalizedSlug),\n componentsPath: buildComponentsPath(componentsFolder),\n };\n }\n case \"pricing\":\n case \"contact-us\": {\n const componentsFolder = slugFolderPath || pageType;\n return {\n pagePath: buildWebsitePagePath(normalizedSlug),\n componentsPath: buildComponentsPath(componentsFolder),\n };\n }\n case \"docs\": {\n const docsFolder = slugFolderPath || \"docs\";\n return {\n pagePath: `${WEBSITE_APP_ROOT}/${docsFolder}/[[...slug]]/page.tsx`,\n componentsPath: buildComponentsPath(\"docs\"),\n };\n }\n case \"blogIndex\": {\n const blogFolder = slugFolderPath || \"blog\";\n return {\n pagePath: `${WEBSITE_APP_ROOT}/${blogFolder}/page.tsx`,\n componentsPath: buildComponentsPath(\"blog\"),\n };\n }\n case \"blogPost\": {\n const blogSectionRoot = resolveBlogSectionRoot(slugFolderPath);\n return {\n pagePath: `${WEBSITE_APP_ROOT}/${blogSectionRoot}/[slug]/page.tsx`,\n componentsPath: buildComponentsPath(\"blog\"),\n };\n }\n case \"legal\":\n return {\n pagePath: buildWebsitePagePath(normalizedSlug),\n componentsPath: buildComponentsPath(\"legal\"),\n };\n default: {\n const fallbackFolder = slugFolderPath || toPathSegment(pageType);\n return {\n pagePath: buildWebsitePagePath(normalizedSlug),\n componentsPath: buildComponentsPath(fallbackFolder),\n };\n }\n }\n}\n","type DiffOp =\n | {\n kind: \"equal\";\n value: string;\n }\n | {\n kind: \"delete\";\n value: string;\n }\n | {\n kind: \"insert\";\n value: string;\n };\n\ntype BuildUnifiedDiffInput = {\n oldText: string;\n newText: string;\n oldLabel: string;\n newLabel: string;\n maxChars?: number;\n};\n\nconst DEFAULT_MAX_DIFF_CHARS = 16_000;\nconst MAX_LCS_CELLS = 2_000_000;\n\nfunction computeOps(oldLines: string[], newLines: string[]): DiffOp[] {\n const oldLength = oldLines.length;\n const newLength = newLines.length;\n const table: number[][] = Array.from({ length: oldLength + 1 }, () =>\n Array<number>(newLength + 1).fill(0),\n );\n\n for (let i = oldLength - 1; i >= 0; i -= 1) {\n for (let j = newLength - 1; j >= 0; j -= 1) {\n if (oldLines[i] === newLines[j]) {\n table[i][j] = table[i + 1][j + 1] + 1;\n } else {\n table[i][j] = Math.max(table[i + 1][j], table[i][j + 1]);\n }\n }\n }\n\n const ops: DiffOp[] = [];\n let i = 0;\n let j = 0;\n\n while (i < oldLength && j < newLength) {\n if (oldLines[i] === newLines[j]) {\n ops.push({ kind: \"equal\", value: oldLines[i] ?? \"\" });\n i += 1;\n j += 1;\n continue;\n }\n\n if (table[i + 1][j] >= table[i][j + 1]) {\n ops.push({ kind: \"delete\", value: oldLines[i] ?? \"\" });\n i += 1;\n continue;\n }\n\n ops.push({ kind: \"insert\", value: newLines[j] ?? \"\" });\n j += 1;\n }\n\n while (i < oldLength) {\n ops.push({ kind: \"delete\", value: oldLines[i] ?? \"\" });\n i += 1;\n }\n\n while (j < newLength) {\n ops.push({ kind: \"insert\", value: newLines[j] ?? \"\" });\n j += 1;\n }\n\n return ops;\n}\n\nexport function buildUnifiedDiff(input: BuildUnifiedDiffInput): string {\n const maxChars = input.maxChars ?? DEFAULT_MAX_DIFF_CHARS;\n if (input.oldText === input.newText) {\n return \"\";\n }\n\n const oldLines = input.oldText.split(/\\r?\\n/);\n const newLines = input.newText.split(/\\r?\\n/);\n const cells = (oldLines.length + 1) * (newLines.length + 1);\n\n if (cells > MAX_LCS_CELLS) {\n return [\n `--- ${input.oldLabel}`,\n `+++ ${input.newLabel}`,\n \"@@ diff omitted @@\",\n \"Diff is too large to render safely.\",\n ].join(\"\\n\");\n }\n\n const ops = computeOps(oldLines, newLines);\n const output: string[] = [\n `--- ${input.oldLabel}`,\n `+++ ${input.newLabel}`,\n `@@ -1,${oldLines.length} +1,${newLines.length} @@`,\n ];\n\n for (const op of ops) {\n if (op.kind === \"equal\") {\n output.push(` ${op.value}`);\n continue;\n }\n if (op.kind === \"delete\") {\n output.push(`-${op.value}`);\n continue;\n }\n output.push(`+${op.value}`);\n }\n\n const diff = output.join(\"\\n\");\n if (diff.length <= maxChars) {\n return diff;\n }\n\n return `${diff.slice(0, maxChars)}\\n... [diff truncated]`;\n}\n","import type {\n PrimeUiInspectPageReportRow,\n PrimeUiProjectPageDetailsResult,\n} from \"../types.js\";\n\nfunction normalizeTextValue(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n\n const trimmed = value.trim();\n return trimmed ? trimmed : null;\n}\n\nfunction extractFirstStringByKey(\n value: unknown,\n key: \"title\" | \"description\",\n seen: Set<unknown>,\n): string | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n if (seen.has(value)) {\n return null;\n }\n seen.add(value);\n\n if (Array.isArray(value)) {\n for (const item of value) {\n const nested = extractFirstStringByKey(item, key, seen);\n if (nested) {\n return nested;\n }\n }\n return null;\n }\n\n const record = value as Record<string, unknown>;\n for (const [recordKey, recordValue] of Object.entries(record)) {\n if (recordKey.toLowerCase() === key) {\n const normalized = normalizeTextValue(recordValue);\n if (normalized) {\n return normalized;\n }\n }\n }\n\n for (const nestedValue of Object.values(record)) {\n const nested = extractFirstStringByKey(nestedValue, key, seen);\n if (nested) {\n return nested;\n }\n }\n\n return null;\n}\n\nfunction extractTitleAndDescription(\n props: Record<string, unknown> | null,\n): Pick<PrimeUiInspectPageReportRow, \"title\" | \"description\"> {\n if (!props) {\n return {\n title: null,\n description: null,\n };\n }\n\n return {\n title: extractFirstStringByKey(props, \"title\", new Set()),\n description: extractFirstStringByKey(props, \"description\", new Set()),\n };\n}\n\nfunction resolveSummaryText(\n row: Pick<PrimeUiInspectPageReportRow, \"title\" | \"description\">,\n): string {\n return row.title ?? row.description ?? \"\";\n}\n\nexport function buildInspectPageReport(\n input: PrimeUiProjectPageDetailsResult,\n): {\n report: string;\n reportRows: PrimeUiInspectPageReportRow[];\n} {\n if (input.components === null) {\n return {\n report:\n \"Components are unavailable for this page because no active variant is set (isReadyToExport=false).\",\n reportRows: [],\n };\n }\n\n if (input.components.length === 0) {\n return {\n report: \"Active variant has no components.\",\n reportRows: [],\n };\n }\n\n const reportRows = input.components.map((component, index) => {\n const titleDescription = extractTitleAndDescription(component.props);\n return {\n number: index + 1,\n componentGroup: component.componentGroup,\n componentId: component.componentId,\n blockId: component.blockId,\n title: titleDescription.title,\n description: titleDescription.description,\n };\n });\n\n const report = reportRows\n .map(\n (row) =>\n `${row.number}. ${row.componentGroup} (${row.componentId}) | ${resolveSummaryText(row)} | ${row.blockId}`,\n )\n .join(\"\\n\");\n\n return {\n report,\n reportRows,\n };\n}\n","import { createWriteStream } from \"node:fs\";\nimport { unlink } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Readable, Transform } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport type { ReadableStream as NodeReadableStream } from \"node:stream/web\";\nimport { z } from \"zod\";\n\nimport { ensureDir } from \"../lib/fs.js\";\nimport type {\n PrimeUiCreateExportResult,\n PrimeUiExport,\n PrimeUiProjectPageComponent,\n PrimeUiProjectPageDetailsResult,\n PrimeUiProjectInfo,\n PrimeUiProjectPage,\n} from \"../types.js\";\nimport type { ProjectDataProvider } from \"./project-data-provider.js\";\n\ntype ApiProjectDataProviderOptions = {\n apiKey?: string;\n baseUrl?: string;\n};\n\nconst DEFAULT_API_BASE_URL = \"https://app.primeui.com/\";\nconst ZIP_CONTENT_TYPES = [\n \"application/zip\",\n \"application/octet-stream\",\n \"application/x-zip-compressed\",\n];\nconst exportStatusSchema = z.enum([\"in_progress\", \"completed\", \"failed\"]);\nconst projectPageObjectSchema = z.object({\n id: z.string(),\n title: z.string(),\n slug: z.string(),\n pageType: z.string(),\n isReadyToExport: z.boolean(),\n pagePath: z.string(),\n componentsPath: z.string(),\n});\nconst projectPageSchema: z.ZodType<PrimeUiProjectPage> =\n projectPageObjectSchema;\nconst exportSummarySchema = z.object({\n total: z.number(),\n successful: z.number(),\n failed: z.number(),\n});\nconst exportedComponentSchema = z.object({\n componentKey: z.string(),\n enabled: z.boolean(),\n files: z.array(z.string()),\n message: z.string(),\n});\nconst exportPageManifestSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n files: z.array(z.string()),\n});\nconst exportPageSchema = z.object({\n id: z.string(),\n title: z.string().optional(),\n slug: z.string(),\n pageType: z.string(),\n isReadyToExport: z.literal(true),\n pagePath: z.string(),\n componentsPath: z.string(),\n manifest: exportPageManifestSchema,\n});\n\n/**\n * Consumer-side runtime contract for GET /api/v1/project.\n * Producer source of truth: apps/studio/src/app/api/v1/project/route.ts\n * Keep this schema synchronized with the producer payload.\n */\nconst projectInfoSchema: z.ZodType<PrimeUiProjectInfo> = z.object({\n projectId: z.string(),\n projectName: z.string(),\n metadata: z.record(z.unknown()),\n pages: z.array(projectPageSchema),\n});\n\nconst projectPageComponentSchema: z.ZodType<PrimeUiProjectPageComponent> =\n z.object({\n blockId: z.string(),\n componentId: z.string(),\n componentGroup: z.string(),\n slot: z.string().nullable(),\n props: z.record(z.unknown()).nullable(),\n });\n\n/**\n * Consumer-side runtime contract for GET /api/v1/project/page?slug=...\n * Producer source of truth: apps/studio/src/app/api/v1/project/page/route.ts\n * Keep this schema synchronized with the producer payload.\n */\nconst projectPageDetailsSchema: z.ZodType<PrimeUiProjectPageDetailsResult> =\n z.object({\n page: projectPageObjectSchema.extend({\n pageInstruction: z.string().nullable(),\n }),\n variant: z\n .object({\n id: z.string(),\n name: z.string(),\n })\n .nullable(),\n components: z.array(projectPageComponentSchema).nullable(),\n });\n\n/**\n * Consumer-side runtime contract for GET /api/v1/project/exports.\n * Producer source of truth: apps/studio/src/app/api/v1/project/exports/route.ts\n * Keep this schema synchronized with the producer payload.\n */\nconst exportsResponseSchema = z.object({\n exports: z.array(\n z.object({\n id: z.string(),\n status: exportStatusSchema,\n createdAt: z.string().datetime({ offset: true }),\n }),\n ),\n});\n\n/**\n * Consumer-side runtime contract for POST /api/v1/project/exports.\n * Producer source of truth: apps/studio/src/app/api/v1/project/exports/route.ts\n * Keep this schema synchronized with the producer payload.\n */\nconst createExportResponseSchema: z.ZodType<PrimeUiCreateExportResult> =\n z.object({\n export: z.object({\n id: z.string(),\n status: exportStatusSchema,\n createdAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }).nullable(),\n summary: exportSummarySchema,\n components: z.array(exportedComponentSchema),\n }),\n pages: z.array(exportPageSchema),\n });\n\nclass PrimeUiApiContractError extends Error {\n constructor(endpoint: string, details: string) {\n super(`PrimeUI API contract mismatch for \"${endpoint}\": ${details}`);\n this.name = \"PrimeUiApiContractError\";\n }\n}\n\nconst normalizeApiRoot = (rawBaseUrl: string): string => {\n const normalizedBase = rawBaseUrl.trim() || DEFAULT_API_BASE_URL;\n const parsed = new URL(normalizedBase);\n const normalizedPath = parsed.pathname.replace(/\\/+$/, \"\");\n\n if (normalizedPath.endsWith(\"/api/v1\")) {\n parsed.pathname = `${normalizedPath}/`;\n return parsed.toString();\n }\n\n parsed.pathname = `${normalizedPath}/api/v1/`.replace(\n \"//api/v1/\",\n \"/api/v1/\",\n );\n return parsed.toString();\n};\n\nconst isJsonContentType = (contentType: string): boolean =>\n contentType.includes(\"application/json\") || contentType.includes(\"+json\");\n\nconst isZipContentType = (contentType: string): boolean =>\n ZIP_CONTENT_TYPES.some((allowedType) => contentType.includes(allowedType));\n\nconst looksLikeZipArchive = (buffer: Buffer): boolean => {\n if (buffer.length < 4) {\n return false;\n }\n\n if (buffer[0] !== 0x50 || buffer[1] !== 0x4b) {\n return false;\n }\n\n const signature = `${buffer[2]}:${buffer[3]}`;\n return signature === \"3:4\" || signature === \"5:6\" || signature === \"7:8\";\n};\n\nconst createZipSignatureGuard = (endpoint: string): Transform => {\n let signature = Buffer.alloc(0);\n let validated = false;\n\n return new Transform({\n transform(chunk, _encoding, callback) {\n const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n\n if (!validated) {\n const requiredBytes = Math.max(0, 4 - signature.length);\n if (requiredBytes > 0) {\n signature = Buffer.concat([\n signature,\n chunkBuffer.subarray(0, requiredBytes),\n ]);\n }\n\n if (signature.length >= 4) {\n if (!looksLikeZipArchive(signature)) {\n callback(\n new PrimeUiApiContractError(\n endpoint,\n \"response body is not a valid zip archive\",\n ),\n );\n return;\n }\n\n validated = true;\n }\n }\n\n callback(null, chunkBuffer);\n },\n flush(callback) {\n if (!validated) {\n callback(\n new PrimeUiApiContractError(\n endpoint,\n \"response body is not a valid zip archive\",\n ),\n );\n return;\n }\n\n callback();\n },\n });\n};\n\nexport class ApiProjectDataProvider implements ProjectDataProvider {\n private readonly apiKey?: string;\n private readonly apiRoot: string;\n\n constructor(options: ApiProjectDataProviderOptions) {\n this.apiKey = options.apiKey;\n this.apiRoot = normalizeApiRoot(options.baseUrl ?? DEFAULT_API_BASE_URL);\n }\n\n async getProjectInfo(): Promise<PrimeUiProjectInfo> {\n return this.requestJson(\"project\", projectInfoSchema);\n }\n\n async getProjectPageBySlug(\n slug: string,\n ): Promise<PrimeUiProjectPageDetailsResult> {\n const encodedSlug = encodeURIComponent(slug);\n return this.requestJson(\n `project/page?slug=${encodedSlug}`,\n projectPageDetailsSchema,\n );\n }\n\n async listExports(): Promise<PrimeUiExport[]> {\n const response = await this.requestJson(\n \"project/exports\",\n exportsResponseSchema,\n );\n return response.exports;\n }\n\n async createExport(): Promise<PrimeUiCreateExportResult> {\n return this.requestJson(\"project/exports\", createExportResponseSchema, {\n method: \"POST\",\n });\n }\n\n /**\n * Consumer-side runtime contract for GET /api/v1/project/exports/:exportId/download.\n * Producer source of truth: apps/studio/src/app/api/v1/project/exports/[exportId]/download/route.ts\n * Keep content-type and archive format checks synchronized with the producer response.\n */\n async downloadExportArchive(\n exportId: string,\n destinationPath: string,\n ): Promise<void> {\n const endpoint = `project/exports/${encodeURIComponent(exportId)}/download`;\n const apiKey = this.requireApiKey();\n const response = await fetch(this.buildUrl(endpoint), {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n },\n });\n\n if (!response.ok) {\n const details = await this.readError(response);\n throw new Error(\n `PrimeUI API request failed (${response.status}) while downloading export \"${exportId}\": ${details}`,\n );\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (!isZipContentType(contentType)) {\n throw new PrimeUiApiContractError(\n endpoint,\n `expected zip content-type but got \"${contentType || \"unknown\"}\"`,\n );\n }\n\n if (!response.body) {\n throw new PrimeUiApiContractError(endpoint, \"response body is empty\");\n }\n\n await ensureDir(path.dirname(destinationPath));\n\n const zipStream = Readable.fromWeb(\n response.body as unknown as NodeReadableStream,\n );\n const signatureGuard = createZipSignatureGuard(endpoint);\n const fileStream = createWriteStream(destinationPath);\n\n try {\n await pipeline(zipStream, signatureGuard, fileStream);\n } catch (error) {\n await unlink(destinationPath).catch(() => undefined);\n throw error;\n }\n }\n\n private buildUrl(endpoint: string): string {\n return new URL(endpoint, this.apiRoot).toString();\n }\n\n private async requestJson<T>(\n endpoint: string,\n schema: z.ZodType<T>,\n requestInit: RequestInit = {},\n ): Promise<T> {\n const apiKey = this.requireApiKey();\n const method = requestInit.method ?? \"GET\";\n const response = await fetch(this.buildUrl(endpoint), {\n ...requestInit,\n method,\n headers: {\n ...(requestInit.headers ?? {}),\n Authorization: `Bearer ${apiKey}`,\n },\n });\n\n if (!response.ok) {\n const details = await this.readError(response);\n throw new Error(\n `PrimeUI API request failed (${response.status}) for \"${endpoint}\": ${details}`,\n );\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (!isJsonContentType(contentType)) {\n throw new PrimeUiApiContractError(\n endpoint,\n `expected JSON content-type but got \"${contentType || \"unknown\"}\"`,\n );\n }\n\n let payload: unknown;\n try {\n payload = await response.json();\n } catch {\n throw new PrimeUiApiContractError(\n endpoint,\n \"response body is not valid JSON\",\n );\n }\n\n const parsed = schema.safeParse(payload);\n if (!parsed.success) {\n const details = parsed.error.issues\n .map((issue) => `${issue.path.join(\".\") || \"<root>\"}: ${issue.message}`)\n .join(\"; \");\n throw new PrimeUiApiContractError(endpoint, details);\n }\n\n return parsed.data;\n }\n\n private async readError(response: Response): Promise<string> {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n\n try {\n if (isJsonContentType(contentType)) {\n const body = (await response.json()) as {\n message?: string;\n code?: string;\n };\n if (body?.message && body?.code) {\n return `${body.code}: ${body.message}`;\n }\n if (body?.message) {\n return body.message;\n }\n } else {\n const bodyText = await response.text();\n if (bodyText.trim()) {\n return bodyText.trim();\n }\n }\n } catch {\n // No-op: fall through to generic status text.\n }\n\n return response.statusText || \"Unknown error\";\n }\n\n private requireApiKey(): string {\n const apiKey = this.apiKey?.trim();\n if (!apiKey) {\n throw new Error(\"PRIMEUI_API_KEY is required to call PrimeUI API tools.\");\n }\n\n return apiKey;\n }\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\n\nimport { PrimeUiProjectConfigError } from \"./lib/project-link-config.js\";\nimport {\n initialInstructions,\n toolClearTemp,\n toolInspectPage,\n toolCopyPage,\n toolCreateExport,\n toolDownloadExport,\n toolGetProjectInfo,\n toolListExports,\n} from \"./instructions.js\";\nimport type { ProjectSyncSource } from \"./sources/project-sync-source.js\";\nimport type {\n PrimeUiCreateExportResult,\n PrimeUiCopyPageResult,\n PrimeUiDownloadResult,\n PrimeUiExport,\n PrimeUiInspectPageResult,\n PrimeUiProjectInfo,\n} from \"./types.js\";\n\nfunction okResult<T>(title: string, data: T): CallToolResult {\n return {\n content: [{ type: \"text\", text: `${title} completed` }],\n structuredContent: data as Record<string, unknown>,\n };\n}\n\nfunction errorResult(error: unknown): CallToolResult {\n if (error instanceof PrimeUiProjectConfigError) {\n const text = error.hint\n ? `primeui mcp error: ${error.message}\\nHint: ${error.hint}`\n : `primeui mcp error: ${error.message}`;\n\n return {\n isError: true,\n content: [{ type: \"text\", text }],\n structuredContent: {\n error: {\n code: error.code,\n message: error.message,\n ...(error.hint ? { hint: error.hint } : {}),\n ...error.details,\n },\n },\n };\n }\n\n const message = error instanceof Error ? error.message : String(error);\n return {\n isError: true,\n content: [{ type: \"text\", text: `primeui mcp error: ${message}` }],\n structuredContent: {\n error: {\n code: \"UNKNOWN_ERROR\",\n message,\n },\n },\n };\n}\n\nexport function createPrimeUiMcpServer(source: ProjectSyncSource): McpServer {\n const server = new McpServer(\n {\n name: \"primeui-mcp-server\",\n version: \"0.1.0\",\n },\n {\n instructions: initialInstructions,\n },\n );\n\n server.registerTool(\n \"get_project_info\",\n toolGetProjectInfo,\n async ({ projectRoot }): Promise<CallToolResult> => {\n try {\n const info: PrimeUiProjectInfo = await source.getProjectInfo({\n projectRoot,\n });\n return okResult(\"get_project_info\", info);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"inspect_page\",\n toolInspectPage,\n async ({ pageSlug, projectRoot }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiInspectPageResult = await source.inspectPage(\n pageSlug,\n { projectRoot },\n );\n return okResult(\"inspect_page\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"list_exports\",\n toolListExports,\n async ({ projectRoot }): Promise<CallToolResult> => {\n try {\n const exportsList: PrimeUiExport[] = await source.listExports({\n projectRoot,\n });\n return okResult(\"list_exports\", { exports: exportsList });\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"create_export\",\n toolCreateExport,\n async ({ projectRoot }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiCreateExportResult = await source.createExport({\n projectRoot,\n });\n return okResult(\"create_export\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"download_export\",\n toolDownloadExport,\n async ({ id, projectRoot }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiDownloadResult = await source.downloadExportById(\n id,\n { projectRoot },\n );\n return okResult(\"download_export\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"clear_temp\",\n toolClearTemp,\n async ({ projectRoot }): Promise<CallToolResult> => {\n try {\n await source.clearTemp({ projectRoot });\n return okResult(\"clear_temp\", { success: true });\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"copy_page\",\n toolCopyPage,\n async ({\n originPageSlug,\n actualPageSlug,\n projectRoot,\n }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiCopyPageResult = await source.copyPage(\n originPageSlug,\n actualPageSlug,\n { projectRoot },\n );\n return okResult(\"copy_page\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n return server;\n}\n","import { z } from \"zod/v3\";\n\nconst pageSchema = z\n .object({\n id: z\n .string()\n .describe(\n \"Stable PrimeUI page identifier. Use this to match the same page across tool responses.\",\n ),\n title: z\n .string()\n .describe(\n \"Human-readable page title. Show this to the user when confirming which pages to import.\",\n ),\n slug: z\n .string()\n .describe(\n \"PrimeUI route slug, for example '/', '/pricing', '/docs/getting-started'. Use to match user intent.\",\n ),\n pageType: z\n .string()\n .describe(\n \"PrimeUI page type classification (for example landing, docs, pricing, blogIndex, legal).\",\n ),\n isReadyToExport: z\n .boolean()\n .describe(\n \"True when this page has an active export-ready variant. Only ready pages are expected in export output.\",\n ),\n pagePath: z\n .string()\n .describe(\n \"Relative file path to the page source inside downloaded export root. Copy page code from this exact path.\",\n ),\n componentsPath: z\n .string()\n .describe(\n \"Relative directory path inside downloaded export root where page-level components live. Use as dependency copy start.\",\n ),\n })\n .describe(\n \"PrimeUI page descriptor used by project and export tools. Paths are always relative to export project root.\",\n );\n\nconst exportStatusSchema = z\n .enum([\"in_progress\", \"completed\", \"failed\"])\n .describe(\n \"Export lifecycle state. Use 'completed' before calling download_export.\",\n );\n\nconst exportItemSchema = z\n .object({\n id: z\n .string()\n .describe(\n \"Export identifier. Pass this value to download_export input.id.\",\n ),\n status: exportStatusSchema,\n createdAt: z\n .string()\n .describe(\"Export creation timestamp in ISO-8601 UTC format.\"),\n })\n .describe(\"Single export record from PrimeUI export history.\");\n\nconst exportSummarySchema = z.object({\n total: z.number().describe(\"Total pages processed in this export run.\"),\n successful: z.number().describe(\"Number of pages exported successfully.\"),\n failed: z.number().describe(\"Number of pages that failed export.\"),\n});\n\nconst exportComponentSchema = z.object({\n componentKey: z\n .string()\n .describe(\"Global component key from export manifest.\"),\n enabled: z\n .boolean()\n .describe(\"True when this global component was exported.\"),\n files: z\n .array(z.string())\n .describe(\"Files associated with this global component.\"),\n message: z\n .string()\n .describe(\"Export status message for this global component.\"),\n});\n\nconst exportPageManifestSchema = z.object({\n success: z\n .boolean()\n .describe(\"True when page export succeeded in this export run.\"),\n message: z.string().describe(\"Export status message for this page.\"),\n files: z\n .array(z.string())\n .describe(\n \"Authoritative list of page-related files from PrimeUI export manifest, including shared project files required by this page.\",\n ),\n});\n\nconst exportPageSchema = z.object({\n id: z\n .string()\n .describe(\"Stable PrimeUI page identifier for this export entry.\"),\n title: z\n .string()\n .optional()\n .describe(\n \"Optional page title from export manifest. Can be undefined for some legacy records.\",\n ),\n slug: z.string().describe(\"PrimeUI page slug included in this export.\"),\n pageType: z\n .string()\n .describe(\"PrimeUI page type for routing/path resolution.\"),\n isReadyToExport: z\n .literal(true)\n .describe(\"Always true for pages included in export payload.\"),\n pagePath: z\n .string()\n .describe(\"Page source file path relative to export root.\"),\n componentsPath: z\n .string()\n .describe(\"Page components directory path relative to export root.\"),\n manifest: exportPageManifestSchema,\n});\n\nconst fileTransferSchema = z.object({\n sourcePath: z\n .string()\n .describe(\"Relative source file path inside downloaded export root.\"),\n targetPath: z\n .string()\n .describe(\"Relative target file path inside user project root.\"),\n});\n\nconst conflictFileSchema = fileTransferSchema.extend({\n diff: z\n .string()\n .describe(\n \"Unified diff between user file and export file. For binary files the diff contains a plain message.\",\n ),\n isBinary: z\n .boolean()\n .describe(\"True if conflict comparison was treated as binary data.\"),\n});\n\nconst dependencySectionSchema = z.enum([\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n]);\n\nconst dependencyToAddSchema = z.object({\n packageName: z\n .string()\n .describe(\"Dependency package name that was missing in user package.json.\"),\n version: z.string().describe(\"Version from exported project's package.json.\"),\n section: dependencySectionSchema.describe(\n \"package.json section where dependency should be added.\",\n ),\n});\n\nconst dependencyVersionConflictSchema = z.object({\n packageName: z\n .string()\n .describe(\"Dependency package name with version mismatch.\"),\n section: dependencySectionSchema.describe(\n \"Section where export expects this dependency.\",\n ),\n exportVersion: z\n .string()\n .describe(\"Version found in exported project's package.json.\"),\n userVersion: z\n .string()\n .describe(\"Version currently present in user's package.json.\"),\n});\n\nconst pageDetailsSchema = pageSchema.extend({\n pageInstruction: z\n .string()\n .nullable()\n .describe(\n \"Current instruction text for the active page variant. Null when no active variant is set.\",\n ),\n});\n\nconst pageVariantSchema = z\n .object({\n id: z.string().describe(\"Active variant identifier.\"),\n name: z.string().describe(\"Active variant display name.\"),\n })\n .nullable()\n .describe(\n \"Active page variant. Null when page has no active variant and components are unavailable.\",\n );\n\nconst pageComponentSchema = z.object({\n blockId: z\n .string()\n .describe(\"Stable block identifier. Use as primary component instance ID.\"),\n componentId: z\n .string()\n .describe(\"Component key from variant blocks payload (block.key).\"),\n componentGroup: z\n .string()\n .describe(\"Component family/group normalized from component key.\"),\n slot: z\n .string()\n .nullable()\n .describe(\"Optional slot value from block payload.\"),\n props: z\n .record(z.unknown())\n .nullable()\n .describe(\"Raw block props payload from PrimeUI.\"),\n});\n\nconst inspectPageReportRowSchema = z.object({\n number: z.number().describe(\"1-based row number matching report order.\"),\n componentGroup: z.string().describe(\"Component family/group label.\"),\n componentId: z.string().describe(\"Component key (block key).\"),\n blockId: z\n .string()\n .describe(\"Primary component instance identifier for future operations.\"),\n title: z\n .string()\n .nullable()\n .describe(\"Title extracted by MCP from component props.\"),\n description: z\n .string()\n .nullable()\n .describe(\"Description extracted by MCP from component props.\"),\n});\n\nconst projectRootInputSchema = z\n .string()\n .optional()\n .describe(\n \"Optional absolute project root path. Use when .primeui/project.json cannot be auto-resolved from current working directory.\",\n );\n\nconst toolErrorOutputSchema = z.object({\n error: z\n .object({\n code: z.string().describe(\"Machine-readable error code.\"),\n message: z.string().describe(\"Human-readable error message.\"),\n hint: z\n .string()\n .optional()\n .describe(\"Actionable guidance to fix the error.\"),\n })\n .catchall(z.unknown())\n .describe(\"Structured error payload for failed tool execution.\"),\n});\n\nfunction withToolErrorOutputSchema<T extends z.ZodRawShape>(\n successShape: T,\n): z.ZodUnion<[z.ZodObject<T>, typeof toolErrorOutputSchema]> {\n return z.union([z.object(successShape), toolErrorOutputSchema]);\n}\n\n// ============================================================\n// Shared constants\n// ============================================================\n\nconst TRIGGER_PHRASES = [\n \"import page from PrimeUI\",\n \"add page from PrimeUI\",\n \"sync pages\",\n \"pull page\",\n \"transfer page\",\n \"get page from PrimeUI\",\n \"bring page from PrimeUI\",\n \"export from PrimeUI\",\n].join(\", \");\n\nconst WORKFLOW_SUMMARY = `\nWORKFLOW ORDER (always follow this sequence):\n1. clear_temp -> cleanup stale temp files from previous runs before starting new import flow\n2. get_project_info -> discover PrimeUI pages\n3. Reconcile PrimeUI pages with local project pages/routes/paths, then confirm target pages with user\n4. inspect_page -> inspect selected page components and produce a structured comparison table\n5. create_export -> generate export snapshot and local manifest with page file lists + global components\n6. download_export -> download to temp directory\n7. copy_page -> copy one page safely (repeat for each selected page)\n8. Reconcile integration points and resolve reported conflicts, if any\n`.trim();\n\n// ============================================================\n// Server Instructions (initialInstructions)\n// ============================================================\n\nexport const initialInstructions = `\nPrimeUI MCP enables importing pages from PrimeUI Studio into your local project.\n\nTRIGGER EXAMPLES (semantic intent, not exact phrase matching): ${TRIGGER_PHRASES}\n\n${WORKFLOW_SUMMARY}\n\nCRITICAL RULES FOR PAGE IMPORT:\n- Import is PAGE-BY-PAGE only. Never import the entire project at once.\n- Always call clear_temp at the very beginning of a new import flow to avoid stale export state.\n- After get_project_info, always compare PrimeUI pages against the user's existing local project pages before proposing imports.\n- Reconciliation report MUST include: page presence match, slug/pagePath/componentsPath path match, and proposed action per page.\n- Decision matrix:\n - PrimeUI + local page exists -> candidate for update/review.\n - PrimeUI exists, local missing -> import candidate.\n - Local exists, PrimeUI missing -> custom local page, no action unless user asks.\n - Both exist but path mismatch -> ambiguous, export + compare before deciding.\n- For targeted component-level analysis on a specific page, call inspect_page before export/copy.\n- After inspect_page returns report table, supplement that table with local project page state:\n mark what already exists, what is missing, and what differs.\n- Before creating export, ask user which pages to add/update (specific pages or all missing pages) and keep that choice in thread context.\n- create_export response includes:\n - page-level manifest files per page ('pages[].manifest.files'),\n - global components list ('export.components').\n Mention both to user after create_export, because this is the source of truth for copy decisions.\n- The downloaded export in .primeui/temp/ contains a full standalone Next.js project.\n Do NOT copy it wholesale.\n- Always call copy_page for each confirmed page instead of manual file copy.\n- copy_page performs safe copy only:\n - new files are copied,\n - identical files are reported,\n - conflicting files are NEVER overwritten and are returned with diff.\n- copy_page reads and validates files only from 'pages[].manifest.files' in local sidecar manifest.\n- copy_page may add only missing dependencies to user's package.json.\n It never upgrades existing dependency versions and never runs dependency installation.\n- After page copy operations, inspect integration points (navigation configs, link menus, route registries, page indexes).\n- If integration pattern is obvious, apply it and explicitly mark it in the report with \"⚠ integration update\".\n- If integration pattern is unclear, ask the user before editing integration files.\n`.trim();\n\n// ============================================================\n// Tool: get_project_info\n// ============================================================\n\nexport const toolGetProjectInfo = {\n title: \"PrimeUI Project Info\",\n description: `ENTRY POINT for all PrimeUI import operations. Always start here. Returns project metadata and the full list of available pages.\n\nWHEN TO USE: Call this FIRST when user wants to import, add, sync, pull, or transfer a page from PrimeUI. Intent examples (semantic intent, not exact phrase matching): ${TRIGGER_PHRASES}.\n\nAFTER CALLING:\n- Scan the user's local project to discover existing pages/routes and related page component folders.\n- Build a reconciliation report between PrimeUI and local project with action labels:\n - Page exists in both PrimeUI and local project.\n - Page exists in PrimeUI but not in local project -> import candidate.\n - Page exists in local project but not in PrimeUI -> custom local page, no action by default.\n - Page exists in both but slug/pagePath/componentsPath mapping does not match -> ambiguous, requires export-based comparison before decision.\n- If user already requested specific pages, first verify those pages exist in PrimeUI and are isReadyToExport: true.\n- If any requested page is not found or not ready, report this immediately and ask for replacement page choices.\n- Ask the user which pages to add or update now (specific page list or all missing pages) and keep this decision in thread context.\n- Import works per page. Multiple pages are allowed, but each page transfer is handled explicitly.\n- Only after user decision is clear, proceed to create_export.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: {\n projectRoot: projectRootInputSchema,\n },\n outputSchema: withToolErrorOutputSchema({\n projectId: z\n .string()\n .describe(\n \"PrimeUI project identifier associated with the API key and current import session context.\",\n ),\n projectName: z\n .string()\n .describe(\n \"Human-readable PrimeUI project name for confirmations in chat.\",\n ),\n metadata: z\n .record(z.unknown())\n .describe(\n \"Additional project metadata from PrimeUI. May include project-description and other context fields.\",\n ),\n pages: z\n .array(pageSchema)\n .describe(\n \"All pages visible for this project context. Filter by user request and isReadyToExport before creating export.\",\n ),\n }),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: inspect_page\n// ============================================================\n\nexport const toolInspectPage = {\n title: \"PrimeUI Inspect Page\",\n description: `Targeted inspection tool for one PrimeUI page. Returns page details, active variant (if present), raw components payload, and a formatted report table.\n\nWHEN TO USE:\n- Call this after get_project_info when user wants component-level analysis for a specific page.\n- Use this before export/copy when user asks to compare or selectively update page sections.\n\nAFTER CALLING:\n- Use report + reportRows to present the component table:\n Number (1-based), ComponentGroup (ComponentId), Title/Description, blockId.\n- Then supplement this table with the CURRENT local project page state:\n what already exists, what is missing, and what differs.\n- Do not assume componentId is unique. Use blockId as the primary component instance identifier.\n\nIf page has no active variant, components is null (not empty array), and report explains why.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: {\n projectRoot: projectRootInputSchema,\n pageSlug: z\n .string()\n .describe(\n \"PrimeUI page slug to inspect, for example '/', '/pricing', '/docs/getting-started'.\",\n ),\n },\n outputSchema: withToolErrorOutputSchema({\n page: pageDetailsSchema.describe(\n \"Single PrimeUI page details resolved by slug with pageInstruction.\",\n ),\n variant: pageVariantSchema,\n components: z\n .array(pageComponentSchema)\n .nullable()\n .describe(\n \"Raw component instances from active variant. Null when page has no active variant.\",\n ),\n report: z\n .string()\n .describe(\n \"Formatted report table generated by MCP from component payload (includes extracted title/description summary).\",\n ),\n reportRows: z\n .array(inspectPageReportRowSchema)\n .describe(\n \"Structured report rows with 1-based numbering and extracted title/description fields.\",\n ),\n }),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: list_exports\n// ============================================================\n\nexport const toolListExports = {\n title: \"PrimeUI Export List\",\n description: `Auxiliary tool to list previously created exports with their IDs, statuses, and creation dates. This is NOT the starting point for page import - start with get_project_info instead.\n\nWHEN TO USE: This is an OPTIONAL helper tool, NOT part of the main import flow. Use it only when:\n- Something went wrong with an export and you need to check its status.\n- The user explicitly references a previous export by date or context.\n- You need to verify whether an export initiated via PrimeUI Studio UI has completed.\n\nNote: exports can be created both through create_export AND by the user directly in PrimeUI Studio UI. This tool shows all of them.\n\nDo NOT use this tool as a substitute for create_export. Always create a fresh export unless the user explicitly asks to use a previous one.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: {\n projectRoot: projectRootInputSchema,\n },\n outputSchema: withToolErrorOutputSchema({\n exports: z\n .array(exportItemSchema)\n .describe(\n \"Available exports sorted by API policy. Use item.id to download a specific prior export if user asks.\",\n ),\n }),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: create_export\n// ============================================================\n\nexport const toolCreateExport = {\n title: \"PrimeUI Create Export\",\n description: `Create a new export snapshot from the current PrimeUI project state and wait for completion. Returns strict export manifest payload from API, including page-level file manifests and global components.\n\nWHEN TO USE: Call this AFTER the user has confirmed which pages they want to import via get_project_info. This tool is REQUIRED before download_export, unless the user explicitly and directly asked to download a specific previous export.\n\nAFTER CALLING:\n- Verify that all user-selected pages are present in the export result AND have isReadyToExport: true.\n- If path mismatch pages were flagged during project-info reconciliation, ensure they are included for deeper comparison after download.\n- If any required page is missing or not ready, report and pause for user decision before proceeding.\n- Mention that global components are available in export.components and can be transferred separately if needed.\n- Local sidecar manifest is saved to .primeui/temp/exports/[exportId].manifest.json from this API payload.\n- Use the returned export ID to call download_export.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: {\n projectRoot: projectRootInputSchema,\n },\n outputSchema: withToolErrorOutputSchema({\n export: z\n .object({\n id: z\n .string()\n .describe(\n \"Freshly created export identifier. Use this as download_export input.id.\",\n ),\n status: exportStatusSchema,\n createdAt: z\n .string()\n .describe(\"Export creation timestamp in ISO-8601 UTC format.\"),\n expiresAt: z\n .string()\n .nullable()\n .describe(\n \"Export expiration timestamp in ISO-8601 UTC format, or null when export has no explicit expiration.\",\n ),\n summary: exportSummarySchema.describe(\n \"Export run summary with total/successful/failed counters.\",\n ),\n components: z\n .array(exportComponentSchema)\n .describe(\n \"Global component export manifest. These components are independent from page-level manifests.\",\n ),\n })\n .describe(\"Created export summary.\"),\n pages: z\n .array(exportPageSchema)\n .describe(\n \"Strict page payload associated with this export, including per-page manifest files list.\",\n ),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: download_export\n// ============================================================\n\nexport const toolDownloadExport = {\n title: \"PrimeUI Download Export\",\n description: `Download a completed export into .primeui/temp/exports/[exportId]. Downloads and extracts the full export as a standalone Next.js project into the temp directory. This does NOT modify the user's project - files land only in .primeui/temp/.\n\nDo NOT call this as the first step. Requires export ID from create_export. Start with get_project_info instead.\n\nWHEN TO USE: Call this AFTER create_export has returned a completed export. Requires export ID from create_export so MCP can use the matching local sidecar manifest.\n\nNOTE:\n- Download of an export ID without local sidecar manifest will fail.\n- For previous exports, create a fresh export first when possible.\n\nAFTER DOWNLOAD:\n- Use manifestPath from this response as the contract for page slug/path mapping and manifest file lists in copy operations.\n- For each selected page, call copy_page with:\n - originPageSlug (required),\n - actualPageSlug (optional, if route remap is needed).\n- If there are unresolved conflicts in copy report, stop and ask the user.\n- Do not force cleanup at flow end; keep downloaded export files available for validation and follow-up checks.\n\n ${WORKFLOW_SUMMARY}`,\n inputSchema: {\n projectRoot: projectRootInputSchema,\n id: z\n .string()\n .describe(\n \"Export identifier to download. Prefer export.id from create_export; use list_exports only on explicit user request.\",\n ),\n },\n outputSchema: withToolErrorOutputSchema({\n exportId: z\n .string()\n .describe(\n \"Downloaded export identifier. Should match the requested input.id for traceability.\",\n ),\n projectPath: z\n .string()\n .describe(\n \"Absolute local path to extracted export root in .primeui/temp/exports/[exportId]. Read files from here only.\",\n ),\n manifestPath: z\n .string()\n .describe(\n \"Absolute path to sidecar export manifest file (.primeui/temp/exports/[exportId].manifest.json) saved by create_export and required by copy_page.\",\n ),\n pages: z\n .array(exportPageSchema)\n .describe(\n \"Page descriptors loaded from local sidecar export manifest for import decisions.\",\n ),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: copy_page\n// ============================================================\n\nexport const toolCopyPage = {\n title: \"PrimeUI Copy Page\",\n description: `Safely copy one page from downloaded export into the user's local project. Works only with local files in .primeui/temp/exports and does NOT call PrimeUI API.\n\nWHEN TO USE:\n- Call this AFTER download_export.\n- Call once per selected page.\n- Use actualPageSlug only when user wants to remap route during import.\n\nBEHAVIOR:\n- Reads export sidecar manifest to resolve originPageSlug -> pagePath/componentsPath.\n- Copies and validates files strictly from pages[].manifest.files for the selected page.\n- Never overwrites existing conflicting files.\n- Reports:\n a) copied new files,\n b) identical existing files,\n c) conflicting files with diff,\n d) missing dependencies added to package.json,\n e) dependency version conflicts (report-only, no auto upgrade).\n- Adds only missing dependencies to package.json (dependencies/devDependencies/peerDependencies).\n- Never updates existing dependency versions and never runs install commands.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: {\n projectRoot: projectRootInputSchema,\n originPageSlug: z\n .string()\n .describe(\n \"Source page slug from PrimeUI project pages list, for example '/', '/pricing', '/docs'.\",\n ),\n actualPageSlug: z\n .string()\n .optional()\n .describe(\n \"Optional destination slug in user's project. If omitted, originPageSlug is used.\",\n ),\n },\n outputSchema: withToolErrorOutputSchema({\n exportId: z\n .string()\n .describe(\"Resolved local export identifier used for copy operation.\"),\n exportPath: z\n .string()\n .describe(\"Absolute path to local extracted export project root.\"),\n originPageSlug: z\n .string()\n .describe(\"Normalized source page slug requested for copy.\"),\n actualPageSlug: z\n .string()\n .describe(\"Normalized destination slug used for target route paths.\"),\n sourcePagePath: z\n .string()\n .describe(\"Source page path relative to export root.\"),\n targetPagePath: z\n .string()\n .describe(\"Destination page path relative to user project root.\"),\n sourceComponentsPath: z\n .string()\n .describe(\"Source components directory relative to export root.\"),\n targetComponentsPath: z\n .string()\n .describe(\n \"Destination components directory relative to user project root.\",\n ),\n newFiles: z\n .array(fileTransferSchema)\n .describe(\"New files copied into user project without conflicts.\"),\n identicalFiles: z\n .array(fileTransferSchema)\n .describe(\n \"Existing files in user project that are byte-identical to export files.\",\n ),\n conflictFiles: z\n .array(conflictFileSchema)\n .describe(\n \"Files that already exist and differ from export version. Never overwritten.\",\n ),\n addedDependencies: z\n .array(dependencyToAddSchema)\n .describe(\n \"Dependencies that were missing and have been added to user's package.json.\",\n ),\n dependenciesVersionConflicts: z\n .array(dependencyVersionConflictSchema)\n .describe(\n \"Dependencies with version mismatch between export and user project. Report only.\",\n ),\n summary: z.object({\n totalCandidateFiles: z\n .number()\n .describe(\n \"Total number of candidate files considered for page copy from pages[].manifest.files.\",\n ),\n copiedFiles: z.number().describe(\"Number of files copied as new.\"),\n identicalFiles: z\n .number()\n .describe(\"Number of files detected as identical.\"),\n conflictFiles: z\n .number()\n .describe(\"Number of conflicting files not copied.\"),\n addedDependencies: z\n .number()\n .describe(\"Count of dependencies added to package.json.\"),\n dependenciesVersionConflicts: z\n .number()\n .describe(\"Count of dependency version mismatches reported.\"),\n }),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n};\n\n// ============================================================\n// Tool: clear_temp\n// ============================================================\n\nexport const toolClearTemp = {\n title: \"PrimeUI Clear Temp\",\n description: `Delete all files in .primeui/temp/ and recreate empty temp structure.\n\nCall this at the START of a new import flow, before get_project_info/create_export, to reset stale temp state from previous runs.\n\nWHEN TO USE: Call once at the beginning of each new import flow. Do not call this between page imports in the same flow.\n\nSafe to call multiple times. Only affects .primeui/temp/ directory - never touches the user's project files.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: {\n projectRoot: projectRootInputSchema,\n },\n outputSchema: withToolErrorOutputSchema({\n success: z\n .boolean()\n .describe(\n \"True when temp cleanup completed and baseline temp structure was recreated.\",\n ),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n};\n"],"mappings":"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","names":["path","projectConfig","path","readFile","path","readFile","stat","writeFile","path","readFile","stat","path","i","j","normalizeSlug","path","readFile","fileExists","stat","writeFile","isExportStatus","path","readFile","path","z","z","path","path","z","exportStatusSchema","exportSummarySchema","exportPageManifestSchema","exportPageSchema"]}