/** * Canonicalize a user-supplied `--project ` value. * * Git Bash on Windows hands us forward-slash paths * (`C:/Users/.../peaks-loop`) while `peaks workspace init` writes the * backslash form, and either side may carry a trailing separator or * differing case. Resolving to the real path here means every * downstream consumer (`getSessionId`, `setSessionMeta`, * `setSkillPresence`) sees one stable form. * * Returns the input unchanged when it cannot be resolved (path does * not exist yet, or is not readable) so a bad `--project` still * reaches the existing error handling rather than throwing here. */ export declare function canonicalizeProjectOption(project: string | undefined): string | undefined; /** * D1 (2026-09-15) — generated-config staleness, carried on `skill presence`. * * WHY THIS CALL. `npm i -g peaks-loop@` upgrades the CLI and leaves the * project's generated config exactly as the OLD release wrote it: * `initWorkspace` is the only writer and `ensureSession` early-returns once a * session is bound, so nothing re-runs the generator. `.claude/settings.local.json` * is drift-checked — but only on an init that never comes. The user found the * previous instance of this by deleting their `.claude/*.json` and restarting; * nothing in the product told them to. * * `peaks skill presence` is the ONE peaks call every skill makes in every turn * (CLAUDE.md mandates it at the start of every response), so it is the only * channel guaranteed to carry a drift notice to the LLM that can act on it — * the same reasoning as the loop-hygiene verdict attached one screen down. A * rule that lives only in a SKILL.md body is compacted away; a warning that * rides the per-turn tool output is not. * * The field is additive and present only when stale, so no existing consumer * of the envelope changes shape. `null` projectRoot means the caller had no * project to inspect — skipped, not assumed stale. * * WHAT THE WARNING SAYS. It names the FILE that no longer matches and WHAT * about it, because "the version numbers differ" does not tell a reader which * file to open. The remedy (`peaks workspace init`) is in the message: the * reader is an LLM that must be able to act without guessing a command. */ export declare function generatedConfigNotice(projectRoot: string | undefined): { field: Record; warnings: string[]; };