/** * Greenfield/Brownfield project discovery & classification (Phase 5). * * Classifies a project directory as either: * - **greenfield**: empty or nearly-empty, no code, no git history * - **brownfield**: existing codebase with files, possibly git history * * Used by `cleo init` (Phase 5 bootstrap) to choose the correct seed * pipeline: * - Greenfield → seed a Vision/PRD "research" epic so the agent starts * from a blank-slate planning posture * - Brownfield → invoke codebase mapping and anchor findings in BRAIN as * baseline context (per ULTRAPLAN §1 "Context Anchoring") * * Classification is intentionally simple and transparent — no heuristics, * no ML, just file/directory presence checks. A project qualifies as * brownfield if ANY of these are true: * - `.git/` directory exists (under a size threshold we still treat as * brownfield since history matters) * - source files exist under common source dirs (src, lib, app, packages) * - any manifest file exists (package.json, Cargo.toml, go.mod, pyproject.toml) * - markdown docs already exist (README.md, docs/) * * @task Phase 5 — Greenfield/brownfield bootstrap + context anchoring */ /** * Classification result for a project directory. */ export interface ProjectClassification { /** Project type: 'greenfield' (empty/new) or 'brownfield' (existing). */ kind: 'greenfield' | 'brownfield'; /** Absolute path that was classified. */ directory: string; /** Signal list — which indicators led to the classification. */ signals: ClassificationSignal[]; /** Total non-hidden files found at the top level (for reporting). */ topLevelFileCount: number; /** Whether a `.git/` directory is present. */ hasGit: boolean; } /** A single classification signal detected on the filesystem. */ export interface ClassificationSignal { /** Canonical signal id for programmatic handling. */ id: 'git-dir' | 'source-dir' | 'package-manifest' | 'docs' | 'rust-manifest' | 'go-manifest' | 'python-manifest' | 'readme' | 'empty'; /** Human-readable description of what was detected. */ description: string; /** File or directory that triggered this signal. */ path: string; } /** * Classify a project directory as greenfield or brownfield. * * Read-only — never mutates the filesystem. Safe to call at any time. * * @param directory - Absolute or relative path; defaults to process.cwd() * @returns Classification result with signals and metadata * * @example * ```typescript * const classification = classifyProject('/my/project'); * if (classification.kind === 'greenfield') { * // Seed initial Vision epic * } else { * // Run codebase mapping * } * ``` */ export declare function classifyProject(directory?: string): ProjectClassification; //# sourceMappingURL=discovery.d.ts.map