Add api package
Change-Id: Ifcdd1f45c01e98b91c1edef3371332cb4a098e82
diff --git a/server/app/app.go b/server/app/app.go
new file mode 100644
index 0000000..a016c4b
--- /dev/null
+++ b/server/app/app.go
@@ -0,0 +1,48 @@
+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/git_tm"
+)
+
+// App type defines application global state
+type App struct {
+ logger *slog.Logger
+ config *config.Config
+ manager *agent.Manager
+}
+
+// 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,
+ }, 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()))
+ }
+ }
+}