/**
 * @typedef {Object} InstallKernelResult
 * @property {'installed' | 'skipped' | 'failed'} status
 * @property {string} kernelPath                Absolute path to apt-tools.mjs after install
 * @property {string} [reason]                   Human-readable skip/fail reason
 * @property {number} [durationMs]
 */
/**
 * Install `@aperant/framework@<version>` into `<targetDir>/.aperant/deps/`.
 * Safe to call multiple times — npm will reconcile against the existing
 * tree. Does not touch any files outside `.aperant/deps/`.
 *
 * @param {string} targetDir  project root
 * @param {string} version    exact semver to install (typically the version
 *                            of the framework currently running the init)
 * @param {Object} [opts]
 * @param {number} [opts.timeoutMs=180000]  hard ceiling on the npm call
 * @param {boolean} [opts.silent=true]      pass --silent to npm (false for --verbose debug runs)
 * @returns {InstallKernelResult}
 */
export function installKernel(targetDir: string, version: string, opts?: {
    timeoutMs?: number | undefined;
    silent?: boolean | undefined;
}): InstallKernelResult;
/**
 * Path from the project root to the installed kernel binary. SKILL.md /
 * agent transform substitution relies on this string — keep it in sync
 * with KERNEL_PATH_REPLACEMENT in transforms/_shared.mjs.
 */
export const KERNEL_BIN_REL_PATH: ".aperant/deps/node_modules/@aperant/framework/bin/apt-tools.mjs";
export type InstallKernelResult = {
    status: "installed" | "skipped" | "failed";
    /**
     * Absolute path to apt-tools.mjs after install
     */
    kernelPath: string;
    /**
     * Human-readable skip/fail reason
     */
    reason?: string | undefined;
    durationMs?: number | undefined;
};
//# sourceMappingURL=install-kernel.d.mts.map