| package app |
| |
| import ( |
| "fmt" |
| "log/slog" |
| |
| "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" |
| ) |
| |
| // App type defines application global state |
| type App struct { |
| logger *slog.Logger |
| config *config.Config |
| manager *agent.Manager |
| git git.GitInterface |
| taskManager tm.TaskManager |
| } |
| |
| // NewApp creates new App |
| func NewApp(config *config.Config, logger *slog.Logger) (*App, error) { |
| // Create task manager using config |
| gitInterface := git.New(config, logger) |
| taskManager := git_tm.NewGitTaskManager(gitInterface, config, logger) |
| |
| manager, err := agent.NewManager(config, taskManager, logger) |
| if err != nil { |
| return nil, fmt.Errorf("failed to create agent manager: %w", err) |
| } |
| |
| return &App{ |
| logger: logger, |
| config: config, |
| manager: manager, |
| git: gitInterface, |
| taskManager: taskManager, |
| }, nil |
| } |
| |
| func (a *App) Start() { |
| a.manager.StartAllAgents() |
| } |
| |
| func (a *App) Stop() { |
| if a.manager != nil { |
| if err := a.manager.Close(); err != nil { |
| a.logger.Error("Error closing manager", slog.String("error", err.Error())) |
| } |
| } |
| } |