import { type SopManifest } from './sop-types.js'; export type SopInitOptions = { id: string; name?: string; apply?: boolean; /** When set, scaffold into the project layer (`/.peaks/sops`) instead of global. */ projectRoot?: string; }; export type SopInitResult = { id: string; dir: string; manifestPath: string; skillPath: string; manifest: SopManifest; skillContent: string; applied: boolean; }; export type SopLintSeverity = 'error' | 'warning'; export type SopLintFinding = { code: string; message: string; gateId?: string; severity: SopLintSeverity; }; export type SopLintResult = { ok: boolean; id: string; manifestPath: string; gateCount: number; gateIds: string[]; findings: SopLintFinding[]; /** * Non-blocking hints surfaced alongside the lint verdict. Currently used to * flag gates that declared `stripMeta: true` so authors can confirm the * opt-in. Empty array for manifests that do not opt in to any new behavior; * this is a stable, machine-readable field distinct from `findings` (which * are errors that block lint). */ warnings: string[]; }; export type SopLintOptions = { id: string; /** `command`-type gates run shell-less processes; require explicit opt-in (OQ3 security). */ allowCommands?: boolean; /** When set, lint the project-layer manifest (`/.peaks/sops`) instead of global. */ projectRoot?: string; }; /** * Read and JSON-parse a SOP manifest for EXECUTION, resolving project-first then * global (the project layer wins). Returns null when neither layer has it; * throws on malformed JSON. Callers that need validation should run lintSop. */ export declare function readSopManifest(id: string, projectRoot?: string): Promise; export declare function initSop(options: SopInitOptions): Promise; export declare function lintSop(options: SopLintOptions): Promise;