blob: a016c4b09c3a1ae72419062d4a71dbdc3e0a917b [file] [log] [blame]
iomodo90de9152025-07-31 13:20:01 +04001package app
2
3import (
4 "fmt"
5 "log/slog"
6
7 "github.com/iomodo/staff/agent"
8 "github.com/iomodo/staff/config"
9 "github.com/iomodo/staff/git"
10 "github.com/iomodo/staff/tm/git_tm"
11)
12
13// App type defines application global state
14type App struct {
15 logger *slog.Logger
16 config *config.Config
17 manager *agent.Manager
18}
19
20// NewApp creates new App
21func NewApp(config *config.Config, logger *slog.Logger) (*App, error) {
22 // Create task manager using config
23 gitInterface := git.New(config, logger)
24 taskManager := git_tm.NewGitTaskManager(gitInterface, config, logger)
25
26 manager, err := agent.NewManager(config, taskManager, logger)
27 if err != nil {
28 return nil, fmt.Errorf("failed to create agent manager: %w", err)
29 }
30
31 return &App{
32 logger: logger,
33 config: config,
34 manager: manager,
35 }, nil
36}
37
38func (a *App) Start() {
39 a.manager.StartAllAgents()
40}
41
42func (a *App) Stop() {
43 if a.manager != nil {
44 if err := a.manager.Close(); err != nil {
45 a.logger.Error("Error closing manager", slog.String("error", err.Error()))
46 }
47 }
48}