/** * Sharing module for multi-contributor .cleo/ state management. * * Controls which .cleo/ files are committed to the project git repo * via a config-driven allowlist. Provides status reporting and * .gitignore auto-management. * * @task T4883 */ import type { NexusShareStatusParams } from '@cleocode/contracts'; import { type EngineResult } from '../../engine-result.js'; /** * Result of a sharing status check. * * @remarks * Provides a complete view of which `.cleo/` files are tracked vs ignored under * the current sharing config, plus git sync state for Nexus multi-project visibility. * The `hasGit`, `remotes`, `pendingChanges`, and `lastSync` fields are populated * only when a `.cleo/.git` repo exists; otherwise they carry safe defaults. * * @example * ```typescript * const status = await getSharingStatus(); * if (status.hasGit && status.pendingChanges) { * console.log('Uncommitted changes in .cleo/ — run: cleo checkpoint'); * } * ``` */ export interface SharingStatus { mode: string; allowlist: string[]; denylist: string[]; tracked: string[]; ignored: string[]; /** Whether the `.cleo/.git` isolated repo exists and is initialized. */ hasGit: boolean; /** Git remote names configured in `.cleo/.git` (e.g. `['origin']`). */ remotes: string[]; /** Whether the `.cleo/.git` working tree has uncommitted changes. */ pendingChanges: boolean; /** * ISO 8601 timestamp of the last push or pull to/from a remote, or `null` * if no remote sync has ever occurred. */ lastSync: string | null; } /** * Match a file path against a glob-like pattern. * Supports: '*' (single segment wildcard), '**' (recursive wildcard), * and trailing '/' for directory matching. * @task T4883 */ export declare function matchesPattern(filePath: string, pattern: string): boolean; /** * Get the sharing status: which .cleo/ files are tracked vs ignored, * plus git sync state for Nexus multi-project visibility. * * @remarks * Populates `hasGit`, `remotes`, `pendingChanges`, and `lastSync` by inspecting * the `.cleo/.git` isolated repo when it exists. All git operations are * non-fatal — if the repo is absent or a command fails, the fields carry safe * defaults (`false`, `[]`, `null`). * * @example * ```typescript * const status = await getSharingStatus('/path/to/project'); * console.log(status.mode); // 'project' * console.log(status.hasGit); // true * console.log(status.remotes); // ['origin'] * console.log(status.pendingChanges); // false * console.log(status.lastSync); // '2026-03-21T18:00:00.000Z' * ``` * * @task T4883 * @task T110 */ export declare function getSharingStatus(projectRoot?: string, _params?: NexusShareStatusParams): Promise; /** * Sync the project .gitignore to match the sharing config. * Adds/updates a managed section between CLEO markers. * @task T4883 */ export declare function syncGitignore(cwd?: string): Promise<{ updated: boolean; entriesCount: number; }>; export declare function nexusShareStatus(projectRoot: string): Promise>>>; //# sourceMappingURL=index.d.ts.map