Files
amcs/internal/config/validate.go
Hein 66370a7f0e feat(tools): implement CRUD operations for thoughts and projects
* Add tools for creating, retrieving, updating, and deleting thoughts.
* Implement project management tools for creating and listing projects.
* Introduce linking functionality between thoughts.
* Add search and recall capabilities for thoughts based on semantic queries.
* Implement statistics and summarization tools for thought analysis.
* Create database migrations for thoughts, projects, and links.
* Add helper functions for UUID parsing and project resolution.
2026-03-24 15:38:59 +02:00

72 lines
2.1 KiB
Go

package config
import (
"fmt"
"strings"
)
func (c Config) Validate() error {
if strings.TrimSpace(c.Database.URL) == "" {
return fmt.Errorf("invalid config: database.url is required")
}
if len(c.Auth.Keys) == 0 {
return fmt.Errorf("invalid config: auth.keys must not be empty")
}
for i, key := range c.Auth.Keys {
if strings.TrimSpace(key.ID) == "" {
return fmt.Errorf("invalid config: auth.keys[%d].id is required", i)
}
if strings.TrimSpace(key.Value) == "" {
return fmt.Errorf("invalid config: auth.keys[%d].value is required", i)
}
}
if strings.TrimSpace(c.MCP.Path) == "" {
return fmt.Errorf("invalid config: mcp.path is required")
}
switch c.AI.Provider {
case "litellm", "openrouter":
default:
return fmt.Errorf("invalid config: unsupported ai.provider %q", c.AI.Provider)
}
if c.AI.Embeddings.Dimensions <= 0 {
return fmt.Errorf("invalid config: ai.embeddings.dimensions must be greater than zero")
}
switch c.AI.Provider {
case "litellm":
if strings.TrimSpace(c.AI.LiteLLM.BaseURL) == "" {
return fmt.Errorf("invalid config: ai.litellm.base_url is required when ai.provider=litellm")
}
if strings.TrimSpace(c.AI.LiteLLM.APIKey) == "" {
return fmt.Errorf("invalid config: ai.litellm.api_key is required when ai.provider=litellm")
}
case "openrouter":
if strings.TrimSpace(c.AI.OpenRouter.BaseURL) == "" {
return fmt.Errorf("invalid config: ai.openrouter.base_url is required when ai.provider=openrouter")
}
if strings.TrimSpace(c.AI.OpenRouter.APIKey) == "" {
return fmt.Errorf("invalid config: ai.openrouter.api_key is required when ai.provider=openrouter")
}
}
if c.Server.Port <= 0 {
return fmt.Errorf("invalid config: server.port must be greater than zero")
}
if c.Search.DefaultLimit <= 0 {
return fmt.Errorf("invalid config: search.default_limit must be greater than zero")
}
if c.Search.MaxLimit < c.Search.DefaultLimit {
return fmt.Errorf("invalid config: search.max_limit must be greater than or equal to search.default_limit")
}
if strings.TrimSpace(c.Logging.Level) == "" {
return fmt.Errorf("invalid config: logging.level is required")
}
return nil
}