blob: ace8904aa8e897ea3a3c1751a3f161699eb7636f [file] [log] [blame]
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()))
}
}
}