UNPKG

@phren/cli

Version:

Knowledge layer for AI agents - CLI, MCP server, and data layer

48 lines (47 loc) • 1.65 kB
import * as fs from "fs"; import * as path from "path"; import { debugLog, homeDir, homePath, findPhrenPath } from "./shared.js"; import { errorMessage } from "./utils.js"; const DEFAULT_SEARCH_PATHS = [ homeDir(), homePath("Sites"), homePath("Projects"), homePath("projects"), homePath("Code"), homePath("code"), homePath("dev"), homePath("src"), homePath("repos"), homePath("workspace"), ]; export function findProjectDir(name) { // First check the project's registered sourcePath in phren.project.yaml try { const phrenPath = findPhrenPath(); if (phrenPath) { const yamlPath = path.join(phrenPath, name, "phren.project.yaml"); if (fs.existsSync(yamlPath)) { const content = fs.readFileSync(yamlPath, "utf-8"); const match = content.match(/^sourcePath:\s*(.+)$/m); if (match) { const sp = match[1].trim(); if (fs.existsSync(sp) && fs.statSync(sp).isDirectory()) return sp; } } } } catch { /* fall through to search paths */ } const extra = process.env.PROJECTS_DIR ? [process.env.PROJECTS_DIR] : []; for (const base of [...extra, ...DEFAULT_SEARCH_PATHS]) { const candidate = path.join(base, name); try { if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) return candidate; } catch (err) { debugLog(`findProjectDir: failed to check ${candidate}: ${errorMessage(err)}`); } } return null; }