Files
LocalAI/core/services/skills/manager.go
Ettore Di Giacinto 59108fbe32 feat: add distributed mode (#9124)
* feat: add distributed mode (experimental)

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix data races, mutexes, transactions

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactorings

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fixups

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix events and tool stream in agent chat

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* use ginkgo

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactoring and consolidation

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactoring and consolidation

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactoring and consolidation

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactoring and consolidation

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactoring and consolidation

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactoring and consolidation

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactoring and consolidation

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactoring and consolidation

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(cron): compute correctly time boundaries avoiding re-triggering

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* enhancements, refactorings

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* do not flood of healthy checks

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* do not list obvious backends as text backends

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* tests fixups

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactoring and consolidation

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Drop redundant healthcheck

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* enhancements, refactorings

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-03-30 00:47:27 +02:00

51 lines
1.9 KiB
Go

package skills
import (
skillserver "github.com/mudler/skillserver/pkg/domain"
)
// GitRepoInfo describes a configured git repository for skill sourcing.
type GitRepoInfo struct {
ID string `json:"id"`
URL string `json:"url"`
Name string `json:"name"`
Enabled bool `json:"enabled"`
}
// Manager defines the interface for skill management operations.
// Two implementations exist:
// - FilesystemManager: standalone mode, filesystem-only
// - DistributedManager: distributed mode, filesystem + PostgreSQL sync
//
// Each instance is scoped to a specific user (or global if userID is empty).
type Manager interface {
// Skills CRUD
List() ([]skillserver.Skill, error)
Get(name string) (*skillserver.Skill, error)
Search(query string) ([]skillserver.Skill, error)
Create(name, description, content, license, compatibility, allowedTools string, metadata map[string]string) (*skillserver.Skill, error)
Update(name, description, content, license, compatibility, allowedTools string, metadata map[string]string) (*skillserver.Skill, error)
Delete(name string) error
Export(name string) ([]byte, error)
Import(archiveData []byte) (*skillserver.Skill, error)
// Resources
ListResources(skillName string) ([]skillserver.SkillResource, *skillserver.Skill, error)
GetResource(skillName, path string) (*skillserver.ResourceContent, *skillserver.SkillResource, error)
CreateResource(skillName, path string, data []byte) error
UpdateResource(skillName, path, content string) error
DeleteResource(skillName, path string) error
// Git repos
ListGitRepos() ([]GitRepoInfo, error)
AddGitRepo(repoURL string) (*GitRepoInfo, error)
UpdateGitRepo(id, repoURL string, enabled *bool) (*GitRepoInfo, error)
DeleteGitRepo(id string) error
SyncGitRepo(id string) error
ToggleGitRepo(id string) (*GitRepoInfo, error)
// Config
GetConfig() map[string]string
GetSkillsDir() string
}