Add gerrit implementation

Change-Id: I293cea35572b051cd1d4a0466fe2fd5a06e81ad9
diff --git a/server/agent/manager.go b/server/agent/manager.go
index 88bfe21..c206665 100644
--- a/server/agent/manager.go
+++ b/server/agent/manager.go
@@ -41,15 +41,38 @@
 	// Create auto-assigner
 	autoAssigner := assignment.NewAutoAssigner(cfg.Agents)
 
-	// Create GitHub PR provider
-	githubConfig := git.GitHubConfig{
-		Token:  cfg.GitHub.Token,
-		Logger: logger,
+	// Create PR provider based on configuration
+	var prProvider git.PullRequestProvider
+	var repoURL string
+	
+	switch cfg.GetPrimaryGitProvider() {
+	case "github":
+		githubConfig := git.GitHubConfig{
+			Token:  cfg.GitHub.Token,
+			Logger: logger,
+		}
+		prProvider = git.NewGitHubPullRequestProvider(cfg.GitHub.Owner, cfg.GitHub.Repo, githubConfig)
+		repoURL = fmt.Sprintf("https://github.com/%s/%s.git", cfg.GitHub.Owner, cfg.GitHub.Repo)
+		logger.Info("Using GitHub as pull request provider", 
+			slog.String("owner", cfg.GitHub.Owner), 
+			slog.String("repo", cfg.GitHub.Repo))
+	case "gerrit":
+		gerritConfig := git.GerritConfig{
+			Username: cfg.Gerrit.Username,
+			Password: cfg.Gerrit.Password,
+			BaseURL:  cfg.Gerrit.BaseURL,
+			Logger:   logger,
+		}
+		prProvider = git.NewGerritPullRequestProvider(cfg.Gerrit.Project, gerritConfig)
+		repoURL = fmt.Sprintf("%s/%s", cfg.Gerrit.BaseURL, cfg.Gerrit.Project)
+		logger.Info("Using Gerrit as pull request provider", 
+			slog.String("base_url", cfg.Gerrit.BaseURL), 
+			slog.String("project", cfg.Gerrit.Project))
+	default:
+		return nil, fmt.Errorf("no valid Git provider configured")
 	}
-	prProvider := git.NewGitHubPullRequestProvider(cfg.GitHub.Owner, cfg.GitHub.Repo, githubConfig)
 
-	// Create clone manager for per-agent Git repositories
-	repoURL := fmt.Sprintf("https://github.com/%s/%s.git", cfg.GitHub.Owner, cfg.GitHub.Repo)
+	// Create clone manager for per-agent Git repositories  
 	workspacePath := filepath.Join(".", "workspace")
 	cloneManager := git.NewCloneManager(repoURL, workspacePath)
 
@@ -109,13 +132,24 @@
 		break
 	}
 
+	// Get owner and repo for subtask service based on provider
+	var owner, repo string
+	switch m.config.GetPrimaryGitProvider() {
+	case "github":
+		owner = m.config.GitHub.Owner
+		repo = m.config.GitHub.Repo
+	case "gerrit":
+		owner = m.config.Gerrit.Project
+		repo = m.config.Gerrit.Project
+	}
+	
 	m.subtaskService = subtasks.NewSubtaskService(
 		firstAgent.Provider,
 		m.taskManager,
 		agentRoles,
 		m.prProvider,
-		m.config.GitHub.Owner,
-		m.config.GitHub.Repo,
+		owner,
+		repo,
 		m.cloneManager,
 		m.logger,
 	)
@@ -569,7 +603,15 @@
 		return "", fmt.Errorf("failed to create PR: %w", err)
 	}
 
-	return fmt.Sprintf("https://github.com/%s/%s/pull/%d", m.config.GitHub.Owner, m.config.GitHub.Repo, pr.Number), nil
+	// Generate provider-specific PR URL
+	switch m.config.GetPrimaryGitProvider() {
+	case "github":
+		return fmt.Sprintf("https://github.com/%s/%s/pull/%d", m.config.GitHub.Owner, m.config.GitHub.Repo, pr.Number), nil
+	case "gerrit":
+		return fmt.Sprintf("%s/c/%s/+/%d", m.config.Gerrit.BaseURL, m.config.Gerrit.Project, pr.Number), nil
+	default:
+		return "", fmt.Errorf("unknown git provider")
+	}
 }
 
 // buildPRDescription creates PR description from template