import * as rfc6902 from 'rfc6902';
import type { DocumentDTO } from "../../application/dtos/DocumentDTO.js";
import type { JsonDocumentDTO } from "../../application/dtos/JsonDocumentDTO.js";
import type { UpdateTagIndexUseCaseV2 } from "../../application/usecases/common/UpdateTagIndexUseCaseV2.js";
import type { SearchDocumentsByTagsInput } from "../../application/usecases/common/SearchDocumentsByTagsUseCase.js";
type SearchResults = any;
import type { ReadJsonDocumentUseCase, WriteJsonDocumentUseCase, DeleteJsonDocumentUseCase, SearchJsonDocumentsUseCase, UpdateJsonIndexUseCase, ReadGlobalDocumentUseCase, WriteGlobalDocumentUseCase, SearchDocumentsByTagsUseCase, UpdateTagIndexUseCase } from "../../application/usecases/index.js";
import type { MCPResponsePresenter } from "../presenters/types/MCPResponsePresenter.js";
import type { MCPResponse } from "../presenters/types/MCPResponse.js";
import type { IGlobalController } from "./interfaces/IGlobalController.js";
import type { IConfigProvider } from "../../infrastructure/config/interfaces/IConfigProvider.js";
/**
 * Parameters for the writeDocument method in GlobalController
 */
interface WriteGlobalDocumentParams {
    path: string;
    content?: string | Record<string, unknown>;
    patches?: rfc6902.Operation[];
    tags?: string[];
}
/**
 * Controller for global memory bank operations
 * Handles incoming requests related to global memory bank
 */
export declare class GlobalController implements IGlobalController {
    private readonly readGlobalDocumentUseCase;
    private readonly writeGlobalDocumentUseCase;
    private readonly searchDocumentsByTagsUseCase;
    private readonly updateTagIndexUseCase;
    private readonly presenter;
    private readonly configProvider;
    readonly _type: "controller";
    private readonly componentLogger;
    /**
     * Constructor
     * @param readGlobalDocumentUseCase Use case for reading global documents
     * @param writeGlobalDocumentUseCase Use case for writing global documents
     * @param searchDocumentsByTagsUseCase Use case for searching documents by tags
     * @param updateTagIndexUseCase Use case for updating tag index
     * @param presenter Response presenter
     * @param options Optional dependencies like JSON document use cases and V2 tag index
     */
    private readonly updateTagIndexUseCaseV2?;
    private readonly readJsonDocumentUseCase?;
    private readonly writeJsonDocumentUseCase?;
    private readonly deleteJsonDocumentUseCase?;
    private readonly searchJsonDocumentsUseCase?;
    private readonly updateJsonIndexUseCase?;
    constructor(readGlobalDocumentUseCase: ReadGlobalDocumentUseCase, writeGlobalDocumentUseCase: WriteGlobalDocumentUseCase, searchDocumentsByTagsUseCase: SearchDocumentsByTagsUseCase, updateTagIndexUseCase: UpdateTagIndexUseCase, presenter: MCPResponsePresenter, configProvider: IConfigProvider, options?: {
        updateTagIndexUseCaseV2?: UpdateTagIndexUseCaseV2;
        readJsonDocumentUseCase?: ReadJsonDocumentUseCase;
        writeJsonDocumentUseCase?: WriteJsonDocumentUseCase;
        deleteJsonDocumentUseCase?: DeleteJsonDocumentUseCase;
        searchJsonDocumentsUseCase?: SearchJsonDocumentsUseCase;
        updateJsonIndexUseCase?: UpdateJsonIndexUseCase;
    });
    /**
     * Read document from global memory bank
     * @param path Document path
     * @returns Promise resolving to MCP response with document
     */
    readDocument(path: string): Promise<MCPResponse<DocumentDTO>>;
    /**
     * Write document to global memory bank
     * @param path Document path
     * @param content Document content
     * @param tags Optional tags for the document
     * @returns Promise resolving to MCP response with the result
     */
    writeDocument(params: WriteGlobalDocumentParams): Promise<MCPResponse>;
    /**
     * Read core files from global memory bank
     * @returns Promise resolving to MCP response with core files
     */
    readCoreFiles(): Promise<MCPResponse<Record<string, DocumentDTO>>>;
    /**
     * Update tags index in global memory bank
     * @returns Promise resolving to MCP response with the result
     */
    updateTagsIndex(): Promise<MCPResponse>;
    /**
     * Search documents by tags in memory banks
     * @param input Search parameters (tags, match, scope, branch, docs)
     * @returns Promise resolving to MCP response with search results
     */
    searchDocumentsByTags(input: SearchDocumentsByTagsInput): Promise<MCPResponse<SearchResults>>;
    /**
     * Handle errors in controller methods
     * @param error Error to handle
     * @returns Formatted error response
     */
    private handleError;
    /**
     * Read JSON document from global memory bank
     * @param options Options for reading document (path or ID)
     * @returns Promise resolving to MCP response with JSON document
     */
    readJsonDocument(options: {
        path?: string;
        id?: string;
    }): Promise<MCPResponse<JsonDocumentDTO>>;
    /**
     * Write JSON document to global memory bank
     * @param document Document data to write
     * @returns Promise resolving to MCP response with the result
     */
    writeJsonDocument(document: JsonDocumentDTO): Promise<MCPResponse>;
    /**
     * Delete JSON document from global memory bank
     * @param options Options for deleting document (path or ID)
     * @returns Promise resolving to MCP response with the result
     */
    deleteJsonDocument(options: {
        path?: string;
        id?: string;
    }): Promise<MCPResponse>;
    /**
     * List JSON documents in global memory bank
     * @param options Options for listing documents (type, tags)
     * @returns Promise resolving to MCP response with list of documents
     */
    listJsonDocuments(options?: {
        type?: string;
        tags?: string[];
    }): Promise<MCPResponse<JsonDocumentDTO[]>>;
    /**
     * Search JSON documents in global memory bank
     * @param query Search query
     * @returns Promise resolving to MCP response with matching documents
     */
    searchJsonDocuments(query: string): Promise<MCPResponse<JsonDocumentDTO[]>>;
    /**
     * Update JSON index in global memory bank
     * @param options Options for updating index (force rebuild)
     * @returns Promise resolving to MCP response with the result
     */
    updateJsonIndex(options?: {
        force?: boolean;
    }): Promise<MCPResponse>;
}
export {};
//# sourceMappingURL=GlobalController.d.ts.map