| package agent |
| |
| import ( |
| "context" |
| "log" |
| "time" |
| |
| "github.com/iomodo/staff/git" |
| "github.com/iomodo/staff/llm" |
| "github.com/iomodo/staff/tm" |
| "github.com/iomodo/staff/tm/git_tm" |
| ) |
| |
| // ExampleAgent demonstrates how to create and run an agent |
| func ExampleAgent() { |
| // Create git interface for task management |
| gitInterface := git.DefaultGit("./tasks-repo") |
| |
| // Create task manager |
| taskManager := git_tm.NewGitTaskManager(gitInterface, "./tasks-repo") |
| |
| // Create LLM configuration |
| llmConfig := llm.Config{ |
| Provider: llm.ProviderOpenAI, |
| APIKey: "your-openai-api-key-here", // Replace with actual API key |
| BaseURL: "https://api.openai.com/v1", |
| Timeout: 30 * time.Second, |
| } |
| |
| // Create agent configuration |
| config := AgentConfig{ |
| Name: "backend-engineer-1", |
| Role: "Backend Engineer", |
| GitUsername: "backend-agent", |
| GitEmail: "backend-agent@company.com", |
| WorkingDir: "./workspace", |
| LLMProvider: llm.ProviderOpenAI, |
| LLMModel: "gpt-4", |
| LLMConfig: llmConfig, |
| SystemPrompt: `You are a skilled backend engineer. Your role is to: |
| 1. Analyze tasks and provide technical solutions |
| 2. Write clean, maintainable code |
| 3. Consider performance, security, and scalability |
| 4. Provide clear documentation for your solutions |
| 5. Follow best practices and coding standards |
| |
| When responding to tasks, provide: |
| - Detailed technical analysis |
| - Code examples where appropriate |
| - Implementation considerations |
| - Testing recommendations |
| - Documentation suggestions`, |
| TaskManager: taskManager, |
| GitRepoPath: "./code-repo", |
| GitRemote: "origin", |
| GitBranch: "main", |
| } |
| |
| // Create agent |
| agent, err := NewAgent(config) |
| if err != nil { |
| log.Fatalf("Failed to create agent: %v", err) |
| } |
| |
| // Create a sample task |
| ctx := context.Background() |
| task, err := taskManager.CreateTask(ctx, &tm.TaskCreateRequest{ |
| Title: "Implement user authentication API", |
| Description: "Create a REST API endpoint for user authentication with JWT tokens. Include login, logout, and token refresh functionality.", |
| OwnerID: config.Name, |
| Priority: tm.PriorityHigh, |
| }) |
| if err != nil { |
| log.Fatalf("Failed to create task: %v", err) |
| } |
| |
| log.Printf("Created task: %s", task.ID) |
| |
| // Run the agent (this will process tasks in an infinite loop) |
| go func() { |
| if err := agent.Run(); err != nil { |
| log.Printf("Agent stopped with error: %v", err) |
| } |
| }() |
| |
| // Let the agent run for a while |
| time.Sleep(5 * time.Minute) |
| |
| // Stop the agent |
| agent.Stop() |
| } |
| |
| // ExampleMultipleAgents demonstrates how to create multiple agents with different roles |
| func ExampleMultipleAgents() { |
| // Create shared git interface for task management |
| gitInterface := git.DefaultGit("./tasks-repo") |
| taskManager := git_tm.NewGitTaskManager(gitInterface, "./tasks-repo") |
| |
| // Create agents with different roles |
| agents := []AgentConfig{ |
| { |
| Name: "backend-engineer-1", |
| Role: "Backend Engineer", |
| GitUsername: "backend-agent", |
| GitEmail: "backend-agent@company.com", |
| WorkingDir: "./workspace/backend", |
| LLMProvider: llm.ProviderOpenAI, |
| LLMModel: "gpt-4", |
| LLMConfig: llm.Config{ |
| Provider: llm.ProviderOpenAI, |
| APIKey: "your-openai-api-key", |
| BaseURL: "https://api.openai.com/v1", |
| Timeout: 30 * time.Second, |
| }, |
| SystemPrompt: `You are a backend engineer. Focus on: |
| - API design and implementation |
| - Database design and optimization |
| - Security best practices |
| - Performance optimization |
| - Code quality and testing`, |
| TaskManager: taskManager, |
| GitRepoPath: "./code-repo", |
| GitRemote: "origin", |
| GitBranch: "main", |
| }, |
| { |
| Name: "frontend-engineer-1", |
| Role: "Frontend Engineer", |
| GitUsername: "frontend-agent", |
| GitEmail: "frontend-agent@company.com", |
| WorkingDir: "./workspace/frontend", |
| LLMProvider: llm.ProviderOpenAI, |
| LLMModel: "gpt-4", |
| LLMConfig: llm.Config{ |
| Provider: llm.ProviderOpenAI, |
| APIKey: "your-openai-api-key", |
| BaseURL: "https://api.openai.com/v1", |
| Timeout: 30 * time.Second, |
| }, |
| SystemPrompt: `You are a frontend engineer. Focus on: |
| - User interface design and implementation |
| - React/Vue/Angular development |
| - Responsive design and accessibility |
| - Performance optimization |
| - User experience best practices`, |
| TaskManager: taskManager, |
| GitRepoPath: "./code-repo", |
| GitRemote: "origin", |
| GitBranch: "main", |
| }, |
| { |
| Name: "product-manager-1", |
| Role: "Product Manager", |
| GitUsername: "pm-agent", |
| GitEmail: "pm-agent@company.com", |
| WorkingDir: "./workspace/product", |
| LLMProvider: llm.ProviderOpenAI, |
| LLMModel: "gpt-4", |
| LLMConfig: llm.Config{ |
| Provider: llm.ProviderOpenAI, |
| APIKey: "your-openai-api-key", |
| BaseURL: "https://api.openai.com/v1", |
| Timeout: 30 * time.Second, |
| }, |
| SystemPrompt: `You are a product manager. Focus on: |
| - Product strategy and roadmap |
| - User research and requirements gathering |
| - Feature prioritization and planning |
| - Stakeholder communication |
| - Product documentation and specifications`, |
| TaskManager: taskManager, |
| GitRepoPath: "./docs-repo", |
| GitRemote: "origin", |
| GitBranch: "main", |
| }, |
| } |
| |
| // Create and start all agents |
| for _, config := range agents { |
| agent, err := NewAgent(config) |
| if err != nil { |
| log.Printf("Failed to create agent %s: %v", config.Name, err) |
| continue |
| } |
| |
| go func(agent *Agent, name string) { |
| log.Printf("Starting agent: %s", name) |
| if err := agent.Run(); err != nil { |
| log.Printf("Agent %s stopped with error: %v", name, err) |
| } |
| }(agent, config.Name) |
| } |
| |
| // Let agents run for a while |
| time.Sleep(10 * time.Minute) |
| } |