import type { JsonObject } from "./built-in-file-tools.js"; export type PluginStatus = "enabled" | "disabled" | "error"; export interface PluginCatalogTool { name: string; description: string; requiredParams?: string[]; } export interface PluginCatalogEntry { plugin: string; version?: string; description?: string; status: PluginStatus; tools: PluginCatalogTool[]; } export interface PluginCatalogSnapshot { revision: number; plugins: PluginCatalogEntry[]; } export interface PluginListenerSummary { event: string; delivery: "poll" | "force" | "wake"; running: boolean; error?: string; } export interface PluginSummary { name: string; version?: string; description?: string; status: PluginStatus; enabled: boolean; source?: string; installedAt?: string; toolCount: number; tools?: { name: string; title?: string; description: string; }[]; listeners: PluginListenerSummary[]; running?: boolean; error?: string; builtin?: boolean; } export type PluginManageAction = "install" | "uninstall" | "reload" | "enable" | "disable" | "list"; export interface PluginManageRequest { action: PluginManageAction; name?: string; source?: string; config?: Record; } export interface PluginManageResult { ok: boolean; error?: string; summary?: PluginSummary; plugins?: PluginSummary[]; } export interface PluginInvokeContext { toolCallId?: string; signal?: AbortSignal; } export interface PluginToolInvocationResult { ok: boolean; result?: unknown; error?: string; inputSchema?: unknown; durationMs?: number; } export interface PluginToolSchema { plugin: string; name: string; title?: string; description: string; inputSchema: unknown; } export interface ACodePluginBridge { listPlugins(): Promise; getCatalog(): Promise; getToolSchema(qualifiedName: string): Promise; invokeTool(plugin: string, tool: string, params: JsonObject, ctx?: PluginInvokeContext): Promise; manage(request: PluginManageRequest): Promise; getCommandDirs?(): Promise; exposePlugin?(plugin: string): void; }