/** * * Pure data + lookup helpers. No I/O. The byte-for-byte text mirrors the * "Compaction Decision Guide" + "What Survives Compaction" tables in * ECC's strategic-compact SKILL.md (read-only reference at * C:\Users\smallMark\.claude\plugins\cache\ecc\ecc\2.0.0\skills\strategic-compact\SKILL.md). * * The `peaks compact recommend` + `peaks compact survival` + `peaks * compact dry-run` primitives read from these tables; any change to the * upstream skill table must be mirrored here and re-asserted by the */ export type Phase = 'research' | 'planning' | 'implementation' | 'testing' | 'debugging'; export declare const PHASES: readonly Phase[]; export declare function isPhase(value: string): value is Phase; /** Severity for a phase transition: matches the SKILL.md "Compact?" column. */ export type Severity = 'yes' | 'maybe' | 'no'; export interface PhaseTransitionDecision { readonly from: Phase; readonly to: Phase; readonly severity: Severity; readonly rationale: string; } /** * Single source of truth for the strategic-compact "Compaction Decision * Guide" table. Each row is a recommended from→to transition. The * `rationale` field is the "Why" column verbatim from SKILL.md. * * The CLI accepts arbitrary from/to phase pairs; if the pair is not in * the table (e.g. testing→implementation) the recommend primitive * returns `severity: 'no'` with a `notInTable: true` flag and the * default rationale "No documented transition; preserve context". */ export declare const PHASE_TRANSITIONS: readonly PhaseTransitionDecision[]; /** Documented "no compact" rows from the SKILL.md table. */ export declare const PHASE_NO_TRANSITIONS: readonly { from: Phase; to: Phase; rationale: string; }[]; /** * SKILL.md "What Survives Compaction" table — byte-for-byte. * The `peaks compact survival` primitive emits these lists verbatim. */ export declare const SURVIVAL_TABLE: Readonly<{ persists: readonly string[]; lost: readonly string[]; }>; /** * Resolve a (from, to) phase pair to a recommend() envelope. * Unknown pairs return `severity: 'no'` with `notInTable: true` so the * LLM can see "this transition isn't in the table" instead of silently * getting a default. */ export declare function lookupPhaseTransition(from: Phase, to: Phase): { severity: Severity; rationale: string; notInTable: boolean; }; /** * LLM-ready `/compact Focus on ...` prompt string. The phrasing is * deliberately terse — the upstream ECC suggest-compact hook uses a * similar short imperative form. */ export declare function buildSuggestedCompactMessage(from: Phase, to: Phase, severity: Severity): string;