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; }