import path from 'node:path' import fs from 'node:fs' import process from 'node:process' function hasComponentProjectSourceDir(directory: string): boolean { return ( fs.existsSync(path.join(directory, 'src', 'components')) || fs.existsSync(path.join(directory, 'src', 'video', 'chapters')) ) } function findComponentProjectInstallRoot(startDirectory: string): string | undefined { let currentDirectory = path.resolve(startDirectory) for (;;) { if (hasComponentProjectSourceDir(currentDirectory)) { return currentDirectory } const parentDirectory = path.dirname(currentDirectory) if (parentDirectory === currentDirectory) { return undefined } currentDirectory = parentDirectory } } export function resolveComponentProjectInstallRoot(): string { const candidates = [ process.cwd(), process.env.INIT_CWD, process.env.npm_config_local_prefix, ].filter((value): value is string => Boolean(value && value.trim())) for (const candidate of candidates) { const resolved = findComponentProjectInstallRoot(candidate) if (resolved) { return resolved } } return path.resolve(process.cwd()) } export function resolveComponentProjectGeneratedDocsDir( projectRoot = resolveComponentProjectInstallRoot(), ): string { return path.join( projectRoot, '.agents', './skills/metadata/metadata', 'project-allow-component', 'components', ) } export function resolveComponentProjectGeneratedManifestPath( projectRoot = resolveComponentProjectInstallRoot(), ): string { return path.join( projectRoot, '.agents', './skills/metadata/metadata', 'project-allow-component', 'component-project-helper.manifest.json', ) }