import type { FileSystem } from "../../config-mutations/dist/index.js"; import type { RunnerScope, RuntimeConfig } from "./runtime.js"; export type PrimitiveConfigFieldType = "string" | "number" | "boolean"; export type ConfigFieldType = PrimitiveConfigFieldType | "json"; export interface TypeMap { string: string; number: number; boolean: boolean; } export interface PrimitiveSchemaField { type: T; default: TypeMap[T]; doc: string; env?: string; } export interface JsonSchemaField { type: "json"; default: T; parse: (value: unknown) => T; doc: string; env?: string; } export type SchemaField = PrimitiveSchemaField | JsonSchemaField; export type InferSchemaField = T extends PrimitiveSchemaField ? TypeMap[U] : T extends JsonSchemaField ? U : never; export type ScopeSchema = Record; export type InferConfig = { [K in keyof S]: InferSchemaField; }; export interface ScopeDefinition { scope: string; schema: S; } export interface MemoryConfidenceConfig extends Record { rejectUntagged?: boolean; minInferredConfidence?: number; } export interface MemoryCacheConfig extends Record { enabled?: boolean; maxAgeMs?: number; } export interface MemoryMcpConfig extends Record { allowWrites?: boolean; } export interface MemoryQueryConfig extends Record { defaultBudgetTokens?: number; } export interface MemoryConfig extends Record { root?: string; ingestAgent?: string; ingestTimeoutMs?: number; maxPageBytes?: number; confidence?: MemoryConfidenceConfig; cache?: MemoryCacheConfig; mcp?: MemoryMcpConfig; query?: MemoryQueryConfig; } export interface BraintrustIntegrationConfig extends Record { enabled: boolean; apiKey?: string; apiUrl?: string; project?: string; } export interface IntegrationsConfig extends Record { braintrust?: BraintrustIntegrationConfig; } export interface ScopedConfig { get(key: K): Promise[K]>; getAll(): Promise>; set(key: K, value: InferConfig[K]): Promise; } export interface ConfigStore { scope(definition: ScopeDefinition): ScopedConfig; } export interface ConfigStoreOptions { fs: FileSystem; filePath: string; projectFilePath?: string; env?: Record; } export type ConfigDocument = Record> & { integrations?: IntegrationsConfig; memory?: MemoryConfig; runtime?: Record; }; export interface ResolvedConfig { runtime: RuntimeConfig; runner: RunnerScope; }