Documentation
¶
Overview ¶
Package registry manages tenant/project registration with UUID tracking.
The registry provides:
- Human-readable names to UUID mapping for future database migration
- Path sanitization for filesystem safety
- Registration validation and persistence
Directory structure:
~/.config/contextd/vectorstore/
├── {tenant}/ ← org level
│ ├── {project}/ ← direct project
│ │ └── {collections}
│ ├── {team}/ ← team level
│ │ └── {project}/ ← team-scoped project
│ │ └── {collections}
│ ├── memories/ ← org-shared
│ └── remediations/ ← org-shared
Index ¶
- Variables
- func ValidateName(name string) error
- type Entry
- type Registry
- func (r *Registry) BasePath() string
- func (r *Registry) EnsureProjectExists(tenant, team, project string) error
- func (r *Registry) GetOrgPath(tenant string) (string, error)
- func (r *Registry) GetProject(tenant, team, project string) (*Entry, error)
- func (r *Registry) GetProjectPath(tenant, team, project string) (string, error)
- func (r *Registry) GetTeam(tenant, team string) (*Entry, error)
- func (r *Registry) GetTeamPath(tenant, team string) (string, error)
- func (r *Registry) GetTenant(name string) (*Entry, error)
- func (r *Registry) ListProjects(tenant string) []string
- func (r *Registry) ListTenants() []string
- func (r *Registry) RegisterProject(tenant, team, project string) (*Entry, error)
- func (r *Registry) RegisterTeam(tenant, team string) (*Entry, error)
- func (r *Registry) RegisterTenant(name string) (*Entry, error)
- type RegistryData
Constants ¶
This section is empty.
Variables ¶
var ( ErrTenantNotFound = errors.New("tenant not found") ErrProjectNotFound = errors.New("project not found") ErrTeamNotFound = errors.New("team not found") ErrInvalidName = errors.New("invalid name: must be alphanumeric with hyphens/underscores") ErrPathTraversal = errors.New("path traversal detected") ErrRegistryCorrupted = errors.New("registry file corrupted") )
Errors for registry operations.
Functions ¶
func ValidateName ¶
ValidateName checks if a name is safe for filesystem paths.
Types ¶
type Entry ¶
type Entry struct {
UUID string `json:"uuid"`
Name string `json:"name"`
CreatedAt time.Time `json:"created_at"`
}
Entry represents a registered entity (tenant, team, or project).
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry manages tenant/project registration and path resolution.
func NewRegistry ¶
NewRegistry creates a new registry at the specified base path.
func (*Registry) EnsureProjectExists ¶
EnsureProjectExists registers tenant and project if they don't exist. This is a convenience method for auto-registration on first use.
func (*Registry) GetOrgPath ¶
GetOrgPath returns the filesystem path for an org (for org-shared collections).
func (*Registry) GetProject ¶
GetProject returns the project entry.
func (*Registry) GetProjectPath ¶
GetProjectPath returns the filesystem path for a project.
func (*Registry) GetTeamPath ¶
GetTeamPath returns the filesystem path for a team (for shared collections).
func (*Registry) ListProjects ¶
ListProjects returns all registered projects for a tenant.
func (*Registry) ListTenants ¶
ListTenants returns all registered tenant names.
func (*Registry) RegisterProject ¶
RegisterProject registers a new project. If team is empty, registers under tenant directly. If team is set, registers under tenant/team.
func (*Registry) RegisterTeam ¶
RegisterTeam registers a new team under a tenant.
type RegistryData ¶
type RegistryData struct {
Version int `json:"version"`
Tenants map[string]*Entry `json:"tenants"` // key: tenant name
Teams map[string]*Entry `json:"teams"` // key: tenant/team
Projects map[string]*Entry `json:"projects"` // key: tenant/project or tenant/team/project
}
RegistryData is the persisted registry structure.