@primeuicom/mcp 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/service.ts","../src/cli.ts","../src/package-metadata.ts","../src/health/run-health-check.ts","../src/lib/project-link-config.ts","../src/sources/api-provider.ts","../src/lib/api-v1-contract.ts","../src/lib/fs.ts","../src/health/hints.ts","../src/health/nested-primeui-search.ts","../src/health/report.ts","../src/health/update-check.ts","../src/services/project-sync-service.ts","../src/services/page-copy-service.ts","../src/lib/import-graph.ts","../src/lib/text-diff.ts","../src/services/page-inspect-report.ts","../src/runtime.ts","../src/server.ts","../src/instructions.ts"],"sourcesContent":["import { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\n\nimport { runCli } from \"./cli.js\";\nimport { runHealthCheck } from \"./health/index.js\";\nimport { LazyProjectSyncSource } from \"./runtime.js\";\nimport { createPrimeUiMcpServer } from \"./server.js\";\n\nasync function startPrimeUiMcpServer(): 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\nasync function main(): Promise<void> {\n const exitCode = await runCli(process.argv.slice(2), {\n stdout: process.stdout,\n stderr: process.stderr,\n startServer: startPrimeUiMcpServer,\n runHealthCheck: ({ projectRoot }) =>\n runHealthCheck({\n projectRoot,\n stdout: process.stdout,\n env: process.env,\n cwd: process.cwd(),\n }),\n });\n\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\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 type { PackageMetadata } from \"./package-metadata.js\";\nimport { packageMetadata } from \"./package-metadata.js\";\n\nexport type CliParseResult =\n | {\n kind: \"start-server\";\n }\n | {\n kind: \"print-help\";\n }\n | {\n kind: \"print-version\";\n }\n | {\n kind: \"run-health-check\";\n projectRoot?: string;\n }\n | {\n kind: \"error\";\n reason: \"unknown-argument\" | \"invalid-arguments\" | \"invalid-health-path\";\n args: string[];\n };\n\ntype WritableLike = {\n write: (chunk: string) => boolean | void;\n};\n\nexport type RunCliDependencies = {\n stdout: WritableLike;\n stderr: WritableLike;\n startServer: () => Promise<void>;\n runHealthCheck: (input: { projectRoot?: string }) => Promise<number>;\n metadata?: PackageMetadata;\n};\n\nfunction buildCliCommand(metadata: PackageMetadata): string {\n return `npx ${metadata.name}@latest`;\n}\n\nexport function formatUsageText(\n metadata: PackageMetadata = packageMetadata,\n): string {\n const command = buildCliCommand(metadata);\n return [\n \"Usage:\",\n ` ${command}`,\n ` ${command} --help`,\n ` ${command} --version`,\n ` ${command} --health`,\n ` ${command} --health /absolute/project/path`,\n ].join(\"\\n\");\n}\n\nexport function formatHelpText(\n metadata: PackageMetadata = packageMetadata,\n): string {\n return [\n \"PrimeUI MCP\",\n \"MCP stdio server for importing PrimeUI pages into your local project.\",\n \"\",\n formatUsageText(metadata),\n \"\",\n \"Options:\",\n \" -h, --help Show this help message and exit.\",\n \" -v, --version Show package version and exit.\",\n \" --health Run runtime diagnostics without starting the MCP server.\",\n \"\",\n \"Behavior:\",\n \" Running without arguments starts the PrimeUI MCP stdio server.\",\n \" This mode is intended to be launched by an MCP-compatible client.\",\n \" `--health` prints runtime diagnostics and exits.\",\n \"\",\n \"Configuration:\",\n \" PRIMEUI_API_KEY PrimeUI API key. Falls back to .primeui/project.json.\",\n \" PRIMEUI_API_BASE_URL Override PrimeUI API base URL for local development.\",\n \" PRIMEUI_PROJECT_ROOT Override project root used to resolve .primeui/project.json.\",\n \"\",\n \"Project config:\",\n \" .primeui/project.json must include projectId, apiKey, and targetProjectPath.\",\n ].join(\"\\n\");\n}\n\nexport function formatInvalidHealthPathError(\n projectRoot: string,\n metadata: PackageMetadata = packageMetadata,\n): string {\n return [\n `Invalid --health project path: ${projectRoot}`,\n \"\",\n \"The optional `--health` project path must be an absolute path.\",\n \"\",\n formatUsageText(metadata),\n ].join(\"\\n\");\n}\n\nexport function formatUnknownArgError(\n arg: string,\n metadata: PackageMetadata = packageMetadata,\n): string {\n return [`Unknown argument: ${arg}`, \"\", formatUsageText(metadata)].join(\"\\n\");\n}\n\nexport function formatInvalidArgsError(\n args: string[],\n metadata: PackageMetadata = packageMetadata,\n): string {\n return [\n `Invalid arguments: ${args.join(\" \")}`,\n \"\",\n formatUsageText(metadata),\n ].join(\"\\n\");\n}\n\nexport function parseCliArgs(argv: string[]): CliParseResult {\n if (argv.length === 0) {\n return {\n kind: \"start-server\",\n };\n }\n\n const [arg, maybeProjectRoot] = argv;\n if (arg === \"--health\") {\n if (argv.length === 1) {\n return {\n kind: \"run-health-check\",\n };\n }\n\n if (argv.length !== 2) {\n return {\n kind: \"error\",\n reason: \"invalid-arguments\",\n args: argv,\n };\n }\n\n if (\n maybeProjectRoot === \"--help\" ||\n maybeProjectRoot === \"-h\" ||\n maybeProjectRoot === \"--version\" ||\n maybeProjectRoot === \"-v\"\n ) {\n return {\n kind: \"error\",\n reason: \"invalid-arguments\",\n args: argv,\n };\n }\n\n if (!path.isAbsolute(maybeProjectRoot ?? \"\")) {\n return {\n kind: \"error\",\n reason: \"invalid-health-path\",\n args: argv,\n };\n }\n\n return {\n kind: \"run-health-check\",\n projectRoot: maybeProjectRoot,\n };\n }\n\n if (argv.length !== 1) {\n return {\n kind: \"error\",\n reason: \"invalid-arguments\",\n args: argv,\n };\n }\n\n if (arg === \"--help\" || arg === \"-h\") {\n return {\n kind: \"print-help\",\n };\n }\n\n if (arg === \"--version\" || arg === \"-v\") {\n return {\n kind: \"print-version\",\n };\n }\n\n return {\n kind: \"error\",\n reason: \"unknown-argument\",\n args: argv,\n };\n}\n\nfunction writeLine(stream: WritableLike, text: string): void {\n stream.write(`${text}\\n`);\n}\n\nexport async function runCli(\n argv: string[],\n dependencies: RunCliDependencies,\n): Promise<number> {\n const metadata = dependencies.metadata ?? packageMetadata;\n const parsed = parseCliArgs(argv);\n\n switch (parsed.kind) {\n case \"start-server\":\n await dependencies.startServer();\n return 0;\n case \"run-health-check\":\n return dependencies.runHealthCheck({\n projectRoot: parsed.projectRoot,\n });\n case \"print-help\":\n writeLine(dependencies.stdout, formatHelpText(metadata));\n return 0;\n case \"print-version\":\n writeLine(dependencies.stdout, metadata.version);\n return 0;\n case \"error\":\n writeLine(\n dependencies.stderr,\n parsed.reason === \"unknown-argument\"\n ? formatUnknownArgError(parsed.args[0] ?? \"\", metadata)\n : parsed.reason === \"invalid-health-path\"\n ? formatInvalidHealthPathError(parsed.args[1] ?? \"\", metadata)\n : formatInvalidArgsError(parsed.args, metadata),\n );\n return 1;\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { z } from \"zod\";\n\nconst packageMetadataSchema = z.object({\n name: z.string().trim().min(1),\n version: z.string().trim().min(1),\n description: z.string().trim().min(1),\n});\n\nexport type PackageMetadata = z.infer<typeof packageMetadataSchema>;\n\nfunction loadPackageMetadata(): PackageMetadata {\n const currentFilePath = fileURLToPath(import.meta.url);\n const currentDir = path.dirname(currentFilePath);\n const packageJsonPath = path.resolve(currentDir, \"../package.json\");\n\n let rawPackageJson = \"\";\n try {\n rawPackageJson = readFileSync(packageJsonPath, \"utf-8\");\n } catch (error) {\n throw new Error(\n `[primeui-mcp] failed to read package.json at ${packageJsonPath}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n\n let parsedPackageJson: unknown;\n try {\n parsedPackageJson = JSON.parse(rawPackageJson) as unknown;\n } catch (error) {\n throw new Error(\n `[primeui-mcp] invalid package.json at ${packageJsonPath}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n\n const parsed = packageMetadataSchema.safeParse(parsedPackageJson);\n if (!parsed.success) {\n const details = parsed.error.issues\n .map((issue) => `${issue.path.join(\".\") || \"<root>\"}: ${issue.message}`)\n .join(\"; \");\n throw new Error(\n `[primeui-mcp] invalid package metadata in ${packageJsonPath}: ${details}`,\n );\n }\n\n return parsed.data;\n}\n\nexport const packageMetadata = loadPackageMetadata();\n","import { stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n PRIMEUI_PROJECT_DIR_NAME,\n PrimeUiProjectConfigError,\n resolvePrimeUiApiKeyDetails,\n resolvePrimeUiProjectConfig,\n resolvePrimeUiTargetProjectRoot,\n} from \"../lib/project-link-config.js\";\nimport { packageMetadata } from \"../package-metadata.js\";\nimport {\n ApiProjectDataProvider,\n DEFAULT_API_BASE_URL,\n buildPrimeUiApiUrl,\n normalizePrimeUiApiRoot,\n} from \"../sources/api-provider.js\";\nimport { buildHealthHints } from \"./hints.js\";\nimport type {\n HealthApiKeyComparison,\n HealthProjectConfigStatus,\n HealthProjectRootComparison,\n HealthReportData,\n RunHealthCheckOptions,\n} from \"./index.js\";\nimport { findNestedPrimeUiCandidates } from \"./nested-primeui-search.js\";\nimport { formatHealthReport } from \"./report.js\";\nimport { checkLatestPackageVersion } from \"./update-check.js\";\n\nfunction mapProjectSource(\n source: string | undefined,\n): HealthReportData[\"projectResolution\"][\"effectiveSource\"] {\n switch (source) {\n case \"tool\":\n return \"input\";\n case \"env\":\n return \"env\";\n case \"search\":\n return \"search\";\n default:\n return \"unresolved\";\n }\n}\n\nfunction mapProjectErrorSource(\n source: string | undefined,\n): HealthReportData[\"projectResolution\"][\"errorSource\"] {\n switch (source) {\n case \"tool\":\n return \"input\";\n case \"env\":\n return \"env\";\n case \"search\":\n return \"search\";\n default:\n return undefined;\n }\n}\n\nfunction compareProjectRoots(\n inputPath?: string,\n envPath?: string,\n): HealthProjectRootComparison {\n if (inputPath && envPath) {\n return inputPath === envPath ? \"same\" : \"different\";\n }\n if (inputPath) {\n return \"input-only\";\n }\n if (envPath) {\n return \"env-only\";\n }\n return \"neither\";\n}\n\nfunction compareApiKeys(\n valuesMatch: boolean | undefined,\n envProvided: boolean,\n configProvided: boolean,\n): HealthApiKeyComparison {\n if (envProvided && configProvided) {\n return valuesMatch ? \"same\" : \"different\";\n }\n return \"not-comparable\";\n}\n\nfunction mapConfigStatus(\n error: PrimeUiProjectConfigError | undefined,\n): HealthProjectConfigStatus {\n if (!error) {\n return \"valid\";\n }\n\n switch (error.code) {\n case \"PROJECT_CONFIG_NOT_FOUND\":\n return typeof error.details.expectedConfigPath === \"string\"\n ? \"missing\"\n : \"unresolved\";\n case \"PROJECT_CONFIG_INVALID_JSON\":\n return \"invalid-json\";\n case \"PROJECT_CONFIG_INVALID_FORMAT\":\n return \"invalid-format\";\n case \"PROJECT_CONFIG_READ_FAILED\":\n return \"read-failed\";\n default:\n return \"unresolved\";\n }\n}\n\nasync function directoryExists(targetPath: string): Promise<boolean> {\n try {\n const targetStat = await stat(targetPath);\n return targetStat.isDirectory();\n } catch {\n return false;\n }\n}\n\nfunction classifyApiError(message: string): \"auth\" | \"network\" {\n return /PrimeUI API request failed \\((401|403)\\)/.test(message)\n ? \"auth\"\n : \"network\";\n}\n\nexport async function runHealthCheck(\n options: RunHealthCheckOptions,\n): Promise<number> {\n const metadata = options.metadata ?? packageMetadata;\n const env = options.env ?? process.env;\n const cwd = path.resolve(options.cwd ?? process.cwd());\n const inputProjectRoot = options.projectRoot?.trim()\n ? path.resolve(options.projectRoot.trim())\n : undefined;\n const envProjectRoot = env.PRIMEUI_PROJECT_ROOT?.trim()\n ? path.resolve(env.PRIMEUI_PROJECT_ROOT.trim())\n : undefined;\n\n const versionResult = await (\n options.checkLatestVersion ?? checkLatestPackageVersion\n )(metadata.name, metadata.version);\n\n let resolvedProjectConfig:\n | Awaited<ReturnType<typeof resolvePrimeUiProjectConfig>>\n | undefined;\n let projectConfigError: PrimeUiProjectConfigError | undefined;\n\n try {\n resolvedProjectConfig = await resolvePrimeUiProjectConfig({\n cwd,\n projectRootFromTool: inputProjectRoot,\n projectRootFromEnv: envProjectRoot,\n });\n } catch (error) {\n if (!(error instanceof PrimeUiProjectConfigError)) {\n throw error;\n }\n projectConfigError = error;\n }\n\n const resolvedProjectRoot =\n resolvedProjectConfig?.projectRoot ??\n (typeof projectConfigError?.details.projectRoot === \"string\"\n ? path.resolve(projectConfigError.details.projectRoot)\n : undefined);\n const primeUiDirPath = resolvedProjectRoot\n ? path.join(resolvedProjectRoot, PRIMEUI_PROJECT_DIR_NAME)\n : inputProjectRoot\n ? path.join(inputProjectRoot, PRIMEUI_PROJECT_DIR_NAME)\n : envProjectRoot &&\n mapProjectErrorSource(\n projectConfigError?.details.source as string,\n ) === \"env\"\n ? path.join(envProjectRoot, PRIMEUI_PROJECT_DIR_NAME)\n : undefined;\n const primeUiDirStatus = primeUiDirPath\n ? (await directoryExists(primeUiDirPath))\n ? \"found\"\n : \"missing\"\n : \"unresolved\";\n const configStatus = resolvedProjectConfig\n ? \"valid\"\n : mapConfigStatus(projectConfigError);\n const configPath =\n resolvedProjectConfig?.projectConfigPath ??\n (typeof projectConfigError?.details.expectedConfigPath === \"string\"\n ? path.resolve(projectConfigError.details.expectedConfigPath)\n : primeUiDirPath\n ? path.join(primeUiDirPath, \"project.json\")\n : undefined);\n const nestedSearchPerformed =\n Boolean(inputProjectRoot) && primeUiDirStatus === \"missing\";\n const nestedCandidates = nestedSearchPerformed\n ? await findNestedPrimeUiCandidates(inputProjectRoot!)\n : [];\n\n const apiKeyDetails = resolvePrimeUiApiKeyDetails({\n projectConfig: resolvedProjectConfig?.projectConfig,\n apiKeyFromEnv: env.PRIMEUI_API_KEY,\n });\n const configApiKeyState = resolvedProjectConfig\n ? \"set\"\n : configStatus === \"missing\" || configStatus === \"unresolved\"\n ? \"missing\"\n : \"unknown\";\n\n const apiBaseUrlSource = env.PRIMEUI_API_BASE_URL?.trim() ? \"env\" : \"default\";\n const defaultApiRoot = normalizePrimeUiApiRoot(DEFAULT_API_BASE_URL);\n let apiRoot: string | undefined;\n let projectInfoUrl: string | undefined;\n let apiCheck: HealthReportData[\"apiCheck\"] | undefined;\n\n try {\n apiRoot = normalizePrimeUiApiRoot(env.PRIMEUI_API_BASE_URL);\n projectInfoUrl = buildPrimeUiApiUrl(apiRoot, \"project\");\n } catch (error) {\n apiCheck = {\n status: \"skipped\",\n apiBaseUrlSource,\n nonStandardBaseUrl: Boolean(env.PRIMEUI_API_BASE_URL?.trim()),\n message: error instanceof Error ? error.message : String(error),\n errorKind: \"configuration\",\n };\n }\n\n if (!apiCheck) {\n if (!apiKeyDetails.apiKey) {\n apiCheck = {\n status: \"skipped\",\n apiRoot,\n projectInfoUrl,\n apiBaseUrlSource,\n nonStandardBaseUrl: apiRoot !== defaultApiRoot,\n message:\n \"No usable API key was available, so project info was not requested.\",\n };\n } else {\n const provider =\n options.createProvider?.({\n apiKey: apiKeyDetails.apiKey,\n baseUrl: env.PRIMEUI_API_BASE_URL,\n }) ??\n new ApiProjectDataProvider({\n apiKey: apiKeyDetails.apiKey,\n baseUrl: env.PRIMEUI_API_BASE_URL,\n });\n\n try {\n await provider.getProjectInfo();\n apiCheck = {\n status: \"passed\",\n apiRoot,\n projectInfoUrl,\n apiBaseUrlSource,\n nonStandardBaseUrl: apiRoot !== defaultApiRoot,\n message: \"Project info request succeeded with the current API key.\",\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n apiCheck = {\n status: \"failed\",\n apiRoot,\n projectInfoUrl,\n apiBaseUrlSource,\n nonStandardBaseUrl: apiRoot !== defaultApiRoot,\n message,\n errorKind: classifyApiError(message),\n };\n }\n }\n }\n\n if (!apiCheck) {\n throw new Error(\n \"PrimeUI health check did not produce an API check result.\",\n );\n }\n\n const report: HealthReportData = {\n version: {\n currentVersion: metadata.version,\n latestVersion: versionResult.latestVersion,\n updateStatus: versionResult.status,\n detail: versionResult.detail,\n },\n runtimeContext: {\n cwd,\n inputProjectRoot,\n envProjectRoot,\n envApiBaseUrl: env.PRIMEUI_API_BASE_URL?.trim() || undefined,\n envApiKeySet: Boolean(env.PRIMEUI_API_KEY?.trim()),\n },\n sourceResolution: {\n projectRoot: {\n inputPath: inputProjectRoot,\n envPath: envProjectRoot,\n comparison: compareProjectRoots(inputProjectRoot, envProjectRoot),\n effectiveSource: mapProjectSource(\n resolvedProjectConfig?.source ??\n (projectConfigError?.details.source as string | undefined),\n ),\n },\n apiKey: {\n envState: apiKeyDetails.envProvided ? \"set\" : \"missing\",\n configState: configApiKeyState,\n comparison: compareApiKeys(\n apiKeyDetails.valuesMatch,\n apiKeyDetails.envProvided,\n apiKeyDetails.configProvided,\n ),\n effectiveSource: apiKeyDetails.source,\n },\n },\n projectResolution: {\n resolvedProjectRoot,\n effectiveSource: mapProjectSource(\n resolvedProjectConfig?.source ??\n (projectConfigError?.details.source as string | undefined),\n ),\n errorSource: mapProjectErrorSource(\n projectConfigError?.details.source as string | undefined,\n ),\n primeUiDirPath,\n primeUiDirStatus,\n configPath,\n configStatus,\n targetProjectPath: resolvedProjectConfig?.projectConfig.targetProjectPath,\n targetProjectRoot: resolvedProjectConfig\n ? resolvePrimeUiTargetProjectRoot(\n resolvedProjectConfig.projectRoot,\n resolvedProjectConfig.projectConfig,\n )\n : undefined,\n errorCode: projectConfigError?.code,\n errorMessage: projectConfigError?.message,\n inputProjectRootValidated:\n Boolean(inputProjectRoot) && resolvedProjectConfig?.source === \"tool\",\n },\n nestedSearch: {\n performed: nestedSearchPerformed,\n rootPath: nestedSearchPerformed ? inputProjectRoot : undefined,\n candidates: nestedCandidates,\n },\n apiCheck,\n hints: [],\n };\n\n report.hints = buildHealthHints({\n report,\n connectApiKey:\n nestedSearchPerformed &&\n nestedCandidates.length === 0 &&\n apiCheck.status === \"passed\"\n ? apiKeyDetails.apiKey\n : undefined,\n });\n\n options.stdout.write(`${formatHealthReport(report)}\\n`);\n return 0;\n}\n","import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { z } from \"zod\";\n\nexport const PRIMEUI_PROJECT_DIR_NAME = \".primeui\";\nexport const PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH = `${PRIMEUI_PROJECT_DIR_NAME}/project.json`;\nexport type PrimeUiProjectConfigSource = \"tool\" | \"sticky\" | \"env\" | \"search\";\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 \"Likely MCP project-path bug: when Codex VSCode runs MCP from global config, server can start in HOME without project context. Fix: set tool input parameter `projectRoot` to the ABSOLUTE path of the current project root (for example: /path/to/current/project).\";\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\nexport type ResolvedPrimeUiProjectConfig = {\n projectRoot: string;\n projectConfigPath: string;\n projectConfig: PrimeUiProjectConfig;\n source: PrimeUiProjectConfigSource;\n};\n\nexport type ResolvedPrimeUiApiKey = {\n apiKey?: string;\n source: \"env\" | \"config\" | \"missing\";\n envProvided: boolean;\n configProvided: boolean;\n valuesMatch?: boolean;\n};\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\nfunction withConfigSourceDetails(\n error: unknown,\n context: {\n source: PrimeUiProjectConfigSource;\n projectRoot: string;\n projectConfigPath: string;\n },\n): never {\n if (!(error instanceof PrimeUiProjectConfigError)) {\n throw error;\n }\n\n throw new PrimeUiProjectConfigError({\n code: error.code,\n message: error.message,\n hint: error.hint,\n details: {\n ...error.details,\n source: context.source,\n projectRoot: context.projectRoot,\n expectedConfigPath: context.projectConfigPath,\n },\n });\n}\n\nasync function loadResolvedPrimeUiProjectConfig(context: {\n source: PrimeUiProjectConfigSource;\n projectRoot: string;\n projectConfigPath: string;\n}): Promise<ResolvedPrimeUiProjectConfig> {\n try {\n const projectConfig = await readPrimeUiProjectConfig(\n context.projectConfigPath,\n );\n return {\n projectRoot: context.projectRoot,\n projectConfigPath: context.projectConfigPath,\n projectConfig,\n source: context.source,\n };\n } catch (error) {\n withConfigSourceDetails(error, context);\n }\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<ResolvedPrimeUiProjectConfig> {\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 return loadResolvedPrimeUiProjectConfig({\n source: \"tool\",\n projectRoot: resolvedToolRoot,\n projectConfigPath: toolProjectConfigPath,\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 return loadResolvedPrimeUiProjectConfig({\n source: \"sticky\",\n projectRoot: resolvedStickyRoot,\n projectConfigPath: stickyProjectConfigPath,\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 return loadResolvedPrimeUiProjectConfig({\n source: \"env\",\n projectRoot: resolvedEnvRoot,\n projectConfigPath: envProjectConfigPath,\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. MCP cwd is \"${options.cwd}\". Searched from: ${searchRoots.join(\n \", \",\n )}. This usually means MCP did not receive the current project path.`,\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 return loadResolvedPrimeUiProjectConfig({\n source: \"search\",\n projectRoot,\n projectConfigPath,\n });\n}\n\ntype ResolvePrimeUiApiKeyOptions = {\n projectConfig?: PrimeUiProjectConfig;\n apiKeyFromEnv?: string;\n};\n\nexport function resolvePrimeUiApiKeyDetails(\n options: ResolvePrimeUiApiKeyOptions,\n): ResolvedPrimeUiApiKey {\n const envApiKey = options.apiKeyFromEnv?.trim();\n const configApiKey = options.projectConfig?.apiKey.trim();\n const envProvided = Boolean(envApiKey);\n const configProvided = Boolean(configApiKey);\n\n return {\n apiKey: envApiKey ?? configApiKey,\n source: envProvided ? \"env\" : configProvided ? \"config\" : \"missing\",\n envProvided,\n configProvided,\n valuesMatch:\n envProvided && configProvided ? envApiKey === configApiKey : undefined,\n };\n}\n\nexport function resolvePrimeUiTargetProjectRoot(\n projectRoot: string,\n projectConfig: PrimeUiProjectConfig,\n): string {\n return path.resolve(projectRoot, projectConfig.targetProjectPath);\n}\n\nexport async function resolvePrimeUiApiKey(\n options: ResolvePrimeUiApiKeyOptions,\n): Promise<string> {\n const resolved = resolvePrimeUiApiKeyDetails(options);\n if (resolved.apiKey) {\n return resolved.apiKey;\n }\n\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","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 {\n primeUiCreateExportResponseSchema,\n primeUiExportsResponseSchema,\n primeUiProjectInfoSchema,\n primeUiProjectPageDetailsSchema,\n} from \"../lib/api-v1-contract.js\";\nimport { ensureDir } from \"../lib/fs.js\";\nimport type {\n PrimeUiCreateExportResult,\n PrimeUiExport,\n PrimeUiProjectPageDetailsResult,\n PrimeUiProjectInfo,\n} from \"../types.js\";\nimport type { ProjectDataProvider } from \"./project-data-provider.js\";\n\ntype ApiProjectDataProviderOptions = {\n apiKey?: string;\n baseUrl?: string;\n};\n\nexport const 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];\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\nexport const normalizePrimeUiApiRoot = (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\nexport const buildPrimeUiApiUrl = (apiRoot: string, endpoint: string): string =>\n new URL(endpoint, apiRoot).toString();\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 = normalizePrimeUiApiRoot(options.baseUrl);\n }\n\n async getProjectInfo(): Promise<PrimeUiProjectInfo> {\n return this.requestJson(\"project\", primeUiProjectInfoSchema);\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 primeUiProjectPageDetailsSchema,\n );\n }\n\n async listExports(): Promise<PrimeUiExport[]> {\n const response = await this.requestJson(\n \"project/exports\",\n primeUiExportsResponseSchema,\n );\n return response.exports;\n }\n\n async createExport(): Promise<PrimeUiCreateExportResult> {\n return this.requestJson(\n \"project/exports\",\n primeUiCreateExportResponseSchema,\n {\n method: \"POST\",\n },\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 buildPrimeUiApiUrl(this.apiRoot, endpoint);\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 { z } from \"zod\";\n\nimport type {\n PrimeUiCreateExportResult,\n PrimeUiExportManifest,\n PrimeUiExportStatus,\n PrimeUiExportedExportable,\n PrimeUiProjectExportable,\n PrimeUiProjectInfo,\n PrimeUiProjectPage,\n PrimeUiProjectPageComponent,\n PrimeUiProjectPageDetailsResult,\n} from \"../types.js\";\n\nexport const primeUiExportStatusSchema: z.ZodType<PrimeUiExportStatus> = z.enum(\n [\"in_progress\", \"completed\", \"failed\"],\n);\n\nexport const primeUiProjectPageObjectSchema = 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});\n\nexport const primeUiProjectPageSchema: z.ZodType<PrimeUiProjectPage> =\n primeUiProjectPageObjectSchema;\n\nexport const primeUiProjectExportableSchema: z.ZodType<PrimeUiProjectExportable> =\n z.object({\n key: z.string(),\n description: z.string(),\n isReadyToExport: z.boolean(),\n });\n\nexport const primeUiExportSummarySchema = z.object({\n total: z.number(),\n successful: z.number(),\n failed: z.number(),\n});\n\nexport const primeUiExportableManifestSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n files: z.array(z.string()),\n});\n\nexport const primeUiExportedExportableSchema: z.ZodType<PrimeUiExportedExportable> =\n z.object({\n key: z.string(),\n isReadyToExport: z.boolean(),\n manifest: primeUiExportableManifestSchema,\n });\n\nexport const primeUiExportPageManifestSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n files: z.array(z.string()),\n});\n\nexport const primeUiExportPageSchema = 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: primeUiExportPageManifestSchema,\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 */\nexport const primeUiProjectInfoSchema: z.ZodType<PrimeUiProjectInfo> = z.object(\n {\n projectId: z.string(),\n projectName: z.string(),\n metadata: z.record(z.unknown()),\n exportables: z.array(primeUiProjectExportableSchema),\n pages: z.array(primeUiProjectPageSchema),\n },\n);\n\nexport const primeUiProjectPageComponentSchema: 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 */\nexport const primeUiProjectPageDetailsSchema: z.ZodType<PrimeUiProjectPageDetailsResult> =\n z.object({\n page: primeUiProjectPageObjectSchema.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(primeUiProjectPageComponentSchema).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 */\nexport const primeUiExportsResponseSchema = z.object({\n exports: z.array(\n z.object({\n id: z.string(),\n status: primeUiExportStatusSchema,\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 */\nexport const primeUiCreateExportResponseSchema: z.ZodType<PrimeUiCreateExportResult> =\n z.object({\n export: z.object({\n id: z.string(),\n status: primeUiExportStatusSchema,\n createdAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }).nullable(),\n summary: primeUiExportSummarySchema,\n exportables: z.array(primeUiExportedExportableSchema),\n }),\n pages: z.array(primeUiExportPageSchema),\n });\n\nexport const primeUiExportManifestSchema: z.ZodType<PrimeUiExportManifest> =\n primeUiCreateExportResponseSchema;\n\nexport function parsePrimeUiExportManifest(\n value: unknown,\n): 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 if (!maybe.export || typeof maybe.export !== \"object\") {\n throw new Error(\"Export manifest export payload is invalid.\");\n }\n\n const parsed = primeUiExportManifestSchema.safeParse(value);\n if (!parsed.success) {\n const hasPageIssue = parsed.error.issues.some(\n (issue) => issue.path[0] === \"pages\",\n );\n\n throw new Error(\n hasPageIssue\n ? \"Export manifest pages payload is invalid.\"\n : \"Export manifest does not match expected schema.\",\n );\n }\n\n return parsed.data;\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 type { HealthReportData } from \"./index.js\";\n\ntype BuildHealthHintsOptions = {\n report: HealthReportData;\n connectApiKey?: string;\n};\n\nfunction addHint(target: string[], seen: Set<string>, hint: string): void {\n if (!seen.has(hint)) {\n seen.add(hint);\n target.push(hint);\n }\n}\n\nexport function buildHealthHints(options: BuildHealthHintsOptions): string[] {\n const { report, connectApiKey } = options;\n const hints: string[] = [];\n const seen = new Set<string>();\n const validNestedRoots = report.nestedSearch.candidates\n .filter((candidate) => candidate.configStatus === \"valid\")\n .map((candidate) => candidate.projectRoot);\n\n if (\n !report.runtimeContext.inputProjectRoot &&\n report.projectResolution.configStatus === \"unresolved\" &&\n report.projectResolution.errorSource === \"search\"\n ) {\n addHint(\n hints,\n seen,\n \"Config was not found from the current working directory. Rerun `--health /absolute/project/path`, pass the same absolute path via MCP tool `projectRoot`, or set `PRIMEUI_PROJECT_ROOT` if your MCP client starts outside the project.\",\n );\n }\n\n if (\n report.runtimeContext.inputProjectRoot &&\n report.projectResolution.primeUiDirStatus === \"missing\"\n ) {\n if (report.nestedSearch.candidates.length > 0) {\n addHint(\n hints,\n seen,\n validNestedRoots.length > 0\n ? `No direct \\`.primeui\\` directory was found under the provided path. Rerun health with one of the exact nested project roots that passed config validation, for example: ${validNestedRoots.join(\", \")}.`\n : \"No direct `.primeui` directory was found under the provided path. Nested `.primeui` directories were found below it, so rerun health with the exact intended project root before using MCP tools.\",\n );\n\n if (validNestedRoots.length > 0) {\n addHint(\n hints,\n seen,\n `When calling MCP tools, pass \\`projectRoot\\` only for a candidate whose nested health check passes, for example: ${validNestedRoots[0]}.`,\n );\n }\n } else {\n const connectCommand = `npx @primeuicom/cli ${\n connectApiKey ?? \"<api-key>\"\n } connect`;\n addHint(\n hints,\n seen,\n `No \\`.primeui\\` directory was found under the provided path. From the intended target folder, run \\`${connectCommand}\\` to connect the project to PrimeUI.`,\n );\n if (!connectApiKey) {\n addHint(\n hints,\n seen,\n \"If you do not already have a valid PrimeUI API key, get it from the appropriate PrimeUI project on `primeui.com`.\",\n );\n }\n }\n }\n\n if (\n report.projectResolution.primeUiDirStatus === \"found\" &&\n report.projectResolution.configStatus === \"missing\"\n ) {\n addHint(\n hints,\n seen,\n \"`.primeui/project.json` is missing. It was likely corrupted or deleted; restore it by reconnecting the project or by making a fresh export via the PrimeUI CLI tool.\",\n );\n }\n\n if (\n report.projectResolution.primeUiDirStatus === \"found\" &&\n (report.projectResolution.configStatus === \"invalid-json\" ||\n report.projectResolution.configStatus === \"invalid-format\" ||\n report.projectResolution.configStatus === \"read-failed\")\n ) {\n addHint(\n hints,\n seen,\n \"`.primeui/project.json` looks corrupted or incomplete. Restore it by reconnecting the project or by making a fresh export via the PrimeUI CLI tool.\",\n );\n }\n\n if (\n report.runtimeContext.envProjectRoot &&\n report.sourceResolution.projectRoot.comparison === \"different\"\n ) {\n addHint(\n hints,\n seen,\n report.projectResolution.inputProjectRootValidated\n ? `\\`PRIMEUI_PROJECT_ROOT\\` points to a different location than the validated explicit input path. Fix or unset \\`PRIMEUI_PROJECT_ROOT\\`, and use the successful path via MCP tool \\`projectRoot\\`: ${report.runtimeContext.inputProjectRoot}.`\n : \"`PRIMEUI_PROJECT_ROOT` points to a different location than the explicit input path. Correct the project root first, then rerun health before using MCP tool `projectRoot`.\",\n );\n }\n\n if (\n report.sourceResolution.apiKey.effectiveSource === \"missing\" &&\n !(\n report.projectResolution.primeUiDirStatus === \"found\" &&\n report.projectResolution.configStatus !== \"valid\"\n )\n ) {\n addHint(\n hints,\n seen,\n \"No usable API key was found. Set `PRIMEUI_API_KEY`, restore `apiKey` in `.primeui/project.json`, or get a valid key from the appropriate PrimeUI project on `primeui.com`.\",\n );\n }\n\n if (\n report.apiCheck.status === \"skipped\" &&\n report.apiCheck.errorKind === \"configuration\" &&\n report.runtimeContext.envApiBaseUrl\n ) {\n addHint(\n hints,\n seen,\n \"Set `PRIMEUI_API_BASE_URL` to a valid absolute URL such as `http://localhost:3020`, or remove it to fall back to the standard production API.\",\n );\n }\n\n if (\n report.apiCheck.status === \"failed\" &&\n report.apiCheck.errorKind === \"auth\"\n ) {\n if (\n report.sourceResolution.apiKey.envState === \"set\" &&\n report.sourceResolution.apiKey.configState === \"set\"\n ) {\n addHint(\n hints,\n seen,\n \"Both env and config API keys are present. Verify that `PRIMEUI_API_KEY` is not unintentionally overriding a valid config key.\",\n );\n }\n if (report.apiCheck.nonStandardBaseUrl) {\n addHint(\n hints,\n seen,\n \"Authentication failed while using a non-standard `PRIMEUI_API_BASE_URL`. If you did not intend to target a custom API host, remove that env var and retry.\",\n );\n }\n addHint(\n hints,\n seen,\n \"The current API key was rejected by `project info`. Refresh the project API key from PrimeUI project settings, then rerun health.\",\n );\n }\n\n if (\n report.apiCheck.status === \"failed\" &&\n report.apiCheck.errorKind === \"network\"\n ) {\n addHint(\n hints,\n seen,\n report.apiCheck.nonStandardBaseUrl\n ? \"The `project info` request failed while using a non-standard `PRIMEUI_API_BASE_URL`. Verify that host is reachable, or remove the env var if you did not intend to target a custom API.\"\n : \"The `project info` request could not reach the API successfully. Verify network reachability and retry.\",\n );\n }\n\n return hints;\n}\n","import { readdir, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n PRIMEUI_PROJECT_DIR_NAME,\n PrimeUiProjectConfigError,\n readPrimeUiProjectConfig,\n resolvePrimeUiTargetProjectRoot,\n} from \"../lib/project-link-config.js\";\nimport type { NestedPrimeUiCandidate } from \"./index.js\";\n\nconst SCAN_EXCLUDED_DIRS = new Set([\n \".git\",\n \"node_modules\",\n \".next\",\n \"dist\",\n \"build\",\n \"coverage\",\n]);\n\nasync function isFile(targetPath: string): Promise<boolean> {\n try {\n const targetStat = await stat(targetPath);\n return targetStat.isFile();\n } catch {\n return false;\n }\n}\n\nfunction mapConfigStatus(\n error: unknown,\n): NestedPrimeUiCandidate[\"configStatus\"] {\n if (!(error instanceof PrimeUiProjectConfigError)) {\n return \"read-failed\";\n }\n\n switch (error.code) {\n case \"PROJECT_CONFIG_INVALID_JSON\":\n return \"invalid-json\";\n case \"PROJECT_CONFIG_INVALID_FORMAT\":\n return \"invalid-format\";\n case \"PROJECT_CONFIG_READ_FAILED\":\n return \"read-failed\";\n case \"PROJECT_CONFIG_NOT_FOUND\":\n return \"missing\";\n default:\n return \"read-failed\";\n }\n}\n\nasync function inspectCandidate(\n projectRoot: string,\n primeUiPath: string,\n): Promise<NestedPrimeUiCandidate> {\n const configPath = path.join(primeUiPath, \"project.json\");\n\n if (!(await isFile(configPath))) {\n return {\n projectRoot,\n primeUiPath,\n configPath,\n hasProjectConfig: false,\n configStatus: \"missing\",\n };\n }\n\n try {\n const projectConfig = await readPrimeUiProjectConfig(configPath);\n return {\n projectRoot,\n primeUiPath,\n configPath,\n hasProjectConfig: true,\n configStatus: \"valid\",\n targetProjectPath: projectConfig.targetProjectPath,\n targetProjectRoot: resolvePrimeUiTargetProjectRoot(\n projectRoot,\n projectConfig,\n ),\n };\n } catch (error) {\n return {\n projectRoot,\n primeUiPath,\n configPath,\n hasProjectConfig: true,\n configStatus: mapConfigStatus(error),\n };\n }\n}\n\nexport async function findNestedPrimeUiCandidates(\n rootPath: string,\n): Promise<NestedPrimeUiCandidate[]> {\n const queue: string[] = [path.resolve(rootPath)];\n const seen = new Set<string>();\n const candidates: NestedPrimeUiCandidate[] = [];\n\n while (queue.length > 0) {\n const currentDir = queue.shift();\n if (!currentDir || seen.has(currentDir)) {\n continue;\n }\n seen.add(currentDir);\n\n let entries;\n try {\n entries = await readdir(currentDir, { withFileTypes: true });\n } catch {\n continue;\n }\n\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n\n const entryPath = path.join(currentDir, entry.name);\n if (entry.name === PRIMEUI_PROJECT_DIR_NAME) {\n candidates.push(await inspectCandidate(currentDir, entryPath));\n continue;\n }\n\n if (SCAN_EXCLUDED_DIRS.has(entry.name)) {\n continue;\n }\n\n queue.push(entryPath);\n }\n }\n\n return candidates.sort((left, right) =>\n left.primeUiPath.localeCompare(right.primeUiPath),\n );\n}\n","import type {\n HealthApiKeyComparison,\n HealthProjectConfigStatus,\n HealthProjectRootComparison,\n HealthReportData,\n} from \"./index.js\";\n\nfunction renderValue(value: string | undefined, fallback = \"missing\"): string {\n return value?.trim() ? value : fallback;\n}\n\nfunction renderProjectRootComparison(\n comparison: HealthProjectRootComparison,\n): string {\n switch (comparison) {\n case \"same\":\n return \"same\";\n case \"different\":\n return \"different\";\n case \"input-only\":\n return \"only explicit input path is set\";\n case \"env-only\":\n return \"only PRIMEUI_PROJECT_ROOT is set\";\n case \"neither\":\n return \"neither explicit input path nor PRIMEUI_PROJECT_ROOT is set\";\n }\n}\n\nfunction renderApiKeyComparison(comparison: HealthApiKeyComparison): string {\n switch (comparison) {\n case \"same\":\n return \"same\";\n case \"different\":\n return \"different\";\n case \"not-comparable\":\n return \"not comparable\";\n }\n}\n\nfunction renderConfigStatus(status: HealthProjectConfigStatus): string {\n switch (status) {\n case \"valid\":\n return \"valid\";\n case \"missing\":\n return \"missing\";\n case \"invalid-json\":\n return \"invalid JSON\";\n case \"invalid-format\":\n return \"invalid format\";\n case \"read-failed\":\n return \"read failed\";\n case \"unresolved\":\n return \"unresolved\";\n }\n}\n\nfunction formatSection(title: string, lines: string[]): string {\n return [title, ...lines.map((line) => `- ${line}`)].join(\"\\n\");\n}\n\nexport function formatHealthReport(report: HealthReportData): string {\n const sections = [\n \"PrimeUI MCP Health\",\n \"\",\n formatSection(\"Version\", [\n `current: ${report.version.currentVersion}`,\n `latest: ${renderValue(report.version.latestVersion, \"unavailable\")}`,\n `update status: ${report.version.updateStatus}${\n report.version.detail ? ` (${report.version.detail})` : \"\"\n }`,\n ]),\n \"\",\n formatSection(\"Runtime Context\", [\n `cwd: ${report.runtimeContext.cwd}`,\n `health input path: ${renderValue(report.runtimeContext.inputProjectRoot)}`,\n `PRIMEUI_PROJECT_ROOT: ${renderValue(report.runtimeContext.envProjectRoot)}`,\n `PRIMEUI_API_BASE_URL: ${renderValue(report.runtimeContext.envApiBaseUrl)}`,\n `PRIMEUI_API_KEY: ${report.runtimeContext.envApiKeySet ? \"set\" : \"missing\"}`,\n ]),\n \"\",\n formatSection(\"Source Resolution\", [\n `input project root: ${renderValue(report.sourceResolution.projectRoot.inputPath)}`,\n `env project root: ${renderValue(report.sourceResolution.projectRoot.envPath)}`,\n `project root comparison: ${renderProjectRootComparison(\n report.sourceResolution.projectRoot.comparison,\n )}`,\n `effective project root source: ${report.sourceResolution.projectRoot.effectiveSource}`,\n `env API key: ${report.sourceResolution.apiKey.envState}`,\n `config API key: ${report.sourceResolution.apiKey.configState}`,\n `API key comparison: ${renderApiKeyComparison(\n report.sourceResolution.apiKey.comparison,\n )}`,\n `effective API key source: ${report.sourceResolution.apiKey.effectiveSource}`,\n ]),\n \"\",\n formatSection(\"Project Resolution\", [\n `resolved project root: ${renderValue(\n report.projectResolution.resolvedProjectRoot,\n \"unresolved\",\n )}`,\n `effective project root source: ${report.projectResolution.effectiveSource}`,\n `project root validation via explicit input: ${\n report.projectResolution.inputProjectRootValidated\n ? \"passed\"\n : \"not used or failed\"\n }`,\n `.primeui directory: ${\n report.projectResolution.primeUiDirStatus === \"found\"\n ? `found at ${report.projectResolution.primeUiDirPath}`\n : report.projectResolution.primeUiDirStatus\n }`,\n `config path: ${\n report.projectResolution.configPath\n ? `${report.projectResolution.configPath} (${renderConfigStatus(\n report.projectResolution.configStatus,\n )})`\n : renderConfigStatus(report.projectResolution.configStatus)\n }`,\n `targetProjectPath: ${report.projectResolution.targetProjectPath ?? \"unresolved\"}`,\n `resolved target project root: ${renderValue(\n report.projectResolution.targetProjectRoot,\n \"unresolved\",\n )}`,\n `project resolution detail: ${renderValue(\n report.projectResolution.errorMessage,\n \"none\",\n )}`,\n ]),\n \"\",\n formatSection(\"API Check\", [\n `API root: ${renderValue(report.apiCheck.apiRoot, \"unresolved\")}`,\n `project info URL: ${renderValue(report.apiCheck.projectInfoUrl, \"unresolved\")}`,\n `PRIMEUI_API_BASE_URL source: ${report.apiCheck.apiBaseUrlSource}`,\n `non-standard API base URL: ${report.apiCheck.nonStandardBaseUrl ? \"yes\" : \"no\"}`,\n `project info request: ${report.apiCheck.status}`,\n `request detail: ${report.apiCheck.message}`,\n ]),\n ];\n\n if (report.nestedSearch.performed) {\n const candidateLines =\n report.nestedSearch.candidates.length > 0\n ? report.nestedSearch.candidates.map((candidate) => {\n const parts = [\n candidate.primeUiPath,\n `project root: ${candidate.projectRoot}`,\n `config: ${renderConfigStatus(candidate.configStatus)}`,\n ];\n if (candidate.targetProjectPath) {\n parts.push(`targetProjectPath: ${candidate.targetProjectPath}`);\n }\n return parts.join(\"; \");\n })\n : [\"none found\"];\n\n sections.splice(\n sections.length - 2,\n 0,\n \"\",\n formatSection(\"Nested PrimeUI Candidates\", [\n `search root: ${renderValue(report.nestedSearch.rootPath, \"unresolved\")}`,\n ...candidateLines,\n ]),\n );\n }\n\n sections.push(\"\");\n if (report.hints.length === 0) {\n sections.push(\"Hints\\n- none\");\n } else {\n sections.push(\n [\n \"Hints\",\n ...report.hints.map((hint, index) => `${index + 1}. ${hint}`),\n ].join(\"\\n\"),\n );\n }\n\n return sections.join(\"\\n\");\n}\n","import type { HealthUpdateCheckResult } from \"./index.js\";\n\ntype NpmPackageMetadata = {\n version?: string;\n};\n\nfunction parseVersion(input: string): {\n parts: number[];\n prerelease?: string;\n} {\n const [coreVersion, prerelease] = input.split(\"-\", 2);\n return {\n parts: coreVersion.split(\".\").map((segment) => {\n const parsed = Number.parseInt(segment, 10);\n return Number.isFinite(parsed) ? parsed : 0;\n }),\n prerelease,\n };\n}\n\nfunction compareVersions(left: string, right: string): number {\n const leftVersion = parseVersion(left);\n const rightVersion = parseVersion(right);\n const length = Math.max(leftVersion.parts.length, rightVersion.parts.length);\n\n for (let index = 0; index < length; index += 1) {\n const leftPart = leftVersion.parts[index] ?? 0;\n const rightPart = rightVersion.parts[index] ?? 0;\n if (leftPart !== rightPart) {\n return leftPart > rightPart ? 1 : -1;\n }\n }\n\n if (!leftVersion.prerelease && !rightVersion.prerelease) {\n return 0;\n }\n if (!leftVersion.prerelease) {\n return 1;\n }\n if (!rightVersion.prerelease) {\n return -1;\n }\n\n return leftVersion.prerelease.localeCompare(rightVersion.prerelease);\n}\n\nexport async function checkLatestPackageVersion(\n packageName: string,\n currentVersion: string,\n): Promise<HealthUpdateCheckResult> {\n const controller = new AbortController();\n const timeoutHandle = setTimeout(() => controller.abort(), 3000);\n\n try {\n const response = await fetch(\n `https://registry.npmjs.org/${encodeURIComponent(packageName)}/latest`,\n {\n signal: controller.signal,\n },\n );\n\n if (!response.ok) {\n return {\n status: \"unavailable\",\n detail: `npm registry request failed with status ${response.status}`,\n };\n }\n\n const payload = (await response.json()) as NpmPackageMetadata;\n const latestVersion = payload.version?.trim();\n if (!latestVersion) {\n return {\n status: \"unavailable\",\n detail: \"npm registry response did not include a latest version\",\n };\n }\n\n const comparison = compareVersions(currentVersion, latestVersion);\n return {\n latestVersion,\n status: comparison < 0 ? \"update-available\" : \"up-to-date\",\n detail:\n comparison > 0\n ? \"installed version is newer than the npm latest tag\"\n : undefined,\n };\n } catch (error) {\n return {\n status: \"unavailable\",\n detail: error instanceof Error ? error.message : String(error),\n };\n } finally {\n clearTimeout(timeoutHandle);\n }\n}\n","import path from \"node:path\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { parsePrimeUiExportManifest } from \"../lib/api-v1-contract.js\";\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 PrimeUiExport,\n PrimeUiExportManifest,\n PrimeUiInspectPageResult,\n PrimeUiProjectInfo,\n} from \"../types.js\";\n\ntype ProjectSyncServiceOptions = {\n projectRoot: string;\n targetProjectRoot: string;\n provider: ProjectDataProvider;\n};\n\nfunction buildManifestPath(exportsRoot: string, exportId: string): string {\n return path.join(exportsRoot, `${exportId}.manifest.json`);\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 = parsePrimeUiExportManifest(\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 return {\n exportId: id,\n projectPath: targetProjectPath,\n manifestPath,\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 _context?: PrimeUiToolContext,\n ): Promise<PrimeUiCopyPageResult> {\n await this.ensureTempLayout();\n\n return copyPageFromExport({\n projectRoot: this.targetProjectRoot,\n exportsRoot: this.exportsRoot,\n originPageSlug,\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 { readFile, readdir, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { parsePrimeUiExportManifest } from \"../lib/api-v1-contract.js\";\nimport { ensureDir } from \"../lib/fs.js\";\nimport { buildImportGraph } from \"../lib/import-graph.js\";\nimport { buildUnifiedDiff } from \"../lib/text-diff.js\";\nimport type {\n PrimeUiCopyConflictReport,\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];\ntype CopyPageServiceInput = {\n projectRoot: string;\n exportsRoot: string;\n originPageSlug: 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\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 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\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 parseManifest(value: unknown): PrimeUiExportManifest {\n try {\n return parsePrimeUiExportManifest(value);\n } catch (error) {\n if (\n error instanceof Error &&\n error.message === \"Export manifest is invalid.\"\n ) {\n throw new Error(\"Invalid export manifest format.\");\n }\n\n throw error;\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 createCopyId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\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\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 targetPagePath = path.join(input.projectRoot, page.pagePath);\n const targetComponentsPath = path.join(\n input.projectRoot,\n page.componentsPath,\n );\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 const conflictReportEntries: PrimeUiCopyConflictReport[\"conflicts\"] = [];\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 = sourceBuffer;\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(targetRelative);\n continue;\n }\n\n if (plannedSourceBuffer.equals(targetBuffer)) {\n identicalFiles.push(targetRelative);\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 conflictReportEntries.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 const sortedAddedDependencies = addedDependencies.sort((a, b) =>\n a.packageName.localeCompare(b.packageName),\n );\n const sortedDependenciesVersionConflicts = dependenciesVersionConflicts.sort(\n (a, b) => a.packageName.localeCompare(b.packageName),\n );\n const sortedConflictReportEntries = conflictReportEntries.sort((a, b) =>\n a.targetPath.localeCompare(b.targetPath),\n );\n\n for (const entry of sortedConflictReportEntries) {\n conflictFiles.push({\n targetPath: entry.targetPath,\n isBinary: entry.isBinary,\n });\n }\n\n const copyId = createCopyId();\n const reportPath = path.join(\n input.exportsRoot,\n `${exportId}.copy-report-${copyId}.json`,\n );\n const report: PrimeUiCopyConflictReport = {\n reportPath,\n generatedAt: new Date().toISOString(),\n exportId,\n originPageSlug: normalizedOriginSlug,\n sourcePagePath: page.pagePath,\n sourceComponentsPath: page.componentsPath,\n conflicts: sortedConflictReportEntries,\n };\n await writeFile(reportPath, `${JSON.stringify(report, null, 2)}\\n`, \"utf-8\");\n\n const hasFileConflicts = conflictFiles.length > 0;\n const hasDependencyVersionConflicts =\n sortedDependenciesVersionConflicts.length > 0;\n const needsReview = hasFileConflicts || hasDependencyVersionConflicts;\n const status: PrimeUiCopyPageResult[\"status\"] = needsReview\n ? \"needs_review\"\n : \"completed\";\n const messageParts: string[] = [];\n if (hasFileConflicts) {\n messageParts.push(\n `Conflicts detected. Manual resolution is required before any follow-up integration steps. Review ${reportPath} for full diffs and resolve conflicts based on the target project behavior, the imported page functionality, and the possibility that MCP may run against third-party projects not generated by PrimeUI.`,\n );\n } else if (hasDependencyVersionConflicts) {\n messageParts.push(\n `Dependency version conflicts detected. Manual resolution is required before any follow-up integration steps. Review ${reportPath} for full local report details, inspect dependenciesVersionConflicts in this response, and resolve versions based on the target project behavior and the imported page functionality.`,\n );\n } else {\n messageParts.push(\n `Copy completed with no file conflicts or dependency version conflicts. Review ${reportPath} for full local details if needed.`,\n );\n }\n if (sortedAddedDependencies.length > 0) {\n messageParts.push(\n \"Missing dependencies were added to package.json but are NOT installed yet. Run dependency installation manually with the package manager used by the target project.\",\n );\n }\n\n return {\n status,\n message: messageParts.join(\" \"),\n reportPath,\n exportId,\n exportPath,\n originPageSlug: normalizedOriginSlug,\n sourcePagePath: page.pagePath,\n sourceComponentsPath: page.componentsPath,\n newFiles,\n identicalFiles,\n conflictFiles,\n addedDependencies: sortedAddedDependencies,\n dependenciesVersionConflicts: sortedDependenciesVersionConflicts,\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","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 {\n resolvePrimeUiApiKey,\n resolvePrimeUiProjectConfig,\n resolvePrimeUiTargetProjectRoot,\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 = resolvePrimeUiTargetProjectRoot(\n projectRoot,\n resolvedProjectConfig.projectConfig,\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 context?: PrimeUiToolContext,\n ) {\n return this.withMutationService(context, (service) =>\n service.copyPage(originPageSlug, context),\n );\n }\n\n async clearTemp(context?: PrimeUiToolContext) {\n return this.withMutationService(context, (service) =>\n service.clearTemp(context),\n );\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 { packageMetadata } from \"./package-metadata.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\nconst ZERO_ARG_PROJECT_ROOT_TOOLS: ReadonlySet<string> = new Set([\n \"get_project_info\",\n \"list_exports\",\n \"create_export\",\n \"clear_temp\",\n] as const);\n\ntype ToolValidationShim = {\n inputSchema?: unknown;\n};\n\ntype McpServerValidationShim = {\n validateToolInput: (\n tool: ToolValidationShim,\n args: unknown,\n toolName: string,\n ) => Promise<unknown>;\n};\n\nfunction serializeToolData(data: unknown): string {\n try {\n return JSON.stringify(data, null, 2);\n } catch {\n return JSON.stringify(\n {\n error: \"Unable to serialize structuredContent for text output.\",\n },\n null,\n 2,\n );\n }\n}\n\nfunction okResult<T>(title: string, data: T): CallToolResult {\n const structuredContent = data as Record<string, unknown>;\n const serializedData = serializeToolData(structuredContent);\n return {\n content: [\n { type: \"text\", text: `${title} completed\\n\\n${serializedData}` },\n ],\n structuredContent,\n };\n}\n\nfunction errorResult(error: unknown): CallToolResult {\n if (error instanceof PrimeUiProjectConfigError) {\n const text = error.hint\n ? `primeui mcp error [${error.code}]: ${error.message}\\nHint: ${error.hint}`\n : `primeui mcp error [${error.code}]: ${error.message}`;\n\n return {\n isError: true,\n content: [{ type: \"text\", text }],\n };\n }\n\n const message = error instanceof Error ? error.message : String(error);\n return {\n isError: true,\n content: [\n { type: \"text\", text: `primeui mcp error [UNKNOWN_ERROR]: ${message}` },\n ],\n };\n}\n\nexport function createPrimeUiMcpServer(source: ProjectSyncSource): McpServer {\n const server = new McpServer(\n {\n name: \"primeui-mcp-server\",\n version: packageMetadata.version,\n },\n {\n instructions: initialInstructions,\n },\n );\n const serverWithValidationShim = server as unknown as McpServerValidationShim;\n const validateToolInput =\n serverWithValidationShim.validateToolInput.bind(server);\n\n serverWithValidationShim.validateToolInput = async (\n tool: ToolValidationShim,\n args: unknown,\n toolName: string,\n ): Promise<unknown> => {\n if (args === undefined && ZERO_ARG_PROJECT_ROOT_TOOLS.has(toolName)) {\n return validateToolInput(tool, {}, toolName);\n }\n\n return validateToolInput(tool, args, toolName);\n };\n\n server.registerTool(\n \"get_project_info\",\n toolGetProjectInfo,\n async (args): Promise<CallToolResult> => {\n const { projectRoot } = args ?? {};\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 (args): Promise<CallToolResult> => {\n const { projectRoot } = args ?? {};\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 (args): Promise<CallToolResult> => {\n const { projectRoot } = args ?? {};\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 (args): Promise<CallToolResult> => {\n const { projectRoot } = args ?? {};\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 projectRoot,\n }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiCopyPageResult = await source.copyPage(\n originPageSlug,\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 exportManifestSchema = z.object({\n success: z\n .boolean()\n .describe(\"True when export processing succeeded for this item.\"),\n message: z.string().describe(\"Export status message for this item.\"),\n files: z\n .array(z.string())\n .describe(\"Authoritative exported file list for this item.\"),\n});\n\nconst exportableSchema = z.object({\n key: z.string().describe(\"Shared exportable key from export manifest.\"),\n isReadyToExport: z\n .boolean()\n .describe(\"True when this shared exportable was eligible for export.\"),\n manifest: exportManifestSchema.describe(\n \"Export manifest for this shared exportable, aligned with page manifest shape.\",\n ),\n});\n\nconst projectExportableSchema = z.object({\n key: z\n .string()\n .describe(\"Stable shared exportable key from PrimeUI project info.\"),\n description: z\n .string()\n .describe(\n \"Agent-oriented summary of what this shared exportable provides.\",\n ),\n isReadyToExport: z\n .boolean()\n .describe(\n \"Best-effort readiness snapshot for whether this shared exportable can be included in export now.\",\n ),\n});\n\nconst exportPageManifestSchema = exportManifestSchema.extend({\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 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 conflictFileSchema = z.object({\n targetPath: z\n .string()\n .describe(\"Relative conflict target path inside user project root.\"),\n isBinary: z\n .boolean()\n .describe(\"True if conflict comparison was treated as binary data.\"),\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 optionalProjectRootInputObjectSchema = z\n .object({\n projectRoot: projectRootInputSchema,\n })\n .describe(\"Optional tool input with project root override.\");\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 + shared exportables\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 - shared exportables list ('export.exportables').\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 plus a lightweight inventory of pages and shared exportables you can reason about before export.\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: optionalProjectRootInputObjectSchema,\n outputSchema: z.object({\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 exportables: z\n .array(projectExportableSchema)\n .describe(\n \"Lightweight inventory of shared exportables (for example logo, cookie banner, announcement banner, theme, image assets). Use description + isReadyToExport to plan imports before create_export.\",\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: z.object({\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: optionalProjectRootInputObjectSchema,\n outputSchema: z.object({\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 shared exportables.\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 shared exportables are available in export.exportables 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: optionalProjectRootInputObjectSchema,\n outputSchema: z.object({\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 exportables: z\n .array(exportableSchema)\n .describe(\n \"Shared exportable manifest. These entries 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- Treat conflicts as normal and expected. If copy_page returns needs_review, stop follow-up integration and resolve manually first.\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: z.object({\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 }),\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\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- Writes full conflict diffs to a local report file in .primeui/temp/exports/[exportId].copy-report-[copyId].json.\n- Reports:\n a) copied new files (relative target paths),\n b) identical existing files (relative target paths),\n c) conflicting files as lightweight metadata (relative target paths + binary flag, no inline 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- If status is needs_review, page import is NOT complete and manual review is required before continuing. This can be caused by file conflicts or dependency version conflicts.\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 },\n outputSchema: z.object({\n status: z\n .enum([\"completed\", \"needs_review\"])\n .describe(\n \"Decision state for next step. needs_review means manual review is required before follow-up integration because of file conflicts or dependency version conflicts.\",\n ),\n message: z\n .string()\n .describe(\n \"Decision-oriented summary that includes resolved reportPath and manual follow-up instructions when needed.\",\n ),\n reportPath: z\n .string()\n .describe(\n \"Absolute path to saved local report with full conflict diffs and details.\",\n ),\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 sourcePagePath: z\n .string()\n .describe(\"Source page path relative to export root.\"),\n sourceComponentsPath: z\n .string()\n .describe(\"Source components directory relative to export root.\"),\n newFiles: z\n .array(z.string())\n .describe(\"Relative target paths for new files copied into user project.\"),\n identicalFiles: z\n .array(z.string())\n .describe(\"Relative target paths for existing byte-identical files.\"),\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: optionalProjectRootInputObjectSchema,\n outputSchema: z.object({\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","path","stat","path","path","z","path","z","path","path","stat","path","stat","path","mapConfigStatus","stat","path","path","readFile","readFile","readdir","stat","writeFile","path","readFile","stat","path","i","j","path","readFile","fileExists","stat","readdir","writeFile","path","readFile","z"]}
1
+ {"version":3,"sources":["../src/service.ts","../src/cli.ts","../src/package-metadata.ts","../src/health/run-health-check.ts","../src/lib/project-link-config.ts","../src/sources/api-provider.ts","../src/lib/api-v1-contract.ts","../src/lib/fs.ts","../src/health/hints.ts","../src/health/nested-primeui-search.ts","../src/health/report.ts","../src/health/update-check.ts","../src/services/project-sync-service.ts","../src/services/page-copy-service.ts","../src/lib/import-graph.ts","../src/lib/text-diff.ts","../src/services/copy-service-shared.ts","../src/services/runtime-guidance.ts","../src/services/page-inspect-report.ts","../src/services/exportable-copy-service.ts","../src/services/component-copy-service.ts","../src/runtime.ts","../src/server.ts","../src/instructions.ts"],"sourcesContent":["import { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\n\nimport { runCli } from \"./cli.js\";\nimport { runHealthCheck } from \"./health/index.js\";\nimport { LazyProjectSyncSource } from \"./runtime.js\";\nimport { createPrimeUiMcpServer } from \"./server.js\";\n\nasync function startPrimeUiMcpServer(): 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\nasync function main(): Promise<void> {\n const exitCode = await runCli(process.argv.slice(2), {\n stdout: process.stdout,\n stderr: process.stderr,\n startServer: startPrimeUiMcpServer,\n runHealthCheck: ({ projectRoot }) =>\n runHealthCheck({\n projectRoot,\n stdout: process.stdout,\n env: process.env,\n cwd: process.cwd(),\n }),\n });\n\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\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 type { PackageMetadata } from \"./package-metadata.js\";\nimport { packageMetadata } from \"./package-metadata.js\";\n\nexport type CliParseResult =\n | {\n kind: \"start-server\";\n }\n | {\n kind: \"print-help\";\n }\n | {\n kind: \"print-version\";\n }\n | {\n kind: \"run-health-check\";\n projectRoot?: string;\n }\n | {\n kind: \"error\";\n reason: \"unknown-argument\" | \"invalid-arguments\" | \"invalid-health-path\";\n args: string[];\n };\n\ntype WritableLike = {\n write: (chunk: string) => boolean | void;\n};\n\nexport type RunCliDependencies = {\n stdout: WritableLike;\n stderr: WritableLike;\n startServer: () => Promise<void>;\n runHealthCheck: (input: { projectRoot?: string }) => Promise<number>;\n metadata?: PackageMetadata;\n};\n\nfunction buildCliCommand(metadata: PackageMetadata): string {\n return `npx ${metadata.name}@latest`;\n}\n\nexport function formatUsageText(\n metadata: PackageMetadata = packageMetadata,\n): string {\n const command = buildCliCommand(metadata);\n return [\n \"Usage:\",\n ` ${command}`,\n ` ${command} --help`,\n ` ${command} --version`,\n ` ${command} --health`,\n ` ${command} --health /absolute/project/path`,\n ].join(\"\\n\");\n}\n\nexport function formatHelpText(\n metadata: PackageMetadata = packageMetadata,\n): string {\n return [\n \"PrimeUI MCP\",\n \"MCP stdio server for importing PrimeUI pages into your local project.\",\n \"\",\n formatUsageText(metadata),\n \"\",\n \"Options:\",\n \" -h, --help Show this help message and exit.\",\n \" -v, --version Show package version and exit.\",\n \" --health Run runtime diagnostics without starting the MCP server.\",\n \"\",\n \"Behavior:\",\n \" Running without arguments starts the PrimeUI MCP stdio server.\",\n \" This mode is intended to be launched by an MCP-compatible client.\",\n \" `--health` prints runtime diagnostics and exits.\",\n \"\",\n \"Configuration:\",\n \" PRIMEUI_API_KEY PrimeUI API key. Falls back to .primeui/project.json.\",\n \" PRIMEUI_API_BASE_URL Override PrimeUI API base URL for local development.\",\n \" PRIMEUI_PROJECT_ROOT Override project root used to resolve .primeui/project.json.\",\n \"\",\n \"Project config:\",\n \" .primeui/project.json must include projectId and apiKey.\",\n \" targetProjectPath is required for file-oriented import/export flows.\",\n \" targetProjectPath is optional for the additional atomic external API tools.\",\n ].join(\"\\n\");\n}\n\nexport function formatInvalidHealthPathError(\n projectRoot: string,\n metadata: PackageMetadata = packageMetadata,\n): string {\n return [\n `Invalid --health project path: ${projectRoot}`,\n \"\",\n \"The optional `--health` project path must be an absolute path.\",\n \"\",\n formatUsageText(metadata),\n ].join(\"\\n\");\n}\n\nexport function formatUnknownArgError(\n arg: string,\n metadata: PackageMetadata = packageMetadata,\n): string {\n return [`Unknown argument: ${arg}`, \"\", formatUsageText(metadata)].join(\"\\n\");\n}\n\nexport function formatInvalidArgsError(\n args: string[],\n metadata: PackageMetadata = packageMetadata,\n): string {\n return [\n `Invalid arguments: ${args.join(\" \")}`,\n \"\",\n formatUsageText(metadata),\n ].join(\"\\n\");\n}\n\nexport function parseCliArgs(argv: string[]): CliParseResult {\n if (argv.length === 0) {\n return {\n kind: \"start-server\",\n };\n }\n\n const [arg, maybeProjectRoot] = argv;\n if (arg === \"--health\") {\n if (argv.length === 1) {\n return {\n kind: \"run-health-check\",\n };\n }\n\n if (argv.length !== 2) {\n return {\n kind: \"error\",\n reason: \"invalid-arguments\",\n args: argv,\n };\n }\n\n if (\n maybeProjectRoot === \"--help\" ||\n maybeProjectRoot === \"-h\" ||\n maybeProjectRoot === \"--version\" ||\n maybeProjectRoot === \"-v\"\n ) {\n return {\n kind: \"error\",\n reason: \"invalid-arguments\",\n args: argv,\n };\n }\n\n if (!path.isAbsolute(maybeProjectRoot ?? \"\")) {\n return {\n kind: \"error\",\n reason: \"invalid-health-path\",\n args: argv,\n };\n }\n\n return {\n kind: \"run-health-check\",\n projectRoot: maybeProjectRoot,\n };\n }\n\n if (argv.length !== 1) {\n return {\n kind: \"error\",\n reason: \"invalid-arguments\",\n args: argv,\n };\n }\n\n if (arg === \"--help\" || arg === \"-h\") {\n return {\n kind: \"print-help\",\n };\n }\n\n if (arg === \"--version\" || arg === \"-v\") {\n return {\n kind: \"print-version\",\n };\n }\n\n return {\n kind: \"error\",\n reason: \"unknown-argument\",\n args: argv,\n };\n}\n\nfunction writeLine(stream: WritableLike, text: string): void {\n stream.write(`${text}\\n`);\n}\n\nexport async function runCli(\n argv: string[],\n dependencies: RunCliDependencies,\n): Promise<number> {\n const metadata = dependencies.metadata ?? packageMetadata;\n const parsed = parseCliArgs(argv);\n\n switch (parsed.kind) {\n case \"start-server\":\n await dependencies.startServer();\n return 0;\n case \"run-health-check\":\n return dependencies.runHealthCheck({\n projectRoot: parsed.projectRoot,\n });\n case \"print-help\":\n writeLine(dependencies.stdout, formatHelpText(metadata));\n return 0;\n case \"print-version\":\n writeLine(dependencies.stdout, metadata.version);\n return 0;\n case \"error\":\n writeLine(\n dependencies.stderr,\n parsed.reason === \"unknown-argument\"\n ? formatUnknownArgError(parsed.args[0] ?? \"\", metadata)\n : parsed.reason === \"invalid-health-path\"\n ? formatInvalidHealthPathError(parsed.args[1] ?? \"\", metadata)\n : formatInvalidArgsError(parsed.args, metadata),\n );\n return 1;\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { z } from \"zod\";\n\nconst packageMetadataSchema = z.object({\n name: z.string().trim().min(1),\n version: z.string().trim().min(1),\n description: z.string().trim().min(1),\n});\n\nexport type PackageMetadata = z.infer<typeof packageMetadataSchema>;\n\nfunction loadPackageMetadata(): PackageMetadata {\n const currentFilePath = fileURLToPath(import.meta.url);\n const currentDir = path.dirname(currentFilePath);\n const packageJsonPath = path.resolve(currentDir, \"../package.json\");\n\n let rawPackageJson = \"\";\n try {\n rawPackageJson = readFileSync(packageJsonPath, \"utf-8\");\n } catch (error) {\n throw new Error(\n `[primeui-mcp] failed to read package.json at ${packageJsonPath}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n\n let parsedPackageJson: unknown;\n try {\n parsedPackageJson = JSON.parse(rawPackageJson) as unknown;\n } catch (error) {\n throw new Error(\n `[primeui-mcp] invalid package.json at ${packageJsonPath}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n\n const parsed = packageMetadataSchema.safeParse(parsedPackageJson);\n if (!parsed.success) {\n const details = parsed.error.issues\n .map((issue) => `${issue.path.join(\".\") || \"<root>\"}: ${issue.message}`)\n .join(\"; \");\n throw new Error(\n `[primeui-mcp] invalid package metadata in ${packageJsonPath}: ${details}`,\n );\n }\n\n return parsed.data;\n}\n\nexport const packageMetadata = loadPackageMetadata();\n","import { stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n PRIMEUI_PROJECT_DIR_NAME,\n PrimeUiProjectConfigError,\n resolvePrimeUiApiKeyDetails,\n resolvePrimeUiProjectConfig,\n resolvePrimeUiTargetProjectRoot,\n} from \"../lib/project-link-config.js\";\nimport { packageMetadata } from \"../package-metadata.js\";\nimport {\n ApiProjectDataProvider,\n DEFAULT_API_BASE_URL,\n buildPrimeUiApiUrl,\n normalizePrimeUiApiRoot,\n} from \"../sources/api-provider.js\";\nimport { buildHealthHints } from \"./hints.js\";\nimport type {\n HealthApiKeyComparison,\n HealthProjectConfigStatus,\n HealthProjectRootComparison,\n HealthReportData,\n RunHealthCheckOptions,\n} from \"./index.js\";\nimport { findNestedPrimeUiCandidates } from \"./nested-primeui-search.js\";\nimport { formatHealthReport } from \"./report.js\";\nimport { checkLatestPackageVersion } from \"./update-check.js\";\n\nfunction mapProjectSource(\n source: string | undefined,\n): HealthReportData[\"projectResolution\"][\"effectiveSource\"] {\n switch (source) {\n case \"tool\":\n return \"input\";\n case \"env\":\n return \"env\";\n case \"search\":\n return \"search\";\n default:\n return \"unresolved\";\n }\n}\n\nfunction mapProjectErrorSource(\n source: string | undefined,\n): HealthReportData[\"projectResolution\"][\"errorSource\"] {\n switch (source) {\n case \"tool\":\n return \"input\";\n case \"env\":\n return \"env\";\n case \"search\":\n return \"search\";\n default:\n return undefined;\n }\n}\n\nfunction compareProjectRoots(\n inputPath?: string,\n envPath?: string,\n): HealthProjectRootComparison {\n if (inputPath && envPath) {\n return inputPath === envPath ? \"same\" : \"different\";\n }\n if (inputPath) {\n return \"input-only\";\n }\n if (envPath) {\n return \"env-only\";\n }\n return \"neither\";\n}\n\nfunction compareApiKeys(\n valuesMatch: boolean | undefined,\n envProvided: boolean,\n configProvided: boolean,\n): HealthApiKeyComparison {\n if (envProvided && configProvided) {\n return valuesMatch ? \"same\" : \"different\";\n }\n return \"not-comparable\";\n}\n\nfunction mapConfigStatus(\n error: PrimeUiProjectConfigError | undefined,\n): HealthProjectConfigStatus {\n if (!error) {\n return \"valid\";\n }\n\n switch (error.code) {\n case \"PROJECT_CONFIG_NOT_FOUND\":\n return typeof error.details.expectedConfigPath === \"string\"\n ? \"missing\"\n : \"unresolved\";\n case \"PROJECT_CONFIG_INVALID_JSON\":\n return \"invalid-json\";\n case \"PROJECT_CONFIG_INVALID_FORMAT\":\n return \"invalid-format\";\n case \"PROJECT_CONFIG_READ_FAILED\":\n return \"read-failed\";\n default:\n return \"unresolved\";\n }\n}\n\nasync function directoryExists(targetPath: string): Promise<boolean> {\n try {\n const targetStat = await stat(targetPath);\n return targetStat.isDirectory();\n } catch {\n return false;\n }\n}\n\nfunction classifyApiError(message: string): \"auth\" | \"network\" {\n return /PrimeUI API request failed \\((401|403)\\)/.test(message)\n ? \"auth\"\n : \"network\";\n}\n\nexport async function runHealthCheck(\n options: RunHealthCheckOptions,\n): Promise<number> {\n const metadata = options.metadata ?? packageMetadata;\n const env = options.env ?? process.env;\n const cwd = path.resolve(options.cwd ?? process.cwd());\n const inputProjectRoot = options.projectRoot?.trim()\n ? path.resolve(options.projectRoot.trim())\n : undefined;\n const envProjectRoot = env.PRIMEUI_PROJECT_ROOT?.trim()\n ? path.resolve(env.PRIMEUI_PROJECT_ROOT.trim())\n : undefined;\n\n const versionResult = await (\n options.checkLatestVersion ?? checkLatestPackageVersion\n )(metadata.name, metadata.version);\n\n let resolvedProjectConfig:\n | Awaited<ReturnType<typeof resolvePrimeUiProjectConfig>>\n | undefined;\n let projectConfigError: PrimeUiProjectConfigError | undefined;\n\n try {\n resolvedProjectConfig = await resolvePrimeUiProjectConfig({\n cwd,\n projectRootFromTool: inputProjectRoot,\n projectRootFromEnv: envProjectRoot,\n });\n } catch (error) {\n if (!(error instanceof PrimeUiProjectConfigError)) {\n throw error;\n }\n projectConfigError = error;\n }\n\n const resolvedProjectRoot =\n resolvedProjectConfig?.projectRoot ??\n (typeof projectConfigError?.details.projectRoot === \"string\"\n ? path.resolve(projectConfigError.details.projectRoot)\n : undefined);\n const primeUiDirPath = resolvedProjectRoot\n ? path.join(resolvedProjectRoot, PRIMEUI_PROJECT_DIR_NAME)\n : inputProjectRoot\n ? path.join(inputProjectRoot, PRIMEUI_PROJECT_DIR_NAME)\n : envProjectRoot &&\n mapProjectErrorSource(\n projectConfigError?.details.source as string,\n ) === \"env\"\n ? path.join(envProjectRoot, PRIMEUI_PROJECT_DIR_NAME)\n : undefined;\n const primeUiDirStatus = primeUiDirPath\n ? (await directoryExists(primeUiDirPath))\n ? \"found\"\n : \"missing\"\n : \"unresolved\";\n const configStatus = resolvedProjectConfig\n ? \"valid\"\n : mapConfigStatus(projectConfigError);\n const configPath =\n resolvedProjectConfig?.projectConfigPath ??\n (typeof projectConfigError?.details.expectedConfigPath === \"string\"\n ? path.resolve(projectConfigError.details.expectedConfigPath)\n : primeUiDirPath\n ? path.join(primeUiDirPath, \"project.json\")\n : undefined);\n const nestedSearchPerformed =\n Boolean(inputProjectRoot) && primeUiDirStatus === \"missing\";\n const nestedCandidates = nestedSearchPerformed\n ? await findNestedPrimeUiCandidates(inputProjectRoot!)\n : [];\n\n const apiKeyDetails = resolvePrimeUiApiKeyDetails({\n projectConfig: resolvedProjectConfig?.projectConfig,\n apiKeyFromEnv: env.PRIMEUI_API_KEY,\n });\n const configApiKeyState = resolvedProjectConfig\n ? \"set\"\n : configStatus === \"missing\" || configStatus === \"unresolved\"\n ? \"missing\"\n : \"unknown\";\n\n const apiBaseUrlSource = env.PRIMEUI_API_BASE_URL?.trim() ? \"env\" : \"default\";\n const defaultApiRoot = normalizePrimeUiApiRoot(DEFAULT_API_BASE_URL);\n let apiRoot: string | undefined;\n let projectInfoUrl: string | undefined;\n let apiCheck: HealthReportData[\"apiCheck\"] | undefined;\n\n try {\n apiRoot = normalizePrimeUiApiRoot(env.PRIMEUI_API_BASE_URL);\n projectInfoUrl = buildPrimeUiApiUrl(apiRoot, \"project\");\n } catch (error) {\n apiCheck = {\n status: \"skipped\",\n apiBaseUrlSource,\n nonStandardBaseUrl: Boolean(env.PRIMEUI_API_BASE_URL?.trim()),\n message: error instanceof Error ? error.message : String(error),\n errorKind: \"configuration\",\n };\n }\n\n if (!apiCheck) {\n if (!apiKeyDetails.apiKey) {\n apiCheck = {\n status: \"skipped\",\n apiRoot,\n projectInfoUrl,\n apiBaseUrlSource,\n nonStandardBaseUrl: apiRoot !== defaultApiRoot,\n message:\n \"No usable API key was available, so project info was not requested.\",\n };\n } else {\n const provider =\n options.createProvider?.({\n apiKey: apiKeyDetails.apiKey,\n baseUrl: env.PRIMEUI_API_BASE_URL,\n }) ??\n new ApiProjectDataProvider({\n apiKey: apiKeyDetails.apiKey,\n baseUrl: env.PRIMEUI_API_BASE_URL,\n });\n\n try {\n await provider.getProjectInfo();\n apiCheck = {\n status: \"passed\",\n apiRoot,\n projectInfoUrl,\n apiBaseUrlSource,\n nonStandardBaseUrl: apiRoot !== defaultApiRoot,\n message: \"Project info request succeeded with the current API key.\",\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n apiCheck = {\n status: \"failed\",\n apiRoot,\n projectInfoUrl,\n apiBaseUrlSource,\n nonStandardBaseUrl: apiRoot !== defaultApiRoot,\n message,\n errorKind: classifyApiError(message),\n };\n }\n }\n }\n\n if (!apiCheck) {\n throw new Error(\n \"PrimeUI health check did not produce an API check result.\",\n );\n }\n\n const report: HealthReportData = {\n version: {\n currentVersion: metadata.version,\n latestVersion: versionResult.latestVersion,\n updateStatus: versionResult.status,\n detail: versionResult.detail,\n },\n runtimeContext: {\n cwd,\n inputProjectRoot,\n envProjectRoot,\n envApiBaseUrl: env.PRIMEUI_API_BASE_URL?.trim() || undefined,\n envApiKeySet: Boolean(env.PRIMEUI_API_KEY?.trim()),\n },\n sourceResolution: {\n projectRoot: {\n inputPath: inputProjectRoot,\n envPath: envProjectRoot,\n comparison: compareProjectRoots(inputProjectRoot, envProjectRoot),\n effectiveSource: mapProjectSource(\n resolvedProjectConfig?.source ??\n (projectConfigError?.details.source as string | undefined),\n ),\n },\n apiKey: {\n envState: apiKeyDetails.envProvided ? \"set\" : \"missing\",\n configState: configApiKeyState,\n comparison: compareApiKeys(\n apiKeyDetails.valuesMatch,\n apiKeyDetails.envProvided,\n apiKeyDetails.configProvided,\n ),\n effectiveSource: apiKeyDetails.source,\n },\n },\n projectResolution: {\n resolvedProjectRoot,\n effectiveSource: mapProjectSource(\n resolvedProjectConfig?.source ??\n (projectConfigError?.details.source as string | undefined),\n ),\n errorSource: mapProjectErrorSource(\n projectConfigError?.details.source as string | undefined,\n ),\n primeUiDirPath,\n primeUiDirStatus,\n configPath,\n configStatus,\n targetProjectPath: resolvedProjectConfig?.projectConfig.targetProjectPath,\n targetProjectRoot: resolvedProjectConfig\n ? resolvePrimeUiTargetProjectRoot(\n resolvedProjectConfig.projectRoot,\n resolvedProjectConfig.projectConfig,\n )\n : undefined,\n errorCode: projectConfigError?.code,\n errorMessage: projectConfigError?.message,\n inputProjectRootValidated:\n Boolean(inputProjectRoot) && resolvedProjectConfig?.source === \"tool\",\n },\n nestedSearch: {\n performed: nestedSearchPerformed,\n rootPath: nestedSearchPerformed ? inputProjectRoot : undefined,\n candidates: nestedCandidates,\n },\n apiCheck,\n hints: [],\n };\n\n report.hints = buildHealthHints({\n report,\n connectApiKey:\n nestedSearchPerformed &&\n nestedCandidates.length === 0 &&\n apiCheck.status === \"passed\"\n ? apiKeyDetails.apiKey\n : undefined,\n });\n\n options.stdout.write(`${formatHealthReport(report)}\\n`);\n return 0;\n}\n","import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { z } from \"zod\";\n\nexport const PRIMEUI_PROJECT_DIR_NAME = \".primeui\";\nexport const PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH = `${PRIMEUI_PROJECT_DIR_NAME}/project.json`;\nexport type PrimeUiProjectConfigSource = \"tool\" | \"sticky\" | \"env\" | \"search\";\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 \"Likely MCP project-path bug: when Codex VSCode runs MCP from global config, server can start in HOME without project context. Fix: set tool input parameter `projectRoot` to the ABSOLUTE path of the current project root (for example: /path/to/current/project).\";\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 .optional(),\n })\n .passthrough();\n\nconst primeUiProjectConfigWithTargetPathSchema =\n primeUiProjectConfigSchema.superRefine((value, ctx) => {\n if (!value.targetProjectPath) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"targetProjectPath\"],\n message: \"Required\",\n });\n }\n });\n\nexport type PrimeUiProjectConfig = z.infer<typeof primeUiProjectConfigSchema>;\n\nexport type ResolvedPrimeUiProjectConfig = {\n projectRoot: string;\n projectConfigPath: string;\n projectConfig: PrimeUiProjectConfig;\n source: PrimeUiProjectConfigSource;\n};\n\nexport type ResolvedPrimeUiApiKey = {\n apiKey?: string;\n source: \"env\" | \"config\" | \"missing\";\n envProvided: boolean;\n configProvided: boolean;\n valuesMatch?: boolean;\n};\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 options: {\n requireTargetProjectPath?: boolean;\n } = {\n requireTargetProjectPath: true,\n },\n): Promise<PrimeUiProjectConfig> {\n const requireTargetProjectPath = options.requireTargetProjectPath !== false;\n\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 = (\n requireTargetProjectPath\n ? primeUiProjectConfigWithTargetPathSchema\n : primeUiProjectConfigSchema\n ).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\nfunction withConfigSourceDetails(\n error: unknown,\n context: {\n source: PrimeUiProjectConfigSource;\n projectRoot: string;\n projectConfigPath: string;\n },\n): never {\n if (!(error instanceof PrimeUiProjectConfigError)) {\n throw error;\n }\n\n throw new PrimeUiProjectConfigError({\n code: error.code,\n message: error.message,\n hint: error.hint,\n details: {\n ...error.details,\n source: context.source,\n projectRoot: context.projectRoot,\n expectedConfigPath: context.projectConfigPath,\n },\n });\n}\n\nasync function loadResolvedPrimeUiProjectConfig(\n context: {\n source: PrimeUiProjectConfigSource;\n projectRoot: string;\n projectConfigPath: string;\n },\n options: {\n requireTargetProjectPath?: boolean;\n },\n): Promise<ResolvedPrimeUiProjectConfig> {\n try {\n const projectConfig = await readPrimeUiProjectConfig(\n context.projectConfigPath,\n {\n requireTargetProjectPath: options.requireTargetProjectPath,\n },\n );\n return {\n projectRoot: context.projectRoot,\n projectConfigPath: context.projectConfigPath,\n projectConfig,\n source: context.source,\n };\n } catch (error) {\n withConfigSourceDetails(error, context);\n }\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 configOptions: {\n requireTargetProjectPath?: boolean;\n } = {\n requireTargetProjectPath: true,\n },\n): Promise<ResolvedPrimeUiProjectConfig> {\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 return loadResolvedPrimeUiProjectConfig(\n {\n source: \"tool\",\n projectRoot: resolvedToolRoot,\n projectConfigPath: toolProjectConfigPath,\n },\n configOptions,\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 return loadResolvedPrimeUiProjectConfig(\n {\n source: \"sticky\",\n projectRoot: resolvedStickyRoot,\n projectConfigPath: stickyProjectConfigPath,\n },\n configOptions,\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 return loadResolvedPrimeUiProjectConfig(\n {\n source: \"env\",\n projectRoot: resolvedEnvRoot,\n projectConfigPath: envProjectConfigPath,\n },\n configOptions,\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. MCP cwd is \"${options.cwd}\". Searched from: ${searchRoots.join(\n \", \",\n )}. This usually means MCP did not receive the current project path.`,\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 return loadResolvedPrimeUiProjectConfig(\n {\n source: \"search\",\n projectRoot,\n projectConfigPath,\n },\n configOptions,\n );\n}\n\ntype ResolvePrimeUiApiKeyOptions = {\n projectConfig?: PrimeUiProjectConfig;\n apiKeyFromEnv?: string;\n};\n\nexport function resolvePrimeUiApiKeyDetails(\n options: ResolvePrimeUiApiKeyOptions,\n): ResolvedPrimeUiApiKey {\n const envApiKey = options.apiKeyFromEnv?.trim();\n const configApiKey = options.projectConfig?.apiKey.trim();\n const envProvided = Boolean(envApiKey);\n const configProvided = Boolean(configApiKey);\n\n return {\n apiKey: envApiKey ?? configApiKey,\n source: envProvided ? \"env\" : configProvided ? \"config\" : \"missing\",\n envProvided,\n configProvided,\n valuesMatch:\n envProvided && configProvided ? envApiKey === configApiKey : undefined,\n };\n}\n\nexport function resolvePrimeUiTargetProjectRoot(\n projectRoot: string,\n projectConfig: PrimeUiProjectConfig,\n): string {\n if (!projectConfig.targetProjectPath) {\n throw new PrimeUiProjectConfigError({\n code: \"PROJECT_CONFIG_INVALID_FORMAT\",\n message: `[primeui-mcp] invalid ${PRIMEUI_PROJECT_CONFIG_RELATIVE_PATH} format: targetProjectPath: Required`,\n details: {\n projectRoot,\n },\n hint: buildProjectRootHint(),\n });\n }\n\n return path.resolve(projectRoot, projectConfig.targetProjectPath);\n}\n\nexport async function resolvePrimeUiApiKey(\n options: ResolvePrimeUiApiKeyOptions,\n): Promise<string> {\n const resolved = resolvePrimeUiApiKeyDetails(options);\n if (resolved.apiKey) {\n return resolved.apiKey;\n }\n\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","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 {\n primeUiCreateExportResponseSchema,\n primeUiExportsResponseSchema,\n primeUiIssueReportSubmitResponseSchema,\n primeUiProjectApiPagesResponseSchema,\n primeUiProjectApiVariantResponseSchema,\n primeUiProjectApiVariantSummaryResponseSchema,\n primeUiProjectApiVariantsResponseSchema,\n primeUiProjectDescriptionSchema,\n primeUiProjectInfoSchema,\n primeUiProjectPageDetailsSchema,\n} from \"../lib/api-v1-contract.js\";\nimport { ensureDir } from \"../lib/fs.js\";\nimport type {\n PrimeUiCreateProjectApiPageInput,\n PrimeUiCreateProjectApiVariantInput,\n PrimeUiCreateExportResult,\n PrimeUiExport,\n PrimeUiIssueReportSubmitResult,\n PrimeUiProjectApiPagesResult,\n PrimeUiProjectApiVariantResult,\n PrimeUiProjectApiVariantSummaryResult,\n PrimeUiProjectApiVariantsResult,\n PrimeUiProjectDescriptionResult,\n PrimeUiProjectPageDetailsResult,\n PrimeUiProjectInfo,\n PrimeUiSubmitIssueReportInput,\n} from \"../types.js\";\nimport type { ProjectDataProvider } from \"./project-data-provider.js\";\n\ntype ApiProjectDataProviderOptions = {\n apiKey?: string;\n baseUrl?: string;\n};\n\nexport const 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];\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\nexport const normalizePrimeUiApiRoot = (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\nexport const buildPrimeUiApiUrl = (apiRoot: string, endpoint: string): string =>\n new URL(endpoint, apiRoot).toString();\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 = normalizePrimeUiApiRoot(options.baseUrl);\n }\n\n async getProjectInfo(): Promise<PrimeUiProjectInfo> {\n return this.requestJson(\"project\", primeUiProjectInfoSchema);\n }\n\n async getProjectDescription(): Promise<PrimeUiProjectDescriptionResult> {\n return this.requestJson(\n \"project/description\",\n primeUiProjectDescriptionSchema,\n );\n }\n\n async upsertProjectDescription(\n projectDescription: string,\n ): Promise<PrimeUiProjectDescriptionResult> {\n return this.requestJson(\n \"project/description\",\n primeUiProjectDescriptionSchema,\n this.buildJsonRequestInit({\n projectDescription,\n }),\n );\n }\n\n async listProjectPages(): Promise<PrimeUiProjectApiPagesResult> {\n return this.requestJson(\n \"project/pages\",\n primeUiProjectApiPagesResponseSchema,\n );\n }\n\n async getProjectPage(pageId: string): Promise<PrimeUiProjectApiPagesResult> {\n return this.requestJson(\n `project/pages/${encodeURIComponent(pageId)}`,\n primeUiProjectApiPagesResponseSchema,\n );\n }\n\n async createProjectPage(\n input: PrimeUiCreateProjectApiPageInput,\n ): Promise<PrimeUiProjectApiPagesResult> {\n return this.requestJson(\n \"project/pages\",\n primeUiProjectApiPagesResponseSchema,\n this.buildJsonRequestInit(input),\n );\n }\n\n async listProjectPageVariants(\n pageId: string,\n ): Promise<PrimeUiProjectApiVariantsResult> {\n return this.requestJson(\n `project/pages/${encodeURIComponent(pageId)}/variants`,\n primeUiProjectApiVariantsResponseSchema,\n );\n }\n\n async getProjectPageVariant(\n pageId: string,\n variantId: string,\n ): Promise<PrimeUiProjectApiVariantResult> {\n return this.requestJson(\n `project/pages/${encodeURIComponent(pageId)}/variants/${encodeURIComponent(variantId)}`,\n primeUiProjectApiVariantResponseSchema,\n );\n }\n\n async createProjectPageVariant(\n pageId: string,\n input: PrimeUiCreateProjectApiVariantInput,\n ): Promise<PrimeUiProjectApiVariantSummaryResult> {\n return this.requestJson(\n `project/pages/${encodeURIComponent(pageId)}/variants`,\n primeUiProjectApiVariantSummaryResponseSchema,\n this.buildJsonRequestInit(input),\n );\n }\n\n async setProjectPageActiveVariant(\n pageId: string,\n variantId: string,\n ): Promise<PrimeUiProjectApiPagesResult> {\n return this.requestJson(\n `project/pages/${encodeURIComponent(pageId)}/active-variant`,\n primeUiProjectApiPagesResponseSchema,\n this.buildJsonRequestInit({\n variantId,\n }),\n );\n }\n\n async submitIssueReport(\n input: PrimeUiSubmitIssueReportInput,\n ): Promise<PrimeUiIssueReportSubmitResult> {\n return this.requestJson(\n \"issue-reports\",\n primeUiIssueReportSubmitResponseSchema,\n this.buildJsonRequestInit(input),\n );\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 primeUiProjectPageDetailsSchema,\n );\n }\n\n async listExports(): Promise<PrimeUiExport[]> {\n const response = await this.requestJson(\n \"project/exports\",\n primeUiExportsResponseSchema,\n );\n return response.exports;\n }\n\n async createExport(): Promise<PrimeUiCreateExportResult> {\n return this.requestJson(\n \"project/exports\",\n primeUiCreateExportResponseSchema,\n {\n method: \"POST\",\n },\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 buildPrimeUiApiUrl(this.apiRoot, endpoint);\n }\n\n private buildJsonRequestInit(payload: unknown): RequestInit {\n return {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n };\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 { z } from \"zod\";\n\nimport type {\n PrimeUiIssueReportSubmitResult,\n PrimeUiPageGenerationType,\n PrimeUiProjectApiPageResource,\n PrimeUiProjectApiPagesResult,\n PrimeUiProjectApiVariantResource,\n PrimeUiProjectApiVariantResult,\n PrimeUiProjectApiVariantSummaryResult,\n PrimeUiProjectApiVariantsResult,\n PrimeUiProjectApiVariantSummary,\n PrimeUiProjectApiWireframeStatus,\n PrimeUiCreateExportResult,\n PrimeUiExportManifest,\n PrimeUiExportStatus,\n PrimeUiExportedExportable,\n PrimeUiProjectDescriptionResult,\n PrimeUiProjectExportable,\n PrimeUiProjectInfo,\n PrimeUiProjectPage,\n PrimeUiProjectPageComponent,\n PrimeUiProjectPageDetailsResult,\n} from \"../types.js\";\n\nexport const primeUiExportStatusSchema: z.ZodType<PrimeUiExportStatus> = z.enum(\n [\"in_progress\", \"completed\", \"failed\"],\n);\n\nexport const primeUiProjectPageObjectSchema = 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});\n\nexport const primeUiProjectPageSchema: z.ZodType<PrimeUiProjectPage> =\n primeUiProjectPageObjectSchema;\n\nexport const primeUiProjectExportableSchema: z.ZodType<PrimeUiProjectExportable> =\n z.object({\n key: z.string(),\n description: z.string(),\n isReadyToExport: z.boolean(),\n });\n\nexport const primeUiExportSummarySchema = z.object({\n total: z.number(),\n successful: z.number(),\n failed: z.number(),\n});\n\nexport const primeUiExportableManifestSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n files: z.array(z.string()),\n});\n\nexport const primeUiExportedExportableSchema: z.ZodType<PrimeUiExportedExportable> =\n z.object({\n key: z.string(),\n isReadyToExport: z.boolean(),\n manifest: primeUiExportableManifestSchema,\n });\n\nexport const primeUiExportPageManifestSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n files: z.array(z.string()),\n});\n\nexport const primeUiExportPageSchema = 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: primeUiExportPageManifestSchema,\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 */\nexport const primeUiProjectInfoSchema: z.ZodType<PrimeUiProjectInfo> = z.object(\n {\n projectId: z.string(),\n projectName: z.string(),\n metadata: z.record(z.unknown()),\n exportables: z.array(primeUiProjectExportableSchema),\n pages: z.array(primeUiProjectPageSchema),\n },\n);\n\nexport const primeUiProjectPageComponentSchema: 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 */\nexport const primeUiProjectPageDetailsSchema: z.ZodType<PrimeUiProjectPageDetailsResult> =\n z.object({\n page: primeUiProjectPageObjectSchema.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(primeUiProjectPageComponentSchema).nullable(),\n });\n\nexport const primeUiProjectDescriptionSchema: z.ZodType<PrimeUiProjectDescriptionResult> =\n z.object({\n projectDescription: z.string(),\n });\n\nexport const primeUiPageGenerationTypeSchema: z.ZodType<PrimeUiPageGenerationType> =\n z.enum([\n \"landing\",\n \"pricing\",\n \"blogIndex\",\n \"blogPost\",\n \"contact-us\",\n \"docs\",\n \"legal\",\n ]);\n\nexport const primeUiProjectApiWireframeStatusSchema: z.ZodType<PrimeUiProjectApiWireframeStatus> =\n z.enum([\"pending\", \"generating\", \"ready\", \"error\"]);\n\nexport const primeUiProjectApiVariantSummarySchema: z.ZodType<PrimeUiProjectApiVariantSummary> =\n z.object({\n id: z.string(),\n name: z.string(),\n isActive: z.boolean(),\n isGenerating: z.boolean(),\n });\n\nexport const primeUiProjectApiPageResourceSchema: z.ZodType<PrimeUiProjectApiPageResource> =\n z.object({\n id: z.string(),\n title: z.string(),\n slug: z.string(),\n pageType: primeUiPageGenerationTypeSchema,\n isReadyToExport: z.boolean(),\n wireframeStatus: primeUiProjectApiWireframeStatusSchema,\n variants: z.array(primeUiProjectApiVariantSummarySchema),\n });\n\n/**\n * Consumer-side runtime contract for GET /api/v1/project/pages and\n * GET /api/v1/project/pages/:pageId, and for POST responses that return pages.\n * Producer source of truth:\n * - apps/studio/src/app/api/v1/project/pages/route.ts\n * - apps/studio/src/app/api/v1/project/pages/[pageId]/route.ts\n * - apps/studio/src/app/api/v1/project/pages/[pageId]/active-variant/route.ts\n */\nexport const primeUiProjectApiPagesResponseSchema: z.ZodType<PrimeUiProjectApiPagesResult> =\n z.object({\n pages: z.array(primeUiProjectApiPageResourceSchema),\n });\n\n/**\n * Consumer-side runtime contract for GET /api/v1/project/pages/:pageId/variants.\n * Producer source of truth:\n * apps/studio/src/app/api/v1/project/pages/[pageId]/variants/route.ts\n */\nexport const primeUiProjectApiVariantsResponseSchema: z.ZodType<PrimeUiProjectApiVariantsResult> =\n z.object({\n variants: z.array(primeUiProjectApiVariantSummarySchema),\n });\n\nexport const primeUiProjectApiVariantResourceSchema: z.ZodType<PrimeUiProjectApiVariantResource> =\n z.object({\n id: z.string(),\n name: z.string(),\n isActive: z.boolean(),\n isGenerating: z.boolean(),\n components: z.array(primeUiProjectPageComponentSchema),\n });\n\n/**\n * Consumer-side runtime contract for POST /api/v1/project/pages/:pageId/variants.\n * Producer source of truth:\n * apps/studio/src/app/api/v1/project/pages/[pageId]/variants/route.ts\n */\nexport const primeUiProjectApiVariantSummaryResponseSchema: z.ZodType<PrimeUiProjectApiVariantSummaryResult> =\n z.object({\n variant: primeUiProjectApiVariantSummarySchema,\n });\n\n/**\n * Consumer-side runtime contract for GET /api/v1/project/pages/:pageId/variants/:variantId.\n * Producer source of truth:\n * apps/studio/src/app/api/v1/project/pages/[pageId]/variants/[variantId]/route.ts\n */\nexport const primeUiProjectApiVariantResponseSchema: z.ZodType<PrimeUiProjectApiVariantResult> =\n z.object({\n variant: primeUiProjectApiVariantResourceSchema,\n });\n\n/**\n * Consumer-side runtime contract for POST /api/v1/issue-reports.\n * Producer source of truth: apps/studio/src/app/api/v1/issue-reports/route.ts\n */\nexport const primeUiIssueReportSubmitResponseSchema: z.ZodType<PrimeUiIssueReportSubmitResult> =\n z.object({\n accepted: z.literal(true),\n ticketId: z.string(),\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 */\nexport const primeUiExportsResponseSchema = z.object({\n exports: z.array(\n z.object({\n id: z.string(),\n status: primeUiExportStatusSchema,\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 */\nexport const primeUiCreateExportResponseSchema: z.ZodType<PrimeUiCreateExportResult> =\n z.object({\n export: z.object({\n id: z.string(),\n status: primeUiExportStatusSchema,\n createdAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }).nullable(),\n summary: primeUiExportSummarySchema,\n exportables: z.array(primeUiExportedExportableSchema),\n }),\n pages: z.array(primeUiExportPageSchema),\n });\n\nexport const primeUiExportManifestSchema: z.ZodType<PrimeUiExportManifest> =\n primeUiCreateExportResponseSchema;\n\nexport function parsePrimeUiExportManifest(\n value: unknown,\n): 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 if (!maybe.export || typeof maybe.export !== \"object\") {\n throw new Error(\"Export manifest export payload is invalid.\");\n }\n\n const parsed = primeUiExportManifestSchema.safeParse(value);\n if (!parsed.success) {\n const hasPageIssue = parsed.error.issues.some(\n (issue) => issue.path[0] === \"pages\",\n );\n\n throw new Error(\n hasPageIssue\n ? \"Export manifest pages payload is invalid.\"\n : \"Export manifest does not match expected schema.\",\n );\n }\n\n return parsed.data;\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 type { HealthReportData } from \"./index.js\";\n\ntype BuildHealthHintsOptions = {\n report: HealthReportData;\n connectApiKey?: string;\n};\n\nfunction addHint(target: string[], seen: Set<string>, hint: string): void {\n if (!seen.has(hint)) {\n seen.add(hint);\n target.push(hint);\n }\n}\n\nexport function buildHealthHints(options: BuildHealthHintsOptions): string[] {\n const { report, connectApiKey } = options;\n const hints: string[] = [];\n const seen = new Set<string>();\n const validNestedRoots = report.nestedSearch.candidates\n .filter((candidate) => candidate.configStatus === \"valid\")\n .map((candidate) => candidate.projectRoot);\n\n if (\n !report.runtimeContext.inputProjectRoot &&\n report.projectResolution.configStatus === \"unresolved\" &&\n report.projectResolution.errorSource === \"search\"\n ) {\n addHint(\n hints,\n seen,\n \"Config was not found from the current working directory. Rerun `--health /absolute/project/path`, pass the same absolute path via MCP tool `projectRoot`, or set `PRIMEUI_PROJECT_ROOT` if your MCP client starts outside the project.\",\n );\n }\n\n if (\n report.runtimeContext.inputProjectRoot &&\n report.projectResolution.primeUiDirStatus === \"missing\"\n ) {\n if (report.nestedSearch.candidates.length > 0) {\n addHint(\n hints,\n seen,\n validNestedRoots.length > 0\n ? `No direct \\`.primeui\\` directory was found under the provided path. Rerun health with one of the exact nested project roots that passed config validation, for example: ${validNestedRoots.join(\", \")}.`\n : \"No direct `.primeui` directory was found under the provided path. Nested `.primeui` directories were found below it, so rerun health with the exact intended project root before using MCP tools.\",\n );\n\n if (validNestedRoots.length > 0) {\n addHint(\n hints,\n seen,\n `When calling MCP tools, pass \\`projectRoot\\` only for a candidate whose nested health check passes, for example: ${validNestedRoots[0]}.`,\n );\n }\n } else {\n const connectCommand = `npx @primeuicom/cli ${\n connectApiKey ?? \"<api-key>\"\n } connect`;\n addHint(\n hints,\n seen,\n `No \\`.primeui\\` directory was found under the provided path. From the intended target folder, run \\`${connectCommand}\\` to connect the project to PrimeUI.`,\n );\n if (!connectApiKey) {\n addHint(\n hints,\n seen,\n \"If you do not already have a valid PrimeUI API key, get it from the appropriate PrimeUI project on `primeui.com`.\",\n );\n }\n }\n }\n\n if (\n report.projectResolution.primeUiDirStatus === \"found\" &&\n report.projectResolution.configStatus === \"missing\"\n ) {\n addHint(\n hints,\n seen,\n \"`.primeui/project.json` is missing. It was likely corrupted or deleted; restore it by reconnecting the project or by making a fresh export via the PrimeUI CLI tool.\",\n );\n }\n\n if (\n report.projectResolution.primeUiDirStatus === \"found\" &&\n (report.projectResolution.configStatus === \"invalid-json\" ||\n report.projectResolution.configStatus === \"invalid-format\" ||\n report.projectResolution.configStatus === \"read-failed\")\n ) {\n addHint(\n hints,\n seen,\n \"`.primeui/project.json` looks corrupted or incomplete. Restore it by reconnecting the project or by making a fresh export via the PrimeUI CLI tool.\",\n );\n }\n\n if (\n report.runtimeContext.envProjectRoot &&\n report.sourceResolution.projectRoot.comparison === \"different\"\n ) {\n addHint(\n hints,\n seen,\n report.projectResolution.inputProjectRootValidated\n ? `\\`PRIMEUI_PROJECT_ROOT\\` points to a different location than the validated explicit input path. Fix or unset \\`PRIMEUI_PROJECT_ROOT\\`, and use the successful path via MCP tool \\`projectRoot\\`: ${report.runtimeContext.inputProjectRoot}.`\n : \"`PRIMEUI_PROJECT_ROOT` points to a different location than the explicit input path. Correct the project root first, then rerun health before using MCP tool `projectRoot`.\",\n );\n }\n\n if (\n report.sourceResolution.apiKey.effectiveSource === \"missing\" &&\n !(\n report.projectResolution.primeUiDirStatus === \"found\" &&\n report.projectResolution.configStatus !== \"valid\"\n )\n ) {\n addHint(\n hints,\n seen,\n \"No usable API key was found. Set `PRIMEUI_API_KEY`, restore `apiKey` in `.primeui/project.json`, or get a valid key from the appropriate PrimeUI project on `primeui.com`.\",\n );\n }\n\n if (\n report.apiCheck.status === \"skipped\" &&\n report.apiCheck.errorKind === \"configuration\" &&\n report.runtimeContext.envApiBaseUrl\n ) {\n addHint(\n hints,\n seen,\n \"Set `PRIMEUI_API_BASE_URL` to a valid absolute URL such as `http://localhost:3020`, or remove it to fall back to the standard production API.\",\n );\n }\n\n if (\n report.apiCheck.status === \"failed\" &&\n report.apiCheck.errorKind === \"auth\"\n ) {\n if (\n report.sourceResolution.apiKey.envState === \"set\" &&\n report.sourceResolution.apiKey.configState === \"set\"\n ) {\n addHint(\n hints,\n seen,\n \"Both env and config API keys are present. Verify that `PRIMEUI_API_KEY` is not unintentionally overriding a valid config key.\",\n );\n }\n if (report.apiCheck.nonStandardBaseUrl) {\n addHint(\n hints,\n seen,\n \"Authentication failed while using a non-standard `PRIMEUI_API_BASE_URL`. If you did not intend to target a custom API host, remove that env var and retry.\",\n );\n }\n addHint(\n hints,\n seen,\n \"The current API key was rejected by `project info`. Refresh the project API key from PrimeUI project settings, then rerun health.\",\n );\n }\n\n if (\n report.apiCheck.status === \"failed\" &&\n report.apiCheck.errorKind === \"network\"\n ) {\n addHint(\n hints,\n seen,\n report.apiCheck.nonStandardBaseUrl\n ? \"The `project info` request failed while using a non-standard `PRIMEUI_API_BASE_URL`. Verify that host is reachable, or remove the env var if you did not intend to target a custom API.\"\n : \"The `project info` request could not reach the API successfully. Verify network reachability and retry.\",\n );\n }\n\n return hints;\n}\n","import { readdir, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n PRIMEUI_PROJECT_DIR_NAME,\n PrimeUiProjectConfigError,\n readPrimeUiProjectConfig,\n resolvePrimeUiTargetProjectRoot,\n} from \"../lib/project-link-config.js\";\nimport type { NestedPrimeUiCandidate } from \"./index.js\";\n\nconst SCAN_EXCLUDED_DIRS = new Set([\n \".git\",\n \"node_modules\",\n \".next\",\n \"dist\",\n \"build\",\n \"coverage\",\n]);\n\nasync function isFile(targetPath: string): Promise<boolean> {\n try {\n const targetStat = await stat(targetPath);\n return targetStat.isFile();\n } catch {\n return false;\n }\n}\n\nfunction mapConfigStatus(\n error: unknown,\n): NestedPrimeUiCandidate[\"configStatus\"] {\n if (!(error instanceof PrimeUiProjectConfigError)) {\n return \"read-failed\";\n }\n\n switch (error.code) {\n case \"PROJECT_CONFIG_INVALID_JSON\":\n return \"invalid-json\";\n case \"PROJECT_CONFIG_INVALID_FORMAT\":\n return \"invalid-format\";\n case \"PROJECT_CONFIG_READ_FAILED\":\n return \"read-failed\";\n case \"PROJECT_CONFIG_NOT_FOUND\":\n return \"missing\";\n default:\n return \"read-failed\";\n }\n}\n\nasync function inspectCandidate(\n projectRoot: string,\n primeUiPath: string,\n): Promise<NestedPrimeUiCandidate> {\n const configPath = path.join(primeUiPath, \"project.json\");\n\n if (!(await isFile(configPath))) {\n return {\n projectRoot,\n primeUiPath,\n configPath,\n hasProjectConfig: false,\n configStatus: \"missing\",\n };\n }\n\n try {\n const projectConfig = await readPrimeUiProjectConfig(configPath);\n return {\n projectRoot,\n primeUiPath,\n configPath,\n hasProjectConfig: true,\n configStatus: \"valid\",\n targetProjectPath: projectConfig.targetProjectPath,\n targetProjectRoot: resolvePrimeUiTargetProjectRoot(\n projectRoot,\n projectConfig,\n ),\n };\n } catch (error) {\n return {\n projectRoot,\n primeUiPath,\n configPath,\n hasProjectConfig: true,\n configStatus: mapConfigStatus(error),\n };\n }\n}\n\nexport async function findNestedPrimeUiCandidates(\n rootPath: string,\n): Promise<NestedPrimeUiCandidate[]> {\n const queue: string[] = [path.resolve(rootPath)];\n const seen = new Set<string>();\n const candidates: NestedPrimeUiCandidate[] = [];\n\n while (queue.length > 0) {\n const currentDir = queue.shift();\n if (!currentDir || seen.has(currentDir)) {\n continue;\n }\n seen.add(currentDir);\n\n let entries;\n try {\n entries = await readdir(currentDir, { withFileTypes: true });\n } catch {\n continue;\n }\n\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n\n const entryPath = path.join(currentDir, entry.name);\n if (entry.name === PRIMEUI_PROJECT_DIR_NAME) {\n candidates.push(await inspectCandidate(currentDir, entryPath));\n continue;\n }\n\n if (SCAN_EXCLUDED_DIRS.has(entry.name)) {\n continue;\n }\n\n queue.push(entryPath);\n }\n }\n\n return candidates.sort((left, right) =>\n left.primeUiPath.localeCompare(right.primeUiPath),\n );\n}\n","import type {\n HealthApiKeyComparison,\n HealthProjectConfigStatus,\n HealthProjectRootComparison,\n HealthReportData,\n} from \"./index.js\";\n\nfunction renderValue(value: string | undefined, fallback = \"not set\"): string {\n return value?.trim() ? value : fallback;\n}\n\nfunction renderPresenceState(value: \"set\" | \"missing\" | \"unknown\"): string {\n switch (value) {\n case \"set\":\n return \"set\";\n case \"missing\":\n return \"not set\";\n case \"unknown\":\n return \"unknown\";\n }\n}\n\nfunction renderProjectRootComparison(\n comparison: HealthProjectRootComparison,\n): string {\n switch (comparison) {\n case \"same\":\n return \"same\";\n case \"different\":\n return \"different\";\n case \"input-only\":\n return \"only explicit input path is set\";\n case \"env-only\":\n return \"only PRIMEUI_PROJECT_ROOT is set\";\n case \"neither\":\n return \"neither explicit input path nor PRIMEUI_PROJECT_ROOT is set\";\n }\n}\n\nfunction renderApiKeyComparison(comparison: HealthApiKeyComparison): string {\n switch (comparison) {\n case \"same\":\n return \"same\";\n case \"different\":\n return \"different\";\n case \"not-comparable\":\n return \"not comparable\";\n }\n}\n\nfunction renderConfigStatus(status: HealthProjectConfigStatus): string {\n switch (status) {\n case \"valid\":\n return \"valid\";\n case \"missing\":\n return \"missing\";\n case \"invalid-json\":\n return \"invalid JSON\";\n case \"invalid-format\":\n return \"invalid format\";\n case \"read-failed\":\n return \"read failed\";\n case \"unresolved\":\n return \"unresolved\";\n }\n}\n\nfunction formatSection(title: string, lines: string[]): string {\n return [title, ...lines.map((line) => `- ${line}`)].join(\"\\n\");\n}\n\nexport function formatHealthReport(report: HealthReportData): string {\n const sections = [\n \"PrimeUI MCP Health\",\n \"\",\n formatSection(\"Version\", [\n `current: ${report.version.currentVersion}`,\n `latest: ${renderValue(report.version.latestVersion, \"unavailable\")}`,\n `update status: ${report.version.updateStatus}${\n report.version.detail ? ` (${report.version.detail})` : \"\"\n }`,\n ]),\n \"\",\n formatSection(\"Runtime Context\", [\n `cwd: ${report.runtimeContext.cwd}`,\n `health input path: ${renderValue(report.runtimeContext.inputProjectRoot)}`,\n `PRIMEUI_PROJECT_ROOT: ${renderValue(report.runtimeContext.envProjectRoot)}`,\n `PRIMEUI_API_BASE_URL: ${renderValue(report.runtimeContext.envApiBaseUrl)}`,\n `PRIMEUI_API_KEY: ${report.runtimeContext.envApiKeySet ? \"set\" : \"not set\"}`,\n ]),\n \"\",\n formatSection(\"Source Resolution\", [\n `input project root: ${renderValue(report.sourceResolution.projectRoot.inputPath)}`,\n `env project root: ${renderValue(report.sourceResolution.projectRoot.envPath)}`,\n `project root comparison: ${renderProjectRootComparison(\n report.sourceResolution.projectRoot.comparison,\n )}`,\n `effective project root source: ${report.sourceResolution.projectRoot.effectiveSource}`,\n `env API key: ${renderPresenceState(report.sourceResolution.apiKey.envState)}`,\n `config API key: ${renderPresenceState(report.sourceResolution.apiKey.configState)}`,\n `API key comparison: ${renderApiKeyComparison(\n report.sourceResolution.apiKey.comparison,\n )}`,\n `effective API key source: ${report.sourceResolution.apiKey.effectiveSource}`,\n ]),\n \"\",\n formatSection(\"Project Resolution\", [\n `resolved project root: ${renderValue(\n report.projectResolution.resolvedProjectRoot,\n \"unresolved\",\n )}`,\n `effective project root source: ${report.projectResolution.effectiveSource}`,\n `project root validation via explicit input: ${\n report.projectResolution.inputProjectRootValidated\n ? \"passed\"\n : \"not used or failed\"\n }`,\n `.primeui directory: ${\n report.projectResolution.primeUiDirStatus === \"found\"\n ? `found at ${report.projectResolution.primeUiDirPath}`\n : report.projectResolution.primeUiDirStatus\n }`,\n `config path: ${\n report.projectResolution.configPath\n ? `${report.projectResolution.configPath} (${renderConfigStatus(\n report.projectResolution.configStatus,\n )})`\n : renderConfigStatus(report.projectResolution.configStatus)\n }`,\n `targetProjectPath: ${report.projectResolution.targetProjectPath ?? \"unresolved\"}`,\n `resolved target project root: ${renderValue(\n report.projectResolution.targetProjectRoot,\n \"unresolved\",\n )}`,\n `project resolution detail: ${renderValue(\n report.projectResolution.errorMessage,\n \"none\",\n )}`,\n ]),\n \"\",\n formatSection(\"API Check\", [\n `API root: ${renderValue(report.apiCheck.apiRoot, \"unresolved\")}`,\n `project info URL: ${renderValue(report.apiCheck.projectInfoUrl, \"unresolved\")}`,\n `PRIMEUI_API_BASE_URL source: ${report.apiCheck.apiBaseUrlSource}`,\n `non-standard API base URL: ${report.apiCheck.nonStandardBaseUrl ? \"yes\" : \"no\"}`,\n `project info request: ${report.apiCheck.status}`,\n `request detail: ${report.apiCheck.message}`,\n ]),\n ];\n\n if (report.nestedSearch.performed) {\n const candidateLines =\n report.nestedSearch.candidates.length > 0\n ? report.nestedSearch.candidates.map((candidate) => {\n const parts = [\n candidate.primeUiPath,\n `project root: ${candidate.projectRoot}`,\n `config: ${renderConfigStatus(candidate.configStatus)}`,\n ];\n if (candidate.targetProjectPath) {\n parts.push(`targetProjectPath: ${candidate.targetProjectPath}`);\n }\n return parts.join(\"; \");\n })\n : [\"none found\"];\n\n sections.splice(\n sections.length - 2,\n 0,\n \"\",\n formatSection(\"Nested PrimeUI Candidates\", [\n `search root: ${renderValue(report.nestedSearch.rootPath, \"unresolved\")}`,\n ...candidateLines,\n ]),\n );\n }\n\n sections.push(\"\");\n if (report.hints.length === 0) {\n sections.push(\"Hints\\n- none\");\n } else {\n sections.push(\n [\n \"Hints\",\n ...report.hints.map((hint, index) => `${index + 1}. ${hint}`),\n ].join(\"\\n\"),\n );\n }\n\n return sections.join(\"\\n\");\n}\n","import type { HealthUpdateCheckResult } from \"./index.js\";\n\ntype NpmPackageMetadata = {\n version?: string;\n};\n\nfunction parseVersion(input: string): {\n parts: number[];\n prerelease?: string;\n} {\n const [coreVersion, prerelease] = input.split(\"-\", 2);\n return {\n parts: coreVersion.split(\".\").map((segment) => {\n const parsed = Number.parseInt(segment, 10);\n return Number.isFinite(parsed) ? parsed : 0;\n }),\n prerelease,\n };\n}\n\nfunction compareVersions(left: string, right: string): number {\n const leftVersion = parseVersion(left);\n const rightVersion = parseVersion(right);\n const length = Math.max(leftVersion.parts.length, rightVersion.parts.length);\n\n for (let index = 0; index < length; index += 1) {\n const leftPart = leftVersion.parts[index] ?? 0;\n const rightPart = rightVersion.parts[index] ?? 0;\n if (leftPart !== rightPart) {\n return leftPart > rightPart ? 1 : -1;\n }\n }\n\n if (!leftVersion.prerelease && !rightVersion.prerelease) {\n return 0;\n }\n if (!leftVersion.prerelease) {\n return 1;\n }\n if (!rightVersion.prerelease) {\n return -1;\n }\n\n return leftVersion.prerelease.localeCompare(rightVersion.prerelease);\n}\n\nexport async function checkLatestPackageVersion(\n packageName: string,\n currentVersion: string,\n): Promise<HealthUpdateCheckResult> {\n const controller = new AbortController();\n const timeoutHandle = setTimeout(() => controller.abort(), 3000);\n\n try {\n const response = await fetch(\n `https://registry.npmjs.org/${encodeURIComponent(packageName)}/latest`,\n {\n signal: controller.signal,\n },\n );\n\n if (!response.ok) {\n return {\n status: \"unavailable\",\n detail: `npm registry request failed with status ${response.status}`,\n };\n }\n\n const payload = (await response.json()) as NpmPackageMetadata;\n const latestVersion = payload.version?.trim();\n if (!latestVersion) {\n return {\n status: \"unavailable\",\n detail: \"npm registry response did not include a latest version\",\n };\n }\n\n const comparison = compareVersions(currentVersion, latestVersion);\n return {\n latestVersion,\n status: comparison < 0 ? \"update-available\" : \"up-to-date\",\n detail:\n comparison > 0\n ? \"installed version is newer than the npm latest tag\"\n : undefined,\n };\n } catch (error) {\n return {\n status: \"unavailable\",\n detail: error instanceof Error ? error.message : String(error),\n };\n } finally {\n clearTimeout(timeoutHandle);\n }\n}\n","import path from \"node:path\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { parsePrimeUiExportManifest } from \"../lib/api-v1-contract.js\";\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 PrimeUiCreateProjectApiPageInput,\n PrimeUiCreateProjectApiVariantInput,\n PrimeUiCopyComponentResult,\n PrimeUiCopyExportableResult,\n PrimeUiCopyPageResult,\n PrimeUiCreateExportResult,\n PrimeUiDownloadResult,\n PrimeUiExport,\n PrimeUiIssueReportSubmitResult,\n PrimeUiExportManifest,\n PrimeUiInspectPageResult,\n PrimeUiProjectApiPagesResult,\n PrimeUiProjectApiVariantResult,\n PrimeUiProjectApiVariantSummaryResult,\n PrimeUiProjectApiVariantsResult,\n PrimeUiProjectDescriptionResult,\n PrimeUiProjectInfo,\n PrimeUiProjectPageDetailsResult,\n PrimeUiSubmitIssueReportInput,\n} from \"../types.js\";\nimport { copyExportableFromExport } from \"./exportable-copy-service.js\";\nimport { copyComponentFromExport } from \"./component-copy-service.js\";\nimport {\n buildExportManifestArtifact,\n buildReferenceExportArtifact,\n} from \"./runtime-guidance.js\";\n\ntype ProjectSyncServiceOptions = {\n projectRoot: string;\n targetProjectRoot: string;\n provider: ProjectDataProvider;\n pageDetailsBySlug?: Map<string, PrimeUiProjectPageDetailsResult>;\n};\n\nfunction buildManifestPath(exportsRoot: string, exportId: string): string {\n return path.join(exportsRoot, `${exportId}.manifest.json`);\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\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 private readonly pageDetailsBySlug: Map<\n string,\n PrimeUiProjectPageDetailsResult\n >;\n\n constructor(options: ProjectSyncServiceOptions) {\n this.projectRoot = options.projectRoot;\n this.targetProjectRoot = options.targetProjectRoot;\n this.provider = options.provider;\n this.pageDetailsBySlug = options.pageDetailsBySlug ?? new Map();\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 getProjectDescription(\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiProjectDescriptionResult> {\n return this.provider.getProjectDescription();\n }\n\n async upsertProjectDescription(\n projectDescription: string,\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiProjectDescriptionResult> {\n return this.provider.upsertProjectDescription(projectDescription);\n }\n\n async listProjectPages(\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiProjectApiPagesResult> {\n return this.provider.listProjectPages();\n }\n\n async getProjectPage(\n pageId: string,\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiProjectApiPagesResult> {\n return this.provider.getProjectPage(pageId);\n }\n\n async createProjectPage(\n input: PrimeUiCreateProjectApiPageInput,\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiProjectApiPagesResult> {\n return this.provider.createProjectPage(input);\n }\n\n async listProjectPageVariants(\n pageId: string,\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiProjectApiVariantsResult> {\n return this.provider.listProjectPageVariants(pageId);\n }\n\n async getProjectPageVariant(\n pageId: string,\n variantId: string,\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiProjectApiVariantResult> {\n return this.provider.getProjectPageVariant(pageId, variantId);\n }\n\n async createProjectPageVariant(\n pageId: string,\n input: PrimeUiCreateProjectApiVariantInput,\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiProjectApiVariantSummaryResult> {\n return this.provider.createProjectPageVariant(pageId, input);\n }\n\n async setProjectPageActiveVariant(\n pageId: string,\n variantId: string,\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiProjectApiPagesResult> {\n return this.provider.setProjectPageActiveVariant(pageId, variantId);\n }\n\n async submitIssueReport(\n input: PrimeUiSubmitIssueReportInput,\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiIssueReportSubmitResult> {\n return this.provider.submitIssueReport(input);\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 {\n ...result,\n guidance: {\n artifacts: [buildExportManifestArtifact(manifestPath)],\n requiredActions: `Call download_export with id \"${result.export.id}\" next before attempting any file transfer.`,\n },\n };\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 = parsePrimeUiExportManifest(\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 return {\n exportId: id,\n projectPath: targetProjectPath,\n manifestPath,\n guidance: {\n artifacts: [\n buildReferenceExportArtifact(targetProjectPath),\n buildExportManifestArtifact(manifestPath),\n ],\n requiredActions:\n \"Use the export_manifest artifact as the source of truth for which files belong to the selected page, component, or exportable. Use the reference_export artifact as the golden example only when behavior diverges or integration is unclear. Then choose copy_page for full pages, copy_component for one selected block instance, or copy_exportable for shared exportables based on user intent.\",\n },\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 this.pageDetailsBySlug.set(normalizeSlug(slug), pageDetails);\n\n return {\n ...pageDetails,\n report: reportPayload.report,\n reportRows: reportPayload.reportRows,\n };\n }\n\n async copyPage(\n originPageSlug: 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 });\n }\n\n async copyComponent(\n originPageSlug: string,\n blockId: string,\n componentId: string,\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiCopyComponentResult> {\n await this.ensureTempLayout();\n\n const normalizedOriginSlug = normalizeSlug(originPageSlug);\n const cachedPageDetails = this.pageDetailsBySlug.get(normalizedOriginSlug);\n const pageDetails =\n cachedPageDetails ??\n (await this.provider.getProjectPageBySlug(originPageSlug));\n\n if (!cachedPageDetails) {\n this.pageDetailsBySlug.set(normalizedOriginSlug, pageDetails);\n }\n\n return copyComponentFromExport({\n projectRoot: this.targetProjectRoot,\n exportsRoot: this.exportsRoot,\n originPageSlug,\n blockId,\n componentId,\n pageDetails,\n });\n }\n\n async copyExportable(\n exportableKey: string,\n _context?: PrimeUiToolContext,\n ): Promise<PrimeUiCopyExportableResult> {\n await this.ensureTempLayout();\n\n return copyExportableFromExport({\n projectRoot: this.targetProjectRoot,\n exportsRoot: this.exportsRoot,\n exportableKey,\n });\n }\n\n async clearTemp(_context?: PrimeUiToolContext): Promise<void> {\n await resetDir(this.tempRoot);\n await ensureDir(this.exportsRoot);\n this.pageDetailsBySlug.clear();\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 { readFile, 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 { buildUnifiedDiff } from \"../lib/text-diff.js\";\nimport {\n createCopyId,\n ensureSafeTargetPath,\n fileExists,\n getDependencyVersion,\n getOrCreateDependencySection,\n isBinaryBuffer,\n parseManifest,\n readJsonFile,\n resolveManifestCandidateFiles,\n resolveSingleExportDirectory,\n sortDependencySections,\n toProjectRelative,\n type PackageJsonRecord,\n} from \"./copy-service-shared.js\";\nimport {\n buildConflictReportArtifact,\n buildExportManifestArtifact,\n buildReferenceExportArtifact,\n} from \"./runtime-guidance.js\";\nimport type {\n PrimeUiCopyConflictReport,\n PrimeUiCopyPageResult,\n PrimeUiDependencyToAdd,\n PrimeUiDependencyVersionConflict,\n PrimeUiRuntimeGuidance,\n} from \"../types.js\";\ntype CopyPageServiceInput = {\n projectRoot: string;\n exportsRoot: string;\n originPageSlug: 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 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\nfunction buildPageCopyGuidance(input: {\n status: PrimeUiCopyPageResult[\"status\"];\n exportPath: string;\n manifestPath: string;\n reportPath: string;\n hasFileConflicts: boolean;\n addedDependencies: PrimeUiDependencyToAdd[];\n}): PrimeUiRuntimeGuidance {\n const artifacts = [\n buildExportManifestArtifact(input.manifestPath),\n buildReferenceExportArtifact(input.exportPath),\n ];\n\n if (input.hasFileConflicts) {\n artifacts.push(buildConflictReportArtifact(input.reportPath));\n }\n\n const installDependenciesPrefix =\n input.addedDependencies.length > 0\n ? \"Install any newly added dependencies first. \"\n : \"\";\n\n let requiredActions =\n \"Follow repository instructions for verification first. If repository rules are absent, inspect package.json scripts and run the most relevant minimal checks. Compare against the reference_export artifact only if behavior or integration looks wrong.\";\n\n if (input.status === \"needs_review\" && input.hasFileConflicts) {\n requiredActions =\n \"Review every file listed in the conflict_report artifact. Those conflicting files are an inseparable part of the imported page functionality and must be resolved deliberately before the transfer is complete. After resolving them, run repository-required verification and re-check after any local adaptation or refactor.\";\n } else if (input.status === \"needs_review\") {\n requiredActions =\n \"Resolve dependency version conflicts or other review blockers first, then run repository-required verification. If repository rules are absent, inspect package.json scripts and run the most relevant minimal checks. Use the reference_export artifact only when behavior diverges or local adaptation is unclear.\";\n }\n\n return {\n artifacts,\n requiredActions: `${installDependenciesPrefix}${requiredActions}`,\n };\n}\n\nexport async function copyPageFromExport(\n input: CopyPageServiceInput,\n): Promise<PrimeUiCopyPageResult> {\n const normalizedOriginSlug = normalizeSlug(input.originPageSlug);\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 targetPagePath = path.join(input.projectRoot, page.pagePath);\n const targetComponentsPath = path.join(\n input.projectRoot,\n page.componentsPath,\n );\n\n ensureSafeTargetPath(input.projectRoot, targetPagePath);\n ensureSafeTargetPath(input.projectRoot, targetComponentsPath);\n\n const candidateFiles = await resolveManifestCandidateFiles({\n exportPath,\n manifestOwnerLabel: `page \"${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 const conflictReportEntries: PrimeUiCopyConflictReport[\"conflicts\"] = [];\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 = sourceBuffer;\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(targetRelative);\n continue;\n }\n\n if (plannedSourceBuffer.equals(targetBuffer)) {\n identicalFiles.push(targetRelative);\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 conflictReportEntries.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 const sortedAddedDependencies = addedDependencies.sort((a, b) =>\n a.packageName.localeCompare(b.packageName),\n );\n const sortedDependenciesVersionConflicts = dependenciesVersionConflicts.sort(\n (a, b) => a.packageName.localeCompare(b.packageName),\n );\n const sortedConflictReportEntries = conflictReportEntries.sort((a, b) =>\n a.targetPath.localeCompare(b.targetPath),\n );\n\n for (const entry of sortedConflictReportEntries) {\n conflictFiles.push({\n targetPath: entry.targetPath,\n isBinary: entry.isBinary,\n });\n }\n\n const copyId = createCopyId();\n const reportPath = path.join(\n input.exportsRoot,\n `${exportId}.copy-report-${copyId}.json`,\n );\n const report: PrimeUiCopyConflictReport = {\n reportPath,\n generatedAt: new Date().toISOString(),\n exportId,\n originPageSlug: normalizedOriginSlug,\n sourcePagePath: page.pagePath,\n sourceComponentsPath: page.componentsPath,\n conflicts: sortedConflictReportEntries,\n };\n await writeFile(reportPath, `${JSON.stringify(report, null, 2)}\\n`, \"utf-8\");\n\n const hasFileConflicts = conflictFiles.length > 0;\n const hasDependencyVersionConflicts =\n sortedDependenciesVersionConflicts.length > 0;\n const needsReview = hasFileConflicts || hasDependencyVersionConflicts;\n const status: PrimeUiCopyPageResult[\"status\"] = needsReview\n ? \"needs_review\"\n : \"completed\";\n const messageParts: string[] = [];\n if (hasFileConflicts) {\n messageParts.push(\n `Conflicts detected. Manual resolution is required before any follow-up integration steps. Review ${reportPath} for full diffs and resolve conflicts based on the target project behavior, the imported page functionality, and the possibility that MCP may run against third-party projects not generated by PrimeUI.`,\n );\n } else if (hasDependencyVersionConflicts) {\n messageParts.push(\n `Dependency version conflicts detected. Manual resolution is required before any follow-up integration steps. Review ${reportPath} for full local report details, inspect dependenciesVersionConflicts in this response, and resolve versions based on the target project behavior and the imported page functionality.`,\n );\n } else {\n messageParts.push(\n `Copy completed with no file conflicts or dependency version conflicts. Review ${reportPath} for full local details if needed.`,\n );\n }\n if (sortedAddedDependencies.length > 0) {\n messageParts.push(\n \"Missing dependencies were added to package.json but are NOT installed yet. Run dependency installation manually with the package manager used by the target project.\",\n );\n }\n\n const guidance = buildPageCopyGuidance({\n status,\n exportPath,\n manifestPath,\n reportPath,\n hasFileConflicts,\n addedDependencies: sortedAddedDependencies,\n });\n\n return {\n status,\n message: messageParts.join(\" \"),\n reportPath,\n exportId,\n exportPath,\n originPageSlug: normalizedOriginSlug,\n sourcePagePath: page.pagePath,\n sourceComponentsPath: page.componentsPath,\n newFiles,\n identicalFiles,\n conflictFiles,\n addedDependencies: sortedAddedDependencies,\n dependenciesVersionConflicts: sortedDependenciesVersionConflicts,\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 guidance,\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","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 { readFile, readdir, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { parsePrimeUiExportManifest } from \"../lib/api-v1-contract.js\";\nimport type {\n PrimeUiDependencySection,\n PrimeUiDependencyToAdd,\n PrimeUiDependencyVersionConflict,\n PrimeUiExportManifest,\n} from \"../types.js\";\n\nconst DEPENDENCY_SECTIONS: PrimeUiDependencySection[] = [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n];\n\nexport type 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\nexport function toPosixPath(value: string): string {\n return value.split(path.sep).join(\"/\");\n}\n\nexport function toProjectRelative(\n rootPath: string,\n absolutePath: string,\n): string {\n return toPosixPath(path.relative(rootPath, absolutePath));\n}\n\nexport function 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\nexport async function readJsonFile<T>(filePath: string): Promise<T> {\n const content = await readFile(filePath, \"utf-8\");\n return JSON.parse(content) as T;\n}\n\nexport async function fileExists(filePath: string): Promise<boolean> {\n try {\n await stat(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function parseManifest(value: unknown): PrimeUiExportManifest {\n try {\n return parsePrimeUiExportManifest(value);\n } catch (error) {\n if (\n error instanceof Error &&\n error.message === \"Export manifest is invalid.\"\n ) {\n throw new Error(\"Invalid export manifest format.\");\n }\n\n throw error;\n }\n}\n\nexport async function resolveManifestCandidateFiles(input: {\n exportPath: string;\n manifestOwnerLabel: string;\n files: string[];\n requireExisting?: boolean;\n}): Promise<string[]> {\n const result = new Set<string>();\n const requireExisting = input.requireExisting ?? true;\n\n for (const rawPath of input.files) {\n const trimmed = rawPath.trim();\n if (!trimmed) {\n throw new Error(\n `Export manifest for ${input.manifestOwnerLabel} 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 ${input.manifestOwnerLabel} contains path outside export root: ${trimmed}`,\n );\n }\n\n if (requireExisting) {\n const stats = await stat(absolutePath).catch(() => null);\n if (!stats?.isFile()) {\n throw new Error(\n `Export manifest file is missing for ${input.manifestOwnerLabel}: ${normalizedRelative}`,\n );\n }\n }\n\n result.add(absolutePath);\n }\n\n return [...result].sort((a, b) => a.localeCompare(b));\n}\n\nexport async function resolveSingleExportDirectory(\n exportsRoot: string,\n): 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\nexport function createCopyId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\nexport function ensureSafeTargetPath(\n projectRoot: string,\n targetPath: string,\n): 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\nexport function 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\nexport function 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\nexport function 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\nexport async function resolveDependencyRequirements(input: {\n exportPackageJsonPath: string;\n userPackageJsonPath: string;\n requiredPackageNames: Iterable<string>;\n}): Promise<{\n missedDependencies: PrimeUiDependencyToAdd[];\n dependenciesVersionConflicts: PrimeUiDependencyVersionConflict[];\n}> {\n const exportPackageJson = await readJsonFile<PackageJsonRecord>(\n input.exportPackageJsonPath,\n );\n const userPackageJson = await readJsonFile<PackageJsonRecord>(\n input.userPackageJsonPath,\n );\n\n const missedDependencies: PrimeUiDependencyToAdd[] = [];\n const dependenciesVersionConflicts: PrimeUiDependencyVersionConflict[] = [];\n\n for (const packageName of new Set(input.requiredPackageNames)) {\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 missedDependencies.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 return {\n missedDependencies: missedDependencies.sort((a, b) =>\n a.packageName.localeCompare(b.packageName),\n ),\n dependenciesVersionConflicts: dependenciesVersionConflicts.sort((a, b) =>\n a.packageName.localeCompare(b.packageName),\n ),\n };\n}\n","import type { PrimeUiGuidanceArtifact } from \"../types.js\";\n\nconst EXPORT_MANIFEST_DESCRIPTION =\n \"Local sidecar export manifest. This is the authoritative file-level contract for the selected transfer item. Files listed per page or exportable are functionality-critical dependencies for that item.\";\n\nconst REFERENCE_EXPORT_DESCRIPTION =\n \"Downloaded export project. Use this as the golden example for working behavior, file relationships, and integration details when the local result diverges or implementation is unclear.\";\n\nconst CONFLICT_REPORT_DESCRIPTION =\n \"Local diff report for files that were not copied because target files already differ. These conflicts represent required imported functionality and must be reviewed before the transfer is complete.\";\n\nexport function buildExportManifestArtifact(\n manifestPath: string,\n): PrimeUiGuidanceArtifact {\n return {\n kind: \"export_manifest\",\n path: manifestPath,\n description: EXPORT_MANIFEST_DESCRIPTION,\n };\n}\n\nexport function buildReferenceExportArtifact(\n exportPath: string,\n): PrimeUiGuidanceArtifact {\n return {\n kind: \"reference_export\",\n path: exportPath,\n description: REFERENCE_EXPORT_DESCRIPTION,\n };\n}\n\nexport function buildConflictReportArtifact(\n reportPath: string,\n): PrimeUiGuidanceArtifact {\n return {\n kind: \"conflict_report\",\n path: reportPath,\n description: CONFLICT_REPORT_DESCRIPTION,\n };\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 { readFile, 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 { buildUnifiedDiff } from \"../lib/text-diff.js\";\nimport {\n createCopyId,\n ensureSafeTargetPath,\n fileExists,\n isBinaryBuffer,\n parseManifest,\n readJsonFile,\n resolveDependencyRequirements,\n resolveManifestCandidateFiles,\n resolveSingleExportDirectory,\n toProjectRelative,\n toPosixPath,\n} from \"./copy-service-shared.js\";\nimport type {\n PrimeUiCopyExportableConflictReport,\n PrimeUiCopyExportableResult,\n PrimeUiConflictFile,\n PrimeUiCopyConflictReportEntry,\n PrimeUiSkippedCopyFile,\n} from \"../types.js\";\n\ntype CopyExportableServiceInput = {\n projectRoot: string;\n exportsRoot: string;\n exportableKey: string;\n};\n\nconst PACKAGE_JSON_RELATIVE_PATH = \"package.json\";\nconst SUPPLEMENTARY_DEPENDENCY_PACKAGES: Readonly<Record<string, string[]>> = {\n cookieBanner: [\"@types/js-cookie\"],\n};\n\nfunction normalizeExportableKey(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(\"exportableKey must not be empty.\");\n }\n\n return trimmed;\n}\n\nfunction createNotAvailableResult(input: {\n exportId: string;\n exportPath: string;\n exportableKey: string;\n isReadyToExport: boolean;\n manifestSuccess: boolean;\n manifestMessage: string;\n manifestFiles: string[];\n skippedFiles?: PrimeUiSkippedCopyFile[];\n availabilityHint?: string;\n}): PrimeUiCopyExportableResult {\n const skippedFiles = input.skippedFiles ?? [];\n const availabilityHint =\n input.availabilityHint ??\n (input.isReadyToExport\n ? \"Open the PrimeUI project and regenerate the export after the shared exportable produces files successfully.\"\n : \"Enable or configure this shared exportable in PrimeUI project settings first, then create and download a fresh export.\");\n\n return {\n status: \"not_available\",\n message: `Shared exportable \"${input.exportableKey}\" is not available for copy. ${availabilityHint} Details: ${input.manifestMessage}`,\n reportPath: null,\n exportId: input.exportId,\n exportPath: input.exportPath,\n exportableKey: input.exportableKey,\n isReadyToExport: input.isReadyToExport,\n manifestSuccess: input.manifestSuccess,\n manifestMessage: input.manifestMessage,\n manifestFiles: input.manifestFiles,\n newFiles: [],\n identicalFiles: [],\n conflictFiles: [],\n skippedFiles,\n missedDependencies: [],\n dependenciesVersionConflicts: [],\n summary: {\n totalManifestFiles: input.manifestFiles.length,\n totalCandidateFiles: 0,\n copiedFiles: 0,\n identicalFiles: 0,\n conflictFiles: 0,\n skippedFiles: skippedFiles.length,\n missedDependencies: 0,\n dependenciesVersionConflicts: 0,\n },\n };\n}\n\nfunction resolveSupplementaryDependencyPackages(\n exportableKey: string,\n): string[] {\n return SUPPLEMENTARY_DEPENDENCY_PACKAGES[exportableKey] ?? [];\n}\n\nexport async function copyExportableFromExport(\n input: CopyExportableServiceInput,\n): Promise<PrimeUiCopyExportableResult> {\n const normalizedExportableKey = normalizeExportableKey(input.exportableKey);\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 exportable = manifest.export.exportables.find(\n (item) => item.key === normalizedExportableKey,\n );\n if (!exportable) {\n throw new Error(\n `Shared exportable not found in manifest for key: ${normalizedExportableKey}`,\n );\n }\n\n const manifestFiles = exportable.manifest.files.map((filePath) =>\n toPosixPath(filePath).replace(/^\\.\\/+/, \"\"),\n );\n\n if (\n !exportable.isReadyToExport ||\n !exportable.manifest.success ||\n manifestFiles.length === 0\n ) {\n return createNotAvailableResult({\n exportId,\n exportPath,\n exportableKey: normalizedExportableKey,\n isReadyToExport: exportable.isReadyToExport,\n manifestSuccess: exportable.manifest.success,\n manifestMessage: exportable.manifest.message,\n manifestFiles,\n });\n }\n\n const skippedFiles: PrimeUiSkippedCopyFile[] = [];\n const copyManagedManifestFiles = manifestFiles.filter((relativePath) => {\n if (relativePath !== PACKAGE_JSON_RELATIVE_PATH) {\n return true;\n }\n\n skippedFiles.push({\n targetPath: relativePath,\n reason: \"package_json_managed_as_dependencies\",\n });\n return false;\n });\n\n if (copyManagedManifestFiles.length === 0) {\n return createNotAvailableResult({\n exportId,\n exportPath,\n exportableKey: normalizedExportableKey,\n isReadyToExport: exportable.isReadyToExport,\n manifestSuccess: exportable.manifest.success,\n manifestMessage: exportable.manifest.message,\n manifestFiles,\n skippedFiles,\n availabilityHint:\n \"No copyable files remain after filtering non-copyable manifest entries such as package.json. Adjust the PrimeUI exportable configuration and create a fresh export before retrying.\",\n });\n }\n\n const candidateFiles = await resolveManifestCandidateFiles({\n exportPath,\n manifestOwnerLabel: `exportable \"${normalizedExportableKey}\"`,\n files: copyManagedManifestFiles,\n });\n const dependencyGraph = await buildImportGraph({\n projectRoot: exportPath,\n entryFiles: candidateFiles,\n followInternalImports: false,\n });\n\n const newFiles: string[] = [];\n const identicalFiles: string[] = [];\n const conflictFiles: PrimeUiConflictFile[] = [];\n const conflictReportEntries: PrimeUiCopyConflictReportEntry[] = [];\n\n for (const sourceFilePath of candidateFiles) {\n const relativeToExport = path.relative(exportPath, sourceFilePath);\n if (\n relativeToExport.startsWith(\"..\") ||\n path.isAbsolute(relativeToExport)\n ) {\n throw new Error(`Source file is outside export root: ${sourceFilePath}`);\n }\n\n const targetFilePath = path.join(input.projectRoot, relativeToExport);\n ensureSafeTargetPath(input.projectRoot, targetFilePath);\n\n const sourceBuffer = await readFile(sourceFilePath);\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, sourceBuffer);\n newFiles.push(targetRelative);\n continue;\n }\n\n if (sourceBuffer.equals(targetBuffer)) {\n identicalFiles.push(targetRelative);\n continue;\n }\n\n const isBinary =\n isBinaryBuffer(sourceBuffer) || isBinaryBuffer(targetBuffer);\n const diff = isBinary\n ? \"Binary files differ.\"\n : buildUnifiedDiff({\n oldText: targetBuffer.toString(\"utf-8\"),\n newText: sourceBuffer.toString(\"utf-8\"),\n oldLabel: `user/${targetRelative}`,\n newLabel: `export/${sourceRelative}`,\n });\n\n conflictReportEntries.push({\n sourcePath: sourceRelative,\n targetPath: targetRelative,\n diff,\n isBinary,\n });\n }\n\n const exportPackageJsonPath = path.join(\n exportPath,\n PACKAGE_JSON_RELATIVE_PATH,\n );\n const userPackageJsonPath = path.join(\n input.projectRoot,\n PACKAGE_JSON_RELATIVE_PATH,\n );\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 requiredPackageNames = [\n ...dependencyGraph.externalPackages,\n ...resolveSupplementaryDependencyPackages(normalizedExportableKey),\n ];\n const { missedDependencies, dependenciesVersionConflicts } =\n await resolveDependencyRequirements({\n exportPackageJsonPath,\n userPackageJsonPath,\n requiredPackageNames,\n });\n\n const sortedConflictReportEntries = conflictReportEntries.sort((a, b) =>\n a.targetPath.localeCompare(b.targetPath),\n );\n for (const entry of sortedConflictReportEntries) {\n conflictFiles.push({\n targetPath: entry.targetPath,\n isBinary: entry.isBinary,\n });\n }\n\n const copyId = createCopyId();\n const reportPath = path.join(\n input.exportsRoot,\n `${exportId}.copy-exportable-report-${copyId}.json`,\n );\n const report: PrimeUiCopyExportableConflictReport = {\n reportPath,\n generatedAt: new Date().toISOString(),\n exportId,\n exportableKey: normalizedExportableKey,\n conflicts: sortedConflictReportEntries,\n };\n await writeFile(reportPath, `${JSON.stringify(report, null, 2)}\\n`, \"utf-8\");\n\n const hasFileConflicts = conflictFiles.length > 0;\n const hasDependencyVersionConflicts = dependenciesVersionConflicts.length > 0;\n const needsReview = hasFileConflicts || hasDependencyVersionConflicts;\n const status: PrimeUiCopyExportableResult[\"status\"] = needsReview\n ? \"needs_review\"\n : \"completed\";\n\n const messageParts: string[] = [];\n if (hasFileConflicts) {\n messageParts.push(\n `Conflicts detected while copying shared exportable \"${normalizedExportableKey}\". Manual resolution is required before integration is complete. Review ${reportPath} for full diffs and resolve conflicts in the context of the target project behavior.`,\n );\n } else if (hasDependencyVersionConflicts) {\n messageParts.push(\n `Dependency version conflicts detected for shared exportable \"${normalizedExportableKey}\". Manual resolution is required before integration is complete. Review ${reportPath} and dependenciesVersionConflicts in this response.`,\n );\n } else {\n messageParts.push(\n `Shared exportable \"${normalizedExportableKey}\" copied with no file conflicts or dependency version conflicts. Review ${reportPath} for full local details if needed.`,\n );\n }\n\n if (missedDependencies.length > 0) {\n messageParts.push(\n \"missedDependencies lists required packages that are a substantial and inseparable part of this exportable's functionality. They were not added or installed automatically and must be handled explicitly by the agent or user.\",\n );\n }\n\n if (skippedFiles.length > 0) {\n messageParts.push(\n \"package.json is never copied automatically for shared exportables. Dependency follow-up must come from missedDependencies and dependenciesVersionConflicts.\",\n );\n }\n\n return {\n status,\n message: messageParts.join(\" \"),\n reportPath,\n exportId,\n exportPath,\n exportableKey: normalizedExportableKey,\n isReadyToExport: exportable.isReadyToExport,\n manifestSuccess: exportable.manifest.success,\n manifestMessage: exportable.manifest.message,\n manifestFiles,\n newFiles,\n identicalFiles,\n conflictFiles,\n skippedFiles,\n missedDependencies,\n dependenciesVersionConflicts,\n summary: {\n totalManifestFiles: manifestFiles.length,\n totalCandidateFiles: candidateFiles.length,\n copiedFiles: newFiles.length,\n identicalFiles: identicalFiles.length,\n conflictFiles: conflictFiles.length,\n skippedFiles: skippedFiles.length,\n missedDependencies: missedDependencies.length,\n dependenciesVersionConflicts: dependenciesVersionConflicts.length,\n },\n };\n}\n","import { readFile, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { buildImportGraph } from \"../lib/import-graph.js\";\nimport { ensureDir } from \"../lib/fs.js\";\nimport { buildUnifiedDiff } from \"../lib/text-diff.js\";\nimport {\n createCopyId,\n ensureSafeTargetPath,\n fileExists,\n getDependencyVersion,\n getOrCreateDependencySection,\n isBinaryBuffer,\n parseManifest,\n readJsonFile,\n resolveSingleExportDirectory,\n resolveManifestCandidateFiles,\n sortDependencySections,\n toProjectRelative,\n toPosixPath,\n type PackageJsonRecord,\n} from \"./copy-service-shared.js\";\nimport type {\n PrimeUiConflictFile,\n PrimeUiCopyComponentConflictReport,\n PrimeUiCopyComponentGuidance,\n PrimeUiCopyComponentResult,\n PrimeUiCopyComponentSelectedBlock,\n PrimeUiCopyConflictReportEntry,\n PrimeUiDependencyToAdd,\n PrimeUiDependencyVersionConflict,\n PrimeUiProjectPageDetailsResult,\n} from \"../types.js\";\n\ntype CopyComponentServiceInput = {\n projectRoot: string;\n exportsRoot: string;\n originPageSlug: string;\n blockId: string;\n componentId: string;\n pageDetails: PrimeUiProjectPageDetailsResult;\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 normalizeRequiredValue(value: string, label: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(`${label} must not be empty.`);\n }\n\n return trimmed;\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\nfunction buildContentKey(componentId: string, occurrenceIndex: number): string {\n return occurrenceIndex === 1\n ? componentId\n : `${componentId}-${occurrenceIndex}`;\n}\n\nfunction resolveSelectedBlock(input: {\n pageDetails: PrimeUiProjectPageDetailsResult;\n blockId: string;\n componentId: string;\n}): PrimeUiCopyComponentSelectedBlock {\n const { components } = input.pageDetails;\n if (components === null) {\n throw new Error(\n `Components are unavailable for page \"${input.pageDetails.page.slug}\" because no active variant is set.`,\n );\n }\n\n let occurrenceIndex = 0;\n for (const component of components) {\n if (component.componentId !== input.componentId) {\n continue;\n }\n\n occurrenceIndex += 1;\n if (component.blockId !== input.blockId) {\n continue;\n }\n\n return {\n blockId: component.blockId,\n componentId: component.componentId,\n slot: component.slot,\n props: component.props,\n occurrenceIndex,\n contentKey: buildContentKey(component.componentId, occurrenceIndex),\n };\n }\n\n throw new Error(\n `Block not found for page \"${input.pageDetails.page.slug}\" using blockId \"${input.blockId}\" and componentId \"${input.componentId}\". Run inspect_page and confirm the selected block instance.`,\n );\n}\n\nasync function createConflictReportEntry(input: {\n sourceFilePath: string;\n targetFilePath: string;\n exportPath: string;\n projectRoot: string;\n}): Promise<PrimeUiCopyConflictReportEntry | null> {\n const sourceBuffer = await readFile(input.sourceFilePath);\n let targetBuffer: Buffer | null = null;\n try {\n targetBuffer = await readFile(input.targetFilePath);\n } catch {\n targetBuffer = null;\n }\n\n if (!targetBuffer || sourceBuffer.equals(targetBuffer)) {\n return null;\n }\n\n const sourceRelative = toProjectRelative(\n input.exportPath,\n input.sourceFilePath,\n );\n const targetRelative = toProjectRelative(\n input.projectRoot,\n input.targetFilePath,\n );\n const isBinary = isBinaryBuffer(sourceBuffer) || isBinaryBuffer(targetBuffer);\n\n return {\n sourcePath: sourceRelative,\n targetPath: targetRelative,\n diff: isBinary\n ? \"Binary files differ.\"\n : buildUnifiedDiff({\n oldText: targetBuffer.toString(\"utf-8\"),\n newText: sourceBuffer.toString(\"utf-8\"),\n oldLabel: `user/${targetRelative}`,\n newLabel: `export/${sourceRelative}`,\n }),\n isBinary,\n };\n}\n\nasync function applyDependencyRequirements(input: {\n exportPath: string;\n projectRoot: string;\n requiredPackageNames: Iterable<string>;\n}): Promise<{\n addedDependencies: PrimeUiDependencyToAdd[];\n dependenciesVersionConflicts: PrimeUiDependencyVersionConflict[];\n}> {\n const exportPackageJsonPath = path.join(input.exportPath, \"package.json\");\n const userPackageJsonPath = path.join(input.projectRoot, \"package.json\");\n\n if (!(await fileExists(exportPackageJsonPath))) {\n throw new Error(`Export package.json not found: ${exportPackageJsonPath}`);\n }\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 new Set(input.requiredPackageNames)) {\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 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 };\n}\n\nfunction buildGuidance(input: {\n selectedBlock: PrimeUiCopyComponentSelectedBlock;\n manualInsertionTargets: string[];\n potentialDependencyFiles: string[];\n potentialConflictFiles: string[];\n primaryComponentResolved: boolean;\n addedDependencies: PrimeUiDependencyToAdd[];\n dependenciesVersionConflicts: PrimeUiDependencyVersionConflict[];\n missingManifestFiles: string[];\n}): PrimeUiCopyComponentGuidance {\n const requiredActions = [\n `Use selectedBlock.props as the exact prop payload for block \"${input.selectedBlock.blockId}\" and contentKey \"${input.selectedBlock.contentKey}\".`,\n `Review manualInsertionTargets and wire the selected component instance into: ${input.manualInsertionTargets.join(\", \")}.`,\n input.potentialDependencyFiles.length > 0\n ? \"Review potentialDependencyFiles first if the imported component is incomplete, because they are the most likely supporting files.\"\n : \"If the imported component is incomplete, compare the page file against the downloaded export before touching unrelated files.\",\n input.primaryComponentResolved\n ? \"If behavior is incorrect, compare the local files against the downloaded reference export using exportPath.\"\n : \"Resolve the canonical component file manually from the downloaded reference export before continuing integration.\",\n ];\n\n if (input.addedDependencies.length > 0) {\n requiredActions.push(\n \"Install the newly added dependencies before running the copied component locally.\",\n );\n }\n\n if (input.dependenciesVersionConflicts.length > 0) {\n requiredActions.push(\n \"Resolve the reported dependency version conflicts before treating the transfer as complete.\",\n );\n }\n\n if (input.missingManifestFiles.length > 0) {\n requiredActions.push(\n \"Restore the missing export files referenced by the manifest before treating the transfer as complete.\",\n );\n }\n\n const notes = [\n \"copy_component copies only the canonical component file when it can resolve that file reliably.\",\n \"potentialDependencyFiles and potentialConflictFiles are hints, not mandatory full-page merge instructions.\",\n ];\n\n if (input.potentialConflictFiles.length > 0) {\n notes.push(\n \"potentialConflictFiles mark related files that already differ locally and may matter only if behavior diverges after integration.\",\n );\n }\n\n return {\n requiredActions,\n notes,\n };\n}\n\nexport async function copyComponentFromExport(\n input: CopyComponentServiceInput,\n): Promise<PrimeUiCopyComponentResult> {\n const normalizedOriginSlug = normalizeSlug(input.originPageSlug);\n const normalizedBlockId = normalizeRequiredValue(input.blockId, \"blockId\");\n const normalizedComponentId = normalizeRequiredValue(\n input.componentId,\n \"componentId\",\n );\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 candidateFiles = await resolveManifestCandidateFiles({\n exportPath,\n manifestOwnerLabel: `page \"${normalizedOriginSlug}\"`,\n files: page.manifest.files,\n requireExisting: false,\n });\n\n const selectedBlock = resolveSelectedBlock({\n pageDetails: input.pageDetails,\n blockId: normalizedBlockId,\n componentId: normalizedComponentId,\n });\n\n const sourcePagePath = path.join(exportPath, page.pagePath);\n const sourceComponentsPath = path.join(exportPath, page.componentsPath);\n const targetPagePath = path.join(input.projectRoot, page.pagePath);\n const targetComponentsPath = path.join(\n input.projectRoot,\n page.componentsPath,\n );\n\n ensureSafeTargetPath(input.projectRoot, targetPagePath);\n ensureSafeTargetPath(input.projectRoot, targetComponentsPath);\n\n const manualInsertionTargets = [\n toProjectRelative(input.projectRoot, targetPagePath),\n ];\n\n const primarySourceCandidates = [\n toPosixPath(path.join(page.componentsPath, `${normalizedComponentId}.tsx`)),\n toPosixPath(\n path.join(page.componentsPath, normalizedComponentId, \"index.tsx\"),\n ),\n ];\n const primaryCandidateTargetPaths = new Set<string>();\n let primaryComponentFile: string | null = null;\n let resolvedPrimarySourcePath: string | null = null;\n\n for (const sourceRelativePath of primarySourceCandidates) {\n const sourceCandidatePath = path.join(exportPath, sourceRelativePath);\n const targetCandidatePath = resolveTargetFilePath({\n sourceFilePath: sourceCandidatePath,\n sourcePagePath,\n sourceComponentsPath,\n targetPagePath,\n targetComponentsPath,\n exportRoot: exportPath,\n projectRoot: input.projectRoot,\n });\n ensureSafeTargetPath(input.projectRoot, targetCandidatePath);\n primaryCandidateTargetPaths.add(\n toProjectRelative(input.projectRoot, targetCandidatePath),\n );\n\n const stats = await stat(sourceCandidatePath).catch(() => null);\n if (!stats?.isFile()) {\n continue;\n }\n\n if (!resolvedPrimarySourcePath) {\n resolvedPrimarySourcePath = sourceCandidatePath;\n primaryComponentFile = toProjectRelative(\n input.projectRoot,\n targetCandidatePath,\n );\n }\n }\n\n const newFiles: string[] = [];\n const identicalFiles: string[] = [];\n const conflictFiles: PrimeUiConflictFile[] = [];\n const actualConflicts: PrimeUiCopyConflictReportEntry[] = [];\n const missingManifestFiles = new Set<string>();\n\n if (resolvedPrimarySourcePath && primaryComponentFile) {\n const targetPrimaryPath = path.join(\n input.projectRoot,\n primaryComponentFile,\n );\n ensureSafeTargetPath(input.projectRoot, targetPrimaryPath);\n\n const sourceBuffer = await readFile(resolvedPrimarySourcePath);\n let targetBuffer: Buffer | null = null;\n try {\n targetBuffer = await readFile(targetPrimaryPath);\n } catch {\n targetBuffer = null;\n }\n\n if (!targetBuffer) {\n await ensureDir(path.dirname(targetPrimaryPath));\n await writeFile(targetPrimaryPath, sourceBuffer);\n newFiles.push(primaryComponentFile);\n } else if (sourceBuffer.equals(targetBuffer)) {\n identicalFiles.push(primaryComponentFile);\n } else {\n const entry = await createConflictReportEntry({\n sourceFilePath: resolvedPrimarySourcePath,\n targetFilePath: targetPrimaryPath,\n exportPath,\n projectRoot: input.projectRoot,\n });\n if (entry) {\n actualConflicts.push(entry);\n }\n }\n }\n\n const dependencyGraph = resolvedPrimarySourcePath\n ? await buildImportGraph({\n projectRoot: exportPath,\n entryFiles: [resolvedPrimarySourcePath],\n })\n : { externalPackages: [] };\n\n const { addedDependencies, dependenciesVersionConflicts } =\n resolvedPrimarySourcePath\n ? await applyDependencyRequirements({\n exportPath,\n projectRoot: input.projectRoot,\n requiredPackageNames: dependencyGraph.externalPackages,\n })\n : {\n addedDependencies: [] as PrimeUiDependencyToAdd[],\n dependenciesVersionConflicts:\n [] as PrimeUiDependencyVersionConflict[],\n };\n\n const potentialDependencyTargets = new Set<string>();\n const potentialConflictEntries = new Map<\n string,\n PrimeUiCopyConflictReportEntry\n >();\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 targetRelative = toProjectRelative(input.projectRoot, targetFilePath);\n const sourceRelative = toProjectRelative(exportPath, sourceFilePath);\n const sourceExists = await fileExists(sourceFilePath);\n if (!sourceExists) {\n missingManifestFiles.add(sourceRelative);\n continue;\n }\n\n if (\n manualInsertionTargets.includes(targetRelative) ||\n primaryCandidateTargetPaths.has(targetRelative)\n ) {\n continue;\n }\n\n potentialDependencyTargets.add(targetRelative);\n\n const targetExists = await fileExists(targetFilePath);\n if (!targetExists) {\n continue;\n }\n\n const entry = await createConflictReportEntry({\n sourceFilePath,\n targetFilePath,\n exportPath,\n projectRoot: input.projectRoot,\n });\n if (entry) {\n potentialConflictEntries.set(targetRelative, entry);\n }\n }\n\n const sortedActualConflicts = actualConflicts.sort((a, b) =>\n a.targetPath.localeCompare(b.targetPath),\n );\n for (const entry of sortedActualConflicts) {\n conflictFiles.push({\n targetPath: entry.targetPath,\n isBinary: entry.isBinary,\n });\n }\n\n const sortedPotentialConflictEntries = [\n ...potentialConflictEntries.values(),\n ].sort((a, b) => a.targetPath.localeCompare(b.targetPath));\n const potentialDependencyFiles = [...potentialDependencyTargets].sort(\n (a, b) => a.localeCompare(b),\n );\n const potentialConflictFiles = sortedPotentialConflictEntries.map(\n (entry) => entry.targetPath,\n );\n\n const copyId = createCopyId();\n const reportPath = path.join(\n input.exportsRoot,\n `${exportId}.copy-component-report-${copyId}.json`,\n );\n const report: PrimeUiCopyComponentConflictReport = {\n reportPath,\n generatedAt: new Date().toISOString(),\n exportId,\n originPageSlug: normalizedOriginSlug,\n blockId: normalizedBlockId,\n componentId: normalizedComponentId,\n primaryComponentCandidates: primarySourceCandidates,\n primaryComponentFile,\n manualInsertionTargets,\n potentialDependencyFiles,\n actualConflicts: sortedActualConflicts,\n potentialConflicts: sortedPotentialConflictEntries,\n selectedBlock,\n };\n await writeFile(reportPath, `${JSON.stringify(report, null, 2)}\\n`, \"utf-8\");\n\n const needsReview =\n !primaryComponentFile ||\n conflictFiles.length > 0 ||\n dependenciesVersionConflicts.length > 0 ||\n missingManifestFiles.size > 0;\n const missingManifestFileList = [...missingManifestFiles].sort((a, b) =>\n a.localeCompare(b),\n );\n const guidance = buildGuidance({\n selectedBlock,\n manualInsertionTargets,\n potentialDependencyFiles,\n potentialConflictFiles,\n primaryComponentResolved: Boolean(primaryComponentFile),\n addedDependencies,\n dependenciesVersionConflicts,\n missingManifestFiles: missingManifestFileList,\n });\n\n const messageParts: string[] = [];\n if (!primaryComponentFile) {\n messageParts.push(\n `Primary component file could not be resolved for block \"${normalizedBlockId}\" (${normalizedComponentId}). Review ${reportPath}, inspect the downloaded export at ${exportPath}, and resolve the component file manually before continuing.`,\n );\n } else if (conflictFiles.length > 0) {\n messageParts.push(\n `Primary component file conflicts with an existing local file. Review ${reportPath} for the exact diff before completing block-level transfer.`,\n );\n } else if (newFiles.length > 0) {\n messageParts.push(\n `Primary component file copied successfully with no direct conflicts. Review ${reportPath} for local details if needed.`,\n );\n } else {\n messageParts.push(\n `Primary component file already exists and is byte-identical. Review ${reportPath} for local details if needed.`,\n );\n }\n\n if (missingManifestFileList.length > 0) {\n messageParts.push(\n `Referenced export files are missing: ${missingManifestFileList.join(\", \")}. Review ${reportPath} and restore the missing files before treating this transfer as complete.`,\n );\n }\n\n if (addedDependencies.length > 0) {\n messageParts.push(\n \"Missing dependencies were added to package.json but are NOT installed yet. Run dependency installation manually with the package manager used by the target project.\",\n );\n }\n\n if (dependenciesVersionConflicts.length > 0) {\n messageParts.push(\n `Dependency version conflicts detected. Manual resolution is required before continuing block-level integration. Review ${reportPath} for full local details.`,\n );\n }\n\n messageParts.push(\n `Use selectedBlock.props with contentKey \"${selectedBlock.contentKey}\" for the chosen block instance.`,\n );\n messageParts.push(\n `manualInsertionTargets identifies where this component usually needs to be wired: ${manualInsertionTargets.join(\", \")}.`,\n );\n\n if (potentialDependencyFiles.length > 0) {\n messageParts.push(\n \"potentialDependencyFiles are prioritized hints, not mandatory full-page merge instructions. Review them first if the imported component behavior is incomplete.\",\n );\n }\n\n if (potentialConflictFiles.length > 0) {\n messageParts.push(\n \"potentialConflictFiles already differ locally. Compare them against the downloaded export only if the imported component behavior diverges.\",\n );\n }\n\n return {\n status: needsReview ? \"needs_review\" : \"completed\",\n message: messageParts.join(\" \"),\n reportPath,\n exportId,\n exportPath,\n manifestPath,\n originPageSlug: normalizedOriginSlug,\n blockId: normalizedBlockId,\n componentId: normalizedComponentId,\n selectedBlock,\n primaryComponentFile,\n manualInsertionTargets,\n newFiles,\n identicalFiles,\n conflictFiles,\n potentialDependencyFiles,\n potentialConflictFiles,\n addedDependencies,\n dependenciesVersionConflicts,\n guidance,\n };\n}\n","import {\n resolvePrimeUiApiKey,\n resolvePrimeUiProjectConfig,\n resolvePrimeUiTargetProjectRoot,\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\";\nimport type {\n PrimeUiCreateProjectApiPageInput,\n PrimeUiCreateProjectApiVariantInput,\n PrimeUiProjectPageDetailsResult,\n PrimeUiSubmitIssueReportInput,\n} from \"./types.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\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\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 private readonly pageDetailsBySlug = new Map<\n string,\n PrimeUiProjectPageDetailsResult\n >();\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 options?: {\n requireTargetProjectRoot?: boolean;\n },\n ): Promise<T> {\n const service = await this.createProjectSyncService(context, options);\n return operation(service);\n }\n\n private async withMutationService<T>(\n context: PrimeUiToolContext | undefined,\n operation: (service: ProjectSyncService) => Promise<T>,\n options?: {\n requireTargetProjectRoot?: boolean;\n },\n ): Promise<T> {\n // Mutating tools must always resolve and validate project config first.\n const service = await this.createProjectSyncService(context, options);\n return operation(service);\n }\n\n private async createProjectSyncService(\n context?: PrimeUiToolContext,\n options?: {\n requireTargetProjectRoot?: boolean;\n },\n ): Promise<ProjectSyncService> {\n const requireTargetProjectRoot = options?.requireTargetProjectRoot ?? true;\n const resolvedProjectConfig = await resolvePrimeUiProjectConfig(\n {\n cwd: this.getCwd(),\n projectRootFromTool: context?.projectRoot,\n projectRootFromSticky: this.stickyProjectRoot,\n projectRootFromEnv: this.env.PRIMEUI_PROJECT_ROOT,\n },\n {\n requireTargetProjectPath: requireTargetProjectRoot,\n },\n );\n\n const projectRoot = resolvedProjectConfig.projectRoot;\n const targetProjectRoot = requireTargetProjectRoot\n ? resolvePrimeUiTargetProjectRoot(\n projectRoot,\n resolvedProjectConfig.projectConfig,\n )\n : projectRoot;\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 pageDetailsBySlug: this.pageDetailsBySlug,\n });\n }\n\n async getProjectInfo(context?: PrimeUiToolContext) {\n return this.withService(context, (service) =>\n service.getProjectInfo(context),\n );\n }\n\n async getProjectDescription(context?: PrimeUiToolContext) {\n return this.withService(\n context,\n (service) => service.getProjectDescription(context),\n {\n requireTargetProjectRoot: false,\n },\n );\n }\n\n async upsertProjectDescription(\n projectDescription: string,\n context?: PrimeUiToolContext,\n ) {\n return this.withMutationService(\n context,\n async (service) => {\n const result = await service.upsertProjectDescription(\n projectDescription,\n context,\n );\n this.pageDetailsBySlug.clear();\n return result;\n },\n {\n requireTargetProjectRoot: false,\n },\n );\n }\n\n async listProjectPages(context?: PrimeUiToolContext) {\n return this.withService(\n context,\n (service) => service.listProjectPages(context),\n {\n requireTargetProjectRoot: false,\n },\n );\n }\n\n async getProjectPage(pageId: string, context?: PrimeUiToolContext) {\n return this.withService(\n context,\n (service) => service.getProjectPage(pageId, context),\n {\n requireTargetProjectRoot: false,\n },\n );\n }\n\n async createProjectPage(\n input: PrimeUiCreateProjectApiPageInput,\n context?: PrimeUiToolContext,\n ) {\n return this.withMutationService(\n context,\n async (service) => {\n const result = await service.createProjectPage(input, context);\n this.pageDetailsBySlug.clear();\n return result;\n },\n {\n requireTargetProjectRoot: false,\n },\n );\n }\n\n async listProjectPageVariants(pageId: string, context?: PrimeUiToolContext) {\n return this.withService(\n context,\n (service) => service.listProjectPageVariants(pageId, context),\n {\n requireTargetProjectRoot: false,\n },\n );\n }\n\n async getProjectPageVariant(\n pageId: string,\n variantId: string,\n context?: PrimeUiToolContext,\n ) {\n return this.withService(\n context,\n (service) => service.getProjectPageVariant(pageId, variantId, context),\n {\n requireTargetProjectRoot: false,\n },\n );\n }\n\n async createProjectPageVariant(\n pageId: string,\n input: PrimeUiCreateProjectApiVariantInput,\n context?: PrimeUiToolContext,\n ) {\n return this.withMutationService(\n context,\n async (service) => {\n const result = await service.createProjectPageVariant(\n pageId,\n input,\n context,\n );\n this.pageDetailsBySlug.clear();\n return result;\n },\n {\n requireTargetProjectRoot: false,\n },\n );\n }\n\n async setProjectPageActiveVariant(\n pageId: string,\n variantId: string,\n context?: PrimeUiToolContext,\n ) {\n return this.withMutationService(\n context,\n async (service) => {\n const result = await service.setProjectPageActiveVariant(\n pageId,\n variantId,\n context,\n );\n this.pageDetailsBySlug.clear();\n return result;\n },\n {\n requireTargetProjectRoot: false,\n },\n );\n }\n\n async submitIssueReport(\n input: PrimeUiSubmitIssueReportInput,\n context?: PrimeUiToolContext,\n ) {\n return this.withMutationService(\n context,\n (service) => service.submitIssueReport(input, context),\n {\n requireTargetProjectRoot: false,\n },\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 const result = await this.withService(context, (service) =>\n service.inspectPage(slug, context),\n );\n\n this.pageDetailsBySlug.set(normalizeSlug(slug), result);\n return result;\n }\n\n async copyPage(originPageSlug: string, context?: PrimeUiToolContext) {\n return this.withMutationService(context, (service) =>\n service.copyPage(originPageSlug, context),\n );\n }\n\n async copyComponent(\n originPageSlug: string,\n blockId: string,\n componentId: string,\n context?: PrimeUiToolContext,\n ) {\n return this.withMutationService(context, (service) =>\n service.copyComponent(originPageSlug, blockId, componentId, context),\n );\n }\n\n async copyExportable(exportableKey: string, context?: PrimeUiToolContext) {\n return this.withMutationService(context, (service) =>\n service.copyExportable(exportableKey, context),\n );\n }\n\n async clearTemp(context?: PrimeUiToolContext) {\n const result = await this.withMutationService(context, (service) =>\n service.clearTemp(context),\n );\n\n this.pageDetailsBySlug.clear();\n return result;\n }\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport { ZodError } from \"zod/v3\";\n\nimport { PrimeUiProjectConfigError } from \"./lib/project-link-config.js\";\nimport {\n initialInstructions,\n projectPageCreateValidationSchema,\n projectPageVariantCreateValidationSchema,\n toolProjectDescriptionGet,\n toolProjectDescriptionUpsert,\n toolProjectPagesList,\n toolProjectPageGet,\n toolProjectPageCreate,\n toolProjectPageVariantsList,\n toolProjectPageVariantGet,\n toolProjectPageVariantCreate,\n toolProjectPageActiveVariantSet,\n toolProjectIssueReportSubmit,\n toolClearTemp,\n toolCopyComponent,\n toolCopyExportable,\n toolInspectPage,\n toolCopyPage,\n toolCreateExport,\n toolDownloadExport,\n toolGetProjectInfo,\n toolListExports,\n} from \"./instructions.js\";\nimport { packageMetadata } from \"./package-metadata.js\";\nimport type { ProjectSyncSource } from \"./sources/project-sync-source.js\";\nimport type {\n PrimeUiCopyComponentResult,\n PrimeUiCopyExportableResult,\n PrimeUiCreateExportResult,\n PrimeUiIssueReportSubmitResult,\n PrimeUiCopyPageResult,\n PrimeUiDownloadResult,\n PrimeUiExport,\n PrimeUiInspectPageResult,\n PrimeUiProjectApiPagesResult,\n PrimeUiProjectApiVariantResult,\n PrimeUiProjectApiVariantSummaryResult,\n PrimeUiProjectApiVariantsResult,\n PrimeUiProjectDescriptionResult,\n PrimeUiProjectInfo,\n} from \"./types.js\";\n\nconst ZERO_ARG_PROJECT_ROOT_TOOLS: ReadonlySet<string> = new Set([\n \"get_project_info\",\n \"project_description_get\",\n \"project_pages_list\",\n \"list_exports\",\n \"create_export\",\n \"clear_temp\",\n] as const);\n\ntype ToolValidationShim = {\n inputSchema?: unknown;\n};\n\ntype McpServerValidationShim = {\n validateToolInput: (\n tool: ToolValidationShim,\n args: unknown,\n toolName: string,\n ) => Promise<unknown>;\n};\n\nfunction serializeToolData(data: unknown): string {\n try {\n return JSON.stringify(data, null, 2);\n } catch {\n return JSON.stringify(\n {\n error: \"Unable to serialize structuredContent for text output.\",\n },\n null,\n 2,\n );\n }\n}\n\nfunction okResult<T>(title: string, data: T): CallToolResult {\n const structuredContent = data as Record<string, unknown>;\n const serializedData = serializeToolData(structuredContent);\n return {\n content: [\n { type: \"text\", text: `${title} completed\\n\\n${serializedData}` },\n ],\n structuredContent,\n };\n}\n\nfunction errorResult(error: unknown): CallToolResult {\n if (error instanceof PrimeUiProjectConfigError) {\n const text = error.hint\n ? `primeui mcp error [${error.code}]: ${error.message}\\nHint: ${error.hint}`\n : `primeui mcp error [${error.code}]: ${error.message}`;\n\n return {\n isError: true,\n content: [{ type: \"text\", text }],\n };\n }\n\n if (error instanceof ZodError) {\n const details = error.issues\n .map((issue) => `${issue.path.join(\".\") || \"<root>\"}: ${issue.message}`)\n .join(\"; \");\n\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `primeui mcp error [INVALID_INPUT]: ${details}`,\n },\n ],\n };\n }\n\n const message = error instanceof Error ? error.message : String(error);\n return {\n isError: true,\n content: [\n { type: \"text\", text: `primeui mcp error [UNKNOWN_ERROR]: ${message}` },\n ],\n };\n}\n\nexport function createPrimeUiMcpServer(source: ProjectSyncSource): McpServer {\n const server = new McpServer(\n {\n name: \"primeui-mcp-server\",\n version: packageMetadata.version,\n },\n {\n instructions: initialInstructions,\n },\n );\n const serverWithValidationShim = server as unknown as McpServerValidationShim;\n const validateToolInput =\n serverWithValidationShim.validateToolInput.bind(server);\n\n serverWithValidationShim.validateToolInput = async (\n tool: ToolValidationShim,\n args: unknown,\n toolName: string,\n ): Promise<unknown> => {\n if (args === undefined && ZERO_ARG_PROJECT_ROOT_TOOLS.has(toolName)) {\n return validateToolInput(tool, {}, toolName);\n }\n\n return validateToolInput(tool, args, toolName);\n };\n\n server.registerTool(\n \"get_project_info\",\n toolGetProjectInfo,\n async (args): Promise<CallToolResult> => {\n const { projectRoot } = args ?? {};\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 \"project_description_get\",\n toolProjectDescriptionGet,\n async (args): Promise<CallToolResult> => {\n const { projectRoot } = args ?? {};\n try {\n const result: PrimeUiProjectDescriptionResult =\n await source.getProjectDescription({\n projectRoot,\n });\n return okResult(\"project_description_get\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"project_description_upsert\",\n toolProjectDescriptionUpsert,\n async ({ projectDescription, projectRoot }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiProjectDescriptionResult =\n await source.upsertProjectDescription(projectDescription, {\n projectRoot,\n });\n return okResult(\"project_description_upsert\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"project_pages_list\",\n toolProjectPagesList,\n async (args): Promise<CallToolResult> => {\n const { projectRoot } = args ?? {};\n try {\n const result: PrimeUiProjectApiPagesResult =\n await source.listProjectPages({\n projectRoot,\n });\n return okResult(\"project_pages_list\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"project_page_get\",\n toolProjectPageGet,\n async ({ pageId, projectRoot }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiProjectApiPagesResult =\n await source.getProjectPage(pageId, { projectRoot });\n return okResult(\"project_page_get\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"project_page_create\",\n toolProjectPageCreate,\n async (args): Promise<CallToolResult> => {\n try {\n const { projectRoot, ...input } =\n projectPageCreateValidationSchema.parse(args);\n const result: PrimeUiProjectApiPagesResult =\n await source.createProjectPage(input, { projectRoot });\n return okResult(\"project_page_create\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"project_page_variants_list\",\n toolProjectPageVariantsList,\n async ({ pageId, projectRoot }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiProjectApiVariantsResult =\n await source.listProjectPageVariants(pageId, {\n projectRoot,\n });\n return okResult(\"project_page_variants_list\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"project_page_variant_get\",\n toolProjectPageVariantGet,\n async ({ pageId, variantId, projectRoot }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiProjectApiVariantResult =\n await source.getProjectPageVariant(pageId, variantId, {\n projectRoot,\n });\n return okResult(\"project_page_variant_get\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"project_page_variant_create\",\n toolProjectPageVariantCreate,\n async (args): Promise<CallToolResult> => {\n try {\n const { pageId, projectRoot, ...input } =\n projectPageVariantCreateValidationSchema.parse(args);\n const result: PrimeUiProjectApiVariantSummaryResult =\n await source.createProjectPageVariant(pageId, input, {\n projectRoot,\n });\n return okResult(\"project_page_variant_create\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"project_page_active_variant_set\",\n toolProjectPageActiveVariantSet,\n async ({ pageId, variantId, projectRoot }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiProjectApiPagesResult =\n await source.setProjectPageActiveVariant(pageId, variantId, {\n projectRoot,\n });\n return okResult(\"project_page_active_variant_set\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"project_issue_report_submit\",\n toolProjectIssueReportSubmit,\n async ({ reportText, tags, projectRoot }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiIssueReportSubmitResult =\n await source.submitIssueReport(\n {\n reportText,\n tags,\n },\n { projectRoot },\n );\n return okResult(\"project_issue_report_submit\", result);\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 (args): Promise<CallToolResult> => {\n const { projectRoot } = args ?? {};\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 (args): Promise<CallToolResult> => {\n const { projectRoot } = args ?? {};\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 (args): Promise<CallToolResult> => {\n const { projectRoot } = args ?? {};\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 ({ originPageSlug, projectRoot }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiCopyPageResult = await source.copyPage(\n originPageSlug,\n { projectRoot },\n );\n return okResult(\"copy_page\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"copy_component\",\n toolCopyComponent,\n async ({\n originPageSlug,\n blockId,\n componentId,\n projectRoot,\n }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiCopyComponentResult = await source.copyComponent(\n originPageSlug,\n blockId,\n componentId,\n {\n projectRoot,\n },\n );\n return okResult(\"copy_component\", result);\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n\n server.registerTool(\n \"copy_exportable\",\n toolCopyExportable,\n async ({ exportableKey, projectRoot }): Promise<CallToolResult> => {\n try {\n const result: PrimeUiCopyExportableResult = await source.copyExportable(\n exportableKey,\n {\n projectRoot,\n },\n );\n return okResult(\"copy_exportable\", 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 exportManifestSchema = z.object({\n success: z\n .boolean()\n .describe(\"True when export processing succeeded for this item.\"),\n message: z.string().describe(\"Export status message for this item.\"),\n files: z\n .array(z.string())\n .describe(\"Authoritative exported file list for this item.\"),\n});\n\nconst exportableSchema = z.object({\n key: z.string().describe(\"Shared exportable key from export manifest.\"),\n isReadyToExport: z\n .boolean()\n .describe(\"True when this shared exportable was eligible for export.\"),\n manifest: exportManifestSchema.describe(\n \"Export manifest for this shared exportable, aligned with page manifest shape.\",\n ),\n});\n\nconst projectExportableSchema = z.object({\n key: z\n .string()\n .describe(\"Stable shared exportable key from PrimeUI project info.\"),\n description: z\n .string()\n .describe(\n \"Agent-oriented summary of what this shared exportable provides.\",\n ),\n isReadyToExport: z\n .boolean()\n .describe(\n \"Best-effort readiness snapshot for whether this shared exportable can be included in export now.\",\n ),\n});\n\nconst exportPageManifestSchema = exportManifestSchema.extend({\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 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 conflictFileSchema = z.object({\n targetPath: z\n .string()\n .describe(\"Relative conflict target path inside user project root.\"),\n isBinary: z\n .boolean()\n .describe(\"True if conflict comparison was treated as binary data.\"),\n});\n\nconst skippedCopyFileSchema = z.object({\n targetPath: z\n .string()\n .describe(\n \"Relative target path intentionally not copied into user project root.\",\n ),\n reason: z\n .enum([\"package_json_managed_as_dependencies\"])\n .describe(\n \"Machine-readable reason for skipping this file. package_json_managed_as_dependencies means package.json was handled as dependency guidance instead of direct file copy.\",\n ),\n});\n\nconst runtimeGuidanceArtifactSchema = z.object({\n kind: z\n .enum([\"export_manifest\", \"reference_export\", \"conflict_report\"])\n .describe(\n \"Artifact kind. export_manifest is the local sidecar manifest and authoritative file-level contract. reference_export is the downloaded export project used as the golden example when behavior diverges or integration is unclear. conflict_report is the saved local diff report for conflicting files that represent required imported functionality.\",\n ),\n path: z\n .string()\n .describe(\"Absolute local path to the generated or referenced artifact.\"),\n description: z\n .string()\n .describe(\"Why this artifact matters for the current tool result.\"),\n});\n\nconst runtimeGuidanceSchema = z.object({\n artifacts: z\n .array(runtimeGuidanceArtifactSchema)\n .describe(\n \"Concrete local artifacts produced or referenced by the tool result. Review these before continuing the import flow.\",\n ),\n requiredActions: z\n .string()\n .describe(\n \"Mandatory next-step instruction derived from the actual tool result. Follow this text before continuing the flow.\",\n ),\n});\n\nconst copyComponentSelectedBlockSchema = z.object({\n blockId: z.string().describe(\"Selected block instance identifier.\"),\n componentId: z\n .string()\n .describe(\"Canonical component file identity from block.key.\"),\n slot: z\n .string()\n .nullable()\n .describe(\"Optional slot value for the selected block instance.\"),\n props: z\n .record(z.unknown())\n .nullable()\n .describe(\"Exact props payload for the selected block instance.\"),\n occurrenceIndex: z\n .number()\n .describe(\n \"1-based position of this block among components with the same componentId.\",\n ),\n contentKey: z\n .string()\n .describe(\n \"Content binding key for this selected instance. First instance uses componentId, later duplicates append -2, -3, and so on.\",\n ),\n});\n\nconst copyComponentGuidanceSchema = z.object({\n requiredActions: z\n .array(z.string())\n .describe(\"Concrete next actions for finishing component transfer.\"),\n notes: z\n .array(z.string())\n .describe(\"Important semantics and caveats for this transfer result.\"),\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 optionalProjectRootInputObjectSchema = z\n .object({\n projectRoot: projectRootInputSchema,\n })\n .describe(\"Optional tool input with project root override.\");\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 and shared exportables\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 + shared exportables\n6. download_export -> download to temp directory\n7. copy_page, copy_component, or copy_exportable -> transfer one selected page, one selected block-level component, or one selected shared exportable safely\n8. Reconcile integration points, dependency follow-up, and reported conflicts\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\nADDITIONAL CAPABILITIES:\n- PrimeUI MCP also exposes atomic external API tools for project description, project pages, page variants, active-variant selection, and issue reports.\n- These atomic tools are OPTIONAL additional capabilities for extended scenarios.\n- They are NOT part of the primary import/export workflow above.\n- Do not replace get_project_info/create_export/download_export/copy_* with the additional API tools when the user wants the standard page import/export flow.\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 - shared exportables list ('export.exportables').\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- After download_export, choose the copy tool based on what the user wants to transfer:\n - copy_page for page manifests,\n - copy_component for one selected block-level component instance,\n - copy_exportable for shared exportables.\n- Always call copy_page, copy_component, or copy_exportable 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- copy_component uses inspect_page block data plus downloaded export artifacts.\n It copies only the canonical component file that can be resolved reliably for the selected componentId.\n- copy_component returns exact selected block props, occurrenceIndex, and contentKey for the chosen blockId.\n- copy_component treats manualInsertionTargets, potentialDependencyFiles, and potentialConflictFiles as review hints, not as mandatory full-page merge instructions.\n- copy_exportable reads and validates files only from 'export.exportables[].manifest.files' in local sidecar manifest.\n- copy_exportable returns status 'not_available' when the shared exportable is disabled, not configured, or currently has no copyable export files.\n- copy_exportable never copies package.json automatically.\n Dependency follow-up is returned via 'missedDependencies' and 'dependenciesVersionConflicts' and must be handled explicitly by the agent or user.\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 plus a lightweight inventory of pages and shared exportables you can reason about before export.\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 user already requested specific shared exportables, verify those exportables exist in the lightweight exportables inventory and note their readiness before create_export.\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 or shared exportables to add or update now and keep this decision in thread context.\n- Import works one page or one shared exportable at a time. Multiple transfers are allowed, but each item is handled explicitly.\n- Only after user decision is clear, proceed to create_export.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: optionalProjectRootInputObjectSchema,\n outputSchema: z.object({\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 exportables: z\n .array(projectExportableSchema)\n .describe(\n \"Lightweight inventory of shared exportables (for example logo, cookie banner, announcement banner, theme, image assets). Use description + isReadyToExport to plan imports before create_export.\",\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: z.object({\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: optionalProjectRootInputObjectSchema,\n outputSchema: z.object({\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 shared exportables.\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- Verify that any user-selected shared exportables are present in export.exportables.\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 pages can later be transferred via copy_page or copy_component, and shared exportables can be transferred separately via copy_exportable.\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- If guidance is present in the result, read guidance.artifacts and follow guidance.requiredActions before continuing.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: optionalProjectRootInputObjectSchema,\n outputSchema: z.object({\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 exportables: z\n .array(exportableSchema)\n .describe(\n \"Shared exportable manifest. These entries 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 guidance: runtimeGuidanceSchema\n .optional()\n .describe(\n \"Mandatory runtime guidance for local artifacts created during export. Present only on successful tool results.\",\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- For each selected block-level component instance, call copy_component with:\n - originPageSlug (required),\n - blockId (required),\n - componentId (required).\n- For each selected shared exportable, call copy_exportable with:\n - exportableKey (required).\n- Treat conflicts as normal and expected. If copy_page returns needs_review, stop follow-up integration and resolve manually first.\n- If copy_component returns needs_review, stop and resolve the primary-file or direct-conflict issue before continuing block-level integration.\n- If copy_exportable returns not_available, stop and tell the user the shared exportable must be enabled or configured in PrimeUI first.\n- Do not force cleanup at flow end; keep downloaded export files available for validation and follow-up checks.\n- If guidance is present in the result, read guidance.artifacts and follow guidance.requiredActions before choosing the next copy tool.\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: z.object({\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 and copy_component.\",\n ),\n guidance: runtimeGuidanceSchema\n .optional()\n .describe(\n \"Mandatory runtime guidance for the downloaded export and manifest artifacts. Present only on successful tool results.\",\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\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- Writes full conflict diffs to a local report file in .primeui/temp/exports/[exportId].copy-report-[copyId].json.\n- Reports:\n a) copied new files (relative target paths),\n b) identical existing files (relative target paths),\n c) conflicting files as lightweight metadata (relative target paths + binary flag, no inline 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- If status is needs_review, page import is NOT complete and manual review is required before continuing. This can be caused by file conflicts or dependency version conflicts.\n- If guidance is present in the result, read guidance.artifacts and follow guidance.requiredActions before continuing integration.\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 },\n outputSchema: z.object({\n status: z\n .enum([\"completed\", \"needs_review\"])\n .describe(\n \"Decision state for next step. needs_review means manual review is required before follow-up integration because of file conflicts or dependency version conflicts.\",\n ),\n message: z\n .string()\n .describe(\n \"Decision-oriented summary that includes resolved reportPath and manual follow-up instructions when needed.\",\n ),\n reportPath: z\n .string()\n .describe(\n \"Absolute path to saved local report with full conflict diffs and details.\",\n ),\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 sourcePagePath: z\n .string()\n .describe(\"Source page path relative to export root.\"),\n sourceComponentsPath: z\n .string()\n .describe(\"Source components directory relative to export root.\"),\n newFiles: z\n .array(z.string())\n .describe(\n \"Relative target paths for new files copied into user project.\",\n ),\n identicalFiles: z\n .array(z.string())\n .describe(\"Relative target paths for existing byte-identical files.\"),\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 guidance: runtimeGuidanceSchema\n .optional()\n .describe(\n \"Mandatory runtime guidance for export artifacts and next steps after this page copy result. Present only on successful tool results.\",\n ),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n};\n\n// ============================================================\n// Tool: copy_component\n// ============================================================\n\nexport const toolCopyComponent = {\n title: \"PrimeUI Copy Component\",\n description: `Safely copy one block-level component from downloaded export into the user's local project. Works only with local files in .primeui/temp/exports and uses inspect_page semantics for block selection.\n\nWHEN TO USE:\n- Call this AFTER download_export.\n- Call this when the user wants one selected block instance, not a full page transfer.\n- Pass both blockId and componentId so the tool can bind exact props for the selected instance while still resolving the canonical component file identity.\n\nBEHAVIOR:\n- Reads export sidecar manifest to resolve originPageSlug -> pagePath/componentsPath.\n- Matches the selected block from inspect_page-compatible page details using blockId + componentId.\n- Computes selectedBlock.occurrenceIndex and selectedBlock.contentKey for duplicate component types on the same page.\n- Reuses the most recent inspect_page snapshot for selected block metadata when available instead of re-fetching live page details at copy time.\n- Resolves the primary component file from downloaded export using:\n - [componentsPath]/[componentId].tsx\n - [componentsPath]/[componentId]/index.tsx\n- Copies only the reliably resolved primary component file.\n- Scans the selected component tree for external package imports, adds missing dependencies to package.json, and reports version conflicts.\n- Never overwrites an existing conflicting primary component file.\n- Writes full direct and potential conflict details to a local report file in .primeui/temp/exports/[exportId].copy-component-report-[copyId].json.\n- Reports:\n a) selectedBlock with exact props for the chosen instance,\n b) primaryComponentFile when resolved,\n c) copied new or identical primary files,\n d) conflictFiles only for files actually attempted during copy,\n e) addedDependencies / dependenciesVersionConflicts for dependency follow-up,\n f) manualInsertionTargets for likely integration points,\n g) potentialDependencyFiles / potentialConflictFiles as prioritized hints for manual review.\n- If status is needs_review, stop and resolve the reported primary-file, missing-manifest-file, or dependency-version issue before treating the component transfer as complete.\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 blockId: z\n .string()\n .describe(\n \"Selected block instance identifier from inspect_page output. Required when the same componentId appears multiple times on one page.\",\n ),\n componentId: z\n .string()\n .describe(\n \"Selected component identity from inspect_page output (block.key). This defines the canonical component file identity.\",\n ),\n },\n outputSchema: z.object({\n status: z\n .enum([\"completed\", \"needs_review\"])\n .describe(\n \"Decision state for next step. needs_review means the primary component file could not be resolved safely or directly copied without conflict.\",\n ),\n message: z\n .string()\n .describe(\n \"Decision-oriented summary with reportPath and the next manual actions for completing component transfer.\",\n ),\n reportPath: z\n .string()\n .describe(\n \"Absolute path to saved local report with direct conflicts, potential conflicts, and selected block metadata.\",\n ),\n exportId: z\n .string()\n .describe(\"Resolved local export identifier used for component copy.\"),\n exportPath: z\n .string()\n .describe(\"Absolute path to local extracted export project root.\"),\n manifestPath: z\n .string()\n .describe(\n \"Absolute path to the local sidecar export manifest used during component copy.\",\n ),\n originPageSlug: z\n .string()\n .describe(\"Normalized source page slug requested for copy.\"),\n blockId: z\n .string()\n .describe(\"Normalized selected block instance identifier.\"),\n componentId: z\n .string()\n .describe(\"Normalized component file identity requested for copy.\"),\n selectedBlock: copyComponentSelectedBlockSchema.describe(\n \"Resolved selected block instance with exact props and duplicate-instance metadata.\",\n ),\n primaryComponentFile: z\n .string()\n .nullable()\n .describe(\n \"Relative target path for the canonical component file when resolved, otherwise null.\",\n ),\n manualInsertionTargets: z\n .array(z.string())\n .describe(\n \"Relative target paths that usually need manual wiring for this component instance, typically the page file.\",\n ),\n newFiles: z\n .array(z.string())\n .describe(\n \"Relative target paths for new files copied into user project. For copy_component this usually contains only the primary component file.\",\n ),\n identicalFiles: z\n .array(z.string())\n .describe(\n \"Relative target paths for existing byte-identical copied files.\",\n ),\n conflictFiles: z\n .array(conflictFileSchema)\n .describe(\n \"Files that were actually attempted during copy and already exist with different content. 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 potentialDependencyFiles: z\n .array(z.string())\n .describe(\n \"Prioritized hint files related to the selected page manifest. Review them first if the copied component is incomplete.\",\n ),\n potentialConflictFiles: z\n .array(z.string())\n .describe(\n \"Potential dependency files that already differ locally. These are hints only and are not treated as direct copy conflicts.\",\n ),\n guidance: copyComponentGuidanceSchema.describe(\n \"Structured follow-up guidance for completing block-level transfer with the selected props and related files.\",\n ),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n};\n\n// ============================================================\n// Tool: copy_exportable\n// ============================================================\n\nexport const toolCopyExportable = {\n title: \"PrimeUI Copy Exportable\",\n description: `Safely copy one shared exportable 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 shared exportable.\n\nBEHAVIOR:\n- Reads export sidecar manifest to resolve exportableKey -> export.exportables[] entry.\n- Copies and validates files strictly from export.exportables[].manifest.files for the selected shared exportable.\n- Never copies package.json automatically. package.json is treated as dependency guidance only.\n- Returns status not_available when the shared exportable is disabled, not configured, or currently has no copyable export files.\n- Never overwrites existing conflicting files.\n- Writes full conflict diffs to a local report file in .primeui/temp/exports/[exportId].copy-exportable-report-[copyId].json.\n- Reports:\n a) copied new files (relative target paths),\n b) identical existing files (relative target paths),\n c) conflicting files as lightweight metadata (relative target paths + binary flag, no inline diff),\n d) skipped files such as package.json,\n e) missedDependencies that must be handled explicitly,\n f) dependency version conflicts (report-only, no auto upgrade).\n- missedDependencies are a substantial and inseparable part of the shared exportable functionality. They are never added or installed automatically.\n- If status is needs_review, shared exportable transfer is NOT complete and manual review is required before continuing.\n\n${WORKFLOW_SUMMARY}`,\n inputSchema: {\n projectRoot: projectRootInputSchema,\n exportableKey: z\n .string()\n .describe(\n \"Shared exportable key from PrimeUI export payload, for example 'logo', 'theme', 'cookieBanner', 'announcementBanner', or 'imageAssets'.\",\n ),\n },\n outputSchema: z.object({\n status: z\n .enum([\"completed\", \"needs_review\", \"not_available\"])\n .describe(\n \"Decision state for next step. not_available means the shared exportable must be enabled or configured in PrimeUI first. needs_review means file conflicts or dependency version conflicts require manual resolution.\",\n ),\n message: z\n .string()\n .describe(\n \"Decision-oriented summary with resolved reportPath and mandatory follow-up guidance for availability, conflicts, or dependency handling.\",\n ),\n reportPath: z\n .string()\n .nullable()\n .describe(\n \"Absolute path to saved local report with full conflict diffs and details, or null when the exportable is not available for copy.\",\n ),\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 exportableKey: z\n .string()\n .describe(\"Normalized shared exportable key requested for copy.\"),\n isReadyToExport: z\n .boolean()\n .describe(\n \"Readiness flag from export manifest for the selected shared exportable.\",\n ),\n manifestSuccess: z\n .boolean()\n .describe(\n \"Success flag from export manifest for the selected shared exportable.\",\n ),\n manifestMessage: z\n .string()\n .describe(\n \"Manifest message from export payload for the selected shared exportable.\",\n ),\n manifestFiles: z\n .array(z.string())\n .describe(\n \"Authoritative list of manifest files for this shared exportable before any copy-time filtering.\",\n ),\n newFiles: z\n .array(z.string())\n .describe(\n \"Relative target paths for new files copied into user project.\",\n ),\n identicalFiles: z\n .array(z.string())\n .describe(\"Relative target paths for existing byte-identical files.\"),\n conflictFiles: z\n .array(conflictFileSchema)\n .describe(\n \"Files that already exist and differ from export version. Never overwritten.\",\n ),\n skippedFiles: z\n .array(skippedCopyFileSchema)\n .describe(\n \"Manifest files intentionally not copied, for example package.json which is handled via dependency guidance.\",\n ),\n missedDependencies: z\n .array(dependencyToAddSchema)\n .describe(\n \"Required packages missing in user's package.json. These are never added or installed automatically.\",\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 totalManifestFiles: z\n .number()\n .describe(\n \"Total number of manifest files listed for this shared exportable before copy-time filtering.\",\n ),\n totalCandidateFiles: z\n .number()\n .describe(\n \"Total number of candidate files considered for direct copy after filtering skipped files such as package.json.\",\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 skippedFiles: z\n .number()\n .describe(\"Number of manifest files intentionally skipped.\"),\n missedDependencies: z\n .number()\n .describe(\"Count of missing dependency packages reported.\"),\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: optionalProjectRootInputObjectSchema,\n outputSchema: z.object({\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\nconst projectDescriptionOutputSchema = z.object({\n projectDescription: z\n .string()\n .describe(\n \"Current shared project description string. Empty string means the description is not set.\",\n ),\n});\n\nconst projectApiWireframeStatusSchema = z\n .enum([\"pending\", \"generating\", \"ready\", \"error\"])\n .describe(\n \"Shared page readiness status from the external API. ready means export-selected content exists; generating means background AI work is still running.\",\n );\n\nconst projectApiVariantSummarySchema = z.object({\n id: z\n .string()\n .describe(\"Stable variant identifier within the scoped PrimeUI project.\"),\n name: z.string().describe(\"Human-readable variant name.\"),\n isActive: z\n .boolean()\n .describe(\n \"True when this variant is currently selected as the page active variant for export.\",\n ),\n isGenerating: z\n .boolean()\n .describe(\n \"True when background AI generation is still running for this variant.\",\n ),\n});\n\nconst pageGenerationTypeSchema = z\n .enum([\n \"landing\",\n \"pricing\",\n \"blogIndex\",\n \"blogPost\",\n \"contact-us\",\n \"docs\",\n \"legal\",\n ])\n .describe(\n \"Supported PrimeUI page type. Must match the external API page type enum.\",\n );\n\nconst projectApiPageResourceSchema = z.object({\n id: z.string().describe(\"Stable PrimeUI page identifier.\"),\n title: z.string().describe(\"Human-readable page title.\"),\n slug: z\n .string()\n .describe(\"PrimeUI route slug for the page, for example '/', '/pricing'.\"),\n pageType: pageGenerationTypeSchema,\n isReadyToExport: z\n .boolean()\n .describe(\n \"True when the page currently has an export-selected active variant.\",\n ),\n wireframeStatus: projectApiWireframeStatusSchema,\n variants: z\n .array(projectApiVariantSummarySchema)\n .describe(\"Lightweight variant summaries attached to the page resource.\"),\n});\n\nconst projectApiPagesOutputSchema = z.object({\n pages: z\n .array(projectApiPageResourceSchema)\n .describe(\n \"Project pages payload returned by the external API. GET list may include many entries; create/get/set-active responses usually return one entry.\",\n ),\n});\n\nconst projectApiVariantsOutputSchema = z.object({\n variants: z\n .array(projectApiVariantSummarySchema)\n .describe(\"Variant summaries for one selected page.\"),\n});\n\nconst projectApiVariantSummaryResultSchema = z.object({\n variant: projectApiVariantSummarySchema.describe(\n \"Variant summary returned immediately after creation.\",\n ),\n});\n\nconst projectApiVariantOutputSchema = z.object({\n variant: z.object({\n id: z\n .string()\n .describe(\"Stable variant identifier within the selected page.\"),\n name: z.string().describe(\"Human-readable variant name.\"),\n isActive: z\n .boolean()\n .describe(\"True when this variant is currently active for export.\"),\n isGenerating: z\n .boolean()\n .describe(\n \"True while background AI generation for this variant is still running.\",\n ),\n components: z\n .array(pageComponentSchema)\n .describe(\"Resolved component payload for the selected variant.\"),\n }),\n});\n\nconst issueReportSubmitOutputSchema = z.object({\n accepted: z\n .literal(true)\n .describe(\"Always true when the issue report was accepted by the API.\"),\n ticketId: z\n .string()\n .describe(\"Generated issue report identifier returned by the API.\"),\n});\n\nconst createContentModeSchema = z\n .enum([\"ai\", \"empty\", \"components\"])\n .describe(\n \"Content creation mode. empty creates an empty resource, components uses ordered componentIds, ai queues generation from prompt.\",\n );\n\nconst createPageOrVariantSchema = <T extends z.ZodRawShape>(shape: T) =>\n z.object(shape).superRefine((value, ctx) => {\n const contentMode = value.contentMode;\n const componentIds = value.componentIds;\n const prompt = value.prompt;\n\n if (contentMode === \"ai\") {\n if (Array.isArray(componentIds) && componentIds.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"componentIds are not allowed in ai mode.\",\n path: [\"componentIds\"],\n });\n }\n return;\n }\n\n if (contentMode === \"empty\") {\n if (Array.isArray(componentIds) && componentIds.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"componentIds are not allowed in empty mode.\",\n path: [\"componentIds\"],\n });\n }\n if (typeof prompt === \"string\" && prompt.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"prompt is not allowed in empty mode.\",\n path: [\"prompt\"],\n });\n }\n return;\n }\n\n if (!Array.isArray(componentIds) || componentIds.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"componentIds are required in components mode.\",\n path: [\"componentIds\"],\n });\n }\n if (typeof prompt === \"string\" && prompt.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"prompt is not allowed in components mode.\",\n path: [\"prompt\"],\n });\n }\n });\n\nconst projectDescriptionUpsertInputSchema = z.object({\n projectRoot: projectRootInputSchema,\n projectDescription: z\n .string()\n .describe(\n \"Project description to store. Empty or whitespace-only input clears the saved description.\",\n ),\n});\n\nconst projectPageCreateBaseInputSchema = z.object({\n projectRoot: projectRootInputSchema,\n slug: z\n .string()\n .describe(\"Route slug for the new page, for example '/pricing'.\"),\n title: z.string().describe(\"Human-readable page title.\"),\n pageType: pageGenerationTypeSchema,\n contentMode: createContentModeSchema,\n componentIds: z\n .array(z.string())\n .optional()\n .describe(\n \"Ordered component IDs for components mode. Omit for empty or ai mode.\",\n ),\n prompt: z\n .string()\n .optional()\n .describe(\"Optional AI prompt used only in ai mode.\"),\n});\n\nexport const projectPageCreateValidationSchema = createPageOrVariantSchema(\n projectPageCreateBaseInputSchema.shape,\n);\n\nconst projectPageVariantCreateBaseInputSchema = z.object({\n projectRoot: projectRootInputSchema,\n pageId: z.string().describe(\"Target page identifier for the new variant.\"),\n name: z\n .string()\n .optional()\n .describe(\n \"Optional explicit variant name. When omitted, Studio assigns one.\",\n ),\n contentMode: createContentModeSchema,\n componentIds: z\n .array(z.string())\n .optional()\n .describe(\n \"Ordered component IDs for components mode. Omit for empty or ai mode.\",\n ),\n prompt: z\n .string()\n .optional()\n .describe(\"Optional AI prompt used only in ai mode.\"),\n});\n\nexport const projectPageVariantCreateValidationSchema =\n createPageOrVariantSchema(projectPageVariantCreateBaseInputSchema.shape);\n\nconst projectIssueReportSubmitInputSchema = z.object({\n projectRoot: projectRootInputSchema,\n reportText: z\n .string()\n .describe(\"Issue report text to submit for the scoped project.\"),\n tags: z\n .array(z.string())\n .optional()\n .describe(\n \"Optional issue report tags. Empty values are trimmed and dropped by the API.\",\n ),\n});\n\n// ============================================================\n// Tool: project_description_get\n// ============================================================\n\nexport const toolProjectDescriptionGet = {\n title: \"PrimeUI Project Description Get\",\n description: `Atomic external API helper. Returns the current shared project description for the scoped PrimeUI project.\n\nWHEN TO USE:\n- Use this when the caller needs only the project description text.\n- This is an ADDITIONAL capability outside the primary import/export workflow.\n- Do not treat this as part of the page download or export flow.\n\nAFTER CALLING:\n- Use the returned projectDescription directly.\n- Empty string means the project currently has no saved description.`,\n inputSchema: optionalProjectRootInputObjectSchema,\n outputSchema: projectDescriptionOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: project_description_upsert\n// ============================================================\n\nexport const toolProjectDescriptionUpsert = {\n title: \"PrimeUI Project Description Upsert\",\n description: `Atomic external API helper. Creates, updates, or clears the shared project description for the scoped PrimeUI project.\n\nWHEN TO USE:\n- Use this only when the caller explicitly wants to change the shared project description.\n- This is an ADDITIONAL capability outside the primary import/export workflow.\n- Whitespace-only input is valid and clears the saved description.\n\nAFTER CALLING:\n- Treat the returned projectDescription as the source of truth after persistence.`,\n inputSchema: projectDescriptionUpsertInputSchema,\n outputSchema: projectDescriptionOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: project_pages_list\n// ============================================================\n\nexport const toolProjectPagesList = {\n title: \"PrimeUI Project Pages List\",\n description: `Atomic external API helper. Returns the current page inventory with page-level readiness and lightweight variant summaries.\n\nWHEN TO USE:\n- Use this when the caller needs page inventory from the external API itself.\n- This is an ADDITIONAL capability outside the primary import/export workflow.\n- Do not replace get_project_info with this tool when the goal is the standard import/export flow; get_project_info remains the primary entry point there.\n\nAFTER CALLING:\n- Use the returned page resources as-is.\n- If the caller needs one specific page by ID, use project_page_get.`,\n inputSchema: optionalProjectRootInputObjectSchema,\n outputSchema: projectApiPagesOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: project_page_get\n// ============================================================\n\nexport const toolProjectPageGet = {\n title: \"PrimeUI Project Page Get\",\n description: `Atomic external API helper. Returns one page by pageId using the same shape as project_pages_list.\n\nWHEN TO USE:\n- Use this when the caller already knows the target pageId.\n- This is an ADDITIONAL capability outside the primary import/export workflow.\n\nAFTER CALLING:\n- The response stays endpoint-aligned and returns a pages array envelope from the external API.`,\n inputSchema: {\n projectRoot: projectRootInputSchema,\n pageId: z\n .string()\n .describe(\"PrimeUI page identifier to fetch from the external API.\"),\n },\n outputSchema: projectApiPagesOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: project_page_create\n// ============================================================\n\nexport const toolProjectPageCreate = {\n title: \"PrimeUI Project Page Create\",\n description: `Atomic external API helper. Creates a new page and its initial variant.\n\nWHEN TO USE:\n- Use this only when the caller explicitly wants to create a page through the external API.\n- This is an ADDITIONAL capability outside the primary import/export workflow.\n- Do not encode follow-up chains here. Creating more variants later is a possible next step, not a requirement.\n\nAFTER CALLING:\n- The returned pages payload reflects the immediate API result for the created page.\n- If contentMode is ai, the initial variant may still be generating.`,\n inputSchema: projectPageCreateBaseInputSchema,\n outputSchema: projectApiPagesOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: project_page_variants_list\n// ============================================================\n\nexport const toolProjectPageVariantsList = {\n title: \"PrimeUI Project Page Variants List\",\n description: `Atomic external API helper. Returns lightweight variant summaries for one page.\n\nWHEN TO USE:\n- Use this when the caller needs the variant inventory for an existing pageId.\n- This is an ADDITIONAL capability outside the primary import/export workflow.`,\n inputSchema: {\n projectRoot: projectRootInputSchema,\n pageId: z\n .string()\n .describe(\"PrimeUI page identifier whose variants should be listed.\"),\n },\n outputSchema: projectApiVariantsOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: project_page_variant_get\n// ============================================================\n\nexport const toolProjectPageVariantGet = {\n title: \"PrimeUI Project Page Variant Get\",\n description: `Atomic external API helper. Returns one variant with its component payload.\n\nWHEN TO USE:\n- Use this when the caller already knows both pageId and variantId.\n- This is an ADDITIONAL capability outside the primary import/export workflow.`,\n inputSchema: {\n projectRoot: projectRootInputSchema,\n pageId: z\n .string()\n .describe(\"PrimeUI page identifier that owns the variant.\"),\n variantId: z.string().describe(\"PrimeUI variant identifier to fetch.\"),\n },\n outputSchema: projectApiVariantOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: project_page_variant_create\n// ============================================================\n\nexport const toolProjectPageVariantCreate = {\n title: \"PrimeUI Project Page Variant Create\",\n description: `Atomic external API helper. Creates one new variant for an existing page.\n\nWHEN TO USE:\n- Use this only when the caller explicitly wants a new variant on an existing page.\n- This is an ADDITIONAL capability outside the primary import/export workflow.\n- The new variant is created independently. Becoming active is a separate decision handled by project_page_active_variant_set.\n\nAFTER CALLING:\n- Treat the returned variant payload as the immediate API result.\n- The create endpoint returns a lightweight variant summary only, not the full component payload.\n- If contentMode is ai, the variant may still be generating.`,\n inputSchema: projectPageVariantCreateBaseInputSchema,\n outputSchema: projectApiVariantSummaryResultSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: project_page_active_variant_set\n// ============================================================\n\nexport const toolProjectPageActiveVariantSet = {\n title: \"PrimeUI Project Page Active Variant Set\",\n description: `Atomic external API helper. Sets the export-selected active variant for one page.\n\nWHEN TO USE:\n- Use this only when the caller explicitly wants to switch the active variant.\n- This is an ADDITIONAL capability outside the primary import/export workflow.\n- This tool performs exactly one operation: set the active variant. It does not create variants and does not export anything.`,\n inputSchema: {\n projectRoot: projectRootInputSchema,\n pageId: z\n .string()\n .describe(\"PrimeUI page identifier whose active variant should change.\"),\n variantId: z\n .string()\n .describe(\"Variant identifier that should become active for export.\"),\n },\n outputSchema: projectApiPagesOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n};\n\n// ============================================================\n// Tool: project_issue_report_submit\n// ============================================================\n\nexport const toolProjectIssueReportSubmit = {\n title: \"PrimeUI Project Issue Report Submit\",\n description: `Atomic external API helper. Submits an issue report for the scoped PrimeUI project.\n\nWHEN TO USE:\n- Use this when the caller wants to send a focused issue report through the external API.\n- This is an ADDITIONAL capability outside the primary import/export workflow.\n- This tool is independent from export, page, and variant flows.\n\nAFTER CALLING:\n- Use ticketId for user-facing confirmation or follow-up references.`,\n inputSchema: projectIssueReportSubmitInputSchema,\n outputSchema: issueReportSubmitOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n};\n"],"mappings":"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","names":["path","path","stat","path","path","z","path","z","path","path","stat","path","stat","path","mapConfigStatus","stat","path","path","readFile","readFile","stat","writeFile","path","readFile","stat","path","i","j","readFile","readdir","stat","path","path","readFile","fileExists","stat","readdir","path","fileExists","stat","readFile","writeFile","readFile","writeFile","path","path","fileExists","readFile","writeFile","readFile","stat","writeFile","path","normalizeSlug","resolveTargetFilePath","path","readFile","fileExists","writeFile","stat","path","normalizeSlug","readFile","normalizeSlug","z"]}