diff --git a/main.go b/main.go index 3686a73..1c1fed9 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ import ( "fmt" "log" "os" + "path/filepath" "strconv" "strings" @@ -18,6 +19,13 @@ import ( const baseURL = "http://127.0.0.1:12434/v1" +func resolvePath(base, rel string) string { + if filepath.IsAbs(rel) { + return rel // absoluter Pfad → direkt nutzen + } + return filepath.Join(base, rel) +} + func selectModel(client *openai.Client) string { modelsPage, err := client.Models.List(context.Background()) if err != nil { @@ -53,25 +61,43 @@ func selectModel(client *openai.Client) string { } func main() { + // Verzeichnis der ausführbaren Binary ermitteln + execPath, err := os.Executable() + if err != nil { + log.Fatalf("Konnte Executable-Pfad nicht ermitteln: %v", err) + } + execDir := filepath.Dir(execPath) + // Flags definieren verbose := flag.Bool("verbose", false, "Zeigt alle Chat-Nachrichten vollständig an") - prdFile := flag.String("prd", "PRD.md", "Pfad zur PRD-Datei") - workDir := flag.String("dir", ".", "Arbeitsverzeichnis") + workDir := flag.String("workdir", "workspace", "Arbeitsverzeichnis (relativ zur Binary oder absolut)") + prdFile := flag.String("prd", "PRD.md", "PRD-Datei (relativ zum Arbeitsverzeichnis oder absolut)") flag.Parse() + // Pfade auflösen + resolvedWorkDir := resolvePath(execDir, *workDir) + resolvedPRD := resolvePath(resolvedWorkDir, *prdFile) + + // Arbeitsverzeichnis anlegen falls nicht vorhanden + if err := os.MkdirAll(resolvedWorkDir, 0755); err != nil { + log.Fatalf("Konnte Arbeitsverzeichnis nicht anlegen: %v", err) + } + + fmt.Println("🤖 LLM Agent") + fmt.Printf("📁 Arbeitsverzeichnis : %s\n", resolvedWorkDir) + fmt.Printf("📋 PRD-Datei : %s\n", resolvedPRD) + if *verbose { + fmt.Println("🔍 Verbose-Modus aktiv") + } + client := openai.NewClient( oaioption.WithBaseURL(baseURL), oaioption.WithAPIKey("ollama"), ) - fmt.Println("🤖 LLM Agent") - if *verbose { - fmt.Println("🔍 Verbose-Modus aktiv") - } - model := selectModel(&client) - loop := agent.NewAgentLoop(model, *workDir, *prdFile, *verbose) + loop := agent.NewAgentLoop(model, resolvedWorkDir, resolvedPRD, *verbose) if err := loop.Run(); err != nil { log.Fatalf("Agent fehlgeschlagen: %v", err) }