@tabbybyte/minion
Version:
A cross-runtime CLI tool for AI-powered command execution. Auto-detects and uses Bun for performance when available, falls back to Node.js.
73 lines (62 loc) • 2.85 kB
JavaScript
import { config } from "dotenv"
import { resolve } from "path"
import { file } from "./runtime-compat.js"
async function loadConfig(configPath) {
// 1. Load .env in cwd (lowest priority)
const localEnvPath = resolve(process.cwd(), ".env")
if (await file.exists(localEnvPath)) {
config({ path: localEnvPath, override: true })
}
// 2. Load --config file (middle priority)
if (configPath && await file.exists(configPath)) {
config({ path: configPath, override: true })
}
// 3. process.env is always present (highest priority)
const provider = process.env.MINION_PROVIDER || "openai"
const configuration = {
provider,
// dryRun: false, // (Temporarily disabled)
temperature: process.env.MINION_TEMPERATURE ? Number(process.env.MINION_TEMPERATURE) : 0.3,
maxSteps: process.env.MINION_MAX_STEPS ? Number(process.env.MINION_MAX_STEPS) : 5,
debug: process.env.MINION_DEBUG === "true" || process.env.MINION_DEBUG === "yes" || process.env.MINION_DEBUG === "1" || !!+process.env.DEBUG,
}
// Provider-specific configuration
switch (provider.toLowerCase()) {
case "openai":
if (!process.env.MINION_OPENAI_API_KEY) {
throw new Error("MINION_OPENAI_API_KEY environment variable is required for OpenAI provider")
}
configuration.apiKey = process.env.MINION_OPENAI_API_KEY
configuration.model = process.env.MINION_OPENAI_MODEL || "gpt-4"
break
case "anthropic":
if (!process.env.MINION_ANTHROPIC_API_KEY) {
throw new Error("MINION_ANTHROPIC_API_KEY environment variable is required for Anthropic provider")
}
configuration.apiKey = process.env.MINION_ANTHROPIC_API_KEY
configuration.model = process.env.MINION_ANTHROPIC_MODEL || "claude-3-sonnet-20240229"
break
case "google":
if (!process.env.MINION_GOOGLE_API_KEY) {
throw new Error("MINION_GOOGLE_API_KEY environment variable is required for Google provider")
}
configuration.apiKey = process.env.MINION_GOOGLE_API_KEY
configuration.model = process.env.MINION_GOOGLE_MODEL || "gemini-2.0-flash-lite"
// Set the expected env variable for the SDK
process.env.GOOGLE_GENERATIVE_AI_API_KEY = process.env.MINION_GOOGLE_API_KEY
break
case "local":
if (!process.env.MINION_LOCAL_API_URL) {
throw new Error("MINION_LOCAL_API_URL environment variable is required for local provider")
}
configuration.baseURL = process.env.MINION_LOCAL_API_URL
configuration.apiKey = process.env.MINION_LOCAL_API_KEY || "local"
configuration.model = process.env.MINION_LOCAL_MODEL || "llama2"
break
default:
throw new Error(`Unsupported provider: ${provider}. Supported providers: openai, anthropic, google, local`)
}
return configuration
}
// Exports
export { loadConfig }