Add Github integration to subtasks

Change-Id: If382f2f5238e9d2323d6c2761d3d70a626ff9065
diff --git a/server/subtasks/service_test.go b/server/subtasks/service_test.go
index ade62fc..158bcdc 100644
--- a/server/subtasks/service_test.go
+++ b/server/subtasks/service_test.go
@@ -80,7 +80,7 @@
 	mockProvider := NewMockLLMProvider([]string{})
 	agentRoles := []string{"backend", "frontend", "qa"}
 	
-	service := NewSubtaskService(mockProvider, nil, agentRoles)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
 	
 	if service == nil {
 		t.Fatal("NewSubtaskService returned nil")
@@ -106,7 +106,7 @@
 
 	mockProvider := NewMockLLMProvider([]string{decisionResponse})
 	agentRoles := []string{"backend", "frontend", "qa"}
-	service := NewSubtaskService(mockProvider, nil, agentRoles)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
 	
 	// Test the parseSubtaskDecision method directly since ShouldGenerateSubtasks is used by manager
 	decision, err := service.parseSubtaskDecision(decisionResponse)
@@ -165,7 +165,7 @@
 
 	mockProvider := NewMockLLMProvider([]string{jsonResponse})
 	agentRoles := []string{"backend", "frontend", "qa", "ceo"} // Include CEO for agent creation
-	service := NewSubtaskService(mockProvider, nil, agentRoles)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
 	
 	task := &tm.Task{
 		ID:          "test-task-123",
@@ -266,7 +266,7 @@
 	
 	mockProvider := NewMockLLMProvider([]string{invalidResponse})
 	agentRoles := []string{"backend", "frontend"}
-	service := NewSubtaskService(mockProvider, nil, agentRoles)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
 	
 	task := &tm.Task{
 		ID:    "test-task-123",
@@ -302,7 +302,7 @@
 
 	mockProvider := NewMockLLMProvider([]string{jsonResponse})
 	agentRoles := []string{"backend", "frontend"}
-	service := NewSubtaskService(mockProvider, nil, agentRoles)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
 	
 	task := &tm.Task{
 		ID:    "test-task-123",
@@ -322,7 +322,7 @@
 
 func TestGenerateSubtaskPR(t *testing.T) {
 	mockProvider := NewMockLLMProvider([]string{})
-	service := NewSubtaskService(mockProvider, nil, []string{"backend"})
+	service := NewSubtaskService(mockProvider, nil, []string{"backend"}, nil, "example", "repo", nil)
 	
 	analysis := &tm.SubtaskAnalysis{
 		ParentTaskID:        "task-123",
@@ -342,21 +342,21 @@
 		},
 	}
 	
-	prURL, err := service.GenerateSubtaskPR(context.Background(), analysis)
-	if err != nil {
-		t.Fatalf("GenerateSubtaskPR failed: %v", err)
+	// Test that PR generation fails when no PR provider is configured
+	_, err := service.GenerateSubtaskPR(context.Background(), analysis)
+	if err == nil {
+		t.Error("Expected error when PR provider not configured, got nil")
 	}
 	
-	expectedURL := "https://github.com/example/repo/pull/subtasks-task-123"
-	if prURL != expectedURL {
-		t.Errorf("Expected PR URL %s, got %s", expectedURL, prURL)
+	if !strings.Contains(err.Error(), "PR provider not configured") {
+		t.Errorf("Expected 'PR provider not configured' error, got: %v", err)
 	}
 }
 
 func TestBuildSubtaskAnalysisPrompt(t *testing.T) {
 	mockProvider := NewMockLLMProvider([]string{})
 	agentRoles := []string{"backend", "frontend", "qa"}
-	service := NewSubtaskService(mockProvider, nil, agentRoles)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
 	
 	task := &tm.Task{
 		Title:       "Build authentication system",
@@ -387,7 +387,7 @@
 func TestGetSubtaskAnalysisSystemPrompt(t *testing.T) {
 	mockProvider := NewMockLLMProvider([]string{})
 	agentRoles := []string{"backend", "frontend", "qa", "devops"}
-	service := NewSubtaskService(mockProvider, nil, agentRoles)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
 	
 	systemPrompt := service.getSubtaskAnalysisSystemPrompt()
 	
@@ -411,7 +411,7 @@
 func TestIsValidAgentRole(t *testing.T) {
 	mockProvider := NewMockLLMProvider([]string{})
 	agentRoles := []string{"backend", "frontend", "qa"}
-	service := NewSubtaskService(mockProvider, nil, agentRoles)
+	service := NewSubtaskService(mockProvider, nil, agentRoles, nil, "example", "repo", nil)
 	
 	if !service.isValidAgentRole("backend") {
 		t.Error("'backend' should be a valid agent role")
@@ -432,7 +432,7 @@
 
 func TestParseSubtaskAnalysis_Priority(t *testing.T) {
 	mockProvider := NewMockLLMProvider([]string{})
-	service := NewSubtaskService(mockProvider, nil, []string{"backend"})
+	service := NewSubtaskService(mockProvider, nil, []string{"backend"}, nil, "example", "repo", nil)
 	
 	tests := []struct {
 		input    string
@@ -484,7 +484,7 @@
 
 func TestClose(t *testing.T) {
 	mockProvider := NewMockLLMProvider([]string{})
-	service := NewSubtaskService(mockProvider, nil, []string{"backend"})
+	service := NewSubtaskService(mockProvider, nil, []string{"backend"}, nil, "example", "repo", nil)
 	
 	err := service.Close()
 	if err != nil {
@@ -511,7 +511,7 @@
 }`
 
 	mockProvider := NewMockLLMProvider([]string{jsonResponse})
-	service := NewSubtaskService(mockProvider, nil, []string{"backend", "frontend"})
+	service := NewSubtaskService(mockProvider, nil, []string{"backend", "frontend"}, nil, "example", "repo", nil)
 	
 	task := &tm.Task{
 		ID:          "benchmark-task",