import type { ZodType, ZodTypeAny } from 'zod'; import type { CompressionStrategy } from '../executor/output-compression.service.js'; import type { Logger } from '../output/logger.js'; import type { LLMProvider } from '../types/llm.types.js'; import type { MemoryProvider, MemoryProviderDescriptor } from '../types/memory.types.js'; import type { ApiModelId, ModelPricing } from '../types/model.types.js'; export type { CompressionStrategy }; export interface CodePluginModule { register(api: PluginAPI): Promise | void; } export interface PluginAPI { cli: { addSubcommand(name: string, description: string, handler: () => Promise | void): void; }; compression: { registerStrategy(tool: string, fn: CompressionStrategy): void; }; config: { extend(schema: ZodType): () => TOutput; }; lifecycle: PluginLifecycleHooks; logger: Pick; memory: { activate(name: string, config?: Record): void; register(name: string, provider: PluginMemoryProvider, descriptor?: MemoryProviderDescriptor): void; }; providers: { register(name: string, provider: PluginProvider, descriptor?: ProviderDescriptor): void; }; } export interface PluginLifecycleHooks { onActivate: (fn: () => Promise) => void; onDeactivate: (fn: () => Promise) => void; } export type PluginMemoryProvider = PluginMemoryProviderClass | PluginMemoryProviderFactory; export type PluginMemoryProviderClass = new (config: Record) => MemoryProvider; export type PluginMemoryProviderFactory = (config: Record) => MemoryProvider; export type PluginProvider = PluginProviderClass | PluginProviderFactory; export type PluginProviderClass = new (config: Record) => LLMProvider; export type PluginProviderFactory = (config: Record) => LLMProvider; export interface ProviderDescriptor { /** * Real API model ids per registry alias (standard + optional Vertex form). * Only needed when the registry alias differs from the vendor's API id * (e.g. Anthropic `claude-opus-4.8` → `claude-opus-4-8`). Omit for providers * whose alias already equals the API id. */ apiModelIds?: Record; configSchema?: ZodTypeAny; configureInteractive?: (ctx: ProviderWizardContext) => Promise>; /** Context window (tokens) per model alias. */ contextWindows?: Record; defaultModel: string; description?: string; envVars?: { apiKey?: string; model?: string; }; helpText?: string; label: string; modelModes: Array<{ mode: string; model: string; }>; modelPrefix?: string; /** Per-model pricing (USD per million tokens). */ pricing?: Record; requiresApiKey: boolean; } export interface ProviderWizardContext { currentConfig?: Record; } //# sourceMappingURL=plugin-api.types.d.ts.map