// registry.go - Tool discovery and shared types. package metadata import ( "encoding/json" "os" "path/filepath" "strings" "ollie/toolsrv/protocol" "ollie/util" ) // ToolsPath returns ~/.config/ollie/tools. func ToolsPath() string { return util.CfgDir() + "/tools" } // DiscoverTools scans the tools directory for .meta files and returns // metadata for all tools. func DiscoverTools() []protocol.ToolInfo { dir := ToolsPath() entries, err := os.ReadDir(dir) if err != nil { return nil } var infos []protocol.ToolInfo for _, e := range entries { if e.IsDir() || !strings.HasSuffix(e.Name(), ".meta") { continue } name := strings.TrimSuffix(e.Name(), ".meta") data, err := os.ReadFile(filepath.Join(dir, e.Name())) if err != nil { continue } var m MetaFile if err := json.Unmarshal(data, &m); err != nil { continue } info := ToolInfoFromMeta(name, &m) if info.Name == "" { continue // no variant matched — tool unavailable on this host } infos = append(infos, info) } return infos }