/** * Write File Atomic — 核心基础层模块。 * * 职责边界: * - 负责:atomicWriteFileSync 等 核心基础层职责 * - 不负责:不属于本模块的职责由对应模块承担 * * 被谁调用:引擎各子模块、管线层 * 调用谁:node:fs、promises、node:path、node:crypto、logger、denied_paths * * 数据流:底层能力请求 → 处理 → 返回结果 * 持久化:读写本地文件(详见代码内路径) */ /** * 解析 filePath 相对真实项目根的相对路径。 * cwd 错配(MCP 子进程 cwd ≠ 项目根,如 nvm/finder/symlink 启动)时,process.cwd() 算出的相对路径以 ".." 开头, * 原代码直接 return 跳过全部黑名单→安全网静默失效。fallback 到 SOLOFORGE_PROJECT(与 resolveProjectRoot 同源), * 多候选根按 [projectPath, SOLOFORGE_PROJECT, cwd] 顺序取首个命中的。返回 null = 真项目外(不查项目黑名单)。 */ export declare function resolveProjectRelativePath(filePath: string, projectPath?: string): string | null; /** 写入前安全黑名单检查(原子写的统一守卫,供 atomicWriteFileSync/File/Json 复用,单源)。 * 默认 checkDeniedPath(含 .soloforge/state/,给 init/外部写);引擎权威 store 传 checkEngineWriteDenied(不含 .soloforge/)。 */ export declare function assertWriteNotDenied(filePath: string, projectPath?: string, check?: (relativePath: string) => string | null): void; /** * 同步原子写入:先写 .tmp 再 rename。 * * **并发安全范围**(适用所有 atomicWriteFile* 调用方,含 *_store.ts): * - 进程内原子(read 看不到半写文件,单线程运行时串行) * - **跨进程不安全**:两进程 read-modify-rename 同文件,后者覆盖前者且无异常 * - 随机 tmp 后缀只防 tmp 碰撞,不序列化最终 rename * 跨进程共享文件(init 全局 patterns / 2 个 MCP 服务器同项目)须外部串行。 * * @param filePath - 目标文件路径 * @param content - 要写入的内容 * @param encoding - 编码,默认 "utf-8" */ export declare function atomicWriteFileSync(filePath: string, content: string, encoding?: BufferEncoding): void; /** * 异步原子写入:先写 .tmp 再 rename。 * * @param filePath - 目标文件路径 * @param content - 要写入的内容 * @param encoding - 编码,默认 "utf-8" * @param check - 黑名单检查函数,默认 checkDeniedPath(含 .soloforge/state/); * 引擎内部状态写 state/(如 task store、query 审计裁剪)传 checkEngineWriteDenied, * 与 file_transaction.atomicWriteJson 的权威 store 通道同源 */ export declare function atomicWriteFile(filePath: string, content: string, encoding?: BufferEncoding, check?: (relativePath: string) => string | null): Promise;