package lib import ( "log" "os" "strings" ) // Production paths - single source of truth const ( DBPathDefault = "/tank/inou/data/inou.db" KeyPathDefault = "/tank/inou/master.key" configFile = "/tank/inou/anthropic.env" ) // Init initializes all lib subsystems (crypto, database) with production defaults func Init() error { if err := CryptoInit(KeyPathDefault); err != nil { return err } return DBInit(DBPathDefault) } var ( GeminiKey string = "" AnthropicKey string = "" FireworksKey string = "" SystemAccessorID string = "7b3a3ee1c2776dcd" // Default fallback ) func ConfigInit() { data, err := os.ReadFile(configFile) if err != nil { log.Printf("Warning: %s not found: %v", configFile, err) } else { for _, line := range strings.Split(string(data), "\n") { line = strings.TrimSpace(line) if line == "" || strings.HasPrefix(line, "#") { continue } parts := strings.SplitN(line, "=", 2) if len(parts) != 2 { continue } key := strings.TrimSpace(parts[0]) value := strings.TrimSpace(parts[1]) switch key { case "GEMINI_API_KEY": GeminiKey = value case "ANTHROPIC_API_KEY": AnthropicKey = value case "FIREWORKS_API_KEY": FireworksKey = value case "SYSTEM_ACCESSOR_ID": SystemAccessorID = value } } } // Fallback to environment variables if not set from file if GeminiKey == "" { GeminiKey = os.Getenv("GEMINI_API_KEY") } if AnthropicKey == "" { AnthropicKey = os.Getenv("ANTHROPIC_API_KEY") } if FireworksKey == "" { FireworksKey = os.Getenv("FIREWORKS_API_KEY") } if SystemAccessorID == "" { if envID := os.Getenv("SYSTEM_ACCESSOR_ID"); envID != "" { SystemAccessorID = envID } } // Load SMTP config if smtp, err := os.ReadFile("/tank/inou/smtp.env"); err == nil { for _, line := range strings.Split(string(smtp), "\n") { parts := strings.SplitN(line, "=", 2) if len(parts) != 2 { continue } switch parts[0] { case "SMTP_HOST": smtpHost = parts[1] case "SMTP_PORT": smtpPort = parts[1] case "SMTP_USER": smtpUser = parts[1] case "SMTP_TOKEN": smtpPass = parts[1] case "SMTP_FROM": smtpFrom = parts[1] case "SMTP_FROM_NAME": smtpFromName = parts[1] } } } // Initialize SystemContext with loaded ID SystemContext = &AccessContext{ IsSystem: true, AccessorID: SystemAccessorID, } }