/**
 * Handoff Doc Format — single source of truth
 *
 * Renders BOTH the durable handoff document and the copy-paste resume prompt
 * from one {@link HandoffDocInput}. The CLI command, the PreCompact hook
 * handler, and the vitest parity test all render through this module, so the
 * doc format and paste-prompt cannot drift between code paths. The vskill
 * self-contained skill inlines a byte-compatible template that references the
 * same canonical section order + footer marker exported here.
 *
 * Design rules:
 * - This module is PURE rendering. It does no IO, no git, no workspace
 *   detection — callers pass already-captured + already-scrubbed data in.
 * - The absolute doc path, the `.diff` path, and the per-tool resume matrix are
 *   inputs/constants so the renderer is deterministic and testable.
 * - The `Doc format v1` footer marker (DOC_FORMAT_MARKER) is the ownership
 *   sentinel that lets the builder know a file is a prior handoff it may
 *   overwrite, and the version handle for future format migrations.
 *
 * Part of increment 0867: Cross-Tool Work Handoff
 * (AC-US1-02, AC-US2-04, AC-US5-01..04, AC-US6-02, AC-US6-05).
 *
 * @module core/session/handoff-doc-format
 */
/**
 * Footer marker stamped at the bottom of every handoff doc.
 *
 * Doubles as the ownership sentinel: a root `./HANDOFF.md` containing this
 * string is treated as a prior handoff (safe to overwrite); one lacking it is a
 * foreign file the builder must not clobber.
 */
export declare const DOC_FORMAT_MARKER = "Doc format v1";
/**
 * Delimiters wrapping the self-contained body in `--inline` paste-prompts.
 * A resuming agent reads everything between these markers as the handoff.
 */
export declare const INLINE_BEGIN_MARKER = "BEGIN HANDOFF";
export declare const INLINE_END_MARKER = "END HANDOFF";
/**
 * Canonical section headers, in render order. Exported so the vskill inlined
 * template and the format-parity test (T-017) reference ONE source and fail at
 * build time if either side reorders or renames a section.
 */
export declare const HANDOFF_SECTION_ORDER: readonly string[];
/**
 * Per-tool resume guidance. The `findSession` + `resumeCmd` strings are
 * VERIFIED against the live CLIs and pinned by cross-tool-commands.test.ts
 * (T-016) so the matrix cannot silently drift when a tool updates.
 */
export interface ToolResumeEntry {
    /** Display name. */
    tool: string;
    /** How to locate the source session on disk / in the tool. */
    findSession: string;
    /** Native resume command(s). */
    resumeCmd: string;
}
/**
 * The cross-tool resume matrix (AC-US5-01, AC-US5-02).
 *
 * NOTE on Claude: session files live under
 * `~/.claude/projects/<munged-cwd>/<uuid>.jsonl`, where the cwd is munged by
 * replacing EVERY non-alphanumeric char with `-` and NOT collapsing runs — so a
 * leading slash and adjacent separators each become their own dash. Example:
 *   /Users/.../specweave-umb/.claude-worktrees/x
 *   → -Users-...-specweave-umb--claude-worktrees-x
 * (the `/.` between `umb` and `claude-worktrees` yields a double dash).
 */
export declare const CLAUDE_MUNGE_EXAMPLE: string;
export declare const TOOL_RESUME_MATRIX: readonly ToolResumeEntry[];
/**
 * Increment-derived facts (present only on the SpecWeave high-fidelity path).
 */
export interface HandoffIncrementInfo {
    id: string;
    status: string;
    /** Title from spec.md frontmatter, if available. */
    title?: string;
    /** The current (first incomplete / in-progress) task line, if any. */
    currentTask?: string;
    /** The next pending task line after the current one, if any. */
    nextTask?: string;
    doneTasks: number;
    totalTasks: number;
    taskPercentage: number;
    doneAcs: number;
    totalAcs: number;
    /** Human-readable AC/task drift summary lines from acSyncEvents. */
    acSyncEvents: string[];
}
/**
 * Ambient project rules merged from config.json.
 */
export interface HandoffAmbientRules {
    testMode?: string;
    coverageTarget?: number;
    wipLimit?: number;
}
/**
 * Git facts for the doc body (mirrors GitState minus the diff file contents).
 */
export interface HandoffGitInfo {
    isGitRepo: boolean;
    branch: string;
    shortSha: string;
    statusPorcelain: string;
    diffStat: string;
    hasUncommittedChanges: boolean;
}
/**
 * The complete, already-scrubbed input to the renderer.
 */
export interface HandoffDocInput {
    /** Absolute path the doc itself will be written to (printed first by CLI). */
    docPath: string;
    /** Absolute path of the sibling full-diff file. */
    diffPath: string;
    /** Repo / workspace root. */
    repoRoot: string;
    /** ISO timestamp of generation. */
    generatedAt: string;
    /** Whether this is the SpecWeave high-fidelity path. */
    isSpecWeave: boolean;
    /** Free-text "why I'm handing off" (e.g. "out of tokens"). */
    reason?: string;
    /** Free-text summary of where things stand. */
    summary?: string;
    /** Free-text exact next step. */
    next?: string;
    /** Free-text gotcha / warning for the next agent. */
    gotcha?: string;
    /** Key decisions (from plan.md + agent-supplied, already merged). */
    decisions: string[];
    /** Increment facts (SpecWeave path only). */
    increment?: HandoffIncrementInfo;
    /** Ambient rules from config.json. */
    ambient?: HandoffAmbientRules;
    /** Git facts. */
    git: HandoffGitInfo;
    /** Per-pattern redaction counts from the secret scrub. */
    redactionCounts: Record<string, number>;
}
/**
 * Render the per-tool "find your source session" block.
 */
export declare function renderResumeMatrix(): string;
/**
 * Render the full handoff document body (markdown).
 *
 * Section order is locked to {@link HANDOFF_SECTION_ORDER}; the `Doc format v1`
 * footer marker is always last.
 */
export declare function renderHandoffDoc(input: HandoffDocInput): string;
/**
 * Render the copy-paste resume prompt.
 *
 * Default (file-reachable) mode points the next agent at the doc path. The
 * `inline` mode embeds the FULL doc body between BEGIN/END markers for
 * cross-machine resume where the file is unreachable (AC-US5-04).
 */
export declare function renderPastePrompt(input: HandoffDocInput, opts?: {
    inline?: boolean;
}): string;
//# sourceMappingURL=handoff-doc-format.d.ts.map