import type { AgentDefinition } from "../agents/agents-registry.js"; export interface InstallOptions { global: boolean; projectRoot: string; } /** * 0845 T-002 (AC-US3-03): per-agent env-var overrides for global skills dirs. * * Only Antigravity is wired today (`VSKILL_ANTIGRAVITY_SKILLS_DIR`); the table * structure is reusable when future agents need an analogous escape hatch. * Returns null when no override applies so callers fall back to the * registry-declared `globalSkillsDir`. */ export declare function resolveGlobalSkillsDirEnvOverride(agent: AgentDefinition): string | null; /** * Resolve the skills directory for an agent given the install scope. * * Global: uses agent.globalSkillsDir (e.g. ~/.claude/skills) * Honors per-agent env-var overrides via * `resolveGlobalSkillsDirEnvOverride()` — currently * `VSKILL_ANTIGRAVITY_SKILLS_DIR` for Antigravity. * Local: uses projectRoot + agent.localSkillsDir (e.g. ./project/.claude/skills) */ export declare function resolveAgentSkillsDir(agent: AgentDefinition, opts: InstallOptions): string; export declare function ensureCanonicalDir(base: string, global: boolean): string; /** Test-only helper to reset the module-scoped symlink-warning flag. */ export declare function __resetSymlinkWarning(): void; export declare function createRelativeSymlink(target: string, linkPath: string): boolean; /** * Install a skill using the canonical symlink approach: * 1. Write SKILL.md to .agents/skills/{name}/ (canonical source of truth) * 2. Create relative symlinks from each agent dir to the canonical dir * 3. For agents with known symlink issues, fall back to direct copy * * Optional agentFiles: additional files (e.g., agents/*.md) to install alongside SKILL.md. * Keys are relative paths within the skill directory. */ export declare function installSymlink(skillName: string, content: string, agents: AgentDefinition[], opts: InstallOptions, agentFiles?: Record): string[]; /** * Install a skill by copying SKILL.md directly to each agent directory. * * Optional agentFiles: additional files (e.g., agents/*.md) to install alongside SKILL.md. */ export declare function installCopy(skillName: string, content: string, agents: AgentDefinition[], opts: InstallOptions, agentFiles?: Record): string[]; /** * 0845 T-012/T-014: Resolve the Tier-2 INSTALL ROOT for an agent — * the parent of `localSkillsDir` / `globalSkillsDir`. Tier-2 transformers * emit relative paths that include their own subfolder layout (e.g. * `rules/.mdc` for Cursor), so the dispatcher joins those onto * this root rather than onto the skills dir itself. * * Win32 (T-014, AC-US4-12): when `process.platform === "win32"` and the * agent declares `win32PathOverride`, that path is the install root * directly (no parent traversal). On POSIX hosts the override is ignored * — agents continue to honor `globalSkillsDir`'s tilde-expanded form. * * Project-scope (`global: false`) keeps the existing path-traversal * guard via `resolveAgentSkillsDir` so projects can't escape via a * crafted `localSkillsDir`. The returned root for project-scope is the * parent of the resolved skills dir, with the same traversal protection * already in force. */ export declare function resolveAgentInstallRoot(agent: AgentDefinition, opts: InstallOptions): string;