export type OfficeSlidesDecodeBoundary = "input" | "scope" | "governance" | "permission" | "execution";
export type OfficeSlidesDecodePermission = "filesystem:read" | "office:read";
export type OfficeSlidesDecodeGate = {
    accepted: boolean;
    reason?: string;
};
export type OfficeSlidesDecodeContext = {
    toolCallId?: string;
    workspaceRoot?: string;
    dryRun?: boolean;
    requestedScopes?: readonly string[];
    allowedScopes?: readonly string[];
    allowedPresentationRoots?: readonly string[];
    grantedPermissions?: readonly OfficeSlidesDecodePermission[];
    governance?: OfficeSlidesDecodeGate;
    auditMetadata?: Readonly<Record<string, unknown>>;
};
export type OfficeSlidesDecodeRequest = {
    presentationPath?: string;
    maxSlides?: number;
    includeSpeakerNotes?: boolean;
    includeImages?: boolean;
    context?: OfficeSlidesDecodeContext;
    decoder?: OfficeSlidesDecodeExecutor;
};
export type OfficeSlidesDecodedSlide = {
    slideNumber: number;
    title?: string;
    textBlocks: readonly string[];
    speakerNotes?: string;
    imageRefs?: readonly string[];
};
export type OfficeSlidesDecodeExecution = {
    slides: readonly OfficeSlidesDecodedSlide[];
    warnings?: readonly string[];
};
export type OfficeSlidesDecodeExecutor = (request: {
    presentationPath: string;
    maxSlides: number;
    includeSpeakerNotes: boolean;
    includeImages: boolean;
    commandPreview: readonly string[];
}) => OfficeSlidesDecodeExecution | Promise<OfficeSlidesDecodeExecution>;
export type OfficeSlidesDecodeErrorCode = "MISSING_PRESENTATION_PATH" | "NUL_BYTE_IN_PATH" | "ABSOLUTE_PRESENTATION_PATH" | "PRESENTATION_PATH_OUTSIDE_SCOPE" | "INVALID_MAX_SLIDES" | "SCOPE_DENIED" | "PERMISSION_DENIED" | "GOVERNANCE_REJECTED" | "DECODER_NOT_INJECTED" | "DECODER_REJECTED";
export type OfficeSlidesDecodeError = {
    code: OfficeSlidesDecodeErrorCode;
    message: string;
    boundary: OfficeSlidesDecodeBoundary;
    publicSafe: true;
};
export type OfficeSlidesDecodeAudit = {
    tool: "office.slidesDecode";
    toolCallId: string;
    presentationPath?: string;
    workspaceRoot?: string;
    dryRun: boolean;
    requestedScopes: readonly string[];
    acceptedScopes: readonly string[];
    permissionsRequired: readonly OfficeSlidesDecodePermission[];
    unsafeSideEffects: false;
    metadata: Readonly<Record<string, unknown>>;
};
export type OfficeSlidesDecodePlan = {
    kind: "agentCore.basicTool.office.slidesDecode.plan";
    operation: "presentation-decode";
    presentationPath: string;
    maxSlides: number;
    includeSpeakerNotes: boolean;
    includeImages: boolean;
    commandPreview: readonly string[];
    dispatch: "dry-run" | "injected-decoder";
    readsFileDirectly: false;
};
export type OfficeSlidesDecodeOutput = {
    kind: "agentCore.basicTool.office.slidesDecode.output";
    slides: readonly OfficeSlidesDecodedSlide[];
    warnings: readonly string[];
    unsafeSideEffects: false;
};
export type OfficeSlidesDecodeResult = {
    ok: true;
    plan: OfficeSlidesDecodePlan;
    audit: OfficeSlidesDecodeAudit;
    output?: OfficeSlidesDecodeOutput;
    events: readonly string[];
} | {
    ok: false;
    error: OfficeSlidesDecodeError;
    audit: OfficeSlidesDecodeAudit;
    events: readonly string[];
};
export declare const officeSlidesDecodeDescriptor: {
    readonly tool: "office.slidesDecode";
    readonly route: "toolabilityPool.officeBase.presentations";
    readonly purpose: "plan a governed presentation decode through an injected decoder envelope";
    readonly permissionsRequired: readonly ["filesystem:read", "office:read"];
    readonly defaultDispatch: "dry-run";
    readonly unsafeSideEffects: false;
    readonly tapOwnsApproval: true;
};
export declare function planOfficeSlidesDecode(request?: OfficeSlidesDecodeRequest): Promise<OfficeSlidesDecodeResult>;
