export declare function detectLegacyWorkspaceTemplateId(workspaceRoot: string): Promise; export declare function isPlaceholderManifest(manifest: any): boolean; export interface WriteWorkspaceManifestOptions { workspaceRoot: string; templateId: string; specVersion: string; aiwsVersion: string; installedAt: string; updatedAt: string; tools: string[]; templateManifest: any; } export declare function writeWorkspaceManifest(options: WriteWorkspaceManifestOptions): Promise<{ manifest_version: number; template_id: string; spec_version: string; aiws_version: string; installed_at: string; updated_at: string; tools: string[]; managed: { path: string; mode: string; sha256?: string; blocks?: Record; }[]; }>; export interface ComputeManagedStateOptions { workspaceRoot: string; templateManifest: any; } export declare function computeManagedState(options: ComputeManagedStateOptions): Promise<{ path: string; mode: string; sha256?: string; blocks?: Record; }[]>; export interface ValidateDriftOptions { workspaceRoot: string; storedManifest: any; templateManifest: any; } export declare function validateDrift(options: ValidateDriftOptions): Promise; /** * Re-stamp managed block SHAs in .aiws/manifest.json without changing template files. * Call after ff-merge when change branches modify managed-block files (SKILL.md, AI_PROJECT.md, etc.) * so the pushed manifest reflects current block hashes. */ export declare function stampManagedBlocks(workspaceRoot: string): Promise<{ manifest_version: number; template_id: string; spec_version: string; aiws_version: string; installed_at: string; updated_at: string; tools: any; managed: Array<{ path: string; mode: string; sha256?: string; blocks?: Record; }>; }>;