export type StaffState = "active" | "paused" | "retired";
export type TriggerType = "schedule" | "git" | "manual" | "goal_created" | "goal_archived";
export interface TriggerConfig {
    cron?: string;
    timezone?: string;
    event?: "push" | "branch_created" | "tag";
    branch?: string;
    repo?: string;
}
export interface StaffTrigger {
    id: string;
    type: TriggerType;
    config: TriggerConfig;
    enabled: boolean;
    lastFired?: number;
    prompt?: string;
    lastSeenSha?: string;
}
export declare function normalizeStaffAccessory(value: unknown): string;
export interface PersistedStaff {
    id: string;
    name: string;
    description: string;
    systemPrompt: string;
    cwd: string;
    state: StaffState;
    triggers: StaffTrigger[];
    memory: string;
    roleId?: string;
    /** Pixel-art accessory ID for the staff identity/avatar. */
    accessory: string;
    createdAt: number;
    updatedAt: number;
    lastWakeAt?: number;
    currentSessionId?: string;
    worktreePath?: string;
    branch?: string;
    /** Primary repo/container root used to provision the staff worktree. */
    repoPath?: string;
    /** Multi-repo staff worktrees keyed by component repo name. */
    repoWorktrees?: Record<string, string>;
    projectId?: string;
    /**
     * Per-staff sandbox preference. Chosen at creation, persisted on the record,
     * immutable for the staff's lifetime. Used directly on every spawn/wake —
     * the project's sandbox config is NEVER consulted in the staff path.
     * Legacy records loaded without this field normalise to `false`.
     */
    sandboxed: boolean;
    /**
     * What the InboxNudger does to context before injecting a wake digest.
     * - "preserve" — leave conversation context as-is (long-running threads).
     * - "compact"  — run /compact before nudging (default).
     *
     * Optional at the type level so creation paths can omit it; both load
     * normalisation (see `StaffStore.load`) and put-time normalisation
     * (see `StaffStore.put`) coerce missing/invalid values to "compact".
     * A future "clear" policy (terminate + respawn) is deferred — see
     * docs/design/staff-inbox.md §10.
     */
    contextPolicy?: "preserve" | "compact";
}
/**
 * Simple JSON file store for staff agents.
 * Staff persist across server restarts.
 */
export declare class StaffStore {
    private readonly storeDir;
    private readonly storeFile;
    private staff;
    constructor(stateDir: string);
    private load;
    private save;
    put(staff: PersistedStaff): void;
    get(id: string): PersistedStaff | undefined;
    remove(id: string): void;
    getAll(): PersistedStaff[];
    update(id: string, updates: Partial<Omit<PersistedStaff, "id" | "createdAt">>): boolean;
}
//# sourceMappingURL=staff-store.d.ts.map