/**
 * PersonalPageStore.base.ts — 基础层（构造/事件/缓存/WorkSpace/SearchPath/MountedFolder/路径工具）
 *
 * 包含：
 * - 构造函数与字段声明
 * - 事件总线（on / off / emit）
 * - reset / clearMemoryCache
 * - withConfig / withWorkspace（Proxy 作用域）
 * - _normalizeMountedFolder
 * - SearchPath（addSearchPath / removeSearchPath / _readFromSearchPath / _doReadFromSearchPath）
 * - getAbsUrl / _getMountedPagePath / _getMountedTreeParams
 * - _isAbsolutePath / _readAbsoluteFile / _readMountedFile / _listMountedDir / _fetchMountedTree
 * - sanitizePageName / getEffectivePageName / _stripSpuriousWorkspaceSegment
 * - _toInternalPageKey / _toCurrentWorkspaceRelative
 * - setUsername / getUsername
 * - checkInitSyncTimers / destroy
 * - ensureUserProfile
 */
import type { MountedFolder, SearchPath, PageSyncOptions, IPersonalPageSDK } from './PersonalPageStore.types';
/**
 * PersonalPageStore 基础层。
 * 不直接实例化 — 由 PersonalPageStore.ts 主类继承并扩展。
 */
export declare class PersonalPageStoreBase {
    static debug: boolean;
    static _log(..._args: unknown[]): void;
    sdk: IPersonalPageSDK;
    /** L1 内存缓存：pageKey → 页面数据对象 */
    personalPageData: Record<string, Record<string, unknown>>;
    /** 待写入（已修改未保存）的数据 */
    personalPageDataUpdated: Record<string, Record<string, unknown>>;
    /** 已标记删除的 key 列表 */
    personalPageDataDeleted: Record<string, string[]>;
    /** 各页面的状态标志（版本检查等） */
    pageStatus: Record<string, Record<string, unknown>>;
    /** 待磁盘写入的页面集合 */
    pendingDiskPages: Set<string>;
    /** 待远端同步的页面集合 */
    pendingSync: Set<string>;
    /** 各页面的同步选项 */
    pageSyncOptions: Record<string, PageSyncOptions>;
    isSyncing: boolean;
    _batchSavePromise: Promise<number> | null;
    _batchSyncPromise: Promise<number> | null;
    pageMutationVersion: Record<string, number>;
    userProfileLoaded: boolean;
    overrideUsername: string | null;
    workspace: string | null;
    mountedFolder: MountedFolder | null;
    _searchPaths: SearchPath[];
    /** 远端同步间隔（ms），默认 5 秒 */
    remoteSyncInterval: number;
    remoteStorePath: string;
    /** 事件监听器映射 */
    _eventListeners: Record<string, Array<(...args: unknown[]) => void>>;
    /** 定时同步 timer */
    gitSyncTimer: ReturnType<typeof setInterval> | null;
    /** 防抖磁盘写入 timer */
    _diskSaveTimeout: ReturnType<typeof setTimeout> | null;
    _searchPathNotFound?: Set<string>;
    _searchPathInflight?: Map<string, Promise<string | null>>;
    _remoteTreeCache: string[] | null;
    _remoteTreeCacheTime: number;
    constructor(sdk: IPersonalPageSDK);
    /**
     * 注册事件监听器。
     * 已知事件：
     * - `'versionConflict'`：本地与远端版本冲突时触发，携带冲突详情
     *
     * @param event   - 事件名
     * @param handler - 回调函数
     */
    on(event: string, handler: (...args: unknown[]) => void): void;
    /**
     * 取消注册事件监听器。
     * @param event   - 事件名
     * @param handler - 要取消的回调
     */
    off(event: string, handler: (...args: unknown[]) => void): void;
    /**
     * 触发事件，依次调用所有已注册监听器。
     * @param event - 事件名
     * @param args  - 传递给监听器的参数
     */
    emit(event: string, ...args: unknown[]): void;
    /**
     * 重置所有内存状态（数据/定时器/缓存），但不清除 IndexedDB 和远端数据。
     * 认证变更（setToken）后由 keepworkSDK 调用。
     */
    reset(): void;
    /**
     * 清除内存缓存（认证变更后由 keepworkSDK 调用）。
     * 等同于 reset()，不清除持久化层。
     */
    clearMemoryCache(): void;
    /**
     * 从工具/会话 config 对象创建作用域 store 实例。
     * 自动解析 workspace 和 mountFolder，回退到当前值或 'workspace_default'。
     *
     * @param config - 包含可选 workspace / mountFolder 字段的配置对象
     * @returns 作用域 store 代理
     */
    withConfig(config?: Record<string, unknown>): this;
    /**
     * 创建覆盖了 workspace 和/或 mountedFolder 的轻量代理实例。
     * 代理的所有方法调用使用指定的作用域，不会修改共享 store —
     * 对并发异步操作安全。
     * 共享可变状态（Promise/定时器/缓存/同步标志/数据 map）会写穿到父 store，
     * 保持所有代理状态一致。
     *
     * @param workspace     - 工作空间名称覆盖（null 表示无工作空间）
     * @param mountedFolder - 挂载文件夹覆盖
     */
    withWorkspace(workspace: string | null, mountedFolder?: MountedFolder | null): this;
    /**
     * 将 mountedFolder 输入（路径字符串或对象）规范化为标准对象格式。
     * 路径字符串格式：`"username/remoteStorePath.../workspace"`（至少 2 段）
     * 返回 null 表示无效输入，undefined 表示未传入。
     *
     * @param mountedFolder - 路径字符串、MountedFolder 对象或 null
     */
    _normalizeMountedFolder(mountedFolder: unknown): MountedFolder | null | undefined;
    /**
     * 注册 URL 搜索路径，作为 readFile 的 URL 回退。
     * 当本地和 mountedFolder 均找不到文件时，按前缀匹配 baseUrl 拼接路径并 fetch。
     *
     * @param prefix    - 路径前缀（含 workspace，如 "myws/skills"）
     * @param baseUrl   - 基础 URL（末尾应含 /）
     * @param options   - isReadonly（默认 true）：只读路径在 readFile 中优先级最高
     */
    addSearchPath(prefix: string, baseUrl: string, options?: {
        isReadonly?: boolean;
    }): void;
    /**
     * 移除已注册的搜索路径。
     * @param prefix - 要移除的路径前缀
     */
    removeSearchPath(prefix: string): void;
    /**
     * 从已注册搜索路径中读取文件（URL 回退）。
     * 命中内存缓存时直接返回；否则发起 fetch 并将结果缓存到内存。
     * 使用 inflight Map 合并并发重复请求。
     *
     * @param pageName     - 相对于 workspace 的页面名（不含 workspace 前缀）
     * @param readonlyOnly - true=仅搜索只读路径；false=仅搜索非只读路径；undefined=全部
     */
    _readFromSearchPath(pageName: string, readonlyOnly?: boolean): Promise<string | null>;
    /** @private 实际 fetch 逻辑（_readFromSearchPath 去重后调用一次）。 */
    private _doReadFromSearchPath;
    /**
     * 获取文件的绝对 URL。
     * 优先匹配注册的搜索路径；回退到 Keepwork raw API URL。
     *
     * @param filename - 文件名（相对于 workspace，不含 .md）
     */
    getAbsUrl(filename: string): string;
    /**
     * 构建 mountedFolder 中文件的远端路径。
     * 格式：`username/remoteStorePath/workspace/pageName`
     */
    _getMountedPagePath(pageName: string): string;
    /**
     * 获取 mountedFolder 的远端树参数。
     * @returns `{ sitePath, remotePrefix, folderBase }`
     */
    _getMountedTreeParams(): {
        sitePath: string;
        remotePrefix: string;
        folderBase: string;
    };
    /**
     * 检查路径是否为绝对路径（以 `//` 开头）。
     * 绝对路径格式：`//username/sitename/relative_path`
     */
    _isAbsolutePath(pageName: string): boolean;
    /**
     * 通过绝对路径（//username/sitename/...）读取文件内容。
     * 结果缓存到内存中，后续调用直接返回缓存。
     *
     * @param absolutePath - `//` 开头的路径
     * @param bUseCache    - 是否使用 API 缓存（默认 true）
     */
    _readAbsoluteFile(absolutePath: string, bUseCache?: boolean): Promise<string | null>;
    /**
     * 从 mountedFolder（只读）读取文件内容。
     * @param pageName  - 相对于 workspace 的页面名
     * @param bUseCache - 是否使用 API 缓存（默认 true）
     */
    _readMountedFile(pageName: string, bUseCache?: boolean): Promise<string | null>;
    /**
     * 列出 mountedFolder（只读）中的目录内容。
     * @returns 子项名称集合（目录以 `/` 结尾）
     */
    _listMountedDir(dirPath: string, isRoot: boolean, _normalizedDir: string, recursive?: boolean): Promise<Set<string>>;
    /**
     * 获取 mountedFolder 的完整远端文件树（非递归，内部调用 sdk.getSiteTree）。
     * @returns 页面名数组（相对于 mounted workspace，不含 .md）
     */
    _fetchMountedTree(): Promise<string[]>;
    /**
     * 规范化页面名：移除前导 `./` / `/`、workspace 前缀和 `.md` 扩展名。
     * 绝对路径（`//...`）不做任何处理。
     *
     * @param pageName - 原始页面名
     */
    sanitizePageName(pageName: string): string;
    /**
     * 获取含 workspace 前缀的有效页面名（用于 IndexedDB / 远端路径）。
     *
     * @param pageName - 相对页面名
     */
    getEffectivePageName(pageName: string): string;
    /**
     * 去除 LLM 工具调用有时注入的多余 "workspace/" 路径段。
     * 如 "silvermind/workspace/memory/x" → "silvermind/memory/x"
     * @private
     */
    _stripSpuriousWorkspaceSegment(name: string): string;
    /**
     * 将页面名转换为规范的内部存储 key。
     * 非绝对路径始终以 `workspace/pageName` 形式存储。
     */
    _toInternalPageKey(pageName: string): string;
    /**
     * 将内部 key 转换为当前 workspace 的相对名称。
     * 若 key 属于其他 workspace，返回 null。
     */
    _toCurrentWorkspaceRelative(pageKey: string): string | null;
    /**
     * 设置 override 用户名（用于访问其他用户的页面数据）。
     * 用户名变更时自动重置所有缓存。
     * 传入 null 或 '' 表示使用当前登录用户。
     *
     * @param username - 要覆盖的用户名，或 null/'' 恢复当前用户
     */
    setUsername(username: string | null): void;
    /**
     * 获取当前使用的用户名（override 或当前登录用户）。
     * @returns 用户名字符串，未登录时返回 null
     */
    getUsername(): string | null;
    /**
     * 初始化远端同步定时器（若尚未初始化）。
     * 由 savePageData 在有数据变更时自动调用。
     */
    checkInitSyncTimers(): void;
    /**
     * 销毁 store，清除所有定时器（页面卸载时调用）。
     */
    destroy(): void;
    /**
     * 确保用户档案已加载（若已有 token）。
     * 无 token 时允许匿名模式正常运行，不阻塞操作。
     */
    ensureUserProfile(): Promise<void>;
    /** @internal 由 data 层实现 */
    getValueByPath(_obj: Record<string, unknown> | null | undefined, _path: string): unknown;
    /** @internal 由 data 层实现 */
    setValueByPath(_obj: Record<string, unknown>, _path: string, _value: unknown): boolean;
    /** @internal 由 data 层实现 */
    isValidValue(_value: unknown): boolean;
    /** @internal 由 sync 层实现 */
    getRemotePagePath(_pageName: string): string;
    /** @internal 由 sync 层实现 */
    getLocalPagePath(_pageName: string): string;
}
//# sourceMappingURL=PersonalPageStore.base.d.ts.map