import type { BladeClient } from "../blade-client";
/**
* 一个插件在当前用户眼里的展示信息,**与会话无关**。
*
* 连接器面板在首页(还没有 sessionId)也要显示插件名称和图标,所以这份目录
* 只能依赖用户身份:它不激活任何插件、不启动沙盒、不读用户配置。
*/
export interface PluginCatalogEntry {
/** 技术 ID:路径、授权、缓存与调用一律用它。 */
name: string;
/** 包声明的业务名称;null 时界面回退到 `name`。 */
display_name: string | null;
/**
* 包内图标的 opaque token,没有可用图标时为 null。
* 交给 `fetchPluginIcon`,**不是**路径,也不能直接当 URL 用。
*/
icon: string | null;
/** 当前用户是否安装了它。 */
installed: boolean;
}
/**
* 按用户读取的插件目录(无会话)。
*
* 图标只能通过带凭据的请求取字节,再转成 object URL——把 `
` 指向 API
* 路径要靠 cookie,token 用户会拿到 401/403。
*/
export declare class PluginsResource {
private client;
constructor(client: BladeClient);
/**
* 列出当前用户安装的插件及其展示信息。
*
* 服务端可能为了补齐名称/图标惰性获取包内容,但绝不激活插件、不连 MCP;
* 单个插件的展示信息读不出来只会降级成占位,不会让整份目录失败。
*/
catalog(init?: RequestInit): Promise<{
plugins: PluginCatalogEntry[];
}>;
/** 取一个插件的包内图标字节(用户级,不需要会话)。 */
fetchIcon(name: string): Promise;
/** 带凭据的图标地址;能直接用 blob URL 的地方优先用 `fetchIcon`。 */
iconUrl(name: string): string;
}