import type { Effect } from "effect"; import type { ToolId } from "@executor/sdk"; import type { OperationBinding, InvocationConfig, HeaderValue } from "./types"; // --------------------------------------------------------------------------- // Operation store — plugin's own storage for invocation data // --------------------------------------------------------------------------- export interface SourceConfig { readonly spec: string; readonly baseUrl?: string; readonly namespace?: string; readonly headers?: Record; } export interface StoredSource { readonly namespace: string; readonly name: string; readonly config: SourceConfig; } export interface StoredOperation { readonly toolId: ToolId; readonly namespace: string; readonly binding: OperationBinding; readonly config: InvocationConfig; } export interface OpenApiOperationStore { readonly get: ( toolId: ToolId, ) => Effect.Effect<{ binding: OperationBinding; config: InvocationConfig } | null>; readonly put: (entries: readonly StoredOperation[]) => Effect.Effect; readonly remove: (toolId: ToolId) => Effect.Effect; readonly listByNamespace: (namespace: string) => Effect.Effect; readonly removeByNamespace: (namespace: string) => Effect.Effect; readonly putSource: (source: StoredSource) => Effect.Effect; readonly removeSource: (namespace: string) => Effect.Effect; readonly listSources: () => Effect.Effect; }