/** * clustly.yaml — the manifest FILE: finding it, reading it, writing it. * * The format itself (parse, emit, validate, the schema, the filename, the default excludes) lives * in `./manifest-schema`, which imports nothing from `node:` so the browser deploy wizard can use * it. This module is the Node half: it adds the filesystem and nothing else. * * **It re-exports the whole format surface**, so every existing importer — `inventory`, * `publish`, `scanner`, `dryrun`, `upload`, `wizard`, `commands/publish` and their tests — keeps * importing from `./manifest` exactly as before. That is deliberate: an extraction whose payment * is thirteen edited call sites is an extraction that gets reverted. The CLI's behaviour is * unchanged, and `manifest.test.ts` still proves it against this module. */ import type { Framework } from "./discovery"; import { type ClustlyManifest } from "./manifest-schema"; export { CONCURRENCY_MODES, CREDENTIAL_MODES, DEFAULT_CONCURRENCY_MODE, DEFAULT_CREDENTIAL_MODE, DEFAULT_EXCLUDES, requiresEntry, missingEntryProblem, OWN_CODE_FRAMEWORKS, CONVENTIONAL_ENTRIES, emitManifest, isExcluded, MANIFEST_FILENAME, matchesPattern, parseManifest, slugifySegment, type ClustlyManifest, type ConcurrencyMode, type CredentialMode, type ListingBlock, } from "./manifest-schema"; /** Workspace directory PATH → a safe listing-ish slug. The slug rule itself is shared (the browser * has a folder name and no path to take a basename of); only the path handling is Node's. */ export declare function sanitizeName(dir: string): string; export interface InitResult { manifest: ClustlyManifest; /** false = a valid clustly.yaml already existed and was loaded instead. */ created: boolean; path: string; } /** Generate clustly.yaml in `workspace` (idempotent: an existing file is parsed, not overwritten). */ export declare function initManifest(workspace: string, framework: Framework): InitResult;