@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
160 lines (143 loc) • 4.05 kB
text/typescript
/**
* 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;
}