/**
 * Skill activation header (Level-3 progressive disclosure).
 *
 * When a skill is activated — either by user `/<name>` invocation or by the
 * agent calling `activate_skill` — the model gets a small synthetic header
 * prepended to the SKILL.md body that tells it:
 *
 *   1. The absolute path to the skill's root directory (so it can read
 *      referenced files using the relative paths the SKILL.md author wrote).
 *   2. A one-level-deep manifest of `references/`, `scripts/`, `assets/` so
 *      the model knows what's available without recursive directory scans.
 *
 * The header is wrapped in an HTML comment fence so:
 *   - it's markdown-invisible (graceful fallback if a UI strip ever misses);
 *   - it's anchored at `^\s*` for an unambiguous regex strip;
 *   - it's still plain text the model can read.
 *
 * For sandboxed sessions, host paths to non-project skills (built-in /
 * personal) cannot be read inside the container. In that case we emit a
 * "degraded" header that tells the model the skill root is not accessible,
 * with no resource manifest. Project-local skills (under the worktree)
 * still work because the worktree mounts at `/workspace`; the caller passes
 * a `pathRewrite` callback that returns the container-side path for those.
 */
import type { SlashSkill } from "./slash-skills.js";
export interface SkillResourceManifest {
    /** Skill root (host or container path, depending on caller). */
    root: string;
    /** Relative resource paths, alphabetical, capped at HEADER_MAX_BYTES. */
    resources: string[];
    /** When true, manifest was truncated; the human-readable suffix is set. */
    truncated: boolean;
    /** Human-readable suffix appended after truncation, e.g. `(12 more files)`. */
    truncationSuffix?: string;
}
/**
 * Scan a skill root for one-level-deep entries inside `references/`,
 * `scripts/`, `assets/`. Returns null if none of those dirs exist (so the
 * caller can decide to omit the resource line). Subdirectories within the
 * three roots are NOT recursed into.
 */
export declare function buildSkillResourceManifest(skillRoot: string): SkillResourceManifest | null;
/**
 * Optional rewrite callback. Receives the host-side absolute path to the
 * skill root and returns:
 *   - the path to use in the header (e.g. `/workspace/.claude/skills/foo`);
 *   - `null` to indicate the skill is not visible inside the sandbox, which
 *     forces a degraded header.
 */
export type PathRewrite = (hostPath: string) => string | null;
/**
 * Build the activation header for a skill. Returns `""` (empty string) when
 * no header should be emitted — i.e. the skill has no on-disk root (legacy
 * `.claude/commands/*.md` files and synthetic built-ins like `compact`).
 *
 * Examples:
 *   <!-- skill-activation-header -->
 *   Skill root: /abs/path/to/skill
 *   Available resources: references/REFERENCE.md, scripts/extract.py
 *   <!-- /skill-activation-header -->
 *
 * Sandboxed (non-rewritable):
 *   <!-- skill-activation-header -->
 *   Skill root: (not visible inside sandbox — see docs/internals.md "Sandbox skill visibility")
 *   <!-- /skill-activation-header -->
 *
 * The header always ends with a blank line so the SKILL.md body that
 * follows starts on its own line.
 */
export declare function buildActivationHeader(skill: Pick<SlashSkill, "filePath" | "source">, pathRewrite?: PathRewrite): string;
/** Regex used to strip the activation header at chip render time. Anchored at `^\s*`.
 *
 * NOTE: An identical inline copy lives in `src/ui/components/SkillChip.ts`.
 * Importing this constant into the UI bundle would drag server-only modules
 * (`node:fs`, `node:path`) along, so the duplication is intentional. **Keep
 * the two patterns in sync.** */
export declare const ACTIVATION_HEADER_STRIP_RE: RegExp;
//# sourceMappingURL=skill-manifest.d.ts.map