/**
 * LicenseCommand — thin CLI surface for `openlife license`.
 *
 *   openlife license activate --key PRO-XXXX-XXXX-XXXX-XXXX   (online exchange)
 *   openlife license activate --token ./license-token.json   (offline / air-gapped)
 *   openlife license status
 *   openlife license deactivate
 *
 * Activation has two paths:
 *   - `--key`   : exchange the short key-id with the license server (private
 *                 repo) for a signed token, then verify + cache it. The server
 *                 URL comes from OPENLIFE_LICENSE_SERVER; absent until the
 *                 private repo is deployed, so this path reports a clear message.
 *   - `--token` : load a pre-issued signed token from disk (Enterprise / no-net
 *                 install), verify it the same way, and cache it.
 *
 * Every path returns a `{ ok }` shape for the CLI's printCliResult helper.
 */
import { LicenseManager } from '../orchestrator/LicenseManager';
export interface LicenseResult {
    ok: boolean;
    action: string;
    message: string;
    tier?: string;
    features?: string[];
    expiresAt?: string | null;
    daysRemaining?: number | null;
    status?: string;
}
export declare class LicenseCommand {
    private root;
    private readonly manager;
    private readonly store;
    private readonly entitlements;
    constructor(root?: string, manager?: LicenseManager);
    /** Common verify + persist step for both activation paths. */
    private acceptToken;
    /** Activate from a pre-issued signed token file (offline path). */
    activateFromTokenFile(tokenPath: string): LicenseResult;
    /** Activate by exchanging a key-id with the license server (online path). */
    activateFromKey(keyId: string): Promise<LicenseResult>;
    /** Report the current entitlement state. */
    status(now?: Date): LicenseResult;
    /** Remove the cached license; revert to Community. */
    deactivate(): LicenseResult;
}
