UNPKG

@agentics.org/sparc2

Version:

SPARC 2.0 - Autonomous Vector Coding Agent + MCP. SPARC 2.0, vectorized AI code analysis, is an intelligent coding agent framework built to automate and streamline software development. It combines secure execution environments, and version control into a

160 lines (143 loc) 4.05 kB
/** * Configuration module for SPARC 2.0 * Handles loading and validation of TOML configuration and environment variables. */ import { parse } from "https://deno.land/std@0.215.0/toml/mod.ts"; import { load } from "https://deno.land/std@0.215.0/dotenv/mod.ts"; /** * SPARC 2.0 configuration interface */ export interface SPARCConfig { execution: { mode: "automatic" | "semi" | "manual" | "custom"; diff_mode: "file" | "function"; processing: "parallel" | "sequential" | "concurrent" | "swarm"; }; logging: { enable: boolean; vector_logging: boolean; }; rollback: { checkpoint_enabled: boolean; temporal_rollback: boolean; }; models: { reasoning: string; instruct: string; }; } /** * Environment configuration interface */ export interface EnvConfig { OPENAI_API_KEY: string; GITHUB_TOKEN: string; GITHUB_ORG: string; EDGE_FUNCTION_URL: string; E2B_API_KEY: string; VECTOR_DB_URL: string; } /** * Load and validate TOML configuration * @param configPath Path to TOML config file * @returns Validated SPARCConfig object * @throws Error if config is invalid */ export async function loadConfig(configPath: string): Promise<SPARCConfig> { const tomlContent = await Deno.readTextFile(configPath); const rawConfig = parse(tomlContent) as { execution?: { mode?: string; diff_mode?: string; processing?: string; }; logging?: { enable?: boolean; vector_logging?: boolean; }; rollback?: { checkpoint_enabled?: boolean; temporal_rollback?: boolean; }; models?: { reasoning?: string; instruct?: string; }; }; // Validate required sections exist if (!rawConfig.execution || !rawConfig.logging || !rawConfig.rollback || !rawConfig.models) { throw new Error("Missing required configuration sections"); } // Validate execution mode if (!["automatic", "semi", "manual", "custom"].includes(rawConfig.execution.mode || "")) { throw new Error("Invalid execution mode"); } // Validate diff mode if (!["file", "function"].includes(rawConfig.execution.diff_mode || "")) { throw new Error("Invalid diff mode"); } // Validate processing mode if ( !["parallel", "sequential", "concurrent", "swarm"].includes( rawConfig.execution.processing || "", ) ) { throw new Error("Invalid processing mode"); } // Cast validated config const config: SPARCConfig = { execution: { mode: rawConfig.execution.mode as "automatic" | "semi" | "manual" | "custom", diff_mode: rawConfig.execution.diff_mode as "file" | "function", processing: rawConfig.execution.processing as | "parallel" | "sequential" | "concurrent" | "swarm", }, logging: { enable: Boolean(rawConfig.logging.enable), vector_logging: Boolean(rawConfig.logging.vector_logging), }, rollback: { checkpoint_enabled: Boolean(rawConfig.rollback.checkpoint_enabled), temporal_rollback: Boolean(rawConfig.rollback.temporal_rollback), }, models: { reasoning: String(rawConfig.models.reasoning || ""), instruct: String(rawConfig.models.instruct || ""), }, }; return config; } /** * Load and validate environment variables * @returns Validated EnvConfig object * @throws Error if required variables are missing */ export async function loadEnvConfig(): Promise<EnvConfig> { // Load .env file if it exists await load(); const requiredVars = [ "OPENAI_API_KEY", "GITHUB_TOKEN", "GITHUB_ORG", "EDGE_FUNCTION_URL", "E2B_API_KEY", "VECTOR_DB_URL", ] as const; const config = {} as EnvConfig; const missing: string[] = []; for (const varName of requiredVars) { const value = Deno.env.get(varName); if (!value) { missing.push(varName); } else { config[varName] = value; } } if (missing.length > 0) { throw new Error(`Missing required environment variables: ${missing.join(", ")}`); } return config; }