/**
 * Git History Tools for the Studiograph Agent
 *
 * Read tools (gated on canAccessRepo):
 *   - list_file_history    — commits that touched one entity's file
 *   - list_folder_history  — recent commits across a whole repo
 *   - list_recent_deletions — entities deleted within the last N days
 *   - read_file_at_commit  — file content at a past commit hash
 *   - get_entity_diff      — unified diff between two commits for one entity
 *
 * Write tool (gated on canWriteRepo, preview-then-confirm):
 *   - restore_file         — restore one entity to its content at a commit
 *
 * Single-entity scope only. `revert_commit` (multi-entity rollback)
 * is intentionally deferred until real demand surfaces — when added,
 * it will live in this same file with the same gating model.
 *
 * The system prompt restraint rule applies to the write tool:
 * never restore without explicit user request, and always surface the
 * preview payload before re-invoking with confirm: true.
 */
import { Type as T } from 'typebox';
import { WorkspaceManager } from '../../core/workspace-manager.js';
import { type AuthUser, type AuthService } from '../../services/auth-service.js';
import type { MutationEvent } from './graph-tools.js';
export declare function createHistoryTools(workspaceManager: WorkspaceManager, gitUser: {
    id: string;
    name: string;
    email: string;
}, onMutation?: (m: MutationEvent) => void, getCurrentUser?: () => AuthUser | null, authService?: AuthService | null, _onAgentActivity?: (action: 'enter' | 'leave' | 'heartbeat', repo: string) => void): ({
    name: string;
    label: string;
    description: string;
    parameters: T.TObject<{
        repo: T.TString;
        limit: T.TOptional<T.TNumber>;
    }>;
    execute: (_toolCallId: string, params: any) => Promise<{
        content: {
            type: "text";
            text: string;
        }[];
        details: any;
    }>;
} | {
    name: string;
    label: string;
    description: string;
    parameters: T.TObject<{
        repo: T.TString;
        withinDays: T.TOptional<T.TNumber>;
    }>;
    execute: (_toolCallId: string, params: any) => Promise<{
        content: {
            type: "text";
            text: string;
        }[];
        details: any;
    }>;
} | {
    name: string;
    label: string;
    description: string;
    parameters: T.TObject<{
        repo: T.TString;
        entityType: T.TString;
        entityId: T.TString;
        commitHash: T.TString;
    }>;
    execute: (_toolCallId: string, params: any) => Promise<{
        content: {
            type: "text";
            text: string;
        }[];
        details: any;
    }>;
} | {
    name: string;
    label: string;
    description: string;
    parameters: T.TObject<{
        repo: T.TString;
        entityType: T.TString;
        entityId: T.TString;
        fromCommit: T.TString;
        toCommit: T.TOptional<T.TString>;
    }>;
    execute: (_toolCallId: string, params: any) => Promise<{
        content: {
            type: "text";
            text: string;
        }[];
        details: any;
    }>;
})[];
