package service import ( "codespace/internal/process" "codespace/internal/workspace" ) // ProcessService manages OpenCode processes for workspaces. type ProcessService struct { workspaces workspace.Manager processes process.Manager } // NewProcessService creates a ProcessService. func NewProcessService(workspaces workspace.Manager, processes process.Manager) *ProcessService { return &ProcessService{workspaces: workspaces, processes: processes} } // Start starts an OpenCode process for the given workspace. func (s *ProcessService) Start(workspaceID string) error { ws, err := s.workspaces.Get(workspaceID) if err != nil { return err } return s.processes.Start(workspaceID, ws.Root) } // Stop stops the OpenCode process for the given workspace. func (s *ProcessService) Stop(workspaceID string) error { return s.processes.Stop(workspaceID) } // Restart restarts the OpenCode process for the given workspace. func (s *ProcessService) Restart(workspaceID string) error { ws, err := s.workspaces.Get(workspaceID) if err != nil { return err } return s.processes.Restart(workspaceID, ws.Root) } // Status returns the process status for the given workspace. func (s *ProcessService) Status(workspaceID string) (process.Status, error) { if _, err := s.workspaces.Get(workspaceID); err != nil { return process.Status{}, err } return s.processes.Status(workspaceID), nil }