| package commands |
| |
| import ( |
| "fmt" |
| "log/slog" |
| "os" |
| |
| "github.com/iomodo/staff/agent" |
| "github.com/iomodo/staff/config" |
| "github.com/iomodo/staff/git" |
| "github.com/iomodo/staff/tm" |
| "github.com/iomodo/staff/tm/git_tm" |
| "github.com/spf13/cobra" |
| ) |
| |
| // Command is an abstraction of the cobra Command |
| type Command = cobra.Command |
| |
| // Global variables for the MVP |
| var ( |
| agentManager *agent.Manager |
| taskManager tm.TaskManager |
| cfg *config.Config |
| ) |
| |
| // Run function starts the application |
| func Run(args []string) error { |
| rootCmd.SetArgs(args) |
| return rootCmd.Execute() |
| } |
| |
| // rootCmd is the main command for Staff MVP |
| var rootCmd = &cobra.Command{ |
| Use: "staff", |
| Short: "Staff - AI Multi-Agent Development System", |
| Long: `Staff MVP - AI agents that autonomously handle development tasks and create GitHub PRs. |
| |
| Examples: |
| staff create-task "Add user authentication" --priority high --agent backend-engineer |
| staff start-agent backend-engineer |
| staff list-tasks |
| staff list-agents`, |
| PersistentPreRunE: initializeApp, |
| } |
| |
| func init() { |
| // Add all commands |
| rootCmd.AddCommand(createTaskCmd) |
| rootCmd.AddCommand(assignTaskCmd) |
| rootCmd.AddCommand(startAgentCmd) |
| rootCmd.AddCommand(stopAgentCmd) |
| rootCmd.AddCommand(listTasksCmd) |
| rootCmd.AddCommand(listAgentsCmd) |
| rootCmd.AddCommand(configCheckCmd) |
| rootCmd.AddCommand(cleanupClonesCmd) |
| rootCmd.AddCommand(versionCmd) |
| } |
| |
| // initializeApp loads configuration and sets up managers |
| func initializeApp(cmd *cobra.Command, args []string) error { |
| // Skip initialization for help and version commands |
| if cmd.Name() == "help" || cmd.Name() == "version" { |
| return nil |
| } |
| |
| // Load configuration |
| var err error |
| cfg, err = config.LoadConfigWithEnvOverrides("config.yaml") |
| if err != nil { |
| return fmt.Errorf("failed to load config: %w", err) |
| } |
| |
| // Initialize task manager |
| logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ |
| Level: slog.LevelInfo, |
| })) |
| |
| gitInterface := git.DefaultGit("../") |
| taskManager = git_tm.NewGitTaskManagerWithLogger(gitInterface, "../", logger) |
| |
| // Initialize agent manager |
| agentManager, err = agent.NewManager(cfg, taskManager, logger) |
| if err != nil { |
| return fmt.Errorf("failed to initialize agent manager: %w", err) |
| } |
| |
| return nil |
| } |