@@ -13,6 +13,7 @@ import (
1313 execIO "github.com/flowexec/flow/internal/io/executable"
1414 "github.com/flowexec/flow/internal/io/library"
1515 "github.com/flowexec/flow/internal/logger"
16+ "github.com/flowexec/flow/types/common"
1617 "github.com/flowexec/flow/types/executable"
1718)
1819
@@ -59,6 +60,7 @@ func RegisterBrowseCmd(ctx *context.Context, rootCmd *cobra.Command) {
5960 RegisterFlag (ctx , browseCmd , * flags .FilterTagFlag )
6061 RegisterFlag (ctx , browseCmd , * flags .FilterExecSubstringFlag )
6162 RegisterFlag (ctx , browseCmd , * flags .AllNamespacesFlag )
63+ RegisterFlag (ctx , browseCmd , * flags .VisibilityFlag )
6264 rootCmd .AddCommand (browseCmd )
6365}
6466
@@ -106,6 +108,15 @@ func executableLibrary(ctx *context.Context, cmd *cobra.Command, _ []string) {
106108 tagsFilter := flags .ValueFor [[]string ](cmd , * flags .FilterTagFlag , false )
107109 subStr := flags .ValueFor [string ](cmd , * flags .FilterExecSubstringFlag , false )
108110
111+ visStr := flags .ValueFor [string ](cmd , * flags .VisibilityFlag , false )
112+ visibilityFilter := common .VisibilityPrivate
113+ if visStr != "" {
114+ visibilityFilter = common .Visibility (visStr )
115+ if ! isValidVisibility (visibilityFilter ) {
116+ logger .Log ().Fatalf ("invalid visibility: %s (valid: public, private, internal, hidden)" , visStr )
117+ }
118+ }
119+
109120 allExecs , err := ctx .ExecutableCache .GetExecutableList ()
110121 if err != nil {
111122 logger .Log ().FatalErr (err )
@@ -119,11 +130,12 @@ func executableLibrary(ctx *context.Context, cmd *cobra.Command, _ []string) {
119130 libraryModel := library .NewLibraryView (
120131 ctx , allWs , allExecs ,
121132 library.Filter {
122- Workspace : wsFilter ,
123- Namespace : nsFilter ,
124- Verb : executable .Verb (verbFilter ),
125- Tags : tagsFilter ,
126- Substring : subStr ,
133+ Workspace : wsFilter ,
134+ Namespace : nsFilter ,
135+ Verb : executable .Verb (verbFilter ),
136+ Tags : tagsFilter ,
137+ Substring : subStr ,
138+ Visibility : visibilityFilter ,
127139 },
128140 io .Theme (ctx .Config .Theme .String ()),
129141 runFunc ,
@@ -154,13 +166,22 @@ func listExecutables(ctx *context.Context, cmd *cobra.Command, _ []string) {
154166 outputFormat := flags .ValueFor [string ](cmd , * flags .OutputFormatFlag , false )
155167 substr := flags .ValueFor [string ](cmd , * flags .FilterExecSubstringFlag , false )
156168
169+ visStr := flags .ValueFor [string ](cmd , * flags .VisibilityFlag , false )
170+ visibilityFilter := common .VisibilityPrivate
171+ if visStr != "" {
172+ visibilityFilter = common .Visibility (visStr )
173+ if ! isValidVisibility (visibilityFilter ) {
174+ logger .Log ().Fatalf ("invalid visibility: %s (valid: public, private, internal, hidden)" , visStr )
175+ }
176+ }
177+
157178 allExecs , err := ctx .ExecutableCache .GetExecutableList ()
158179 if err != nil {
159180 logger .Log ().FatalErr (err )
160181 }
161182 filteredExec := allExecs
162183 filteredExec = filteredExec .
163- FilterByWorkspace (wsFilter ).
184+ FilterByWorkspaceWithVisibility (wsFilter , visibilityFilter ).
164185 FilterByNamespace (nsFilter ).
165186 FilterByVerb (executable .Verb (verbFilter )).
166187 FilterByTags (tagsFilter ).
@@ -219,3 +240,12 @@ func viewExecutable(ctx *context.Context, cmd *cobra.Command, args []string) {
219240 execIO .PrintExecutable (outputFormat , exec )
220241 }
221242}
243+
244+ func isValidVisibility (v common.Visibility ) bool {
245+ switch v {
246+ case common .VisibilityPublic , common .VisibilityPrivate , common .VisibilityInternal , common .VisibilityHidden :
247+ return true
248+ default :
249+ return false
250+ }
251+ }
0 commit comments