import { getPluginDescriptionInfo } from "../../../api/tools/update-plugin-description";
type DescInfo = Awaited<ReturnType<typeof getPluginDescriptionInfo>>;
export interface MissingBaseInfoField {
    /** 展示名（英文，对齐 update-description flag 语义） */
    field: string;
    /** 可操作下一步：补这项该跑哪条命令 */
    hint: string;
}
export interface CollectMissingBaseInfoOptions {
    /**
     * 后端是否存在可选分类（status===1 的分类列表非空）。
     * 私有化 / 无分类标签的环境该值为 false —— 此时 category 不作必填，避免发布被
     * 「无任何合法分类 ID 可填」死锁（详见 ensurePluginMetadataReady）。
     * 缺省（undefined）按"有分类"处理，保持「普通插件分类必填」的既有行为。
     */
    categoriesAvailable?: boolean;
}
/**
 * 计算「发布前缺哪些必填 base info」——纯函数，无网络，可单测。
 *
 * 必填项：name / short / detail-description / icon；category 仅普通插件且后端有可选分类时必填
 * （AI 应用 app_type===1 跳过；私有化等无分类标签环境 categoriesAvailable===false 也跳过）。
 *
 * detail-description 判空对齐 plainTextToRichText（update-plugin-description.ts）：
 * 填过的富文本 is_empty===false 且 doc_text 为原文；从未填则 description 缺失或 is_empty===true。
 * 这一项是本次新增——此前闸门只查 name/short/icon/category，detail 漏填能过闸门、却被后端
 * commit 打回，导致版本建成半成品。
 */
export declare function collectMissingBaseInfo(descInfo: DescInfo, options?: CollectMissingBaseInfoOptions): MissingBaseInfoField[];
/**
 * 把缺失清单格式化成带逐字段可操作指引的错误信息（Layer 1 闸门 / Layer 2 commit 守卫共用）。
 */
export declare function formatMissingBaseInfoError(missing: MissingBaseInfoField[]): string;
export {};
