export type GitPushLocalChangesPermission = "git:read" | "git:write" | "filesystem:read" | "network:egress";
export type GitPushLocalChangesRiskCategory = "remote-network" | "destructive";
export type GitPushLocalChangesGuard = {
    allowed?: boolean;
    accepted?: boolean;
    reason?: string;
};
export type GitPushLocalChangesContext = {
    runtimeId?: string;
    sessionId?: string;
    invocationId?: string;
    dryRun?: boolean;
    guard?: GitPushLocalChangesGuard;
    allowedRepositoryRoots?: readonly string[];
    grantedPermissions?: readonly GitPushLocalChangesPermission[];
    auditMetadata?: Readonly<Record<string, unknown>>;
};
export type GitPushLocalChangesTarget = {
    repositoryPath: string;
    remoteName: string;
    branchName?: string;
    setUpstream: boolean;
    forceWithLease: boolean;
    pushTags: boolean;
    deleteRemoteBranch: boolean;
};
export type GitPushLocalChangesRequest = {
    target?: Partial<GitPushLocalChangesTarget>;
    context?: GitPushLocalChangesContext;
    provider?: GitPushLocalChangesProvider;
    timeoutMs?: number;
    metadata?: Readonly<Record<string, unknown>>;
    runtimeId?: string;
    invocationId?: string;
    repositoryPath?: string;
    cwd?: string;
    remoteName?: string;
    remote?: string;
    branchName?: string;
    branch?: string;
    setUpstream?: boolean;
    forceWithLease?: boolean;
    pushTags?: boolean;
    deleteRemoteBranch?: boolean;
    dryRun?: boolean;
};
export type GitPushLocalChangesRuntimeEntry = {
    owner: "runtime";
    port: "BaseToolExecutorPort.git.runGit";
    method: "runGit";
    binary: "git";
    argvMode: "fixed-push-local-changes";
    allowedSubcommand: "push";
};
export type GitPushLocalChangesRisk = {
    category: GitPushLocalChangesRiskCategory;
    riskLevel: "risky" | "destructive";
    mutatesRepository: false;
    mutatesWorkingTree: false;
    mutatesRemote: true;
    pushesTags: boolean;
    deletesRemoteBranch: boolean;
    forceWithLease: boolean;
    mayUseNetwork: true;
    spawnsProcess: true;
    requiresTapApproval: true;
    runtimeOwnsExecution: true;
};
export type GitPushLocalChangesLine = {
    raw: string;
    operation?: "new" | "update" | "delete" | "tag" | "forced" | "rejected" | "other";
    source?: string;
    destination?: string;
};
export type GitPushLocalChangesEnvelope = {
    parser: "git-push-output-v1";
    remoteName: string;
    branchName?: string;
    setUpstream: boolean;
    forceWithLease: boolean;
    pushTags: boolean;
    deleteRemoteBranch: boolean;
    exitCode?: number;
    stdoutLineCount: number;
    stderrLineCount: number;
    operationHint?: string;
    pushLines: readonly GitPushLocalChangesLine[];
    rejectedHints: readonly string[];
    pushed: boolean;
};
export type GitPushLocalChangesOutput = {
    kind: "agentCore.basicTool.git.pushLocalChanges";
    target: GitPushLocalChangesTarget;
    runtimeEntry: GitPushLocalChangesRuntimeEntry;
    risk: GitPushLocalChangesRisk;
    gitArgs: readonly string[];
    commandPreview: readonly string[];
    timeoutMs: number;
    dryRun: boolean;
    executionBlocked: boolean;
    providerCalled: boolean;
    exitCode?: number;
    stdout?: string;
    stderr?: string;
    permissionsRequired: readonly GitPushLocalChangesPermission[];
    unsafeSideEffects: true;
    mayUseNetwork: true;
    resultEnvelope: GitPushLocalChangesEnvelope;
};
export type GitPushLocalChangesPlan = {
    toolId: "git.pushLocalChanges";
    toolKind: "git.pushLocalChanges";
    capability: "push-local-changes";
    runtimeId: string;
    invocationId: string;
    repositoryPath: string;
    remoteName: string;
    branchName?: string;
    setUpstream: boolean;
    forceWithLease: boolean;
    pushTags: boolean;
    deleteRemoteBranch: boolean;
    gitArgs: readonly string[];
    commandPreview: readonly string[];
    requiredPermissions: readonly GitPushLocalChangesPermission[];
    runtimeEntry: GitPushLocalChangesRuntimeEntry;
    risk: GitPushLocalChangesRisk;
    dispatch: "dry-run" | "runtime-git-executor";
    dryRun: boolean;
    wouldContactRemote: true;
    wouldMutateRemote: true;
    unsafeSideEffects: true;
    outputEnvelope: {
        stdoutPreview: "";
        stderrPreview: "";
        parsed: false;
    };
    audit: {
        guard: "git-remote-push-runtime-guard";
        event: "basicTool.git.pushLocalChanges.planned";
        governanceRequired: true;
        tapCanWrap: true;
        metadata: Readonly<Record<string, unknown>>;
    };
};
export type GitPushLocalChangesErrorBoundary = "input" | "scope" | "permission" | "governance" | "provider";
export type GitPushLocalChangesErrorCode = "MISSING_REPOSITORY_PATH" | "INVALID_ARGUMENT" | "INVALID_CONTEXT" | "INVALID_TIMEOUT" | "SCOPE_REJECTED" | "PERMISSION_DENIED" | "GOVERNANCE_REJECTED" | "PROVIDER_UNAVAILABLE" | "PROVIDER_REJECTED";
export type GitPushLocalChangesError = {
    code: GitPushLocalChangesErrorCode;
    message: string;
    boundary: GitPushLocalChangesErrorBoundary;
    publicSafe: true;
    safeForRuntimeInspection: true;
    internalDetailExposed: false;
};
export type GitPushLocalChangesAuditEvent = {
    type: string;
    toolId: "git.pushLocalChanges";
    invocationId: string;
    dryRun: boolean;
    repositoryPath?: string;
    metadata: Readonly<Record<string, unknown>>;
};
export type GitPushLocalChangesResult = {
    ok: true;
    toolId: "git.pushLocalChanges";
    output: GitPushLocalChangesOutput;
    plan: GitPushLocalChangesPlan;
    audit: readonly GitPushLocalChangesAuditEvent[];
    events: readonly string[];
} | {
    ok: false;
    toolId: "git.pushLocalChanges";
    error: GitPushLocalChangesError;
    audit: readonly GitPushLocalChangesAuditEvent[];
    events: readonly string[];
};
export type GitPushLocalChangesProviderRequest = {
    repositoryPath: string;
    args: readonly string[];
    timeoutMs?: number;
};
export type GitPushLocalChangesProviderResult = {
    exitCode: number;
    stdout: string;
    stderr: string;
};
export type GitPushLocalChangesProvider = (request: GitPushLocalChangesProviderRequest, context: GitPushLocalChangesContext) => GitPushLocalChangesProviderResult | Promise<GitPushLocalChangesProviderResult>;
export declare const gitPushLocalChangesDescriptor: {
    readonly toolId: "git.pushLocalChanges";
    readonly toolKind: "git.pushLocalChanges";
    readonly capability: "push-local-changes";
    readonly route: "agent_executionEngine.basic_toolLayer.baseTools.gitBase.remote";
    readonly defaultDryRun: true;
    readonly defaultDispatch: "dry-run";
    readonly tapOwnsApproval: true;
    readonly requiresTapApproval: true;
    readonly runtimeEntryPort: "BaseToolExecutorPort.git.runGit";
    readonly operationRisk: "remote-network";
    readonly permissionsRequired: readonly ["git:read", "git:write", "filesystem:read", "network:egress"];
    readonly defaultTimeoutMs: 120000;
    readonly maxTimeoutMs: 900000;
    readonly unsafeSideEffects: true;
};
export declare function parseGitPushLocalChangesResult(providerResult: GitPushLocalChangesProviderResult | undefined, target: GitPushLocalChangesTarget): GitPushLocalChangesEnvelope;
export declare function planGitLocalPush(request?: GitPushLocalChangesRequest): GitPushLocalChangesResult;
export declare const planPushLocalChanges: typeof planGitLocalPush;
export declare const planGitPushLocalChanges: typeof planGitLocalPush;
export declare function executeGitPushLocalChanges(request?: GitPushLocalChangesRequest): Promise<GitPushLocalChangesResult>;
