/** * Feature inventory — the deterministic, local answer to "what's on, and how do I * turn on the rest?" (change: refine-happy-path-and-defaults / ZeroConfigWithGuidedActivation). * * OpenLore delivers its core value with ZERO required configuration: `orient`, * search, blast-radius, and the whole structural graph work with no keys set. * Everything beyond that core is an independent OPT-IN feature, each gated by a * config block or an on-disk marker. The cost of that design is discoverability: * a user who wants semantic search, a commit gate, or a covering-surface * certificate has to know which key to set, in which file, from which of ~44 docs. * * This module is the single source of truth for that map. It reads the project's * `.openlore/config.json` and a few well-known on-disk markers and reports, for * every opt-in feature: whether it is currently active, a one-line description of * its current state, and the ONE command or config snippet that activates it. * * It is pure data + detection — no rendering, no LLM, no network, no writes — so * the `openlore features` CLI, `doctor`, and a future MCP tool can all share it * (the MCP-tool ↔ CLI parity rule). Detection is deterministic and fail-soft: an * unreadable marker file degrades that one feature to "inactive", never throws. */ /** Whether an opt-in feature is on, off, or on-by-default-but-disableable. */ export type FeatureState = 'active' | 'inactive' | 'default-on'; /** A coarse grouping mirroring the capability families, for legible display. */ export type FeatureGroup = 'Search & navigation' | 'Governance & guardrails' | 'Multi-repo'; export interface FeatureStatus { /** Stable identifier (kebab-case), safe to switch on programmatically. */ id: string; /** Human-facing title. */ title: string; /** Display group. */ group: FeatureGroup; /** Current state. */ state: FeatureState; /** * Is this a genuine opt-in feature (counts toward "N of M opt-in active"), or * an informational / on-by-default line that has no "turn it on" action? */ optIn: boolean; /** One-line description of the CURRENT state (what is on, or the active default). */ detail: string; /** The single command or config snippet that activates it; empty when already on or informational. */ activate: string; /** Canonical docs page (repo-relative), when one exists. */ docs?: string; } export interface FeatureInventory { /** Whether a `.openlore/config.json` was found (false ⇒ run `openlore init`). */ configFound: boolean; /** * Number of config keys a user MUST set for core value. Always 0 — the * zero-config baseline is a guarantee, surfaced here so it is visible. */ requiredConfigKeys: 0; /** Count of opt-in features currently active. */ activeCount: number; /** Total count of opt-in features. */ optInCount: number; /** Every feature, grouped-display order preserved. */ features: FeatureStatus[]; } /** * Collect the full opt-in feature inventory for a project. Deterministic and * fail-soft: every detection degrades to "inactive" rather than throwing. */ export declare function collectFeatureInventory(rootPath: string): Promise; //# sourceMappingURL=feature-inventory.d.ts.map