/** * `peaks skill lint --category loop-engineering-readiness` — M6 / spec §7.5 + §8.4 * * Loop Engineering readiness gate for any new peaks-* skill that * participates in Loop Engineering (crystallization or evolution). * * Usage: * peaks skill lint --category loop-engineering-readiness --path * peaks skill lint --category loop-engineering-readiness --path --json * * The command: * 1. Resolves /SKILL.md (default if the path is a file). * 2. Calls lintSkillLoopEngineeringReadiness() with the file contents. * 3. Prints a structured JSON envelope via printResult (or a * human-readable summary when --json is omitted). * 4. Sets process.exitCode = 1 on a non-ok result, so the LLM * gate can short-circuit a future peaks-* skill that fails the * lint. * * The lint asserts three structural properties: * 1. the SKILL.md references * `.peaks/standards/loop-engineering-guidelines.md`; * 2. the SKILL.md does not introduce a CLI verb the user is meant * to type (only LLM-coordinated verbs from the sediment / * asset / evolution surface are allowed; RL-1); * 3. the SKILL.md does not introduce a JSON / manifest * hand-authoring surface (RL-1). * * The user never types `peaks skill lint …` — the LLM runs it on * the user's behalf. This command is also reachable as * `peaks skill ready --category loop-engineering-readiness * --path ` * via a small alias added at the bottom of this file. */ import type { Command } from 'commander'; import { type ProgramIO } from '../cli-helpers.js'; export declare const LOOP_ENGINEERING_READINESS_CATEGORY = "loop-engineering-readiness"; /** * Resolve the SKILL.md file path from a `--path ` value. * * Accepts either: * - a directory containing a SKILL.md (the common case for a * peaks-* skill: `src/skills//`, `skills//`, etc.); * - a direct file path to a SKILL.md. * * Returns the absolute path to the SKILL.md, or null if no SKILL.md * is found. */ export declare function resolveSkillMdPath(rawPath: string): string | null; /** * Pure helper: run the readiness lint against the SKILL.md text and * return a CLI-shaped envelope. Kept separate from the Commander * action so unit + integration tests can drive it without spawning * a child process. */ export declare function runReadinessLint(rawPath: string): { ok: boolean; code: string; message: string; data: { path: string; category: string; findings: string[]; }; nextActions: string[]; }; export declare function registerSkillLoopEngineeringReadinessCommands(program: Command, io: ProgramIO): void;