/** * Installer Module * * Handles installation of SKC agents, commands, and configuration * into the Claude Code config directory (~/.claude/). * * Cross-platform support via Node.js-based hook scripts (.mjs). * Bash hook scripts were removed in v3.9.0. */ /** Claude Code configuration directory */ export declare const CLAUDE_CONFIG_DIR: string; export declare const AGENTS_DIR: string; export declare const COMMANDS_DIR: string; export declare const SKILLS_DIR: string; export declare const HOOKS_DIR: string; export declare const HUD_DIR: string; export declare const SETTINGS_FILE: string; export declare const VERSION_FILE: string; /** * Core commands - DISABLED for v3.0+ * All commands are now plugin-scoped skills managed by Claude Code. * The installer no longer copies commands to ~/.claude/commands/ */ export declare const CORE_COMMANDS: string[]; /** Current version */ export declare const VERSION = "3.10.3"; /** Installation result */ export interface InstallResult { success: boolean; message: string; installedAgents: string[]; installedCommands: string[]; installedSkills: string[]; hooksConfigured: boolean; hookConflicts: Array<{ eventType: string; existingCommand: string; }>; errors: string[]; } /** Installation options */ export interface InstallOptions { force?: boolean; verbose?: boolean; skipClaudeCheck?: boolean; forceHooks?: boolean; } /** * Detect whether a hook command belongs to sk-claudecode. * * Uses substring matching rather than word-boundary regex. * Rationale: Real SKC hooks use compound names where "skc" is embedded * (e.g., `omc-pre-tool-use.mjs`, `sk-claudecode-hook.mjs`). A word-boundary * regex like /\bomc\b/ would fail to match "sk-claudecode" since "skc" appears * as an interior substring. The theoretical false positives (words containing "skc" * like "atomic", "socom") are extremely unlikely in real hook command paths. * * @param command - The hook command string * @returns true if the command contains 'omc' or 'sk-claudecode' */ export declare function isSkcHook(command: string): boolean; /** * Check if the current Node.js version meets the minimum requirement */ export declare function checkNodeVersion(): { valid: boolean; current: number; required: number; }; /** * Check if Claude Code is installed * Uses 'where' on Windows, 'which' on Unix */ export declare function isClaudeInstalled(): boolean; /** * Check if we're running in Claude Code plugin context * * When installed as a plugin, we should NOT copy files to ~/.claude/ * because the plugin system already handles file access via ${CLAUDE_PLUGIN_ROOT}. * * Detection method: * - Check if CLAUDE_PLUGIN_ROOT environment variable is set (primary method) * - This env var is set by the Claude Code plugin system when running plugin hooks * * @returns true if running in plugin context, false otherwise */ export declare function isRunningAsPlugin(): boolean; /** * Check if we're running as a project-scoped plugin (not global) * * Project-scoped plugins are installed in the project's .claude/plugins/ directory, * while global plugins are installed in ~/.claude/plugins/. * * When project-scoped, we should NOT modify global settings (like ~/.claude/settings.json) * because the user explicitly chose project-level installation. * * @returns true if running as a project-scoped plugin, false otherwise */ export declare function isProjectScopedPlugin(): boolean; /** * Merge SKC content into existing CLAUDE.md using markers * @param existingContent - Existing CLAUDE.md content (null if file doesn't exist) * @param skcContent - New SKC content to inject * @returns Merged content with markers */ export declare function mergeClaudeMd(existingContent: string | null, skcContent: string, version?: string): string; /** * Install SKC agents, commands, skills, and hooks */ export declare function install(options?: InstallOptions): InstallResult; /** * Check if SKC is already installed */ export declare function isInstalled(): boolean; /** * Get installation info */ export declare function getInstallInfo(): { version: string; installedAt: string; method: string; } | null; //# sourceMappingURL=index.d.ts.map